Upgrade SDC from Titan to Janus Graph
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / operations / impl / CapabilityOperation.java
index 382a2e0..ed635d1 100644 (file)
@@ -36,11 +36,11 @@ import java.util.stream.Collectors;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.openecomp.sdc.be.dao.graph.datatype.GraphEdge;
 import org.openecomp.sdc.be.dao.graph.datatype.GraphRelation;
+import org.openecomp.sdc.be.dao.janusgraph.HealingJanusGraphGenericDao;
+import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
 import org.openecomp.sdc.be.dao.neo4j.GraphEdgePropertiesDictionary;
 import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
-import org.openecomp.sdc.be.dao.titan.HealingTitanGenericDao;
-import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
 import org.openecomp.sdc.be.model.CapabilityDefinition;
 import org.openecomp.sdc.be.model.CapabilityTypeDefinition;
@@ -71,11 +71,11 @@ public class CapabilityOperation extends AbstractOperation {
     
     
     @VisibleForTesting
-    public void setTitanGenericDao(HealingTitanGenericDao titanGenericDao) {
-        this.titanGenericDao = titanGenericDao;
+    public void setJanusGraphGenericDao(HealingJanusGraphGenericDao janusGraphGenericDao) {
+        this.janusGraphGenericDao = janusGraphGenericDao;
     }
 
-    public Either<CapabilityData, TitanOperationStatus> addCapabilityToGraph(String resourceId, CapabilityTypeData capTypeData, CapabilityDefinition capabilityDefinition) {
+    public Either<CapabilityData, JanusGraphOperationStatus> addCapabilityToGraph(String resourceId, CapabilityTypeData capTypeData, CapabilityDefinition capabilityDefinition) {
 
         log.debug("#addCapabilityToGraph - capabilityDefinition={}", capabilityDefinition);
 
@@ -83,11 +83,12 @@ public class CapabilityOperation extends AbstractOperation {
         CapabilityData capabilityData = buildCapabilityData(capabilityDefinition, capUniqueId);
 
         log.debug("addCapabilityToGraph - Before adding capability to graph. capabilityTypeData = {}", capabilityData);
-        Either<CapabilityData, TitanOperationStatus> createCapResult = titanGenericDao.createNode(capabilityData, CapabilityData.class);
+        Either<CapabilityData, JanusGraphOperationStatus> createCapResult = janusGraphGenericDao
+            .createNode(capabilityData, CapabilityData.class);
         log.debug("addCapabilityToGraph - After adding capability to graph. status is = {}", createCapResult);
 
         if (createCapResult.isRight()) {
-            TitanOperationStatus operationStatus = createCapResult.right().value();
+            JanusGraphOperationStatus operationStatus = createCapResult.right().value();
             log.error("addCapabilityToGraph - Failed to add capability of type {} to graph. status is {}", capabilityDefinition.getType(), operationStatus);
             return createCapResult;
         }
@@ -101,14 +102,15 @@ public class CapabilityOperation extends AbstractOperation {
         return createCapResult;
     }
     
-    private Either<GraphRelation, TitanOperationStatus> connectToCapabilityType(CapabilityData capabilityData, CapabilityTypeData capabilityTypeData) {
+    private Either<GraphRelation, JanusGraphOperationStatus> connectToCapabilityType(CapabilityData capabilityData, CapabilityTypeData capabilityTypeData) {
         
         Map<String, Object> properties = new HashMap<>();
 
         String capabilityName = capabilityData.getCapabilityDataDefinition().getName();
         properties.put(GraphEdgePropertiesDictionary.NAME.getProperty(), capabilityName);
         
-        return titanGenericDao.createRelation(capabilityData, capabilityTypeData, GraphEdgeLabels.CAPABILITY_IMPL, properties);
+        return janusGraphGenericDao
+            .createRelation(capabilityData, capabilityTypeData, GraphEdgeLabels.CAPABILITY_IMPL, properties);
 
     }
     
@@ -117,13 +119,13 @@ public class CapabilityOperation extends AbstractOperation {
      * @param capabilites
      * @return
      */
-    public Either<List<CapabilityDefinition>, TitanOperationStatus> getCapabilitiesWithProps(List<ImmutablePair<CapabilityData, GraphEdge>> capabilites) {
-        List<Either<CapabilityDefinition, TitanOperationStatus>> listFilledCapabilitiesResults = capabilites.stream()
+    public Either<List<CapabilityDefinition>, JanusGraphOperationStatus> getCapabilitiesWithProps(List<ImmutablePair<CapabilityData, GraphEdge>> capabilites) {
+        List<Either<CapabilityDefinition, JanusGraphOperationStatus>> listFilledCapabilitiesResults = capabilites.stream()
                                                         .map(ImmutablePair::getLeft)
                                                         .map(this::toCapabilityDefinitionWithProps)
                                                         .collect(Collectors.toList());
         
-        Optional<TitanOperationStatus> status = listFilledCapabilitiesResults.stream().filter(Either::isRight)
+        Optional<JanusGraphOperationStatus> status = listFilledCapabilitiesResults.stream().filter(Either::isRight)
                                                                .map(res -> res.right().value())
                                                                .findFirst();
         
@@ -138,7 +140,7 @@ public class CapabilityOperation extends AbstractOperation {
         return Either.left(listCapabilities);
     }
     
-    private Either<CapabilityDefinition, TitanOperationStatus> toCapabilityDefinitionWithProps(CapabilityData capabilityData) {
+    private Either<CapabilityDefinition, JanusGraphOperationStatus> toCapabilityDefinitionWithProps(CapabilityData capabilityData) {
         CapabilityDefinition capabilityDefinition = new CapabilityDefinition(capabilityData.getCapabilityDataDefinition());
         return getCapabilityProperties(capabilityDefinition.getUniqueId(), capabilityDefinition.getType())
                     .left()
@@ -157,33 +159,34 @@ public class CapabilityOperation extends AbstractOperation {
      * @param capabilityUid
      * @return
      */
-    private Either<List<ComponentInstanceProperty>, TitanOperationStatus> getCapabilityProperties(String capabilityUid, String capabilityType) {
-        Either<CapabilityTypeDefinition, TitanOperationStatus> capabilityTypeRes = capabilityTypeOperation.getCapabilityTypeByType(capabilityType);
+    private Either<List<ComponentInstanceProperty>, JanusGraphOperationStatus> getCapabilityProperties(String capabilityUid, String capabilityType) {
+        Either<CapabilityTypeDefinition, JanusGraphOperationStatus> capabilityTypeRes = capabilityTypeOperation.getCapabilityTypeByType(capabilityType);
 
         if (capabilityTypeRes.isRight()) {
-            TitanOperationStatus status = capabilityTypeRes.right().value();
+            JanusGraphOperationStatus status = capabilityTypeRes.right().value();
             return Either.right(status);
         }
 
         CapabilityTypeDefinition capabilityTypeDefinition = capabilityTypeRes.left().value();
 
-        Either<Map<String, PropertyDefinition>, TitanOperationStatus> typesPropsRes = getPropertiesOfCapabilityTypeAndAcestors(capabilityTypeDefinition);
+        Either<Map<String, PropertyDefinition>, JanusGraphOperationStatus> typesPropsRes = getPropertiesOfCapabilityTypeAndAcestors(capabilityTypeDefinition);
         if (typesPropsRes.isRight()) {
-            TitanOperationStatus status = typesPropsRes.right().value();
+            JanusGraphOperationStatus status = typesPropsRes.right().value();
             return Either.right(status);
         }
         
         Map<String, PropertyDefinition> capabilityTypeProperties = typesPropsRes.left().value();
 
         if (isEmpty(capabilityTypeProperties)) {
-            return Either.right(TitanOperationStatus.OK);
+            return Either.right(JanusGraphOperationStatus.OK);
         }
 
         Map<String, PropertyDefinition> uidToPropDefMap = capabilityTypeProperties.values().stream()
                                                             .collect(Collectors.toMap(PropertyDefinition::getUniqueId, Function.identity()));
 
         // Find all properties values on the capability
-        Either<List<ImmutablePair<PropertyValueData, GraphEdge>>, TitanOperationStatus> propertyValNodes = titanGenericDao.getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Capability), capabilityUid, GraphEdgeLabels.PROPERTY_VALUE,
+        Either<List<ImmutablePair<PropertyValueData, GraphEdge>>, JanusGraphOperationStatus> propertyValNodes = janusGraphGenericDao
+            .getChildrenNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Capability), capabilityUid, GraphEdgeLabels.PROPERTY_VALUE,
                 NodeTypeEnum.PropertyValue, PropertyValueData.class);
 
         if (propertyValNodes.isRight()) {
@@ -192,7 +195,7 @@ public class CapabilityOperation extends AbstractOperation {
 
         List<ImmutablePair<PropertyValueData, GraphEdge>> propValsRelationPairs = propertyValNodes.left().value();
         if (isEmpty(propValsRelationPairs)) {
-            return Either.right(TitanOperationStatus.OK);
+            return Either.right(JanusGraphOperationStatus.OK);
         }
 
         List<ComponentInstanceProperty> capabilityProperties = new ArrayList<>();
@@ -200,12 +203,13 @@ public class CapabilityOperation extends AbstractOperation {
         for (ImmutablePair<PropertyValueData, GraphEdge> propValRelPair : propValsRelationPairs) {
 
             PropertyValueData propertyValueData = propValRelPair.getLeft();
-            Either<ImmutablePair<PropertyData, GraphEdge>, TitanOperationStatus> propertyDefRes = titanGenericDao.getChild(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.PropertyValue), propertyValueData.getUniqueId(), GraphEdgeLabels.PROPERTY_IMPL,
+            Either<ImmutablePair<PropertyData, GraphEdge>, JanusGraphOperationStatus> propertyDefRes = janusGraphGenericDao
+                .getChild(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.PropertyValue), propertyValueData.getUniqueId(), GraphEdgeLabels.PROPERTY_IMPL,
                     NodeTypeEnum.Property, PropertyData.class);
             if (propertyDefRes.isRight()) {
-                TitanOperationStatus status = propertyDefRes.right().value();
-                if (status == TitanOperationStatus.NOT_FOUND) {
-                    status = TitanOperationStatus.INVALID_ID;
+                JanusGraphOperationStatus status = propertyDefRes.right().value();
+                if (status == JanusGraphOperationStatus.NOT_FOUND) {
+                    status = JanusGraphOperationStatus.INVALID_ID;
                 }
                 return Either.right(status);
             }
@@ -242,8 +246,8 @@ public class CapabilityOperation extends AbstractOperation {
                                     .collect(Collectors.toSet());
     }
     
-    private Either<List<ComponentInstanceProperty>, TitanOperationStatus> onLoadPropValuesFailure(TitanOperationStatus status, Map<String, PropertyDefinition> capabilityTypeProperties) {
-        if (status == TitanOperationStatus.NOT_FOUND) {
+    private Either<List<ComponentInstanceProperty>, JanusGraphOperationStatus> onLoadPropValuesFailure(JanusGraphOperationStatus status, Map<String, PropertyDefinition> capabilityTypeProperties) {
+        if (status == JanusGraphOperationStatus.NOT_FOUND) {
             return Either.left(buildPropsFromCapabilityTypeProps(capabilityTypeProperties));
         } else {
             return Either.right(status);
@@ -267,15 +271,15 @@ public class CapabilityOperation extends AbstractOperation {
      * @param capabilityTypeDefinition
      * @return
      */
-    private Either<Map<String, PropertyDefinition>, TitanOperationStatus> getPropertiesOfCapabilityTypeAndAcestors(CapabilityTypeDefinition capabilityTypeDefinition) {
+    private Either<Map<String, PropertyDefinition>, JanusGraphOperationStatus> getPropertiesOfCapabilityTypeAndAcestors(CapabilityTypeDefinition capabilityTypeDefinition) {
         // Get the properties on the group type of this capability
         Map<String, PropertyDefinition> capabilityTypeProperties = capabilityTypeDefinition.getProperties();
         
         String derivedFrom = capabilityTypeDefinition.getDerivedFrom();
         if (!Strings.isNullOrEmpty(derivedFrom)) {
-            Either<Map<String, PropertyDefinition>, TitanOperationStatus> parentPropsRes = capabilityTypeOperation.getAllCapabilityTypePropertiesFromAllDerivedFrom(derivedFrom);
+            Either<Map<String, PropertyDefinition>, JanusGraphOperationStatus> parentPropsRes = capabilityTypeOperation.getAllCapabilityTypePropertiesFromAllDerivedFrom(derivedFrom);
             if(parentPropsRes.isRight()) {
-                TitanOperationStatus status = parentPropsRes.right().value();
+                JanusGraphOperationStatus status = parentPropsRes.right().value();
                 return Either.right(status);
             }
             if (capabilityTypeProperties != null) {
@@ -297,15 +301,15 @@ public class CapabilityOperation extends AbstractOperation {
      * @param capabilityTypeData
      * @return
      */
-    private Either<List<ComponentInstanceProperty>, TitanOperationStatus> createCapabilityProperties(CapabilityData capabilityData,
-                                                                                                     CapabilityTypeData capabilityTypeData) {
+    private Either<List<ComponentInstanceProperty>, JanusGraphOperationStatus> createCapabilityProperties(CapabilityData capabilityData,
+                                                                                                          CapabilityTypeData capabilityTypeData) {
 
         CapabilityDefinition capabilityDefintion = (CapabilityDefinition)capabilityData.getCapabilityDataDefinition();
         CapabilityTypeDefinition capabilityTypeDefinition = (CapabilityTypeDefinition)capabilityTypeData.getCapabilityTypeDataDefinition();
 
-        Either<Map<String, PropertyDefinition>, TitanOperationStatus> typesPropsRes = getPropertiesOfCapabilityTypeAndAcestors(capabilityTypeDefinition);
+        Either<Map<String, PropertyDefinition>, JanusGraphOperationStatus> typesPropsRes = getPropertiesOfCapabilityTypeAndAcestors(capabilityTypeDefinition);
         if (typesPropsRes.isRight()) {
-            TitanOperationStatus status = typesPropsRes.right().value();
+            JanusGraphOperationStatus status = typesPropsRes.right().value();
             return Either.right(status);
         }
         
@@ -313,10 +317,10 @@ public class CapabilityOperation extends AbstractOperation {
         
         if (isEmpty(capabilityTypeProperties) && !isEmpty(capabilityDefintion.getProperties())) {
             log.debug("#createCapabilityProperties - It's not valid if group capability has properties while corresponding capability type doesn't.");
-            return Either.right(TitanOperationStatus.MATCH_NOT_FOUND);
+            return Either.right(JanusGraphOperationStatus.MATCH_NOT_FOUND);
         }
 
-        Optional<TitanOperationStatus> error = capabilityDefintion.getProperties().stream()
+        Optional<JanusGraphOperationStatus> error = capabilityDefintion.getProperties().stream()
                              .map(property -> createPropertyValue(property, capabilityData, capabilityTypeProperties.get(property.getName())))
                              .filter(Either::isRight)
                              .map(result -> result.right().value())
@@ -342,11 +346,11 @@ public class CapabilityOperation extends AbstractOperation {
                 .collect(Collectors.toList());
     }
 
-    private  Either<PropertyValueData, TitanOperationStatus> createPropertyValue(ComponentInstanceProperty capabilityProperty, 
-                                                                              CapabilityData capabilityData,
-                                                                              PropertyDefinition capTypePropertyDefinition) {
+    private  Either<PropertyValueData, JanusGraphOperationStatus> createPropertyValue(ComponentInstanceProperty capabilityProperty,
+                                                                                      CapabilityData capabilityData,
+                                                                                      PropertyDefinition capTypePropertyDefinition) {
         if (capTypePropertyDefinition == null) {
-            return Either.right(TitanOperationStatus.MATCH_NOT_FOUND);
+            return Either.right(JanusGraphOperationStatus.MATCH_NOT_FOUND);
         }
         
         CapabilityDefinition capabilityDefintion = (CapabilityDefinition)capabilityData.getCapabilityDataDefinition();
@@ -357,7 +361,8 @@ public class CapabilityOperation extends AbstractOperation {
         PropertyValueData propertyValueData = new PropertyValueData();
         propertyValueData.setUniqueId(uniqueId);
         propertyValueData.setValue(capabilityProperty.getValue());
-        Either<PropertyValueData, TitanOperationStatus> propResult = titanGenericDao.createNode(propertyValueData, PropertyValueData.class);
+        Either<PropertyValueData, JanusGraphOperationStatus> propResult = janusGraphGenericDao
+            .createNode(propertyValueData, PropertyValueData.class);
         // It's not accepted if Capability Type doesn't have suitable property
         propResult = propResult.left()
                 .bind(propValueData -> connectToProperty(propValueData, capTypePropertyDefinition))
@@ -372,22 +377,23 @@ public class CapabilityOperation extends AbstractOperation {
         return propResult;
     }
     
-    private Either<GraphRelation, TitanOperationStatus> connectCapability(PropertyValueData propValueData, String name, CapabilityData capabilityData) {
+    private Either<GraphRelation, JanusGraphOperationStatus> connectCapability(PropertyValueData propValueData, String name, CapabilityData capabilityData) {
         Map<String, Object> properties = new HashMap<>();
         properties.put(GraphEdgePropertiesDictionary.NAME.getProperty(), name);
 
-        return titanGenericDao.createRelation(capabilityData, propValueData, GraphEdgeLabels.PROPERTY_VALUE, properties);
+        return janusGraphGenericDao.createRelation(capabilityData, propValueData, GraphEdgeLabels.PROPERTY_VALUE, properties);
     }
     
-    private Either<GraphRelation, TitanOperationStatus> connectToProperty(PropertyValueData propValueData, PropertyDefinition propertyDefinition) {
-        Either<PropertyData, TitanOperationStatus> dataTypesRes = titanGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Property), 
+    private Either<GraphRelation, JanusGraphOperationStatus> connectToProperty(PropertyValueData propValueData, PropertyDefinition propertyDefinition) {
+        Either<PropertyData, JanusGraphOperationStatus> dataTypesRes = janusGraphGenericDao.getNode(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.Property),
                                                                             propertyDefinition.getUniqueId(), PropertyData.class);
 
         Map<String, Object> properties = new HashMap<>();
         properties.put(GraphEdgePropertiesDictionary.NAME.getProperty(), propertyDefinition.getName());
         
         return dataTypesRes.left()
-                           .bind(propertyData -> titanGenericDao.createRelation(propValueData, propertyData, GraphEdgeLabels.PROPERTY_IMPL, properties));
+                           .bind(propertyData -> janusGraphGenericDao
+                               .createRelation(propValueData, propertyData, GraphEdgeLabels.PROPERTY_IMPL, properties));
     }
     
 
@@ -408,12 +414,14 @@ public class CapabilityOperation extends AbstractOperation {
 
     public StorageOperationStatus deleteCapability(CapabilityDefinition capabilityDef) {
         
-        return titanGenericDao.deleteChildrenNodes(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), capabilityDef.getUniqueId(), GraphEdgeLabels.PROPERTY_VALUE,
+        return janusGraphGenericDao
+            .deleteChildrenNodes(GraphPropertiesDictionary.UNIQUE_ID.getProperty(), capabilityDef.getUniqueId(), GraphEdgeLabels.PROPERTY_VALUE,
                                                     NodeTypeEnum.PropertyValue, PropertyValueData.class)
                  .left()
-                 .bind(props -> titanGenericDao.deleteNode(new CapabilityData(capabilityDef), CapabilityData.class))
+                 .bind(props -> janusGraphGenericDao
+                     .deleteNode(new CapabilityData(capabilityDef), CapabilityData.class))
                  .right()
-                 .map(DaoStatusConverter::convertTitanStatusToStorageStatus)
+                 .map(DaoStatusConverter::convertJanusGraphStatusToStorageStatus)
                  .right()
                  .on(capData -> StorageOperationStatus.OK);
     }