re base code
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / impl / policy / PolicyTargetsUpdateHandler.java
1 package org.openecomp.sdc.be.components.impl.policy;
2
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;
11
12 import java.util.List;
13 import java.util.function.Consumer;
14
15 import static org.apache.commons.collections.CollectionUtils.isEmpty;
16
17 @org.springframework.stereotype.Component
18 public class PolicyTargetsUpdateHandler {
19
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;
24
25     public PolicyTargetsUpdateHandler(ToscaOperationFacade toscaOperationFacade, ComponentsUtils componentsUtils, PolicyTargetsUpdater policyTargetsUpdater) {
26         this.toscaOperationFacade = toscaOperationFacade;
27         this.componentsUtils = componentsUtils;
28         this.policyTargetsUpdater = policyTargetsUpdater;
29     }
30
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);
35     }
36
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);
41     }
42
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;
47         }
48         updatePolicyTargetTaskRunner.accept(policiesWithPrevInstanceAsTarget);
49         return updatePolicies(container, policiesWithPrevInstanceAsTarget);
50     }
51
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());
56     }
57
58 }