diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1662,6 +1662,7 @@ 'HeraldTranscriptListController' => 'applications/herald/controller/HeraldTranscriptListController.php', 'HeraldTranscriptPHIDType' => 'applications/herald/phid/HeraldTranscriptPHIDType.php', 'HeraldTranscriptQuery' => 'applications/herald/query/HeraldTranscriptQuery.php', + 'HeraldTranscriptResult' => 'applications/herald/storage/transcript/HeraldTranscriptResult.php', 'HeraldTranscriptSearchEngine' => 'applications/herald/query/HeraldTranscriptSearchEngine.php', 'HeraldTranscriptTestCase' => 'applications/herald/storage/__tests__/HeraldTranscriptTestCase.php', 'HeraldUtilityActionGroup' => 'applications/herald/action/HeraldUtilityActionGroup.php', @@ -7794,7 +7795,7 @@ 'HarbormasterBuildableAdapterInterface', ), 'HeraldCondition' => 'HeraldDAO', - 'HeraldConditionResult' => 'Phobject', + 'HeraldConditionResult' => 'HeraldTranscriptResult', 'HeraldConditionTranscript' => 'Phobject', 'HeraldContentSourceField' => 'HeraldField', 'HeraldController' => 'PhabricatorController', @@ -7905,6 +7906,7 @@ 'HeraldTranscriptListController' => 'HeraldController', 'HeraldTranscriptPHIDType' => 'PhabricatorPHIDType', 'HeraldTranscriptQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'HeraldTranscriptResult' => 'Phobject', 'HeraldTranscriptSearchEngine' => 'PhabricatorApplicationSearchEngine', 'HeraldTranscriptTestCase' => 'PhabricatorTestCase', 'HeraldUtilityActionGroup' => 'HeraldActionGroup', diff --git a/src/applications/herald/storage/transcript/HeraldConditionResult.php b/src/applications/herald/storage/transcript/HeraldConditionResult.php --- a/src/applications/herald/storage/transcript/HeraldConditionResult.php +++ b/src/applications/herald/storage/transcript/HeraldConditionResult.php @@ -1,7 +1,7 @@ $this->getResultCode(), - 'data' => $this->getResultData(), - ); - } - - public static function newFromMap(array $map) { - $result_code = idx($map, 'code'); - $result = self::newFromResultCode($result_code); - - $result_data = idx($map, 'data', array()); - $result->setResultData($result_data); - - return $result; - } - public static function newFromResultCode($result_code) { - $map = self::getResultSpecification($result_code); - - $result = new self(); - $result->resultCode = $result_code; - - return $result; - } - - public function getResultCode() { - return $this->resultCode; - } - - private function getResultData() { - return $this->resultData; + return id(new self())->setResultCode($result_code); } - public function getIconIcon() { - return $this->getSpecificationProperty('icon'); - } - - public function getIconColor() { - return $this->getSpecificationProperty('color.icon'); + public static function newFromResultMap(array $map) { + return id(new self())->loadFromResultMap($map); } public function getIsMatch() { return ($this->getSpecificationProperty('match') === true); } - public function getName() { - return $this->getSpecificationProperty('name'); - } - public function newDetailsView() { - switch ($this->resultCode) { + switch ($this->getResultCode()) { case self::RESULT_OBJECT_STATE: $reason = $this->getDataProperty('reason'); $details = HeraldStateReasons::getExplanation($reason); @@ -105,35 +64,7 @@ return $details; } - public function setResultData(array $result_data) { - $this->resultData = $result_data; - return $this; - } - - private function getDataProperty($key) { - $data = $this->getResultData(); - return idx($data, $key); - } - - private function getSpecificationProperty($key) { - $map = self::getResultSpecification($this->resultCode); - return $map[$key]; - } - - private static function getResultSpecification($result_code) { - $map = self::getResultSpecificationMap(); - - if (!isset($map[$result_code])) { - throw new Exception( - pht( - 'Condition result "%s" is unknown.', - $result_code)); - } - - return $map[$result_code]; - } - - private static function getResultSpecificationMap() { + protected function newResultSpecificationMap() { return array( self::RESULT_MATCHED => array( 'match' => true, diff --git a/src/applications/herald/storage/transcript/HeraldConditionTranscript.php b/src/applications/herald/storage/transcript/HeraldConditionTranscript.php --- a/src/applications/herald/storage/transcript/HeraldConditionTranscript.php +++ b/src/applications/herald/storage/transcript/HeraldConditionTranscript.php @@ -65,7 +65,7 @@ } public function setResult(HeraldConditionResult $result) { - $this->resultMap = $result->toMap(); + $this->resultMap = $result->newResultMap(); return $this; } @@ -73,7 +73,7 @@ $map = $this->resultMap; if (is_array($map)) { - $result = HeraldConditionResult::newFromMap($map); + $result = HeraldConditionResult::newFromResultMap($map); } else { $legacy_result = $this->result; diff --git a/src/applications/herald/storage/transcript/HeraldTranscriptResult.php b/src/applications/herald/storage/transcript/HeraldTranscriptResult.php new file mode 100644 --- /dev/null +++ b/src/applications/herald/storage/transcript/HeraldTranscriptResult.php @@ -0,0 +1,82 @@ +resultCode = $result_code; + return $this; + } + + final protected function loadFromResultMap(array $map) { + $result_code = idx($map, 'code'); + $result_data = idx($map, 'data', array()); + + $this + ->setResultCode($result_code) + ->setResultData($result_data); + + return $this; + } + + final public function getResultCode() { + return $this->resultCode; + } + + final protected function getResultData() { + return $this->resultData; + } + + final public function setResultData(array $result_data) { + $this->resultData = $result_data; + return $this; + } + + final public function getIconIcon() { + return $this->getSpecificationProperty('icon'); + } + + final public function getIconColor() { + return $this->getSpecificationProperty('color.icon'); + } + + final public function getName() { + return $this->getSpecificationProperty('name'); + } + + final protected function getDataProperty($key) { + $data = $this->getResultData(); + return idx($data, $key); + } + + final public function newResultMap() { + return array( + 'code' => $this->getResultCode(), + 'data' => $this->getResultData(), + ); + } + + final protected function getSpecificationProperty($key) { + $map = $this->getResultSpecification($this->getResultCode()); + return $map[$key]; + } + + final protected function getResultSpecification($result_code) { + $map = $this->newResultSpecificationMap(); + + if (!isset($map[$result_code])) { + throw new Exception( + pht( + 'Result code "%s" is unknown.', + $result_code)); + } + + return $map[$result_code]; + } + + abstract protected function newResultSpecificationMap(); + +}