diff options
Diffstat (limited to 'aai-core/src/main/java')
3 files changed, 71 insertions, 2 deletions
diff --git a/aai-core/src/main/java/org/onap/aai/query/builder/GraphTraversalBuilder.java b/aai-core/src/main/java/org/onap/aai/query/builder/GraphTraversalBuilder.java index 85b484a7..b298dbb9 100644 --- a/aai-core/src/main/java/org/onap/aai/query/builder/GraphTraversalBuilder.java +++ b/aai-core/src/main/java/org/onap/aai/query/builder/GraphTraversalBuilder.java @@ -26,6 +26,7 @@ import java.util.Optional; import java.util.Set; import org.apache.tinkerpop.gremlin.process.traversal.P; +import org.apache.tinkerpop.gremlin.process.traversal.Path; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.Traversal.Admin; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; @@ -477,6 +478,16 @@ public abstract class GraphTraversalBuilder<E> extends QueryBuilder<E> { stepIndex++; return this; } + + /** + * {@inheritDoc} + */ + @Override + public QueryBuilder<Path> path(){ + this.traversal.path(); + stepIndex++; + return (QueryBuilder<Path>)this; + } @Override public QueryBuilder<Edge> outE() { @@ -757,4 +768,9 @@ public abstract class GraphTraversalBuilder<E> extends QueryBuilder<E> { return this.completeTraversal.toList(); } + protected QueryBuilder<Edge> has(String key, String value) { + traversal.has(key, value); + + return (QueryBuilder<Edge>)this; + } } diff --git a/aai-core/src/main/java/org/onap/aai/query/builder/GremlinQueryBuilder.java b/aai-core/src/main/java/org/onap/aai/query/builder/GremlinQueryBuilder.java index 55faa4dc..010dfa50 100644 --- a/aai-core/src/main/java/org/onap/aai/query/builder/GremlinQueryBuilder.java +++ b/aai-core/src/main/java/org/onap/aai/query/builder/GremlinQueryBuilder.java @@ -25,6 +25,8 @@ import java.util.List; import java.util.Map; import java.util.Set; +import com.google.common.base.Joiner; +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.structure.Direction; @@ -525,6 +527,16 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> { stepIndex++; return this; } + + /** + * {@inheritDoc} + */ + @Override + public QueryBuilder<Path> path(){ + this.list.add(".path()"); + stepIndex++; + return (QueryBuilder<Path>)this; + } @Override public QueryBuilder<Edge> outE() { @@ -678,5 +690,11 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> { return (List<E>)this.completeTraversal.toList(); } + + protected QueryBuilder<Edge> has(String key, String value) { + this.list.add(".has('" + key + "','" + value + "')"); + + return (QueryBuilder<Edge>)this; + } } diff --git a/aai-core/src/main/java/org/onap/aai/query/builder/QueryBuilder.java b/aai-core/src/main/java/org/onap/aai/query/builder/QueryBuilder.java index 89c15f25..0350aba2 100644 --- a/aai-core/src/main/java/org/onap/aai/query/builder/QueryBuilder.java +++ b/aai-core/src/main/java/org/onap/aai/query/builder/QueryBuilder.java @@ -27,6 +27,7 @@ import java.util.Map; import javax.ws.rs.core.MultivaluedMap; +import org.apache.tinkerpop.gremlin.process.traversal.Path; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.structure.Edge; import org.apache.tinkerpop.gremlin.structure.Vertex; @@ -36,6 +37,8 @@ import org.onap.aai.introspection.Introspector; import org.onap.aai.introspection.Loader; import org.onap.aai.parsers.query.QueryParser; import org.onap.aai.parsers.query.QueryParserStrategy; +import org.onap.aai.serialization.db.AAIDirection; +import org.onap.aai.serialization.db.EdgeProperty; import org.onap.aai.serialization.db.EdgeType; /** @@ -405,16 +408,48 @@ public abstract class QueryBuilder<E> implements Iterator<E> { * @return a QueryBuilder with the simplePath step appended to its traversal */ public abstract QueryBuilder<E> simplePath(); + + /** + * + * @return QueryBuilder with the path step appended to its traversal + */ + public abstract QueryBuilder<Path> path(); public abstract void markContainer(); public abstract QueryBuilder<E> getContainerQuery(); public abstract List<E> toList(); - + + /** + * Used to skip step if there is an optional property missing. + * @param key + * @param value + * @return + */ public QueryBuilder<Vertex> getVerticesByProperty(String key, MissingOptionalParameter value) { return (QueryBuilder<Vertex>) this; } - + /** + * TODO the edge direction is hardcoded here, make it more generic + * Returns the parent edge of the vertex + * @return + */ + public QueryBuilder<Edge> getParentEdge() { + this.outE().has(EdgeProperty.CONTAINS.toString(), AAIDirection.IN.toString()); + return (QueryBuilder<Edge>)this; + } + + /** + * TODO the edge direction is hardcoded here, make it more generic + * Returns the parent vertex of the vertex + * @return + */ + public QueryBuilder<Vertex> getParentVertex() { + this.getParentEdge().inV(); + return (QueryBuilder<Vertex>)this; + } + + protected abstract QueryBuilder<Edge> has(String key, String value); } |