[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/harbormaster/editor/ -> HarbormasterBuildTransactionEditor.php (source)

   1  <?php
   2  
   3  final class HarbormasterBuildTransactionEditor
   4    extends PhabricatorApplicationTransactionEditor {
   5  
   6    public function getEditorApplicationClass() {
   7      return 'PhabricatorHarbormasterApplication';
   8    }
   9  
  10    public function getEditorObjectsDescription() {
  11      return pht('Harbormaster Builds');
  12    }
  13  
  14    public function getTransactionTypes() {
  15      $types = parent::getTransactionTypes();
  16  
  17      $types[] = HarbormasterBuildTransaction::TYPE_CREATE;
  18      $types[] = HarbormasterBuildTransaction::TYPE_COMMAND;
  19  
  20      return $types;
  21    }
  22  
  23    protected function getCustomTransactionOldValue(
  24      PhabricatorLiskDAO $object,
  25      PhabricatorApplicationTransaction $xaction) {
  26  
  27      switch ($xaction->getTransactionType()) {
  28        case HarbormasterBuildTransaction::TYPE_CREATE:
  29        case HarbormasterBuildTransaction::TYPE_COMMAND:
  30          return null;
  31      }
  32  
  33      return parent::getCustomTransactionOldValue($object, $xaction);
  34    }
  35  
  36    protected function getCustomTransactionNewValue(
  37      PhabricatorLiskDAO $object,
  38      PhabricatorApplicationTransaction $xaction) {
  39  
  40      switch ($xaction->getTransactionType()) {
  41        case HarbormasterBuildTransaction::TYPE_CREATE:
  42          return true;
  43        case HarbormasterBuildTransaction::TYPE_COMMAND:
  44          return $xaction->getNewValue();
  45      }
  46  
  47      return parent::getCustomTransactionNewValue($object, $xaction);
  48    }
  49  
  50    protected function applyCustomInternalTransaction(
  51      PhabricatorLiskDAO $object,
  52      PhabricatorApplicationTransaction $xaction) {
  53  
  54      switch ($xaction->getTransactionType()) {
  55        case HarbormasterBuildTransaction::TYPE_CREATE:
  56          return;
  57        case HarbormasterBuildTransaction::TYPE_COMMAND:
  58          return $this->executeBuildCommand($object, $xaction);
  59      }
  60  
  61      return parent::applyCustomInternalTransaction($object, $xaction);
  62    }
  63  
  64    private function executeBuildCommand(
  65      HarbormasterBuild $build,
  66      HarbormasterBuildTransaction $xaction) {
  67  
  68      $command = $xaction->getNewValue();
  69  
  70      switch ($command) {
  71        case HarbormasterBuildCommand::COMMAND_RESTART:
  72          $issuable = $build->canRestartBuild();
  73          break;
  74        case HarbormasterBuildCommand::COMMAND_STOP:
  75          $issuable = $build->canStopBuild();
  76          break;
  77        case HarbormasterBuildCommand::COMMAND_RESUME:
  78          $issuable = $build->canResumeBuild();
  79          break;
  80        default:
  81          throw new Exception("Unknown command $command");
  82      }
  83  
  84      if (!$issuable) {
  85        return;
  86      }
  87  
  88      id(new HarbormasterBuildCommand())
  89        ->setAuthorPHID($xaction->getAuthorPHID())
  90        ->setTargetPHID($build->getPHID())
  91        ->setCommand($command)
  92        ->save();
  93  
  94      PhabricatorWorker::scheduleTask(
  95        'HarbormasterBuildWorker',
  96        array(
  97          'buildID' => $build->getID(),
  98        ));
  99    }
 100  
 101    protected function applyCustomExternalTransaction(
 102      PhabricatorLiskDAO $object,
 103      PhabricatorApplicationTransaction $xaction) {
 104  
 105      switch ($xaction->getTransactionType()) {
 106        case HarbormasterBuildTransaction::TYPE_CREATE:
 107        case HarbormasterBuildTransaction::TYPE_COMMAND:
 108          return;
 109      }
 110  
 111      return parent::applyCustomExternalTransaction($object, $xaction);
 112    }
 113  
 114  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1