summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/onap/schema/RelationshipSchema.java
diff options
context:
space:
mode:
authormichaere <michaere@amdocs.com>2018-06-27 09:51:34 +0100
committermichaere <michaere@amdocs.com>2018-06-27 09:51:34 +0100
commitd10a218c76633374f083f7a2802c198e93a6abae (patch)
tree7c68c359600270f4f6eb1290bd34093c386d5d23 /src/main/java/org/onap/schema/RelationshipSchema.java
parent68cd3355674d66f8feee3d067960c081581a3911 (diff)
Apply multiplicity Rule upon Edge creation
Uses multiplicity type from dbedge rules json to validate whether to and from vertices meet the multiplicity constraint e.g. ONE2MANY. This validation is applied when creating or updating an edge. Issue-ID: AAI-1197 Change-Id: Id6e78635c5cbea66d8a35e6901b7e1b673125e4e Signed-off-by: michaere <michaere@amdocs.com>
Diffstat (limited to 'src/main/java/org/onap/schema/RelationshipSchema.java')
-rw-r--r--src/main/java/org/onap/schema/RelationshipSchema.java55
1 files changed, 44 insertions, 11 deletions
diff --git a/src/main/java/org/onap/schema/RelationshipSchema.java b/src/main/java/org/onap/schema/RelationshipSchema.java
index fc91662..2aab7a9 100644
--- a/src/main/java/org/onap/schema/RelationshipSchema.java
+++ b/src/main/java/org/onap/schema/RelationshipSchema.java
@@ -20,21 +20,25 @@
*/
package org.onap.schema;
-import com.google.common.collect.Multimap;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.onap.aai.edges.EdgeRule;
-import org.onap.crud.exception.CrudException;
import java.io.IOException;
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
import java.util.stream.Collectors;
import javax.ws.rs.core.Response.Status;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.onap.aai.edges.EdgeRule;
+import org.onap.crud.exception.CrudException;
+import com.google.common.collect.Multimap;
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<>();
/**
@@ -42,8 +46,18 @@ public class RelationshipSchema {
*/
private Map<String, Map<String, Class<?>>> relationTypes = new HashMap<>();
- public RelationshipSchema( Multimap<String, EdgeRule> rules, String props) throws CrudException, IOException {
+ private Map<String, EdgeRule> relationshipRules = new HashMap<>();
+
+ @SuppressWarnings("unchecked")
+ public RelationshipSchema(Multimap<String, EdgeRule> rules, String props) throws CrudException, IOException {
HashMap<String, String> properties = new ObjectMapper().readValue(props, HashMap.class);
+
+ // 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);
+ }
+
Map<String, Class<?>> edgeProps = properties.entrySet().stream().collect(Collectors.toMap(p -> p.getKey(), p -> {
try {
return resolveClass(p.getValue());
@@ -63,6 +77,27 @@ public class RelationshipSchema {
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);
}
@@ -72,7 +107,7 @@ public class RelationshipSchema {
}
- private String buildRelation(String source, String target, String relation){
+ private String buildRelation(String source, String target, String relation) {
return source + ":" + target + ":" + relation;
}
@@ -88,6 +123,4 @@ public class RelationshipSchema {
throw new CrudException("", Status.BAD_REQUEST);
}
}
-}
-
-
+} \ No newline at end of file