Improve the performance of resoures microservice
[aai/aai-common.git] / aai-schema-ingest / src / main / java / org / onap / aai / edges / EdgeRule.java
index bac217d..f914f6c 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * org.onap.aai
  * ================================================================================
- * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright © 2017-18 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.
@@ -26,7 +26,9 @@ import org.onap.aai.edges.enums.EdgeField;
 import org.onap.aai.edges.enums.EdgeProperty;
 import org.onap.aai.edges.enums.MultiplicityRule;
 
+import java.util.Collections;
 import java.util.EnumMap;
+import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -41,40 +43,54 @@ public class EdgeRule {
        private Map<EdgeProperty, AAIDirection> edgeFields;
        private boolean isDefaultEdge;
        private String description;
+       private boolean isPrivateEdge = false;
 
-       /**
+    /**
         * Instantiates a new edge rule.
-        * 
+        *
         * @param fieldVals - Map<String, String> where first string is
-        *                                      an EdgeField value and second string is the 
+        *                                      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()));
-               
+               isPrivateEdge = Boolean.valueOf(fieldVals.getOrDefault(EdgeField.PRIVATE.toString(), "false"));
                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 = "";
                }
        }
 
+       // Copy Constructor
+       public EdgeRule(EdgeRule edgeRule){
+           this.from = edgeRule.from;
+           this.to   = edgeRule.to;
+           this.label = edgeRule.label;
+           this.direction = Direction.valueOf(edgeRule.direction.toString());
+           this.multiplicityRule = MultiplicityRule.valueOf(edgeRule.multiplicityRule.toString());
+        this.edgeFields = new HashMap<>(edgeRule.edgeFields);
+           this.isDefaultEdge    = edgeRule.isDefaultEdge;
+           this.description = edgeRule.description;
+           this.isPrivateEdge = edgeRule.isPrivateEdge;
+    }
+
        /**
         * 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}
@@ -82,16 +98,16 @@ public class EdgeRule {
         *                      translates the direction notation into the correct IN/OUT
         */
        private AAIDirection convertNotation(Direction dir, String rawVal) {
-               if (AAIDirection.NONE.toString().equals(rawVal)) {
+               if (AAIDirection.NONE.toString().equalsIgnoreCase(rawVal)) {
                        return AAIDirection.NONE;
-               } else if (AAIDirection.BOTH.toString().equals(rawVal)) {
+               } else if (AAIDirection.BOTH.toString().equalsIgnoreCase(rawVal)) {
                        return AAIDirection.BOTH;
-               } else if (AAIDirection.OUT.toString().equals(rawVal)) {
+               } else if (AAIDirection.OUT.toString().equalsIgnoreCase(rawVal)) {
                        return AAIDirection.OUT;
-               } else if (AAIDirection.IN.toString().equals(rawVal)) {
+               } else if (AAIDirection.IN.toString().equalsIgnoreCase(rawVal)) {
                        return AAIDirection.IN;
                }
-               
+
                DirectionNotation rawDN = DirectionNotation.getValue(rawVal);
                if (DirectionNotation.DIRECTION.equals(rawDN)) {
                        return AAIDirection.getValue(dir);
@@ -99,7 +115,7 @@ public class EdgeRule {
                        return AAIDirection.getValue(dir.opposite());
                }
        }
-       
+
        /**
         * Gets the name of the node type in the "from" field
         * @return String nodetype
@@ -124,7 +140,7 @@ public class EdgeRule {
        public String getLabel() {
                return label;
        }
-       
+
        /**
         * Gets the multiplicity rule.
         *
@@ -133,7 +149,7 @@ public class EdgeRule {
        public MultiplicityRule getMultiplicityRule() {
                return multiplicityRule;
        }
-       
+
        /**
         * Gets the edge direction
         *
@@ -142,7 +158,7 @@ public class EdgeRule {
        public Direction getDirection() {
                return direction;
        }
-       
+
        /**
         * Gets the value of contains-other-v
         *
@@ -151,7 +167,7 @@ public class EdgeRule {
        public String getContains() {
                return edgeFields.get(EdgeProperty.CONTAINS).toString();
        }
-       
+
        /**
         * Gets the value of delete-other-v
         *
@@ -160,10 +176,10 @@ public class EdgeRule {
        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() {
@@ -172,13 +188,13 @@ public class EdgeRule {
 
        /**
         * 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
@@ -186,4 +202,31 @@ public class EdgeRule {
        public String getDescription() {
                return this.description;
        }
+
+       /**
+        * Flips the direction value
+        * IN -> OUT
+        * OUT -> IN
+        * BOTH -> BOTH
+        */
+       public void flipDirection() {
+               if (Direction.OUT.equals(direction)) {
+                       direction = Direction.IN;
+               } else if (Direction.IN.equals(direction)) {
+                       direction = Direction.OUT;
+               }
+               //else BOTH just stays the same
+       }
+
+       public boolean isPrivateEdge() {
+               return isPrivateEdge;
+       }
+
+       public void setPrivateEdge(boolean privateEdge) {
+               isPrivateEdge = privateEdge;
+       }
+
+       public void setPrivateEdge(String isPrivateEdge){
+               this.isPrivateEdge = "true".equals(isPrivateEdge);
+       }
 }