aboutsummaryrefslogtreecommitdiffstats
path: root/ajsc-aai/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineBuilder.java
diff options
context:
space:
mode:
Diffstat (limited to 'ajsc-aai/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineBuilder.java')
-rw-r--r--ajsc-aai/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineBuilder.java215
1 files changed, 215 insertions, 0 deletions
diff --git a/ajsc-aai/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineBuilder.java b/ajsc-aai/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineBuilder.java
new file mode 100644
index 0000000..ec3dc47
--- /dev/null
+++ b/ajsc-aai/src/main/java/org/openecomp/aai/query/builder/GremlinPipelineBuilder.java
@@ -0,0 +1,215 @@
+/*-
+ * ============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;
+/*
+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;
+ }
+
+}
+*/