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)); }
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); }
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); }
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; }
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; }
/** * 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; }
public function testGetAllBlueprintImplementations() { DrydockBlueprintImplementation::getAllBlueprintImplementations(); $this->assertTrue(true); }