Auto-resolve edge type
[aai/gizmo.git] / src / main / java / org / onap / crud / service / CrudGraphDataService.java
index 5b1c2dd..ae2d294 100644 (file)
@@ -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 {
@@ -64,13 +68,23 @@ public class CrudGraphDataService extends AbstractGraphDataService {
     String payload = CrudResponseBuilder
         .buildUpsertVertexResponse(OxmModelValidator.validateOutgoingPayload(version, addedVertex), version);
 
-    return new ImmutablePair<EntityTag, String>(entityTag, payload);
+    return new ImmutablePair<>(entityTag, payload);
   }
 
   @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, null));
+
+    List<Edge> targetVertexEdges =
+              EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(payload.getTarget()), type,
+                          daoForGet.getVertexEdges(EdgePayloadUtil.getVertexNodeId(payload.getTarget()), null, null));
+
+    Edge edge = RelationshipSchemaValidator.validateIncomingAddPayload(version, type, payload, sourceVertexEdges, targetVertexEdges);
+
     return addEdge(version, edge);
   }
 
@@ -81,7 +95,7 @@ public class CrudGraphDataService extends AbstractGraphDataService {
     String payload = CrudResponseBuilder
       .buildUpsertEdgeResponse(RelationshipSchemaValidator.validateOutgoingPayload(version, addedEdge), version);
 
-    return new ImmutablePair<EntityTag, String>(entityTag, payload);
+    return new ImmutablePair<>(entityTag, payload);
   }
 
   @Override
@@ -96,7 +110,7 @@ public class CrudGraphDataService extends AbstractGraphDataService {
     String payload = getUpdatedVertexPayload(version, updatedVertexResult);
     EntityTag entityTag = CrudServiceUtil.getETagFromHeader(updatedVertexResult.getHeaders());
 
-    return new ImmutablePair<EntityTag, String>(entityTag, payload);
+    return new ImmutablePair<>(entityTag, payload);
   }
 
   private String getUpdatedVertexPayload(String version, OperationResult updatedVertexResult) throws CrudException {
@@ -126,14 +140,27 @@ public class CrudGraphDataService extends AbstractGraphDataService {
   @Override
   public String deleteEdge(String version, String id, String type) throws CrudException {
     RelationshipSchemaValidator.validateType(version, type);
-    dao.deleteEdge(id, type);
+    dao.deleteEdge(id);
     return "";
   }
 
   @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, null));
+
+    List<Edge> targetVertexEdges =
+              EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(payload.getTarget()), type,
+                          daoForGet.getVertexEdges(EdgePayloadUtil.getVertexNodeId(payload.getTarget()), null, null));
+
+    Edge validatedEdge = RelationshipSchemaValidator.validateIncomingUpdatePayload(edge, version, payload, type, sourceVertexEdges, targetVertexEdges);
+
     return updateEdge(version, validatedEdge);
   }
 
@@ -142,7 +169,7 @@ public class CrudGraphDataService extends AbstractGraphDataService {
     String payload = getUpdatedEdgePayload(version, updatedEdgeResult);
     EntityTag entityTag = CrudServiceUtil.getETagFromHeader(updatedEdgeResult.getHeaders());
 
-    return new ImmutablePair<EntityTag, String>(entityTag, payload);
+    return new ImmutablePair<>(entityTag, payload);
   }
 
   private String getUpdatedEdgePayload(String version, OperationResult updatedEdgeResult) throws CrudException {
@@ -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 {
@@ -191,7 +213,7 @@ public class CrudGraphDataService extends AbstractGraphDataService {
   }
 
   @Override
-  protected void deleteBulkEdge(String id, String version, String type, String dbTransId) throws CrudException {
-    dao.deleteEdge(id, type, dbTransId);
+  protected void deleteBulkEdge(String id, String version, String dbTransId) throws CrudException {
+    dao.deleteEdge(id, dbTransId);
   }
 }