1 package org.openecomp.sdc.be.components.impl.policy;
3 import org.openecomp.sdc.be.dao.api.ActionStatus;
4 import org.openecomp.sdc.be.datatypes.elements.PolicyTargetType;
5 import org.openecomp.sdc.be.impl.ComponentsUtils;
6 import org.openecomp.sdc.be.model.Component;
7 import org.openecomp.sdc.be.model.PolicyDefinition;
8 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
9 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
10 import org.openecomp.sdc.common.log.wrappers.Logger;
12 import java.util.List;
13 import java.util.function.Consumer;
15 import static org.apache.commons.collections.CollectionUtils.isEmpty;
17 @org.springframework.stereotype.Component
18 public class PolicyTargetsUpdateHandler {
20 private static final Logger log = Logger.getLogger(PolicyTargetsUpdateHandler.class);
21 private final ToscaOperationFacade toscaOperationFacade;
22 private final ComponentsUtils componentsUtils;
23 private final PolicyTargetsUpdater policyTargetsUpdater;
25 public PolicyTargetsUpdateHandler(ToscaOperationFacade toscaOperationFacade, ComponentsUtils componentsUtils, PolicyTargetsUpdater policyTargetsUpdater) {
26 this.toscaOperationFacade = toscaOperationFacade;
27 this.componentsUtils = componentsUtils;
28 this.policyTargetsUpdater = policyTargetsUpdater;
31 public ActionStatus removePoliciesTargets(Component container, String targetId, PolicyTargetType targetType) {
32 log.debug("#removePoliciesTargets - removing all component {} policy targets referencing target {}", container.getUniqueId(), targetId);
33 Consumer<List<PolicyDefinition>> removeTarget = policies -> policyTargetsUpdater.removeTarget(policies, targetId, targetType);
34 return updatePolicyTargets(container, targetId, targetType, removeTarget);
37 public ActionStatus replacePoliciesTargets(Component container, String prevTargetId, String newTargetId, PolicyTargetType targetType) {
38 log.debug("#replacePoliciesTargets - replacing all policy targets referencing target {} with target {}", prevTargetId, newTargetId);
39 Consumer<List<PolicyDefinition>> replaceTarget = policies -> policyTargetsUpdater.replaceTarget(policies, prevTargetId, newTargetId, targetType);
40 return updatePolicyTargets(container, prevTargetId, targetType, replaceTarget);
43 private ActionStatus updatePolicyTargets(Component container, String targetId, PolicyTargetType targetType, Consumer<List<PolicyDefinition>> updatePolicyTargetTaskRunner) {
44 List<PolicyDefinition> policiesWithPrevInstanceAsTarget = container.resolvePoliciesContainingTarget(targetId, targetType);
45 if (isEmpty(policiesWithPrevInstanceAsTarget)) {
46 return ActionStatus.OK;
48 updatePolicyTargetTaskRunner.accept(policiesWithPrevInstanceAsTarget);
49 return updatePolicies(container, policiesWithPrevInstanceAsTarget);
52 private ActionStatus updatePolicies(Component policiesContainer, List<PolicyDefinition> policiesToUpdate) {
53 log.debug("#updatePolicies - updating {} policies for container {}", policiesToUpdate.size(), policiesContainer.getUniqueId());
54 StorageOperationStatus updatePolicyResult = toscaOperationFacade.updatePoliciesOfComponent(policiesContainer.getUniqueId(), policiesToUpdate);
55 return componentsUtils.convertFromStorageResponse(updatePolicyResult, policiesContainer.getComponentType());