1 package org.openecomp.sdc.asdctool.impl.migration.v1707;
3 import java.util.EnumMap;
4 import java.util.Iterator;
7 import org.apache.tinkerpop.gremlin.structure.Direction;
8 import org.apache.tinkerpop.gremlin.structure.Edge;
9 import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
10 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
11 import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
12 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
13 import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
14 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
15 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
16 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
19 import org.springframework.beans.factory.annotation.Autowired;
20 import org.springframework.stereotype.Component;
22 import fj.data.Either;
23 @Component("migration1707relationsFix")
24 public class Migration1707RelationsFix {
26 private static Logger LOGGER = LoggerFactory.getLogger(Migration1707RelationsFix.class);
29 private TitanDao titanDao;
31 public boolean migrate() {
32 boolean result = true;
35 Map<GraphPropertyEnum, Object> propsHasNot = new EnumMap<>(GraphPropertyEnum.class);
36 propsHasNot.put(GraphPropertyEnum.IS_DELETED, true);
37 Either<List<GraphVertex>, TitanOperationStatus> getAllTopologyTemplatesRes = titanDao.getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, null, propsHasNot, JsonParseFlagEnum.ParseMetadata);
38 if (getAllTopologyTemplatesRes.isRight() && getAllTopologyTemplatesRes.right().value() != TitanOperationStatus.NOT_FOUND) {
39 LOGGER.debug("Failed to fetch all non marked as deleted topology templates , error {}", getAllTopologyTemplatesRes.right().value());
42 if(getAllTopologyTemplatesRes.isLeft()){
43 fixComponentsRelations(getAllTopologyTemplatesRes.left().value());
46 Either<List<GraphVertex>, TitanOperationStatus> getAllNodeTypesRes = titanDao.getByCriteria(VertexTypeEnum.NODE_TYPE, null, propsHasNot, JsonParseFlagEnum.ParseMetadata);
47 if (getAllNodeTypesRes.isRight() && getAllNodeTypesRes.right().value() != TitanOperationStatus.NOT_FOUND) {
48 LOGGER.debug("Failed to fetch all non marked as deleted node types , error {}", getAllNodeTypesRes.right().value());
51 if(getAllNodeTypesRes.isLeft()){
52 fixComponentsRelations(getAllNodeTypesRes.left().value());
55 } catch (Exception e){
56 LOGGER.debug("The exception {} occured upon migration 1707 relations fixing. ", e.getMessage());
70 private void fixComponentsRelations(List<GraphVertex> notDeletedComponentVerticies) {
71 notDeletedComponentVerticies.stream().forEach(this::fixComponentRelations);
74 private void fixComponentRelations(GraphVertex componentV) {
75 fixCreatorComponentRelation(componentV);
76 fixLastModifierComponentRelation(componentV);
77 fixStateComponentRelation(componentV);
80 private void fixStateComponentRelation(GraphVertex componentV) {
81 boolean relevantEdgeFound = false;
82 Iterator<Edge> edges = componentV.getVertex().edges(Direction.IN, EdgeLabelEnum.STATE.name());
83 String getState = (String) componentV.getJsonMetadataField(JsonPresentationFields.LIFECYCLE_STATE);
84 while(edges.hasNext()){
85 Edge edge = edges.next();
86 String edgeState = (String) edge.property(GraphPropertyEnum.STATE.getProperty()).orElse(null);
87 if(getState.equals(edgeState) && !relevantEdgeFound){
88 relevantEdgeFound = true;
95 private void fixCreatorComponentRelation(GraphVertex componentV) {
96 boolean relevantUserFound = false;
97 Iterator<Edge> edges = componentV.getVertex().edges(Direction.IN, EdgeLabelEnum.CREATOR.name());
98 String getCreatorUserId = (String) componentV.getJsonMetadataField(JsonPresentationFields.USER_ID_CREATOR);
99 while(edges.hasNext()){
100 Edge edge = edges.next();
101 String userId = (String) edge.outVertex().property(GraphPropertyEnum.USERID.getProperty()).orElse(null);
102 if(getCreatorUserId.equals(userId) && !relevantUserFound){
103 relevantUserFound = true;
110 private void fixLastModifierComponentRelation(GraphVertex componentV) {
111 boolean relevantUserFound = false;
112 Iterator<Edge> edges = componentV.getVertex().edges(Direction.IN, EdgeLabelEnum.LAST_MODIFIER.name());
113 String getLastUpdaterUserId = (String) componentV.getJsonMetadataField(JsonPresentationFields.USER_ID_LAST_UPDATER);
114 while(edges.hasNext()){
115 Edge edge = edges.next();
116 String updaterId = (String) edge.outVertex().property(GraphPropertyEnum.USERID.getProperty()).orElse(null);
117 if(getLastUpdaterUserId.equals(updaterId) && !relevantUserFound){
118 relevantUserFound = true;
125 private void removeEdge(Edge edge) {
126 LOGGER.debug("Going to remove edge {} upon migration 1707 relations fixing. ", edge.id());
128 LOGGER.debug("The edge {} has been removed. ", edge.id());