[AAI-162 Amsterdam] Convert custom queries to not 11/7411/1
authorMaharajh, Robby (rx2202) <rx2202@att.com>
Fri, 11 Aug 2017 21:07:51 +0000 (17:07 -0400)
committerMaharajh, Robby (rx2202) <rx2202@att.com>
Fri, 11 Aug 2017 21:11:50 +0000 (17:11 -0400)
 use gremlin

Change-Id: I50879849eb0d324d711934f75829cf2648ecff6c
Signed-off-by: Maharajh, Robby (rx2202) <rx2202@att.com>
aai-core/src/main/java/org/openecomp/aai/query/builder/GraphTraversalBuilder.java
aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineBuilder.java [deleted file]
aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineTraversal.java [deleted file]
aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinQueryBuilder.java
aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinTraversal.java
aai-core/src/main/java/org/openecomp/aai/query/builder/QueryBuilder.java
aai-core/src/main/java/org/openecomp/aai/serialization/engines/TransactionalGraphEngine.java

index 11164d9..73b57d0 100644 (file)
@@ -38,7 +38,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
-
 import org.openecomp.aai.db.props.AAIProperties;
 import org.openecomp.aai.exceptions.AAIException;
 import org.openecomp.aai.introspection.Introspector;
@@ -351,6 +350,112 @@ public abstract class GraphTraversalBuilder<E> extends QueryBuilder<E> {
                return this;
        }
        
