X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Forg%2Fonap%2Fcrud%2Fservice%2FAbstractGraphDataService.java;h=1fdd84116c3b138282f862509c2c8842c0c650f1;hb=f60a17c6abb6deef1c24f917488745cbc6e6a566;hp=db4c4d84bbb410782193b921a281402f6092c430;hpb=d8bd36e376d17c8d1fc13cc8b5ba00708c3b6673;p=aai%2Fgizmo.git diff --git a/src/main/java/org/onap/crud/service/AbstractGraphDataService.java b/src/main/java/org/onap/crud/service/AbstractGraphDataService.java index db4c4d8..1fdd841 100644 --- a/src/main/java/org/onap/crud/service/AbstractGraphDataService.java +++ b/src/main/java/org/onap/crud/service/AbstractGraphDataService.java @@ -20,14 +20,15 @@ */ package org.onap.crud.service; -import java.util.ArrayList; -import java.util.HashMap; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; import java.util.List; import java.util.Map; import java.util.Set; import javax.ws.rs.core.EntityTag; import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.Response.Status; +import net.dongliu.gson.GsonJava8TypeAdapterFactory; import org.apache.commons.lang3.tuple.ImmutablePair; import org.onap.aai.restclient.client.OperationResult; import org.onap.crud.dao.GraphDao; @@ -36,26 +37,16 @@ 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.validation.OxmModelValidator; -import org.onap.schema.validation.RelationshipSchemaValidator; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonElement; -import com.google.gson.reflect.TypeToken; -import net.dongliu.gson.GsonJava8TypeAdapterFactory; +import org.onap.schema.OxmModelValidator; +import org.onap.schema.RelationshipSchemaValidator; public abstract class AbstractGraphDataService { protected GraphDao daoForGet; protected GraphDao dao; public AbstractGraphDataService() throws CrudException { - CrudServiceUtil.loadModels(); } public ImmutablePair getEdge(String version, String id, String type, Map queryParams) throws CrudException { @@ -97,216 +88,6 @@ public abstract class AbstractGraphDataService { return new ImmutablePair<>(entityTag, CrudResponseBuilder.buildGetVerticesResponse(vertices, version)); } - public String addBulk(String version, BulkPayload payload, HttpHeaders headers) throws CrudException { - HashMap vertices = new HashMap<>(); - HashMap edges = new HashMap<>(); - - String txId = dao.openTransaction(); - - try { - // Step 1. Handle edge deletes (must happen before vertex deletes) - for (JsonElement v : payload.getRelationships()) { - List> entries = new ArrayList>( - v.getAsJsonObject().entrySet()); - - if (entries.size() != 2) { - throw new CrudException("", Status.BAD_REQUEST); - } - Map.Entry opr = entries.get(0); - Map.Entry item = entries.get(1); - EdgePayload edgePayload = EdgePayload.fromJson(item.getValue().getAsJsonObject().toString()); - - if (opr.getValue().getAsString().equalsIgnoreCase("delete")) { - deleteBulkEdge(edgePayload.getId(), version, txId); - } - } - - // Step 2: Handle vertex deletes - for (JsonElement v : payload.getObjects()) { - List> entries = new ArrayList>( - v.getAsJsonObject().entrySet()); - - if (entries.size() != 2) { - throw new CrudException("", Status.BAD_REQUEST); - } - - Map.Entry opr = entries.get(0); - Map.Entry item = entries.get(1); - VertexPayload vertexPayload = VertexPayload.fromJson(item.getValue().getAsJsonObject().toString()); - - if (opr.getValue().getAsString().equalsIgnoreCase("delete")) { - String type = OxmModelValidator.resolveCollectionType(version, vertexPayload.getType()); - deleteBulkVertex(vertexPayload.getId(), version, type, txId); - } - } - - // Step 3: Handle vertex add/modify (must happen before edge adds) - for (JsonElement v : payload.getObjects()) { - List> entries = new ArrayList>( - v.getAsJsonObject().entrySet()); - - if (entries.size() != 2) { - throw new CrudException("", Status.BAD_REQUEST); - } - Map.Entry opr = entries.get(0); - Map.Entry item = entries.get(1); - VertexPayload vertexPayload = VertexPayload.fromJson(item.getValue().getAsJsonObject().toString()); - - // Add vertex - if (opr.getValue().getAsString().equalsIgnoreCase("add")) { - vertexPayload.setProperties(CrudServiceUtil.mergeHeaderInFoToPayload(vertexPayload.getProperties(), - headers, true)); - Vertex validatedVertex = OxmModelValidator.validateIncomingUpsertPayload(null, version, vertexPayload.getType(), - vertexPayload.getProperties()); - Vertex persistedVertex = addBulkVertex(validatedVertex, version, txId); - Vertex outgoingVertex = OxmModelValidator.validateOutgoingPayload(version, persistedVertex); - vertices.put(item.getKey(), outgoingVertex); - } - - // Update vertex - else if (opr.getValue().getAsString().equalsIgnoreCase("modify")) { - vertexPayload.setProperties(CrudServiceUtil.mergeHeaderInFoToPayload(vertexPayload.getProperties(), - headers, false)); - Vertex validatedVertex = OxmModelValidator.validateIncomingUpsertPayload(vertexPayload.getId(), version, - vertexPayload.getType(), vertexPayload.getProperties()); - Vertex persistedVertex = updateBulkVertex(validatedVertex, vertexPayload.getId(), version, txId); - Vertex outgoingVertex = OxmModelValidator.validateOutgoingPayload(version, persistedVertex); - vertices.put(item.getKey(), outgoingVertex); - } - - // Patch vertex - else if (opr.getValue().getAsString().equalsIgnoreCase("patch")) { - if ( (vertexPayload.getId() == null) || (vertexPayload.getType() == null) ) { - throw new CrudException("id and type must be specified for patch request", Status.BAD_REQUEST); - } - - vertexPayload.setProperties(CrudServiceUtil.mergeHeaderInFoToPayload(vertexPayload.getProperties(), - headers, false)); - - OperationResult existingVertexOpResult = dao.getVertex(vertexPayload.getId(), OxmModelValidator.resolveCollectionType(version, vertexPayload.getType()), version, new HashMap()); - Vertex existingVertex = Vertex.fromJson(existingVertexOpResult.getResult(), version); - Vertex validatedVertex = OxmModelValidator.validateIncomingPatchPayload(vertexPayload.getId(), - version, vertexPayload.getType(), vertexPayload.getProperties(), existingVertex); - Vertex persistedVertex = updateBulkVertex(validatedVertex, vertexPayload.getId(), version, txId); - Vertex outgoingVertex = OxmModelValidator.validateOutgoingPayload(version, persistedVertex); - vertices.put(item.getKey(), outgoingVertex); - } - } - - // Step 4: Handle edge add/modify - for (JsonElement v : payload.getRelationships()) { - List> entries = new ArrayList>( - v.getAsJsonObject().entrySet()); - - if (entries.size() != 2) { - throw new CrudException("", Status.BAD_REQUEST); - } - Map.Entry opr = entries.get(0); - Map.Entry item = entries.get(1); - EdgePayload edgePayload = EdgePayload.fromJson(item.getValue().getAsJsonObject().toString()); - - // Add/Update edge - if (opr.getValue().getAsString().equalsIgnoreCase("add") - || opr.getValue().getAsString().equalsIgnoreCase("modify") - || opr.getValue().getAsString().equalsIgnoreCase("patch")) { - Edge validatedEdge; - Edge persistedEdge; - if (opr.getValue().getAsString().equalsIgnoreCase("add")) { - // Fix the source/destination - if (edgePayload.getSource().startsWith("$")) { - Vertex source = vertices.get(edgePayload.getSource().substring(1)); - if (source == null) { - throw new CrudException("Not able to find vertex: " + edgePayload.getSource().substring(1), - Status.INTERNAL_SERVER_ERROR); - } - edgePayload - .setSource("services/inventory/" + version + "/" + source.getType() + "/" + source.getId().get()); - } - if (edgePayload.getTarget().startsWith("$")) { - Vertex target = vertices.get(edgePayload.getTarget().substring(1)); - if (target == null) { - throw new CrudException("Not able to find vertex: " + edgePayload.getTarget().substring(1), - Status.INTERNAL_SERVER_ERROR); - } - edgePayload - .setTarget("services/inventory/" + version + "/" + target.getType() + "/" + target.getId().get()); - } - - // If the type isn't set, resolve it based on on the sourece and target vertex types - if (edgePayload.getType() == null || edgePayload.getType().isEmpty()) { - edgePayload.setType(CrudServiceUtil.determineEdgeType(edgePayload, version)); - } - - List sourceVertexEdges = - EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(edgePayload.getSource()), edgePayload.getType(), - dao.getVertexEdges(EdgePayloadUtil.getVertexNodeId(edgePayload.getSource()), null, txId)); - - List targetVertexEdges = - EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(edgePayload.getTarget()), edgePayload.getType(), - dao.getVertexEdges(EdgePayloadUtil.getVertexNodeId(edgePayload.getTarget()), null, txId)); - - 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(), txId); - - // If the type isn't set, resolve it based on on the sourece and target vertex types - if (edgePayload.getType() == null || edgePayload.getType().isEmpty()) { - edgePayload.setType(edge.getType()); - } - - // load source and target vertex relationships for validation - List sourceVertexEdges = - EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(edgePayload.getSource()), edgePayload.getType(), - dao.getVertexEdges(EdgePayloadUtil.getVertexNodeId(edgePayload.getSource()), null, txId)); - - List targetVertexEdges = - EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(edgePayload.getTarget()), edgePayload.getType(), - dao.getVertexEdges(EdgePayloadUtil.getVertexNodeId(edgePayload.getTarget()), null, txId)); - - - validatedEdge = RelationshipSchemaValidator.validateIncomingUpdatePayload(edge, version, edgePayload, edgePayload.getType(), sourceVertexEdges, targetVertexEdges); - persistedEdge = updateBulkEdge(validatedEdge, version, txId); - } else { - if (edgePayload.getId() == null) { - throw new CrudException("id must be specified for patch request", Status.BAD_REQUEST); - } - Edge existingEdge = dao.getEdge(edgePayload.getId(), txId); - - // If the type isn't set, resolve it based on on the sourece and target vertex types - if (edgePayload.getType() == null || edgePayload.getType().isEmpty()) { - edgePayload.setType(existingEdge.getType()); - } - - Edge patchedEdge = RelationshipSchemaValidator.validateIncomingPatchPayload(existingEdge, version, edgePayload); - persistedEdge = updateBulkEdge(patchedEdge, version, txId); - } - - - Edge outgoingEdge = RelationshipSchemaValidator.validateOutgoingPayload(version, persistedEdge); - edges.put(item.getKey(), outgoingEdge); - } - } - - // commit transaction - dao.commitTransaction(txId); - } catch (CrudException ex) { - dao.rollbackTransaction(txId); - throw ex; - } catch (Exception ex) { - dao.rollbackTransaction(txId); - throw ex; - } finally { - if (dao.transactionExists(txId)) { - dao.rollbackTransaction(txId); - } - } - - return CrudResponseBuilder.buildUpsertBulkResponse(vertices, edges, version, payload); - } - - public abstract ImmutablePair addVertex(String version, String type, VertexPayload payload) throws CrudException; public abstract ImmutablePair updateVertex(String version, String id, String type, @@ -321,13 +102,7 @@ public abstract class AbstractGraphDataService { EdgePayload payload) throws CrudException; public abstract ImmutablePair patchEdge(String version, String id, String type, EdgePayload payload) throws CrudException; - - protected abstract Vertex addBulkVertex(Vertex vertex, String version, String dbTransId) throws CrudException; - protected abstract Vertex updateBulkVertex(Vertex vertex, String id, String version, String dbTransId) throws CrudException; - protected abstract void deleteBulkVertex(String id, String version, String type, String dbTransId) throws CrudException; - - protected abstract Edge addBulkEdge(Edge edge, String version, String dbTransId) throws CrudException; - protected abstract Edge updateBulkEdge(Edge edge, String version, String dbTransId) throws CrudException; - protected abstract void deleteBulkEdge(String id, String version, String dbTransId) throws CrudException; + + public abstract String addBulk(String version, BulkPayload payload, HttpHeaders headers) throws CrudException; }