Added oparent to sdc main
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / impl / policy / PolicyTargetsUpdateHandler.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.components.impl.policy;
22
23 import org.openecomp.sdc.be.dao.api.ActionStatus;
24 import org.openecomp.sdc.be.datatypes.elements.PolicyTargetType;
25 import org.openecomp.sdc.be.impl.ComponentsUtils;
26 import org.openecomp.sdc.be.model.Component;
27 import org.openecomp.sdc.be.model.PolicyDefinition;
28 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
29 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
30 import org.openecomp.sdc.common.log.wrappers.Logger;
31
32 import java.util.List;
33 import java.util.function.Consumer;
34
35 import static org.apache.commons.collections.CollectionUtils.isEmpty;
36
37 @org.springframework.stereotype.Component
38 public class PolicyTargetsUpdateHandler {
39
40     private static final Logger log = Logger.getLogger(PolicyTargetsUpdateHandler.class);
41     private final ToscaOperationFacade toscaOperationFacade;
42     private final ComponentsUtils componentsUtils;
43     private final PolicyTargetsUpdater policyTargetsUpdater;
44
45     public PolicyTargetsUpdateHandler(ToscaOperationFacade toscaOperationFacade, ComponentsUtils componentsUtils, PolicyTargetsUpdater policyTargetsUpdater) {
46         this.toscaOperationFacade = toscaOperationFacade;
47         this.componentsUtils = componentsUtils;
48         this.policyTargetsUpdater = policyTargetsUpdater;
49     }
50
51     public ActionStatus removePoliciesTargets(Component container, String targetId, PolicyTargetType targetType) {
52         log.debug("#removePoliciesTargets - removing all component {} policy targets referencing target {}", container.getUniqueId(), targetId);
53         Consumer<List<PolicyDefinition>> removeTarget = policies -> policyTargetsUpdater.removeTarget(policies, targetId, targetType);
54         return updatePolicyTargets(container, targetId, targetType, removeTarget);
55     }
56
57     public ActionStatus replacePoliciesTargets(Component container, String prevTargetId, String newTargetId, PolicyTargetType targetType) {
58         log.debug("#replacePoliciesTargets - replacing all policy targets referencing target {} with target {}", prevTargetId, newTargetId);
59         Consumer<List<PolicyDefinition>> replaceTarget = policies -> policyTargetsUpdater.replaceTarget(policies, prevTargetId, newTargetId, targetType);
60         return updatePolicyTargets(container, prevTargetId, targetType, replaceTarget);
61     }
62
63     private ActionStatus updatePolicyTargets(Component container, String targetId, PolicyTargetType targetType, Consumer<List<PolicyDefinition>> updatePolicyTargetTaskRunner) {
64         List<PolicyDefinition> policiesWithPrevInstanceAsTarget = container.resolvePoliciesContainingTarget(targetId, targetType);
65         if (isEmpty(policiesWithPrevInstanceAsTarget)) {
66             return ActionStatus.OK;
67         }
68         updatePolicyTargetTaskRunner.accept(policiesWithPrevInstanceAsTarget);
69         return updatePolicies(container, policiesWithPrevInstanceAsTarget);
70     }
71
72     private ActionStatus updatePolicies(Component policiesContainer, List<PolicyDefinition> policiesToUpdate) {
73         log.debug("#updatePolicies - updating {} policies for container {}", policiesToUpdate.size(), policiesContainer.getUniqueId());
74         StorageOperationStatus updatePolicyResult = toscaOperationFacade.updatePoliciesOfComponent(policiesContainer.getUniqueId(), policiesToUpdate);
75         return componentsUtils.convertFromStorageResponse(updatePolicyResult, policiesContainer.getComponentType());
76     }
77
78 }