Catalog alignment
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / impl / policy / PolicyVersionUpdater.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2020 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
24 import org.openecomp.sdc.be.components.impl.version.OnChangeVersionCommand;
25 import org.openecomp.sdc.be.dao.api.ActionStatus;
26 import org.openecomp.sdc.be.datatypes.enums.PromoteVersionEnum;
27 import org.openecomp.sdc.be.impl.ComponentsUtils;
28 import org.openecomp.sdc.be.model.Component;
29 import org.openecomp.sdc.be.model.PolicyDefinition;
30 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
31 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
32 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
33 import org.openecomp.sdc.be.model.utils.GroupUtils;
34 import org.openecomp.sdc.common.log.wrappers.Logger;
35
36 import java.util.List;
37 import java.util.function.Consumer;
38
39 import static org.apache.commons.collections.CollectionUtils.isEmpty;
40
41
42 /**
43  * A Helper class which handles altering the version of a group
44  */
45 @org.springframework.stereotype.Component
46 public class PolicyVersionUpdater implements OnChangeVersionCommand {
47     
48     private static final Logger log = Logger.getLogger(PolicyVersionUpdater.class);
49     private final ToscaOperationFacade toscaOperationFacade;
50     private final ComponentsUtils componentsUtils;
51     
52
53     public PolicyVersionUpdater(ToscaOperationFacade toscaOperationFacade, ComponentsUtils componentsUtils) {
54         this.toscaOperationFacade = toscaOperationFacade;
55         this.componentsUtils = componentsUtils;
56     
57     }
58     
59     
60     @Override
61     public ActionStatus onChangeVersion(Component container) {
62         log.debug("#onChangeVersion - replacing all group members for component instance");
63         Consumer<List<PolicyDefinition>> replaceGroupMemberTask = (policies) -> increaseVesion(policies);
64         return updatePoliciesVersion(container, replaceGroupMemberTask);
65     }
66
67     public void increaseVesion(List<PolicyDefinition> policies) {
68         policies.forEach(policy -> increaseMajorVersion(policy));
69     }
70
71   
72     private void increaseMajorVersion(PolicyDefinition policy) {
73         String version = policy.getVersion();
74         
75         String newVersion = GroupUtils.updateVersion(PromoteVersionEnum.MAJOR, policy.getVersion());
76       
77         if(!version.equals(newVersion) ){           
78             String groupUUID = UniqueIdBuilder.generateUUID();
79             policy.setPolicyUUID(groupUUID);
80             policy.setVersion(String.valueOf(newVersion));
81         }
82
83     }    
84    
85     
86     private ActionStatus updatePoliciesVersion(Component container, Consumer<List<PolicyDefinition>> updatePoliciesVersion) {
87         List<PolicyDefinition> policies = container.resolvePoliciesList();
88         if (isEmpty(policies)) {
89             return ActionStatus.OK;
90         }
91         updatePoliciesVersion.accept(policies);
92         return updatePolicies(container, policies);
93     }  
94
95     
96     private ActionStatus updatePolicies(Component policiesContainer, List<PolicyDefinition> policiesToUpdate) {
97         log.debug("#updatePolicies - updating {} policies for container {}", policiesToUpdate.size(), policiesContainer.getUniqueId());
98         StorageOperationStatus updatePolicyResult = toscaOperationFacade.updatePoliciesOfComponent(policiesContainer.getUniqueId(), policiesToUpdate);
99         return componentsUtils.convertFromStorageResponse(updatePolicyResult, policiesContainer.getComponentType());
100     }
101
102 }
103
104