+       @Override
+       public QueryBuilder<E> store(String name) {
+               
+               this.traversal.store(name);
+               stepIndex++;
+               
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<E> cap(String name) {
+               this.traversal.cap(name);
+               stepIndex++;
+               
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<E> unfold() {
+               this.traversal.unfold();
+               stepIndex++;
+                       
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<E> dedup() {
+               
+               this.traversal.dedup();
+               stepIndex++;
+               
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<E> emit() {
+               
+               this.traversal.emit();
+               stepIndex++;
+               
+               return this;
+               
+       }
+       
+       @Override
+       public QueryBuilder<E> repeat(QueryBuilder<E> builder) {
+               
+               this.traversal.repeat((GraphTraversal<Vertex, E>)builder.getQuery());
+               stepIndex++;
+
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<Edge> outE() {
+               this.traversal.outE();
+               stepIndex++;
+               return (QueryBuilder<Edge>)this;
+       }
+       
+       @Override
+       public QueryBuilder<Edge> inE() {
+               this.traversal.inE();
+               stepIndex++;
+               return (QueryBuilder<Edge>)this;
+       }
+       
+       @Override
+       public QueryBuilder<Vertex> outV() {
+               this.traversal.outV();
+               stepIndex++;
+               return (QueryBuilder<Vertex>)this;
+       }
+       
+       @Override
+       public QueryBuilder<Vertex> inV() {
+               this.traversal.inV();
+               stepIndex++;
+               return (QueryBuilder<Vertex>)this;
+       }
+       
+       @Override
+       public QueryBuilder<E> as(String name) {
+               this.traversal.as(name);
+               
+               stepIndex++;
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<E> not(QueryBuilder<E> builder) {
+               this.traversal.not(builder.getQuery());
+               
+               stepIndex++;
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<E> select(String name) {
+               this.traversal.select(name);
+               
+               stepIndex++;
+               
+               return this;
+       }
+       
        /**
         * Edge query.
         *
diff --git a/aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineBuilder.java b/aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineBuilder.java
deleted file mode 100644 (file)
index 729acbb..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.openecomp.aai
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-/*
-package org.openecomp.aai.query.builder;
-
-import java.util.LinkedHashMap;
-import java.util.List;
-
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-
-import org.openecomp.aai.db.AAIProperties;
-import org.openecomp.aai.exceptions.AAIException;
-import org.openecomp.aai.introspection.Introspector;
-import org.openecomp.aai.introspection.Loader;
-import org.openecomp.aai.serialization.db.EdgeRule;
-import org.openecomp.aai.serialization.db.EdgeRules;
-
-public abstract class GremlinPipelineBuilder extends QueryBuilder {
-
-       private GremlinPipeline pipeline = null;
-       private EdgeRules edgeRules = EdgeRules.getInstance();
-       private int parentStepIndex = 0;
-       private int stepIndex = 0;
-       
-       public GremlinPipelineBuilder(Loader loader) {
-               super(loader);
-               
-               pipeline = new GremlinPipeline(new IdentityPipe()).V();
-               
-       }
-       
-       public GremlinPipelineBuilder(Loader loader, Vertex start) {
-               super(loader, start);
-               
-               pipeline = new GremlinPipeline(start);
-               
-       }
-
-       @Override
-       public QueryBuilder getVerticesByIndexedProperty(String key, Object value) {
-       
-               return this.getVerticesByProperty(key, value);
-       }
-
-       @Override
-       public QueryBuilder getVerticesByProperty(String key, Object value) {
-               
-               //this is because the index is registered as an Integer
-               if (value != null && value.getClass().equals(Long.class)) {
-                       pipeline.has(key,new Integer(value.toString()));
-               } else {
-                       pipeline.has(key, value);
-               }
-               stepIndex++;
-               return this;
-       }
-
-       @Override
-       public QueryBuilder getChildVerticesFromParent(String parentKey, String parentValue, String childType) {
-               pipeline.has(parentKey, parentValue).has(AAIProperties.NODE_TYPE, childType);
-               stepIndex++;
-               return this;
-       }
-
-       @Override
-       public QueryBuilder getTypedVerticesByMap(String type, LinkedHashMap<String, String> map) {
-               
-               for (String key : map.keySet()) {
-                       pipeline.has(key, map.get(key));
-                       stepIndex++;
-               }
-               pipeline.has(AAIProperties.NODE_TYPE, type);
-               stepIndex++;
-               return this;
-       }
-
-       @Override
-       public QueryBuilder createDBQuery(Introspector obj) {
-               this.createKeyQuery(obj);
-               this.createContainerQuery(obj);
-               return this;
-       }
-
-       @Override
-       public QueryBuilder createKeyQuery(Introspector obj) {
-               List<String> keys = obj.getKeys();
-               Object val = null;
-               for (String key : keys) {
-                       val = obj.getValue(key);
-                       //this is because the index is registered as an Integer
-                       if (val != null && val.getClass().equals(Long.class)) {
-                               pipeline.has(key,new Integer(val.toString()));
-                       } else {
-                               pipeline.has(key, val);
-                       }
-                       stepIndex++;
-               }
-               return this;
-       }
-
-       @Override
-       
-       public QueryBuilder createContainerQuery(Introspector obj) {
-               String type = obj.getChildDBName();
-               String abstractType = obj.getMetadata("abstract");
-               if (abstractType != null) {
-                       String[] inheritors = obj.getMetadata("inheritors").split(",");
-                       GremlinPipeline[] pipes = new GremlinPipeline[inheritors.length];
-                       for (int i = 0; i < inheritors.length; i++) {
-                               pipes[i] = new GremlinPipeline(new IdentityPipe()).has(AAIProperties.NODE_TYPE, inheritors[i]);
-                       }
-                       pipeline.or(pipes);
-               } else {
-                       pipeline.has(AAIProperties.NODE_TYPE, type);
-               }
-               stepIndex++;
-               return this;
-       }
-
-       @Override
-       public QueryBuilder createEdgeTraversal(Introspector parent, Introspector child) {
-               String parentName = parent.getDbName();
-               String childName = child.getDbName();
-               String isAbstractType = parent.getMetadata("abstract");
-               if ("true".equals(isAbstractType)) {
-                       formBoundary();
-                       pipeline.outE().has("isParent", true).inV();
-               } else {
-                       if (parent.isContainer()) {
-                               parentName = parent.getChildDBName();
-                       }
-                       if (child.isContainer()) {
-                               childName = child.getChildDBName();
-                       }
-                       this.edgeQuery(parentName, childName);
-               }
-               return this;
-                       
-       }
-       
-       @Override
-       public QueryBuilder createEdgeTraversal(Vertex parent, Introspector child) {
-               
-               String nodeType = parent.getProperty(AAIProperties.NODE_TYPE);
-               this.edgeQuery(nodeType, child.getDbName());
-               return this;
-                       
-       }
-       
-       private void edgeQuery(String outType, String inType) {
-               formBoundary();
-               EdgeRule rule;
-               String label = "";
-               try {
-                       rule = edgeRules.getEdgeRule(outType, inType);
-                       label = rule.getLabel();
-               } catch (AAIException e) {
-                       // TODO Auto-generated catch block
-               }
-               pipeline = pipeline.out(label);
-               stepIndex++;
-       }
-
-       @Override
-       public Object getQuery() {
-               return this.pipeline;
-       }
-       
-       @Override
-       public Object getParentQuery() {
-               GremlinPipeline parent = new GremlinPipeline();
-               if (parentStepIndex == 0) {
-                       parentStepIndex = stepIndex;
-               }
-               List<Pipe> pipes = this.pipeline.getPipes();
-               //add two for the garbage identity pipes
-               for (int i = 0; i < parentStepIndex + 2; i++) {
-                       parent.add(pipes.get(i));
-               }
-
-               return parent;
-       }
-       
-       @Override
-       public void formBoundary() {
-               parentStepIndex = stepIndex;
-       }
-       
-       
-       @Override
-       public Vertex getStart() {
-               return this.start;
-       }
-       
-}
-*/
diff --git a/aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineTraversal.java b/aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineTraversal.java
deleted file mode 100644 (file)
index c29c367..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.openecomp.aai
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-/*
-package org.openecomp.aai.query.builder;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URI;
-
-import javax.ws.rs.core.MultivaluedMap;
-
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-
-import org.openecomp.aai.exceptions.AAIException;
-import org.openecomp.aai.introspection.Introspector;
-import org.openecomp.aai.introspection.Loader;
-import org.openecomp.aai.parsers.query.QueryParser;
-import org.openecomp.aai.parsers.query.TraversalStrategy;
-
-public class GremlinPipelineTraversal extends GremlinPipelineBuilder {
-
-       public GremlinPipelineTraversal(Loader loader) {
-               super(loader);
-               this.factory = new TraversalStrategy(this.loader, this);
-       }
-       
-       public GremlinPipelineTraversal(Loader loader, Vertex start) {
-               super(loader, start);
-               this.factory = new TraversalStrategy(this.loader, this);
-       }
-       
-       @Override
-       public QueryParser createQueryFromURI(URI uri) throws UnsupportedEncodingException, AAIException {
-               return factory.buildURIParser(uri);
-       }
-
-       @Override
-       public QueryParser createQueryFromRelationship(Introspector relationship) throws UnsupportedEncodingException, AAIException {
-               return factory.buildRelationshipParser(relationship);
-       }
-
-       @Override
-       public QueryParser createQueryFromURI(URI uri, MultivaluedMap<String, String> queryParams)
-                       throws UnsupportedEncodingException, AAIException {
-               return factory.buildURIParser(uri, queryParams);
-       }
-
-       @Override
-       public QueryBuilder newInstance(Vertex start) {
-               return new GremlinPipelineTraversal(loader, start);
-       }
-       
-       @Override
-       public QueryBuilder newInstance() {
-               return new GremlinPipelineTraversal(loader);
-       }
-
-}
-*/
index e4e1fd5..f93bc48 100644 (file)
@@ -32,7 +32,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
-
 import org.openecomp.aai.db.props.AAIProperties;
 import org.openecomp.aai.exceptions.AAIException;
 import org.openecomp.aai.introspection.Introspector;
@@ -43,6 +42,7 @@ import org.openecomp.aai.serialization.db.EdgeRule;
 import org.openecomp.aai.serialization.db.EdgeRules;
 import org.openecomp.aai.serialization.db.EdgeType;
 import org.openecomp.aai.serialization.db.exceptions.NoEdgeRuleFoundException;
+
 import com.google.common.base.Joiner;
 
 /**
@@ -345,6 +345,109 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> {
                return this;
        }
        
+       @Override
+       public QueryBuilder<E> store(String name) {
+               this.list.add(".store('"+ name + "')");
+               stepIndex++;
+               
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<E> cap(String name) {
+               this.list.add(".cap('"+ name + "')");
+               stepIndex++;
+               
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<E> unfold() {
+               this.list.add(".unfold()");
+               stepIndex++;
+               
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<E> dedup() {
+               this.list.add(".dedup()");
+               stepIndex++;
+               
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<E> emit() {
+               this.list.add(".emit()");
+               stepIndex++;
+               
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<E> repeat(QueryBuilder<E> builder) {
+               this.list.add(".repeat(__" + builder.getQuery()  + ")");
+               stepIndex++;
+               
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<Edge> outE() {
+               this.list.add(".outE()");
+               stepIndex++;
+               
+               return (QueryBuilder<Edge>)this;
+       }
+       
+       @Override
+       public QueryBuilder<Edge> inE() {
+               this.list.add(".inE()");
+               stepIndex++;
+               
+               return (QueryBuilder<Edge>)this;
+       }
+       
+       @Override
+       public QueryBuilder<Vertex> outV() {
+               this.list.add(".outV()");
+               stepIndex++;
+               
+               return (QueryBuilder<Vertex>)this;
+       }
+       
+       @Override
+       public QueryBuilder<Vertex> inV() {
+               this.list.add(".inV()");
+               stepIndex++;
+               
+               return (QueryBuilder<Vertex>)this;
+       }
+       
+       @Override
+       public QueryBuilder<E> not(QueryBuilder<E> builder) {
+               this.list.add(".not(" + "__" + builder.getQuery() + ")");
+               stepIndex++;
+               
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<E> as(String name) {
+               this.list.add(".as('" + name + "')");
+               stepIndex++;
+               
+               return this;
+       }
+       
+       @Override
+       public QueryBuilder<E> select(String name) {
+               this.list.add(".select('" + name + "')");
+               stepIndex++;
+               
+               return this;
+       }
        /**
         * @{inheritDoc}
         */
index 3daad5e..daf795f 100644 (file)
@@ -29,7 +29,6 @@ import javax.ws.rs.core.MultivaluedMap;
 
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
-
 import org.openecomp.aai.exceptions.AAIException;
 import org.openecomp.aai.introspection.Introspector;
 import org.openecomp.aai.introspection.Loader;
index 565e868..009f4fd 100644 (file)
@@ -31,7 +31,6 @@ import javax.ws.rs.core.MultivaluedMap;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
-
 import org.openecomp.aai.exceptions.AAIException;
 import org.openecomp.aai.introspection.Introspector;
 import org.openecomp.aai.introspection.Loader;
@@ -285,7 +284,22 @@ public abstract class QueryBuilder<E> implements Iterator<E> {
        public abstract QueryBuilder<E> union(QueryBuilder<E>... builder);
        
        public abstract QueryBuilder<E> where(QueryBuilder<E>... builder);
-       public abstract void markContainer();
+       
+       public abstract QueryBuilder<E> store(String name);
+       public abstract QueryBuilder<E> cap(String name);
+       public abstract QueryBuilder<E> unfold();
+       public abstract QueryBuilder<E> dedup();
+       public abstract QueryBuilder<E> emit();
+       public abstract QueryBuilder<E> repeat(QueryBuilder<E> builder);
+       public abstract QueryBuilder<Edge> outE();
+       public abstract QueryBuilder<Edge> inE();
+       public abstract QueryBuilder<Vertex> inV();
+       public abstract QueryBuilder<Vertex> outV();
+       public abstract QueryBuilder<E> not(QueryBuilder<E> builder);
+       public abstract QueryBuilder<E> as(String name);
+       public abstract QueryBuilder<E> select(String name);
+       
+       public abstract void markContainer();
 
        public abstract QueryBuilder<E> getContainerQuery();
 
index 9192b58..ffe866e 100644 (file)
@@ -145,7 +145,15 @@ public abstract class TransactionalGraphEngine {
                return getQueryBuilder(this.loader);
        }
        
+       public QueryBuilder<Vertex> getQueryBuilder(QueryStyle style) {
+               return getQueryBuilder(style, this.loader);
+       }
+       
        public QueryBuilder<Vertex> getQueryBuilder(Loader loader) {
+               return getQueryBuilder(this.style, loader);
+       }
+       
+       public  QueryBuilder<Vertex> getQueryBuilder(QueryStyle style, Loader loader) {
                if (style.equals(QueryStyle.GREMLIN_TRAVERSAL)) {
                        return new GremlinTraversal<>(loader, this.asAdmin().getTraversalSource());
                } else if (style.equals(QueryStyle.GREMLIN_UNIQUE)) {
@@ -170,6 +178,10 @@ public abstract class TransactionalGraphEngine {
        }
        
        public QueryBuilder<Vertex> getQueryBuilder(Loader loader, Vertex start) {
+               return getQueryBuilder(this.style, loader, start);
+       }
+       
+       public QueryBuilder<Vertex> getQueryBuilder(QueryStyle style, Loader loader, Vertex start) {
                if (style.equals(QueryStyle.GREMLIN_TRAVERSAL)) {
                        return new GremlinTraversal<>(loader, this.asAdmin().getTraversalSource(), start);
                } else if (style.equals(QueryStyle.GREMLIN_UNIQUE)) {