Enhancements for the aai-common library
[aai/aai-common.git] / aai-core / src / main / java / org / onap / aai / serialization / engines / query / GraphTraversalQueryEngine.java
index e012aef..376a279 100644 (file)
 
 package org.onap.aai.serialization.engines.query;
 
-import static org.onap.aai.edges.enums.AAIDirection.IN;
-import static org.onap.aai.edges.enums.AAIDirection.NONE;
-import static org.onap.aai.edges.enums.AAIDirection.OUT;
-import static org.onap.aai.edges.enums.EdgeField.PRIVATE;
-import static org.onap.aai.edges.enums.EdgeProperty.CONTAINS;
-import static org.onap.aai.edges.enums.EdgeProperty.DELETE_OTHER_V;
-
-import java.util.List;
-import java.util.Set;
-
 import org.apache.tinkerpop.gremlin.process.traversal.Order;
 import org.apache.tinkerpop.gremlin.process.traversal.P;
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
@@ -41,9 +32,19 @@ import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.onap.aai.db.props.AAIProperties;
+import org.onap.aai.edges.enums.EdgeField;
+import org.onap.aai.edges.enums.EdgeProperty;
 import org.onap.aai.introspection.Loader;
 import org.onap.aai.logging.StopWatch;
 
+import java.util.List;
+import java.util.Set;
+
+import static org.onap.aai.edges.enums.AAIDirection.*;
+import static org.onap.aai.edges.enums.EdgeField.PRIVATE;
+import static org.onap.aai.edges.enums.EdgeProperty.CONTAINS;
+import static org.onap.aai.edges.enums.EdgeProperty.DELETE_OTHER_V;
+
 /*
  * This class needs some big explanation despite its compact size.
  * This controls all the queries performed by the CRUD API in A&AI.
@@ -256,6 +257,15 @@ public class GraphTraversalQueryEngine extends QueryEngine {
         return pipeline.toList();
     }
 
+    public List<Path> findCousinsAsPath(Vertex start){
+        return this.g.V(start).bothE().where(
+            __.and(
+                __.has(EdgeProperty.CONTAINS.toString(), NONE.toString()),
+                __.not(__.has(EdgeField.PRIVATE.toString(), true))
+            )
+        ).otherV().path().toList();
+    }
+
     public double getDBTimeMsecs() {
         return (dbTimeMsecs);
     }