summaryrefslogtreecommitdiffstats
path: root/aai-core
diff options
context:
space:
mode:
authorMaharajh, Robby (rx2202) <rx2202@att.com>2017-08-11 17:07:51 -0400
committerMaharajh, Robby (rx2202) <rx2202@att.com>2017-08-11 17:11:50 -0400
commitdda3cd32e4e80274fb416de25eab3ed9f7ee691a (patch)
tree449b53a07b7817ac74ad364f0fd181664a0e9164 /aai-core
parentbd1eeb9ee615b7be26686f0221ca893cf9eb0619 (diff)
[AAI-162 Amsterdam] Convert custom queries to not
use gremlin Change-Id: I50879849eb0d324d711934f75829cf2648ecff6c Signed-off-by: Maharajh, Robby (rx2202) <rx2202@att.com>
Diffstat (limited to 'aai-core')
-rw-r--r--aai-core/src/main/java/org/openecomp/aai/query/builder/GraphTraversalBuilder.java107
-rw-r--r--aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineBuilder.java214
-rw-r--r--aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineTraversal.java76
-rw-r--r--aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinQueryBuilder.java105
-rw-r--r--aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinTraversal.java1
-rw-r--r--aai-core/src/main/java/org/openecomp/aai/query/builder/QueryBuilder.java18
-rw-r--r--aai-core/src/main/java/org/openecomp/aai/serialization/engines/TransactionalGraphEngine.java12
7 files changed, 238 insertions, 295 deletions
diff --git a/aai-core/src/main/java/org/openecomp/aai/query/builder/GraphTraversalBuilder.java b/aai-core/src/main/java/org/openecomp/aai/query/builder/GraphTraversalBuilder.java
index 11164d96..73b57d06 100644
--- a/aai-core/src/main/java/org/openecomp/aai/query/builder/GraphTraversalBuilder.java
+++ b/aai-core/src/main/java/org/openecomp/aai/query/builder/GraphTraversalBuilder.java
@@ -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
index 729acbb4..00000000
--- a/aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineBuilder.java
+++ /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
index c29c367b..00000000
--- a/aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineTraversal.java
+++ /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);
- }
-
-}
-*/
diff --git a/aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinQueryBuilder.java b/aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinQueryBuilder.java
index e4e1fd5a..f93bc484 100644
--- a/aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinQueryBuilder.java
+++ b/aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinQueryBuilder.java
@@ -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}
*/
diff --git a/aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinTraversal.java b/aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinTraversal.java
index 3daad5ef..daf795fd 100644
--- a/aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinTraversal.java
+++ b/aai-core/src/main/java/org/openecomp/aai/query/builder/GremlinTraversal.java
@@ -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;
diff --git a/aai-core/src/main/java/org/openecomp/aai/query/builder/QueryBuilder.java b/aai-core/src/main/java/org/openecomp/aai/query/builder/QueryBuilder.java
index 565e8682..009f4fdf 100644
--- a/aai-core/src/main/java/org/openecomp/aai/query/builder/QueryBuilder.java
+++ b/aai-core/src/main/java/org/openecomp/aai/query/builder/QueryBuilder.java
@@ -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();
diff --git a/aai-core/src/main/java/org/openecomp/aai/serialization/engines/TransactionalGraphEngine.java b/aai-core/src/main/java/org/openecomp/aai/serialization/engines/TransactionalGraphEngine.java
index 9192b589..ffe866ed 100644
--- a/aai-core/src/main/java/org/openecomp/aai/serialization/engines/TransactionalGraphEngine.java
+++ b/aai-core/src/main/java/org/openecomp/aai/serialization/engines/TransactionalGraphEngine.java
@@ -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)) {