4a91290dbcc9f0cd6af994e689979c0fbde74231
[sdc.git] /
1 package org.openecomp.sdc.asdctool.impl.migration.v1707.jsonmodel.relations;
2
3 import fj.data.Either;
4 import org.apache.commons.lang3.tuple.ImmutablePair;
5 import org.openecomp.sdc.be.dao.graph.datatype.GraphEdge;
6 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
7 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
8 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
9 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
10 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
11 import org.openecomp.sdc.be.datatypes.elements.CapabilityDataDefinition;
12 import org.openecomp.sdc.be.datatypes.elements.ListCapabilityDataDefinition;
13 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
14 import org.openecomp.sdc.be.datatypes.elements.MapDataDefinition;
15 import org.openecomp.sdc.be.datatypes.elements.MapListCapabiltyDataDefinition;
16 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
17 import org.openecomp.sdc.be.model.CapabilityDefinition;
18 import org.openecomp.sdc.be.model.ComponentInstance;
19 import org.openecomp.sdc.be.model.operations.api.ICapabilityOperation;
20 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
21 import org.openecomp.sdc.be.model.operations.impl.ComponentInstanceOperation;
22 import org.openecomp.sdc.be.resources.data.CapabilityData;
23
24 import javax.annotation.Resource;
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.Map;
28 import java.util.stream.Collectors;
29
30 public class FulfilledCapabilitiesMigrationService extends FulfilledCapabilityRequirementMigrationService<CapabilityDefinition, CapabilityData> {
31
32     @Resource(name = "capability-operation")
33     private ICapabilityOperation capabilityOperation;
34
35     @Resource(name = "component-instance-operation")
36     private ComponentInstanceOperation componentInstanceOperation;
37
38     @Override
39     Either<CapabilityDefinition, StorageOperationStatus> getToscaDefinition(CapabilityData data) {
40         return capabilityOperation.getCapability(data.getUniqueId());
41     }
42
43     @Override
44     void setPath(CapabilityDefinition def, List<String> path) {
45         def.setPath(path);
46     }
47
48     @Override
49     String getType(CapabilityDefinition def) {
50         return def.getType();
51     }
52
53     @Override
54     Either<List<ImmutablePair<CapabilityData, GraphEdge>>, TitanOperationStatus> getFulfilledCapReqs(ComponentInstance instance, NodeTypeEnum nodeTypeEnum) {
55         return componentInstanceOperation.getFulfilledCapabilities(instance, nodeTypeEnum);
56     }
57
58     @Override
59     ListDataDefinition convertToDefinitionListObject(List<CapabilityDefinition> capReqDefList) {
60         List<CapabilityDataDefinition> capabilityDataDefinitions = new ArrayList<>();
61         capabilityDataDefinitions.addAll(capReqDefList);
62         return new ListCapabilityDataDefinition(capabilityDataDefinitions);
63     }
64
65     @Override
66     MapDataDefinition convertToDefinitionMapObject(Map<String, ListDataDefinition> reqCapForInstance) {
67         Map<String, ListCapabilityDataDefinition> capabilitiesList = castDataDefinitionListToCapabilityList(reqCapForInstance);
68         return new MapListCapabiltyDataDefinition(capabilitiesList);
69     }
70
71     @Override
72     Either<GraphVertex, TitanOperationStatus> getAssociatedDefinitions(GraphVertex component) {
73         return titanDao.getChildVertex(component,  EdgeLabelEnum.FULLFILLED_REQUIREMENTS, JsonParseFlagEnum.NoParse);
74     }
75
76     @Override
77     Either<GraphVertex, StorageOperationStatus> associateToGraph(GraphVertex graphVertex, Map<String, MapDataDefinition> defsByInstance) {
78         return topologyTemplateOperation.assosiateElementToData(graphVertex, VertexTypeEnum.FULLFILLED_CAPABILITIES, EdgeLabelEnum.FULLFILLED_CAPABILITIES, defsByInstance);
79     }
80
81     private Map<String, ListCapabilityDataDefinition> castDataDefinitionListToCapabilityList(Map<String, ListDataDefinition> reqCapForInstance) {
82         return reqCapForInstance.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, entry -> (ListCapabilityDataDefinition) entry.getValue()));
83     }
84 }