summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/crud
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/onap/crud')
-rw-r--r--src/main/java/org/onap/crud/dao/champ/ChampDao.java10
-rw-r--r--src/main/java/org/onap/crud/entity/Vertex.java2
-rw-r--r--src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java4
-rw-r--r--src/main/java/org/onap/crud/parser/BulkPayload.java (renamed from src/main/java/org/onap/crud/service/BulkPayload.java)2
-rw-r--r--src/main/java/org/onap/crud/parser/CrudResponseBuilder.java4
-rw-r--r--src/main/java/org/onap/crud/parser/EdgePayload.java (renamed from src/main/java/org/onap/crud/service/EdgePayload.java)2
-rw-r--r--src/main/java/org/onap/crud/parser/VertexPayload.java (renamed from src/main/java/org/onap/crud/service/VertexPayload.java)2
-rw-r--r--src/main/java/org/onap/crud/parser/util/EdgePayloadUtil.java145
-rw-r--r--src/main/java/org/onap/crud/service/AaiResourceService.java19
-rw-r--r--src/main/java/org/onap/crud/service/AbstractGraphDataService.java33
-rw-r--r--src/main/java/org/onap/crud/service/CrudAsyncGraphDataService.java10
-rw-r--r--src/main/java/org/onap/crud/service/CrudGraphDataService.java40
-rw-r--r--src/main/java/org/onap/crud/service/CrudRestService.java3
-rw-r--r--src/main/java/org/onap/crud/util/CrudServiceUtil.java3
14 files changed, 236 insertions, 43 deletions
diff --git a/src/main/java/org/onap/crud/dao/champ/ChampDao.java b/src/main/java/org/onap/crud/dao/champ/ChampDao.java
index 65d1d99..7bd4754 100644
--- a/src/main/java/org/onap/crud/dao/champ/ChampDao.java
+++ b/src/main/java/org/onap/crud/dao/champ/ChampDao.java
@@ -173,7 +173,7 @@ public class ChampDao implements GraphDao {
@Override
public OperationResult getVertices(String type, Map<String, Object> filter, HashSet<String> properties, String version) throws CrudException {
- filter.put(org.onap.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
+ filter.put(org.onap.schema.validation.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
List<NameValuePair> queryParams = convertToNameValuePair(filter);
queryParams.addAll(convertToNameValuePair("properties", properties));
@@ -242,7 +242,7 @@ public class ChampDao implements GraphDao {
// Add the aai_node_type so that AAI can read the data created by gizmo
// TODO: This probably shouldn't be here
- properties.put(org.onap.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
+ properties.put(org.onap.schema.validation.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
Vertex.Builder insertVertexBuilder = new Vertex.Builder(type);
properties.forEach(insertVertexBuilder::property);
@@ -266,7 +266,7 @@ public class ChampDao implements GraphDao {
// Add the aai_node_type so that AAI can read the data created by gizmo
// TODO: This probably shouldn't be here
- properties.put(org.onap.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
+ properties.put(org.onap.schema.validation.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
Vertex.Builder insertVertexBuilder = new Vertex.Builder(type);
insertVertexBuilder.id(id);
@@ -414,7 +414,7 @@ public class ChampDao implements GraphDao {
// Add the aai_node_type so that AAI can read the data created by gizmo
// TODO: This probably shouldn't be here
- properties.put(org.onap.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
+ properties.put(org.onap.schema.validation.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
Vertex.Builder insertVertexBuilder = new Vertex.Builder(type);
properties.forEach(insertVertexBuilder::property);
@@ -463,7 +463,7 @@ public class ChampDao implements GraphDao {
// Add the aai_node_type so that AAI can read the data created by gizmo
// TODO: This probably shouldn't be here
- properties.put(org.onap.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
+ properties.put(org.onap.schema.validation.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
Vertex.Builder insertVertexBuilder = new Vertex.Builder(type);
insertVertexBuilder.id(id);
diff --git a/src/main/java/org/onap/crud/entity/Vertex.java b/src/main/java/org/onap/crud/entity/Vertex.java
index cffdcf1..fd03827 100644
--- a/src/main/java/org/onap/crud/entity/Vertex.java
+++ b/src/main/java/org/onap/crud/entity/Vertex.java
@@ -34,7 +34,7 @@ import org.json.JSONObject;
import org.onap.crud.exception.CrudException;
import org.onap.crud.util.CrudServiceUtil;
import org.onap.schema.OxmModelLoader;
-import org.onap.schema.OxmModelValidator;
+import org.onap.schema.validation.OxmModelValidator;
import com.google.common.base.CaseFormat;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
diff --git a/src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java b/src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java
index 8146aa3..d858384 100644
--- a/src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java
+++ b/src/main/java/org/onap/crud/event/response/GraphEventResponseHandler.java
@@ -29,8 +29,8 @@ import org.onap.crud.event.envelope.GraphEventEnvelope;
import org.onap.crud.exception.CrudException;
import org.onap.crud.logging.CrudServiceMsgs;
import org.onap.crud.parser.CrudResponseBuilder;
-import org.onap.schema.OxmModelValidator;
-import org.onap.schema.RelationshipSchemaValidator;
+import org.onap.schema.validation.OxmModelValidator;
+import org.onap.schema.validation.RelationshipSchemaValidator;
/**
* Reads event responses, logs and generates exceptions if errors are found.
diff --git a/src/main/java/org/onap/crud/service/BulkPayload.java b/src/main/java/org/onap/crud/parser/BulkPayload.java
index 8dc99c4..33e9a2e 100644
--- a/src/main/java/org/onap/crud/service/BulkPayload.java
+++ b/src/main/java/org/onap/crud/parser/BulkPayload.java
@@ -18,7 +18,7 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-package org.onap.crud.service;
+package org.onap.crud.parser;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
diff --git a/src/main/java/org/onap/crud/parser/CrudResponseBuilder.java b/src/main/java/org/onap/crud/parser/CrudResponseBuilder.java
index 0a81884..29d8824 100644
--- a/src/main/java/org/onap/crud/parser/CrudResponseBuilder.java
+++ b/src/main/java/org/onap/crud/parser/CrudResponseBuilder.java
@@ -27,11 +27,7 @@ import java.util.Map;
import org.onap.crud.entity.Edge;
import org.onap.crud.entity.Vertex;
import org.onap.crud.exception.CrudException;
-import org.onap.crud.service.BulkPayload;
-import org.onap.crud.service.EdgePayload;
-import org.onap.crud.service.VertexPayload;
import org.onap.schema.EdgeRulesLoader;
-
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
diff --git a/src/main/java/org/onap/crud/service/EdgePayload.java b/src/main/java/org/onap/crud/parser/EdgePayload.java
index a670b54..a1499db 100644
--- a/src/main/java/org/onap/crud/service/EdgePayload.java
+++ b/src/main/java/org/onap/crud/parser/EdgePayload.java
@@ -18,7 +18,7 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-package org.onap.crud.service;
+package org.onap.crud.parser;
import javax.ws.rs.core.Response.Status;
import org.onap.crud.exception.CrudException;
diff --git a/src/main/java/org/onap/crud/service/VertexPayload.java b/src/main/java/org/onap/crud/parser/VertexPayload.java
index 172d03b..b5ff345 100644
--- a/src/main/java/org/onap/crud/service/VertexPayload.java
+++ b/src/main/java/org/onap/crud/parser/VertexPayload.java
@@ -18,7 +18,7 @@
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-package org.onap.crud.service;
+package org.onap.crud.parser;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/main/java/org/onap/crud/parser/util/EdgePayloadUtil.java b/src/main/java/org/onap/crud/parser/util/EdgePayloadUtil.java
new file mode 100644
index 0000000..0f72625
--- /dev/null
+++ b/src/main/java/org/onap/crud/parser/util/EdgePayloadUtil.java
@@ -0,0 +1,145 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2017-2018 Amdocs
+ * ================================================================================
+ * 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.onap.crud.parser.util;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.ws.rs.core.Response.Status;
+import org.onap.crud.entity.Edge;
+import org.onap.crud.entity.Vertex;
+import org.onap.crud.exception.CrudException;
+
+/**
+ * Utility Class to extract data from the Edge Payload
+ */
+public class EdgePayloadUtil {
+
+ private static final Pattern URL_MATCHER = Pattern.compile("services/inventory/(.*)/(.*)/(.*)");
+
+ private static Matcher getVertexMatcher(String vertex) throws CrudException {
+ Matcher matcher = URL_MATCHER.matcher(vertex);
+ if (!matcher.matches()) {
+ throw new CrudException("Invalid Source/Target Urls", Status.BAD_REQUEST);
+ }
+ return matcher;
+ }
+
+ /**
+ * Returns the node type from a vertex on the edge payload
+ *
+ * @param vertex
+ * @return
+ * @throws CrudException
+ */
+ public static String getVertexNodeType(String vertex) throws CrudException {
+ return getVertexMatcher(vertex).group(2);
+ }
+
+ /**
+ * Returns the node id from a vertex on the edge payload
+ *
+ * @param vertex
+ * @return
+ * @throws CrudException
+ */
+ public static String getVertexNodeId(String vertex) throws CrudException {
+ return getVertexMatcher(vertex).group(3);
+ }
+
+ /**
+ * Generates a key based on the edge payload content
+ *
+ * @param source
+ * @param target
+ * @param type
+ * @return
+ * @throws CrudException
+ */
+ public static String generateEdgeKey(String source, String target, String type) throws CrudException {
+ return getVertexNodeType(source) + ":" + getVertexNodeType(target) + ":" + type;
+ }
+
+ /**
+ * Returns an Edge Builder object from the payload properties
+ *
+ * @param source
+ * @param target
+ * @param type
+ * @return
+ * @throws CrudException
+ */
+ public static Edge.Builder getBuilderFromEdgePayload(String source, String target, String type) throws CrudException {
+ Edge.Builder edgeBuilder = new Edge.Builder(type);
+
+ edgeBuilder.source(new Vertex.Builder(getVertexNodeType(source)).id(getVertexNodeId(source)).build());
+ edgeBuilder.target(new Vertex.Builder(getVertexNodeType(target)).id(getVertexNodeId(target)).build());
+
+ return edgeBuilder;
+ }
+
+ /**
+ * Returns an Edge Builder object from an Edge object properties
+ *
+ * @param edge
+ * @return
+ */
+ public static Edge.Builder getBuilderFromEdge(Edge edge) {
+ Edge.Builder edgeBuilder = new Edge.Builder(edge.getType()).id(edge.getId().get());
+
+ edgeBuilder
+ .source(new Vertex.Builder(edge.getSource().getType()).id(edge.getSource().getId().get()).build());
+ edgeBuilder
+ .target(new Vertex.Builder(edge.getTarget().getType()).id(edge.getTarget().getId().get()).build());
+
+ return edgeBuilder;
+ }
+
+ /**
+ * Filter Edges by its source/target vertex type and the edge type
+ *
+ * @param sourceTargetType the new Edge source/target type
+ * @param type
+ * @param edges
+ * @return List<Edge>
+ */
+ public static List<Edge> filterEdgesByRelatedVertexAndType(String sourceTargetType, String type, List<Edge> edges) {
+ List<Edge> filteredEdges = new ArrayList<>();
+ if (edges != null) {
+ for (Edge edge : edges) {
+ if (doesEdgeTypeMatch(edge, type) && doesEdgeSourceTargetTypeMatch(edge, sourceTargetType)) {
+ filteredEdges.add(edge);
+ }
+ }
+ }
+ return filteredEdges;
+ }
+
+ private static boolean doesEdgeTypeMatch(Edge edge, String type) {
+ return edge.getType() != null && edge.getType().equals(type);
+ }
+
+ private static boolean doesEdgeSourceTargetTypeMatch(Edge edge, String sourceTargetType) {
+ return (edge.getSource().getType() != null && edge.getSource().getType().equals(sourceTargetType))
+ || ((edge.getTarget().getType() != null && edge.getTarget().getType().equals(sourceTargetType)));
+ }
+}
diff --git a/src/main/java/org/onap/crud/service/AaiResourceService.java b/src/main/java/org/onap/crud/service/AaiResourceService.java
index afabe7e..c0375b4 100644
--- a/src/main/java/org/onap/crud/service/AaiResourceService.java
+++ b/src/main/java/org/onap/crud/service/AaiResourceService.java
@@ -54,10 +54,11 @@ import org.onap.aaiauth.auth.Auth;
import org.onap.crud.exception.CrudException;
import org.onap.crud.logging.CrudServiceMsgs;
import org.onap.crud.logging.LoggingUtil;
+import org.onap.crud.parser.EdgePayload;
+import org.onap.crud.parser.util.EdgePayloadUtil;
import org.onap.crud.service.CrudRestService.Action;
import org.onap.crud.util.CrudServiceConstants;
import org.onap.schema.EdgeRulesLoader;
-import org.onap.schema.RelationshipSchemaValidator;
import org.slf4j.MDC;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
@@ -397,16 +398,15 @@ public class AaiResourceService {
public EdgePayload applyEdgeRulesToPayload(EdgePayload payload) throws CrudException {
// Extract the types for both the source and target vertices.
- String srcType = RelationshipSchemaValidator.vertexTypeFromUri(payload.getSource());
- String tgtType = RelationshipSchemaValidator.vertexTypeFromUri(payload.getTarget());
+ String srcType = EdgePayloadUtil.getVertexNodeType(payload.getSource());
+ String tgtType = EdgePayloadUtil.getVertexNodeType(payload.getTarget());
- // Now, get the default properties for this edge based on the edge rules definition...
- Map<EdgeProperty, String> props = getEdgeRuleProperties(srcType, tgtType);
-
- // ...and merge them with any custom properties provided in the request.
- JsonElement mergedProperties = mergeProperties(payload.getProperties(), props);
- payload.setProperties(mergedProperties);
+ // Now, get the default properties for this edge based on the edge rules definition...
+ Map<EdgeProperty, String> props = getEdgeRuleProperties(srcType, tgtType);
+ // ...and merge them with any custom properties provided in the request.
+ JsonElement mergedProperties = mergeProperties(payload.getProperties(), props);
+ payload.setProperties(mergedProperties);
if(logger.isDebugEnabled()) {
logger.debug("Edge properties after applying rules for '" + srcType + " -> " + tgtType + "': " + mergedProperties);
@@ -430,6 +430,7 @@ public class AaiResourceService {
*
* @throws CrudException
*/
+ @SuppressWarnings("unchecked")
public JsonElement mergeProperties(JsonElement propertiesFromRequest, Map<EdgeProperty, String> propertyDefaults) throws CrudException {
// Convert the properties from the edge payload into something we can
diff --git a/src/main/java/org/onap/crud/service/AbstractGraphDataService.java b/src/main/java/org/onap/crud/service/AbstractGraphDataService.java
index 7c1168e..fed12fd 100644
--- a/src/main/java/org/onap/crud/service/AbstractGraphDataService.java
+++ b/src/main/java/org/onap/crud/service/AbstractGraphDataService.java
@@ -36,10 +36,14 @@ import org.onap.crud.dao.champ.ChampVertexSerializer;
import org.onap.crud.entity.Edge;
import org.onap.crud.entity.Vertex;
import org.onap.crud.exception.CrudException;
+import org.onap.crud.parser.BulkPayload;
import org.onap.crud.parser.CrudResponseBuilder;
+import org.onap.crud.parser.EdgePayload;
+import org.onap.crud.parser.VertexPayload;
+import org.onap.crud.parser.util.EdgePayloadUtil;
import org.onap.crud.util.CrudServiceUtil;
-import org.onap.schema.OxmModelValidator;
-import org.onap.schema.RelationshipSchemaValidator;
+import org.onap.schema.validation.OxmModelValidator;
+import org.onap.schema.validation.RelationshipSchemaValidator;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
@@ -228,12 +232,31 @@ public abstract class AbstractGraphDataService {
edgePayload
.setTarget("services/inventory/" + version + "/" + target.getType() + "/" + target.getId().get());
}
- validatedEdge = RelationshipSchemaValidator.validateIncomingAddPayload(version, edgePayload.getType(),
- edgePayload);
+
+ List<Edge> sourceVertexEdges =
+ EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(edgePayload.getSource()), edgePayload.getType(),
+ daoForGet.getVertexEdges(EdgePayloadUtil.getVertexNodeId(edgePayload.getSource()), null));
+
+ List<Edge> targetVertexEdges =
+ EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(edgePayload.getTarget()), edgePayload.getType(),
+ daoForGet.getVertexEdges(EdgePayloadUtil.getVertexNodeId(edgePayload.getTarget()), null));
+
+ validatedEdge = RelationshipSchemaValidator.validateIncomingAddPayload(version, edgePayload.getType(), edgePayload, sourceVertexEdges,
+ targetVertexEdges);
persistedEdge = addBulkEdge(validatedEdge, version, txId);
} else if (opr.getValue().getAsString().equalsIgnoreCase("modify")) {
Edge edge = dao.getEdge(edgePayload.getId(), edgePayload.getType(), txId);
- validatedEdge = RelationshipSchemaValidator.validateIncomingUpdatePayload(edge, version, edgePayload);
+
+ // load source and target vertex relationships for validation
+ List<Edge> sourceVertexEdges =
+ EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(edgePayload.getSource()), edgePayload.getType(),
+ daoForGet.getVertexEdges(EdgePayloadUtil.getVertexNodeId(edgePayload.getSource()), null));
+
+ List<Edge> targetVertexEdges =
+ EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(edgePayload.getTarget()), edgePayload.getType(),
+ daoForGet.getVertexEdges(EdgePayloadUtil.getVertexNodeId(edgePayload.getTarget()), null));
+
+ validatedEdge = RelationshipSchemaValidator.validateIncomingUpdatePayload(edge, version, edgePayload, edgePayload.getType(), sourceVertexEdges, targetVertexEdges);
persistedEdge = updateBulkEdge(validatedEdge, version, txId);
} else {
if ( (edgePayload.getId() == null) || (edgePayload.getType() == null) ) {
diff --git a/src/main/java/org/onap/crud/service/CrudAsyncGraphDataService.java b/src/main/java/org/onap/crud/service/CrudAsyncGraphDataService.java
index 6b447a1..c2d2591 100644
--- a/src/main/java/org/onap/crud/service/CrudAsyncGraphDataService.java
+++ b/src/main/java/org/onap/crud/service/CrudAsyncGraphDataService.java
@@ -56,11 +56,13 @@ import org.onap.crud.event.envelope.GraphEventEnvelope;
import org.onap.crud.event.response.GraphEventResponseHandler;
import org.onap.crud.exception.CrudException;
import org.onap.crud.logging.CrudServiceMsgs;
+import org.onap.crud.parser.EdgePayload;
+import org.onap.crud.parser.VertexPayload;
import org.onap.crud.util.CrudProperties;
import org.onap.crud.util.CrudServiceConstants;
import org.onap.crud.util.etag.EtagGenerator;
-import org.onap.schema.OxmModelValidator;
-import org.onap.schema.RelationshipSchemaValidator;
+import org.onap.schema.validation.OxmModelValidator;
+import org.onap.schema.validation.RelationshipSchemaValidator;
public class CrudAsyncGraphDataService extends AbstractGraphDataService {
@@ -211,7 +213,7 @@ public class CrudAsyncGraphDataService extends AbstractGraphDataService {
throws CrudException {
// Validate the incoming payload
Vertex vertex = OxmModelValidator.validateIncomingUpsertPayload(null, version, type, payload.getProperties());
- vertex.getProperties().put(org.onap.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
+ vertex.getProperties().put(OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type);
// Create graph request event
GraphEvent event = GraphEvent.builder(GraphEventOperation.CREATE)
.vertex(GraphEventVertex.fromVertex(vertex, version)).build();
@@ -233,6 +235,7 @@ public class CrudAsyncGraphDataService extends AbstractGraphDataService {
public ImmutablePair<EntityTag, String> addEdge(String version, String type, EdgePayload payload)
throws CrudException {
Edge edge = RelationshipSchemaValidator.validateIncomingAddPayload(version, type, payload);
+
// Create graph request event
GraphEvent event =
GraphEvent.builder(GraphEventOperation.CREATE).edge(GraphEventEdge.fromEdge(edge, version)).build();
@@ -320,6 +323,7 @@ public class CrudAsyncGraphDataService extends AbstractGraphDataService {
OperationResult operationResult = dao.getEdge(id, type, new HashMap<String, String>());
Edge edge = Edge.fromJson(operationResult.getResult());
Edge validatedEdge = RelationshipSchemaValidator.validateIncomingUpdatePayload(edge, version, payload);
+
GraphEvent event = GraphEvent.builder(GraphEventOperation.UPDATE)
.edge(GraphEventEdge.fromEdge(validatedEdge, version)).build();
diff --git a/src/main/java/org/onap/crud/service/CrudGraphDataService.java b/src/main/java/org/onap/crud/service/CrudGraphDataService.java
index 5b1c2dd..2888ace 100644
--- a/src/main/java/org/onap/crud/service/CrudGraphDataService.java
+++ b/src/main/java/org/onap/crud/service/CrudGraphDataService.java
@@ -22,6 +22,7 @@ package org.onap.crud.service;
import java.util.HashMap;
+import java.util.List;
import javax.ws.rs.core.EntityTag;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.onap.aai.restclient.client.OperationResult;
@@ -30,9 +31,12 @@ import org.onap.crud.entity.Edge;
import org.onap.crud.entity.Vertex;
import org.onap.crud.exception.CrudException;
import org.onap.crud.parser.CrudResponseBuilder;
+import org.onap.crud.parser.EdgePayload;
+import org.onap.crud.parser.VertexPayload;
+import org.onap.crud.parser.util.EdgePayloadUtil;
import org.onap.crud.util.CrudServiceUtil;
-import org.onap.schema.OxmModelValidator;
-import org.onap.schema.RelationshipSchemaValidator;
+import org.onap.schema.validation.OxmModelValidator;
+import org.onap.schema.validation.RelationshipSchemaValidator;
public class CrudGraphDataService extends AbstractGraphDataService {
@@ -70,7 +74,17 @@ public class CrudGraphDataService extends AbstractGraphDataService {
@Override
public ImmutablePair<EntityTag, String> addEdge(String version, String type, EdgePayload payload)
throws CrudException {
- Edge edge = RelationshipSchemaValidator.validateIncomingAddPayload(version, type, payload);
+ // load source and target vertex relationships for validation
+ List<Edge> sourceVertexEdges =
+ EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(payload.getSource()), type,
+ daoForGet.getVertexEdges(EdgePayloadUtil.getVertexNodeId(payload.getSource()), null));
+
+ List<Edge> targetVertexEdges =
+ EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(payload.getTarget()), type,
+ daoForGet.getVertexEdges(EdgePayloadUtil.getVertexNodeId(payload.getTarget()), null));
+
+ Edge edge = RelationshipSchemaValidator.validateIncomingAddPayload(version, type, payload, sourceVertexEdges, targetVertexEdges);
+
return addEdge(version, edge);
}
@@ -133,7 +147,20 @@ public class CrudGraphDataService extends AbstractGraphDataService {
@Override
public ImmutablePair<EntityTag, String> updateEdge(String version, String id, String type, EdgePayload payload)
throws CrudException {
- Edge validatedEdge = getValidatedEdge(version, id, type, payload);
+ OperationResult edgeResult = dao.getEdge(id, type, new HashMap<String, String>());
+ Edge edge = Edge.fromJson(edgeResult.getResult());
+
+ // load source and target vertex relationships for validation
+ List<Edge> sourceVertexEdges =
+ EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(payload.getSource()), type,
+ daoForGet.getVertexEdges(EdgePayloadUtil.getVertexNodeId(payload.getSource()), null));
+
+ List<Edge> targetVertexEdges =
+ EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(payload.getTarget()), type,
+ daoForGet.getVertexEdges(EdgePayloadUtil.getVertexNodeId(payload.getTarget()), null));
+
+ Edge validatedEdge = RelationshipSchemaValidator.validateIncomingUpdatePayload(edge, version, payload, type, sourceVertexEdges, targetVertexEdges);
+
return updateEdge(version, validatedEdge);
}
@@ -152,11 +179,6 @@ public class CrudGraphDataService extends AbstractGraphDataService {
.buildUpsertEdgeResponse(RelationshipSchemaValidator.validateOutgoingPayload(version, updatedEdge), version);
}
- private Edge getValidatedEdge(String version, String id, String type, EdgePayload payload) throws CrudException {
- OperationResult operationResult = dao.getEdge(id, type, new HashMap<String, String>());
- return RelationshipSchemaValidator.validateIncomingUpdatePayload(Edge.fromJson(operationResult.getResult()), version, payload);
- }
-
@Override
public ImmutablePair<EntityTag, String> patchEdge(String version, String id, String type, EdgePayload payload)
throws CrudException {
diff --git a/src/main/java/org/onap/crud/service/CrudRestService.java b/src/main/java/org/onap/crud/service/CrudRestService.java
index 583fee6..a43d7e5 100644
--- a/src/main/java/org/onap/crud/service/CrudRestService.java
+++ b/src/main/java/org/onap/crud/service/CrudRestService.java
@@ -52,6 +52,9 @@ import org.onap.aaiauth.auth.Auth;
import org.onap.crud.exception.CrudException;
import org.onap.crud.logging.CrudServiceMsgs;
import org.onap.crud.logging.LoggingUtil;
+import org.onap.crud.parser.BulkPayload;
+import org.onap.crud.parser.EdgePayload;
+import org.onap.crud.parser.VertexPayload;
import org.onap.crud.util.CrudProperties;
import org.onap.crud.util.CrudServiceConstants;
import org.onap.crud.util.CrudServiceUtil;
diff --git a/src/main/java/org/onap/crud/util/CrudServiceUtil.java b/src/main/java/org/onap/crud/util/CrudServiceUtil.java
index 6b5cdcd..ed5fe53 100644
--- a/src/main/java/org/onap/crud/util/CrudServiceUtil.java
+++ b/src/main/java/org/onap/crud/util/CrudServiceUtil.java
@@ -31,9 +31,8 @@ import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response.Status;
import org.onap.aai.db.props.AAIProperties;
import org.onap.crud.exception.CrudException;
-import org.onap.schema.OxmModelLoader;
import org.onap.schema.EdgeRulesLoader;
-
+import org.onap.schema.OxmModelLoader;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;