diff options
Diffstat (limited to 'src/main/java/org/onap/crud')
13 files changed, 38 insertions, 223 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 0a9adc4..554b9fa 100644 --- a/src/main/java/org/onap/crud/dao/champ/ChampDao.java +++ b/src/main/java/org/onap/crud/dao/champ/ChampDao.java @@ -183,7 +183,7 @@ public class ChampDao implements GraphDao { @Override public OperationResult getVertices(String type, Map<String, Object> filter, Set<String> properties, String version) throws CrudException { - filter.put(org.onap.schema.validation.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type); + filter.put(org.onap.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type); List<NameValuePair> queryParams = convertToNameValuePair(filter); queryParams.addAll(convertToNameValuePair("properties", properties)); @@ -252,7 +252,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.validation.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type); + properties.put(org.onap.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type); Vertex.Builder insertVertexBuilder = new Vertex.Builder(type); properties.forEach(insertVertexBuilder::property); @@ -276,7 +276,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.validation.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type); + properties.put(org.onap.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type); Vertex.Builder insertVertexBuilder = new Vertex.Builder(type); insertVertexBuilder.id(id); @@ -424,7 +424,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.validation.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type); + properties.put(org.onap.schema.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type); Vertex.Builder insertVertexBuilder = new Vertex.Builder(type); properties.forEach(insertVertexBuilder::property); @@ -473,7 +473,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.validation.OxmModelValidator.Metadata.NODE_TYPE.propertyName(), type); + properties.put(org.onap.schema.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 a70253e..a5bda17 100644 --- a/src/main/java/org/onap/crud/entity/Vertex.java +++ b/src/main/java/org/onap/crud/entity/Vertex.java @@ -34,7 +34,8 @@ 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.validation.OxmModelValidator; +import org.onap.schema.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 83be4bc..19e92ae 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.validation.OxmModelValidator; -import org.onap.schema.validation.RelationshipSchemaValidator; +import org.onap.schema.OxmModelValidator; +import org.onap.schema.RelationshipSchemaValidator; /** * Reads event responses, logs and generates exceptions if errors are found. diff --git a/src/main/java/org/onap/crud/parser/CrudResponseBuilder.java b/src/main/java/org/onap/crud/parser/CrudResponseBuilder.java index 29d8824..18b50ef 100644 --- a/src/main/java/org/onap/crud/parser/CrudResponseBuilder.java +++ b/src/main/java/org/onap/crud/parser/CrudResponseBuilder.java @@ -27,6 +27,9 @@ 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; diff --git a/src/main/java/org/onap/crud/parser/util/EdgePayloadUtil.java b/src/main/java/org/onap/crud/parser/util/EdgePayloadUtil.java deleted file mode 100644 index 0f72625..0000000 --- a/src/main/java/org/onap/crud/parser/util/EdgePayloadUtil.java +++ /dev/null @@ -1,145 +0,0 @@ -/**
- * ============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/AbstractGraphDataService.java b/src/main/java/org/onap/crud/service/AbstractGraphDataService.java index 14ea242..8225adf 100644 --- a/src/main/java/org/onap/crud/service/AbstractGraphDataService.java +++ b/src/main/java/org/onap/crud/service/AbstractGraphDataService.java @@ -41,14 +41,10 @@ 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 org.onap.schema.OxmModelValidator; +import org.onap.schema.RelationshipSchemaValidator; public abstract class AbstractGraphDataService { protected GraphDao daoForGet; @@ -230,22 +226,14 @@ public abstract class AbstractGraphDataService { 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<Edge> sourceVertexEdges = - EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(edgePayload.getSource()), edgePayload.getType(), - dao.getVertexEdges(EdgePayloadUtil.getVertexNodeId(edgePayload.getSource()), null, txId)); - - List<Edge> 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); + validatedEdge = RelationshipSchemaValidator.validateIncomingAddPayload(version, edgePayload.getType(),edgePayload); + persistedEdge = addBulkEdge(validatedEdge, version, txId); } else if (opr.getValue().getAsString().equalsIgnoreCase("modify")) { Edge edge = dao.getEdge(edgePayload.getId(), txId); @@ -255,17 +243,8 @@ public abstract class AbstractGraphDataService { edgePayload.setType(edge.getType()); } - // load source and target vertex relationships for validation - List<Edge> sourceVertexEdges = - EdgePayloadUtil.filterEdgesByRelatedVertexAndType(EdgePayloadUtil.getVertexNodeType(edgePayload.getSource()), edgePayload.getType(), - dao.getVertexEdges(EdgePayloadUtil.getVertexNodeId(edgePayload.getSource()), null, txId)); - - List<Edge> 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); + validatedEdge = RelationshipSchemaValidator.validateIncomingUpdatePayload(edge, version, edgePayload); + persistedEdge = updateBulkEdge(validatedEdge, version, txId); } else { if (edgePayload.getId() == null) { diff --git a/src/main/java/org/onap/crud/parser/BulkPayload.java b/src/main/java/org/onap/crud/service/BulkPayload.java index 33e9a2e..8dc99c4 100644 --- a/src/main/java/org/onap/crud/parser/BulkPayload.java +++ b/src/main/java/org/onap/crud/service/BulkPayload.java @@ -18,7 +18,7 @@ * limitations under the License. * ============LICENSE_END========================================================= */ -package org.onap.crud.parser; +package org.onap.crud.service; import com.google.gson.Gson; import com.google.gson.GsonBuilder; diff --git a/src/main/java/org/onap/crud/service/CrudAsyncGraphDataService.java b/src/main/java/org/onap/crud/service/CrudAsyncGraphDataService.java index 8d147eb..14ba7f2 100644 --- a/src/main/java/org/onap/crud/service/CrudAsyncGraphDataService.java +++ b/src/main/java/org/onap/crud/service/CrudAsyncGraphDataService.java @@ -56,13 +56,11 @@ 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.validation.OxmModelValidator; -import org.onap.schema.validation.RelationshipSchemaValidator; +import org.onap.schema.OxmModelValidator; +import org.onap.schema.RelationshipSchemaValidator; public class CrudAsyncGraphDataService extends AbstractGraphDataService { diff --git a/src/main/java/org/onap/crud/service/CrudGraphDataService.java b/src/main/java/org/onap/crud/service/CrudGraphDataService.java index ae2d294..034b0bf 100644 --- a/src/main/java/org/onap/crud/service/CrudGraphDataService.java +++ b/src/main/java/org/onap/crud/service/CrudGraphDataService.java @@ -31,12 +31,9 @@ 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.validation.OxmModelValidator; -import org.onap.schema.validation.RelationshipSchemaValidator; +import org.onap.schema.OxmModelValidator; +import org.onap.schema.RelationshipSchemaValidator; public class CrudGraphDataService extends AbstractGraphDataService { @@ -74,16 +71,8 @@ public class CrudGraphDataService extends AbstractGraphDataService { @Override public ImmutablePair<EntityTag, String> addEdge(String version, String type, EdgePayload payload) throws CrudException { - // 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); + + Edge edge = RelationshipSchemaValidator.validateIncomingAddPayload(version, type, payload); return addEdge(version, edge); } @@ -147,19 +136,7 @@ public class CrudGraphDataService extends AbstractGraphDataService { @Override public ImmutablePair<EntityTag, String> updateEdge(String version, String id, String type, EdgePayload payload) throws CrudException { - 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); + Edge validatedEdge = getValidatedEdge(version, id, type, payload); return updateEdge(version, validatedEdge); } @@ -179,6 +156,11 @@ 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 025f3d2..734c4d5 100644 --- a/src/main/java/org/onap/crud/service/CrudRestService.java +++ b/src/main/java/org/onap/crud/service/CrudRestService.java @@ -56,9 +56,6 @@ 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/parser/EdgePayload.java b/src/main/java/org/onap/crud/service/EdgePayload.java index a1499db..a670b54 100644 --- a/src/main/java/org/onap/crud/parser/EdgePayload.java +++ b/src/main/java/org/onap/crud/service/EdgePayload.java @@ -18,7 +18,7 @@ * limitations under the License. * ============LICENSE_END========================================================= */ -package org.onap.crud.parser; +package org.onap.crud.service; import javax.ws.rs.core.Response.Status; import org.onap.crud.exception.CrudException; diff --git a/src/main/java/org/onap/crud/parser/VertexPayload.java b/src/main/java/org/onap/crud/service/VertexPayload.java index b5ff345..172d03b 100644 --- a/src/main/java/org/onap/crud/parser/VertexPayload.java +++ b/src/main/java/org/onap/crud/service/VertexPayload.java @@ -18,7 +18,7 @@ * limitations under the License. * ============LICENSE_END========================================================= */ -package org.onap.crud.parser; +package org.onap.crud.service; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/org/onap/crud/util/CrudServiceUtil.java b/src/main/java/org/onap/crud/util/CrudServiceUtil.java index 2441776..64a822c 100644 --- a/src/main/java/org/onap/crud/util/CrudServiceUtil.java +++ b/src/main/java/org/onap/crud/util/CrudServiceUtil.java @@ -33,10 +33,10 @@ import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.Response.Status; import org.onap.crud.exception.CrudException; -import org.onap.crud.parser.EdgePayload; -import org.onap.crud.parser.util.EdgePayloadUtil; +import org.onap.crud.service.EdgePayload; import org.onap.schema.EdgeRulesLoader; import org.onap.schema.RelationshipSchema; +import org.onap.schema.RelationshipSchemaValidator; public class CrudServiceUtil { @@ -138,8 +138,8 @@ public class CrudServiceUtil { throw new CrudException("Source/Target not specified", Status.BAD_REQUEST); } - Set<String> edgeTypes = schema.getValidRelationTypes(EdgePayloadUtil.getVertexNodeType(payload.getSource()), - EdgePayloadUtil.getVertexNodeType(payload.getTarget())); + Set<String> edgeTypes = schema.getValidRelationTypes(RelationshipSchemaValidator.vertexTypeFromUri(payload.getSource()), + RelationshipSchemaValidator.vertexTypeFromUri(payload.getTarget())); if (edgeTypes.size() == 0) { throw new CrudException("No valid relationship types from " + payload.getSource() + " to " + payload.getTarget(), Status.BAD_REQUEST); |