protected function addCapability(array $capability_data, IOpenStackImplementation $implementation)
 {
     $validator = $this->validator_factory->buildValidatorForCapability($capability_data);
     if ($validator->fails()) {
         return $this->validationError($validator->messages());
     }
     $component = $this->component_repository->getById(intval($capability_data['component_id']));
     if (!$component) {
         throw new NotFoundEntityException('OpenStackComponent', sprintf('id %', intval($capability_data['component_id'])));
     }
     $release = $this->release_repository->getById(intval($capability_data['release_id']));
     if (!$release) {
         throw new NotFoundEntityException('OpenStackRelease', sprintf('id %', intval($capability_data['release_id'])));
     }
     if (!$release->supportsComponent($component->getCodeName())) {
         throw new NonSupportedComponent($release, $component);
     }
     $supported_version = null;
     if ($component->getSupportsVersioning()) {
         $version = $this->api_version_repository->getById(intval($capability_data['version_id']));
         if (!$version) {
             throw new NotFoundEntityException('OpenStackApiVersion', sprintf('id %', intval($capability_data['version_id'])));
         }
         $supported_version = $release->supportsApiVersion($version);
     } else {
         $supported_version = $this->supported_version_repository->getByReleaseAndComponentAndApiVersion(intval($capability_data['release_id']), intval($capability_data['component_id']), 0);
     }
     if (!$supported_version) {
         throw new NotFoundEntityException('OpenStackReleaseSupportedVersion', '');
     }
     $capability = $this->factory->buildCapability(intval($capability_data['coverage']), $supported_version, $implementation);
     $this->registerCapability($implementation, $capability);
 }
 public function getVersion()
 {
     $component_id = (int) $this->request->param('COMPONENT_ID');
     $version_id = (int) $this->request->param('VERSION_ID');
     $version = $this->version_repository->getByIdAndComponent($version_id, $component_id);
     if (!$version) {
         return $this->notFound();
     }
     return $this->ok(self::convertApiVersionToArray($version));
 }
 /**
  * @param int $release_id
  * @param int $component_id
  * @return IOpenStackApiVersion[]
  * @throws NotFoundEntityException
  * @throws InvalidAggregateRootException
  */
 public function getReleaseSupportedVersionsByComponent($release_id, $component_id)
 {
     $release = $this->release_repository->getById($release_id);
     if (!$release) {
         throw new NotFoundEntityException('OpenStackRelease', sprintf('id %s', $release_id));
     }
     $component = $this->component_repository->getById($component_id);
     if (!$component) {
         throw new NotFoundEntityException('OpenStackComponent', sprintf('id %s', $component));
     }
     if (!$release->supportsComponent($component->getCodeName())) {
         throw new InvalidAggregateRootException('OpenStackRelease', $release_id, 'OpenStackComponent', $component_id);
     }
     $res = array();
     foreach ($this->version_repository->getByReleaseAndComponent($release_id, $component_id) as $version) {
         if ($release->supportsApiVersion($version)) {
             array_push($res, $version);
         }
     }
     return $res;
 }