Refactoring Consolidation Service
[sdc.git] / catalog-be / src / main / java / org / openecomp / sdc / be / components / merge / instance / ComponentInstanceCapabilitiesPropertiesMerge.java
1 package org.openecomp.sdc.be.components.merge.instance;
2
3 import fj.data.Either;
4 import org.openecomp.sdc.be.dao.api.ActionStatus;
5 import org.openecomp.sdc.be.impl.ComponentsUtils;
6 import org.openecomp.sdc.be.model.CapabilityDefinition;
7 import org.openecomp.sdc.be.model.Component;
8 import org.openecomp.sdc.be.model.ComponentInstance;
9 import org.openecomp.sdc.be.model.User;
10 import org.openecomp.sdc.exception.ResponseFormat;
11
12 import java.util.ArrayList;
13 import java.util.Collection;
14 import java.util.List;
15 import java.util.stream.Collectors;
16
17 import static org.apache.commons.collections.MapUtils.isNotEmpty;
18
19 @org.springframework.stereotype.Component
20 public class ComponentInstanceCapabilitiesPropertiesMerge implements ComponentInstanceMergeInterface {
21
22     private ComponentCapabilitiesPropertiesMergeBL capabilitiesPropertiesMergeBL;
23     private ComponentsUtils componentsUtils;
24
25     public ComponentInstanceCapabilitiesPropertiesMerge(ComponentCapabilitiesPropertiesMergeBL capabilitiesPropertiesMergeBL, ComponentsUtils componentsUtils) {
26         this.capabilitiesPropertiesMergeBL = capabilitiesPropertiesMergeBL;
27         this.componentsUtils = componentsUtils;
28     }
29
30     @Override
31     public void saveDataBeforeMerge(DataForMergeHolder dataHolder, Component containerComponent, ComponentInstance currentResourceInstance, Component originComponent) {
32         dataHolder.setOrigInstanceCapabilities(getAllInstanceCapabilities(currentResourceInstance));
33         dataHolder.setOrigInstanceNode(originComponent);
34     }
35
36     @Override
37     public Either<Component, ResponseFormat> mergeDataAfterCreate(User user, DataForMergeHolder dataHolder, Component updatedContainerComponent, String newInstanceId) {
38         Component origInstanceNode = dataHolder.getOrigInstanceNode();
39         List<CapabilityDefinition> origInstanceCapabilities = dataHolder.getOrigInstanceCapabilities();
40         ActionStatus mergeStatus = capabilitiesPropertiesMergeBL.mergeComponentInstanceCapabilities(updatedContainerComponent, origInstanceNode, newInstanceId, origInstanceCapabilities);
41         return Either.iif(!ActionStatus.OK.equals(mergeStatus), () -> componentsUtils.getResponseFormat(mergeStatus), () -> updatedContainerComponent);
42     }
43
44     private List<CapabilityDefinition> getAllInstanceCapabilities(ComponentInstance currentResourceInstance) {
45         return isNotEmpty( currentResourceInstance.getCapabilities() )  ? currentResourceInstance.getCapabilities().values().stream().flatMap(Collection::stream).collect(Collectors.toList()) :  new ArrayList<>() ;
46     }
47 }