workflowNode = $workflowNode; $this->em = $this->workflowNode->getEntityManager(); } /** * Utility to construct options object from meta data. * @param array $meta * @return \Workspace\UseCase\Options */ protected function buildOptions(array $meta){ $options = new \Workspace\UseCase\Options(); if (isset($meta['Options']) && !empty($meta['Options'])) { if (isset($meta['Options']['Boolean']) && !empty($meta['Options']['Boolean'])) { foreach ($meta['Options']['Boolean'] as $option => $default) { $options->optBoolean($option, $default); } } isset($meta['Options']['OneFromList']) && !empty($meta['Options']['OneFromList']) && $options->optOneFromList( $meta['Options']['OneFromList']['Name'], $meta['Options']['OneFromList']['List'], $meta['Options']['OneFromList']['Default'] ); isset($meta['Options']['ManyFromList']) && !empty($meta['Options']['ManyFromList']) && $options->optManyFromList( $meta['Options']['ManyFromList']['Name'], $meta['Options']['ManyFromList']['List'], $meta['Options']['ManyFromList']['Default'] ); } return $options; } /** * Utility to construct requirements object from meta data. * @param array $meta * @return \Workspace\UseCase\Requirement */ protected function buildRequirements(array $meta){ $requirement = new \Workspace\UseCase\Requirement(); isset($meta['RequiredInput']) && !empty($meta['RequiredInput']) && $requirement->addRequiredInput($meta['RequiredInput']); isset($meta['OptionalInput']) && !empty($meta['OptionalInput']) && $requirement->addOptionalInput($meta['OptionalInput']); return $requirement; } /** * Utility to construct conditional case object(s) from meta data and attach to contract. * @param \Workspace\Contract\AbstractBase $contract * @param array $meta * @return \Workspace\Contract\AbstractBase */ protected function buildConditions(\Workspace\Contract\AbstractBase $contract, array $meta) { if (isset($meta['Conditions']) && !empty ($meta['Conditions'])) { foreach ($meta['Conditions'] as $name => $conditionMeta) { $condition = (isset($conditionMeta['Base']) && 'Or' == $conditionMeta['Base']) ? new \Workspace\UseCase\ConditionOrBase() : new \Workspace\UseCase\ConditionAndBase(); foreach ($conditionMeta['Condition'] as $newCondition) { isset($newCondition['Type']) || $newCondition['Type'] = 'equal'; switch ($newCondition['Type']) { case 'notEqual': $condition->notEqual($newCondition['Field'], $newCondition['Value']); break; case 'smallerThan': $condition->smallerThan($newCondition['Field'], $newCondition['Value']); break; case 'greaterThan': $condition->greaterThan($newCondition['Field'], $newCondition['Value']); break; case 'oneOf': $condition->oneOf($newCondition['Field'], $newCondition['Value']); break; case 'notOneOf': $condition->notOneOf($newCondition['Field'], $newCondition['Value']); break; case 'equal': default: $condition->equal($newCondition['Field'], $newCondition['Value']); break; } } $requirement = new \Workspace\UseCase\Requirement(); $requirement->addRequiredInput($conditionMeta['RequiredInput']); isset($conditionMeta['OptionalInput']) && !empty($conditionMeta['OptionalInput']) && $requirement->addOptionalInput($conditionMeta['OptionalInput']); $contract->addConditionalCase($name, $condition, $requirement); } } return $contract; } }