コード例 #1
0
 public function processRequest()
 {
     $request = $this->getRequest();
     $viewer = $request->getUser();
     $this->requireApplicationCapability(DrydockCreateBlueprintsCapability::CAPABILITY);
     $implementations = DrydockBlueprintImplementation::getAllBlueprintImplementations();
     $errors = array();
     $e_blueprint = null;
     if ($request->isFormPost()) {
         $class = $request->getStr('blueprint-type');
         if (!isset($implementations[$class])) {
             $e_blueprint = pht('Required');
             $errors[] = pht('You must choose a blueprint type.');
         }
         if (!$errors) {
             $edit_uri = $this->getApplicationURI('blueprint/edit/?class=' . $class);
             return id(new AphrontRedirectResponse())->setURI($edit_uri);
         }
     }
     $control = id(new AphrontFormRadioButtonControl())->setName('blueprint-type')->setLabel(pht('Blueprint Type'))->setError($e_blueprint);
     foreach ($implementations as $implementation_name => $implementation) {
         $disabled = !$implementation->isEnabled();
         $control->addButton($implementation_name, $implementation->getBlueprintName(), array(pht('Provides: %s', $implementation->getType()), phutil_tag('br'), phutil_tag('br'), $implementation->getDescription()), $disabled ? 'disabled' : null, $disabled);
     }
     $title = pht('Create New Blueprint');
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb(pht('New Blueprint'));
     $form = id(new AphrontFormView())->setUser($viewer)->appendChild($control)->appendChild(id(new AphrontFormSubmitControl())->addCancelButton($this->getApplicationURI('blueprint/'))->setValue(pht('Continue')));
     $box = id(new PHUIObjectBoxView())->setFormErrors($errors)->setHeaderText($title)->setForm($form);
     return $this->buildApplicationPage(array($crumbs, $box), array('title' => $title));
 }
コード例 #2
0
 private function buildTypeSelectionResponse()
 {
     $request = $this->getRequest();
     $viewer = $this->getViewer();
     $implementations = DrydockBlueprintImplementation::getAllBlueprintImplementations();
     $errors = array();
     $e_blueprint = null;
     if ($request->isFormPost()) {
         $class = $request->getStr('blueprintType');
         if (!isset($implementations[$class])) {
             $e_blueprint = pht('Required');
             $errors[] = pht('You must choose a blueprint type.');
         }
     }
     $control = id(new AphrontFormRadioButtonControl())->setName('blueprintType')->setLabel(pht('Blueprint Type'))->setError($e_blueprint);
     foreach ($implementations as $implementation_name => $implementation) {
         $disabled = !$implementation->isEnabled();
         $impl_icon = $implementation->getBlueprintIcon();
         $impl_name = $implementation->getBlueprintName();
         $impl_icon = id(new PHUIIconView())->setIcon($impl_icon, 'lightgreytext');
         $control->addButton($implementation_name, array($impl_icon, ' ', $impl_name), array(pht('Provides: %s', $implementation->getType()), phutil_tag('br'), phutil_tag('br'), $implementation->getDescription()), $disabled ? 'disabled' : null, $disabled);
     }
     $title = pht('Create New Blueprint');
     $crumbs = $this->buildApplicationCrumbs();
     $crumbs->addTextCrumb(pht('New Blueprint'));
     $form = id(new AphrontFormView())->setUser($viewer)->appendChild($control)->appendChild(id(new AphrontFormSubmitControl())->addCancelButton($this->getApplicationURI('blueprint/'))->setValue(pht('Continue')));
     $box = id(new PHUIObjectBoxView())->setFormErrors($errors)->setHeaderText($title)->setForm($form);
     return $this->newPage()->setTitle($title)->setCrumbs($crumbs)->appendChild($box);
 }
コード例 #3
0
 public function getImplementation()
 {
     $class = $this->className;
     $implementations = DrydockBlueprintImplementation::getAllBlueprintImplementations();
     if (!isset($implementations[$class])) {
         throw new Exception(pht("Invalid class name for blueprint (got '%s')", $class));
     }
     return id(new $class())->attachInstance($this);
 }
コード例 #4
0
 protected function loadPage()
 {
     $table = new DrydockBlueprint();
     $conn_r = $table->establishConnection('r');
     $data = queryfx_all($conn_r, 'SELECT blueprint.* FROM %T blueprint %Q %Q %Q', $table->getTableName(), $this->buildWhereClause($conn_r), $this->buildOrderClause($conn_r), $this->buildLimitClause($conn_r));
     $blueprints = $table->loadAllFromArray($data);
     $implementations = DrydockBlueprintImplementation::getAllBlueprintImplementations();
     foreach ($blueprints as $blueprint) {
         if (array_key_exists($blueprint->getClassName(), $implementations)) {
             $blueprint->attachImplementation($implementations[$blueprint->getClassName()]);
         }
     }
     return $blueprints;
 }
コード例 #5
0
 protected function willFilterPage(array $blueprints)
 {
     $impls = DrydockBlueprintImplementation::getAllBlueprintImplementations();
     foreach ($blueprints as $key => $blueprint) {
         $impl = idx($impls, $blueprint->getClassName());
         if (!$impl) {
             $this->didRejectResult($blueprint);
             unset($blueprints[$key]);
             continue;
         }
         $impl = clone $impl;
         $blueprint->attachImplementation($impl);
     }
     return $blueprints;
 }
コード例 #6
0
 /**
  * Get all the @{class:DrydockBlueprintImplementation}s which can possibly
  * build a resource to satisfy a lease.
  *
  * This method returns blueprints which might, at some time, be able to
  * build a resource which can satisfy the lease. They may not be able to
  * build that resource right now.
  *
  * @param DrydockLease Requested lease.
  * @return list<DrydockBlueprintImplementation> List of qualifying blueprint
  *   implementations.
  * @task allocator
  */
 private function loadBlueprintImplementationsForAllocatingLease(DrydockLease $lease)
 {
     $impls = DrydockBlueprintImplementation::getAllBlueprintImplementations();
     $keep = array();
     foreach ($impls as $key => $impl) {
         // Don't use disabled blueprint types.
         if (!$impl->isEnabled()) {
             continue;
         }
         // Don't use blueprint types which can't allocate the correct kind of
         // resource.
         if ($impl->getType() != $lease->getResourceType()) {
             continue;
         }
         if (!$impl->canAnyBlueprintEverAllocateResourceForLease($lease)) {
             continue;
         }
         $keep[$key] = $impl;
     }
     return $keep;
 }
コード例 #7
0
 public function testGetAllBlueprintImplementations()
 {
     DrydockBlueprintImplementation::getAllBlueprintImplementations();
     $this->assertTrue(true);
 }