2 * Copyright © 2016-2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.openecomp.sdc.be.components.impl;
19 import fj.data.Either;
20 import org.apache.commons.collections.CollectionUtils;
21 import org.apache.commons.lang.StringUtils;
22 import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
23 import org.openecomp.sdc.be.components.validation.RequirementValidation;
24 import org.openecomp.sdc.be.dao.api.ActionStatus;
25 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
26 import org.openecomp.sdc.be.model.ComponentParametersView;
27 import org.openecomp.sdc.be.model.RequirementDefinition;
28 import org.openecomp.sdc.be.model.User;
29 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ArtifactsOperations;
30 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.InterfaceOperation;
31 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.RequirementOperation;
32 import org.openecomp.sdc.be.model.operations.api.IElementOperation;
33 import org.openecomp.sdc.be.model.operations.api.IGroupInstanceOperation;
34 import org.openecomp.sdc.be.model.operations.api.IGroupOperation;
35 import org.openecomp.sdc.be.model.operations.api.IGroupTypeOperation;
36 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
37 import org.openecomp.sdc.be.model.operations.impl.InterfaceLifecycleOperation;
38 import org.openecomp.sdc.exception.ResponseFormat;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
41 import org.springframework.beans.factory.annotation.Autowired;
42 import org.springframework.stereotype.Component;
44 import java.util.ArrayList;
45 import java.util.Collection;
46 import java.util.Collections;
47 import java.util.List;
49 import java.util.Objects;
50 import java.util.Optional;
51 import java.util.UUID;
52 import java.util.stream.Collectors;
54 @Component("requirementBusinessLogic")
55 public class RequirementBusinessLogic extends BaseBusinessLogic {
56 private static final Logger LOGGER = LoggerFactory.getLogger(RequirementBusinessLogic.class);
57 private static final String FAILED_TO_LOCK_COMPONENT_RESPONSE_IS
58 = "Failed to lock component {}. Response is {}";
59 private static final String DELETE_REQUIREMENTS = "deleteRequirement";
60 private static final String GET_REQUIREMENTS = "getRequirements";
61 private static final String EXCEPTION_OCCURRED_DURING_REQUIREMENTS
62 = "Exception occurred during {}. Response is {}";
64 private RequirementOperation requirementOperation;
65 private RequirementValidation requirementValidation;
68 public RequirementBusinessLogic(IElementOperation elementDao,
69 IGroupOperation groupOperation,
70 IGroupInstanceOperation groupInstanceOperation,
71 IGroupTypeOperation groupTypeOperation,
72 InterfaceOperation interfaceOperation,
73 InterfaceLifecycleOperation interfaceLifecycleTypeOperation,
74 ArtifactsOperations artifactToscaOperation) {
75 super(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation,
76 interfaceOperation, interfaceLifecycleTypeOperation, artifactToscaOperation);
80 public void setRequirementOperation(RequirementOperation requirementOperation) {
81 this.requirementOperation = requirementOperation;
85 public void setRequirementValidation(RequirementValidation requirementValidation) {
86 this.requirementValidation = requirementValidation;
89 public Either<List<RequirementDefinition>, ResponseFormat> createRequirements(
90 String componentId, List<RequirementDefinition> requirementDefinitions,
91 User user, String errorContext, boolean lock) {
92 validateUserExists(user.getUserId());
93 Either<org.openecomp.sdc.be.model.Component, ResponseFormat> componentEither
94 = getComponentDetails(componentId);
95 if (componentEither.isRight()) {
96 return Either.right(componentEither.right().value());
98 org.openecomp.sdc.be.model.Component storedComponent = componentEither.left().value();
100 Either<Boolean, ResponseFormat> requirementsValidationEither = requirementValidation
101 .validateRequirements(requirementDefinitions, storedComponent, false);
102 if (requirementsValidationEither.isRight()) {
103 return Either.right(requirementsValidationEither.right().value());
106 Either<Boolean, ResponseFormat> lockResult = lockComponentResult(lock,
107 storedComponent, errorContext);
108 if (lockResult.isRight()) {
109 return Either.right(lockResult.right().value());
113 Either<List<RequirementDefinition>, StorageOperationStatus> result;
114 List<RequirementDefinition> requirementsListStoredInComponent = null;
115 Map<String, List<RequirementDefinition>> storedComponentRequirements
116 = storedComponent.getRequirements();
117 if (org.apache.commons.collections.MapUtils.isNotEmpty(storedComponentRequirements)) {
118 RequirementDefinition requirementDefinitionToGetType = requirementDefinitions.get(0);
119 if(Objects.isNull(requirementDefinitionToGetType)) {
120 return Either.right(componentsUtils.getResponseFormat(ActionStatus.INVALID_CONTENT));
122 requirementsListStoredInComponent
123 = getRequirementStoredInComponentByType(requirementDefinitionToGetType
124 .getCapability(), storedComponentRequirements);
126 List<RequirementDefinition> requirementsToReturn;
127 if (org.apache.commons.collections.CollectionUtils
128 .isNotEmpty(requirementsListStoredInComponent)) {
129 List<RequirementDefinition> requirementDefToCreate = requirementDefinitions.stream()
130 .map(requirementDefinition -> initiateNewRequirement(storedComponent, requirementDefinition))
131 .collect(Collectors.toList());
132 requirementsToReturn = requirementDefToCreate;
133 requirementDefToCreate.addAll(requirementsListStoredInComponent);
134 result = requirementOperation.updateRequirement(componentId, requirementDefToCreate);
136 requirementsToReturn = requirementDefinitions.stream().map(requirementDefinition ->
137 initiateNewRequirement(storedComponent, requirementDefinition))
138 .collect(Collectors.toList());
139 result = requirementOperation.addRequirement(componentId, requirementsToReturn);
141 if (result.isRight()) {
142 janusGraphDao.rollback();
143 return Either.right(componentsUtils.getResponseFormat(
144 componentsUtils.convertFromStorageResponse(result.right().value(),
145 storedComponent.getComponentType()), ""));
147 janusGraphDao.commit();
148 return Either.left(requirementsToReturn);
149 } catch (Exception e) {
150 janusGraphDao.rollback();
151 LOGGER.error(EXCEPTION_OCCURRED_DURING_REQUIREMENTS, "addOrUpdate", e);
152 return Either.right(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR));
154 if (lockResult.isLeft() && lockResult.left().value()) {
155 graphLockOperation.unlockComponent(storedComponent.getUniqueId(),
156 NodeTypeEnum.getByNameIgnoreCase(storedComponent.getComponentType().getValue()));
161 public Either<List<RequirementDefinition>, ResponseFormat> updateRequirements(
162 String componentId, List<RequirementDefinition> requirementDefinitions,
163 User user, String errorContext, boolean lock) {
164 validateUserExists(user.getUserId());
165 Either<org.openecomp.sdc.be.model.Component, ResponseFormat> componentEither
166 = getComponentDetails(componentId);
167 if (componentEither.isRight()) {
168 return Either.right(componentEither.right().value());
170 org.openecomp.sdc.be.model.Component storedComponent = componentEither.left().value();
172 Either<Boolean, ResponseFormat> requirementsValidationEither = requirementValidation
173 .validateRequirements(requirementDefinitions, storedComponent, true);
174 if (requirementsValidationEither.isRight()) {
175 return Either.right(requirementsValidationEither.right().value());
178 Either<Boolean, ResponseFormat> lockResult = lockComponentResult(lock,
179 storedComponent, errorContext);
180 if (lockResult.isRight()) {
181 return Either.right(lockResult.right().value());
184 Either<List<RequirementDefinition>, StorageOperationStatus> result;
185 List<RequirementDefinition> requirementsListStoredInComponent = null;
186 Map<String, List<RequirementDefinition>> storedComponentRequirements
187 = storedComponent.getRequirements();
188 if (org.apache.commons.collections.MapUtils.isNotEmpty(storedComponentRequirements)) {
189 RequirementDefinition requirementDefinitionToGetType = requirementDefinitions.get(0);
190 if(Objects.isNull(requirementDefinitionToGetType)) {
191 return Either.right(componentsUtils.getResponseFormat(ActionStatus.INVALID_CONTENT));
193 requirementsListStoredInComponent
194 = getRequirementStoredInComponentByType(requirementDefinitionToGetType
195 .getCapability(), storedComponentRequirements);
197 List<RequirementDefinition> requirementsToReturn = null;
198 if (org.apache.commons.collections.CollectionUtils
199 .isNotEmpty(requirementsListStoredInComponent)) {
200 List<RequirementDefinition> requirementDefToUpdate = new ArrayList<>();
201 if (requirementDefinitions.stream().anyMatch(requirementDefinition ->
202 isRequirementUsedInServiceComposition(requirementDefinition, storedComponent))) {
203 LOGGER.error("Requirement can't be edited, since it is used in service composition");
204 return Either.right(componentsUtils.getResponseFormat(ActionStatus
205 .REQUIREMENT_UPDATE_NOT_ALLOWED_USED_IN_COMPOSITION));
207 for (RequirementDefinition requirementDefinitionToUpdate : requirementDefinitions) {
208 requirementsToReturn = requirementsListStoredInComponent.stream()
209 .filter(reqToUpdate -> reqToUpdate.getUniqueId()
210 .equals(requirementDefinitionToUpdate.getUniqueId()))
211 .map(requirementDefinition -> updateRequirement(requirementDefinition,
212 requirementDefinitionToUpdate)).collect(Collectors.toList());
213 requirementsListStoredInComponent.removeIf(reqToUpdate ->
214 reqToUpdate.getUniqueId().equals(requirementDefinitionToUpdate.getUniqueId()));
216 if (CollectionUtils.isNotEmpty(requirementsToReturn)) {
217 requirementsListStoredInComponent.addAll(requirementsToReturn);
218 requirementDefToUpdate.addAll(requirementsListStoredInComponent);
220 Either<List<RequirementDefinition>, ResponseFormat> updateCapTypeEither
221 = handleUpdateRequirementCapabilityWhenNewCapabilityExist(storedComponent,
222 storedComponentRequirements,
223 requirementsToReturn, requirementDefinitionToUpdate);
224 if (updateCapTypeEither.isRight()) {
225 return Either.right(updateCapTypeEither.right().value());
227 requirementDefToUpdate = updateCapTypeEither.left().value();
230 result = requirementOperation.updateRequirement(componentId, requirementDefToUpdate);
232 Either<List<RequirementDefinition>, ResponseFormat> requirementDefinitionToDelete
233 = handleRequirementCapabilityUpdateWhenNewCapabilityNotExist(requirementDefinitions,
234 storedComponent, storedComponentRequirements);
235 if (requirementDefinitionToDelete != null) {
236 return requirementDefinitionToDelete;
238 requirementsToReturn = requirementDefinitions.stream().map(requirementDefinition ->
239 initiateNewRequirement(storedComponent, requirementDefinition))
240 .collect(Collectors.toList());
241 result = requirementOperation.addRequirement(componentId, requirementsToReturn);
243 if (result.isRight()) {
244 janusGraphDao.rollback();
245 return Either.right(componentsUtils.getResponseFormat(
246 componentsUtils.convertFromStorageResponse(result.right().value(),
247 storedComponent.getComponentType()), ""));
249 janusGraphDao.commit();
250 return Either.left(requirementsToReturn);
251 } catch (Exception e) {
252 janusGraphDao.rollback();
253 LOGGER.error(EXCEPTION_OCCURRED_DURING_REQUIREMENTS, "addOrUpdate", e);
254 return Either.right(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR));
256 if (lockResult.isLeft() && lockResult.left().value()) {
257 graphLockOperation.unlockComponent(storedComponent.getUniqueId(),
258 NodeTypeEnum.getByNameIgnoreCase(storedComponent.getComponentType().getValue()));
263 private Either<List<RequirementDefinition>, ResponseFormat> handleUpdateRequirementCapabilityWhenNewCapabilityExist(
264 org.openecomp.sdc.be.model.Component storedComponent,
265 Map<String, List<RequirementDefinition>> storedComponentRequirements,
266 List<RequirementDefinition> requirementsToReturn,
267 RequirementDefinition requirementDefinitionToUpdate) {
268 List<RequirementDefinition> requirementsListStoredInComponent;
269 List<RequirementDefinition> requirementDefsToCreateOrUpdate = new ArrayList<>();
270 Optional<RequirementDefinition> definitionOptional = storedComponentRequirements
271 .values().stream().flatMap(Collection::stream)
272 .filter(requirementDefinition -> requirementDefinition.getUniqueId()
273 .equals(requirementDefinitionToUpdate.getUniqueId())).findAny();
274 if (!definitionOptional.isPresent()) {
275 return Either.right(componentsUtils.getResponseFormat(
276 ActionStatus.REQUIREMENT_NOT_FOUND, storedComponent.getUniqueId()));
278 RequirementDefinition requirementDefinitionToDelete = definitionOptional.get();
280 requirementsListStoredInComponent = getRequirementStoredInComponentByType(
281 requirementDefinitionToUpdate.getCapability(), storedComponentRequirements);
282 Either<List<RequirementDefinition>, StorageOperationStatus> deleteRequirementEither
283 = deleteRequirement(storedComponent, storedComponentRequirements, requirementDefinitionToDelete);
284 if (deleteRequirementEither.isRight()) {
285 janusGraphDao.rollback();
286 return Either.right(componentsUtils.getResponseFormat(deleteRequirementEither.right().value()));
288 requirementsToReturn.add(initiateNewRequirement(storedComponent, requirementDefinitionToUpdate));
290 requirementDefsToCreateOrUpdate.addAll(requirementsToReturn);
291 requirementDefsToCreateOrUpdate.addAll(requirementsListStoredInComponent);
292 return Either.left(requirementDefsToCreateOrUpdate);
295 private Either<List<RequirementDefinition>, ResponseFormat> handleRequirementCapabilityUpdateWhenNewCapabilityNotExist(
296 List<RequirementDefinition> requirementDefinitions,
297 org.openecomp.sdc.be.model.Component storedComponent,
298 Map<String, List<RequirementDefinition>> storedComponentRequirements) {
299 for (RequirementDefinition requirementDefinitionToUpdate : requirementDefinitions) {
301 Optional<RequirementDefinition> definitionOptional = storedComponentRequirements
302 .values().stream().flatMap(Collection::stream)
303 .filter(requirementDefinition -> requirementDefinition.getUniqueId()
304 .equals(requirementDefinitionToUpdate.getUniqueId())).findAny();
305 if (!definitionOptional.isPresent()) {
306 return Either.right(componentsUtils.getResponseFormat(
307 ActionStatus.REQUIREMENT_NOT_FOUND, storedComponent.getUniqueId()));
309 RequirementDefinition requirementDefinitionToDelete = definitionOptional.get();
310 Boolean isRequirementUsedInServiceComposition
311 = isRequirementUsedInServiceComposition(requirementDefinitionToDelete, storedComponent);
312 if (isRequirementUsedInServiceComposition) {
313 LOGGER.error("Requirement {} can't be edited, since it is used in service composition",
314 requirementDefinitionToDelete.getUniqueId());
315 return Either.right(componentsUtils.getResponseFormat(ActionStatus
316 .REQUIREMENT_UPDATE_NOT_ALLOWED_USED_IN_COMPOSITION,
317 requirementDefinitionToDelete.getName()));
319 Either<List<RequirementDefinition>, StorageOperationStatus> deleteRequirementEither
320 = deleteRequirement(storedComponent, storedComponentRequirements, requirementDefinitionToDelete);
321 if (deleteRequirementEither.isRight()) {
322 janusGraphDao.rollback();
323 return Either.right(componentsUtils.getResponseFormat(deleteRequirementEither.right().value()));
329 public Either<RequirementDefinition, ResponseFormat> getRequirement(String componentId,
330 String requirementIdToGet, User user, boolean lock) {
331 validateUserExists(user.getUserId());
332 Either<org.openecomp.sdc.be.model.Component, ResponseFormat> componentEither = getComponentDetails(componentId);
333 if (componentEither.isRight()) {
334 return Either.right(componentEither.right().value());
336 org.openecomp.sdc.be.model.Component storedComponent = componentEither.left().value();
338 Either<Boolean, ResponseFormat> lockResult = lockComponentResult(lock, storedComponent, GET_REQUIREMENTS);
339 if (lockResult.isRight()) {
340 return Either.right(lockResult.right().value());
344 List<RequirementDefinition> requirementDefinitions = storedComponent.getRequirements().values().stream()
345 .flatMap(Collection::stream).collect(Collectors.toList());
346 if (requirementDefinitions.isEmpty()) {
347 return Either.right(componentsUtils.getResponseFormat(ActionStatus.REQUIREMENT_NOT_FOUND, componentId));
350 RequirementDefinition requirementDefinitionToReturn;
351 Optional<RequirementDefinition> requirementDefinitionOptional = requirementDefinitions.stream()
352 .filter(requirementDefinition -> requirementDefinition.getUniqueId().equals(requirementIdToGet)).findAny();
353 if (requirementDefinitionOptional.isPresent()) {
354 requirementDefinitionToReturn = requirementDefinitionOptional.get();
356 return Either.right(componentsUtils.getResponseFormat(ActionStatus.REQUIREMENT_NOT_FOUND, componentId));
358 return Either.left(requirementDefinitionToReturn);
359 } catch (Exception e) {
360 LOGGER.error(EXCEPTION_OCCURRED_DURING_REQUIREMENTS, "get", e);
361 return Either.right(componentsUtils.getResponseFormat(ActionStatus.REQUIREMENT_NOT_FOUND, componentId));
363 if (lockResult.isLeft() && lockResult.left().value()) {
364 graphLockOperation.unlockComponent(storedComponent.getUniqueId(),
365 NodeTypeEnum.getByNameIgnoreCase(storedComponent.getComponentType().getValue()));
370 public Either<RequirementDefinition, ResponseFormat> deleteRequirement(String componentId,
371 String requirementIdToDelete,
372 User user, boolean lock) {
373 validateUserExists(user.getUserId());
374 Either<org.openecomp.sdc.be.model.Component, ResponseFormat> componentEither
375 = getComponentDetails(componentId);
376 if (componentEither.isRight()) {
377 return Either.right(componentEither.right().value());
379 org.openecomp.sdc.be.model.Component storedComponent = componentEither.left().value();
381 Either<Boolean, ResponseFormat> lockResult = lockComponentResult(lock, storedComponent, DELETE_REQUIREMENTS);
382 if (lockResult.isRight()) {
383 return Either.right(lockResult.right().value());
387 Map<String, List<RequirementDefinition>> storedComponentRequirements = storedComponent.getRequirements();
388 if (storedComponentRequirements.isEmpty()) {
389 return Either.right(componentsUtils.getResponseFormat(ActionStatus.REQUIREMENT_NOT_FOUND, componentId));
392 Optional<RequirementDefinition> definitionOptional = storedComponentRequirements
393 .values().stream().flatMap(Collection::stream)
394 .filter(requirementDefinition -> requirementDefinition.getUniqueId()
395 .equals(requirementIdToDelete)).findAny();
396 if (!definitionOptional.isPresent()) {
397 return Either.right(componentsUtils.getResponseFormat(ActionStatus.REQUIREMENT_NOT_FOUND, componentId));
399 RequirementDefinition requirementDefinitionToDelete = definitionOptional.get();
401 Boolean isRequirementUsedInServiceComposition
402 = isRequirementUsedInServiceComposition(requirementDefinitionToDelete, storedComponent);
403 if (isRequirementUsedInServiceComposition) {
404 LOGGER.error("Requirement {} can't be deleted, since it is used in service composition",
405 requirementDefinitionToDelete.getUniqueId());
406 return Either.right(componentsUtils.getResponseFormat(ActionStatus
407 .CAPABILITY_DELETION_NOT_ALLOWED_USED_IN_COMPOSITION,
408 requirementDefinitionToDelete.getName()));
411 Either<List<RequirementDefinition>, StorageOperationStatus> result
412 = deleteRequirement(storedComponent, storedComponentRequirements, requirementDefinitionToDelete);
413 if (result.isRight()) {
414 janusGraphDao.rollback();
415 LOGGER.error("Failed to delete requirement from component {}. Response is {}",
416 storedComponent.getName(), result.right().value());
417 return Either.right(componentsUtils.getResponseFormat(componentsUtils
418 .convertFromStorageResponse(result.right().value(), storedComponent.getComponentType())));
420 janusGraphDao.commit();
421 return Either.left(requirementDefinitionToDelete);
422 } catch (Exception e) {
423 LOGGER.error(EXCEPTION_OCCURRED_DURING_REQUIREMENTS, "delete", e);
424 janusGraphDao.rollback();
425 return Either.right(componentsUtils.getResponseFormat(ActionStatus.REQUIREMENT_NOT_FOUND));
427 if (lockResult.isLeft() && lockResult.left().value()) {
428 graphLockOperation.unlockComponent(storedComponent.getUniqueId(),
429 NodeTypeEnum.getByNameIgnoreCase(storedComponent.getComponentType().getValue()));
434 private Either<List<RequirementDefinition>, StorageOperationStatus> deleteRequirement(
435 org.openecomp.sdc.be.model.Component storedComponent, Map<String,
436 List<RequirementDefinition>> storedComponentRequirements,
437 RequirementDefinition requirementDefinitionToDelete) {
438 List<RequirementDefinition> requirementStoredInComponentByType =
439 getRequirementStoredInComponentByType(requirementDefinitionToDelete.getCapability(),
440 storedComponentRequirements);
441 if(requirementStoredInComponentByType == null) {
442 return Either.right(StorageOperationStatus.BAD_REQUEST);
444 requirementStoredInComponentByType.removeIf(requirementDefinition ->
445 requirementDefinition.getUniqueId().equals(requirementDefinitionToDelete.getUniqueId()));
446 Either<List<RequirementDefinition>, StorageOperationStatus> result;
447 if (requirementStoredInComponentByType.isEmpty()) {
449 StorageOperationStatus operationStatus = requirementOperation.deleteRequirements(storedComponent,
450 requirementDefinitionToDelete.getCapability());
451 if (operationStatus.equals(StorageOperationStatus.OK)) {
452 result = Either.left(Collections.singletonList(requirementDefinitionToDelete));
454 result = Either.right(operationStatus);
457 result = requirementOperation.updateRequirement(storedComponent.getUniqueId(),
458 requirementStoredInComponentByType);
463 private Either<org.openecomp.sdc.be.model.Component, ResponseFormat> getComponentDetails(String componentId) {
464 ComponentParametersView filter = new ComponentParametersView(true);
465 filter.setIgnoreRequirements(false);
466 Either<org.openecomp.sdc.be.model.Component, StorageOperationStatus> componentStorageOperationStatusEither
467 = toscaOperationFacade.getToscaElement(componentId, filter);
468 if (componentStorageOperationStatusEither.isRight()) {
469 StorageOperationStatus errorStatus = componentStorageOperationStatusEither.right().value();
470 LOGGER.error("Failed to fetch component information by component id {}, Response is {}", componentId, errorStatus);
471 return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(errorStatus)));
473 return Either.left(componentStorageOperationStatusEither.left().value());
476 private Either<Boolean, ResponseFormat> lockComponentResult(boolean lock,
477 org.openecomp.sdc.be.model.Component component,
481 lockComponent(component.getUniqueId(), component, action);
482 } catch (ComponentException e){
483 LOGGER.debug(FAILED_TO_LOCK_COMPONENT_RESPONSE_IS, component.getName(),
485 janusGraphDao.rollback();
489 return Either.left(true);
492 private List<RequirementDefinition> getRequirementStoredInComponentByType(
493 String capabilityType, Map<String,
494 List<RequirementDefinition>> requirements) {
496 Optional<Map.Entry<String, List<RequirementDefinition>>> entryOptional
497 = requirements.entrySet().stream().filter(map -> map.getKey().equals(capabilityType)).findFirst();
498 return entryOptional.map(Map.Entry::getValue).orElse(null);
502 private RequirementDefinition initiateNewRequirement(org.openecomp.sdc.be.model.Component component,
503 RequirementDefinition requirementDefinition) {
504 if (StringUtils.isEmpty(requirementDefinition.getUniqueId()))
505 requirementDefinition.setUniqueId(UUID.randomUUID().toString());
506 if (StringUtils.isEmpty(requirementDefinition.getOwnerId()))
507 requirementDefinition.setOwnerId(component.getUniqueId());
508 if (StringUtils.isEmpty(requirementDefinition.getOwnerName()))
509 requirementDefinition.setOwnerName(component.getName());
510 requirementDefinition.setLeftOccurrences(requirementDefinition.getMaxOccurrences());
511 return requirementDefinition;
514 private RequirementDefinition updateRequirement(RequirementDefinition storedRequirement,
515 RequirementDefinition requirementToUpdate) {
516 storedRequirement.setName(requirementToUpdate.getName());
517 storedRequirement.setCapability(requirementToUpdate.getCapability());
518 storedRequirement.setNode(requirementToUpdate.getNode());
519 storedRequirement.setRelationship(requirementToUpdate.getRelationship());
520 storedRequirement.setMinOccurrences(requirementToUpdate.getMinOccurrences());
521 storedRequirement.setMaxOccurrences(requirementToUpdate.getMaxOccurrences());
522 return storedRequirement;
525 private Boolean isRequirementUsedInServiceComposition(RequirementDefinition requirementDefinition,
526 org.openecomp.sdc.be.model.Component component) {
527 Either<List<org.openecomp.sdc.be.model.Component>, StorageOperationStatus> componentList
528 = toscaOperationFacade.getParentComponents(component.getUniqueId());
529 if (componentList.isRight()) {
530 return Boolean.FALSE;
532 return componentList.left().value().stream()
533 .flatMap(parentComponent -> parentComponent.getComponentInstancesRelations()
534 .stream()).flatMap(requirementCapabilityRelDef -> requirementCapabilityRelDef.getRelationships().stream())
535 .anyMatch(capabilityRequirementRelationship -> capabilityRequirementRelationship.getRelation()
536 .getRequirementUid().equals(requirementDefinition.getUniqueId()));