[SDC-29] catalog 1707 rebase commit.
[sdc.git] / asdctool / src / main / java / org / openecomp / sdc / asdctool / impl / migration / v1707 / jsonmodel / relations / FulfilledRequirementsMigrationService.java
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.ListDataDefinition;
12 import org.openecomp.sdc.be.datatypes.elements.ListRequirementDataDefinition;
13 import org.openecomp.sdc.be.datatypes.elements.MapDataDefinition;
14 import org.openecomp.sdc.be.datatypes.elements.MapListRequirementDataDefinition;
15 import org.openecomp.sdc.be.datatypes.elements.RequirementDataDefinition;
16 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
17 import org.openecomp.sdc.be.model.ComponentInstance;
18 import org.openecomp.sdc.be.model.RequirementDefinition;
19 import org.openecomp.sdc.be.model.operations.api.IComponentInstanceOperation;
20 import org.openecomp.sdc.be.model.operations.api.IRequirementOperation;
21 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
22 import org.openecomp.sdc.be.resources.data.RequirementData;
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 FulfilledRequirementsMigrationService extends FulfilledCapabilityRequirementMigrationService<RequirementDefinition, RequirementData> {
31
32     @Resource(name = "requirement-operation")
33     IRequirementOperation requirementOperation;
34
35     @Resource(name = "component-instance-operation")
36     IComponentInstanceOperation componentInstanceOperation;
37
38     @Override
39     Either<RequirementDefinition, TitanOperationStatus> getToscaDefinition(RequirementData data) {
40         return requirementOperation.getRequirement(data.getUniqueId());
41     }
42
43     @Override
44     void setPath(RequirementDefinition def, List<String> path) {
45         def.setPath(path);
46     }
47
48     @Override
49     String getType(RequirementDefinition def) {
50         return def.getCapability();
51     }
52
53     @Override
54     Either<List<ImmutablePair<RequirementData, GraphEdge>>, TitanOperationStatus> getFulfilledCapReqs(ComponentInstance instance, NodeTypeEnum nodeTypeEnum) {
55         return componentInstanceOperation.getFulfilledRequirements(instance, nodeTypeEnum);
56     }
57
58     @Override
59     ListDataDefinition convertToDefinitionListObject(List<RequirementDefinition> capReqDefList) {
60         List<RequirementDataDefinition> requirementDataDefinitions = new ArrayList<>();
61         requirementDataDefinitions.addAll(capReqDefList);
62         return new ListRequirementDataDefinition(requirementDataDefinitions);
63     }
64
65     @Override
66     MapDataDefinition convertToDefinitionMapObject(Map<String, ListDataDefinition> reqCapForInstance) {
67         Map<String, ListRequirementDataDefinition> reqDefList = castDefinitionListToRequirementList(reqCapForInstance);
68         return new MapListRequirementDataDefinition(reqDefList);
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_REQUIREMENTS, EdgeLabelEnum.FULLFILLED_REQUIREMENTS, defsByInstance);
79     }
80
81     private Map<String, ListRequirementDataDefinition> castDefinitionListToRequirementList(Map<String, ListDataDefinition> reqCapForInstance) {
82         return reqCapForInstance.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, entry -> (ListRequirementDataDefinition) entry.getValue()));
83     }
84 }