diff options
Diffstat (limited to 'catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogic.java')
-rw-r--r-- | catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogic.java | 88 |
1 files changed, 54 insertions, 34 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogic.java index f8aab3def1..2f01ef3ecc 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/PolicyBusinessLogic.java @@ -46,6 +46,7 @@ import org.openecomp.sdc.be.components.property.PropertyDeclarationOrchestrator; import org.openecomp.sdc.be.components.validation.PolicyUtils; import org.openecomp.sdc.be.dao.api.ActionStatus; import org.openecomp.sdc.be.datatypes.elements.GetPolicyValueDataDefinition; +import org.openecomp.sdc.be.datatypes.elements.GroupDataDefinition; import org.openecomp.sdc.be.datatypes.elements.PolicyTargetType; import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition; import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum; @@ -125,33 +126,32 @@ public class PolicyBusinessLogic extends BaseBusinessLogic { } } - public Map<String, PolicyDefinition> createPoliciesFromParsedCsar(Component component, - final Map<String, PolicyDefinition> incomingPolicyDefinitions) { + public Map<String, PolicyDefinition> createPolicies(final Component component, + final Map<String, PolicyDefinition> incomingPolicyDefinitions) { if (MapUtils.isEmpty(incomingPolicyDefinitions)) { return Collections.emptyMap(); } - Map<String, PolicyDefinition> createdPolicies = new HashMap<>(); - for (Map.Entry<String, PolicyDefinition> policyEntry : incomingPolicyDefinitions.entrySet()) { - PolicyDefinition incomingPolicyDefinition = policyEntry.getValue(); - String policyName = incomingPolicyDefinition.getName(); + final Map<String, PolicyDefinition> createdPolicies = new HashMap<>(); + for (final PolicyDefinition incomingPolicyDefinition : incomingPolicyDefinitions.values()) { + final String policyName = incomingPolicyDefinition.getName(); log.trace("Going to create policy {}", incomingPolicyDefinition); loggerSupportability .log(LoggerSupportabilityActions.CREATE_GROUP_POLICY, component.getComponentMetadataForSupportLog(), StatusCode.STARTED, "Start to create policy: {} for component {}", policyName, component.getName()); - String policyType = incomingPolicyDefinition.getType(); + final String policyType = incomingPolicyDefinition.getType(); if (StringUtils.isEmpty(policyType)) { log.debug("Policy type '{}' for policy '{}' not found.", policyType, policyName); throw new ByActionStatusComponentException(ActionStatus.POLICY_MISSING_POLICY_TYPE, policyName); } // create policyDefinition - String policyTypeName = incomingPolicyDefinition.getPolicyTypeName(); + final String policyTypeName = incomingPolicyDefinition.getPolicyTypeName(); PolicyDefinition createdPolicyDefinition = createPolicy(policyTypeName, component); // set isFromCsar createdPolicyDefinition.setToscaPresentationValue(JsonPresentationFields.IS_FROM_CSAR, true); // link policy to component component.addPolicy(createdPolicyDefinition); // process targets - Map<PolicyTargetType, List<String>> policyTargets = incomingPolicyDefinition.getTargets(); + final Map<PolicyTargetType, List<String>> policyTargets = incomingPolicyDefinition.getTargets(); createdPolicyDefinition = setUpdatePolicyTargets(component, createdPolicyDefinition, policyTargets); // process policy properties List<PropertyDataDefinition> properties = incomingPolicyDefinition.getProperties(); @@ -179,38 +179,60 @@ public class PolicyBusinessLogic extends BaseBusinessLogic { if (MapUtils.isEmpty(targets)) { return policyDefinition; } - List<String> targetsToUpdate = targets.get(PolicyTargetType.COMPONENT_INSTANCES); - if (CollectionUtils.isEmpty(targetsToUpdate)) { + final List<String> componentInstancesTargetsToUpdate = targets.get(PolicyTargetType.COMPONENT_INSTANCES); + final List<String> groupsTargetsToUpdate = targets.get(PolicyTargetType.GROUPS); + if (CollectionUtils.isEmpty(componentInstancesTargetsToUpdate) && CollectionUtils.isEmpty(groupsTargetsToUpdate)) { return policyDefinition; } + + final List<String> allTargets = joinLists(componentInstancesTargetsToUpdate, groupsTargetsToUpdate); + // update targets to uniqueIds of respective component instance - List<String> targetsUniqueIds = new ArrayList<>(); - for (String targetName : targetsToUpdate) { - Optional<ComponentInstance> componentInstance = component.getComponentInstanceByName(targetName); - String componentUniqueId = componentInstance - .orElseThrow(() -> new ByActionStatusComponentException(ActionStatus.COMPONENT_INSTANCE_NOT_FOUND)).getUniqueId(); - targetsUniqueIds.add(componentUniqueId); - } - EnumMap<PolicyTargetType, List<String>> updatedTargets = new EnumMap<>(PolicyTargetType.class); - updatedTargets.put(PolicyTargetType.COMPONENT_INSTANCES, targetsUniqueIds); + final List<String> targetsGroupsUniqueIds = new ArrayList<>(); + final List<String> targetsInstanceUniqueIds = new ArrayList<>(); + for (final String targetName : allTargets) { + final String groupsTargetUniqueIdForTargetName = getTargetGroupUniqueIdByTargetName(component, targetName); + if (groupsTargetUniqueIdForTargetName != null) { + targetsGroupsUniqueIds.add(groupsTargetUniqueIdForTargetName); + } + final String instanceTargetUniqueIdForTargetName = getTargetInstanceUniqueIdByTargetName(component, targetName); + if (instanceTargetUniqueIdForTargetName != null) { + targetsInstanceUniqueIds.add(instanceTargetUniqueIdForTargetName); + } + } + if (targetsGroupsUniqueIds.isEmpty() && targetsInstanceUniqueIds.isEmpty()) { + throw new ByActionStatusComponentException(ActionStatus.POLICY_TARGET_DOES_NOT_EXIST); + } + final EnumMap<PolicyTargetType, List<String>> updatedTargets = new EnumMap<>(PolicyTargetType.class); + if (!targetsGroupsUniqueIds.isEmpty()) { + updatedTargets.put(PolicyTargetType.GROUPS, targetsGroupsUniqueIds); + } + if (!targetsInstanceUniqueIds.isEmpty()) { + updatedTargets.put(PolicyTargetType.COMPONENT_INSTANCES, targetsInstanceUniqueIds); + } policyDefinition.setTargets(updatedTargets); - policyDefinition = validateAndUpdatePolicyTargets(component, policyDefinition.getUniqueId(), policyDefinition.getTargets()); - return policyDefinition; + return validateAndUpdatePolicyTargets(component, policyDefinition.getUniqueId(), policyDefinition.getTargets()); } - public Either<List<PolicyDefinition>, ResponseFormat> getPoliciesList(ComponentTypeEnum componentType, String componentId, String userId) { - Either<List<PolicyDefinition>, ResponseFormat> result; - log.trace("#getPolicies - starting to retrieve policies of component {}. ", componentId); - try { - Component component = validateContainerComponentAndUserBeforeReadOperation(componentType, componentId, userId); - result = Either.left(component.resolvePoliciesList()); - } catch (Exception e) { - log.error("#getPolicy - the exception occurred upon retrieving policies list of component {}: ", componentId, e); - result = Either.right(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR)); + private List<String> joinLists(final List<String> a, final List<String> b) { + final List<String> result = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(a)) { + result.addAll(a); + } + if (CollectionUtils.isNotEmpty(b)) { + result.addAll(b); } return result; } + private String getTargetGroupUniqueIdByTargetName(final Component component, final String targetName) { + return component.getGroupByInvariantName(targetName).map(GroupDataDefinition::getUniqueId).orElse(null); + } + + private String getTargetInstanceUniqueIdByTargetName(final Component component, final String targetName) { + return component.getComponentInstanceByName(targetName).map(ComponentInstance::getUniqueId).orElse(null); + } + /** * Retrieves the policy of the component by UniqueId * @@ -266,7 +288,6 @@ public class PolicyBusinessLogic extends BaseBusinessLogic { * @return a policy or an error in a response format */ public PolicyDefinition deletePolicy(ComponentTypeEnum componentType, String componentId, String policyId, String userId, boolean shouldLock) { - PolicyDefinition result = null; log.trace("#deletePolicy - starting to update the policy {} on the component {}. ", policyId, componentId); Component component = null; boolean failed = false; @@ -358,7 +379,6 @@ public class PolicyBusinessLogic extends BaseBusinessLogic { public PolicyDefinition updatePolicyTargets(ComponentTypeEnum componentTypeEnum, String componentId, String policyId, Map<PolicyTargetType, List<String>> targets, String userId) { - Either<PolicyDefinition, ResponseFormat> result = null; log.debug("updating the policy id {} targets with the components {}. ", policyId, componentId); boolean failed = false; try { @@ -554,7 +574,7 @@ public class PolicyBusinessLogic extends BaseBusinessLogic { } private PolicyTypeDefinition validatePolicyTypeOnCreatePolicy(String policyTypeName, Component component) { - Either<PolicyTypeDefinition, StorageOperationStatus> latestPolicyTypeByType = policyTypeOperation.getLatestPolicyTypeByType(policyTypeName, component.getModel()); + final var latestPolicyTypeByType = policyTypeOperation.getLatestPolicyTypeByType(policyTypeName, component.getModel()); if (latestPolicyTypeByType.isRight()) { throw new ByActionStatusComponentException(componentsUtils.convertFromStorageResponse(latestPolicyTypeByType.right().value())); } |