@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));
// 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);
// 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);
// 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);
// 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);
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;
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.
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;
+++ /dev/null
-/**\r
- * ============LICENSE_START=======================================================\r
- * org.onap.aai\r
- * ================================================================================\r
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.\r
- * Copyright © 2017-2018 Amdocs\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ============LICENSE_END=========================================================\r
- */\r
-package org.onap.crud.parser.util;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
-import javax.ws.rs.core.Response.Status;\r
-import org.onap.crud.entity.Edge;\r
-import org.onap.crud.entity.Vertex;\r
-import org.onap.crud.exception.CrudException;\r
-\r
-/**\r
- * Utility Class to extract data from the Edge Payload\r
- */\r
-public class EdgePayloadUtil {\r
-\r
- private static final Pattern URL_MATCHER = Pattern.compile("services/inventory/(.*)/(.*)/(.*)");\r
-\r
- private static Matcher getVertexMatcher(String vertex) throws CrudException {\r
- Matcher matcher = URL_MATCHER.matcher(vertex);\r
- if (!matcher.matches()) {\r
- throw new CrudException("Invalid Source/Target Urls", Status.BAD_REQUEST);\r
- }\r
- return matcher;\r
- }\r
-\r
- /**\r
- * Returns the node type from a vertex on the edge payload\r
- *\r
- * @param vertex\r
- * @return\r
- * @throws CrudException\r
- */\r
- public static String getVertexNodeType(String vertex) throws CrudException {\r
- return getVertexMatcher(vertex).group(2);\r
- }\r
-\r
- /**\r
- * Returns the node id from a vertex on the edge payload\r
- *\r
- * @param vertex\r
- * @return\r
- * @throws CrudException\r
- */\r
- public static String getVertexNodeId(String vertex) throws CrudException {\r
- return getVertexMatcher(vertex).group(3);\r
- }\r
-\r
- /**\r
- * Generates a key based on the edge payload content\r
- *\r
- * @param source\r
- * @param target\r
- * @param type\r
- * @return\r
- * @throws CrudException\r
- */\r
- public static String generateEdgeKey(String source, String target, String type) throws CrudException {\r
- return getVertexNodeType(source) + ":" + getVertexNodeType(target) + ":" + type;\r
- }\r
-\r
- /**\r
- * Returns an Edge Builder object from the payload properties\r
- *\r
- * @param source\r
- * @param target\r
- * @param type\r
- * @return\r
- * @throws CrudException\r
- */\r
- public static Edge.Builder getBuilderFromEdgePayload(String source, String target, String type) throws CrudException {\r
- Edge.Builder edgeBuilder = new Edge.Builder(type);\r
-\r
- edgeBuilder.source(new Vertex.Builder(getVertexNodeType(source)).id(getVertexNodeId(source)).build());\r
- edgeBuilder.target(new Vertex.Builder(getVertexNodeType(target)).id(getVertexNodeId(target)).build());\r
-\r
- return edgeBuilder;\r
- }\r
-\r
- /**\r
- * Returns an Edge Builder object from an Edge object properties\r
- *\r
- * @param edge\r
- * @return\r
- */\r
- public static Edge.Builder getBuilderFromEdge(Edge edge) {\r
- Edge.Builder edgeBuilder = new Edge.Builder(edge.getType()).id(edge.getId().get());\r
-\r
- edgeBuilder\r
- .source(new Vertex.Builder(edge.getSource().getType()).id(edge.getSource().getId().get()).build());\r
- edgeBuilder\r
- .target(new Vertex.Builder(edge.getTarget().getType()).id(edge.getTarget().getId().get()).build());\r
-\r
- return edgeBuilder;\r
- }\r
-\r
- /**\r
- * Filter Edges by its source/target vertex type and the edge type\r
- *\r
- * @param sourceTargetType the new Edge source/target type\r
- * @param type\r
- * @param edges\r
- * @return List<Edge>\r
- */\r
- public static List<Edge> filterEdgesByRelatedVertexAndType(String sourceTargetType, String type, List<Edge> edges) {\r
- List<Edge> filteredEdges = new ArrayList<>();\r
- if (edges != null) {\r
- for (Edge edge : edges) {\r
- if (doesEdgeTypeMatch(edge, type) && doesEdgeSourceTargetTypeMatch(edge, sourceTargetType)) {\r
- filteredEdges.add(edge);\r
- }\r
- }\r
- }\r
- return filteredEdges;\r
- }\r
-\r
- private static boolean doesEdgeTypeMatch(Edge edge, String type) {\r
- return edge.getType() != null && edge.getType().equals(type);\r
- }\r
-\r
- private static boolean doesEdgeSourceTargetTypeMatch(Edge edge, String sourceTargetType) {\r
- return (edge.getSource().getType() != null && edge.getSource().getType().equals(sourceTargetType))\r
- || ((edge.getTarget().getType() != null && edge.getTarget().getType().equals(sourceTargetType)));\r
- }\r
-}\r
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;
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);
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) {
* 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;
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 {
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 {
@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);
}
@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);
}
.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 {
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;
* 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;
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-package org.onap.crud.parser;
+package org.onap.crud.service;
import java.util.ArrayList;
import java.util.List;
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 {
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);
* limitations under the License.
* ============LICENSE_END=========================================================
*/
-package org.onap.schema.validation;
+package org.onap.schema;
import java.util.HashMap;
import java.util.Map;
import org.onap.crud.logging.CrudServiceMsgs;
import org.onap.crud.util.CrudServiceConstants;
import org.onap.crud.util.CrudServiceUtil;
-import org.onap.schema.OxmModelLoader;
+
import com.google.common.base.CaseFormat;
import com.google.gson.JsonElement;
import com.google.gson.JsonNull;
public class RelationshipSchema {
- public static final String SCHEMA_SOURCE_NODE_TYPE = "from";
- public static final String SCHEMA_TARGET_NODE_TYPE = "to";
public static final String SCHEMA_RELATIONSHIP_TYPE = "label";
- public static final String SCHEMA_MULTIPLICITY_TYPE = "multiplicity";
- public static final String SCHEMA_RULES_ARRAY = "rules";
private Map<String, Map<String, Class<?>>> relations = new HashMap<>();
/**
*/
private Map<String, Map<String, Class<?>>> relationTypes = new HashMap<>();
- private Map<String, EdgeRule> relationshipRules = new HashMap<>();
-
// A map storing the list of valid edge types for a source/target pair
private Map<String, Set<String>> edgeTypesForNodePair = new HashMap<>();
// hold the true values of the edge rules by key - convert to java 8
for (EdgeRule rule : rules.values()) {
- String key = buildRelation(rule.getFrom(), rule.getTo(), rule.getLabel());
- relationshipRules.put(key, rule);
String nodePairKey = buildNodePairKey(rule.getFrom(), rule.getTo());
if (edgeTypesForNodePair.get(nodePairKey) == null) {
return this.relations.get(key);
}
- /**
- * Extract the multiplicity type from the Edge rules
- *
- * @param key
- * @return
- * @throws CrudException
- */
- public String lookupRelationMultiplicity(String key) throws CrudException {
- EdgeRule edgeRule = relationshipRules.get(key);
-
- if (edgeRule == null) {
- throw new CrudException("Invalid source/target/relationship type: " + key, Status.BAD_REQUEST);
- }
-
- if (edgeRule.getMultiplicityRule() != null) {
- return edgeRule.getMultiplicityRule().toString();
- }
-
- return null;
- }
-
public Map<String, Class<?>> lookupRelationType(String type) {
return this.relationTypes.get(type);
}
--- /dev/null
+/**
+ * ============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.schema;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+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;
+import org.onap.crud.service.EdgePayload;
+import org.onap.crud.util.CrudServiceUtil;
+import org.onap.schema.OxmModelValidator.Metadata;
+import org.radeox.util.logging.Logger;
+
+import com.google.gson.JsonElement;
+import com.google.gson.JsonNull;
+
+public class RelationshipSchemaValidator {
+
+ public static final String SOURCE_NODE = "source";
+ public static final String TARGET_NODE = "target";
+
+ final static Pattern urlPattern = Pattern.compile("services/inventory/(.*)/(.*)/(.*)");
+
+ public static Map<String, Object> resolveCollectionfilter(String version, String type,Map<String, String> filter) throws CrudException {
+ RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version);
+ if (schema == null) {
+ throw new CrudException("", Status.NOT_FOUND);
+ }
+
+ Map<String, Class<?>> props = schema.lookupRelationType(type);
+ Map<String, Object> result = new HashMap<String, Object>();
+
+ for (String key : filter.keySet()) {
+
+ if (props.containsKey(key)) {
+ try {
+ Object value = CrudServiceUtil.validateFieldType(filter.get(key), props.get(key));
+ result.put(key, value);
+ } catch (Exception ex) {
+ // Skip any exceptions thrown while validating the filter key value
+ continue;
+ }
+ }
+ }
+ return result;
+ }
+
+ public static void validateType(String version, String type) throws CrudException {
+ RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version);
+ if (!schema.isValidType(type)) {
+ throw new CrudException("Invalid " + RelationshipSchema.SCHEMA_RELATIONSHIP_TYPE
+ + ": " + type,
+ Status.BAD_REQUEST);
+ }
+
+ }
+
+ public static Edge validateIncomingAddPayload(String version, String type, Vertex sourceNode, Vertex targetNode, JsonElement properties) throws CrudException {
+ EdgePayload payload = new EdgePayload();
+ payload.setSource("services/inventory/" + version + "/" + sourceNode.getType() + "/" + sourceNode.getId().get());
+ payload.setTarget("services/inventory/" + version + "/" + targetNode.getType() + "/" + targetNode.getId().get());
+ payload.setType(type);
+ payload.setProperties(properties);
+
+ return validateIncomingAddPayload(version, type, payload);
+ }
+
+ public static Edge validateIncomingAddPayload(String version, String type, EdgePayload payload)
+ throws CrudException {
+ RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version);
+
+ try {
+ if (payload.getSource() == null || payload.getTarget() == null) {
+ throw new CrudException("Source/Target not specified", Status.BAD_REQUEST);
+ }
+
+ Matcher sourceMatcher = urlPattern.matcher(payload.getSource());
+ Matcher targetMatcher = urlPattern.matcher(payload.getTarget());
+
+ if (!sourceMatcher.matches() || !targetMatcher.matches()) {
+ throw new CrudException("Invalid Source/Target Urls", Status.BAD_REQUEST);
+ }
+
+ // create key based on source:target:relationshipType
+ String sourceNodeType = sourceMatcher.group(2);
+ String targetNodeType = targetMatcher.group(2);
+
+ String sourceNodeId = sourceMatcher.group(3);
+ String targetNodeId = targetMatcher.group(3);
+
+ String key = sourceNodeType + ":" + targetNodeType + ":" + type;
+
+ // find the validate the key from the schema
+ Map<String, Class<?>> schemaObject = schema.lookupRelation(key);
+
+ if (schemaObject == null) {
+ throw new CrudException("Invalid source/target/relationship type: " + key, Status.BAD_REQUEST);
+ }
+
+ Edge.Builder modelEdgeBuilder = new Edge.Builder(type);
+
+ modelEdgeBuilder.source(new Vertex.Builder(sourceNodeType).id(sourceNodeId).build());
+ modelEdgeBuilder.target(new Vertex.Builder(targetNodeType).id(targetNodeId).build());
+
+ // validate it properties
+ validateEdgeProps(modelEdgeBuilder, payload.getProperties(), schemaObject);
+
+ return modelEdgeBuilder.build();
+ } catch (Exception ex) {
+ throw new CrudException(ex.getMessage(), Status.BAD_REQUEST);
+ }
+ }
+
+ public static Edge validateIncomingPatchPayload(Edge edge, String version, EdgePayload payload)
+ throws CrudException {
+ RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version);
+
+ try {
+ if (payload.getSource() != null) {
+ Matcher sourceMatcher = urlPattern.matcher(payload.getSource());
+
+ if (!sourceMatcher.matches()) {
+ throw new CrudException("Invalid Source Urls", Status.BAD_REQUEST);
+ }
+ String sourceNodeId = sourceMatcher.group(3);
+ if (!sourceNodeId.equals(edge.getSource().getId().get())) {
+ throw new CrudException("Source can't be updated", Status.BAD_REQUEST);
+ }
+ }
+
+ if (payload.getTarget() != null) {
+ Matcher targetMatcher = urlPattern.matcher(payload.getTarget());
+
+ if (!targetMatcher.matches()) {
+ throw new CrudException("Invalid Target Urls", Status.BAD_REQUEST);
+ }
+ String sourceNodeId = targetMatcher.group(3);
+ if (!sourceNodeId.equals(edge.getTarget().getId().get())) {
+ throw new CrudException("Target can't be updated", Status.BAD_REQUEST);
+ }
+ }
+
+ // Remove the timestamp properties from the existing edge, as these should be managed by Champ.
+ Map<String,Object> existingProps = edge.getProperties();
+
+ if (existingProps.containsKey(Metadata.CREATED_TS.propertyName())) {
+ existingProps.remove(Metadata.CREATED_TS.propertyName());
+ }
+ if (existingProps.containsKey(Metadata.UPDATED_TS.propertyName())) {
+ existingProps.remove(Metadata.UPDATED_TS.propertyName());
+ }
+
+ // create key based on source:target:relationshipType
+ String key = edge.getSource().getType() + ":" + edge.getTarget().getType()
+ + ":" + edge.getType();
+
+ // find the validate the key from the schema
+ Map<String, Class<?>> schemaObject = schema.lookupRelation(key);
+
+ if (schemaObject == null) {
+ Logger.warn("key :" + key
+ + " not found in relationship schema . Skipping the schema validation");
+ return edge;
+ }
+
+ Set<Map.Entry<String, JsonElement>> entries = payload.getProperties().getAsJsonObject().entrySet();
+
+ for (Map.Entry<String, JsonElement> entry : entries) {
+ if (!schemaObject.containsKey(entry.getKey())) {
+ throw new CrudException("Invalid property: " + entry.getKey(), Status.BAD_REQUEST);
+ } else if (entry.getValue() instanceof JsonNull && edge.getProperties().containsKey(entry.getKey())) {
+ edge.getProperties().remove(entry.getKey());
+ } else if (!(entry.getValue() instanceof JsonNull)) {
+ Object value = CrudServiceUtil.validateFieldType(entry.getValue().getAsString(), schemaObject.get(entry.getKey()));
+ edge.getProperties().put(entry.getKey(), value);
+ }
+ }
+
+ return edge;
+ } catch (Exception ex) {
+ throw new CrudException(ex.getMessage(), Status.BAD_REQUEST);
+ }
+ }
+
+
+ public static Edge validateIncomingUpdatePayload(Edge edge, String version, Vertex sourceNode, Vertex targetNode, JsonElement properties)
+ throws CrudException {
+ EdgePayload payload = new EdgePayload();
+ payload.setSource("services/inventory/" + version + "/" + sourceNode.getType() + "/" + sourceNode.getId().get());
+ payload.setTarget("services/inventory/" + version + "/" + targetNode.getType() + "/" + targetNode.getId().get());
+ payload.setType(edge.getType());
+ payload.setProperties(properties);
+ return validateIncomingUpdatePayload(edge, version, payload);
+ }
+
+ public static Edge validateIncomingUpdatePayload(Edge edge, String version, EdgePayload payload)
+ throws CrudException {
+ RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version);
+
+ try {
+ if (payload.getSource() != null) {
+ Matcher sourceMatcher = urlPattern.matcher(payload.getSource());
+
+ if (!sourceMatcher.matches()) {
+ throw new CrudException("Invalid Source Urls", Status.BAD_REQUEST);
+ }
+ String sourceNodeId = sourceMatcher.group(3);
+ if (!sourceNodeId.equals(edge.getSource().getId().get())) {
+ throw new CrudException("Source can't be updated", Status.BAD_REQUEST);
+ }
+ }
+
+ if (payload.getTarget() != null) {
+ Matcher targetMatcher = urlPattern.matcher(payload.getTarget());
+
+ if (!targetMatcher.matches()) {
+ throw new CrudException("Invalid Target Urls", Status.BAD_REQUEST);
+ }
+ String sourceNodeId = targetMatcher.group(3);
+ if (!sourceNodeId.equals(edge.getTarget().getId().get())) {
+ throw new CrudException("Target can't be updated", Status.BAD_REQUEST);
+ }
+ }
+
+ // create key based on source:target:relationshipType
+ String key = edge.getSource().getType() + ":" + edge.getTarget().getType()
+ + ":" + edge.getType();
+
+ // find the validate the key from the schema
+ Map<String, Class<?>> schemaObject = schema.lookupRelation(key);
+
+ if (schemaObject == null) {
+ Logger.warn("key :" + key
+ + " not found in relationship schema . Skipping the schema validation");
+ return edge;
+ }
+
+ Edge.Builder updatedEdgeBuilder = new Edge.Builder(edge.getType()).id(edge.getId().get());
+
+ updatedEdgeBuilder.source(new Vertex.Builder(edge.getSource().getType()).id(edge.getSource().getId().get()).build());
+ updatedEdgeBuilder.target(new Vertex.Builder(edge.getTarget().getType()).id(edge.getTarget().getId().get()).build());
+
+ validateEdgeProps(updatedEdgeBuilder, payload.getProperties(), schemaObject);
+
+ return updatedEdgeBuilder.build();
+ } catch (Exception ex) {
+ throw new CrudException(ex.getMessage(), Status.BAD_REQUEST);
+ }
+ }
+
+
+ private static void validateEdgeProps(Edge.Builder builder, JsonElement props, Map<String, Class<?>> schemaObject) throws CrudException {
+ Set<Map.Entry<String, JsonElement>> entries = props.getAsJsonObject().entrySet();
+
+ for (Map.Entry<String, JsonElement> entry : entries) {
+ if (!schemaObject.containsKey(entry.getKey())) {
+ throw new CrudException("Invalid property: " + entry.getKey(), Status.BAD_REQUEST);
+ } else {
+ Object value = CrudServiceUtil.validateFieldType(entry.getValue().getAsString(),
+ schemaObject.get(entry.getKey()));
+ builder.property(entry.getKey(), value);
+ }
+ }
+ }
+
+ public static Edge validateOutgoingPayload(String version, Edge edge) throws CrudException {
+ Edge.Builder modelEdgeBuilder = new Edge.Builder(edge.getType()).id(edge.getId()
+ .get()).source(edge.getSource())
+ .target(edge.getTarget());
+
+ RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version);
+
+ String key = edge.getSource().getType() + ":" + edge.getTarget().getType()
+ + ":" + edge.getType();
+ Map<String, Class<?>> schemaObject = schema.lookupRelation(key);
+
+ if (schemaObject == null || schemaObject.isEmpty()) {
+ return edge;
+ }
+
+ for (String prop : edge.getProperties().keySet()) {
+ if (schemaObject.containsKey(prop)) {
+ modelEdgeBuilder.property(prop, edge.getProperties().get(prop));
+ }
+
+ }
+ return modelEdgeBuilder.build();
+ }
+
+ public static String vertexTypeFromUri(String uri) throws CrudException {
+
+ Matcher matcher = urlPattern.matcher(uri);
+
+ if (!matcher.matches()) {
+ throw new CrudException("Invalid Source/Target Urls", Status.BAD_REQUEST);
+ }
+
+ return matcher.group(2);
+ }
+}
+++ /dev/null
-/**\r
- * ============LICENSE_START=======================================================\r
- * org.onap.aai\r
- * ================================================================================\r
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.\r
- * Copyright © 2017-2018 Amdocs\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ============LICENSE_END=========================================================\r
- */\r
-package org.onap.schema.validation;\r
-\r
-import java.util.List;\r
-import javax.ws.rs.core.Response.Status;\r
-import org.onap.crud.entity.Edge;\r
-import org.onap.crud.exception.CrudException;\r
-import org.onap.crud.parser.EdgePayload;\r
-import org.onap.crud.parser.util.EdgePayloadUtil;\r
-import org.onap.schema.EdgeRulesLoader;\r
-import org.onap.schema.RelationshipSchema;\r
-\r
-/**\r
- * Validator to enforce multiplicity rules on the creation of a new Edge\r
- *\r
- */\r
-public class MultiplicityValidator {\r
-\r
- public enum MultiplicityType {\r
- MANY2ONE("Many2One"), MANY2MANY("Many2Many"), ONE2MANY("One2Many"), ONE2ONE("One2One");\r
-\r
- private final String value;\r
-\r
- MultiplicityType(String value) {\r
- this.value = value;\r
- }\r
-\r
- public String getValue() {\r
- return value;\r
- }\r
- }\r
-\r
- /**\r
- * Validates the Edge payload's source and target vertices against multiplicity rule\r
- *\r
- * @param payload\r
- * @param edgesForSourceVertex\r
- * @param edgesForTargetVertex\r
- * @param type\r
- * @param version\r
- * @throws CrudException\r
- */\r
- public static void validatePayloadMultiplicity(EdgePayload payload, List<Edge> edgesForSourceVertex,\r
- List<Edge> edgesForTargetVertex, String type, String version)\r
- throws CrudException {\r
- RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version);\r
- // find the validate the key from the schema\r
- String key = EdgePayloadUtil.generateEdgeKey(payload.getSource(), payload.getTarget(), type);\r
-\r
- // get the multiplicity rule for the relationships\r
- String multiplicityTypeValue = schema.lookupRelationMultiplicity(key);\r
- if (multiplicityTypeValue != null) {\r
- MultiplicityType multiplicityType = MultiplicityType.valueOf(multiplicityTypeValue.toUpperCase());\r
-\r
- boolean isVertexValidForMultiplicityType =\r
- isVertexValidForMultiplicityType(edgesForSourceVertex, edgesForTargetVertex, multiplicityType);\r
-\r
- if (!isVertexValidForMultiplicityType) {\r
- throw new CrudException(\r
- multiplicityType.toString() + " multiplicity rule broken for Edge:" + key,\r
- Status.BAD_REQUEST);\r
- }\r
- }\r
- }\r
-\r
- /**\r
- * Compare vertex existing relationships to ensure its not in breach of multiplicity rules\r
- *\r
- * @param edgesForVertex\r
- * @param multiplicityType\r
- * @return\r
- */\r
- public static Boolean isVertexValidForMultiplicityType(List<Edge> edgesForSourceVertex,\r
- List<Edge> edgesForTargetVertex,\r
- MultiplicityType multiplicityType) {\r
-\r
- switch (multiplicityType) {\r
- case MANY2MANY:\r
- return true;\r
- case MANY2ONE:\r
- if (edgesForSourceVertex != null && !edgesForSourceVertex.isEmpty()) {\r
- return false;\r
- }\r
- break;\r
- case ONE2MANY:\r
- if (edgesForTargetVertex != null && !edgesForTargetVertex.isEmpty()) {\r
- return false;\r
- }\r
- break;\r
- case ONE2ONE:\r
- if ((edgesForSourceVertex != null && !edgesForSourceVertex.isEmpty())\r
- || (edgesForTargetVertex != null && !edgesForTargetVertex.isEmpty())) {\r
- return false;\r
- }\r
- break;\r
- }\r
- return true;\r
- }\r
-\r
-}
\ No newline at end of file
+++ /dev/null
-/**
- * ============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.schema.validation;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-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;
-import org.onap.crud.parser.EdgePayload;
-import org.onap.crud.parser.util.EdgePayloadUtil;
-import org.onap.crud.util.CrudServiceUtil;
-import org.onap.schema.EdgeRulesLoader;
-import org.onap.schema.RelationshipSchema;
-import org.onap.schema.validation.OxmModelValidator.Metadata;
-import org.radeox.util.logging.Logger;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-
-public class RelationshipSchemaValidator {
-
- private static final String SOURCE_LABEL = "Source";
- private static final String TARGET_LABEL = "Target";
-
- public static Map<String, Object> resolveCollectionfilter(String version, String type, Map<String, String> filter) throws CrudException {
- RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version);
- if (schema == null) {
- throw new CrudException("", Status.NOT_FOUND);
- }
-
- Map<String, Class<?>> props = schema.lookupRelationType(type);
- Map<String, Object> result = new HashMap<String, Object>();
-
- for (String key : filter.keySet()) {
-
- if (props.containsKey(key)) {
- try {
- Object value = CrudServiceUtil.validateFieldType(filter.get(key), props.get(key));
- result.put(key, value);
- } catch (Exception ex) {
- // Skip any exceptions thrown while validating the filter key value
- continue;
- }
- }
- }
- return result;
- }
-
- public static void validateType(String version, String type) throws CrudException {
- RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version);
- if (!schema.isValidType(type)) {
- throw new CrudException("Invalid " + RelationshipSchema.SCHEMA_RELATIONSHIP_TYPE
- + ": " + type,
- Status.BAD_REQUEST);
- }
-
- }
-
- public static Edge validateIncomingAddPayload(String version, String type, EdgePayload payload,
- List<Edge> sourceVertexEdges, List<Edge> targetVertexEdges) throws CrudException {
-
- //perform standard validation
- Edge edge = validateIncomingAddPayload(version, type, payload);
-
- // validate payload using multiplicity edge rules
- MultiplicityValidator.validatePayloadMultiplicity(payload, sourceVertexEdges, targetVertexEdges, type, version);
-
- return edge;
- }
-
- public static Edge validateIncomingAddPayload(String version, String type, EdgePayload payload)
- throws CrudException {
- RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version);
-
- try {
- if (payload.getSource() == null || payload.getTarget() == null) {
- throw new CrudException("Source/Target not specified", Status.BAD_REQUEST);
- }
-
- String key = EdgePayloadUtil.generateEdgeKey(payload.getSource(), payload.getTarget(), type);
-
- // find the validate the key from the schema
- Map<String, Class<?>> schemaObject = schema.lookupRelation(key);
-
- if (schemaObject == null) {
- throw new CrudException("Invalid source/target/relationship type: " + key, Status.BAD_REQUEST);
- }
-
- Edge.Builder modelEdgeBuilder = EdgePayloadUtil.getBuilderFromEdgePayload(payload.getSource(), payload.getTarget(), type);
-
- // validate it properties
- validateEdgeProps(modelEdgeBuilder, payload.getProperties(), schemaObject);
-
- return modelEdgeBuilder.build();
- } catch (Exception ex) {
- throw new CrudException(ex.getMessage(), Status.BAD_REQUEST);
- }
- }
-
- public static Edge validateIncomingPatchPayload(Edge edge, String version, EdgePayload payload)
- throws CrudException {
- RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version);
-
- try {
- validateEdgeVertexMatchesPayload(edge.getSource(), payload.getSource(), SOURCE_LABEL);
- validateEdgeVertexMatchesPayload(edge.getTarget(), payload.getTarget(), TARGET_LABEL);
-
- // Remove the timestamp properties from the existing edge, as these should be managed by Champ.
- Map<String,Object> existingProps = edge.getProperties();
-
- if (existingProps.containsKey(Metadata.CREATED_TS.propertyName())) {
- existingProps.remove(Metadata.CREATED_TS.propertyName());
- }
- if (existingProps.containsKey(Metadata.UPDATED_TS.propertyName())) {
- existingProps.remove(Metadata.UPDATED_TS.propertyName());
- }
-
- // create key based on source:target:relationshipType
- String key = edge.getSource().getType() + ":" + edge.getTarget().getType()
- + ":" + edge.getType();
-
- // find the validate the key from the schema
- Map<String, Class<?>> schemaObject = schema.lookupRelation(key);
-
- if (schemaObject == null) {
- Logger.warn("key :" + key
- + " not found in relationship schema . Skipping the schema validation");
- return edge;
- }
-
- validateEdgePropertiesFromPayload(edge, payload, schemaObject);
-
- return edge;
- } catch (Exception ex) {
- throw new CrudException(ex.getMessage(), Status.BAD_REQUEST);
- }
- }
-
- private static void validateEdgePropertiesFromPayload(Edge edge, EdgePayload payload, Map<String, Class<?>> schemaObject) throws CrudException {
- Set<Map.Entry<String, JsonElement>> entries = payload.getProperties().getAsJsonObject().entrySet();
- for (Map.Entry<String, JsonElement> entry : entries) {
-
- if (!schemaObject.containsKey(entry.getKey())) {
- throw new CrudException("Invalid property: " + entry.getKey(), Status.BAD_REQUEST);
- } else if (entry.getValue() instanceof JsonNull && edge.getProperties().containsKey(entry.getKey())) {
- edge.getProperties().remove(entry.getKey());
- } else if (!(entry.getValue() instanceof JsonNull)) {
- Object value = CrudServiceUtil.validateFieldType(entry.getValue().getAsString(), schemaObject.get(entry.getKey()));
- edge.getProperties().put(entry.getKey(), value);
- }
- }
- }
-
-
- public static Edge validateIncomingUpdatePayload(Edge edge, String version, EdgePayload payload, String type,
- List<Edge> sourceVertexEdges, List<Edge> targetVertexEdges) throws CrudException {
-
- //perform standard validation
- Edge validatedEdge = validateIncomingUpdatePayload(edge, version, payload);
-
- // validate payload using multiplicity edge rules
- MultiplicityValidator.validatePayloadMultiplicity(payload, sourceVertexEdges, targetVertexEdges, type, version);
-
- return validatedEdge;
- }
-
- public static Edge validateIncomingUpdatePayload(Edge edge, String version, EdgePayload payload)
- throws CrudException {
- RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version);
-
- try {
- validateEdgeVertexMatchesPayload(edge.getSource(), payload.getSource(), SOURCE_LABEL);
- validateEdgeVertexMatchesPayload(edge.getTarget(), payload.getTarget(), TARGET_LABEL);
-
- // create key based on source:target:relationshipType
- String key = edge.getSource().getType() + ":" + edge.getTarget().getType()
- + ":" + edge.getType();
-
- // find the validate the key from the schema
- Map<String, Class<?>> schemaObject = schema.lookupRelation(key);
-
- if (schemaObject == null) {
- Logger.warn("key :" + key
- + " not found in relationship schema . Skipping the schema validation");
- return edge;
- }
-
- Edge.Builder updatedEdgeBuilder = EdgePayloadUtil.getBuilderFromEdge(edge);
-
- validateEdgeProps(updatedEdgeBuilder, payload.getProperties(), schemaObject);
-
- return updatedEdgeBuilder.build();
- } catch (Exception ex) {
- throw new CrudException(ex.getMessage(), Status.BAD_REQUEST);
- }
- }
-
- private static void validateEdgeVertexMatchesPayload(Vertex edgeVertex, String payloadVertex, String vertexTypeLabel) throws CrudException {
- if (payloadVertex != null) {
- String sourceNodeId = EdgePayloadUtil.getVertexNodeId(payloadVertex);
- if (!sourceNodeId.equals(edgeVertex.getId().get())) {
- throw new CrudException(vertexTypeLabel + " can't be updated", Status.BAD_REQUEST);
- }
- }
- }
-
- private static void validateEdgeProps(Edge.Builder builder, JsonElement props, Map<String, Class<?>> schemaObject) throws CrudException {
- Set<Map.Entry<String, JsonElement>> entries = props.getAsJsonObject().entrySet();
-
- for (Map.Entry<String, JsonElement> entry : entries) {
- if (!schemaObject.containsKey(entry.getKey())) {
- throw new CrudException("Invalid property: " + entry.getKey(), Status.BAD_REQUEST);
- } else {
- Object value = CrudServiceUtil.validateFieldType(entry.getValue().getAsString(),
- schemaObject.get(entry.getKey()));
- builder.property(entry.getKey(), value);
- }
- }
- }
-
- public static Edge validateOutgoingPayload(String version, Edge edge) throws CrudException {
- Edge.Builder modelEdgeBuilder = new Edge.Builder(edge.getType()).id(edge.getId()
- .get()).source(edge.getSource())
- .target(edge.getTarget());
-
- RelationshipSchema schema = EdgeRulesLoader.getSchemaForVersion(version);
-
- String key = edge.getSource().getType() + ":" + edge.getTarget().getType()
- + ":" + edge.getType();
- Map<String, Class<?>> schemaObject = schema.lookupRelation(key);
-
- if (schemaObject == null || schemaObject.isEmpty()) {
- return edge;
- }
-
- for (String prop : edge.getProperties().keySet()) {
- if (schemaObject.containsKey(prop)) {
- modelEdgeBuilder.property(prop, edge.getProperties().get(prop));
- }
-
- }
- return modelEdgeBuilder.build();
- }
-}
+++ /dev/null
-/**\r
- * ============LICENSE_START=======================================================\r
- * org.onap.aai\r
- * ================================================================================\r
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.\r
- * Copyright © 2017-2018 Amdocs\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ============LICENSE_END=========================================================\r
- */\r
-package org.onap.crud.parser.util;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-import org.junit.Assert;\r
-import org.junit.Test;\r
-import org.onap.crud.entity.Edge;\r
-import org.onap.crud.entity.Vertex;\r
-import org.onap.crud.exception.CrudException;\r
-\r
-public class EdgePayloadUtilTest {\r
-\r
- @Test\r
- public void testGetVertexNodeType() throws CrudException {\r
- Assert.assertEquals("vserver", EdgePayloadUtil\r
- .getVertexNodeType("services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811"));\r
- }\r
-\r
- @Test\r
- public void testGetVertexNodeId() throws CrudException {\r
- Assert.assertEquals("50bdab41-ad1c-4d00-952c-a0aa5d827811",\r
- EdgePayloadUtil.getVertexNodeId("services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811"));\r
- }\r
-\r
- @Test\r
- public void testGenerateEdgeKey() throws CrudException {\r
- Assert.assertEquals("vserver:pserver:tosca.relationships.HostedOn",\r
- EdgePayloadUtil.generateEdgeKey("services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811",\r
- "services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908",\r
- "tosca.relationships.HostedOn"));\r
- }\r
-\r
- @Test\r
- public void testKeyGenerationEnforcesSourceAndTargetOrder() throws Exception {\r
- String generateEdgeKey1 = EdgePayloadUtil.generateEdgeKey(\r
- "services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811",\r
- "services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908", "tosca.relationships.HostedOn");\r
-\r
- String generateEdgeKey2 = EdgePayloadUtil.generateEdgeKey(\r
- "services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908",\r
- "services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811", "tosca.relationships.HostedOn");\r
-\r
- Assert.assertNotEquals(generateEdgeKey1, generateEdgeKey2);\r
- }\r
-\r
-\r
- @Test\r
- public void testGetBuilderFromEdgePayload() throws CrudException {\r
- Edge.Builder builder = EdgePayloadUtil.getBuilderFromEdgePayload(\r
- "services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811",\r
- "services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908", "tosca.relationships.HostedOn");\r
-\r
- Edge edge = builder.build();\r
- Assert.assertEquals("tosca.relationships.HostedOn", edge.getType());\r
- Assert.assertEquals("vserver", edge.getSource().getType());\r
- Assert.assertEquals("50bdab41-ad1c-4d00-952c-a0aa5d827811", edge.getSource().getId().get());\r
- Assert.assertEquals("pserver", edge.getTarget().getType());\r
- Assert.assertEquals("1d326bc7-b985-492b-9604-0d5d1f06f908", edge.getTarget().getId().get());\r
- }\r
-\r
- @Test\r
- public void tesGetBuilderFromEdge() throws CrudException {\r
- Edge edge = createEdge("vserver", "pserver");\r
-\r
- Assert.assertNotNull(edge);\r
- Assert.assertNotNull(EdgePayloadUtil.getBuilderFromEdge(edge));\r
- }\r
-\r
- @Test\r
- public void testFilterEdgesByRelatedVertexAndType() throws CrudException {\r
- List<Edge> edges = new ArrayList<>();\r
- edges.add(createEdge("vserver", "pserver"));\r
- edges.add(createEdge("vce", "pserver"));\r
- edges.add(createEdge("snapshot", "pserver"));\r
- edges.add(createEdge("vserver", "pserver"));\r
-\r
- List<Edge> filteredEdges =\r
- EdgePayloadUtil.filterEdgesByRelatedVertexAndType("vserver", "tosca.relationships.HostedOn", edges);\r
-\r
- Assert.assertNotNull(filteredEdges);\r
- Assert.assertEquals(2, filteredEdges.size());\r
- }\r
-\r
- private Edge createEdge(String sourceVertexType, String targetVertexType) {\r
- return new Edge.Builder("tosca.relationships.HostedOn").id("test")\r
- .source(new Vertex.Builder(sourceVertexType).id("50bdab41-ad1c-4d00-952c-a0aa5d827811").build())\r
- .target(new Vertex.Builder(targetVertexType).id("1d326bc7-b985-492b-9604-0d5d1f06f908").build())\r
- .build();\r
- }\r
-}\r
import javax.ws.rs.core.Response.Status;
import org.junit.Test;
import org.onap.crud.exception.CrudException;
-import org.onap.crud.parser.BulkPayload;
+
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
Assert.assertEquals(response.getEntityTag().getValue(), "test123");
}
- @Test
- public void testAddEdgeMultiplicityRules() throws CrudException {
- Response response;
-
- response = mockService.addEdge(postEdgePayload, "v10", "services/inventory/v10",
- new TestHeaders(), null, new TestRequest());
- Assert.assertEquals("MANY2ONE multiplicity rule broken for Edge:vserver:pserver:tosca.relationships.HostedOn",
- response.getEntity().toString());
- Assert.assertEquals(400, response.getStatus());
-
- response = mockService.addEdge(postEdgePayload, "v9", "tosca.relationships.HostedOn", "services/inventory/v9",
- new TestHeaders(), null, new TestRequest());
- Assert.assertEquals(201, response.getStatus());
-
- response = mockService.addEdge(postEdgePayload, "v8", "tosca.relationships.HostedOn", "services/inventory/v8",
- new TestHeaders(), null, new TestRequest());
- Assert.assertEquals("ONE2MANY multiplicity rule broken for Edge:vserver:pserver:tosca.relationships.HostedOn",
- response.getEntity().toString());
- Assert.assertEquals(400, response.getStatus());
- }
-
@Test
public void testUpdateVertex() throws CrudException {
Response response;
import javax.ws.rs.core.Response.Status;
import org.junit.Test;
import org.onap.crud.exception.CrudException;
-import org.onap.crud.parser.VertexPayload;
public class VertexPayloadTest {
import org.junit.Assert;
import org.junit.Test;
-import org.onap.crud.parser.VertexPayload;
+import org.onap.crud.service.VertexPayload;
import org.onap.crud.service.util.TestHeaders;
import com.google.gson.JsonElement;
import org.junit.Test;
import org.onap.crud.exception.CrudException;
-import org.onap.crud.parser.EdgePayload;
+import org.onap.crud.service.EdgePayload;
import org.onap.crud.util.CrudServiceUtil;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;
import org.junit.Test;
import org.onap.crud.entity.Edge;
import org.onap.crud.exception.CrudException;
-import org.onap.crud.parser.EdgePayload;
-import org.onap.schema.validation.RelationshipSchemaValidator;
-
+import org.onap.crud.service.EdgePayload;
import org.junit.runner.RunWith;
import org.mockito.junit.MockitoJUnitRunner;
import org.onap.crud.OXMModelLoaderSetup;
RelationshipSchemaValidator.validateIncomingUpdatePayload(edge, version, payload);
} catch (CrudException e) {
assertEquals(400, e.getHttpStatus().getStatusCode());
- assertThat(e.getMessage(), is("Invalid Source/Target Urls"));
+ assertThat(e.getMessage(), is("Invalid Source Urls"));
}
}
RelationshipSchemaValidator.validateIncomingUpdatePayload(edge, version, payload);
} catch (CrudException e) {
assertEquals(400, e.getHttpStatus().getStatusCode());
- assertThat(e.getMessage(), is("Invalid Source/Target Urls"));
+ assertThat(e.getMessage(), is("Invalid Target Urls"));
}
}
RelationshipSchemaValidator.validateIncomingPatchPayload(edge, version, payload);
} catch (CrudException e) {
assertEquals(400, e.getHttpStatus().getStatusCode());
- assertThat(e.getMessage(), is("Invalid Source/Target Urls"));
+ assertThat(e.getMessage(), is("Invalid Source Urls"));
}
}
RelationshipSchemaValidator.validateIncomingPatchPayload(edge, version, payload);
} catch (CrudException e) {
assertEquals(400, e.getHttpStatus().getStatusCode());
- assertThat(e.getMessage(), is("Invalid Source/Target Urls"));
+ assertThat(e.getMessage(), is("Invalid Target Urls"));
}
}
+++ /dev/null
-/**\r
- * ============LICENSE_START=======================================================\r
- * org.onap.aai\r
- * ================================================================================\r
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.\r
- * Copyright © 2017-2018 Amdocs\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ============LICENSE_END=========================================================\r
- */\r
-package org.onap.schema.validation;\r
-\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-import org.junit.Assert;\r
-import org.junit.Before;\r
-import org.junit.Rule;\r
-import org.junit.Test;\r
-import org.junit.rules.ExpectedException;\r
-import org.onap.crud.entity.Edge;\r
-import org.onap.crud.entity.Vertex;\r
-import org.onap.crud.exception.CrudException;\r
-import org.onap.crud.parser.EdgePayload;\r
-import org.onap.schema.EdgeRulesLoader;\r
-import org.onap.schema.validation.MultiplicityValidator.MultiplicityType;\r
-\r
-import org.junit.runner.RunWith;\r
-import org.mockito.junit.MockitoJUnitRunner;\r
-import org.onap.crud.OXMModelLoaderSetup;\r
-\r
-@RunWith(MockitoJUnitRunner.Silent.class)\r
-public class MultiplicityValidatorTest extends OXMModelLoaderSetup{\r
-\r
- private final String postEdgePayload = "{" + "\"type\": \"tosca.relationships.HostedOn\","\r
- + "\"source\": \"services/inventory/v12/vserver/50bdab41-ad1c-4d00-952c-a0aa5d827811\","\r
- + "\"target\": \"services/inventory/v12/pserver/1d326bc7-b985-492b-9604-0d5d1f06f908\","\r
- + "\"properties\": {" + "\"prevent-delete\": \"NONE\" } }";\r
-\r
- @Rule\r
- public ExpectedException thrown = ExpectedException.none();\r
-\r
- @Before\r
- public void init() {\r
- System.setProperty("CONFIG_HOME", "src/test/resources");\r
- EdgeRulesLoader.resetSchemaVersionContext();\r
- }\r
-\r
- @Test\r
- public void testValidPayloadForMultiplicityRule() throws CrudException {\r
- Map<String, List<Edge>> vertexMap = getEdgesForVertex(MultiplicityType.MANY2ONE, true);\r
- MultiplicityValidator.validatePayloadMultiplicity(EdgePayload.fromJson(postEdgePayload),\r
- vertexMap.get("source"), vertexMap.get("target"),\r
- "tosca.relationships.HostedOn", "v11");\r
- }\r
-\r
- @Test\r
- public void testInvalidPayloadForMultiplicityRule() throws CrudException {\r
- thrown.expect(CrudException.class);\r
- thrown.expectMessage("MANY2ONE multiplicity rule broken for Edge:vserver:pserver:tosca.relationships.HostedOn");\r
-\r
- Map<String, List<Edge>> vertexMap = getEdgesForVertex(MultiplicityType.MANY2ONE, false);\r
- MultiplicityValidator.validatePayloadMultiplicity(EdgePayload.fromJson(postEdgePayload),\r
- vertexMap.get("source"), vertexMap.get("target"),\r
- "tosca.relationships.HostedOn", "v11");\r
- }\r
-\r
- @Test\r
- public void testIsVertexValidForMultiplicityType() throws CrudException {\r
-\r
- Map<String, List<Edge>> vertexMap = getEdgesForVertex(MultiplicityType.MANY2MANY, true);\r
- Assert.assertTrue(MultiplicityValidator.isVertexValidForMultiplicityType(vertexMap.get("source"),\r
- vertexMap.get("target"), MultiplicityType.MANY2MANY));\r
-\r
- vertexMap = getEdgesForVertex(MultiplicityType.MANY2ONE, true);\r
- Assert.assertTrue(MultiplicityValidator.isVertexValidForMultiplicityType(\r
- vertexMap.get("source"), vertexMap.get("target"), MultiplicityType.MANY2ONE));\r
-\r
- vertexMap = getEdgesForVertex(MultiplicityType.ONE2MANY, true);\r
- Assert.assertTrue(MultiplicityValidator.isVertexValidForMultiplicityType(\r
- vertexMap.get("source"), vertexMap.get("target"), MultiplicityType.ONE2MANY));\r
-\r
- vertexMap = getEdgesForVertex(MultiplicityType.ONE2ONE, true);\r
- Assert.assertTrue(MultiplicityValidator.isVertexValidForMultiplicityType(\r
- vertexMap.get("source"), vertexMap.get("target"), MultiplicityType.ONE2ONE));\r
-\r
- vertexMap = getEdgesForVertex(MultiplicityType.ONE2MANY, false);\r
- Assert.assertFalse(MultiplicityValidator.isVertexValidForMultiplicityType(\r
- vertexMap.get("source"), vertexMap.get("target"), MultiplicityType.ONE2MANY));\r
-\r
- vertexMap = getEdgesForVertex(MultiplicityType.ONE2ONE, false);\r
- Assert.assertFalse(MultiplicityValidator.isVertexValidForMultiplicityType(\r
- vertexMap.get("source"), vertexMap.get("target"), MultiplicityType.ONE2ONE));\r
- }\r
-\r
- private Map<String, List<Edge>> getEdgesForVertex(MultiplicityType multiplicityType, boolean pass) {\r
-\r
- Map<String, List<Edge>> vertexMap = new HashMap<String, List<Edge>>();\r
- List<Edge> edgesForSourceVertex = new ArrayList<>();\r
- List<Edge> edgesForTargetVertex = new ArrayList<>();\r
-\r
- switch (multiplicityType) {\r
- case MANY2MANY:\r
- if (pass) {\r
- Edge edge = new Edge.Builder("type").source(new Vertex.Builder("source").build())\r
- .target(new Vertex.Builder("target").build()).build();\r
- edgesForSourceVertex.add(edge);\r
- edgesForTargetVertex.add(edge);\r
- }\r
- break;\r
- case MANY2ONE:\r
- if (pass) {\r
- Edge edge = new Edge.Builder("type").source(new Vertex.Builder("source").build())\r
- .target(new Vertex.Builder("target").build()).build();\r
- edgesForTargetVertex.add(edge);\r
- } else {\r
- Edge edge = new Edge.Builder("type").source(new Vertex.Builder("source").build())\r
- .target(new Vertex.Builder("target").build()).build();\r
- edgesForSourceVertex.add(edge);\r
- edgesForTargetVertex.add(edge);\r
- }\r
- break;\r
- case ONE2MANY:\r
- if (pass) {\r
- Edge edge = new Edge.Builder("type").source(new Vertex.Builder("source").build())\r
- .target(new Vertex.Builder("target").build()).build();\r
- edgesForSourceVertex.add(edge);\r
- } else {\r
- Edge edge = new Edge.Builder("type").source(new Vertex.Builder("source").build())\r
- .target(new Vertex.Builder("target").build()).build();\r
- edgesForSourceVertex.add(edge);\r
- edgesForTargetVertex.add(edge);\r
- }\r
- break;\r
- case ONE2ONE:\r
- if (!pass) {\r
- Edge edge = new Edge.Builder("type").source(new Vertex.Builder("source").build())\r
- .target(new Vertex.Builder("target").build()).build();\r
- edgesForSourceVertex.add(edge);\r
- edgesForTargetVertex.add(edge);\r
- }\r
- break;\r
- }\r
- vertexMap.put("source", edgesForSourceVertex);\r
- vertexMap.put("target", edgesForTargetVertex);\r
-\r
- return vertexMap;\r
- }\r
-\r
-}\r