summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--aai-core/pom.xml23
-rw-r--r--aai-core/src/main/java/org/onap/aai/domain/responseMessage/AAIResponseMessageData.java58
-rw-r--r--aai-core/src/main/java/org/onap/aai/query/builder/GremlinQueryBuilder.java1420
-rw-r--r--aai-schema-ingest/pom.xml10
-rw-r--r--aai-schema/src/main/resources/onap/aai_schema/aai_schema_v14.xsd7
-rw-r--r--aai-schema/src/main/resources/onap/dbedgerules/v14/DbEdgeRules_hpa_v14.json25
-rw-r--r--aai-schema/src/main/resources/onap/oxm/v14/aai_oxm_v14.xml33
-rw-r--r--aai-utils/pom.xml2
8 files changed, 830 insertions, 748 deletions
diff --git a/aai-core/pom.xml b/aai-core/pom.xml
index 4715bcf6..6ba76996 100644
--- a/aai-core/pom.xml
+++ b/aai-core/pom.xml
@@ -45,10 +45,11 @@
<eelf.core.version>1.0.0</eelf.core.version>
<logback.version>1.2.3</logback.version>
<freemarker.version>2.3.21</freemarker.version>
- <activemq.version>5.15.3</activemq.version>
+ <activemq.version>5.15.6</activemq.version>
<jacoco.line.coverage.limit>0.50</jacoco.line.coverage.limit>
<gremlin.version>3.2.2</gremlin.version>
- <jetty.version>9.4.6.v20170531</jetty.version>
+ <groovy.version>2.4.15</groovy.version>
+ <jetty.version>9.4.11.v20180605</jetty.version>
<!-- Start of Default ONAP Schema Properties -->
<aai.wiki.link>https://wiki.onap.org/</aai.wiki.link>
@@ -781,6 +782,10 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ </exclusion>
</exclusions>
</dependency>
<dependency>
@@ -796,12 +801,12 @@
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
- <version>4.3.6.RELEASE</version>
+ <version>4.3.18.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
- <version>4.3.6.RELEASE</version>
+ <version>4.3.18.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
@@ -943,10 +948,16 @@
<artifactId>json-patch</artifactId>
<version>1.9</version>
</dependency>
+ <dependency>
+ <groupId>org.codehaus.groovy</groupId>
+ <artifactId>groovy</artifactId>
+ <version>${groovy.version}</version>
+ <classifier>indy</classifier>
+ </dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
- <version>4.3.16.RELEASE</version>
+ <version>4.3.18.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -980,7 +991,7 @@
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
- <version>4.3.16.RELEASE</version>
+ <version>4.3.18.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
diff --git a/aai-core/src/main/java/org/onap/aai/domain/responseMessage/AAIResponseMessageData.java b/aai-core/src/main/java/org/onap/aai/domain/responseMessage/AAIResponseMessageData.java
index 49fb0c1e..1f40906f 100644
--- a/aai-core/src/main/java/org/onap/aai/domain/responseMessage/AAIResponseMessageData.java
+++ b/aai-core/src/main/java/org/onap/aai/domain/responseMessage/AAIResponseMessageData.java
@@ -4,6 +4,8 @@
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
* ================================================================================
+ * Modifications Copyright © 2018 IBM.
+ * ================================================================================
* 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
@@ -39,39 +41,39 @@ import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
- "aaiResponseMessageDatum",
- "any"
+ "aaiResponseMessageDatum",
+ "any"
})
@XmlRootElement(name = "aai-response-message-data", namespace = "http://org.onap.aai.inventory")
public class AAIResponseMessageData {
- @XmlElement(name = "aai-response-message-datum")
- protected List<AAIResponseMessageDatum> aaiResponseMessageDatum;
- @XmlAnyElement(lax = true)
- protected List<Object> any;
+ @XmlElement(name = "aai-response-message-datum")
+ protected List<AAIResponseMessageDatum> aaiResponseMessageDatum;
+ @XmlAnyElement(lax = true)
+ protected List<Object> any;
- /**
- * Gets the AAI response message datum.
- *
- * @return the AAI response message datum
- */
- public List<AAIResponseMessageDatum> getAAIResponseMessageDatum() {
- if (aaiResponseMessageDatum == null) {
- aaiResponseMessageDatum = new ArrayList<AAIResponseMessageDatum>();
- }
- return this.aaiResponseMessageDatum;
- }
+ /**
+ * Gets the AAI response message datum.
+ *
+ * @return the AAI response message datum
+ */
+ public List<AAIResponseMessageDatum> getAAIResponseMessageDatum() {
+ if (aaiResponseMessageDatum == null) {
+ aaiResponseMessageDatum = new ArrayList<>();
+ }
+ return this.aaiResponseMessageDatum;
+ }
- /**
- * Gets the any.
- *
- * @return the any
- */
- public List<Object> getAny() {
- if (any == null) {
- any = new ArrayList<Object>();
- }
- return this.any;
- }
+ /**
+ * Gets the any.
+ *
+ * @return the any
+ */
+ public List<Object> getAny() {
+ if (any == null) {
+ any = new ArrayList<>();
+ }
+ return this.any;
+ }
}
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 683f4729..2cc78f44 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
@@ -4,6 +4,8 @@
* ================================================================================
* Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
* ================================================================================
+ * Modifications Copyright © 2018 IBM.
+ * ================================================================================
* 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
@@ -49,100 +51,102 @@ import java.util.*;
*/
public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> {
- private GremlinGroovyShellSingleton gremlinGroovy = GremlinGroovyShellSingleton.getInstance();
- private GraphTraversal<?, ?> completeTraversal = null;
- protected List<String> list = null;
-
- /**
- * Instantiates a new gremlin query builder.
- *
- * @param loader the loader
- */
- public GremlinQueryBuilder(Loader loader, GraphTraversalSource source) {
- super(loader, source);
- list = new ArrayList<>();
- }
-
- /**
- * Instantiates a new gremlin query builder.
- *
- * @param loader the loader
- * @param start the start
- */
- public GremlinQueryBuilder(Loader loader, GraphTraversalSource source, Vertex start) {
- super(loader, source, start);
- list = new ArrayList<>();
- }
-
- @Override
- public QueryBuilder<Vertex> exactMatchQuery(Introspector obj) {
- // TODO not implemented because this is implementation is no longer used
- this.createKeyQuery(obj);
- this.createContainerQuery(obj);
- return (QueryBuilder<Vertex>) this;
- }
-
- /**
- * @{inheritDoc}
- */
- @Override
- public QueryBuilder<Vertex> getVerticesByProperty(String key, Object value) {
-
- String term = "";
- if (value != null && !(value instanceof String) ) {
- term = value.toString();
- } else {
- term = "'" + value + "'";
- }
- list.add(".has('" + key + "', " + term + ")");
- stepIndex++;
- return (QueryBuilder<Vertex>) this;
- }
-
- @Override
- public QueryBuilder<Vertex> getVerticesByBooleanProperty(String key, Object value) {
- boolean bValue = false;
-
- if(value instanceof String){
- bValue = Boolean.valueOf(value.toString());
- } else if(value instanceof Boolean){
- bValue = (Boolean) value;
- }
-
- list.add(".has('" + key + "', " + bValue + ")");
- stepIndex++;
- return (QueryBuilder<Vertex>) this;
- }
-
- /**
- * @{inheritDoc}
- */
- @Override
- public QueryBuilder<Vertex> getVerticesByProperty(String key, List<?> values) {
-
- String predicate = "P.within(#!#argument#!#)";
- List<String> arguments = new ArrayList<>();
- for (Object item : values) {
- if (item != null && !(item instanceof String)) {
- arguments.add(item.toString());
- } else {
- arguments.add("'" + item + "'");
- }
- }
- String argument = Joiner.on(",").join(arguments);
- predicate = predicate.replace("#!#argument#!#", argument);
- list.add(".has('" + key + "', " + predicate + ")");
- stepIndex++;
- return (QueryBuilder<Vertex>) this;
- }
-
- /**
+ private static final String ARGUMENT2 = "#!#argument#!#";
+ private static final String HAS = ".has('";
+ private GremlinGroovyShellSingleton gremlinGroovy = GremlinGroovyShellSingleton.getInstance();
+ private GraphTraversal<?, ?> completeTraversal = null;
+ protected List<String> list = null;
+
+ /**
+ * Instantiates a new gremlin query builder.
+ *
+ * @param loader the loader
+ */
+ public GremlinQueryBuilder(Loader loader, GraphTraversalSource source) {
+ super(loader, source);
+ list = new ArrayList<>();
+ }
+
+ /**
+ * Instantiates a new gremlin query builder.
+ *
+ * @param loader the loader
+ * @param start the start
+ */
+ public GremlinQueryBuilder(Loader loader, GraphTraversalSource source, Vertex start) {
+ super(loader, source, start);
+ list = new ArrayList<>();
+ }
+
+ @Override
+ public QueryBuilder<Vertex> exactMatchQuery(Introspector obj) {
+ // TODO not implemented because this is implementation is no longer used
+ this.createKeyQuery(obj);
+ this.createContainerQuery(obj);
+ return (QueryBuilder<Vertex>) this;
+ }
+
+ /**
+ * @{inheritDoc}
+ */
+ @Override
+ public QueryBuilder<Vertex> getVerticesByProperty(String key, Object value) {
+
+ String term = "";
+ if (value != null && !(value instanceof String) ) {
+ term = value.toString();
+ } else {
+ term = "'" + value + "'";
+ }
+ list.add(HAS + key + "', " + term + ")");
+ stepIndex++;
+ return (QueryBuilder<Vertex>) this;
+ }
+
+ @Override
+ public QueryBuilder<Vertex> getVerticesByBooleanProperty(String key, Object value) {
+ boolean bValue = false;
+
+ if(value instanceof String){
+ bValue = Boolean.valueOf(value.toString());
+ } else if(value instanceof Boolean){
+ bValue = (Boolean) value;
+ }
+
+ list.add(HAS + key + "', " + bValue + ")");
+ stepIndex++;
+ return (QueryBuilder<Vertex>) this;
+ }
+
+ /**
+ * @{inheritDoc}
+ */
+ @Override
+ public QueryBuilder<Vertex> getVerticesByProperty(String key, List<?> values) {
+
+ String predicate = "P.within(#!#argument#!#)";
+ List<String> arguments = new ArrayList<>();
+ for (Object item : values) {
+ if (item != null && !(item instanceof String)) {
+ arguments.add(item.toString());
+ } else {
+ arguments.add("'" + item + "'");
+ }
+ }
+ String argument = Joiner.on(",").join(arguments);
+ predicate = predicate.replace(ARGUMENT2, argument);
+ list.add(HAS + key + "', " + predicate + ")");
+ stepIndex++;
+ return (QueryBuilder<Vertex>) this;
+ }
+
+ /**
* @{inheritDoc}
*/
@Override
public QueryBuilder<Vertex> getVerticesByProperty(String key) {
- list.add(".has('" + key + "')");
+ list.add(HAS + key + "')");
stepIndex++;
return (QueryBuilder<Vertex>) this;
}
@@ -153,72 +157,71 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> {
@Override
public QueryBuilder<Vertex> getVerticesExcludeByProperty(String key) {
- String term = "";
list.add(".hasNot('" + key + "')");
stepIndex++;
return (QueryBuilder<Vertex>) this;
}
- /**
- * @{inheritDoc}
- */
- @Override
- public QueryBuilder<Vertex> getVerticesStartsWithProperty(String key, Object value) {
-
- String term = "";
- String predicate = "org.janusgraph.core.attribute.Text.textPrefix(#!#argument#!#)";
- if (value != null && !(value instanceof String) ) {
- term = value.toString();
- } else {
- term = "'" + value + "'";
- }
- predicate = predicate.replace("#!#argument#!#", term);
- list.add(".has('" + key + "', " + predicate + ")");
- stepIndex++;
- return (QueryBuilder<Vertex>) this;
- }
-
- /**
- * @{inheritDoc}
- */
- @Override
- public QueryBuilder<Vertex> getVerticesExcludeByProperty(String key, Object value) {
-
- String term = "";
- String predicate = "P.neq(#!#argument#!#)";
- if (value != null && !(value instanceof String) ) {
- term = value.toString();
- } else {
- term = "'" + value + "'";
- }
- predicate = predicate.replace("#!#argument#!#", term);
- list.add(".has('" + key + "', " + predicate + ")");
- stepIndex++;
- return (QueryBuilder<Vertex>) this;
- }
-
- /**
- * @{inheritDoc}
- */
- @Override
- public QueryBuilder<Vertex> getVerticesExcludeByProperty(String key, List<?> values) {
-
- String predicate = "P.without(#!#argument#!#)";
- List<String> arguments = new ArrayList<>();
- for (Object item : values) {
- if (item != null && !(item instanceof String)) {
- arguments.add(item.toString());
- } else {
- arguments.add("'" + item + "'");
- }
- }
- String argument = Joiner.on(",").join(arguments);
- predicate = predicate.replace("#!#argument#!#", argument);
- list.add(".has('" + key + "', " + predicate + ")");
- stepIndex++;
- return (QueryBuilder<Vertex>) this;
- }
-
+ /**
+ * @{inheritDoc}
+ */
+ @Override
+ public QueryBuilder<Vertex> getVerticesStartsWithProperty(String key, Object value) {
+
+ String term = "";
+ String predicate = "org.janusgraph.core.attribute.Text.textPrefix(#!#argument#!#)";
+ if (value != null && !(value instanceof String) ) {
+ term = value.toString();
+ } else {
+ term = "'" + value + "'";
+ }
+ predicate = predicate.replace(ARGUMENT2, term);
+ list.add(HAS + key + "', " + predicate + ")");
+ stepIndex++;
+ return (QueryBuilder<Vertex>) this;
+ }
+
+ /**
+ * @{inheritDoc}
+ */
+ @Override
+ public QueryBuilder<Vertex> getVerticesExcludeByProperty(String key, Object value) {
+
+ String term = "";
+ String predicate = "P.neq(#!#argument#!#)";
+ if (value != null && !(value instanceof String) ) {
+ term = value.toString();
+ } else {
+ term = "'" + value + "'";
+ }
+ predicate = predicate.replace(ARGUMENT2, term);
+ list.add(HAS + key + "', " + predicate + ")");
+ stepIndex++;
+ return (QueryBuilder<Vertex>) this;
+ }
+
+ /**
+ * @{inheritDoc}
+ */
+ @Override
+ public QueryBuilder<Vertex> getVerticesExcludeByProperty(String key, List<?> values) {
+
+ String predicate = "P.without(#!#argument#!#)";
+ List<String> arguments = new ArrayList<>();
+ for (Object item : values) {
+ if (item != null && !(item instanceof String)) {
+ arguments.add(item.toString());
+ } else {
+ arguments.add("'" + item + "'");
+ }
+ }
+ String argument = Joiner.on(",").join(arguments);
+ predicate = predicate.replace(ARGUMENT2, argument);
+ list.add(HAS + key + "', " + predicate + ")");
+ stepIndex++;
+ return (QueryBuilder<Vertex>) this;
+ }
+
@Override
public QueryBuilder<Vertex> getVerticesGreaterThanProperty(String key, Object value) {
String predicate = "P.gte(#!#argument1#!#)";
@@ -229,7 +232,7 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> {
term = "'" + value + "'";
}
predicate = predicate.replace("#!#argument1#!#", term);
- list.add(".has('" + key + "', " + predicate + ")");
+ list.add(HAS + key + "', " + predicate + ")");
stepIndex++;
return (QueryBuilder<Vertex>) this;
}
@@ -244,7 +247,7 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> {
term = "'" + value + "'";
}
predicate = predicate.replace("#!#argument1#!#", term);
- list.add(".has('" + key + "', " + predicate + ")");
+ list.add(HAS + key + "', " + predicate + ")");
stepIndex++;
return (QueryBuilder<Vertex>) this;
}
@@ -252,563 +255,558 @@ public abstract class GremlinQueryBuilder<E> extends QueryBuilder<E> {
- /**
- * @{inheritDoc}
- */
- @Override
- public QueryBuilder<Vertex> getChildVerticesFromParent(String parentKey, String parentValue, String childType) {
- /*
- String query = ".has('aai-node-type', '" + childType + "')";
-
- return this.processGremlinQuery(parentKey, parentValue, query);
- */
- //TODO
- return (QueryBuilder<Vertex>) this;
- }
-
- /**
- * @{inheritDoc}
- */
- @Override
- public QueryBuilder<Vertex> getTypedVerticesByMap(String type, Map<String, String> map) {
-
- for (Map.Entry<String, String> es : map.entrySet()) {
- list.add(".has('" + es.getKey() + "', '" + es.getValue() + "')");
- stepIndex++;
- }
- list.add(".has('aai-node-type', '" + type + "')");
- stepIndex++;
- return (QueryBuilder<Vertex>) this;
- }
-
- /**
- * @{inheritDoc}
- */
- @Override
- public QueryBuilder<Vertex> createKeyQuery(Introspector obj) {
- Set<String> keys = obj.getKeys();
-
- for (String key : keys) {
-
- this.getVerticesByProperty(key, obj.<Object>getValue(key));
-
- }
- return (QueryBuilder<Vertex>) this;
- }
-
- /**
- * @throws NoEdgeRuleFoundException
- * @throws AAIException
- * @{inheritDoc}
- */
- @Override
- public QueryBuilder createEdgeTraversal(EdgeType type, Introspector parent, Introspector child) throws AAIException {
- String parentName = parent.getDbName();
- String childName = child.getDbName();
- if (parent.isContainer()) {
- parentName = parent.getChildDBName();
- }
- if (child.isContainer()) {
- childName = child.getChildDBName();
- }
- this.edgeQueryToVertex(type, parentName, childName, null);
- return this;
-
- }
-
- @Override
- public QueryBuilder createPrivateEdgeTraversal(EdgeType type, Introspector parent, Introspector child) throws AAIException{
- String parentName = parent.getDbName();
- String childName = child.getDbName();
- if (parent.isContainer()) {
- parentName = parent.getChildDBName();
- }
- if (child.isContainer()) {
- childName = child.getChildDBName();
- }
- this.edgeQueryToVertex(type, parentName, childName, null, true);
- return this;
- }
-
- /**
- *
- * @{inheritDoc}
- */
- @Override
- public QueryBuilder<Vertex> createEdgeTraversalWithLabels(EdgeType type, Introspector out, Introspector in, List<String> labels) throws AAIException {
- String parentName = out.getDbName();
- String childName = in.getDbName();
- if (out.isContainer()) {
- parentName = out.getChildDBName();
- }
- if (in.isContainer()) {
- childName = in.getChildDBName();
- }
- this.edgeQueryToVertex(type, parentName, childName, labels);
- return (QueryBuilder<Vertex>) this;
- }
-
-
- public QueryBuilder<Edge> getEdgesBetweenWithLabels(EdgeType type, String outNodeType, String inNodeType, List<String> labels) throws AAIException {
- this.edgeQuery(type, outNodeType, inNodeType, labels);
- return (QueryBuilder<Edge>)this;
- }
-
- private void edgeQueryToVertex(EdgeType type, String outType, String inType, List<String> labels) throws AAIException {
- this.edgeQueryToVertex(type, outType, inType, labels, false);
- }
-
- /**
- * Edge query.
- *
- * @param outType the out type
- * @param inType the in type
- * @throws NoEdgeRuleFoundException
- * @throws AAIException
- */
- private void edgeQueryToVertex(EdgeType type, String outType, String inType, List<String> labels, boolean isPrivateEdge) throws AAIException {
- markParentBoundary();
- Multimap<String, EdgeRule> rules = ArrayListMultimap.create();
- EdgeRuleQuery.Builder qB = new EdgeRuleQuery.Builder(outType, inType).edgeType(type).setPrivate(isPrivateEdge);
-
- try {
- if (labels == null) {
- rules.putAll(edgeRules.getRules(qB.build()));
- } else {
- for (String label : labels) {
- rules.putAll(edgeRules.getRules(qB.label(label).build()));
- }
- }
- } catch (EdgeRuleNotFoundException e) {
- throw new NoEdgeRuleFoundException(e);
- }
-
- final List<String> inLabels = new ArrayList<>();
- final List<String> outLabels = new ArrayList<>();
-
- for (EdgeRule rule : rules.values()) {
- if (labels != null && !labels.contains(rule.getLabel())) {
- return;
- } else {
- if (Direction.IN.equals(rule.getDirection())) {
- inLabels.add(rule.getLabel());
- } else {
- outLabels.add(rule.getLabel());
- }
- }
- }
-
- if(inLabels.isEmpty() && outLabels.isEmpty()) {
- throw new NoEdgeRuleFoundException("no " + type.toString() + " edge rule between " + outType + " and " + inType );
- } else if (inLabels.isEmpty() && !outLabels.isEmpty()) {
- list.add(".out('" + String.join("','", outLabels) + "')");
- } else if (outLabels.isEmpty() && !inLabels.isEmpty()) {
- list.add(".in('" + String.join("','", inLabels) + "')");
- } else {
- list.add(".union(__.in('" + String.join("','", inLabels) + "')" + ", __.out('" + String.join("','", outLabels) + "'))");
- }
- stepIndex++;
- list.add(".has('" + AAIProperties.NODE_TYPE + "', '" + inType + "')");
- stepIndex++;
-
- }
-
- /**
- * Edge query.
- *
- * @param outType the out type
- * @param inType the in type
- * @throws NoEdgeRuleFoundException
- * @throws AAIException
- */
- private void edgeQuery(EdgeType type, String outType, String inType, List<String> labels) throws AAIException {
- markParentBoundary();
- Multimap<String, EdgeRule> rules = ArrayListMultimap.create();
- EdgeRuleQuery.Builder qB = new EdgeRuleQuery.Builder(outType, inType).edgeType(type);
- try {
- if (labels == null) {
- rules.putAll(edgeRules.getRules(qB.build()));
- } else {
- for (String label : labels) {
- rules.putAll(edgeRules.getRules(qB.label(label).build()));
- }
- }
- } catch (EdgeRuleNotFoundException e) {
- throw new NoEdgeRuleFoundException(e);
- }
-
- final List<String> inLabels = new ArrayList<>();
- final List<String> outLabels = new ArrayList<>();
-
- for (EdgeRule rule : rules.values()) {
- if (labels != null && !labels.contains(rule.getLabel())) {
- return;
- } else {
- if (Direction.IN.equals(rule.getDirection())) {
- inLabels.add(rule.getLabel());
- } else {
- outLabels.add(rule.getLabel());
- }
- }
- }
-
- if(inLabels.isEmpty() && outLabels.isEmpty()) {
- throw new NoEdgeRuleFoundException("no " + type.toString() + " edge rule between " + outType + " and " + inType );
- } else if (inLabels.isEmpty() && !outLabels.isEmpty()) {
- list.add(".outE('" + String.join("','", outLabels) + "')");
- } else if (outLabels.isEmpty() && !inLabels.isEmpty()) {
- list.add(".inE('" + String.join("','", inLabels) + "')");
- } else {
- list.add(".union(__.inE('" + String.join("','", inLabels) + "')" + ", __.outE('" + String.join("','", outLabels) + "'))");
- }
-
- stepIndex++;
-
- }
- @Override
- public QueryBuilder<E> limit(long amount) {
- list.add(".limit(" + amount + ")");
- return this;
- }
- /**
- * @{inheritDoc}
- */
- @Override
- public QueryBuilder<Vertex> createContainerQuery(Introspector obj) {
- String type = obj.getChildDBName();
- String abstractType = obj.getMetadata(ObjectMetadata.ABSTRACT);
- if (abstractType != null) {
- String[] inheritors = obj.getMetadata(ObjectMetadata.INHERITORS).split(",");
- String[] wrapped = new String[inheritors.length];
- StringBuilder command = new StringBuilder();
- command.append("P.within(");
- for (int i = 0; i < inheritors.length; i++) {
- wrapped[i] = "'" + inheritors[i] + "'";
- }
- command.append(Joiner.on(",").join(wrapped));
- command.append(")");
- list.add(".has('aai-node-type', " + command + ")");
-
- } else {
- list.add(".has('aai-node-type', '" + type + "')");
- }
- stepIndex++;
- this.markContainer();
- return (QueryBuilder<Vertex>) this;
- }
-
- @Override
- public QueryBuilder<E> union(QueryBuilder<E>... builder) {
- markParentBoundary();
- String[] traversals = new String[builder.length];
- StringBuilder command = new StringBuilder();
- for (int i = 0; i < builder.length; i++) {
- traversals[i] = "__" + builder[i].getQuery();
- }
- command.append(".union(");
- command.append(Joiner.on(",").join(traversals));
- command.append(")");
- list.add(command.toString());
- stepIndex++;
-
- return this;
- }
-
- @Override
- public QueryBuilder<E> where(QueryBuilder<E>... builder) {
- markParentBoundary();
- List<String> traversals = new ArrayList<>();
- for (int i = 0; i < builder.length; i++) {
- traversals.add(".where(__" + builder[i].getQuery() + ")");
- stepIndex++;
- }
- list.addAll(traversals);
-
-
- return this;
- }
-
- @Override
- public QueryBuilder<E> or(QueryBuilder<E>... builder) {
- markParentBoundary();
- String[] traversals = new String[builder.length];
- StringBuilder command = new StringBuilder();
- for (int i = 0; i < builder.length; i++) {
- traversals[i] = "__" + builder[i].getQuery();
- }
- command.append(".or(");
- command.append(Joiner.on(",").join(traversals));
- command.append(")");
- list.add(command.toString());
- stepIndex++;
-
- 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<E> until(QueryBuilder<E> builder) {
- this.list.add(".until(__" + builder.getQuery() + ")");
- stepIndex++;
-
- return this;
- }
-
- @Override
- public QueryBuilder<E> groupCount() {
- this.list.add(".groupCount()");
- stepIndex++;
-
- return this;
- }
-
- @Override
- public QueryBuilder<E> both() {
- this.list.add(".both()");
- stepIndex++;
-
- return this;
- }
-
- @Override
- public QueryBuilder<Tree> tree() {
- this.list.add(".tree()");
- stepIndex++;
-
- return (QueryBuilder<Tree>)this;
- }
-
- @Override
- public QueryBuilder<E> by(String name) {
- this.list.add(".by('"+ name + "')");
- stepIndex++;
-
- return this;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public QueryBuilder<E> simplePath(){
- this.list.add(".simplePath()");
- stepIndex++;
- return this;
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public QueryBuilder<Path> path(){
- this.list.add(".path()");
- stepIndex++;
- return (QueryBuilder<Path>)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}
- */
- @Override
- public QueryBuilder<E> getParentQuery() {
- return cloneQueryAtStep(parentStepIndex);
- }
-
- @Override
- public QueryBuilder<E> getContainerQuery() {
- return cloneQueryAtStep(containerStepIndex);
- }
-
- /**
- * @{inheritDoc}
- */
- @Override
- public <T2> T2 getQuery() {
- StringBuilder sb = new StringBuilder();
-
- for (String piece : this.list) {
- sb.append(piece);
- }
-
- return (T2)sb.toString();
- }
-
- /**
- * @{inheritDoc}
- */
- @Override
- public void markParentBoundary() {
- parentStepIndex = stepIndex;
- }
-
- @Override
- public void markContainer() {
- this.containerStepIndex = stepIndex;
- }
-
- /**
- * @{inheritDoc}
- */
- @Override
- public Vertex getStart() {
- return this.start;
- }
-
- protected int getParentStepIndex() {
- return parentStepIndex;
- }
-
- protected int getContainerStepIndex() {
- return containerStepIndex;
- }
-
- protected int getStepIndex() {
- return stepIndex;
- }
-
- private void executeQuery() {
- String queryString = "g" + Joiner.on("").join(list);
- Map<String, Object> params = new HashMap<>();
- if (this.start == null) {
- params.put("g", source.V());
- } else {
- params.put("g", source.V(this.start));
- }
- this.completeTraversal = this.gremlinGroovy.executeTraversal(queryString, params);
- }
- @Override
- public boolean hasNext() {
- if (this.completeTraversal == null) {
- executeQuery();
- }
-
- return this.completeTraversal.hasNext();
- }
-
- @Override
- public E next() {
- if (this.completeTraversal == null) {
- executeQuery();
- }
-
- return (E)this.completeTraversal.next();
- }
-
- @Override
- public List<E> toList() {
- if (this.completeTraversal == null) {
- executeQuery();
- }
-
- return (List<E>)this.completeTraversal.toList();
- }
-
- protected QueryBuilder<Edge> has(String key, String value) {
- this.list.add(".has('" + key + "','" + value + "')");
-
- return (QueryBuilder<Edge>)this;
- }
-
+ /**
+ * @{inheritDoc}
+ */
+ @Override
+ public QueryBuilder<Vertex> getChildVerticesFromParent(String parentKey, String parentValue, String childType) {
+ //TODO
+ return (QueryBuilder<Vertex>) this;
+ }
+
+ /**
+ * @{inheritDoc}
+ */
+ @Override
+ public QueryBuilder<Vertex> getTypedVerticesByMap(String type, Map<String, String> map) {
+
+ for (Map.Entry<String, String> es : map.entrySet()) {
+ list.add(HAS + es.getKey() + "', '" + es.getValue() + "')");
+ stepIndex++;
+ }
+ list.add(".has('aai-node-type', '" + type + "')");
+ stepIndex++;
+ return (QueryBuilder<Vertex>) this;
+ }
+
+ /**
+ * @{inheritDoc}
+ */
+ @Override
+ public QueryBuilder<Vertex> createKeyQuery(Introspector obj) {
+ Set<String> keys = obj.getKeys();
+
+ for (String key : keys) {
+
+ this.getVerticesByProperty(key, obj.<Object>getValue(key));
+
+ }
+ return (QueryBuilder<Vertex>) this;
+ }
+
+ /**
+ * @throws NoEdgeRuleFoundException
+ * @throws AAIException
+ * @{inheritDoc}
+ */
+ @Override
+ public QueryBuilder createEdgeTraversal(EdgeType type, Introspector parent, Introspector child) throws AAIException {
+ String parentName = parent.getDbName();
+ String childName = child.getDbName();
+ if (parent.isContainer()) {
+ parentName = parent.getChildDBName();
+ }
+ if (child.isContainer()) {
+ childName = child.getChildDBName();
+ }
+ this.edgeQueryToVertex(type, parentName, childName, null);
+ return this;
+
+ }
+
+ @Override
+ public QueryBuilder createPrivateEdgeTraversal(EdgeType type, Introspector parent, Introspector child) throws AAIException{
+ String parentName = parent.getDbName();
+ String childName = child.getDbName();
+ if (parent.isContainer()) {
+ parentName = parent.getChildDBName();
+ }
+ if (child.isContainer()) {
+ childName = child.getChildDBName();
+ }
+ this.edgeQueryToVertex(type, parentName, childName, null, true);
+ return this;
+ }
+
+ /**
+ *
+ * @{inheritDoc}
+ */
+ @Override
+ public QueryBuilder<Vertex> createEdgeTraversalWithLabels(EdgeType type, Introspector out, Introspector in, List<String> labels) throws AAIException {
+ String parentName = out.getDbName();
+ String childName = in.getDbName();
+ if (out.isContainer()) {
+ parentName = out.getChildDBName();
+ }
+ if (in.isContainer()) {
+ childName = in.getChildDBName();
+ }
+ this.edgeQueryToVertex(type, parentName, childName, labels);
+ return (QueryBuilder<Vertex>) this;
+ }
+
+
+ public QueryBuilder<Edge> getEdgesBetweenWithLabels(EdgeType type, String outNodeType, String inNodeType, List<String> labels) throws AAIException {
+ this.edgeQuery(type, outNodeType, inNodeType, labels);
+ return (QueryBuilder<Edge>)this;
+ }
+
+ private void edgeQueryToVertex(EdgeType type, String outType, String inType, List<String> labels) throws AAIException {
+ this.edgeQueryToVertex(type, outType, inType, labels, false);
+ }
+
+ /**
+ * Edge query.
+ *
+ * @param outType the out type
+ * @param inType the in type
+ * @throws NoEdgeRuleFoundException
+ * @throws AAIException
+ */
+ private void edgeQueryToVertex(EdgeType type, String outType, String inType, List<String> labels, boolean isPrivateEdge) throws AAIException {
+ markParentBoundary();
+ Multimap<String, EdgeRule> rules = ArrayListMultimap.create();
+ EdgeRuleQuery.Builder qB = new EdgeRuleQuery.Builder(outType, inType).edgeType(type).setPrivate(isPrivateEdge);
+
+ try {
+ if (labels == null) {
+ rules.putAll(edgeRules.getRules(qB.build()));
+ } else {
+ for (String label : labels) {
+ rules.putAll(edgeRules.getRules(qB.label(label).build()));
+ }
+ }
+ } catch (EdgeRuleNotFoundException e) {
+ throw new NoEdgeRuleFoundException(e);
+ }
+
+ final List<String> inLabels = new ArrayList<>();
+ final List<String> outLabels = new ArrayList<>();
+
+ for (EdgeRule rule : rules.values()) {
+ if (labels != null && !labels.contains(rule.getLabel())) {
+ return;
+ } else {
+ if (Direction.IN.equals(rule.getDirection())) {
+ inLabels.add(rule.getLabel());
+ } else {
+ outLabels.add(rule.getLabel());
+ }
+ }
+ }
+
+ if(inLabels.isEmpty() && outLabels.isEmpty()) {
+ throw new NoEdgeRuleFoundException("no " + type.toString() + " edge rule between " + outType + " and " + inType );
+ } else if (inLabels.isEmpty() && !outLabels.isEmpty()) {
+ list.add(".out('" + String.join("','", outLabels) + "')");
+ } else if (outLabels.isEmpty() && !inLabels.isEmpty()) {
+ list.add(".in('" + String.join("','", inLabels) + "')");
+ } else {
+ list.add(".union(__.in('" + String.join("','", inLabels) + "')" + ", __.out('" + String.join("','", outLabels) + "'))");
+ }
+ stepIndex++;
+ list.add(HAS + AAIProperties.NODE_TYPE + "', '" + inType + "')");
+ stepIndex++;
+
+ }
+
+ /**
+ * Edge query.
+ *
+ * @param outType the out type
+ * @param inType the in type
+ * @throws NoEdgeRuleFoundException
+ * @throws AAIException
+ */
+ private void edgeQuery(EdgeType type, String outType, String inType, List<String> labels) throws AAIException {
+ markParentBoundary();
+ Multimap<String, EdgeRule> rules = ArrayListMultimap.create();
+ EdgeRuleQuery.Builder qB = new EdgeRuleQuery.Builder(outType, inType).edgeType(type);
+ try {
+ if (labels == null) {
+ rules.putAll(edgeRules.getRules(qB.build()));
+ } else {
+ for (String label : labels) {
+ rules.putAll(edgeRules.getRules(qB.label(label).build()));
+ }
+ }
+ } catch (EdgeRuleNotFoundException e) {
+ throw new NoEdgeRuleFoundException(e);
+ }
+
+ final List<String> inLabels = new ArrayList<>();
+ final List<String> outLabels = new ArrayList<>();
+
+ for (EdgeRule rule : rules.values()) {
+ if (labels != null && !labels.contains(rule.getLabel())) {
+ return;
+ } else {
+ if (Direction.IN.equals(rule.getDirection())) {
+ inLabels.add(rule.getLabel());
+ } else {
+ outLabels.add(rule.getLabel());
+ }
+ }
+ }
+
+ if(inLabels.isEmpty() && outLabels.isEmpty()) {
+ throw new NoEdgeRuleFoundException("no " + type.toString() + " edge rule between " + outType + " and " + inType );
+ } else if (inLabels.isEmpty() && !outLabels.isEmpty()) {
+ list.add(".outE('" + String.join("','", outLabels) + "')");
+ } else if (outLabels.isEmpty() && !inLabels.isEmpty()) {
+ list.add(".inE('" + String.join("','", inLabels) + "')");
+ } else {
+ list.add(".union(__.inE('" + String.join("','", inLabels) + "')" + ", __.outE('" + String.join("','", outLabels) + "'))");
+ }
+
+ stepIndex++;
+
+ }
+ @Override
+ public QueryBuilder<E> limit(long amount) {
+ list.add(".limit(" + amount + ")");
+ return this;
+ }
+ /**
+ * @{inheritDoc}
+ */
+ @Override
+ public QueryBuilder<Vertex> createContainerQuery(Introspector obj) {
+ String type = obj.getChildDBName();
+ String abstractType = obj.getMetadata(ObjectMetadata.ABSTRACT);
+ if (abstractType != null) {
+ String[] inheritors = obj.getMetadata(ObjectMetadata.INHERITORS).split(",");
+ String[] wrapped = new String[inheritors.length];
+ StringBuilder command = new StringBuilder();
+ command.append("P.within(");
+ for (int i = 0; i < inheritors.length; i++) {
+ wrapped[i] = "'" + inheritors[i] + "'";
+ }
+ command.append(Joiner.on(",").join(wrapped));
+ command.append(")");
+ list.add(".has('aai-node-type', " + command + ")");
+
+ } else {
+ list.add(".has('aai-node-type', '" + type + "')");
+ }
+ stepIndex++;
+ this.markContainer();
+ return (QueryBuilder<Vertex>) this;
+ }
+
+ @Override
+ public QueryBuilder<E> union(QueryBuilder<E>... builder) {
+ markParentBoundary();
+ String[] traversals = new String[builder.length];
+ StringBuilder command = new StringBuilder();
+ for (int i = 0; i < builder.length; i++) {
+ traversals[i] = "__" + builder[i].getQuery();
+ }
+ command.append(".union(");
+ command.append(Joiner.on(",").join(traversals));
+ command.append(")");
+ list.add(command.toString());
+ stepIndex++;
+
+ return this;
+ }
+
+ @Override
+ public QueryBuilder<E> where(QueryBuilder<E>... builder) {
+ markParentBoundary();
+ List<String> traversals = new ArrayList<>();
+ for (int i = 0; i < builder.length; i++) {
+ traversals.add(".where(__" + builder[i].getQuery() + ")");
+ stepIndex++;
+ }
+ list.addAll(traversals);
+
+
+ return this;
+ }
+
+ @Override
+ public QueryBuilder<E> or(QueryBuilder<E>... builder) {
+ markParentBoundary();
+ String[] traversals = new String[builder.length];
+ StringBuilder command = new StringBuilder();
+ for (int i = 0; i < builder.length; i++) {
+ traversals[i] = "__" + builder[i].getQuery();
+ }
+ command.append(".or(");
+ command.append(Joiner.on(",").join(traversals));
+ command.append(")");
+ list.add(command.toString());
+ stepIndex++;
+
+ 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<E> until(QueryBuilder<E> builder) {
+ this.list.add(".until(__" + builder.getQuery() + ")");
+ stepIndex++;
+
+ return this;
+ }
+
+ @Override
+ public QueryBuilder<E> groupCount() {
+ this.list.add(".groupCount()");
+ stepIndex++;
+
+ return this;
+ }
+
+ @Override
+ public QueryBuilder<E> both() {
+ this.list.add(".both()");
+ stepIndex++;
+
+ return this;
+ }
+
+ @Override
+ public QueryBuilder<Tree> tree() {
+ this.list.add(".tree()");
+ stepIndex++;
+
+ return (QueryBuilder<Tree>)this;
+ }
+
+ @Override
+ public QueryBuilder<E> by(String name) {
+ this.list.add(".by('"+ name + "')");
+ stepIndex++;
+
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public QueryBuilder<E> simplePath(){
+ this.list.add(".simplePath()");
+ stepIndex++;
+ return this;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public QueryBuilder<Path> path(){
+ this.list.add(".path()");
+ stepIndex++;
+ return (QueryBuilder<Path>)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}
+ */
+ @Override
+ public QueryBuilder<E> getParentQuery() {
+ return cloneQueryAtStep(parentStepIndex);
+ }
+
+ @Override
+ public QueryBuilder<E> getContainerQuery() {
+ return cloneQueryAtStep(containerStepIndex);
+ }
+
+ /**
+ * @{inheritDoc}
+ */
+ @Override
+ public <T2> T2 getQuery() {
+ StringBuilder sb = new StringBuilder();
+
+ for (String piece : this.list) {
+ sb.append(piece);
+ }
+
+ return (T2)sb.toString();
+ }
+
+ /**
+ * @{inheritDoc}
+ */
+ @Override
+ public void markParentBoundary() {
+ parentStepIndex = stepIndex;
+ }
+
+ @Override
+ public void markContainer() {
+ this.containerStepIndex = stepIndex;
+ }
+
+ /**
+ * @{inheritDoc}
+ */
+ @Override
+ public Vertex getStart() {
+ return this.start;
+ }
+
+ protected int getParentStepIndex() {
+ return parentStepIndex;
+ }
+
+ protected int getContainerStepIndex() {
+ return containerStepIndex;
+ }
+
+ protected int getStepIndex() {
+ return stepIndex;
+ }
+
+ private void executeQuery() {
+ String queryString = "g" + Joiner.on("").join(list);
+ Map<String, Object> params = new HashMap<>();
+ if (this.start == null) {
+ params.put("g", source.V());
+ } else {
+ params.put("g", source.V(this.start));
+ }
+ this.completeTraversal = this.gremlinGroovy.executeTraversal(queryString, params);
+ }
+ @Override
+ public boolean hasNext() {
+ if (this.completeTraversal == null) {
+ executeQuery();
+ }
+
+ return this.completeTraversal.hasNext();
+ }
+
+ @Override
+ public E next() {
+ if (this.completeTraversal == null) {
+ executeQuery();
+ }
+
+ return (E)this.completeTraversal.next();
+ }
+
+ @Override
+ public List<E> toList() {
+ if (this.completeTraversal == null) {
+ executeQuery();
+ }
+
+ 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-schema-ingest/pom.xml b/aai-schema-ingest/pom.xml
index ab8be115..71869c9e 100644
--- a/aai-schema-ingest/pom.xml
+++ b/aai-schema-ingest/pom.xml
@@ -64,6 +64,12 @@
<artifactId>guava</artifactId>
<version>16.0</version>
</dependency>
+ <dependency>
+ <groupId>org.codehaus.groovy</groupId>
+ <artifactId>groovy</artifactId>
+ <version>2.4.15</version>
+ <classifier>indy</classifier>
+ </dependency>
<dependency>
<groupId>org.apache.tinkerpop</groupId>
<artifactId>gremlin-core</artifactId>
@@ -77,12 +83,12 @@
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
- <version>4.3.16.RELEASE</version>
+ <version>4.3.18.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
- <version>4.3.16.RELEASE</version>
+ <version>4.3.18.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
diff --git a/aai-schema/src/main/resources/onap/aai_schema/aai_schema_v14.xsd b/aai-schema/src/main/resources/onap/aai_schema/aai_schema_v14.xsd
index 44f96182..a0115514 100644
--- a/aai-schema/src/main/resources/onap/aai_schema/aai_schema_v14.xsd
+++ b/aai-schema/src/main/resources/onap/aai_schema/aai_schema_v14.xsd
@@ -2211,6 +2211,13 @@ xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
</xs:appinfo>
</xs:annotation>
</xs:element>
+ <xs:element name="openstack-region-id" type="xs:string" minOccurs="0">
+ <xs:annotation>
+ <xs:appinfo>
+ <annox:annotate target="field">@org.onap.aai.annotations.Metadata(description="OpenStack region ID used by MultiCloud plugin to interact with an OpenStack instance.")</annox:annotate>
+ </xs:appinfo>
+ </xs:annotation>
+ </xs:element>
<xs:element name="resource-version" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:appinfo>
diff --git a/aai-schema/src/main/resources/onap/dbedgerules/v14/DbEdgeRules_hpa_v14.json b/aai-schema/src/main/resources/onap/dbedgerules/v14/DbEdgeRules_hpa_v14.json
index 11ea1b54..a2d44442 100644
--- a/aai-schema/src/main/resources/onap/dbedgerules/v14/DbEdgeRules_hpa_v14.json
+++ b/aai-schema/src/main/resources/onap/dbedgerules/v14/DbEdgeRules_hpa_v14.json
@@ -38,6 +38,31 @@
"prevent-delete": "NONE",
"default": "true",
"description":""
+ },
+ {
+ "from": "hpa-capacity",
+ "to": "pserver",
+ "label": "org.onap.relationships.inventory.BelongsTo",
+ "direction": "OUT",
+ "multiplicity": "MANY2ONE",
+ "contains-other-v": "!${direction}",
+ "delete-other-v": "!${direction}",
+ "SVC-INFRA": "!${direction}",
+ "prevent-delete": "NONE",
+ "default": "true",
+ "description":"HPA Capacity KV for given compute node"
+ },
+ {
+ "from": "flavor",
+ "to": "pserver",
+ "label": "org.onap.relationships.inventory.CanBeInstantiatedIn",
+ "direction": "OUT",
+ "multiplicity": "MANY2MANY",
+ "contains-other-v": "NONE",
+ "delete-other-v": "NONE",
+ "prevent-delete": "NONE",
+ "default": "true",
+ "description":"HPA Capacity getting the compute nodes from given flavor"
}
]
}
diff --git a/aai-schema/src/main/resources/onap/oxm/v14/aai_oxm_v14.xml b/aai-schema/src/main/resources/onap/oxm/v14/aai_oxm_v14.xml
index d42bed54..cfd0672b 100644
--- a/aai-schema/src/main/resources/onap/oxm/v14/aai_oxm_v14.xml
+++ b/aai-schema/src/main/resources/onap/oxm/v14/aai_oxm_v14.xml
@@ -475,6 +475,11 @@
<xml-property name="description" value="the status of external system." />
</xml-properties>
</xml-element>
+ <xml-element java-attribute="openstackRegionId" name="openstack-region-id" type="java.lang.String">
+ <xml-properties>
+ <xml-property name="description" value="OpenStack region ID used by MultiCloud plugin to interact with an OpenStack instance." />
+ </xml-properties>
+ </xml-element>
<xml-element java-attribute="resourceVersion" name="resource-version" type="java.lang.String">
<xml-properties>
<xml-property name="description" value="Used for optimistic concurrency. Must be empty on create, valid on update and delete." />
@@ -2106,6 +2111,7 @@
<xml-element java-attribute="relationshipList" name="relationship-list" type="inventory.aai.onap.org.v14.RelationshipList"/>
<xml-element java-attribute="pInterfaces" name="p-interfaces" type="inventory.aai.onap.org.v14.PInterfaces"/>
<xml-element java-attribute="lagInterfaces" name="lag-interfaces" type="inventory.aai.onap.org.v14.LagInterfaces"/>
+ <xml-element container-type="java.util.ArrayList" java-attribute="hpaCapacity" name="hpa-capacity" type="inventory.aai.onap.org.v14.HpaCapacity"/>
</java-attributes>
<xml-properties>
<xml-property name="description" value="Compute host whose hostname must be unique and must exactly match what is sent as a relationship to a vserver."/>
@@ -2119,6 +2125,33 @@
</xml-properties>
</java-type>
+ <java-type name="HpaCapacity">
+ <xml-root-element name="hpa-capacity"/>
+ <java-attributes>
+ <xml-element java-attribute="hpaCapacityKey" name="hpa-capacity-key" required="true" type="java.lang.String" xml-key="true">
+ <xml-properties>
+ <xml-property name="description" value="Composite key formed with hpaFeature and append list of hpaFeatureAttributes needed for capacity check"/>
+ </xml-properties>
+ </xml-element>
+ <xml-element java-attribute="hpaCapacityValue" name="hpa-capacity-value" type="java.lang.String">
+ <xml-properties>
+ <xml-property name="description" value="JSON string specifying the capacity (total,free), unit and metadata of the specific HPA attribute"/>
+ </xml-properties>
+ </xml-element>
+ <xml-element java-attribute="resourceVersion" name="resource-version" type="java.lang.String">
+ <xml-properties>
+ <xml-property name="description" value="Used for optimistic concurrency. Must be empty on create, valid on update and delete."/>
+ </xml-properties>
+ </xml-element>
+ <xml-element java-attribute="relationshipList" name="relationship-list" type="inventory.aai.onap.org.v14.RelationshipList"/>
+ </java-attributes>
+ <xml-properties>
+ <xml-property name="description" value="HPA Capacity information for compute node"/>
+ <xml-property name="indexedProps" value="hpa-capacity-key"/>
+ <xml-property name="dependentOn" value="hpa-capacity"/>
+ </xml-properties>
+ </java-type>
+
<java-type name="PInterfaces">
<xml-properties>
<xml-property name="description" value="Collection of physical interfaces."/>
diff --git a/aai-utils/pom.xml b/aai-utils/pom.xml
index 5b2c7021..4eadb513 100644
--- a/aai-utils/pom.xml
+++ b/aai-utils/pom.xml
@@ -71,7 +71,7 @@
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
- <version>4.3.10.RELEASE</version>
+ <version>4.3.18.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>