[AAI-169 Amsterdam] Add ability for older versions 07/7607/1
authorVenkata Harish K Kajur <vk250x@att.com>
Tue, 15 Aug 2017 13:58:15 +0000 (09:58 -0400)
committerVenkata Harish K Kajur <vk250x@att.com>
Tue, 15 Aug 2017 13:59:55 +0000 (09:59 -0400)
Change-Id: Ica6c4962e9cc7d98634606c010c3555e5a0a2f67
Signed-off-by: Venkata Harish K Kajur <vk250x@att.com>
aai-core/src/main/java/org/openecomp/aai/serialization/db/EdgeRules.java
aai-core/src/test/java/org/openecomp/aai/serialization/db/EdgeRulesTest.java

index 7f925a1..454aa1e 100644 (file)
 
 package org.openecomp.aai.serialization.db;
 
-import java.io.File;
-import java.io.IOException;
+import static com.jayway.jsonpath.Criteria.where;
+import static com.jayway.jsonpath.Filter.filter;
+
 import java.io.InputStream;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Scanner;
+import java.util.concurrent.ConcurrentHashMap;
 
-import org.apache.commons.lang.exception.ExceptionUtils;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
-
 import org.openecomp.aai.db.props.AAIProperties;
 import org.openecomp.aai.dbmodel.DbEdgeRules;
 import org.openecomp.aai.exceptions.AAIException;
@@ -47,15 +50,9 @@ import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Multimap;
-import com.jayway.jsonpath.JsonPath;
-
-import static com.jayway.jsonpath.Filter.filter;
-import static com.jayway.jsonpath.Criteria.where;
-
 import com.jayway.jsonpath.DocumentContext;
 import com.jayway.jsonpath.Filter;
-
-import java.util.Scanner;
+import com.jayway.jsonpath.JsonPath;
 
 public class EdgeRules {
        
@@ -72,16 +69,51 @@ public class EdgeRules {
         */
        private EdgeRules() {
 
-               InputStream is = getClass().getResourceAsStream("/dbedgerules/DbEdgeRules_" + Version.getLatest().toString() + ".json");
+               String json = this.getEdgeRuleJson(Version.getLatest());
+               rulesDoc = JsonPath.parse(json);
+               
+       }
+       
+       /**
+        * Loads the versioned DbEdgeRules json file for later parsing.
+        */
+       @SuppressWarnings("unchecked")
+       private EdgeRules(Version version) {
+               
+               String json = this.getEdgeRuleJson(version);
+               rulesDoc = JsonPath.parse(json);
+               
+               if (!Version.isLatest(version)) {
+                       try {
+                               Class<?> dbEdgeRules = Class.forName("org.openecomp.aai.dbmodel." + version.toString() + ".gen.DbEdgeRules");
+                               this.deleteScope = (Multimap<String, String>)dbEdgeRules.getDeclaredField("DefaultDeleteScope").get(null);      
+                       } catch (Exception e) {
+                       }
+               }
+       }
+       
+       private String getEdgeRuleJson(Version version) {
+               InputStream is = getClass().getResourceAsStream("/dbedgerules/DbEdgeRules_" + version.toString() + ".json");
 
                Scanner scanner = new Scanner(is);
                String json = scanner.useDelimiter("\\Z").next();
                scanner.close();
-               rulesDoc = JsonPath.parse(json);
+               
+               return json;
        }
        
        private static class Helper {
                private static final EdgeRules INSTANCE = new EdgeRules();
+               private static final Map<Version, EdgeRules> INSTANCEMAP = new ConcurrentHashMap<>();
+               private static EdgeRules getVersionedEdgeRules(Version v) {
+                       if (Version.isLatest(v)) {
+                               return INSTANCE;
+                       }
+                       if (!INSTANCEMAP.containsKey(v)) {
+                               INSTANCEMAP.put(v, new EdgeRules(v));
+                       }
+                       return INSTANCEMAP.get(v);
+               }
        }
        
        /**
@@ -94,6 +126,16 @@ public class EdgeRules {
 
        }
        
+       /**
+        * Gets the versioned instance of EdgeRules.
+        *
+        * @return versioned instance of EdgeRules
+        */
+       public static EdgeRules getInstance(Version v) {
+               return Helper.getVersionedEdgeRules(v);
+
+       }
+       
        /**
         * Adds the tree edge.
         *
@@ -464,4 +506,8 @@ public class EdgeRules {
                return result;
        }
        
+       public Multimap<String, String> getDeleteSemantics() {
+               return this.deleteScope;
+       }
+       
 }
index 287761e..87f52eb 100644 (file)
@@ -28,8 +28,8 @@ import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
-
 import org.openecomp.aai.exceptions.AAIException;
+import org.openecomp.aai.introspection.Version;
 import org.openecomp.aai.serialization.db.exceptions.NoEdgeRuleFoundException;
 
 @Ignore
@@ -87,4 +87,17 @@ public class EdgeRulesTest {
                Map<String, EdgeRule> ruleMap = rules.getEdgeRules("availability-zone", "complex");
                assertEquals("has groupsResourcesIn rule", "groupsResourcesIn", ruleMap.get("groupsResourcesIn").getLabel());
        }
+       
+       @Test
+       public void verifyOldEdgeRule() throws AAIException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
+               assertEquals(true, EdgeRules.getInstance().hasEdgeRule("model-element", "model-ver"));
+               assertEquals(true, EdgeRules.getInstance(Version.v8).hasEdgeRule("pserver", "complex"));
+               assertEquals(false, EdgeRules.getInstance(Version.v8).hasEdgeRule("model-element", "model-ver"));
+       }
+       
+       @Test
+       public void verifyOldEdgeDeleteSemantics() throws AAIException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
+               assertEquals(DeleteSemantic.ERROR_4_IN_EDGES_OR_CASCADE, EdgeRules.getInstance().getDeleteSemantic("model"));
+               assertEquals(DeleteSemantic.CASCADE_TO_CHILDREN, EdgeRules.getInstance(Version.v8).getDeleteSemantic("model"));
+       }
 }