aboutsummaryrefslogtreecommitdiffstats
path: root/aai-core/src/main/java/org/openecomp/aai/serialization/db/DBSerializer.java
diff options
context:
space:
mode:
Diffstat (limited to 'aai-core/src/main/java/org/openecomp/aai/serialization/db/DBSerializer.java')
-rw-r--r--aai-core/src/main/java/org/openecomp/aai/serialization/db/DBSerializer.java153
1 files changed, 34 insertions, 119 deletions
diff --git a/aai-core/src/main/java/org/openecomp/aai/serialization/db/DBSerializer.java b/aai-core/src/main/java/org/openecomp/aai/serialization/db/DBSerializer.java
index 49bcfd5a..3536d137 100644
--- a/aai-core/src/main/java/org/openecomp/aai/serialization/db/DBSerializer.java
+++ b/aai-core/src/main/java/org/openecomp/aai/serialization/db/DBSerializer.java
@@ -21,46 +21,19 @@
package org.openecomp.aai.serialization.db;
-import java.io.UnsupportedEncodingException;
-import java.lang.reflect.Array;
-import java.lang.reflect.InvocationTargetException;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
-
-import javax.ws.rs.core.UriBuilder;
-
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import com.google.common.base.CaseFormat;
+import com.thinkaurelius.titan.core.SchemaViolationException;
import org.apache.commons.collections.IteratorUtils;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
-import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Element;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.*;
import org.javatuples.Pair;
import org.openecomp.aai.db.props.AAIProperties;
import org.openecomp.aai.exceptions.AAIException;
-import org.openecomp.aai.introspection.Introspector;
-import org.openecomp.aai.introspection.IntrospectorFactory;
-import org.openecomp.aai.introspection.Loader;
-import org.openecomp.aai.introspection.LoaderFactory;
-import org.openecomp.aai.introspection.ModelType;
-import org.openecomp.aai.introspection.PropertyPredicates;
-import org.openecomp.aai.introspection.Version;
+import org.openecomp.aai.introspection.*;
import org.openecomp.aai.introspection.exceptions.AAIUnknownObjectException;
import org.openecomp.aai.introspection.sideeffect.DataCopy;
import org.openecomp.aai.introspection.sideeffect.DataLinkReader;
@@ -81,10 +54,18 @@ import org.openecomp.aai.util.AAIConfig;
import org.openecomp.aai.util.AAIConstants;
import org.openecomp.aai.workarounds.NamingExceptions;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.common.base.CaseFormat;
-import com.thinkaurelius.titan.core.SchemaViolationException;
+import javax.ws.rs.core.UriBuilder;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Array;
+import java.lang.reflect.InvocationTargetException;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.*;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
public class DBSerializer {
@@ -125,9 +106,6 @@ public class DBSerializer {
* @param v the v
* @param isNewVertex the is new vertex
*/
- /*
- * to be defined and expanded later
- */
public void touchStandardVertexProperties(Vertex v, boolean isNewVertex) {
long unixTimeNow = System.currentTimeMillis();
@@ -143,12 +121,12 @@ public class DBSerializer {
}
private void touchStandardVertexProperties(String nodeType, Vertex v, boolean isNewVertex) {
-
+
v.property(AAIProperties.NODE_TYPE, nodeType);
touchStandardVertexProperties(v, isNewVertex);
}
-
+
/**
@@ -434,6 +412,10 @@ public class DBSerializer {
if (cousinVertex != null) {
try {
+ if (!edgeRules.hasEdgeRule(v, cousinVertex)) {
+ throw new AAIException("AAI_6120", "No EdgeRule found for passed nodeTypes: " + v.property(AAIProperties.NODE_TYPE).value().toString() + ", "
+ + cousinVertex.property(AAIProperties.NODE_TYPE).value().toString() + ".");
+ }
e = this.getEdgeBetween(EdgeType.COUSIN, v, cousinVertex);
if (e == null) {
@@ -724,7 +706,7 @@ public class DBSerializer {
EdgeRule rule;
rule = edgeRules.getEdgeRule(EdgeType.TREE, vType, childDbName);
- if (rule.getIsParent().equals("true") || rule.getIsParent().equals("reverse")) {
+ if (!rule.getContains().equals(AAIDirection.NONE.toString())) {
//vertices = this.queryEngine.findRelatedVertices(v, Direction.OUT, rule.getLabel(), childDbName);
Direction ruleDirection = rule.getDirection();
Iterator<Vertex> itr = v.vertices(ruleDirection, rule.getLabel());
@@ -954,8 +936,8 @@ public class DBSerializer {
}
if(list.size() > 0 && this.version.compareTo(Version.v8) >= 0){
- this.addRelatedToProperty(result, list.get(0));
- }
+ this.addRelatedToProperty(result, list.get(0));
+ }
return result.getUnderlyingObject();
}
@@ -1337,87 +1319,20 @@ public class DBSerializer {
* @throws AAIException the AAI exception
*/
private boolean verifyDeleteSemantics(Vertex vertex, String resourceVersion, boolean enableResourceVersion) throws AAIException {
- boolean result = false;
+ boolean result = true;
String nodeType = "";
- DeleteSemantic semantic = null;
- List<Edge> inEdges = null;
- List<Edge> outEdges = null;
String errorDetail = " unknown delete semantic found";
String aaiExceptionCode = "";
nodeType = vertex.<String>property(AAIProperties.NODE_TYPE).orElse(null);
if (enableResourceVersion && !this.verifyResourceVersion("delete", nodeType, vertex.<String>property(AAIProperties.RESOURCE_VERSION).orElse(null), resourceVersion, nodeType)) {
}
- semantic = edgeRules.getDeleteSemantic(nodeType);
- inEdges = (List<Edge>)IteratorUtils.toList(vertex.edges(Direction.IN));
- outEdges = (List<Edge>)IteratorUtils.toList(vertex.edges(Direction.OUT));
- if (semantic.equals(DeleteSemantic.CASCADE_TO_CHILDREN)) {
- result = true;
- } else if (semantic.equals(DeleteSemantic.ERROR_IF_ANY_EDGES)) {
- if (inEdges.isEmpty() && outEdges.isEmpty()) {
- result = true;
- } else {
- errorDetail = " Node cannot be deleted because it still has Edges and the " + semantic + " scope was used.\n";
- aaiExceptionCode = "AAI_6110";
- }
- } else if (semantic.equals(DeleteSemantic.ERROR_IF_ANY_IN_EDGES) || semantic.equals(DeleteSemantic.ERROR_4_IN_EDGES_OR_CASCADE)) {
-
- if (inEdges.isEmpty()) {
- result = true;
- } else {
- //are there any cousin edges?
- long children = 0;
- for (Edge e : inEdges) {
- if (e.<Boolean>property(EdgeProperties.out(EdgeProperty.IS_PARENT)).orElse(false)) {
- children++;
- }
- }
- for (Edge e : outEdges) {
- if (e.<Boolean>property(EdgeProperties.in(EdgeProperty.IS_PARENT)).orElse(false)) {
- children++;
- }
- }
-
- result = children == inEdges.size();
- }
-
- if (!result) {
- errorDetail = " Node cannot be deleted because it still has Edges and the " + semantic + " scope was used.\n";
- aaiExceptionCode = "AAI_6110";
- }
- } else if (semantic.equals(DeleteSemantic.THIS_NODE_ONLY)) {
- if (outEdges.isEmpty() && inEdges.isEmpty()) {
- result = true;
- } else {
- result = true;
- for (Edge edge : outEdges) {
- Object property = edge.<Boolean>property(EdgeProperties.out(EdgeProperty.IS_PARENT)).orElse(null);
- if (property != null && property.equals(Boolean.TRUE)) {
- Vertex v = edge.inVertex();
- String vType = v.<String>property(AAIProperties.NODE_TYPE).orElse(null);
- errorDetail = " Node cannot be deleted using scope = " + semantic +
- " another node (type = " + vType + ") depends on it for uniqueness.";
- aaiExceptionCode = "AAI_6110";
- result = false;
- break;
- }
- }
-
- for (Edge edge : inEdges) {
- Object property = edge.<Boolean>property(EdgeProperties.in(EdgeProperty.IS_PARENT)).orElse(null);
- if (property != null && property.equals(Boolean.TRUE)) {
- Vertex v = edge.outVertex();
- String vType = v.<String>property(AAIProperties.NODE_TYPE).orElse(null);
- errorDetail = " Node cannot be deleted using scope = " + semantic +
- " another node (type = " + vType + ") depends on it for uniqueness.";
- aaiExceptionCode = "AAI_6110";
- result = false;
- break;
- }
- }
- }
- }
-
+ List<Object> preventDeleteVertices = this.engine.asAdmin().getReadOnlyTraversalSource().V(vertex).union(__.inE().has(EdgeProperty.PREVENT_DELETE.toString(), AAIDirection.IN.toString()).outV().values(AAIProperties.NODE_TYPE), __.outE().has(EdgeProperty.PREVENT_DELETE.toString(), AAIDirection.OUT.toString()).inV().values(AAIProperties.NODE_TYPE)).dedup().toList();
+ if (preventDeleteVertices.size() > 0) {
+ aaiExceptionCode = "AAI_6110";
+ errorDetail = String.format("Object is being reference by additional objects preventing it from being deleted. Please clean up references from the following types %s", preventDeleteVertices);
+ result = false;
+ }
if (!result) {
throw new AAIException(aaiExceptionCode, errorDetail);
}