summaryrefslogtreecommitdiffstats
path: root/aai-schema-ingest/src/main/java/org/onap/aai/edges/EdgeRule.java
diff options
context:
space:
mode:
Diffstat (limited to 'aai-schema-ingest/src/main/java/org/onap/aai/edges/EdgeRule.java')
-rw-r--r--aai-schema-ingest/src/main/java/org/onap/aai/edges/EdgeRule.java191
1 files changed, 191 insertions, 0 deletions
diff --git a/aai-schema-ingest/src/main/java/org/onap/aai/edges/EdgeRule.java b/aai-schema-ingest/src/main/java/org/onap/aai/edges/EdgeRule.java
new file mode 100644
index 00000000..f859aae6
--- /dev/null
+++ b/aai-schema-ingest/src/main/java/org/onap/aai/edges/EdgeRule.java
@@ -0,0 +1,191 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.aai.edges;
+
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.onap.aai.edges.enums.AAIDirection;
+import org.onap.aai.edges.enums.DirectionNotation;
+import org.onap.aai.edges.enums.EdgeField;
+import org.onap.aai.edges.enums.EdgeProperty;
+import org.onap.aai.edges.enums.MultiplicityRule;
+
+import java.util.EnumMap;
+import java.util.Map;
+
+/**
+ * Container for A&AI edge rule information
+ */
+public class EdgeRule {
+ private String from;
+ private String to;
+ private String label;
+ private Direction direction;
+ private MultiplicityRule multiplicityRule;
+ private Map<EdgeProperty, AAIDirection> edgeFields;
+ private boolean isDefaultEdge;
+ private String description;
+
+ /**
+ * Instantiates a new edge rule.
+ *
+ * @param fieldVals - Map<String, String> where first string is
+ * an EdgeField value and second string is the
+ * value of that field
+ */
+ public EdgeRule(Map<String, String> fieldVals) {
+ edgeFields = new EnumMap<>(EdgeProperty.class);
+
+ from = fieldVals.get(EdgeField.FROM.toString());
+ to = fieldVals.get(EdgeField.TO.toString());
+ label = fieldVals.get(EdgeField.LABEL.toString());
+ direction = Direction.valueOf(fieldVals.get(EdgeField.DIRECTION.toString()));
+ multiplicityRule = MultiplicityRule.getValue(fieldVals.get(EdgeField.MULTIPLICITY.toString()));
+
+ for (EdgeProperty prop : EdgeProperty.values()) {
+ String rawVal = fieldVals.get(prop.toString());
+ edgeFields.put(prop, convertNotation(direction, rawVal));
+ }
+
+ isDefaultEdge = Boolean.valueOf(fieldVals.get(EdgeField.DEFAULT.toString()));
+
+ description = fieldVals.get(EdgeField.DESCRIPTION.toString());
+ if (description == null) { //bc description is optional and not in v12 and earlier
+ description = "";
+ }
+ }
+
+ /**
+ * Converts whatever string was in the json for an edge property value into
+ * the appropriate AAIDirection
+ *
+ * @param Direction dir - the edge direction
+ * @param String rawVal - property value from the json, may be
+ * IN, OUT, BOTH, NONE, ${direction}, or !${direction}
+ * @return AAIDirection - IN/OUT/BOTH/NONE if that's the rawVal, or
+ * translates the direction notation into the correct IN/OUT
+ */
+ private AAIDirection convertNotation(Direction dir, String rawVal) {
+ if (AAIDirection.NONE.toString().equals(rawVal)) {
+ return AAIDirection.NONE;
+ } else if (AAIDirection.BOTH.toString().equals(rawVal)) {
+ return AAIDirection.BOTH;
+ } else if (AAIDirection.OUT.toString().equals(rawVal)) {
+ return AAIDirection.OUT;
+ } else if (AAIDirection.IN.toString().equals(rawVal)) {
+ return AAIDirection.IN;
+ }
+
+ DirectionNotation rawDN = DirectionNotation.getValue(rawVal);
+ if (DirectionNotation.DIRECTION.equals(rawDN)) {
+ return AAIDirection.getValue(dir);
+ } else {
+ return AAIDirection.getValue(dir.opposite());
+ }
+ }
+
+ /**
+ * Gets the name of the node type in the "from" field
+ * @return String nodetype
+ */
+ public String getFrom() {
+ return from;
+ }
+
+ /**
+ * Gets the name of the node type in the "to" field
+ * @return String nodetype
+ */
+ public String getTo() {
+ return to;
+ }
+
+ /**
+ * Gets the edge label
+ *
+ * @return String label
+ */
+ public String getLabel() {
+ return label;
+ }
+
+ /**
+ * Gets the multiplicity rule.
+ *
+ * @return MultiplicityRule
+ */
+ public MultiplicityRule getMultiplicityRule() {
+ return multiplicityRule;
+ }
+
+ /**
+ * Gets the edge direction
+ *
+ * @return Direction
+ */
+ public Direction getDirection() {
+ return direction;
+ }
+
+ /**
+ * Gets the value of contains-other-v
+ *
+ * @return the value of contains-other-v
+ */
+ public String getContains() {
+ return edgeFields.get(EdgeProperty.CONTAINS).toString();
+ }
+
+ /**
+ * Gets the value of delete-other-v
+ *
+ * @return the value of delete-other-v
+ */
+ public String getDeleteOtherV() {
+ return edgeFields.get(EdgeProperty.DELETE_OTHER_V).toString();
+ }
+
+ /**
+ * Gets the value of the prevent-delete property
+ *
+ * @return String prevent-delete property value
+ */
+ public String getPreventDelete() {
+ return edgeFields.get(EdgeProperty.PREVENT_DELETE).toString();
+ }
+
+ /**
+ * Returns if this rule is a default or not
+ *
+ * @return boolean
+ */
+ public boolean isDefault() {
+ return isDefaultEdge;
+ }
+
+ /**
+ * Gets the description on the edge rule (if there is one)
+ * @return String description
+ */
+ public String getDescription() {
+ return this.description;
+ }
+}