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