[AAI-ONAP] Get the latest code and sync to onap 87/4787/1
authorVenkata Harish K Kajur <vk250x@att.com>
Wed, 7 Jun 2017 19:34:50 +0000 (15:34 -0400)
committerVenkata Harish K Kajur <vk250x@att.com>
Wed, 7 Jun 2017 19:45:09 +0000 (15:45 -0400)
Change-Id: Ifd6e05a807b1bc5246cd2442cb54495b84100e83
Signed-off-by: Venkata Harish K Kajur <vk250x@att.com>
29 files changed:
aai-annotations/src/main/java/org/openecomp/aai/annotations/Metadata.java
aai-annotations/src/test/java/org/openecomp/aai/annotations/AnnotationsTest.java [changed mode: 0755->0644]
aai-core/src/main/java/org/openecomp/aai/auth/exceptions/AAIUnrecognizedFunctionException.java [new file with mode: 0644]
aai-core/src/main/java/org/openecomp/aai/db/props/AAIProperties.java
aai-core/src/main/java/org/openecomp/aai/dbgen/DataGrooming.java
aai-core/src/main/java/org/openecomp/aai/dbgen/DbMeth.java [deleted file]
aai-core/src/main/java/org/openecomp/aai/domain/model/AAIResource.java [deleted file]
aai-core/src/main/java/org/openecomp/aai/domain/model/AAIResourceKey.java [deleted file]
aai-core/src/main/java/org/openecomp/aai/domain/model/AAIResources.java [deleted file]
aai-core/src/main/java/org/openecomp/aai/ingestModel/ConvertXmlToJsonMoxyOxm.java [deleted file]
aai-core/src/main/java/org/openecomp/aai/ingestModel/CreateWidgetModels.java
aai-core/src/main/java/org/openecomp/aai/ingestModel/DbMaps.java [deleted file]
aai-core/src/main/java/org/openecomp/aai/ingestModel/IngestModelListener.java [deleted file]
aai-core/src/main/java/org/openecomp/aai/ingestModel/IngestModelMoxyOxm.java [deleted file]
aai-core/src/main/java/org/openecomp/aai/introspection/Introspector.java
aai-core/src/main/java/org/openecomp/aai/introspection/MoxyLoader.java
aai-core/src/main/java/org/openecomp/aai/introspection/PojoLoader.java
aai-core/src/main/java/org/openecomp/aai/logging/ErrorLogHelper.java
aai-core/src/main/java/org/openecomp/aai/logging/ErrorObject.java
aai-core/src/main/java/org/openecomp/aai/logging/LoggingContext.java
aai-core/src/main/java/org/openecomp/aai/parsers/exceptions/DoesNotStartWithValidNamespaceException.java [moved from aai-core/src/main/java/org/openecomp/aai/domain/model/AAIResourceKeys.java with 64% similarity]
aai-core/src/main/java/org/openecomp/aai/parsers/relationship/RelationshipToURI.java
aai-core/src/main/java/org/openecomp/aai/parsers/uri/URIParser.java
aai-core/src/main/java/org/openecomp/aai/parsers/uri/URIToObject.java
aai-core/src/main/java/org/openecomp/aai/restcore/RESTAPI.java
aai-core/src/main/java/org/openecomp/aai/util/AAITxnLog.java
aai-core/src/main/java/org/openecomp/aai/util/FormatDate.java [moved from aai-core/src/main/java/org/openecomp/aai/util/AAIUtils.java with 59% similarity]
aai-core/src/main/java/org/openecomp/aai/util/PojoUtils.java
aai-core/src/test/resources/bundleconfig-local/etc/auth/aai_policy.json [new file with mode: 0644]

index d35ff80..03755c6 100644 (file)
@@ -5,16 +5,16 @@
  * Copyright (C) 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.
+ * 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=========================================================
  */
 
diff --git a/aai-core/src/main/java/org/openecomp/aai/auth/exceptions/AAIUnrecognizedFunctionException.java b/aai-core/src/main/java/org/openecomp/aai/auth/exceptions/AAIUnrecognizedFunctionException.java
new file mode 100644 (file)
index 0000000..b5ebcb9
--- /dev/null
@@ -0,0 +1,42 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * org.openecomp.aai
+ * ================================================================================
+ * Copyright (C) 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=========================================================
+ */
+
+package org.openecomp.aai.auth.exceptions;
+
+import org.openecomp.aai.exceptions.AAIException;
+
+public class AAIUnrecognizedFunctionException extends AAIException {
+
+       private static final long serialVersionUID = 3297064867724071290L;
+
+       public AAIUnrecognizedFunctionException() {}
+
+       public AAIUnrecognizedFunctionException(String message) {
+               super("AAI_3012", message);
+       }
+
+       public AAIUnrecognizedFunctionException(Throwable cause) {
+               super("AAI_3012",cause);
+       }
+
+       public AAIUnrecognizedFunctionException(String message, Throwable cause) {
+               super("AAI_3012", cause, message);
+       }
+}
index 3c452a8..2b335e1 100644 (file)
@@ -34,5 +34,6 @@ public class AAIProperties {
        public static final Version LATEST = Version.v10;
        public static final Integer MAXIMUM_DEPTH = 10000;
        public static final String LINKED = "linked";
+       public static final String DB_ALIAS_SUFFIX = "-local";
 
 }
index 18f43ba..d1480d1 100644 (file)
@@ -26,35 +26,37 @@ import java.io.File;
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Set;
-import java.util.TimeZone;
 import java.util.UUID;
 
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
-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.Property;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-
+import org.openecomp.aai.db.props.AAIProperties;
 import org.openecomp.aai.dbmap.AAIGraph;
 import org.openecomp.aai.exceptions.AAIException;
-import org.openecomp.aai.ingestModel.DbMaps;
-import org.openecomp.aai.ingestModel.IngestModelMoxyOxm;
+import org.openecomp.aai.introspection.Introspector;
+import org.openecomp.aai.introspection.Loader;
+import org.openecomp.aai.introspection.LoaderFactory;
+import org.openecomp.aai.introspection.ModelType;
+import org.openecomp.aai.introspection.exceptions.AAIUnknownObjectException;
 import org.openecomp.aai.logging.ErrorLogHelper;
 import org.openecomp.aai.util.AAIConfig;
 import org.openecomp.aai.util.AAIConstants;
+import org.openecomp.aai.util.FormatDate;
+
 import com.att.eelf.configuration.Configuration;
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
@@ -88,6 +90,7 @@ public class DataGrooming {
                Boolean doAutoFix = false;
                Boolean edgesOnlyFlag = false;
                Boolean dontFixOrphansFlag = false;
+               Boolean skipHostCheck = false;
                Boolean singleCommits = false;
                Boolean dupeCheckOff = false;
                Boolean dupeFixOn = false;
@@ -114,9 +117,8 @@ public class DataGrooming {
                
                String prevFileName = "";
                dupeGrpsDeleted = 0;
-               SimpleDateFormat d = new SimpleDateFormat("yyyyMMddHHmm");
-               d.setTimeZone(TimeZone.getTimeZone("GMT"));
-               String dteStr = d.format(new Date()).toString();
+               FormatDate fd = new FormatDate("yyyyMMddHHmm", "GMT");
+               String dteStr = fd.getDateTime();
                String groomOutFileName = "dataGrooming." + dteStr + ".out";
 
                if (args.length > 0) {
@@ -127,6 +129,8 @@ public class DataGrooming {
                                        edgesOnlyFlag = true;
                                } else if (thisArg.equals("-autoFix")) {
                                        doAutoFix = true;
+                               } else if (thisArg.equals("-skipHostCheck")) {
+                                       skipHostCheck = true;
                                } else if (thisArg.equals("-dontFixOrphans")) {
                                        dontFixOrphansFlag = true;
                                } else if (thisArg.equals("-singleCommits")) {
@@ -186,14 +190,12 @@ public class DataGrooming {
                }
                
 
-               IngestModelMoxyOxm moxyMod = new IngestModelMoxyOxm();
                try {
-                       ArrayList <String> defaultVerLst = new ArrayList <> ();
-                       defaultVerLst.add( AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP) );
-                       moxyMod.init( defaultVerLst, false);
+                       LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST);
+
                }
                catch (Exception ex){
-                       LOGGER.error("ERROR - Could not do the moxyMod.init()", ex);
+                       LOGGER.error("ERROR - Could not create loader", ex);
                        System.exit(1);
                }
 
@@ -239,9 +241,7 @@ public class DataGrooming {
                                                System.exit(0);
                                        }
 
-                                       d = new SimpleDateFormat("yyyyMMddHHmm");
-                                       d.setTimeZone(TimeZone.getTimeZone("GMT"));
-                                       dteStr = d.format(new Date()).toString();
+                                       dteStr = fd.getDateTime();
                                        String secondGroomOutFileName = "dataGrooming." + dteStr
                                                        + ".out";
                                        LOGGER.info(" Now, call doTheGrooming() a second time and pass in the name of the file "
@@ -342,9 +342,6 @@ public class DataGrooming {
                                deleteCandidateList = new LinkedHashSet<>();
                        }
 
-                       SimpleDateFormat d = new SimpleDateFormat("yyyyMMddHHmm");
-                       d.setTimeZone(TimeZone.getTimeZone("GMT"));
-
                        String fullOutputFileName = targetDir + AAIConstants.AAI_FILESEP
                                        + groomOutFileName;
                        File groomOutFile = new File(fullOutputFileName);
@@ -394,11 +391,10 @@ public class DataGrooming {
                        HashMap<String, String> emptyVertexHash = new HashMap<String, String>();
                        HashMap<String, TitanVertex> ghostNodeHash = new HashMap<String, TitanVertex>();
                        ArrayList<String> dupeGroups = new ArrayList<>();
-
-
-                       DbMaps dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
                        
-                       Iterator<String> nodeMapKPropsIterator = dbMaps.NodeKeyProps.keySet().iterator();
+                       Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST);
+
+                       Set<Entry<String, Introspector>> entrySet = loader.getAllObjects().entrySet();
                        String ntList = "";
 
                        LOGGER.info("  Starting DataGrooming Processing ");
@@ -407,8 +403,8 @@ public class DataGrooming {
                                LOGGER.info(" NOTE >> Skipping Node processing as requested.  Will only process Edges. << ");
                        } 
                        else {
-                               while (nodeMapKPropsIterator.hasNext()) {
-                                       String nType = nodeMapKPropsIterator.next();
+                               for (Entry<String, Introspector> entry : entrySet) {
+                                       String nType = entry.getKey();
                                        int thisNtCount = 0;
                                        int thisNtDeleteCount = 0;
                                        LOGGER.debug(" >  Look at : [" + nType + "] ...");
@@ -416,19 +412,10 @@ public class DataGrooming {
 
                                        // Get a collection of the names of the key properties for this nodeType to use later
                                        // Determine what the key fields are for this nodeType
-                                       Collection <String> keyProps = new ArrayList <>();
-                                       if( dbMaps.NodeKeyProps.containsKey(nType) ){
-                                               keyProps = dbMaps.NodeKeyProps.get(nType);
-                                       }
-                                       else {
-                                               throw new AAIException("AAI_6105", "Required Property name(s) not found for nodeType = " + nType + ")"); 
-                                       }
+                                       Collection <String> keyProps = entry.getValue().getKeys();
                                        
                                        // Get the types of nodes that this nodetype depends on for uniqueness (if any)
-                                       Collection <String> depNodeTypes = new ArrayList <>();
-                                       if( dbMaps.NodeDependencies.containsKey(nType) ){
-                                               depNodeTypes = dbMaps.NodeDependencies.get(nType);
-                                       }
+                                       Collection <String> depNodeTypes = loader.introspectorFromName(nType).getDependentOn();
                                        
                                        // Loop through all the nodes of this Node type
                                        int lastShownForNt = 0;
@@ -595,7 +582,7 @@ public class DataGrooming {
                                                                        List<String> tmpDupeGroups = checkAndProcessDupes(
                                                                                                TRANSID, FROMAPPID, g, version,
                                                                                                nType, secondGetList, dupeFixOn,
-                                                                                               deleteCandidateList, singleCommits,     dupeGroups, dbMaps);
+                                                                                               deleteCandidateList, singleCommits,     dupeGroups, loader);
                                                                        Iterator<String> dIter = tmpDupeGroups.iterator();
                                                                        while (dIter.hasNext()) {
                                                                                // Add in any newly found dupes to our running list
@@ -732,7 +719,7 @@ public class DataGrooming {
                                                                Object ob = vIn.<Object>property("aai-node-type").orElse(null);
                                                                if (ob != null) {
                                                                        vNtI = ob.toString();
-                                                                       keysMissing = anyKeyFieldsMissing(vNtI, vIn, dbMaps);
+                                                                       keysMissing = anyKeyFieldsMissing(vNtI, vIn, loader);
                                                                }
                                                                ob = vIn.id();
                                                                long vIdLong = 0L;
@@ -845,7 +832,7 @@ public class DataGrooming {
                                                                if (ob != null) {
                                                                        vNtO = ob.toString();
                                                                        keysMissing = anyKeyFieldsMissing(vNtO,
-                                                                                       vOut, dbMaps);
+                                                                                       vOut, loader);
                                                                }
                                                                ob = vOut.id();
                                                                long vIdLong = 0L;
@@ -1315,11 +1302,13 @@ public class DataGrooming {
         * @param v the v
         * @return the boolean
         */
-       private static Boolean anyKeyFieldsMissing(String nType, Vertex v, DbMaps dbMaps) {
+       private static Boolean anyKeyFieldsMissing(String nType, Vertex v, Loader loader) {
                
                try {
-                       if( nType != null && !nType.trim().equals("") 
-                                       && !dbMaps.NodeKeyProps.containsKey(nType) ){
+                       Introspector obj = null;
+                       try {
+                               obj = loader.introspectorFromName(nType);
+                       } catch (AAIUnknownObjectException e) {
                                // They gave us a non-empty nodeType but our NodeKeyProps does
                                //   not have data for it.  Since we do not know what the
                                //   key params are for this type of node, we will just
@@ -1327,19 +1316,11 @@ public class DataGrooming {
                                String emsg = " -- WARNING -- Unrecognized nodeType: [" + nType 
                                                + "].  We cannot determine required keys for this nType. ";
                                // NOTE - this will be caught below and a "false" returned
-                               throw new AAIException("AAI_6121", emsg); 
-                       }                       
+                               throw new AAIException("AAI_6121", emsg);
+                       }       
                        
                        // Determine what the key fields are for this nodeType
-                       Collection <String> keyPropNamesColl = new ArrayList <>();
-                       if( dbMaps.NodeKeyProps.containsKey(nType) ){
-                               keyPropNamesColl = dbMaps.NodeKeyProps.get(nType);
-                       }
-                       else {
-                               // NOTE - this will be caught below and a "false" returned
-                               throw new AAIException("AAI_6121", "Definition of key props not found for nodeType = " + nType + ")"); 
-                       }
-                       
+                       Collection <String> keyPropNamesColl = obj.getKeys();
                        Iterator<String> keyPropI = keyPropNamesColl.iterator();
                        while (keyPropI.hasNext()) {
                                String propName = keyPropI.next();
@@ -1422,7 +1403,7 @@ public class DataGrooming {
         */
        public static TitanVertex getPreferredDupe(String transId,
                        String fromAppId, TitanTransaction g,
-                       ArrayList<TitanVertex> dupeVertexList, String ver, DbMaps dbMaps)
+                       ArrayList<TitanVertex> dupeVertexList, String ver, Loader loader)
                        throws AAIException {
 
                // This method assumes that it is being passed a List of vertex objects
@@ -1447,7 +1428,7 @@ public class DataGrooming {
                for (int i = 1; i < listSize; i++) {
                        TitanVertex vtxB = (TitanVertex) dupeVertexList.get(i);
                        vtxPreferred = pickOneOfTwoDupes(transId, fromAppId, g,
-                                       currentFaveVtx, vtxB, ver, dbMaps);
+                                       currentFaveVtx, vtxB, ver, loader);
                        if (vtxPreferred == null) {
                                // We couldn't choose one
                                return nullVtx;
@@ -1474,7 +1455,7 @@ public class DataGrooming {
         */
        public static TitanVertex pickOneOfTwoDupes(String transId,
                        String fromAppId, TitanTransaction g, TitanVertex vtxA,
-                       TitanVertex vtxB, String ver, DbMaps dbMaps) throws AAIException {
+                       TitanVertex vtxB, String ver, Loader loader) throws AAIException {
 
                TitanVertex nullVtx = null;
                TitanVertex preferredVtx = null;
@@ -1484,13 +1465,13 @@ public class DataGrooming {
 
                String vtxANodeType = "";
                String vtxBNodeType = "";
-               Object obj = vtxA.<Object>property("aai-node-type").orElse(null);
-               if (obj != null) {
-                       vtxANodeType = obj.toString();
+               Object objType = vtxA.<Object>property("aai-node-type").orElse(null);
+               if (objType != null) {
+                       vtxANodeType = objType.toString();
                }
-               obj = vtxB.<Object>property("aai-node-type").orElse(null);
-               if (obj != null) {
-                       vtxBNodeType = obj.toString();
+               objType = vtxB.<Object>property("aai-node-type").orElse(null);
+               if (objType != null) {
+                       vtxBNodeType = objType.toString();
                }
 
                if (vtxANodeType.equals("") || (!vtxANodeType.equals(vtxBNodeType))) {
@@ -1504,10 +1485,9 @@ public class DataGrooming {
                // (We'll check dep-node later)
                // Determine what the key fields are for this nodeType
                Collection <String> keyProps = new ArrayList <>();
-               if( dbMaps.NodeKeyProps.containsKey(vtxANodeType) ){
-                       keyProps = dbMaps.NodeKeyProps.get(vtxANodeType);
-               }
-               else {
+               try {
+                       keyProps = loader.introspectorFromName(vtxANodeType).getKeys();
+               } catch (AAIUnknownObjectException e) {
                        throw new AAIException("AAI_6105", "Required Property name(s) not found for nodeType = " + vtxANodeType + ")"); 
                }
                
@@ -1515,14 +1495,14 @@ public class DataGrooming {
                while (keyPropI.hasNext()) {
                        String propName = keyPropI.next();
                        String vtxAKeyPropVal = "";
-                       obj = vtxA.<Object>property(propName).orElse(null);
-                       if (obj != null) {
-                               vtxAKeyPropVal = obj.toString();
+                       objType = vtxA.<Object>property(propName).orElse(null);
+                       if (objType != null) {
+                               vtxAKeyPropVal = objType.toString();
                        }
                        String vtxBKeyPropVal = "";
-                       obj = vtxB.<Object>property(propName).orElse(null);
-                       if (obj != null) {
-                               vtxBKeyPropVal = obj.toString();
+                       objType = vtxB.<Object>property(propName).orElse(null);
+                       if (objType != null) {
+                               vtxBKeyPropVal = objType.toString();
                        }
 
                        if (vtxAKeyPropVal.equals("")
@@ -1547,9 +1527,9 @@ public class DataGrooming {
                                TitanVertex tvCon = iter.next();
                                String conVid = tvCon.id().toString();
                                String nt = "";
-                               obj = tvCon.<Object>property("aai-node-type").orElse(null);
-                               if (obj != null) {
-                                       nt = obj.toString();
+                               objType = tvCon.<Object>property("aai-node-type").orElse(null);
+                               if (objType != null) {
+                                       nt = objType.toString();
                                }
                                nodeTypesConn2A.put(nt, conVid);
                                vtxIdsConn2A.add(conVid);
@@ -1563,9 +1543,9 @@ public class DataGrooming {
                                TitanVertex tvCon = iter.next();
                                String conVid = tvCon.id().toString();
                                String nt = "";
-                               obj = tvCon.<Object>property("aai-node-type").orElse(null);
-                               if (obj != null) {
-                                       nt = obj.toString();
+                               objType = tvCon.<Object>property("aai-node-type").orElse(null);
+                               if (objType != null) {
+                                       nt = objType.toString();
                                }
                                nodeTypesConn2B.put(nt, conVid);
                                vtxIdsConn2B.add(conVid);
@@ -1581,11 +1561,8 @@ public class DataGrooming {
                // different ways. But for a particular node, it will only have one
                // dependent node that it's
                // connected to.
-               Collection <String> depNodeTypes = new ArrayList <>();
-               if( dbMaps.NodeDependencies.containsKey(vtxANodeType) ){
-                       depNodeTypes = dbMaps.NodeDependencies.get(vtxANodeType);
-               }
-                               
+               Collection <String> depNodeTypes = loader.introspectorFromName(vtxANodeType).getDependentOn();
+                       
                if (depNodeTypes.isEmpty()) {
                        // This kind of node is not dependent on any other. That is ok.
                } else {
@@ -1689,7 +1666,7 @@ public class DataGrooming {
                        String fromAppId, TitanTransaction g, String version, String nType,
                        List<TitanVertex> passedVertList, Boolean dupeFixOn,
                        Set<String> deleteCandidateList, Boolean singleCommits,
-                       ArrayList<String> alreadyFoundDupeGroups, DbMaps dbMaps ) {
+                       ArrayList<String> alreadyFoundDupeGroups, Loader loader ) {
                
                ArrayList<String> returnList = new ArrayList<>();
                ArrayList<TitanVertex> checkVertList = new ArrayList<>();
@@ -1748,7 +1725,7 @@ public class DataGrooming {
                                return returnList;
                        }
 
-                       if (!dbMaps.NodeDependencies.containsKey(nType)) {
+                       if (loader.introspectorFromName(nType).isTopLevel()) {
                                // If this was a node that does NOT depend on other nodes for
                                // uniqueness, and we
                                // found more than one node using its key -- record the found
@@ -1761,7 +1738,7 @@ public class DataGrooming {
                                }
                                if (dupesStr != "") {
                                        TitanVertex prefV = getPreferredDupe(transId, fromAppId,
-                                                       g, checkVertList, version, dbMaps);
+                                                       g, checkVertList, version, loader);
                                        if (prefV == null) {
                                                // We could not determine which duplicate to keep
                                                dupesStr = dupesStr + "KeepVid=UNDETERMINED";
@@ -1792,7 +1769,7 @@ public class DataGrooming {
                                // could be more than one set of duplicates.
                                HashMap<String, ArrayList<TitanVertex>> vertsGroupedByParentHash = groupVertsByDepNodes(
                                                transId, fromAppId, g, version, nType,
-                                               checkVertList, dbMaps);
+                                               checkVertList, loader);
                                for (Map.Entry<String, ArrayList<TitanVertex>> entry : vertsGroupedByParentHash
                                                .entrySet()) {
                                        ArrayList<TitanVertex> thisParentsVertList = entry
@@ -1809,7 +1786,7 @@ public class DataGrooming {
                                                if (dupesStr != "") {
                                                        TitanVertex prefV = getPreferredDupe(transId,
                                                                        fromAppId, g, thisParentsVertList,
-                                                                       version, dbMaps);
+                                                                       version, loader);
 
                                                        if (prefV == null) {
                                                                // We could not determine which duplicate to
@@ -1860,7 +1837,7 @@ public class DataGrooming {
         */
        private static HashMap<String, ArrayList<TitanVertex>> groupVertsByDepNodes(
                        String transId, String fromAppId, TitanTransaction g, String version,
-                       String nType, ArrayList<TitanVertex> passedVertList, DbMaps dbMaps)
+                       String nType, ArrayList<TitanVertex> passedVertList, Loader loader)
                        throws AAIException {
                // Given a list of Titan Vertices of one nodeType (see AAI-8956), group 
                // them together by the parent node they depend on.
@@ -1871,7 +1848,7 @@ public class DataGrooming {
                // allow for the case where more than one is under the same parent node.
 
                HashMap<String, ArrayList<TitanVertex>> retHash = new HashMap<String, ArrayList<TitanVertex>>();
-               if (!dbMaps.NodeDependencies.containsKey(nType)) {
+               if (loader.introspectorFromName(nType).isTopLevel()) {
                        // This method really should not have been called if this is not the
                        // kind of node
                        // that depends on a parent for uniqueness, so just return the empty
@@ -1881,7 +1858,7 @@ public class DataGrooming {
 
                // Find out what types of nodes the passed in nodes can depend on
                ArrayList<String> depNodeTypeL = new ArrayList<>();
-               Collection<String> depNTColl = dbMaps.NodeDependencies.get(nType);
+               Collection<String> depNTColl = loader.introspectorFromName(nType).getDependentOn();
                Iterator<String> ntItr = depNTColl.iterator();
                while (ntItr.hasNext()) {
                        depNodeTypeL.add(ntItr.next());
@@ -2250,5 +2227,4 @@ public class DataGrooming {
        }// End of getConnectedParent()
        
        
-       
 }
diff --git a/aai-core/src/main/java/org/openecomp/aai/dbgen/DbMeth.java b/aai-core/src/main/java/org/openecomp/aai/dbgen/DbMeth.java
deleted file mode 100644 (file)
index 17266d1..0000000
+++ /dev/null
@@ -1,3643 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.openecomp.aai
- * ================================================================================
- * Copyright (C) 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=========================================================
- */
-
-package org.openecomp.aai.dbgen;
-
-import java.net.Inet4Address;
-import java.net.Inet6Address;
-import java.net.InetAddress;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-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.apache.tinkerpop.gremlin.structure.VertexProperty;
-
-import org.openecomp.aai.dbmodel.DbEdgeRules;
-import org.openecomp.aai.exceptions.AAIException;
-import org.openecomp.aai.ingestModel.DbMaps;
-import org.openecomp.aai.ingestModel.IngestModelMoxyOxm;
-import org.openecomp.aai.serialization.db.EdgeRule;
-import org.openecomp.aai.serialization.db.EdgeRules;
-import org.openecomp.aai.util.AAIConfig;
-import org.openecomp.aai.util.AAIConstants;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.common.net.InetAddresses;
-import com.thinkaurelius.titan.core.TitanEdge;
-import com.thinkaurelius.titan.core.TitanGraph;
-import com.thinkaurelius.titan.core.TitanTransaction;
-import com.thinkaurelius.titan.core.TitanVertex;
-
-
-/**
- * General Database-level Utility class.   These methods deal with the database one dataNode / Edge at a time.
- * Transactions are managed at a higher level by the calling classes by passing in a TitanTransaction object.
- */
-public class DbMeth{
-
-       private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(DbMeth.class);
-       
-       /**
-        * Patch aai node.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propHash the prop hash
-        * @param depNodeVal the dep node val
-        * @param apiVersion the api version
-        * @return TitanVertex
-        * @throws AAIException the AAI exception
-        */
-       public static TitanVertex patchAaiNode(String transId, String fromAppId, TitanTransaction graph, String nodeType, 
-                       HashMap <String,Object> propHash, TitanVertex depNodeVal, String apiVersion ) throws AAIException{
-               // If they're calling patchAaiNode, then we only want to add/update the properties that they
-               // pass us in the propHash.  If there are others already in the DB, we leave them alone.
-
-               // Note: to be really official, we'd throw an error if the node wasn't already in the db.
-               boolean[] objectExists = new boolean[1];
-               objectExists[0] = true;
-               Boolean patchOnly = true;
-               TitanVertex tv = persistAaiNodeBASE(transId, fromAppId, graph, nodeType, propHash, depNodeVal, patchOnly, apiVersion, objectExists);
-               return( tv );
-
-       } // end of patchAaiNode()
-       
-       /**
-        * Patch aai node.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propHash the prop hash
-        * @param depNodeVal the dep node val
-        * @return the titan vertex
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static TitanVertex patchAaiNode(String transId, String fromAppId, TitanTransaction graph, String nodeType, 
-                       HashMap <String,Object> propHash, TitanVertex depNodeVal) throws AAIException{
-               return patchAaiNode( transId,  fromAppId,  graph,  nodeType, 
-                               propHash,  depNodeVal, null );
-       }
-       
-       /**
-        * Persist aai node.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propHash the prop hash
-        * @param depNodeVal the dep node val
-        * @param patchOnly the patch only
-        * @param apiVersion the api version
-        * @return the titan vertex
-        * @throws AAIException the AAI exception
-        */
-       public static TitanVertex persistAaiNode(String transId, String fromAppId, TitanTransaction graph, String nodeType, 
-                       HashMap <String,Object> propHash, TitanVertex depNodeVal, Boolean patchOnly, String apiVersion) throws AAIException{
-               boolean[] objectExists = new boolean[1];
-               objectExists[0] = false;
-               return persistAaiNodeBASE( transId,  fromAppId,  graph,  nodeType, 
-                                propHash,  depNodeVal, patchOnly, apiVersion, objectExists);
-       }
-       
-       /**
-        * Persist aai node.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propHash the prop hash
-        * @param addIfNotFound the add if not found
-        * @param depNodeVal the dep node val
-        * @param apiVersion the api version
-        * @return the titan vertex
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static TitanVertex persistAaiNode(String transId, String fromAppId, TitanTransaction graph, String nodeType, 
-                       HashMap <String,Object> propHash, Boolean addIfNotFound, TitanVertex depNodeVal, String apiVersion) throws AAIException{
-               // If they're calling persistAaiNode, then we want to make the Db look like whatever they pass us.  That is, if
-               // there is already a record in the DB, but they do not pass some of the existing properties, they should
-               // be cleared from the DB.    Since we want to take care of all properties, we pass patchOnly = false
-               Boolean patchOnly = false;
-               boolean[] objectExists = new boolean[1];
-               objectExists[0] = false;
-               TitanVertex tv = persistAaiNodeBASE(transId, fromAppId, graph, nodeType, propHash, depNodeVal, patchOnly, apiVersion, objectExists);
-               return( tv );
-       } 
-       
-       /**
-        * Persist aai node.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propHash the prop hash
-        * @param addIfNotFound the add if not found
-        * @param depNodeVal the dep node val
-        * @return the titan vertex
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static TitanVertex persistAaiNode(String transId, String fromAppId, TitanTransaction graph, String nodeType, 
-                       HashMap <String,Object> propHash, Boolean addIfNotFound, TitanVertex depNodeVal) throws AAIException{
-               // If they're calling persistAaiNode, then we want to make the Db look like whatever they pass us.  That is, if
-               // there is already a record in the DB, but they do not pass some of the existing properties, they should
-               // be cleared from the DB.    Since we want to take care of all properties, we pass patchOnly = false
-               Boolean patchOnly = false;
-               boolean[] objectExists = new boolean[1];
-               objectExists[0] = false;
-               TitanVertex tv = persistAaiNodeBASE(transId, fromAppId, graph, nodeType, propHash, depNodeVal, patchOnly, null, objectExists);
-               return( tv );
-       } // end of persistAaiNode()
-       
-       /**
-        * Persist aai node.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propHash the prop hash
-        * @param addIfNotFound the add if not found
-        * @param depNodeVal the dep node val
-        * @param apiVersion the api version
-        * @param objectExists the object exists
-        * @return TitanVertex
-        * @throws AAIException the AAI exception
-        */
-       public static TitanVertex persistAaiNode(String transId, String fromAppId, TitanTransaction graph, String nodeType, 
-                       HashMap <String,Object> propHash, Boolean addIfNotFound, TitanVertex depNodeVal, String apiVersion, boolean[] objectExists) throws AAIException{
-               Boolean patchOnly = false;
-               // If they're calling persistAaiNode, then we want to make the Db look like whatever they pass us.  That is, if
-               // there is already a record in the DB, but they do not pass some of the existing properties, they should
-               // be cleared from the DB.    Since we want to take care of all properties, we pass patchOnly = false
-               TitanVertex tv = persistAaiNodeBASE(transId, fromAppId, graph, nodeType, propHash, depNodeVal, patchOnly, apiVersion, objectExists, null);
-               return( tv );
-       } 
-       
-       /**
-        * Persist aai node.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propHash the prop hash
-        * @param addIfNotFound the add if not found
-        * @param depNodeVal the dep node val
-        * @param apiVersion the api version
-        * @param objectExists the object exists
-        * @param thisNodeVertex the this node vertex
-        * @return the titan vertex
-        * @throws AAIException the AAI exception
-        */
-       public static TitanVertex persistAaiNode(String transId, String fromAppId, TitanTransaction graph, String nodeType, 
-                       HashMap <String,Object> propHash, Boolean addIfNotFound, TitanVertex depNodeVal, String apiVersion, boolean[] objectExists, TitanVertex thisNodeVertex) throws AAIException{
-               Boolean patchOnly = false;
-               // If they're calling persistAaiNode, then we want to make the Db look like whatever they pass us.  That is, if
-               // there is already a record in the DB, but they do not pass some of the existing properties, they should
-               // be cleared from the DB.    Since we want to take care of all properties, we pass patchOnly = false
-               TitanVertex tv = persistAaiNodeBASE(transId, fromAppId, graph, nodeType, propHash, depNodeVal, patchOnly, apiVersion, objectExists, thisNodeVertex);
-               return( tv );
-       } 
-       
-       /**
-        * Persist aai node BASE.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propHash the prop hash
-        * @param depNodeVal the dep node val
-        * @param patchOnly the patch only
-        * @param apiVersion the api version
-        * @param objectExists the object exists
-        * @return the titan vertex
-        * @throws AAIException the AAI exception
-        */
-       public static TitanVertex persistAaiNodeBASE(String transId, String fromAppId, TitanTransaction graph, String nodeType, 
-                       HashMap <String,Object> propHash, TitanVertex depNodeVal, Boolean patchOnly, 
-                       String apiVersion, boolean[] objectExists) throws AAIException{
-               return persistAaiNodeBASE(transId, fromAppId, graph, nodeType, propHash, depNodeVal, patchOnly, apiVersion, objectExists, null);
-       }
-       
-       /**
-        * Persist aai node BASE.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propHash the prop hash
-        * @param depNodeVal the dep node val
-        * @param patchOnly the patch only
-        * @param apiVersion the api version
-        * @param objectExists the object exists
-        * @param thisNodeVertex the this node vertex
-        * @return the titan vertex
-        * @throws AAIException the AAI exception
-        */
-       public static TitanVertex persistAaiNodeBASE(String transId, String fromAppId, TitanTransaction graph, String nodeType, 
-                       HashMap <String,Object> propHash, TitanVertex depNodeVal, Boolean patchOnly, 
-                       String apiVersion, boolean[] objectExists, TitanVertex thisNodeVertex) throws AAIException{
-               
-               if( graph == null ){
-                       throw new AAIException("AAI_6101", "null graph object passed to persistAaiNodeBASE()"); 
-               }
-               
-               DbMaps dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
-               
-               boolean useDepNode = false;
-               String resourceVersion = null;
-               if( propHash.containsKey("resource-version") ){
-                       resourceVersion = (String)(propHash.get("resource-version")); 
-               }       
-               String aaiUniqueKeyVal = null;
-               if( propHash.containsKey("aai-unique-key") ){
-                       // Note -- we are assuming that nobody is monkeying with this.   The 16-07 first-pass theory
-                       //    is that the REST layer is always gonna generate this or pass it through.
-                       aaiUniqueKeyVal = (String)(propHash.get("aai-unique-key")); 
-                       propHash.remove("aai-unique-key");
-               }       
-               
-               if( needsADepNode4Uniqueness(transId, fromAppId, nodeType, apiVersion) ){
-                       // This kind of node needs a dependent node (for uniqueness)
-                       if( depNodeVal == null ){
-                               // They should have passed in the node that this one depends on
-                               throw new AAIException("AAI_6109", "null dependentNode object passed to persistAaiNodeBASE() but " + nodeType + " requires one."); 
-                       }
-                       else if( ! nodeTypeACanDependOnB(transId, fromAppId, nodeType, depNodeVal.<String>property("aai-node-type").orElse(null), apiVersion) ){
-                               // They should have passed in the right type of node as the dependent node
-                               throw new AAIException("AAI_6109", "dependentNode of type " + depNodeVal.<String>property("aai-node-type").orElse(null) + " passed to persistAaiNodeBASE() for nodeType" + nodeType + "."); 
-                       }
-                       useDepNode = true;
-               }
-               else {
-                       depNodeVal = null;
-               }
-               
-               // Note: as of 1607, we no longer validate property names since that's covered by the REST layer.
-               // Same goes for required fields (as of 1602)
-
-               // Special ip-address validation for ipAddr nodes only...   This will go away when we go to YANG and
-               // do validations like this up at that layer.
-               if( nodeType.equals("ipaddress") ){
-                       // Note - this will throw an exception if the ipAddress is using a bad format
-                       ipAddressFormatOK( transId, fromAppId, (String)propHash.get("addr"), (String)propHash.get("version") );
-               }
-
-               // Use the key-fields/dependentNode to check if this is an add or an update
-               // We assume that all NodeTypes at least one key-property defined.  A dependentNode is optional.
-               if( ! dbMaps.NodeKeyProps.containsKey(nodeType) ){
-                       // Problem if no key Properties defined for this nodeType  
-                       String defVer = AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP);
-                       throw new AAIException("AAI_6105", "No node-key-properties defined in dbMaps for nodeType = " + nodeType + " (ver=" + defVer + ")"); 
-               }
-
-               Boolean hasAltKey1 = false;
-               HashMap <String,Object>nodeAltKey1PropsHash = new HashMap<String,Object>();
-               Collection <String> altKey1Props = getNodeAltKey1PropNames(transId, fromAppId, nodeType, apiVersion);
-               if( altKey1Props != null ){
-                       Iterator <String> altKey1PropI = altKey1Props.iterator();
-                       while( altKey1PropI.hasNext() ){
-                               String propName = altKey1PropI.next();
-                               // NOTE: alt-keys are not always required fields.  If it is null or blank, we won't 
-                               //      do alt-key checks on it.
-                               Object value = propHash.get(propName); 
-                               if( value != null && !value.toString().equals("") ){
-                                       hasAltKey1 = true;
-                                       nodeAltKey1PropsHash.put(propName, value);
-                               }
-                       }
-               }
-               HashMap <String,Object>nodeKeyPropsHash = new HashMap<String,Object>();
-               Collection <String> keyProps = getNodeKeyPropNames(transId, fromAppId, nodeType, apiVersion);
-               Iterator <String> keyPropI = keyProps.iterator();
-               while( keyPropI.hasNext() ){
-                       String propName = keyPropI.next();
-                       
-                       Object value = propHash.get(propName); 
-                       nodeKeyPropsHash.put(propName, value);
-               }
-
-               // Check if this node is already in the database based on the Primary Key Info
-               TitanVertex existingVert = thisNodeVertex;
-               boolean foundTheNodeInDb = true;
-                       
-               if (existingVert == null) { 
-                       try {
-                               existingVert = getUniqueNode( transId, fromAppId, graph, nodeType, nodeKeyPropsHash, depNodeVal, apiVersion );
-                       }
-                       catch (AAIException e) {
-                               if (e.getErrorObject().getErrorCode().equals("6114")) {
-                                       foundTheNodeInDb = false;
-                               }
-                               else {
-                                       throw e;
-                               }
-                       }
-               }
-                               
-               // this is so the notification knows whether or not the operation was an UPDATE or a CREATe
-               objectExists[0] = foundTheNodeInDb;
-               if( foundTheNodeInDb ){
-                       // A record was found in the DB using the PK.  
-                       if( needToDoResourceVerCheck(apiVersion, patchOnly) ){
-                               // Need to check that they knew what they were updating
-                               String existingResVer = existingVert.<String>property("resource-version").orElse(null);
-                               if( resourceVersion == null || resourceVersion.equals("") ){
-                                       throw new AAIException("AAI_6130", "Resource-version not passed for update of = " + nodeType + ", " + nodeKeyPropsHash.toString()); 
-                               }
-                               else if( (existingResVer != null) && !resourceVersion.equals(existingResVer) ){
-                                       throw new AAIException("AAI_6131", "Resource-version " + resourceVersion + " MISMATCH WITH EXISTING " + existingResVer + " for update of = " + nodeType + ", " + nodeKeyPropsHash.toString()); 
-                               }
-                       }
-                       
-                       // Need to ensure that the Alternate key isn't changing to a value that points to a different existing node.   
-                       // It is ok if it points to nothing -- that would just be an update for this node.   It's also ok if 
-                       // it points to this (existing) node - that just means that it wasn't being updated.
-                       if( hasAltKey1 ){
-                               try {
-                                       TitanVertex chkVert = getUniqueNode( transId, fromAppId, graph, nodeType, nodeAltKey1PropsHash, depNodeVal, apiVersion );
-                                       if( ! chkVert.id().toString().equals(existingVert.id().toString()) ){
-                                               throw new AAIException("AAI_6117", "In-Use AlternateKey value passed for update of nodeType = " + nodeType); 
-                                       }
-                               }
-                               catch (AAIException e) {
-                                       if(! e.getErrorObject().getErrorCode().equals("6114") ){
-                                               throw e;
-                                       }
-                               }
-                       }
-               }
-               else {
-                       // Note not in the DB -- This will be an ADD of a new node
-                       //              a) make sure they didn't say they were just doing "patchOnly" which cannot be an ADD.
-                       //              b) if there is an alternate key, we need to make sure the AK isn't already in use by somebody else.
-                       if( patchOnly ){
-                               String depMsg = "";
-                               if( useDepNode ){
-                                       depMsg = " plus dependent node. ";
-                               }
-                               throw new AAIException("AAI_6114", "Patch Request, but no Node of type " + nodeType + " found for properties: [" + propHash + "] " + depMsg);
-                       }
-                       
-                       if( needToDoResourceVerCheck(apiVersion, patchOnly) && (resourceVersion != null) && !resourceVersion.equals("") ){
-                               throw new AAIException("AAI_6131", "Resource-version was passed in, but this is an ADD of a " + nodeType + ", with these params: " + nodeKeyPropsHash.toString()); 
-                       }
-                       if( hasAltKey1 ){
-                               try {
-                                       getUniqueNode( transId, fromAppId, graph, nodeType, nodeAltKey1PropsHash, depNodeVal, apiVersion );
-                                       // Since the Primary Key for this nodeType wasn't found in the DB yet, the fact that
-                                       // we are able to find a record (no "6114" exception thrown) using the Alternate-Key is an error.  
-                                       // We can't create a new node that uses an AK that's already in use.
-                                       throw new AAIException("AAI_6117", "Conflicting Key and Alternate-Key values passed for add of nodeType = " + nodeType); 
-                               }
-                               catch (AAIException e) {
-                                       if(! e.getErrorObject().getErrorCode().equals("6114") ){
-                                               throw e;
-                                       }
-                               }
-                       }
-               }
-
-               // ------------- Done with checking.  Do the add or update to the dB -----------------------
-
-               if( foundTheNodeInDb ){
-                       long unixTimeNow = System.currentTimeMillis() / 1000L;
-                       // ----- This is an UPDATE ------
-                       
-                       
-                       String existingSourceOfTruth = fromAppId;  // default value if we can't get the old one
-                       Object tmpOb = existingVert.<Object>property("source-of-truth").orElse(null);
-                       if( tmpOb != null ){
-                               existingSourceOfTruth = tmpOb.toString();
-                       }
-                       long existingCreateTs = unixTimeNow;  // default value if we can't get the old one
-                       tmpOb = existingVert.<Object>property("aai-created-ts").orElse(null);
-                       if( tmpOb != null ){
-                               existingCreateTs = (long) tmpOb;
-                       }
-                       
-                       String msg = "UPDATE vertex of type = [" + nodeType + "] "; 
-                       if( useDepNode ){
-                               String depNType = depNodeVal.<String>property("aai-node-type").orElse(null);
-                               HashMap <String, Object> depNodePropKeysHash = getNodeKeyPropHash(transId, fromAppId, graph, depNodeVal);
-                               LOGGER.info("UPDATE existing node: type = " + nodeType + ", key(s) = [" + nodeKeyPropsHash + 
-                                               "] which rides on dependent node: type = " + depNType + ", with key(s) = [" + depNodePropKeysHash + "].");
-                       }
-                       else {
-                               LOGGER.info("UPDATE existing node: type = " + nodeType + ", key(s) = [" + nodeKeyPropsHash + "] (no dep. node).");
-                       }
-                       String removeList = "";
-                       if( ! patchOnly ){
-                               // They are updating an existing record, and they want us to "process all defined properties" (not just patch)   
-                               // So we will see if the node has any properties that were not passed-in.  Those need to be removed.
-                               Collection <String> propCol =  dbMaps.NodeProps.get(nodeType);
-                               Iterator <String> propIter = propCol.iterator();
-                               while( propIter.hasNext() ){
-                                       String propName = propIter.next();
-                                       if( ! propHash.containsKey(propName) && !DbEdgeRules.ReservedPropNames.containsKey(propName)){  
-                                               if( thisPropertyWasPutByNewerVersionOfCode(apiVersion, nodeType, propName) ){
-                                                       //   we must be using an older version of code here - but the property that
-                                                       //   has not been passed in this persist call is one that this older version of
-                                                       //   the database did not know about.  So leave it alone.
-                                               }
-                                               else {
-                                                       removeList = removeList + "," + propName;
-                                                       existingVert.property(propName).remove();
-                                               }
-                                       }
-                               }
-                       }
-                       if( !removeList.equals("") ){
-                               LOGGER.info("Removed these props on update: [" + removeList + "]");
-                       }
-                       for( Map.Entry<String, Object> entry : propHash.entrySet() ){
-                               // update the parameters that have been passed in (except the key-properties)
-                               //                  taking away the key-property check.  We will now allow this since
-                               //                  the keys were used to identify this node, so they should be good and
-                               //                  there are times when Titan resolves conflicts by only using the 
-                               //                  data set in an update - and was losing our key info... 
-                               //                  Similar to the change noted below.
-                               //if( ! nodeKeyPropsHash.containsKey(entry.getKey()) ){
-                               //      existingVert.setProperty( entry.getKey(), entry.getValue() );
-                               //}
-                               if( ! entry.getKey().equals("resource-version") ){
-                                       boolean nonSingleCardinality = false;
-                                       boolean setSoNoDupes = false;
-                                       if( checkPropCardinality(entry.getKey(), "Set") ){
-                                               nonSingleCardinality = true;
-                                               setSoNoDupes = true;
-                                       }
-                                       else if( checkPropCardinality(entry.getKey(), "List") ){
-                                               nonSingleCardinality = true;
-                                       }
-                                       
-                                       Iterator <Object> valIter = null;
-                                       if( nonSingleCardinality ){
-                                               String className = entry.getValue().getClass().getSimpleName();
-                                               if( className.equals("ArrayList") ){
-                                                       valIter = ((ArrayList)(entry.getValue())).iterator();
-                                               }
-                                               else if( className.equals("List") ){
-                                                       valIter = ((List)(entry.getValue())).iterator();
-                                               }
-                                               else if( className.equals("Set") ){
-                                                       valIter = ((Set)(entry.getValue())).iterator();
-                                               }
-                                       }
-                                       
-                                       if( nonSingleCardinality ){
-                                               // This property has Cardinality of List or Set - which need to be handled carefully
-                                               // Note -- for Lists or Sets, we assume they are of dataType String - that is all
-                                               //       the Rest layer supports at the moment (16-02)
-                                               ArrayList <String> currentData = new ArrayList <String> ();
-                                               if( patchOnly ){
-                                                       // When patching - gotta know what's already in the db
-                                                       Iterator<VertexProperty<Object>> existingPropsIter =  (existingVert.properties(entry.getKey()));
-                                                       if( existingPropsIter != null ){
-                                                               while( existingPropsIter.hasNext() ){
-                                                                       String existingVal = existingPropsIter.next().value().toString();
-                                                                       currentData.add( existingVal );
-                                                               }
-                                                       }
-                                               }
-                                               else {
-                                                       // Since this is not a patch-update, we first have to clear out what is currently in the db.
-                                                       existingVert.property(entry.getKey()).remove();
-                                               }
-                                               
-                                               if( valIter != null ){
-                                                       while( valIter.hasNext() ){
-                                                               Object thisVal = valIter.next();        
-                                                               if( setSoNoDupes ){
-                                                                       // For Sets, we need to check that the data isn't already in the db or wasn't passed
-                                                                       // in to us twice in the propHash.  Otherwise Titan throws an exception (instead of just ignoring it...)
-                                                                       if( !currentData.contains(thisVal) ){
-                                                                               // We don't have this data yet, so add it to the Set
-                                                                               existingVert.property( entry.getKey(), thisVal );
-                                                                               currentData.add( thisVal.toString() );
-                                                                       }
-                                                               }
-                                                               else {
-                                                                       // For List data types, it's ok to have duplicate values in the db (why would we want this?)
-                                                                       existingVert.property( entry.getKey(), thisVal );
-                                                               }
-                                                       }
-                                               }
-                                       }
-                                       else {
-                                               // This is a normal, "Cardinality = SINGLE" kind of property
-                                               // ResourceVersion is not populated based on passed-in data, it is set along with other internal properties below.
-                                               //Object cleanVal = convertTypeIfNeeded( entry.getKey(), entry.getValue() );
-                                               //existingVert.setProperty( entry.getKey(),  cleanVal );
-                                               // ********************************
-                                               existingVert.property( entry.getKey(), entry.getValue() );
-                                       }
-                               }
-                       }
-
-                       // DEBUG - trying to deal with the case where simultaneous PUTs
-                       //    cause our db to wind up with a vertex that does not have these three properties filled in.
-                       existingVert.property( "aai-node-type", nodeType );
-                       existingVert.property( "aai-created-ts", existingCreateTs );
-                       existingVert.property( "source-of-truth", existingSourceOfTruth );
-                       
-                       if( aaiUniqueKeyVal != null ){
-                               existingVert.property( "aai-unique-key", aaiUniqueKeyVal );
-                       }
-                       
-                       existingVert.property( "aai-last-mod-ts", unixTimeNow );
-                       String resVers = "" + unixTimeNow; 
-                       existingVert.property( "resource-version", resVers );
-                       existingVert.property( "last-mod-source-of-truth", fromAppId );
-                       
-                       LOGGER.info(msg + ", [aai-last-mod-ts]/[" + unixTimeNow + "]");
-                       
-                       return( existingVert );
-               }
-               else{ 
-                       // ----- Not found in the DB, This must be an ADD ------
-                       if( DbEdgeRules.NodeTypeCategory.containsKey(nodeType) ){
-                               throw new AAIException("AAI_6120", "nodeTypeCategory " + nodeType + " cannot be used to ADD a node.  Need to pass a valid nodeType"); 
-                       }
-
-                       TitanVertex tiVnew = graph.addVertex( nodeType );
-
-                       String msg = "ADD vertex of type = [" + nodeType + "] ";       
-                       if( depNodeVal != null ){
-                               String depNType = depNodeVal.<String>property("aai-node-type").orElse(null);
-                               HashMap <String, Object> depNodePropKeysHash = getNodeKeyPropHash(transId, fromAppId, graph, depNodeVal);
-                               msg = msg + " onto dependent node: type = " + depNType + ", which has key(s) = [" + depNodePropKeysHash + 
-                                               "].  New Node Prop/values = ";
-                       }
-                       else {
-                               msg = msg + " Note: no dependent node.  New Node Prop/values = ";
-                       }
-                       boolean first = true;
-                       for( Map.Entry<String, Object> entry : propHash.entrySet() ){
-                               if( ! entry.getKey().equals("resource-version") ){
-                                       if( first ){
-                                               msg = msg + " [" + entry.getKey() + "]/[" + entry.getValue() + "]";
-                                               first = false;
-                                       }
-                                       else {
-                                               msg = msg + ", [" + entry.getKey() + "]/[" + entry.getValue() + "]";
-                                       }
-                                       
-                                       boolean nonSingleCardinality = false;
-                                       boolean setSoNoDupes = false;
-                                       if( checkPropCardinality(entry.getKey(), "Set") ){
-                                               nonSingleCardinality = true;
-                                               setSoNoDupes = true;
-                                       }
-                                       else if( checkPropCardinality(entry.getKey(), "List") ){
-                                               nonSingleCardinality = true;
-                                       }
-                                       
-                                       Iterator <Object> valIter = null;
-                                       if( nonSingleCardinality ){
-                                               String className = entry.getValue().getClass().getSimpleName();
-                                               if( className.equals("ArrayList") ){
-                                                       valIter = ((ArrayList)(entry.getValue())).iterator();
-                                               }
-                                               else if( className.equals("List") ){
-                                                       valIter = ((List)(entry.getValue())).iterator();
-                                               }
-                                               else if( className.equals("Set") ){
-                                                       valIter = ((Set)(entry.getValue())).iterator();
-                                               }
-                                       }
-                                       
-                                       if( nonSingleCardinality ){
-                                               // This property has Cardinality of List or Set - which need to be handled carefully
-                                               ArrayList <String> currentData = new ArrayList <String> ();
-                                               if( valIter != null ){
-                                                       while( valIter.hasNext() ){
-                                                               Object thisVal = valIter.next();        
-                                                               if( setSoNoDupes ){
-                                                                       // For Sets, we need to check that they're not passing us duplicate data in propHash.
-                                                                       // Otherwise Titan throws an exception (instead of just ignoring it...)
-                                                                       if( !currentData.contains(thisVal) ){
-                                                                               // We don't have this data yet, so add it to the Set
-                                                                               tiVnew.property( entry.getKey(), thisVal );
-                                                                               currentData.add( thisVal.toString() );
-                                                                       }
-                                                               }
-                                                               else {
-                                                                       // For List data types, it's ok to have duplicate values in the db (why would we want this?)
-                                                                       tiVnew.property( entry.getKey(), thisVal );
-                                                               }
-                                                       }
-                                               }
-                                       }
-                                       else {
-                                               // This is a normal, "Cardinality = SINGLE" kind of property
-                                               // ResourceVersion is not populated based on passed-in data, it is set along with other internal properties below.
-                                               tiVnew.property( entry.getKey(), entry.getValue() );
-                                       }
-                               }
-                       }
-                       
-                       tiVnew.property( "aai-node-type", nodeType );
-                       //long unixTime = System.currentTimeMillis() / 1000L;
-                       long unixTime = System.currentTimeMillis();
-                       tiVnew.property( "aai-created-ts", unixTime );
-                       tiVnew.property( "aai-last-mod-ts", unixTime );
-                       String resVers = "" + unixTime; 
-                       tiVnew.property( "resource-version", resVers );
-                       tiVnew.property( "source-of-truth", fromAppId );
-                       tiVnew.property( "last-mod-source-of-truth", fromAppId );
-                       if( aaiUniqueKeyVal != null ){
-                               tiVnew.property( "aai-unique-key", aaiUniqueKeyVal );
-                       }
-                       
-                       LOGGER.info(msg + ", [aai-created-ts]/[" + unixTime + "]");
-                       return( tiVnew );
-               }
-
-       } // end of persistAaiNodeBASE()
-
-       
-       /**
-        * Need to do resource ver check.
-        *
-        * @param apiVersion the api version
-        * @param patchOnlyFlag the patch only flag
-        * @return the boolean
-        * @throws AAIException the AAI exception
-        */
-       public static Boolean needToDoResourceVerCheck(String apiVersion, Boolean patchOnlyFlag)
-                       throws AAIException{
-               
-               if( patchOnlyFlag ){
-                       // we do not do resource checking for patch requests.
-                       return false;
-               }
-               
-               String resourceCheckOnFlag = AAIConfig.get(AAIConstants.AAI_RESVERSION_ENABLEFLAG);
-               
-               int apiVerInt = cleanUpApiVersion(apiVersion);
-               
-               if( (resourceCheckOnFlag != null) && resourceCheckOnFlag.equals("true") ){
-                       // Only do the check if the resource enable flag is set to "true"
-                       if( apiVerInt > 4 ){
-                               // We're only doing the resource version checks for v5 and later
-                               return true;
-                       }
-               }
-               
-               return false;
-       }// End needToDoResourceVerCheck()
-
-       
-       /**
-        * Clean up api version.
-        *
-        * @param apiVersionString the api version string
-        * @return the int
-        * @throws AAIException the AAI exception
-        */
-       private static int cleanUpApiVersion( String apiVersionString ) throws AAIException {
-               // Note: we expect an apiVersion to start with the letter "v", followed by an integer. 
-               
-               int versionInt = 0;
-               String verStr = apiVersionString;
-               if( (apiVersionString == null) || (apiVersionString.length() < 2) ){
-                       // Passed in version doesn't look right
-                       verStr = org.openecomp.aai.util.AAIApiVersion.get();
-               }
-               versionInt = getVerNumFromVerString( verStr );
-               
-               return versionInt;
-       }
-       
-       /**
-        * Gets the ver num from ver string.
-        *
-        * @param versionString the version string
-        * @return the ver num from ver string
-        * @throws AAIException the AAI exception
-        */
-       private static int getVerNumFromVerString( String versionString )throws AAIException {
-               int versionInt = 0;
-               if( versionString == null || versionString.length() < 2 ){
-                       throw new AAIException("AAI_6121", " Bad Version (format) passed to getVerNumFromVerString: [" + versionString + "]."); 
-               }
-               
-               int strLen = versionString.length();
-               // We assume that a version looks like "v" followed by an integer
-               if( ! versionString.substring(0,1).equals("v") ){
-                       String detail = " Bad Version (format) passed to getVerNumFromVerString: [" + versionString + "]."; 
-                       throw new AAIException("AAI_6121", detail); 
-               }
-               else {
-                       String intPart = versionString.substring(1,strLen);
-                       try {
-                               versionInt = Integer.parseInt( intPart );
-                       }
-                       catch( Exception e ){
-                               String detail = " Bad Version passed to getVerNumFromVerString: [" + versionString + "]."; 
-                               throw new AAIException("AAI_6121", detail);
-                       }
-               }
-               return versionInt;
-       }
-
-       
-       /**
-        * Gets the node key prop names.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeType the node type
-        * @param apiVersion the api version
-        * @return HashMap of keyProperties
-        * @throws AAIException the AAI exception
-        */
-       public static Collection <String> getNodeKeyPropNames( String transId, String fromAppId, String nodeType, String apiVersion ) throws AAIException{
-       
-               DbMaps dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
-               
-               Collection <String> keyProps = new ArrayList <String>();
-               if( dbMaps.NodeKeyProps.containsKey(nodeType) ){
-                       keyProps = dbMaps.NodeKeyProps.get(nodeType);
-               }
-               else if( DbEdgeRules.NodeTypeCategory.containsKey(nodeType) ){
-                       // The passed-in nodeType was really a nodeCategory, so we need to look up the key params
-                       Collection <String> nTypeCatCol = DbEdgeRules.NodeTypeCategory.get(nodeType);
-                       Iterator <String> catItr = nTypeCatCol.iterator();
-                       String catInfo = "";
-                       if( catItr.hasNext() ){
-                               // For now, we only look for one.
-                               catInfo = catItr.next();
-                       }
-                       else {
-                               String defVer = AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP);
-                               throw new AAIException("AAI_6105", "Required Property name(s) not found for nodeType = " + nodeType+ " (ver=" + defVer + ")"); 
-                       }
-
-                       String [] flds = catInfo.split(",");
-                       if( flds.length != 4 ){
-                               throw new AAIException("AAI_6121", "Bad EdgeRule.NodeTypeCategory data for nodeType = [" + nodeType + "]."); 
-                       }
-
-                       String keyPropsString = flds[0];
-                       String [] propNames = keyPropsString.split("\\|");
-                       for( int i = 0; i < propNames.length; i++ ){
-                               keyProps.add(propNames[i]);
-                       }
-               }
-               else {
-                       String defVer = AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP);
-                       throw new AAIException("AAI_6105", "Required Property name(s) not found for nodeType = " + nodeType+ " (ver=" + defVer + ")"); 
-               }
-
-               return keyProps;
-
-       }// end of getNodeKeyPropNames
-       
-       /**
-        * Gets the node key prop names.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeType the node type
-        * @return the node key prop names
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static Collection <String> getNodeKeyPropNames( String transId, String fromAppId, String nodeType ) throws AAIException{
-               return getNodeKeyPropNames(  transId,  fromAppId,  nodeType, null);
-       }
-
-       /**
-        * Gets the node alt key 1 prop names.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeType the node type
-        * @param apiVersion the api version
-        * @return HashMap of keyProperties
-        * @throws AAIException the AAI exception
-        */
-       public static Collection <String> getNodeAltKey1PropNames( String transId, String fromAppId, String nodeType, String apiVersion ) throws AAIException{
-
-               DbMaps dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
-               
-               Collection <String> altKey1Props = new ArrayList <String>();
-               if( dbMaps.NodeAltKey1Props.containsKey(nodeType) ){
-                       altKey1Props = dbMaps.NodeAltKey1Props.get(nodeType);
-               }
-               else if( DbEdgeRules.NodeTypeCategory.containsKey(nodeType) ){
-                       // The passed-in nodeType was really a nodeCategory, so we need to look up the key params
-                       Collection <String> nTypeCatCol = DbEdgeRules.NodeTypeCategory.get(nodeType);
-                       Iterator <String> catItr = nTypeCatCol.iterator();
-                       String catInfo = "";
-                       if( catItr.hasNext() ){
-                               catInfo = catItr.next();
-                               String [] flds = catInfo.split(",");
-                               if( flds.length != 4 ){
-                                       throw new AAIException("AAI_6121", "Bad EdgeRule.NodeTypeCategory data (itemCount=" + flds.length + ") for nodeType = [" + nodeType + "]."); 
-                               }
-
-                               String altKeyPropsString = flds[1];
-                               String [] propNames = altKeyPropsString.split("\\|");
-                               for( int i = 0; i < propNames.length; i++ ){
-                                       altKey1Props.add(propNames[i]);
-                               }
-                       }
-               }
-
-               return altKey1Props;
-
-       }// end of getNodeAltKey1PropNames
-       
-       /**
-        * Gets the node alt key 1 prop names.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeType the node type
-        * @return the node alt key 1 prop names
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static Collection <String> getNodeAltKey1PropNames( String transId, String fromAppId, String nodeType ) throws AAIException{
-               return getNodeAltKey1PropNames(  transId,  fromAppId,  nodeType, null);
-       }
-
-
-       /**
-        * Gets the unique node.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param keyPropsHash the key props hash
-        * @param depNodeVal the dep node val
-        * @param apiVersion the api version
-        * @return TitanVertex
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static TitanVertex getUniqueNode( String transId, String fromAppId, TitanTransaction graph, String nodeType,
-                       HashMap<String,Object> keyPropsHash, TitanVertex depNodeVal, String apiVersion )         throws AAIException{
-               
-               // NOTE - this is really for use by the PersistNode method -- it is looking to see if
-               //     a node exists in the database given either Primary or Alternate Key data and dependent
-               //     node data (if required for uniqueness).
-
-               // Note - the passed in nodeType could really be a nodeTypeCategory ---
-               Boolean nodeTypeIsCategory = DbEdgeRules.NodeTypeCategory.containsKey(nodeType);
-
-               Boolean useDepNode = false;
-               if( needsADepNode4Uniqueness(transId, fromAppId, nodeType, apiVersion) ){
-                       // This kind of node depends on another node for uniqueness
-                       if( depNodeVal == null ){
-                               // They should have passed in the node that this one depends on
-                               throw new AAIException("AAI_6109", "null dependentNode object passed to getUniqueNode() but " + nodeType + " requires one."); 
-                       }
-                       else if( ! nodeTypeACanDependOnB(transId, fromAppId, nodeType, depNodeVal.<String>property("aai-node-type").orElse(null), apiVersion) ){        
-                               // They should have passed in the right type of node as the dependent node
-                               throw new AAIException("AAI_6109", "dependentNode of type " + depNodeVal.<String>property("aai-node-type").orElse(null) + " passed to getUniqueNode() for nodeType" + nodeType + ".\n"); 
-                       }
-                       useDepNode = true;
-               }
-               else {
-                       depNodeVal = null;
-               }
-
-               // We assume that all NodeTypes have at least one key-property defined.  A dependentNode is optional.
-               // Note - instead of key-properties (the primary key properties), a user could pass
-               //        alternate-key values if they are defined for the nodeType.
-               ArrayList<String> kName = new ArrayList<String>();
-               ArrayList<Object> kVal = new ArrayList<Object>();
-
-               Collection <String> keyProps = getNodeKeyPropNames(transId, fromAppId, nodeType, apiVersion);
-               Iterator <String> keyPropI = keyProps.iterator();
-               Boolean haveSomePrimKeyProps = false;
-               Boolean primaryKeyComplete = true;
-               while( keyPropI.hasNext() ){
-                       haveSomePrimKeyProps = true;
-                       
-                       String propName = keyPropI.next();
-                       if( ! keyPropsHash.containsKey(propName) ){
-                               primaryKeyComplete = false;
-                       }
-                       else {
-                               Object valObj = keyPropsHash.get(propName);
-                               if( valObj == null ){
-                                       primaryKeyComplete = false;
-                               }
-                               else {
-                                       String value = valObj.toString();
-                                       if( value == null || value.equals("") ){
-                                               // They passed the property name, but no value
-                                               primaryKeyComplete = false;
-                                       }
-                               }
-                       }
-               }
-               
-               int i = -1;
-               if( haveSomePrimKeyProps && primaryKeyComplete ){
-                       keyPropI = keyProps.iterator();
-                       while( keyPropI.hasNext() ){
-                               String propName = keyPropI.next();
-                               String value = (keyPropsHash.get(propName)).toString();
-                               i++;
-                               kName.add(i, propName);
-                               kVal.add(i, (Object)value);
-                       }
-               }
-               else {
-                       // See if they're using the alternate key
-                       Collection <String> altKey1Props = getNodeAltKey1PropNames(transId, fromAppId, nodeType, apiVersion);
-                       Iterator <String> altKey1PropI = altKey1Props.iterator();
-                       Boolean haveSomeAltKey1Props = false;
-                       Boolean altKey1Complete = true;
-                       while( altKey1PropI.hasNext() ){
-                               haveSomeAltKey1Props = true;
-                               String propName = altKey1PropI.next();
-                               if( ! keyPropsHash.containsKey(propName) ){
-                                       altKey1Complete = false;
-                               }
-                               else {
-                                       Object valObj = keyPropsHash.get(propName);
-                                       if( valObj == null ){
-                                               altKey1Complete = false;
-                                       }
-                                       else {
-                                               String value = valObj.toString();
-                                               if( value == null || value.equals("") ){
-                                                       // They passed the property name, but no value
-                                                       altKey1Complete = false;
-                                               }
-                                       }
-                               }
-                       }
-                       if( haveSomeAltKey1Props && altKey1Complete ){
-                               altKey1PropI = altKey1Props.iterator();
-                               while( altKey1PropI.hasNext() ){
-                                       String propName = altKey1PropI.next();
-                                       String value = (keyPropsHash.get(propName)).toString();
-                                       i++;
-                                       kName.add(i, propName);
-                                       kVal.add(i, (Object)value);
-                               }
-                       }
-               }
-
-               int topPropIndex = i;
-               TitanVertex tiV = null;
-               String propsAndValuesForMsg = "";
-               if( !useDepNode ){ 
-                       // There is no node that this type of node depends on, so we can look for it based 
-                       //    solely on the Aai-defined key fields.
-                       Iterable <?> verts = null;
-
-                       if( topPropIndex == -1 ){
-                               // Problem if no key Properties defined for this nodeType  
-                               String defVer = AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP);
-                               throw new AAIException("AAI_6105", "Bad or Incomplete Key Property params: (" + keyPropsHash.toString() + 
-                                               ") for nodeType: " + nodeType + " (ver=" + defVer + ")"); 
-                       }
-                       else if( topPropIndex == 0 ){
-                               if (nodeTypeIsCategory) // dont know real type
-                                       verts= graph.query().has(kName.get(0),kVal.get(0)).vertices();
-                               else // need this to find dvs switch: dvs.switch-name and port-group.switch-name issue
-                                       verts= graph.query().has(kName.get(0),kVal.get(0)).has("aai-node-type",nodeType).vertices();
-                               propsAndValuesForMsg = " (" + kName.get(0) + " = " + kVal.get(0) + ") ";
-                       }       
-                       else if( topPropIndex == 1 ){
-                               verts =  graph.query().has(kName.get(0),kVal.get(0)).has(kName.get(1),kVal.get(1)).vertices();
-                               propsAndValuesForMsg = " (" + kName.get(0) + " = " + kVal.get(0) + ", " 
-                                               + kName.get(1) + " = " + kVal.get(1) + ") ";
-                       }                       
-                       else if( topPropIndex == 2 ){
-                               verts= graph.query().has(kName.get(0),kVal.get(0)).has(kName.get(1),kVal.get(1)).has(kName.get(2),kVal.get(2)).vertices();
-                               propsAndValuesForMsg = " (" + kName.get(0) + " = " + kVal.get(0) + ", " 
-                                               + kName.get(1) + " = " + kVal.get(1) + ", " 
-                                               + kName.get(2) + " = " + kVal.get(2) +  ") ";
-                       }       
-                       else if( topPropIndex == 3 ){
-                               verts= graph.query().has(kName.get(0),kVal.get(0)).has(kName.get(1),kVal.get(1)).has(kName.get(2),kVal.get(2)).has(kName.get(3),kVal.get(3)).vertices();
-                               propsAndValuesForMsg = " (" + kName.get(0) + " = " + kVal.get(0) + ", " 
-                                               + kName.get(1) + " = " + kVal.get(1) + ", " 
-                                               + kName.get(2) + " = " + kVal.get(2) + ", " 
-                                               + kName.get(3) + " = " + kVal.get(3) +  ") ";
-                       }                       
-                       else {
-                               String emsg = " We only support 4 keys per nodeType for now \n";
-                               throw new AAIException("AAI_6114", emsg); 
-                       }
-
-                       Iterator <?> vertI = verts.iterator();
-                       if( vertI != null && vertI.hasNext()) {
-                               // We found a vertex that meets the input criteria. 
-                               tiV = (TitanVertex) vertI.next();
-
-                               if( vertI.hasNext() ){
-                                       // Since this routine is looking for a unique node for the given input values, if  
-                                       // more than one is found - it's a problem.
-                                       throw new AAIException("AAI_6112", "More than one Node found by getUniqueNode for params: " + propsAndValuesForMsg); 
-                               }
-                       } 
-                       else {
-                               // No Vertex was found for this key - throw a not-found exception
-                               throw new AAIException("AAI_6114", "No Node of type " + nodeType + " found for properties: " + propsAndValuesForMsg);
-                       }
-               }
-               else {
-                       // Need to use the dependent vertex to look for this one.
-                       // filter this to the actual keys because
-                       HashMap<String,Object> onlyKeysHash = new HashMap<String,Object>();
-                       
-                       Collection <String> onlyKeyProps = getNodeKeyPropNames(transId, fromAppId, nodeType, apiVersion);
-                       
-                       Iterator <String> onlyKeyPropsI = onlyKeyProps.iterator();
-                       
-                       while( onlyKeyPropsI.hasNext() ){
-                               String keyName = onlyKeyPropsI.next();
-                               onlyKeysHash.put(keyName, keyPropsHash.get(keyName));
-                       }
-
-                       propsAndValuesForMsg = onlyKeysHash.toString() + " combined with a Dependent [" + depNodeVal.<String>property("aai-node-type").orElse(null) + "] node."; 
-                       ArrayList<TitanVertex> resultList = DbMeth.getConnectedNodes(transId, fromAppId, graph, nodeType, onlyKeysHash, 
-                                       depNodeVal, apiVersion, false);
-                       if( resultList.size() > 1 ){
-                               // More than one vertex found when we thought there should only be one.
-                               throw new AAIException("AAI_6112", "More than one Node found by getUniqueNode for params: " + propsAndValuesForMsg);  
-                       }
-                       else if( resultList.size() == 1 ){
-                               tiV = resultList.get(0);
-                       }
-               }
-
-               if( tiV == null ){
-                       // No Vertex was found for this key - throw a not-found exception
-                       throw new AAIException("AAI_6114", "No Node of type " + nodeType + " found for properties: " + propsAndValuesForMsg);
-               }
-               else {
-                       if( !DbEdgeRules.NodeTypeCategory.containsKey(nodeType) ){
-                               // The nodeType passed in was a real one, not a nodeTypeCategory, so we will
-                               // use it as part of the query to make sure we find the right type of node.
-                               // This can be an issue if they're using nodeTypes covered by a nodeTypeCategory but
-                               // pass in the wrong nodeType.  We don't want them to ask for one thing and get the other.
-                               String foundNodeType = tiV.<String>property("aai-node-type").orElse(null);
-                               if( foundNodeType != null && !foundNodeType.equals(nodeType) ){
-                                       throw new AAIException("AAI_6114", "No Node of type " + nodeType + " found for properties: " + propsAndValuesForMsg + " (did find a " + foundNodeType + " though.)");
-                               }
-                       }
-                       
-                       return tiV;
-               }
-
-       }// End of getUniqueNode() 
-
-       /**
-        * Gets the unique node.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param keyPropsHash the key props hash
-        * @param depNodeVal the dep node val
-        * @return the unique node
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static TitanVertex getUniqueNode( String transId, String fromAppId, TitanTransaction graph, String nodeType,
-                       HashMap<String,Object> keyPropsHash, TitanVertex depNodeVal)     throws AAIException {
-               return getUniqueNode( transId, fromAppId, graph, nodeType,
-                               keyPropsHash,  depNodeVal, null );
-       }
-       // End getUniqueNode()
-
-
-       /**
-        * Gets the unique node with dep params.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param nodePropsHash the node props hash
-        * @param apiVersion the api version
-        * @return TitanVertex
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static TitanVertex getUniqueNodeWithDepParams( String transId, String fromAppId, TitanTransaction graph, String nodeType,
-                       HashMap<String,Object> nodePropsHash, String apiVersion ) 
-                                       throws AAIException{
-               /*
-                * This method uses the nodePropsHash to walk back over dependent nodes until it finds one that
-                * does not depend on any other for uniqueness.   It uses the getUniqueNode() method as it finds
-                * dependent nodes.   NOTE -- it is passed a hash of all the nodeProperties -- for itself and
-                * for any dependent nodes that it will need to find.   There are some types of nodes that can
-                * depend on more than one node, we assume that there wouldn't be a case where BOTH types of
-                * dependent nodes are in the trail that we need to traverse.  Ie. an ipaddress can depend on
-                * either a vserver or pserver.  NOTE this case can now happen -- nodePropsHash
-                * should now be sent as a LinkedHashMap in this case so we can search in order. 
-                */
-
-               // NOTE ALSO -- We're currently supporting 6 layers of dependency.   We never thought there would be this
-               //       many layers before hitting a node-type that would be uniquely identifiable on it's own.   So the
-               //       code is a little ugly with all these nested if-then-else's.   Since we're supporting so many
-               //       layers, it should be re-written so we can support "n" layers instead of having to go in hear
-               //       and adding code...   But as of 15-07, we really don't NEED more than 5.
-
-               // NOTE: The passed in nodeType could really be a nodeTypeCategory -- 
-               //       The calls to figureDepNodeTypeForRequest() below will deal with it for the dep nodes, the 
-               //       call to getUniqueNode() takes care of it for the node itself.
-
-               TitanVertex nullVert = null;
-               String depNodeType = figureDepNodeTypeForRequest( transId, fromAppId, nodeType, nodePropsHash, apiVersion );
-               if( depNodeType.equals("")){
-                       // This kind of node does not depend on another node for uniqueness, so 
-                       // we can just use the "getUniqueNode()" method to get it.
-                       HashMap <String,Object> thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, nodeType, nodePropsHash, apiVersion);
-                       return( getUniqueNode(transId, fromAppId, graph, nodeType, thisNodeTypeParamHash, nullVert, apiVersion) );
-               }
-               else {
-                       // Will need to find the second-layer dependent node
-                       String secondLayerDepNodeType = figureDepNodeTypeForRequest( transId, fromAppId, depNodeType, nodePropsHash, apiVersion );
-                       if( secondLayerDepNodeType.equals("")){
-                               // This second-layer kind of node does not depend on another node for uniqueness.
-                               // So once we find the second-layer node, we can use it to get the top-layer guy.
-                               HashMap <String,Object> thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, depNodeType, nodePropsHash, apiVersion);
-                               TitanVertex secLayerDepVert = getUniqueNode(transId, fromAppId, graph, depNodeType, thisNodeTypeParamHash, nullVert, apiVersion);
-
-                               thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, nodeType, nodePropsHash, apiVersion);
-                               return( getUniqueNode(transId, fromAppId, graph, nodeType, thisNodeTypeParamHash, secLayerDepVert, apiVersion) );
-                       }
-                       else {
-                               // Will need to find the third-layer dependent node
-                               ///  String thirdLayerDepNodeType = dbMaps.NodeDependencies.get(secondLayerDepNodeType);
-                               String thirdLayerDepNodeType = figureDepNodeTypeForRequest( transId, fromAppId, secondLayerDepNodeType, nodePropsHash, apiVersion );
-
-                               if( thirdLayerDepNodeType.equals("")){
-                                       // This third-layer kind of node does not depend on another node for uniqueness.
-                                       // So we can find it, and then use it to find the second-layer and then use that to find the top guy.
-                                       HashMap <String,Object> thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, secondLayerDepNodeType, nodePropsHash, apiVersion);
-                                       TitanVertex thirdLayerDepVert = getUniqueNode(transId, fromAppId, graph, secondLayerDepNodeType, thisNodeTypeParamHash, nullVert, apiVersion);
-
-                                       thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, depNodeType, nodePropsHash, apiVersion);
-                                       TitanVertex secLayerDepVert = getUniqueNode(transId, fromAppId, graph, depNodeType, thisNodeTypeParamHash, thirdLayerDepVert, apiVersion);
-
-                                       thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, nodeType, nodePropsHash, apiVersion);
-
-                                       return( getUniqueNode(transId, fromAppId, graph, nodeType, thisNodeTypeParamHash, secLayerDepVert, apiVersion) );
-                               }
-                               else {
-                                       // Will need to find the third-layer dependent node
-                                       String forthLayerDepNodeType = figureDepNodeTypeForRequest( transId, fromAppId, thirdLayerDepNodeType, nodePropsHash, apiVersion );
-                                       if( forthLayerDepNodeType == null || forthLayerDepNodeType.equals("")){
-                                               // This forth-layer kind of node does not depend on another node for uniqueness.
-                                               // So we can find it, and then use it to find the third, then second-layer and then use that to find the top guy.
-                                               HashMap <String,Object> thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, thirdLayerDepNodeType, nodePropsHash, apiVersion);
-                                               TitanVertex forthLayerDepVert = getUniqueNode(transId, fromAppId, graph, thirdLayerDepNodeType, thisNodeTypeParamHash, nullVert, apiVersion);
-
-                                               thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, secondLayerDepNodeType, nodePropsHash, apiVersion);
-                                               TitanVertex thirdLayerDepVert = getUniqueNode(transId, fromAppId, graph, secondLayerDepNodeType, thisNodeTypeParamHash, forthLayerDepVert, apiVersion);
-
-                                               thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, depNodeType, nodePropsHash, apiVersion);
-                                               TitanVertex secLayerDepVert = getUniqueNode(transId, fromAppId, graph, depNodeType, thisNodeTypeParamHash, thirdLayerDepVert, apiVersion);
-
-                                               thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, nodeType, nodePropsHash, apiVersion);
-                                               return( getUniqueNode(transId, fromAppId, graph, nodeType, thisNodeTypeParamHash, secLayerDepVert, apiVersion) );
-                                       }
-                                       else {
-                                               // Will need to find the forth-layer dependent node
-                                               String fifthLayerDepNodeType = figureDepNodeTypeForRequest( transId, fromAppId, forthLayerDepNodeType, nodePropsHash, apiVersion );
-                                               if( fifthLayerDepNodeType == null || fifthLayerDepNodeType.equals("")){
-                                                       // This fifth-layer kind of node does not depend on another node for uniqueness.
-                                                       // So we can find it, and then use it to find the forth, third, then second-layer and then use that to find the top guy.
-                                                       HashMap <String,Object> thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, forthLayerDepNodeType, nodePropsHash, apiVersion);
-                                                       TitanVertex fifthLayerDepVert = getUniqueNode(transId, fromAppId, graph, forthLayerDepNodeType, thisNodeTypeParamHash, nullVert, apiVersion);
-
-                                                       thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, thirdLayerDepNodeType, nodePropsHash, apiVersion);
-                                                       TitanVertex forthLayerDepVert = getUniqueNode(transId, fromAppId, graph, thirdLayerDepNodeType, thisNodeTypeParamHash, fifthLayerDepVert, apiVersion);
-
-                                                       thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, secondLayerDepNodeType, nodePropsHash, apiVersion);
-                                                       TitanVertex thirdLayerDepVert = getUniqueNode(transId, fromAppId, graph, secondLayerDepNodeType, thisNodeTypeParamHash, forthLayerDepVert, apiVersion);
-
-                                                       thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, depNodeType, nodePropsHash, apiVersion);
-                                                       TitanVertex secLayerDepVert = getUniqueNode(transId, fromAppId, graph, depNodeType, thisNodeTypeParamHash, thirdLayerDepVert, apiVersion);
-
-                                                       thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, nodeType, nodePropsHash, apiVersion);
-                                                       return( getUniqueNode(transId, fromAppId, graph, nodeType, thisNodeTypeParamHash, secLayerDepVert, apiVersion) );
-                                               }
-                                               else {
-                                                       // Will need to find the fifth-layer dependent node
-                                                       String sixthLayerDepNodeType = figureDepNodeTypeForRequest( transId, fromAppId, fifthLayerDepNodeType, nodePropsHash, apiVersion );
-                                                       if( sixthLayerDepNodeType == null || sixthLayerDepNodeType.equals("")){
-                                                               // This six-layer kind of node does not depend on another node for uniqueness.
-                                                               // So we can find it, and then use it to find the fifth, forth, third, then second-layer and then use that to find the top guy.
-                                                               HashMap <String,Object> thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, fifthLayerDepNodeType, nodePropsHash, apiVersion);
-                                                               TitanVertex sixthLayerDepVert = getUniqueNode(transId, fromAppId, graph, fifthLayerDepNodeType, thisNodeTypeParamHash, nullVert, apiVersion);
-
-                                                               thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, forthLayerDepNodeType, nodePropsHash, apiVersion);
-                                                               TitanVertex fifthLayerDepVert = getUniqueNode(transId, fromAppId, graph, forthLayerDepNodeType, thisNodeTypeParamHash, sixthLayerDepVert, apiVersion);
-
-                                                               thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, thirdLayerDepNodeType, nodePropsHash, apiVersion);
-                                                               TitanVertex forthLayerDepVert = getUniqueNode(transId, fromAppId, graph, thirdLayerDepNodeType, thisNodeTypeParamHash, fifthLayerDepVert, apiVersion);
-
-                                                               thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, secondLayerDepNodeType, nodePropsHash, apiVersion);
-                                                               TitanVertex thirdLayerDepVert = getUniqueNode(transId, fromAppId, graph, secondLayerDepNodeType, thisNodeTypeParamHash, forthLayerDepVert, apiVersion);
-
-                                                               thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, depNodeType, nodePropsHash, apiVersion);
-                                                               TitanVertex secLayerDepVert = getUniqueNode(transId, fromAppId, graph, depNodeType, thisNodeTypeParamHash, thirdLayerDepVert, apiVersion);
-
-                                                               thisNodeTypeParamHash = getThisNodeTypeParams(transId, fromAppId, nodeType, nodePropsHash, apiVersion);
-                                                               return( getUniqueNode(transId, fromAppId, graph, nodeType, thisNodeTypeParamHash, secLayerDepVert, apiVersion) );
-                                                       }
-                                                       else {
-                                                               // We don't currently support more layers.  We can later if we need to.
-                                                               // Hopefully, we'll never need to go this deep -- there should be unique keys in there somewhere! 
-                                                               throw new AAIException("AAI_6114", "CODE-LIMITATION - Can't resolve dependant node layers for nodeType = " + nodeType); 
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       } // End getUniqueNodeWithDepParams()
-       
-       /**
-        * Gets the unique node with dep params.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param nodePropsHash the node props hash
-        * @return the unique node with dep params
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static TitanVertex getUniqueNodeWithDepParams( String transId, String fromAppId, TitanTransaction graph, String nodeType,
-                       HashMap<String,Object> nodePropsHash ) throws AAIException {
-               return getUniqueNodeWithDepParams(transId, fromAppId, graph, nodeType, nodePropsHash, null);
-       }
-
-
-       /**
-        * Gets the this node type params.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param targetNodeType the target node type
-        * @param passedHash the passed hash
-        * @param apiVersion the api version
-        * @return the this node type params
-        * @throws AAIException the AAI exception
-        */
-       private static HashMap <String, Object> getThisNodeTypeParams(String transId, String fromAppId, String targetNodeType, 
-                       HashMap<String,Object> passedHash, String apiVersion )throws AAIException{
-               /*
-                * For the passed-in hash, each key is assumed to look like, "nodeType.paramName".  We want to 
-                * pick out the entries that match the targetNodeType and return those with the values they go with.  The
-                * returned keys will have the "nodeType." stripped off.   
-                * 
-                * NOTE  - the nodeType passed to this method could actually be a nodeTypeCategory.  Just keepin it ugly.
-                */
-
-               if( passedHash == null ){
-                       throw new AAIException("AAI_6120", "Bad param:  null passedHash "); 
-               }
-
-               String targetNodeTypeCat = "";
-               if( DbEdgeRules.NodeTypeCatMap.containsKey(targetNodeType) ){
-                       targetNodeTypeCat = DbEdgeRules.NodeTypeCatMap.get(targetNodeType);
-               }
-
-               HashMap <String,Object> returnHash = new HashMap <String,Object> ();
-               Iterator <Map.Entry<String,Object>>it = passedHash.entrySet().iterator();
-               while( it.hasNext() ){
-                       Map.Entry <String,Object>pairs = (Map.Entry<String,Object>)it.next();
-                       String k = (pairs.getKey()).toString();
-                       int periodLoc = k.indexOf(".");
-                       if( periodLoc <= 0 ){
-                               throw new AAIException("AAI_6120", "Bad filter param key passed in: [" + k + "].  Expected format = [nodeName.paramName]\n"); 
-                       }
-                       else {
-                               String nty = k.substring(0,periodLoc);
-                               String paramName = k.substring(periodLoc + 1);
-                               if( nty.equals(targetNodeType) || (!targetNodeTypeCat.equals("") && nty.equals(targetNodeTypeCat)) ){
-                                       String newK = paramName;
-                                       returnHash.put( newK,pairs.getValue() );
-                               }
-                       }
-               }
-
-               //aaiLogger.debug(logline, " - end ");
-               return returnHash;
-
-       }// End of getThisNodeTypeParams()
-       
-       /**
-        * Gets the this node type params.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param targetNodeType the target node type
-        * @param passedHash the passed hash
-        * @return the this node type params
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       private static HashMap <String, Object> getThisNodeTypeParams(String transId, String fromAppId, String targetNodeType, 
-                       HashMap<String,Object> passedHash )throws AAIException{
-               return getThisNodeTypeParams( transId,  fromAppId, targetNodeType, 
-                                passedHash, null);
-               
-       }
-
-       /**
-        * Gets the dep node types.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeType the node type
-        * @param apiVersion the api version
-        * @return the dep node types
-        * @throws AAIException the AAI exception
-        */
-       public static ArrayList <String> getDepNodeTypes(String transId, String fromAppId, String nodeType, String apiVersion)throws AAIException{
-               /*
-                * This returns any nodeTypes that this nodeType can be dependent on.  A particular instance of a node will only
-                * depend on one other node - we don't currently support dependence on multiple nodes.
-                */
-                       
-               DbMaps dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
-
-               ArrayList <String> depNodeTypeL = new ArrayList <String> ();
-               if( !DbEdgeRules.NodeTypeCategory.containsKey(nodeType) ){
-                       // This is a good-ole nodeType
-                       Collection <String> depNTColl =  dbMaps.NodeDependencies.get(nodeType);
-                       Iterator <String> ntItr = depNTColl.iterator();
-                       while( ntItr.hasNext() ){
-                               depNodeTypeL.add(ntItr.next());
-                       }
-               }
-               else {
-                       // The passed-in nodeType must really be a nodeTypeCategory
-                       Collection <String> nTypeCatCol = DbEdgeRules.NodeTypeCategory.get(nodeType);
-                       Iterator <String> catItr = nTypeCatCol.iterator();
-                       String catInfo = "";
-                       if( catItr.hasNext() ){
-                               // For now, we only look for one.
-                               catInfo = catItr.next();
-                       }
-                       else {
-                               throw new AAIException("AAI_6121", "Error getting DbEdgeRules.NodeTypeCategory info for nodeTypeCat = " + nodeType); 
-                       }
-
-                       String [] flds = catInfo.split(",");
-                       if( flds.length != 4 ){
-                               throw new AAIException("AAI_6121", "Bad EdgeRule.NodeTypeCategory data (itemCount=" + flds.length + ") for nodeType = [" + nodeType + "]."); 
-                       }
-
-                       String nodeTypesString = flds[0];
-                       String  hasDepNodes = flds[3];
-                       if( hasDepNodes.equals("true") ){
-                               String [] ntNames = nodeTypesString.split("\\|");
-                               for( int i = 0; i < ntNames.length; i++ ){
-                                       Collection <String> depNTColl =  dbMaps.NodeDependencies.get(nodeType);
-                                       Iterator <String> ntItr = depNTColl.iterator();
-                                       while( ntItr.hasNext() ){
-                                               String depNode = ntItr.next();
-                                               if( !depNodeTypeL.contains(depNode) ){
-                                                       depNodeTypeL.add(depNode);
-                                               }
-                                       }
-                               }       
-                       }
-               }
-
-
-               return depNodeTypeL;
-
-       }// End getDepNodeTypes()
-       
-       /**
-        * Gets the dep node types.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeType the node type
-        * @return the dep node types
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static ArrayList <String> getDepNodeTypes(String transId, String fromAppId, String nodeType)throws AAIException{
-               return getDepNodeTypes( transId,  fromAppId,  nodeType, null);
-       }
-
-       /**
-        * Gets the default delete scope.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeType the node type
-        * @param apiVersion the api version
-        * @return the default delete scope
-        * @throws AAIException the AAI exception
-        */
-       private static String getDefaultDeleteScope(String transId, String fromAppId, String nodeType, String apiVersion)throws AAIException{
-
-               // At some point we may have different delete rules for different services, so this is
-               // a list for now even thought there's only one scope per nodeType.
-               Collection <String> scopeList = DbEdgeRules.DefaultDeleteScope.get(nodeType);
-               if( scopeList.isEmpty() ){
-                       throw new AAIException("AAI_6121", "No default deleteScope found for nodeType = [" + nodeType + "] "); 
-               }
-               else {
-                       Iterator <String> ito = scopeList.iterator();
-                       return ito.next();
-               }
-
-       }// End getDefaultDeleteScope()
-       
-       /**
-        * Gets the default delete scope.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeType the node type
-        * @return the default delete scope
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       private static String getDefaultDeleteScope(String transId, String fromAppId, String nodeType)throws AAIException{
-               return getDefaultDeleteScope( transId,  fromAppId,  nodeType, null);
-       }
-
-       /**
-        * Needs A dep node 4 uniqueness.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeType the node type
-        * @param apiVersion the api version
-        * @return the boolean
-        * @throws AAIException the AAI exception
-        */
-       public static Boolean needsADepNode4Uniqueness(String transId, String fromAppId, String nodeType, String apiVersion)throws AAIException{
-               // Note: the passed in nodeType could really be a nodeTypeCategory.  That is handled by getDepNodeTypes()
-
-               ArrayList <String> depList = getDepNodeTypes(transId, fromAppId, nodeType, apiVersion);
-               if( depList.isEmpty() ){
-                       return false;
-               }
-               else {
-                       return true;
-               }
-
-       }// End needsADepNode4Uniqueness()
-       
-       /**
-        * Needs A dep node 4 uniqueness.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeType the node type
-        * @return the boolean
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       private static Boolean needsADepNode4Uniqueness(String transId, String fromAppId, String nodeType)throws AAIException{
-               return needsADepNode4Uniqueness( transId,  fromAppId,  nodeType,  null);
-       }
-
-       /**
-        * Node type A can depend on B.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeTypeA the node type A
-        * @param nodeTypeB the node type B
-        * @param apiVersion the api version
-        * @return the boolean
-        * @throws AAIException the AAI exception
-        */
-       public static Boolean nodeTypeACanDependOnB(String transId, String fromAppId, String nodeTypeA, String nodeTypeB, String apiVersion)
-                       throws AAIException{
-               // Note: the passed in nodeType could really be a nodeTypeCategory.  That is handled by getDepNodeTypes()
-
-               ArrayList <String> depList = getDepNodeTypes(transId, fromAppId, nodeTypeA, apiVersion);
-               if( depList.isEmpty() ){
-                       return false;
-               }
-               else if( depList.contains(nodeTypeB) ){
-                       return true;
-               }
-               else { 
-                       return false;
-               }
-
-       }// End nodeTypeACanDependOnB()
-       
-       /**
-        * Node type A can depend on B.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeTypeA the node type A
-        * @param nodeTypeB the node type B
-        * @return the boolean
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       private static Boolean nodeTypeACanDependOnB(String transId, String fromAppId, String nodeTypeA, String nodeTypeB)
-                       throws AAIException{
-               return nodeTypeACanDependOnB( transId,  fromAppId,  nodeTypeA,  nodeTypeB, null);
-       }
-
-       /**
-        * Figure dep node type for request.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeType the node type
-        * @param requestParamHash the request param hash
-        * @param apiVersion the api version
-        * @return the string
-        * @throws AAIException the AAI exception
-        */
-       public static String figureDepNodeTypeForRequest(String transId, String fromAppId, String nodeType, 
-                       HashMap<String,Object> requestParamHash, String apiVersion )throws AAIException{
-               /*
-                * This is ugly.   But if the passed-in nodeType is dependent on another nodeType for 
-                * uniqueness, we need to return what that dependent node-type is.  The ugly comes in
-                * because a node can be dependent on more than one type of node.   So, to tell which one
-                * is going to apply, we root through the passed request parameters to see which of 
-                * the possible dependent node types is being used.
-                * Note -- if there comes a day when there are so many dependencies that the request could
-                * have more than one that match -- Then we need to think up something new.   But for now,
-                * we have to assume that if there are more than one legal dep-node-types, only one will
-                * be represented in the requestHash data.  >>> NOTE >>> That day has come.  For
-                * the upstreamers will send in a LinkedHashMap instead of just an unordered
-                * HashMap so we can look in order for the dependent node.
-                * 
-                */
-
-               if( requestParamHash == null ){
-                       throw new AAIException("AAI_6120", "Bad param:  null requestParamHash "); 
-               }
-
-               ArrayList <String> depNodeTypes = getDepNodeTypes(transId, fromAppId, nodeType, apiVersion);
-               if( depNodeTypes.isEmpty() ){
-                       // This kind of node is not dependent on any other
-                       //aaiLogger.debug(logline, " (not dependent) - end ");
-                       return "";
-               }
-               else if( depNodeTypes.size() == 1 ){
-                       // This kind of node can only depend on one other nodeType - so return that.
-                       //aaiLogger.debug(logline, " (depends on " + depNodeTypes.get(0) + " - end ");
-                       return depNodeTypes.get(0);
-               }
-               else {
-                       // We need to look to find the first of the dep-node types that is represented in the passed-in
-                       // request data.  That will be the one we need to use.
-
-                       // first find out what node-types are represented in the requestHash
-                       
-                       Iterator <Map.Entry<String,Object>>it = requestParamHash.entrySet().iterator();
-                       while( it.hasNext() ){
-                               Map.Entry <String,Object>pairs = (Map.Entry<String,Object>)it.next();
-                               String k = (pairs.getKey()).toString();
-                               int periodLoc = k.indexOf(".");
-                               if( periodLoc <= 0 ){
-                                       throw new AAIException("AAI_6120", "Bad filter param key passed in: [" + k + "].  Expected format = [nodeName.paramName]\n"); 
-                               }
-                               else {
-                                       String nty = k.substring(0,periodLoc);
-                                       if( depNodeTypes.contains(nty) ){
-                                               // This is the first possible dep. node type we've found for the passed in data set
-                                               return nty;
-                                       }
-                               }
-                       }
-
-               }
-
-               // It's not an error if none is found - the caller needs to deal with cases where there
-               // should be a dep. node identified but isn't.
-               //aaiLogger.debug(logline, " no dep NT found - end ");
-               return "";
-
-       }// End of figureDepNodeTypeForRequest()
-       
-       /**
-        * Figure dep node type for request.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeType the node type
-        * @param requestParamHash the request param hash
-        * @return the string
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static String figureDepNodeTypeForRequest(String transId, String fromAppId, String nodeType, 
-                       HashMap<String,Object> requestParamHash )throws AAIException{
-                return figureDepNodeTypeForRequest( transId,  fromAppId,  nodeType, requestParamHash, null);
-       }
-       
-       /**
-        * Detach connected nodes.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propFilterHash the prop filter hash
-        * @param startNodeVal the start node val
-        * @param autoDeleteOrphans the auto delete orphans
-        * @param apiVersion the api version
-        * @return deletedNodeCount
-        * @throws AAIException the AAI exception
-        */
-       public static int detachConnectedNodes( String transId, String fromAppId, TitanTransaction graph, String nodeType,
-                       HashMap<String,Object> propFilterHash, TitanVertex startNodeVal, boolean autoDeleteOrphans, String apiVersion ) throws AAIException{
-
-               /*  Find nodes that are attached to this node which meet the nodeType/filterParams criteria.
-                *  Remove the edges that go to those nodes.
-                *  If that turns any of the nodes into an orphan, then delete it if the autoDeleteOrphans flag is set.
-                *  Return a count of how many nodes were actually deleted (not just detached).
-                */
-
-               int deletedCount = 0;
-
-               if( startNodeVal == null ){
-                       // They should have passed in the node that this query starts from
-                       throw new AAIException("AAI_6109", "null startNode object passed to detachConnectedNodes()."); 
-               }
-
-               // We want to loop through the connected Nodes that we found.
-               // For each connected Node, we'll get the all edges that start from that node and look for the one
-               //     that connects back to our startNode.
-               // Only delete the edge that connects back to our startNode.
-               // then autoDeleteOrphans flag is set, then delete the connectedNode if it's now orphaned.
-               //      
-
-               String startNodeVId =  startNodeVal.id().toString();
-               ArrayList<TitanVertex> conNodeList = getConnectedNodes( transId, fromAppId, graph, nodeType, propFilterHash, startNodeVal, apiVersion, false );
-               Iterator<TitanVertex> conVIter = conNodeList.iterator();
-               while( conVIter.hasNext() ){            
-                       TitanVertex connectedVert = conVIter.next();
-                       boolean isFirstOne = true;
-                       Iterator<Edge> eI = connectedVert.edges(Direction.BOTH);
-                       while( eI.hasNext() ){
-                               TitanEdge ed = (TitanEdge) eI.next();
-                               TitanVertex otherVtx = (TitanVertex) ed.otherVertex(connectedVert);
-                               String otherSideLookingBackVId =  otherVtx.id().toString();
-                               if( startNodeVId.equals(otherSideLookingBackVId) ){
-                                       // This is an edge from the connected node back to our starting node
-                                       if( isFirstOne && !eI.hasNext() && autoDeleteOrphans ){
-                                               // This was the one and only edge for this connectedNode, so 
-                                               // delete the node and edge since flag was set 
-                                               String resVers = connectedVert.<String>property("resource-version").orElse(null);
-                                               removeAaiNode( transId, fromAppId, graph, connectedVert,  "USE_DEFAULT", apiVersion, resVers);
-                                               deletedCount = deletedCount + 1;
-                                       }
-                                       else {
-                                               removeAaiEdge( transId, fromAppId, graph, ed );
-                                       }
-                               }
-                               isFirstOne = false;
-                       }
-               }
-               return deletedCount;
-
-       } // end of detachConnectedNodes()
-
-
-
-       /**
-        * Detach connected nodes.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propFilterHash the prop filter hash
-        * @param startNodeVal the start node val
-        * @param autoDeleteOrphans the auto delete orphans
-        * @return the int
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static int detachConnectedNodes( String transId, String fromAppId, TitanTransaction graph, String nodeType,
-                       HashMap<String,Object> propFilterHash, TitanVertex startNodeVal, boolean autoDeleteOrphans ) throws AAIException{
-               return detachConnectedNodes(  transId,  fromAppId,  graph,  nodeType,
-                               propFilterHash,  startNodeVal,  autoDeleteOrphans, null);
-       }
-       
-       /**
-        * Gets the nodes.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propFilterHash the prop filter hash
-        * @param noFilterOnPurpose the no filter on purpose
-        * @param apiVersion the api version
-        * @return ArrayList<TitanVertex>
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static ArrayList<TitanVertex> getNodes( String transId, String fromAppId, TitanTransaction graph, String nodeType,
-                       HashMap<String,Object> propFilterHash, Boolean noFilterOnPurpose, String apiVersion ) throws AAIException{
-               boolean skipGroomingFlag = true; 
-               // we will only do real-time grooming if a system variable is set, telling us not to skip it.
-               String skipGroomingStr = AAIConstants.AAI_SKIPREALTIME_GROOMING;
-               if( skipGroomingStr.equals("false") ){
-                       skipGroomingFlag = false;
-               }
-               return( getNodes(transId, fromAppId, graph, nodeType, propFilterHash, noFilterOnPurpose, apiVersion, skipGroomingFlag) );
-       }
-       
-       /**
-        * Gets the nodes.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propFilterHash the prop filter hash
-        * @param noFilterOnPurpose the no filter on purpose
-        * @param apiVersion the api version
-        * @param skipGroomCheck the skip groom check
-        * @return ArrayList<TitanVertex>
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static ArrayList<TitanVertex> getNodes( String transId, String fromAppId, TitanTransaction graph, String nodeType,
-                       HashMap<String,Object> propFilterHash, Boolean noFilterOnPurpose, String apiVersion, boolean skipGroomCheck ) 
-                                       throws AAIException{
-               //  Note - the skipGroomCheck flag is set to true when the DataGrooming tool is using this method to collect
-               //     node data.  When the grooming tool is collecting data, we don't want any nodes skipped, because we
-               //     want details about what nodes/edges are bad - more detail than the check in this method does
-               //     as it checks if a node is ok to return to a caller.
-               
-               /* Use the nodeType + filterParams to find nodes.    
-                */
-               DbMaps dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
-               
-               ArrayList<TitanVertex> returnVertList = new ArrayList<TitanVertex>();
-               if( nodeType == null || nodeType.equals("") ){
-                       // They should have passed in a nodeType
-                       throw new AAIException("AAI_6118", "Required field: nodeType not passed to getNodes()."); 
-               }
-
-               if( !noFilterOnPurpose && (propFilterHash == null || propFilterHash.isEmpty()) ){
-                       // They should have passed at least one property to filter on
-                       throw new AAIException("AAI_6118", "Required field: propFilterHash not passed to getNodes()."); 
-               }
-
-               ArrayList<String> kName = new ArrayList<String>();
-               ArrayList<Object> kVal = new ArrayList<Object>();
-               int i = -1;
-               Collection <String> indexedProps =  dbMaps.NodeMapIndexedProps.get(nodeType); 
-               // First loop through to pick up the indexed-properties if there are any being used
-
-               if( propFilterHash != null ){
-                       Iterator <?> it = propFilterHash.entrySet().iterator();
-                       while( it.hasNext() ){
-                               Map.Entry<?,?> propEntry = (Map.Entry<?,?>) it.next();
-                               String propName = (propEntry.getKey()).toString();
-                               // Don't allow search on properties that do not have SINGLE cardinality
-                               if( !checkPropCardinality(propName, "Set") && !checkPropCardinality(propName, "List")  ){
-                                       if( indexedProps.contains(propName) ){
-                                               i++;
-                                               kName.add(i, propName);
-                                               kVal.add(i, (Object)propEntry.getValue());
-                                       }
-                               }
-                       }
-
-                       // Now go through again and pick up the non-indexed properties
-                       it = propFilterHash.entrySet().iterator();
-                       while( it.hasNext() ){
-                               Map.Entry <?,?> propEntry = (Map.Entry<?,?>)it.next();
-                               String propName = (propEntry.getKey()).toString();
-                               // Don't allow search on properties that do not have SINGLE cardinality
-                               if( !checkPropCardinality(propName, "Set") && !checkPropCardinality(propName, "List")  ){
-                                       if( ! indexedProps.contains(propName) ){
-                                               i++;
-                                               kName.add(i, propName);
-                                               kVal.add(i, (Object)propEntry.getValue());
-                                       }
-                               }
-                       }
-               }
-
-               Iterable <?> verts = null;
-               String propsAndValuesForMsg = "";
-               int topPropIndex = i;
-               if( topPropIndex == -1 ){
-                       // No Filtering -- just go get them all
-                       verts= graph.query().has("aai-node-type",nodeType).vertices();
-                       propsAndValuesForMsg = " ( no filter props ) ";
-               }       
-               else if( topPropIndex == 0 ){
-                       verts= graph.query().has(kName.get(0),kVal.get(0)).has("aai-node-type",nodeType).vertices();
-                       propsAndValuesForMsg = " (" + kName.get(0) + " = " + kVal.get(0) + ") ";
-               }       
-               else if( topPropIndex == 1 ){
-                       verts= graph.query().has(kName.get(0),kVal.get(0)).has(kName.get(1),kVal.get(1)).has("aai-node-type",nodeType).vertices();
-                       propsAndValuesForMsg = " (" + kName.get(0) + " = " + kVal.get(0) + ", " 
-                                       + kName.get(1) + " = " + kVal.get(1) + ") ";
-               }                       
-               else if( topPropIndex == 2 ){
-                       verts= graph.query().has(kName.get(0),kVal.get(0)).has(kName.get(1),kVal.get(1)).has(kName.get(2),kVal.get(2)).has("aai-node-type",nodeType).vertices();
-                       propsAndValuesForMsg = " (" + kName.get(0) + " = " + kVal.get(0) + ", " 
-                                       + kName.get(1) + " = " + kVal.get(1) + ", " 
-                                       + kName.get(2) + " = " + kVal.get(2) +  ") ";
-               }       
-               else if( topPropIndex == 3 ){
-                       verts= graph.query().has(kName.get(0),kVal.get(0)).has(kName.get(1),kVal.get(1)).has(kName.get(2),kVal.get(2)).has(kName.get(3),kVal.get(3)).has("aai-node-type",nodeType).vertices();
-                       propsAndValuesForMsg = " (" + kName.get(0) + " = " + kVal.get(0) + ", " 
-                                       + kName.get(1) + " = " + kVal.get(1) + ", " 
-                                       + kName.get(2) + " = " + kVal.get(2) + ", " 
-                                       + kName.get(3) + " = " + kVal.get(3) +  ") ";
-               }                       
-               else {
-                       String emsg = " -- Sorry -- we only support 4 filter properties in getNodes() for now... \n";
-                       throw new AAIException("AAI_6114", emsg); 
-               }   
-               if( verts != null ){
-                       // We did find some matching vertices
-                       Iterator <?> it = verts.iterator();
-                       while( it.hasNext() ){
-                               TitanVertex v = (TitanVertex)it.next();
-                               
-                               if( skipGroomCheck ){
-                                       // Good or bad, just return everything we find
-                                       returnVertList.add( v );
-                               }
-                               else {
-                                       // Weed out any bad vertices we find
-                                       if( thisVertexNotReachable(transId, fromAppId, graph, v, apiVersion) ){
-                                               LOGGER.info("IN-LINE GROOMING - Unreachable Node DETECTED > skipping it. ");
-                                       }
-                                       else if( thisVertexHasBadEdges(transId, fromAppId, graph, v, apiVersion) ){
-                                               LOGGER.info("IN-LINE GROOMING - BAD EDGE DETECTED > skipping vtxId = [" + v.id() + "] ");
-                                       }
-                                       else if( thisVertexIsAPhantom(transId, fromAppId, graph, v, apiVersion) ){
-                                               LOGGER.info("IN-LINE GROOMING - BAD NODE DETECTED > skipping vtxId = [" + v.id() + "] ");
-                                       }
-                                       else {
-                                               returnVertList.add( v );
-                                       }
-                               }
-                       }
-               }
-               
-               return returnVertList;
-       }
-       
-       /**
-        * Gets the nodes.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propFilterHash the prop filter hash
-        * @param noFilterOnPurpose the no filter on purpose
-        * @return the nodes
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static ArrayList<TitanVertex> getNodes( String transId, String fromAppId, TitanTransaction graph, String nodeType,
-                       HashMap<String,Object> propFilterHash, Boolean noFilterOnPurpose ) throws AAIException{
-               return getNodes(transId,  fromAppId,  graph,  nodeType,
-                               propFilterHash,  noFilterOnPurpose,  null );
-       }
-       // End of getNodes()
-
-
-       /**
-        * Gets the connected children.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param startVtx the start vtx
-        * @param limitToThisNodeType the limit to this node type
-        * @return ArrayList <TitanVertex>
-        * @throws AAIException the AAI exception
-        */
-       public static ArrayList<TitanVertex> getConnectedChildren( String transId, String fromAppId, TitanTransaction graph, 
-                       TitanVertex startVtx, String limitToThisNodeType ) throws AAIException{
-               
-               // Just get child nodes (ie. other end of an OUT edge that is tagged as a parent/Child edge)
-                
-               ArrayList <TitanVertex> childList = new ArrayList <TitanVertex> ();
-               Boolean doNodeTypeCheck = false;
-               if( limitToThisNodeType != null && ! limitToThisNodeType.equals("") ){
-                       doNodeTypeCheck = true;
-               }
-               
-               
-               List<Vertex> verts = graph.traversal().V(startVtx).union(__.inE().has("isParent-REV", true).outV(), __.outE().has("isParent", true).inV()).toList();
-               TitanVertex tmpVtx = null;
-               int vertsSize = verts.size();
-               for (int i = 0; i < vertsSize; i++){
-                       tmpVtx = (TitanVertex) verts.get(i);
-                       if( ! doNodeTypeCheck ){ 
-                               childList.add(tmpVtx);
-                       }
-                       else {
-                               String tmpNT = tmpVtx.<String>property("aai-node-type").orElse(null);
-                               if( tmpNT != null && tmpNT.equals(limitToThisNodeType) ){
-                                       childList.add(tmpVtx);
-                               }
-                       }
-               }
-               
-               return childList;               
-
-       }// End of getConnectedChildren()
-
-
-
-       /**
-        * Gets the connected nodes.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propFilterHash the prop filter hash
-        * @param startNodeVal the start node val
-        * @param apiVersion the api version
-        * @param excludeRecurComingIn the exclude recur coming in
-        * @return ArrayList <TitanVertex>
-        * @throws AAIException the AAI exception
-        */
-       public static ArrayList<TitanVertex> getConnectedNodes( String transId, String fromAppId, TitanTransaction graph, String nodeType,
-                       HashMap<String,Object> propFilterHash, TitanVertex startNodeVal, String apiVersion, Boolean excludeRecurComingIn ) throws AAIException{
-               
-               DbMaps dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
-               /* Get (almost) all the nodes that are connected to this vertex.  
-                * Narrow down what is returned using optional filter parameters nodeType and propFilterHash
-                * NOTE - the default behavior has changed slightly.  For start-Nodes that
-                *        can be recursivly connected, this method will only bring back the same kind of
-                *        connected node by following an OUT edge.   Ie. if the start node is an "model-element", 
-                *        then this method will only follow OUT edges to get to other "model-element" type nodes.
-                */
-
-               String startNodeNT = "";
-               if( startNodeVal == null ){
-                       // They should have passed in the node that this query starts from
-                       throw new AAIException("AAI_6109", "null startNode object passed to getConnectedNodes()."); 
-               }       
-               else {
-                       startNodeNT = startNodeVal.<String>property("aai-node-type").orElse(null);
-               }
-               
-               boolean nodeTypeFilter = false;
-               if( nodeType != null && !nodeType.equals("") ){
-                       // They want to filter using nodeType
-                       if( ! dbMaps.NodeProps.containsKey(nodeType) ){
-                               throw new AAIException("AAI_6115", "Unrecognized nodeType [" + nodeType + "] passed to getConnectedNodes()."); 
-                       }
-                       nodeTypeFilter = true;
-               }  
-               
-               ArrayList <String> excludeVidList = new <String> ArrayList ();
-               if( DbEdgeRules.CanBeRecursiveNT.containsKey(startNodeNT) && excludeRecurComingIn ){
-                       // If we're starting on a nodeType that supports recursion, then find any connected
-                       // nodes that are coming from IN edges so we can exclude them later.
-                       
-                       Iterable <?> vertsR = startNodeVal.query().direction(Direction.IN).vertices();
-                       Iterator <?> vertIR = vertsR.iterator();
-                       while( vertIR != null && vertIR.hasNext() ){
-                               TitanVertex tmpVertIN = (TitanVertex) vertIR.next();
-                               String tmpNT = tmpVertIN.<String>property("aai-node-type").orElse(null);
-                               if( tmpNT != null && tmpNT.equals(startNodeNT) ){
-                                       // We're on a nodetype that supports recursion (like model-element) and we've
-                                       // found an connected Node of this same type on an IN edge - put this 
-                                       // on our excludeList.
-                                       excludeVidList.add( tmpVertIN.id().toString() );
-                               }
-                       }
-               }
-       
-               boolean propertyFilter = false;
-               if( propFilterHash != null && !propFilterHash.isEmpty() ){
-                       // They want to filter using some properties
-                       Iterator <?> it = propFilterHash.entrySet().iterator();
-                       while( it.hasNext() ){
-                               Map.Entry<?,?> propEntry = (Map.Entry<?,?>)it.next();
-                               String propName = (propEntry.getKey()).toString();
-                               if( ! dbMaps.NodeProps.containsValue(propName) ){
-                                       throw new AAIException("AAI_6116", "Unrecognized property name [" + propName + "] passed to getConnectedNodes()."); 
-                               }
-                               // Don't allow search on properties that do not have SINGLE cardinality
-                               if( !checkPropCardinality(propName, "Set") && !checkPropCardinality(propName, "List")  ){
-                                       propertyFilter = true;
-                               }
-                       }
-               }
-               // If filter-properties were passed in, then look for nodes that have those values.
-               ArrayList<TitanVertex> returnVertList = new ArrayList<TitanVertex>();
-               Iterable<TitanVertex> qResult = null;
-               Iterator<TitanVertex> resultI = null;
-               try {
-                       qResult = startNodeVal.query().vertices();
-                       resultI = qResult.iterator();
-               }
-               catch( NullPointerException npe ){
-                       throw new AAIException("AAI_6125", "Titan null pointer exception trying to get nodes connected to vertexId = " + 
-                                       startNodeVal.id() + ", aai-node-type = [" + startNodeVal.property("aai-node-type") + "]."); 
-               }
-
-               while( resultI != null && resultI.hasNext() ){
-                       boolean addThisOne = true;
-                       TitanVertex tmpV = (TitanVertex)resultI.next();                 
-                       if( tmpV == null ){
-                               LOGGER.info("Titan gave a null vertex when looking for nodes connected to vertexId = " + 
-                                               startNodeVal.id() + ", aai-node-type = [" + startNodeVal.property("aai-node-type") + "].");
-                               // Note - we will skip this one, but try to return any others that we find.
-                               addThisOne = false;
-                       }
-
-               else {
-                               String tmpVid = tmpV.id().toString();
-                               if( nodeTypeFilter ){
-                                       Object nto = tmpV.<Object>property("aai-node-type").orElse(null);
-                                       if( nto == null || !nto.toString().equals(nodeType) ){ 
-                                               //LOGGER.info("Found a connected vertex (vertexId = " + 
-                                               //              tmpVid + "), but we will not collect it.  It had aai-node-type [" +
-                                               //              nto + "], we are looking for [" + nodeType + "]. ");
-                                               // Note - we will skip this one, but try to return any others that we find.
-                                               addThisOne = false;
-                                       }
-                               }
-                               
-                               if( excludeVidList.contains(tmpVid) ){
-                                       LOGGER.info("Found a connected vertex (vertexId = " + 
-                                                       tmpVid + "), but will exclude it since it is on an IN edge and this nodeType " +
-                                                       startNodeNT + " can be recursively attached.");
-                                       // Note - we will skip this one, but try to return any others that we find.
-                                       addThisOne = false;
-                               }
-                       
-                               if( propertyFilter ){
-                                       Iterator <?> it = propFilterHash.entrySet().iterator();
-                                       while( it.hasNext() ){
-                                               Map.Entry <?,?>propEntry = (Map.Entry<?,?>)it.next();
-                                               String propName = (propEntry.getKey()).toString();
-                                               if( checkPropCardinality(propName, "Set") || checkPropCardinality(propName, "List")  ){
-                                                       // Don't allow search on properties that do not have SINGLE cardinality
-                                                       continue;
-                                               }
-                                               Object propVal =  propEntry.getValue();
-                                               Object foundVal = tmpV.<Object>property(propName).orElse(null);
-                                               if( foundVal != null && propVal != null && !foundVal.toString().equals(propVal.toString()) ){
-                                                       addThisOne = false;
-                                                       break;
-                                               }
-                                               else if( (foundVal == null && propVal != null) || (foundVal != null && propVal == null) ){
-                                                       addThisOne = false;
-                                                       break;
-                                               }
-                                       }
-                               }
-                       }
-                       if( addThisOne ){
-                               // This node passed the tests -- put it on the return List
-                               returnVertList.add( (TitanVertex)tmpV );
-                       }
-               }
-               //aaiLogger.debug(logline, " end ");
-               return returnVertList;
-
-       }// End of getConnectedNodes()
-
-
-       /**
-        * Gets the connected nodes.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propFilterHash the prop filter hash
-        * @param startNodeVal the start node val
-        * @param apiVersion the api version
-        * @return the connected nodes
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static ArrayList<TitanVertex> getConnectedNodes(String transId, String fromAppId, TitanTransaction graph, String nodeType,
-                       HashMap<String,Object> propFilterHash, TitanVertex startNodeVal, String apiVersion ) throws AAIException {
-               return getConnectedNodes( transId,  fromAppId,  graph,  nodeType,
-                               propFilterHash,  startNodeVal,  apiVersion, true );
-       }
-       
-       /**
-        * Gets the connected nodes.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param nodeType the node type
-        * @param propFilterHash the prop filter hash
-        * @param startNodeVal the start node val
-        * @return the connected nodes
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static ArrayList<TitanVertex> getConnectedNodes(String transId, String fromAppId, TitanTransaction graph, String nodeType,
-                       HashMap<String,Object> propFilterHash, TitanVertex startNodeVal ) throws AAIException {
-               return getConnectedNodes( transId,  fromAppId,  graph,  nodeType,
-                               propFilterHash,  startNodeVal,  null, true );
-
-       }
-       
-       /**
-        * Ip address format OK.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param addrVal the addr val
-        * @param addrVer the addr ver
-        * @param apiVersion the api version
-        * @return Boolean
-        * @throws AAIException the AAI exception
-        */
-       public static Boolean ipAddressFormatOK(String transId, String fromAppId, String addrVal, String addrVer, String apiVersion) throws AAIException{
-
-               /* NOTE -- the google methods we use do not allow leading zeros in ipV4 addresses. 
-                *     So it will reject, "22.33.44.001"
-                */
-
-               if( addrVal == null ){
-                       throw new AAIException("AAI_6120", "Bad data (addrVal = null) passed to ipAddressFormatOK()"); 
-               }
-               else if( addrVer == null ){
-                       throw new AAIException("AAI_6120", "Bad data (addrType = null) passed to ipAddressFormatOK()"); 
-               }
-
-               Boolean retVal = false;
-               Boolean lookingForV4 = false;
-               Boolean lookingForV6 = false;
-               InetAddress inetAddr = null;
-
-               if( addrVer.equalsIgnoreCase("v4") || addrVer.equals("ipv4") || addrVer.equals("4")){
-                       lookingForV4 = true;
-               }
-               else if( addrVer.equalsIgnoreCase("v6") || addrVer.equals("ipv6") || addrVer.equals("6")){
-                       lookingForV6 = true;
-               }
-               else {
-                       throw new AAIException("AAI_6120", " Bad data for addressVersion [" + addrVer + "] passed to ipAddressFormatOK()"); 
-               }
-
-               try {
-                       inetAddr = InetAddresses.forString(addrVal);
-                       if( inetAddr instanceof Inet4Address ){
-                               if( lookingForV4 ){
-                                       retVal = true;
-                               }
-                               else {
-                                       throw new AAIException("AAI_6120", "Bad data. Address is a V4, but addressType said it should be V6.  [" 
-                                                       + addrVal + "], [" + addrVer + "] passed to ipAddressFormatOK()"); 
-                               }
-                       }
-                       else if( inetAddr instanceof Inet6Address ){
-                               if( lookingForV6 ){
-                                       retVal = true;
-                               }
-                               else {
-                                       throw new AAIException("AAI_6120", "Bad data. Address is a V6, but addressType said it should be V4.  [" 
-                                                       + addrVal + "], [" + addrVer + "] passed to ipAddressFormatOK()."); 
-                               }
-                       }        
-               } 
-               catch (IllegalArgumentException e) {
-                       throw new AAIException("AAI_6120", "Badly formed ip-address:  [" + addrVal + "] passed to ipAddressFormatOK()"); 
-               }
-
-               return retVal;
-
-       }//end of ipAddressFormatOk()
-       
-       /**
-        * Ip address format OK.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param addrVal the addr val
-        * @param addrVer the addr ver
-        * @return the boolean
-        * @throws AAIException the AAI exception
-        */
-       public static Boolean ipAddressFormatOK(String transId, String fromAppId, String addrVal, String addrVer) throws AAIException{
-               return ipAddressFormatOK( transId,  fromAppId,  addrVal,  addrVer, null);
-       }
-       
-       /**
-        * Save aai edge to db.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param edgeLabel the edge label
-        * @param outV the out V
-        * @param inV the in V
-        * @param propHash the prop hash
-        * @param apiVersion the api version
-        * @return TitanEdge
-        * @throws AAIException the AAI exception
-        */
-       private static TitanEdge saveAaiEdgeToDb(String transId, String fromAppId, TitanTransaction graph, String edgeLabel, 
-                       TitanVertex outV, TitanVertex inV, HashMap <String,Object> propHash, String apiVersion) throws AAIException{
-
-               // If this edge doesn't exist yet, then create it.
-
-               // NOTE - the Titan javaDoc says that there might not always be an id for a node.
-               //   This is the internal-titan-unique-id, not any of our data.
-               //   Not sure how to know when it might be there and when it might not?!
-               //   So far, it has worked for all my testing, but this might warrant some
-               //   further investigation.
-
-               TitanEdge existingEdge = null;
-               String inVId =  inV.id().toString();
-               Iterator <Edge> eI = outV.edges(Direction.BOTH, edgeLabel);
-               while( eI.hasNext() ){
-                       TitanEdge ed = (TitanEdge) eI.next();
-                       TitanVertex otherVtx = (TitanVertex) ed.otherVertex(outV);
-                       if( (otherVtx.id().toString()).equals(inVId) ){
-                               // NOTE -?- Not sure -- at some point we might want to check the edgeLabels also since  we might
-                               //   want to allow two different-type edges between the same two vertexes?  (or maybe not.)
-                               existingEdge = ed;
-                               break;
-                       }
-               }
-
-               if( existingEdge != null ){
-                       // This is just an UPDATE
-                       for( Map.Entry<String, Object> entry : propHash.entrySet() ){
-                               LOGGER.debug("update edge property/val = [" + entry.getKey() + "]/[" + entry.getValue() + "]");
-                               existingEdge.property( entry.getKey(), entry.getValue() );
-                       }
-
-                       return( existingEdge );
-               }
-               else {
-                       // This is an ADD
-                       
-                       // Uniqueness double-check.   This is just to catch the possibility that at the transaction layer,
-                       //    if data came in for two identical nodes that point to the same dependant node (for uniqueness), 
-                       //    we would only be able to catch the problem at the time the edge to the second node is added.   
-                       //    For example - if they had a VM and then got a request to add two ipAddress nodes, but some 
-                       //    bad data was passed and those two ipAddress nodes were identical -- we'd want to catch it.
-                       String outV_NType = outV.<String>property("aai-node-type").orElse(null);
-                       String inV_NType = inV.<String>property("aai-node-type").orElse(null);
-                       if( needsADepNode4Uniqueness(transId, fromAppId, outV_NType, apiVersion)  
-                                       &&  nodeTypeACanDependOnB(transId, fromAppId, outV_NType, inV_NType, apiVersion) ){
-                               // The out-Vertex has a uniqueness dependency on the in-vertex
-                               // Make sure we haven't already added an node/edge like this in this transaction
-                               HashMap <String, Object> nodeKeyPropsHash = getNodeKeyPropHash(transId, fromAppId, graph, outV); 
-                               ArrayList<TitanVertex> resultList = new ArrayList<TitanVertex>();
-                               resultList = DbMeth.getConnectedNodes("transId", "fromAppId", graph, outV_NType, nodeKeyPropsHash, inV, apiVersion, false);
-                               if( resultList.size() > 0 ){
-                                       String propInfo = "";
-                                       if( nodeKeyPropsHash != null ){
-                                               propInfo = nodeKeyPropsHash.toString();
-                                       }
-                                       throw new AAIException("AAI_6117", "Failed to add edge.  This node (" + inV_NType + ") already has an edge to a " + outV_NType + 
-                                                       " node with kepProps [" + propInfo + "]");  
-                               }
-                       }
-                       else if( needsADepNode4Uniqueness(transId, fromAppId, inV_NType, apiVersion)  
-                                       &&  nodeTypeACanDependOnB(transId, fromAppId, inV_NType, outV_NType, apiVersion) ){     
-                               // The in-Vertex has a uniqueness dependency on the out-vertex
-                               // Make sure we haven't already added an node/edge like this in this transaction
-                               HashMap <String, Object> nodeKeyPropsHash = getNodeKeyPropHash(transId, fromAppId, graph, inV);
-                               ArrayList<TitanVertex> resultList = new ArrayList<TitanVertex>();
-                               resultList = DbMeth.getConnectedNodes("transId", "fromAppId", graph, inV_NType, nodeKeyPropsHash, outV, apiVersion, false);
-                               if( resultList.size() > 0 ){
-                                       String propInfo = "";
-                                       if( nodeKeyPropsHash != null ){
-                                               propInfo = nodeKeyPropsHash.toString();
-                                       }
-                                       throw new AAIException("AAI_6117", "Failed to add edge.  This node (" + outV_NType + ") already has an edge to a " + inV_NType + 
-                                                       " node with kepProps [" + propInfo + "]");  
-                               }
-                       }
-                       
-                       
-                       // We're good to go to add this edge
-
-                       TitanEdge tEdge =  outV.addEdge( edgeLabel, inV );
-                       // Add the properties to the new Edge
-                       for( Map.Entry<String, Object> entry : propHash.entrySet() ){
-                               tEdge.property( entry.getKey(), entry.getValue() );
-                       }
-                       
-                       // For (resource-id updates) we need to "touch" the vertices on each side of the edge so
-                       // anybody working on one of those vertices will know that something (ADDing this edge) has happened.
-                       touchVertex( transId, fromAppId, inV );
-                       touchVertex( transId, fromAppId, outV );
-                       
-                       return tEdge;
-               }
-
-       }// End saveAaiEdgeToDb()
-
-       
-       
-       /**
-        * Derive edge rule key for this edge.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param tEdge the t edge
-        * @return String - key to look up edgeRule (fromNodeType|toNodeType)
-        * @throws AAIException the AAI exception
-        */
-       public static String deriveEdgeRuleKeyForThisEdge( String transId, String fromAppId, TitanTransaction graph,  
-                       TitanEdge tEdge ) throws AAIException{
-
-               TitanVertex fromVtx = tEdge.outVertex();
-               TitanVertex toVtx = tEdge.inVertex();
-               String startNodeType = fromVtx.<String>property("aai-node-type").orElse(null);
-               String targetNodeType = toVtx.<String>property("aai-node-type").orElse(null);
-               String key = startNodeType + "|" + targetNodeType;
-               if( EdgeRules.getInstance().hasEdgeRule(startNodeType, targetNodeType) ){
-                       // We can use the node info in the order they were given
-                       return( key );
-               }
-               else {
-                       key = targetNodeType + "|" + startNodeType;
-                       if( EdgeRules.getInstance().hasEdgeRule(targetNodeType, startNodeType) ){
-                               return( key );
-                       }
-                       else {
-                               // Couldn't find a rule for this edge
-                               throw new AAIException("AAI_6120", "No EdgeRule found for passed nodeTypes: " + startNodeType + ", " 
-                                               + targetNodeType); 
-                       }
-               }
-       }// end of deriveEdgeRuleKeyForThisEdge()
-       
-       
-
-       /**
-        * Save aai edge to db.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param edgeLabel the edge label
-        * @param outV the out V
-        * @param inV the in V
-        * @param propHash the prop hash
-        * @return the titan edge
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       private static TitanEdge saveAaiEdgeToDb(String transId, String fromAppId, TitanTransaction graph, String edgeLabel, 
-                       TitanVertex outV, TitanVertex inV, HashMap <String,Object> propHash) throws AAIException{
-               return  saveAaiEdgeToDb( transId,  fromAppId,  graph,  edgeLabel, 
-                               outV,  inV, propHash, null);
-       }
-       
-       /**
-        * Persist aai edge.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param startVert the start vert
-        * @param targetVert the target vert
-        * @param apiVersion the api version
-        * @return the titan edge
-        * @throws AAIException the AAI exception
-        */
-       public static TitanEdge persistAaiEdge( String transId, String fromAppId, TitanTransaction graph,  
-                       TitanVertex startVert, TitanVertex targetVert, String apiVersion ) throws AAIException{
-               TitanEdge returnEdge = persistAaiEdge(transId, fromAppId, graph, startVert, targetVert, apiVersion, "");
-               return returnEdge;
-       }
-       
-       /**
-        * Persist aai edge.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param startVert the start vert
-        * @param targetVert the target vert
-        * @param apiVersion the api version
-        * @param edgeType the edge type
-        * @return TitanEdge
-        * @throws AAIException the AAI exception
-        */
-       public static TitanEdge persistAaiEdge( String transId, String fromAppId, TitanTransaction graph,  
-                       TitanVertex startVert, TitanVertex targetVert, String apiVersion, String edgeType ) throws AAIException{
-
-               TitanVertex fromVtx = null;
-               TitanVertex toVtx = null;
-               String startNodeType = startVert.<String>property("aai-node-type").orElse(null);
-               String targetNodeType = targetVert.<String>property("aai-node-type").orElse(null);
-               String fwdRuleKey = startNodeType + "|" + targetNodeType;
-               int fwdRuleCount = 0;
-               String fwdRule = "";
-               String fwdLabel = "";
-               String revRuleKey = targetNodeType + "|" + startNodeType;
-               int revRuleCount = 0;   
-               String revRule = "";
-               String revLabel = "";
-               String edRule = "";
-               String edLabel = "";
-               
-               Boolean checkType = false;
-               if( (edgeType != null) && edgeType != "" ){
-                       checkType = true;
-               }
-               
-               // As of 16-07, it is possible to have more than one kind of edge defined between a given 
-               // pair of nodeTypes.   So we need to check to see if there is only one possibility, or if
-               // we need to look at the edgeType to determine which to use.  
-               // NOTE -- we're only supporting having 2 edges between a given pair of nodeTypes and
-               //    one and only one of them would have to be a parent-child edge.
-               
-               if( DbEdgeRules.EdgeRules.containsKey(fwdRuleKey) ){
-                       Collection <String> edRuleColl = DbEdgeRules.EdgeRules.get(fwdRuleKey);
-                       Iterator <String> ruleItr = edRuleColl.iterator();
-                       while( ruleItr.hasNext() ){
-                               String tmpRule = ruleItr.next();
-                               String [] rules = tmpRule.split(",");
-                               String tmpLabel = rules[0];
-                               String tmpParChild = rules[3];
-                               if( !checkType 
-                                               || (checkType && tmpParChild.equals("true") && edgeType.equals("parentChild"))
-                                               || (checkType && tmpParChild.equals("false") && edgeType.equals("cousin"))   ){
-                                       // Either they didn't want us to check the edgeType or it is a match
-                                       fwdRuleCount++;
-                                       if( fwdRuleCount > 1 ){
-                                               // We found more than one with the given info
-                                               throw new AAIException("AAI_6120", "Multiple EdgeRules found for nodeTypes: [" + startNodeType + "], [" 
-                                                               + targetNodeType + "], edgeType = [" + edgeType + "]."); 
-                                       }
-                                       else {
-                                               fwdRule = tmpRule;
-                                               fwdLabel = tmpLabel;
-                                       }
-                               }
-                       }
-               }
-               
-               // Try it the other way also (unless this is the case of a nodeType recursively pointing to itself 
-               // Ie. the edge rule:  "model-element|model-element"
-               if( !revRuleKey.equals(fwdRuleKey) && DbEdgeRules.EdgeRules.containsKey(revRuleKey) ){
-                       Collection <String> edRuleColl = DbEdgeRules.EdgeRules.get(revRuleKey);
-                       Iterator <String> ruleItr = edRuleColl.iterator();
-                       while( ruleItr.hasNext() ){
-                               String tmpRule = ruleItr.next();
-                               String [] rules = tmpRule.split(",");
-                               String tmpLabel = rules[0];
-                               String tmpParChild = rules[3];
-                               if( !checkType 
-                                               || (checkType && tmpParChild.equals("true") && edgeType.equals("parentChild"))
-                                               || (checkType && tmpParChild.equals("false") && edgeType.equals("cousin"))   ){
-                                       // Either they didn't want us to check the edgeType or it is a match
-                                       revRuleCount++;
-                                       if( revRuleCount > 1 ){
-                                               // We found more than one with the given info
-                                               throw new AAIException("AAI_6120", "Multiple EdgeRules found for nodeTypes: [" + targetNodeType + "], [" 
-                                                               + startNodeType + "], edgeType = [" + edgeType + "]."); 
-                                       }
-                                       else {
-                                               revRule = tmpRule;
-                                               revLabel = tmpLabel;
-                                       }
-                               }
-                       }
-               }
-                       
-               if( (fwdRuleCount == 1) && (revRuleCount == 0) ){
-                       // We can use the node info in the order they were given
-                       fromVtx = startVert;
-                       toVtx = targetVert;
-                       edRule = fwdRule;
-                       edLabel = fwdLabel;
-               }
-               else if( (fwdRuleCount == 0) && (revRuleCount == 1) ){
-                       // We need to switch the vertex order so the edge-direction is correct
-                       toVtx = startVert;
-                       fromVtx = targetVert;
-                       edRule = revRule;
-                       edLabel = revLabel;
-               }
-               else if( (fwdRuleCount == 0) && (revRuleCount == 0) ){
-                       // No edge rule found for this
-                       throw new AAIException("AAI_6120", "No EdgeRule found for passed nodeTypes: " + startNodeType + ", " + targetNodeType 
-                                       + "], checkLabelType = [" + edgeType + "]."); 
-               }       
-               else if( (fwdRuleCount > 0) && (revRuleCount > 0) ){
-                       // We found more than one with the given info
-                       throw new AAIException("AAI_6120", "Multiple EdgeRules (fwd and rev) found for nodeTypes: [" + startNodeType + "], [" 
-                                       + targetNodeType + "], checkLabelType = [" + edgeType + "]."); 
-               }
-               
-               // If we got to this point, we now have a single edge label and we know to and from Vtx.
-               
-               HashMap <String,Object> edgeParamHash = getEdgeTagPropPutHash4Rule(transId, fromAppId, edRule);
-               // We do "source-of-truth" for all edges
-               edgeParamHash.put("source-of-truth", fromAppId );
-
-               TitanEdge returnEdge = saveAaiEdgeToDb(transId, fromAppId, graph, edLabel, fromVtx, toVtx, edgeParamHash, apiVersion);
-
-               return returnEdge;
-
-       }
-       
-       /**
-        * Persist aai edge.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param startVert the start vert
-        * @param targetVert the target vert
-        * @return the titan edge
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static TitanEdge persistAaiEdge( String transId, String fromAppId, TitanTransaction graph,  
-                       TitanVertex startVert, TitanVertex targetVert ) throws AAIException{
-               return persistAaiEdge( transId,  fromAppId,  graph,  
-                               startVert,  targetVert, null);
-       }
-       // End persistAaiEdge()
-
-
-       /**
-        * Persist aai edge.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param edgeLabel the edge label
-        * @param startVert the start vert
-        * @param targetVert the target vert
-        * @param propHash the prop hash
-        * @param addIfNotFound the add if not found
-        * @return the titan edge
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static TitanEdge persistAaiEdge( String transId, String fromAppId, TitanTransaction graph,  
-                       String edgeLabel, TitanVertex startVert, TitanVertex targetVert, 
-                       HashMap <String,Object> propHash, Boolean addIfNotFound ) throws AAIException{  
-
-               /*----- This method is depricated ------
-                *  We will ignore the parameters: edgeLabel, propHash and addIfNotFound
-                *  We will use the remaining params to call the newer version of this method
-                */
-               TitanEdge returnEdge = persistAaiEdge(transId, fromAppId, graph, startVert, targetVert, null);
-
-               return returnEdge;
-
-       }// End depricated version of persistAaiEdge()
-
-
-       /**
-        * Persist aai edge with dep params.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param startVert the start vert
-        * @param targetNodeType the target node type
-        * @param targetNodeParamHash the target node param hash
-        * @param apiVersion the api version
-        * @return TitanEdge
-        * @throws AAIException the AAI exception
-        */
-       public static TitanEdge persistAaiEdgeWithDepParams( String transId, String fromAppId, TitanTransaction graph,  
-                       TitanVertex startVert, String targetNodeType, HashMap <String,Object> targetNodeParamHash, String apiVersion) throws AAIException{
-
-               TitanVertex targetVert = getUniqueNodeWithDepParams( transId, fromAppId, graph, targetNodeType, targetNodeParamHash, apiVersion );
-               TitanEdge returnEdge = persistAaiEdge(transId, fromAppId, graph, startVert, targetVert, apiVersion);
-
-               return returnEdge;
-
-       }// End persistAaiEdgeWithDepParams()
-       
-       // Version that lets you pass in an edgeType ("parentChild" or "cousin" since it sometimes cannot be determined 
-       /**
-        * Persist aai edge with dep params.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param startVert the start vert
-        * @param targetNodeType the target node type
-        * @param targetNodeParamHash the target node param hash
-        * @param apiVersion the api version
-        * @param edgeType the edge type
-        * @return the titan edge
-        * @throws AAIException the AAI exception
-        */
-       // from the two nodeTypes anymore (16-07)
-       public static TitanEdge persistAaiEdgeWithDepParams( String transId, String fromAppId, TitanTransaction graph,  
-                       TitanVertex startVert, String targetNodeType, HashMap <String,Object> targetNodeParamHash, 
-                       String apiVersion, String edgeType) throws AAIException{
-               TitanVertex targetVert = getUniqueNodeWithDepParams( transId, fromAppId, graph, targetNodeType, targetNodeParamHash, apiVersion );
-               TitanEdge returnEdge = persistAaiEdge(transId, fromAppId, graph, startVert, targetVert, apiVersion, edgeType);
-
-               return returnEdge;
-
-       }// End persistAaiEdgeWithDepParams()
-       
-       /**
-        * Persist aai edge with dep params.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param startVert the start vert
-        * @param targetNodeType the target node type
-        * @param targetNodeParamHash the target node param hash
-        * @return the titan edge
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static TitanEdge persistAaiEdgeWithDepParams( String transId, String fromAppId, TitanTransaction graph,  
-                       TitanVertex startVert, String targetNodeType, HashMap <String,Object> targetNodeParamHash) throws AAIException{
-               return persistAaiEdgeWithDepParams(  transId,  fromAppId,  graph,  
-                                startVert,  targetNodeType,  targetNodeParamHash, null);
-       }
-
-       /**
-        * Gets the node key prop hash.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param vtx the vtx
-        * @return nodeKeyPropHash
-        * @throws AAIException the AAI exception
-        */
-       public static HashMap <String, Object> getNodeKeyPropHash( String transId, String fromAppId, TitanTransaction graph, TitanVertex vtx) throws AAIException{
-
-               if( vtx == null ){
-                       throw new AAIException("AAI_6109", "null node object passed to getNodeKeyPropHash().");
-               }
-               
-               DbMaps dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
-               
-               String nType = vtx.<String>property("aai-node-type").orElse(null);
-               if( ! dbMaps.NodeKeyProps.containsKey(nType) ){
-                       // Problem if no key Properties defined for this nodeType
-                       String defVer = AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP);
-                       throw new AAIException("AAI_6105", "No node-key-properties defined in dbMaps for nodeType = " + nType + " (ver=" + defVer + ")"); 
-               }
-
-               HashMap <String,Object>nodeKeyPropsHash = new HashMap<String,Object>();
-               Collection <String> keyProps =  dbMaps.NodeKeyProps.get(nType);
-               Iterator <String> keyPropI = keyProps.iterator();
-               while( keyPropI.hasNext() ){
-                       String propName = keyPropI.next();
-                       Object value = (Object) vtx.<Object>property(propName).orElse(null); 
-                       nodeKeyPropsHash.put(propName, value);
-               }
-
-               return nodeKeyPropsHash;
-
-       }// End of getNodeKeyPropHash()
-
-       /**
-        * Gets the node name prop hash.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param vtx the vtx
-        * @param apiVersion the api version
-        * @return nodeKeyPropHash
-        * @throws AAIException the AAI exception
-        */
-       public static HashMap <String, Object> getNodeNamePropHash( String transId, String fromAppId, TitanTransaction graph, TitanVertex vtx, String apiVersion) throws AAIException{
-
-               if( vtx == null ){
-                       throw new AAIException("AAI_6109", "null node object passed to getNodeNamePropHash()." );
-               }
-
-               String nType = vtx.<String>property("aai-node-type").orElse(null);
-               HashMap <String,Object>nodeNamePropsHash = new HashMap<String,Object>();
-               Collection <String> keyProps =  DbMeth.getNodeNameProps(transId, fromAppId, nType, apiVersion);
-               Iterator <String> keyPropI = keyProps.iterator();
-               while( keyPropI.hasNext() ){
-                       String propName = keyPropI.next();
-                       Object value = (Object) vtx.<Object>property(propName).orElse(null); 
-                       nodeNamePropsHash.put(propName, value);
-               }
-
-               return nodeNamePropsHash;
-
-       }// End of getNodeNamePropHash()
-       
-
-       /**
-        * Removes the aai edge.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param tEdge the t edge
-        * @return void
-        */
-       public static void removeAaiEdge( String transId, String fromAppId, TitanTransaction graph, TitanEdge tEdge){
-               // Before removing the edge, touch the vertices on each side so their resource-versions will get updated 
-               TitanVertex tmpVIn = tEdge.inVertex();
-               touchVertex( transId, fromAppId, tmpVIn );
-                
-               TitanVertex tmpVOut = tEdge.outVertex();
-               touchVertex( transId, fromAppId, tmpVOut );
-
-               // Remove the passed in edge.
-               tEdge.remove();
-
-       }// end of removeAaiEdge()
-
-
-       /**
-        * Removes the aai node.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param thisVtx the this vtx
-        * @param scopeParam the scope param
-        * @param apiVersion the api version
-        * @param resourceVersion the resource version
-        * @throws AAIException the AAI exception
-        */
-       public static void removeAaiNode( String transId, String fromAppId, TitanTransaction graph, TitanVertex thisVtx, String scopeParam, 
-                       String apiVersion, String resourceVersion ) throws AAIException{
-               // Note: the resource Version Override flag is only set to true when called by the Model Delete code which
-               //    has no way to know the resource-versions of nodes at lower-levels of it's model topology.
-               Boolean resVersionOverrideFlag = false;
-               removeAaiNode( transId, fromAppId, graph, thisVtx, scopeParam, apiVersion, resourceVersion, resVersionOverrideFlag );
-       }
-       
-
-       /**
-        *  <pre>
-        *  Possible values for deleteScope can be:
-        *      USE_DEFAULT - Get the scope from ref data for this node
-        *      THIS_NODE_ONLY (but should fail if it there are nodes that depend on it for uniqueness)
-        *      CASCADE_TO_CHILDREN  - will look for OUT-Edges that have parentOf/hasDelTarget = true and follow those down
-        *      ERROR_4_IN_EDGES_OR_CASCADE - combo of error-if-any-IN-edges + CascadeToChildren
-        *      ERROR_IF_ANY_IN_EDGES - Fail if this node has any existing IN edges 
-        *      ERROR_IF_ANY_EDGES - Fail if this node has any existing edges at all!
-        *  </pre>.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param thisVtx the this vtx
-        * @param scopeParam the scope param
-        * @param apiVersion the api version
-        * @param resourceVersion the resource version
-        * @param resVerOverride the res ver override
-        * @return void
-        * @throws AAIException the AAI exception
-        */
-       public static void removeAaiNode( String transId, String fromAppId, TitanTransaction graph, TitanVertex thisVtx, String scopeParam, 
-                       String apiVersion, String resourceVersion, Boolean resVerOverride ) throws AAIException{
-               String nodeType2Del = thisVtx.<String>property("aai-node-type").orElse(null);
-               String deleteScope = scopeParam;
-               if( scopeParam.equals("USE_DEFAULT") ){
-                       deleteScope =   getDefaultDeleteScope(transId, fromAppId, nodeType2Del, apiVersion);
-               }
-               
-               if( !resVerOverride && needToDoResourceVerCheck(apiVersion, false) ){
-                       // Need to check that they knew what they were deleting
-                       String existingResVer = thisVtx.<String>property("resource-version").orElse(null);
-                       if( resourceVersion == null || resourceVersion.equals("") ){
-                               throw new AAIException("AAI_6130", "Resource-version not passed for delete of = " + nodeType2Del); 
-                       }
-                       else if( (existingResVer != null) && !resourceVersion.equals(existingResVer) ){
-                               throw new AAIException("AAI_6131", "Resource-version MISMATCH for delete of = " + nodeType2Del); 
-                       }
-               }
-
-               if( !deleteScope.equals("THIS_NODE_ONLY")
-                               && !deleteScope.equals("CASCADE_TO_CHILDREN")
-                               && !deleteScope.equals("ERROR_4_IN_EDGES_OR_CASCADE")
-                               && !deleteScope.equals("ERROR_IF_ANY_EDGES")
-                               && !deleteScope.equals("ERROR_IF_ANY_IN_EDGES") ){
-                       throw new AAIException("AAI_6120", "Unrecognized value in deleteScope:  [" + deleteScope + "]."); 
-               }
-
-               if( deleteScope.equals("ERROR_IF_ANY_EDGES") ){
-                       if ( thisVtx.edges(Direction.BOTH).hasNext() ) {
-                               throw new AAIException("AAI_6110", "Node cannot be deleted because it still has Edges and the ERROR_IF_ANY_EDGES scope was used."); 
-                       }
-               } 
-               else if( deleteScope.equals("ERROR_IF_ANY_IN_EDGES") || deleteScope.equals("ERROR_4_IN_EDGES_OR_CASCADE") ){
-                       Iterator <Edge> eI = thisVtx.edges(Direction.IN);
-                       boolean onlyHasParent = false;
-                       Edge temp = null;
-                       if( eI != null && eI.hasNext() ){
-                               temp = eI.next();
-                               Boolean isParent = temp.<Boolean>property("isParent").orElse(null);
-                               if (isParent != null && isParent && !eI.hasNext()) {
-                                       onlyHasParent = true;
-                               }
-                               
-                               if (!onlyHasParent) {
-                                       throw new AAIException("AAI_6110", "Node cannot be deleted because it still has Edges and the " + deleteScope + " scope was used.");
-                               }
-                       }
-               }
-               else if( deleteScope.equals("THIS_NODE_ONLY")){
-                       // Make sure nobody depends on this node.
-                       Iterator<Edge> eI = thisVtx.edges(Direction.BOTH);
-                       while( eI.hasNext() ){
-                               TitanEdge ed = (TitanEdge) eI.next();
-                               TitanVertex otherVtx = (TitanVertex) ed.otherVertex(thisVtx);
-                               String nodeTypeA = otherVtx.<String>property("aai-node-type").orElse(null);
-                               if( nodeTypeACanDependOnB(transId, fromAppId, nodeTypeA, nodeType2Del, apiVersion)){
-                                       // We're only supposed to delete this node - but another node is dependant on it,
-                                       // so we shouldn't delete this one.
-                                       throw new AAIException("AAI_6110", "Node cannot be deleted using scope = " + deleteScope + 
-                                                       " another node (type = " + nodeTypeA + ") depends on it for uniqueness."); 
-                               }
-                       }
-               }
-
-               // We've passed our checks - so do some deleting of edges and maybe pass 
-               //     the delete request down to children or delete-targets.
-
-               // First we deal with the "IN"-Edges which can't have children/delete-targets which
-               // by definition (of "IN") on the other end
-               Iterator <Edge> eI_In = thisVtx.edges(Direction.IN);
-               while( eI_In.hasNext() ){
-                       TitanEdge ed = (TitanEdge) eI_In.next();
-                       
-                       //- "touch" vertex on other side of this edge so it gets a fresh resource-version
-                       TitanVertex tmpVOther = ed.otherVertex(thisVtx);
-                       touchVertex( transId, fromAppId, tmpVOther );
-                       
-                       ed.remove();
-               }
-
-               // Now look at the "OUT"-edges which might include children or delete-targets
-               String cascadeMsg = "This nt = " + nodeType2Del + ", Cascading del to: ";
-               Iterator <Edge> eI_Out = thisVtx.edges(Direction.OUT);
-               if( !eI_Out.hasNext() ){
-                       cascadeMsg = cascadeMsg + "[no children for this node]";
-               }
-               while( eI_Out.hasNext() ){
-                       TitanEdge ed = (TitanEdge) eI_Out.next();
-                       
-                       // "touch" vertex on other side of this edge so it gets a fresh resource-version
-                       TitanVertex tmpVOther = ed.otherVertex(thisVtx);
-                       touchVertex( transId, fromAppId, tmpVOther );
-
-                       Boolean otherVtxAChild = ed.<Boolean>property("isParent").orElse(null);
-                       if( otherVtxAChild == null ){
-                               otherVtxAChild = false;
-                       }
-
-                       Boolean otherVtxADeleteTarget = ed.<Boolean>property("hasDelTarget").orElse(null);
-                       if( otherVtxADeleteTarget == null ){
-                               otherVtxADeleteTarget = false;
-                       }
-
-                       if( (otherVtxAChild || otherVtxADeleteTarget) && 
-                                       (deleteScope.equals("CASCADE_TO_CHILDREN") || deleteScope.equals("ERROR_4_IN_EDGES_OR_CASCADE")) ){
-                               // Delete the edge to the child and Pass the delete down to it.
-                               ed.remove();
-                               TitanVertex otherVtx = (TitanVertex) ed.otherVertex(thisVtx);
-                               String vid = otherVtx.id().toString();
-                               String nty = otherVtx.<String>property("aai-node-type").orElse(null);
-                               String resVers = otherVtx.<String>property("resource-version").orElse(null);
-                               cascadeMsg = cascadeMsg + "[" + nty + ":" + vid + "]";
-                               removeAaiNode(transId, fromAppId, graph, otherVtx, "CASCADE_TO_CHILDREN", apiVersion, resVers);
-                       }
-                       else {
-                               // The other node is not a child or deleteTarget.  Delete the edge to it if it is not
-                               // dependent (Should never be dependent since it's not a child/delTarget...  but 
-                               // someone could create a node that was dependent for Uniqueness without
-                               // being a child/target.
-
-                               // DEBUG -- eventually add the check for dependancy that isn't on a parent-type or delTarget-type edge
-                               ed.remove();
-                       }
-               }
-               
-               LOGGER.info(cascadeMsg);
-
-               Iterator<Edge> eI = thisVtx.edges(Direction.BOTH);
-               if( ! eI.hasNext() ){
-                       // By this point, either there were no edges to deal with, or we have dealt with them.
-                       thisVtx.remove();
-               }
-               else {
-                       // Something went wrong and we couldn't delete all the edges for this guy.
-                       throw new AAIException("AAI_6110", "Node could be deleted because it unexpectedly still has Edges.\n"); 
-               }
-       }
-       
-       
-       /**
-        * Removes the aai node.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param thisVtx the this vtx
-        * @param scopeParam the scope param
-        * @return void
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static void removeAaiNode( String transId, String fromAppId, TitanTransaction graph, TitanVertex thisVtx, String scopeParam) throws AAIException{
-               removeAaiNode(transId, fromAppId, graph, thisVtx, scopeParam, null, null);
-       }
-       
-       /**
-        * Removes the aai node.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param thisVtx the this vtx
-        * @param scopeParam the scope param
-        * @param apiVersion the api version
-        * @throws AAIException the AAI exception
-        */
-       @Deprecated
-       public static void removeAaiNode( String transId, String fromAppId, TitanTransaction graph, TitanVertex thisVtx, String scopeParam, 
-                       String apiVersion ) throws AAIException{
-               removeAaiNode(transId, fromAppId, graph, thisVtx, scopeParam, apiVersion, null);
-       }
-       // end of removeAaiNode()
-
-
-       /**
-        * Delete all graph data.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @return void
-        */
-       public static void deleteAllGraphData( String transId, String fromAppId, TitanGraph graph ){
-               /** ======================================================================
-                * WARNING -- this removes ALL the data that is currently in the graph.
-                * ======================================================================
-                **/
-                LOGGER.warn("deleteAllGraphData called! Run for the hills!");
-               Iterator<Edge> edges = graph.edges(Direction.BOTH);
-               graph.tx().commit();
-               Edge edge = null;
-               while (edges.hasNext()) {
-                       edge = edges.next();
-                       edges.remove();
-               }
-               graph.tx().commit();
-               Iterator<Vertex> vertices = graph.vertices();
-               graph.tx().commit();
-               Vertex vertex = null;
-               while (vertices.hasNext()) {
-                       vertex = vertices.next();
-                       vertex.remove();
-               }
-               graph.tx().commit();
-       }
-
-
-       /**
-        * Show all edges for node.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param tVert the t vert
-        * @return the array list
-        */
-       public static ArrayList <String> showAllEdgesForNode( String transId, String fromAppId, TitanVertex tVert ){ 
-
-               ArrayList <String> retArr = new ArrayList <String> ();
-               Iterator <Edge> eI = tVert.edges(Direction.IN);
-               if( ! eI.hasNext() ){
-                       retArr.add("No IN edges were found for this vertex. ");
-               }
-               while( eI.hasNext() ){
-                       TitanEdge ed = (TitanEdge) eI.next();
-                       String lab = ed.label();
-                       TitanVertex vtx = (TitanVertex) ed.otherVertex(tVert);
-                       if( vtx == null ){
-                               retArr.add(" >>> COULD NOT FIND VERTEX on the other side of this edge edgeId = " + ed.id() + " <<< ");
-                       }
-                       else {
-                               String nType = vtx.<String>property("aai-node-type").orElse(null);
-                               String vid = vtx.id().toString();
-                               retArr.add("Found an IN edge (" + lab + ") to this vertex from a [" + nType + "] node with VtxId = " + vid );
-                               //DEBUG ---
-                               //showPropertiesForEdge(  transId, fromAppId, ed );
-                       }
-               }
-               
-               eI = tVert.edges(Direction.OUT);
-               if( ! eI.hasNext() ){
-                       retArr.add("No OUT edges were found for this vertex. ");
-               }
-               while( eI.hasNext() ){
-                       TitanEdge ed = (TitanEdge) eI.next();
-                       String lab = ed.label();
-                       TitanVertex vtx = (TitanVertex) ed.otherVertex(tVert);
-                       if( vtx == null ){
-                               retArr.add(" >>> COULD NOT FIND VERTEX on the other side of this edge edgeId = " + ed.id() + " <<< ");
-                       }
-                       else {
-                               String nType = vtx.<String>property("aai-node-type").orElse(null);
-                               String vid = vtx.id().toString();
-                               retArr.add("Found an OUT edge (" + lab + ") from this vertex to a [" + nType + "] node with VtxId = " + vid );
-                               //DEBUG ---
-                               //showPropertiesForEdge(  transId, fromAppId, ed );
-                       }
-               }
-               return retArr;
-       }
-
-       
-       /**
-        * Show properties for node.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param tVert the t vert
-        * @return the array list
-        */
-       public static ArrayList <String> showPropertiesForNode( String transId, String fromAppId, TitanVertex tVert ){ 
-
-               ArrayList <String> retArr = new ArrayList <String> ();
-               if( tVert == null ){
-                       retArr.add("null Node object passed to showPropertiesForNode()\n");
-               }
-               else {
-                       String nodeType = "";
-                       //String datType = "";
-                       Object ob = tVert.<Object>property("aai-node-type").orElse(null);
-                       if( ob == null ){
-                               nodeType = "null";
-                       }
-                       else{
-                               nodeType = ob.toString();
-                               //datType = ob.getClass().getSimpleName();
-                       }
-                       
-                       retArr.add(" AAINodeType/VtxID for this Node = [" + nodeType + "/" + tVert.id() + "]");
-                       retArr.add(" Property Detail: ");
-                       Iterator<VertexProperty<Object>> pI = tVert.properties();
-                       while( pI.hasNext() ){
-                               VertexProperty<Object> tp = pI.next();
-                               Object val = tp.value();
-                               //retArr.add("Prop: [" + tp.getPropertyKey() + "], val = [" + val + "], dataType = " + val.getClass() );
-                               retArr.add("Prop: [" + tp.key() + "], val = [" + val + "] ");
-                       }
-               }
-               return retArr;
-       }
-
-       
-       /**
-        * Gets the node name props.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param nodeType the node type
-        * @param apiVersion the api version
-        * @return HashMap of keyProperties
-        * @throws AAIException the AAI exception
-        */
-       public static Collection <String> getNodeNameProps( String transId, String fromAppId, String nodeType, String apiVersion ) throws AAIException{
-
-               DbMaps dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
-               
-               Collection <String> nameProps = new ArrayList <String>();
-               if( dbMaps.NodeNameProps.containsKey(nodeType) ){
-                       nameProps = dbMaps.NodeNameProps.get(nodeType);
-               }
-               else if( DbEdgeRules.NodeTypeCategory.containsKey(nodeType) ){
-                       // The passed-in nodeType was really a nodeCategory, theoretically, all the guys in the same 
-                       // category should have the same name property -- so if they just give us the category, we will
-                       // just give the name info from the first nodeType we encounter of that category.
-                       Collection <String> nTypeCatCol = DbEdgeRules.NodeTypeCategory.get(nodeType);
-                       Iterator <String> catItr = nTypeCatCol.iterator();
-                       String catInfo = "";
-                       if( catItr.hasNext() ){
-                               // For now, we only look for one.
-                               catInfo = catItr.next();
-                       }
-                       else {
-                               throw new AAIException("AAI_6105", "Required Property name(s) not found for nodeType = " + nodeType); 
-                       }
-
-                       String [] flds = catInfo.split(",");
-                       if( flds.length != 4 ){
-                               throw new AAIException("AAI_6121", "Bad EdgeRule.NodeTypeCategory data (itemCount=" + flds.length + ") for nodeType = [" + nodeType + "]."); 
-                       }
-
-                       String nodeTypesString = flds[0];
-                       String [] nodeTypeNames = nodeTypesString.split("\\|");
-                       if( nodeTypeNames != null && nodeTypeNames.length > 0 ){
-                               // We'll just use the first one
-                               String nt = nodeTypeNames[0];
-                               nameProps = dbMaps.NodeNameProps.get(nt);
-                       }
-               }
-               
-               
-               // Note - it's ok if there was no defined name property for this nodeType.
-               
-               return nameProps;
-
-       }// end of getNodeKeyPropNames
-       
-       
-       /**
-        * Gets the edge tag prop put hash 4 rule.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param edRule the ed rule
-        * @return the edge tag prop put hash 4 rule
-        * @throws AAIException the AAI exception
-        */
-       public static HashMap <String,Object> getEdgeTagPropPutHash4Rule( String transId, String fromAppId, String edRule ) 
-                       throws AAIException{ 
-               // For a given edgeRule - already pulled out of DbEdgeRules.EdgeRules --  parse out the "tags" that 
-               //     need to be set for this kind of edge.  
-               // These are the Boolean properties like, "isParent", "usesResource" etc.  
-               HashMap <String,Object> retEdgePropPutMap = new HashMap <String,Object>();
-               
-               if( (edRule == null) || edRule.equals("") ){
-                       // No edge rule found for this
-                       throw new AAIException("AAI_6120", "blank edRule passed to getEdgeTagPropPutHash4Rule()"); 
-               }
-                       
-               int tagCount = DbEdgeRules.EdgeInfoMap.size();
-               String [] rules = edRule.split(",");
-               if( rules.length != tagCount ){
-                       throw new AAIException("AAI_6121", "Bad EdgeRule data (itemCount =" + rules.length + ") for rule = [" + edRule  + "]."); 
-               }
-
-               // In DbEdgeRules.EdgeRules -- What we have as "edRule" is a comma-delimited set of strings.
-               // The first item is the edgeLabel.
-               // The second in the list is always "direction" which is always OUT for the way we've implemented it.
-               // Items starting at "firstTagIndex" and up are all assumed to be booleans that map according to 
-               // tags as defined in EdgeInfoMap.
-               // Note - if they are tagged as 'reverse', that means they get the tag name with "-REV" on it
-               for( int i = DbEdgeRules.firstTagIndex; i < tagCount; i++ ){
-                       String booleanStr = rules[i];
-                       Integer mapKey = new Integer(i);
-                       String propName = DbEdgeRules.EdgeInfoMap.get(mapKey);
-                       String revPropName = propName + "-REV";
-                       
-                       if( booleanStr.equals("true") ){
-                               retEdgePropPutMap.put(propName, true);
-                               retEdgePropPutMap.put(revPropName,false);
-                       }
-                       else if( booleanStr.equals("false") ){
-                               retEdgePropPutMap.put(propName, false);
-                               retEdgePropPutMap.put(revPropName,false);
-                       }
-                       else if( booleanStr.equals("reverse") ){
-                               retEdgePropPutMap.put(propName, false);
-                               retEdgePropPutMap.put(revPropName,true);
-                       }
-                       else {
-                               throw new AAIException("AAI_6121", "Bad EdgeRule data for rule = [" + edRule + "], val = [" + booleanStr + "]."); 
-                       }
-                       
-               }
-
-               return retEdgePropPutMap;
-               
-       } // End of getEdgeTagPropPutHash()
-
-
-       
-       /**
-        * Gets the edge tag prop put hash.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param edgeRuleKey the edge rule key
-        * @return the edge tag prop put hash
-        * @throws AAIException the AAI exception
-        */
-       public static Map<String, EdgeRule> getEdgeTagPropPutHash( String transId, String fromAppId, String edgeRuleKey ) 
-                       throws AAIException{ 
-               // For a given edgeRuleKey (nodeTypeA|nodeTypeB), look up the rule that goes with it in
-               // DbEdgeRules.EdgeRules and parse out the "tags" that need to be set on each edge.  
-               // These are the Boolean properties like, "isParent", "usesResource" etc.  
-               // Note - this code is also used by the updateEdgeTags.java code
-
-               String[] edgeRuleKeys = edgeRuleKey.split("\\|");
-               
-               if (edgeRuleKeys.length < 2 || ! EdgeRules.getInstance().hasEdgeRule(edgeRuleKeys[0], edgeRuleKeys[1])) {
-                       throw new AAIException("AAI_6120", "Could not find an DbEdgeRule entry for passed edgeRuleKey (nodeTypeA|nodeTypeB): " + edgeRuleKey + "."); 
-               }
-               
-               Map<String, EdgeRule> edgeRules = EdgeRules.getInstance().getEdgeRules(edgeRuleKeys[0], edgeRuleKeys[1]);
-               
-               return edgeRules;
-               
-       } // End of getEdgeTagPropPutHash()
-
-       
-       /**
-        * This property was put by newer version of code.
-        *
-        * @param apiVersionStr the api version str
-        * @param nodeType the node type
-        * @param propName the prop name
-        * @return true, if successful
-        * @throws AAIException the AAI exception
-        */
-       private static boolean  thisPropertyWasPutByNewerVersionOfCode( String apiVersionStr, 
-                                       String nodeType, String propName) throws AAIException{
-               // We want to return True if the nodeType + property-name combo was introduced AFTER the apiVersion passed.
-               
-               int apiVerInt = 0;
-               int propIntroVerInt = 0;
-               
-               if( apiVersionStr == null || apiVersionStr.equals("") ){
-                       apiVersionStr = org.openecomp.aai.util.AAIApiVersion.get();
-               }
-               apiVerInt = getVerNumFromVerString(apiVersionStr);
-               DbMaps dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
-               String propIntroKey = nodeType + "|" + propName;
-               if( propName.equals("prov-status") ){
-                       // This is a special case -- The dbMaps from v2 has it in there, but it was introduced half way through.  So
-                       // it needs to be catogorized as v3.
-                       propIntroVerInt = 3;
-               }
-               else if( ! dbMaps.PropertyVersionInfoMap.containsKey(propIntroKey) ){
-                       String detail = propIntroKey + " [" + propIntroKey + "] not found in dbMaps.PropertyVersionInfoMap."; 
-                       throw new AAIException("AAI_6121", detail); 
-               }
-               else {
-                       String propIntroVerString = dbMaps.PropertyVersionInfoMap.get(propIntroKey);
-                       propIntroVerInt = getVerNumFromVerString( propIntroVerString );
-               }
-               
-               if( propIntroVerInt > apiVerInt ){
-                       return true;
-               }
-               else {
-                       return false;
-               }
-               
-       } // End of thisPropertyWasPutByNewerVersionOfCode()
-
-       
-       /**
-        * Touch vertex.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param v the v
-        * @return void
-        */
-       public static void touchVertex( String transId, String fromAppId, TitanVertex v ){
-               // We want to "touch" the vertex -- Ie. update it's last-mod-date, last-mod- resource-version to the current date/time
-               if( v != null ){
-                       long unixTimeNow = System.currentTimeMillis() / 1000L;
-                       String timeNowInSec = "" + unixTimeNow;
-                       v.property( "aai-last-mod-ts", timeNowInSec );
-                       v.property( "resource-version", timeNowInSec );
-                       v.property( "last-mod-source-of-truth", fromAppId );
-               }
-       } // End of touchVertex()
-       
-       
-       /**
-        * Check prop cardinality.
-        *
-        * @param propName the prop name
-        * @param cardinalityType the cardinality type
-        * @return boolean
-        * @throws AAIException the AAI exception
-        */
-       public static boolean checkPropCardinality( String propName, String cardinalityType ) throws AAIException {
-               
-               // Return true if the named property is tagged in our dbMaps PropetyDataTypeMap as 
-               // having the passed in cardinality type.  
-               // NOTE: supported cardinality types in dbMaps = "Set" or "List"
-               // In Titan (and ex5.json), those go in as "SET" and "LIST"
-               DbMaps dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
-               
-               if( dbMaps.PropertyDataTypeMap.containsKey(propName) ){
-                       String propDataType = dbMaps.PropertyDataTypeMap.get(propName);
-                       if( propDataType != null && propDataType.startsWith(cardinalityType) ){
-                               return true;
-                       }
-               }
-               return false;
-               
-       } // End of checkPropCardinality()
-       
-       /**
-        * Convert type if needed.
-        *
-        * @param propName the prop name
-        * @param val the val
-        * @return convertedValue (if it was a String but needed to be a Boolean)
-        * @throws AAIException the AAI exception
-        */
-       public static Object convertTypeIfNeeded( String propName, Object val )
-                       throws AAIException {
-               // Make sure the dataType of the passed-in Object matches what the DB expects
-               
-               // NOTE: since this is a fix very late in our dev cycle, we'll just fix the scenarios that
-               //   we're having trouble with which is Strings getting into the db which should be going in as 
-               //   Booleans or Integers.
-               DbMaps dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
-               
-               if( dbMaps.PropertyDataTypeMap.containsKey(propName) ){
-                       String dbExpectedDataType = dbMaps.PropertyDataTypeMap.get(propName);
-                       if( dbExpectedDataType != null 
-                                       && dbExpectedDataType.equals("Boolean") 
-                                       && val != null
-                                       && !(val instanceof Boolean) ){
-                               String valStr = val.toString().trim();
-                               if( valStr.equals("true") || valStr.equals("True") || valStr.equals("TRUE") ){
-                                       return Boolean.valueOf("true");
-                               }
-                               else if( valStr.equals("false") || valStr.equals("False") || valStr.equals("FALSE") ){
-                                       return Boolean.valueOf("false");
-                               }
-                               else {
-                                       String emsg = "Error trying to convert value: [" + valStr + "] to a Boolean for property + " + propName + "\n";
-                                       throw new AAIException("AAI_6120", emsg); 
-                               }
-                       }
-                       else if( dbExpectedDataType != null 
-                                       && dbExpectedDataType.equals("Integer") 
-                                       && val != null 
-                                       && !(val.toString().trim().equals("")) 
-                                       && !(val instanceof Integer) ){
-                               String valStr = val.toString().trim();
-                               Integer newInt;
-                               try {
-                                       newInt = Integer.valueOf(valStr);
-                                       return newInt;
-                               }
-                               catch( Exception e ){
-                                       String emsg = "Error trying to convert value: [" + valStr + "] to an Integer for property + " + propName + "\n";
-                                       throw new AAIException("AAI_6120", emsg); 
-                               }
-                       }
-               }
-               
-               // If it didn't need to be converted, just return it.
-               return val;
-       
-       } // End of convertTypeIfNeeded()
-
-       
-       
-       /**
-        * This vertex not reachable.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param v the v
-        * @param version the version
-        * @return boolean
-        */
-       public static boolean thisVertexNotReachable( String transId, String fromAppId, TitanTransaction graph, TitanVertex v, String version){
-               if( v == null ){
-                       return true;   
-               }
-               else {
-                       try {
-                                v.id().toString();
-                       }
-                       catch( Exception ex ){
-                               // Could not get this -- sometimes we're holding a vertex object that has gotten deleted, so
-                               // when we try to get stuff from it, we get an "Element Has Been Removed" error from Titan
-                               return true;
-                       }
-               }
-               
-               return false;
-               
-       } // End of thisVertexNotReachable()
-
-       /**
-        * This vertex has bad edges.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param v the v
-        * @param version the version
-        * @return boolean
-        */
-       public static boolean thisVertexHasBadEdges( String transId, String fromAppId, TitanTransaction graph, TitanVertex v, String version){
-               
-               Iterator <Edge> eItor = v.edges(Direction.BOTH);
-               while( eItor.hasNext() ){
-                       Edge e = null;
-                       e = eItor.next();
-                       if( e == null ){
-                               return true;
-                       }
-                       Vertex vIn = e.inVertex();
-                       if( (vIn == null) || (vIn.<String>property("aai-node-type").orElse(null) == null) ){
-                                // this is a bad edge because it points to a vertex that isn't there anymore
-                                return true;
-                       }
-                       
-                       Vertex vOut = e.outVertex();
-                       if( (vOut == null) || (vOut.<String>property("aai-node-type").orElse(null) == null) ){
-                                // this is a bad edge because it points to a vertex that isn't there anymore
-                                return true;
-                       }
-               }
-               
-               // If we made it to here, the vertex's edges must be ok.
-               return false;
-               
-       } // End of thisVertexHasBadEdges()
-       
-       
-       /**
-        * This vertex is A phantom.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param v the v
-        * @param version the version
-        * @return boolean
-        * @throws AAIException the AAI exception
-        */
-       public static boolean thisVertexIsAPhantom( String transId, String fromAppId, TitanTransaction graph, TitanVertex v, String version ) 
-                       throws AAIException {
-               
-               
-               // The kind of Phantom we're looking for is the kind that we sometimes get when we do a select without
-               // using key properties.  They can be in the database as a vertex, but the indexes that should point to 
-               // them are not working -- so they cannot be used by normal interfaces (like the REST API) which means
-               // that if we return it, it can mess up a caller who tries to use it.
-               if( v == null ){
-                       return true;   
-               }
-               String thisVid =  v.id().toString();
-               
-               DbMaps dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP));
-               
-               Object propOb = v.<Object>property("aai-node-type").orElse(null);
-               if( propOb == null ){
-                       // This vertex does not have an aai-node-type ---> it is messed up
-                       return true;
-               }
-               String nType = propOb.toString();
-               if(  ! dbMaps.NodeKeyProps.containsKey(nType) ){
-                       // This node Type does not have keys defined
-                       // This could just be bad reference data, so we will not flag this guy, but we
-                       // can't really do our test...
-                       return false;
-               }
-               
-               HashMap <String,Object> propHashWithKeys = new HashMap<String, Object>();
-               Collection <String> keyProps = null;
-               try {
-                       keyProps = getNodeKeyPropNames(transId, fromAppId, nType, version);
-               }
-               catch (AAIException ex) {
-                       // something wrong with getting this guy's key property names - we'll abandon this test...
-                       return false;
-               }
-       
-        Iterator <String> keyPropI = keyProps.iterator();
-        while( keyPropI.hasNext() ){
-               String propName = keyPropI.next();
-               String propVal = "";
-               Object ob = v.<Object>property(propName).orElse(null);
-               if( ob != null ){
-                       propVal = ob.toString();
-               }
-               propHashWithKeys.put(propName, propVal);
-        }
-        try {
-               // Note - We can get more than one back since some nodes need a dep. node for uniqueness.
-               //   We don't care about that -- we just want to make sure we can get this vertex back when
-               //   we're searching with it's indexed fields. 
-               // NOTE - we're passing the skipGroomCheck to getNodes so we don't wind up in an infinite loop
-               ArrayList <TitanVertex> vertList2 = getNodes( transId, fromAppId, graph, nType, propHashWithKeys, false, version, true ); 
-               Iterator<TitanVertex> iter2 = vertList2.iterator(); 
-            while( iter2.hasNext() ){ 
-               TitanVertex tvx2 = iter2.next(); 
-               String foundId = tvx2.id().toString();
-               if( foundId.equals( thisVid ) ){
-                       // We could get back the vertex by looking it up using key properties...  That's good.
-                       return false;
-               }
-            }
-        }
-        catch (Exception e2) {
-                       //String msg = " Error encountered for this vertex id: [" + thisVid + 
-                       //              "]. Caught this exception: " + e2.toString();
-                       // Something messed up - but that doesn't prove that this is a phantom.
-                       return false;
-               }
-               
-        // If we dropped down to here, we have looked but could not pull the vertex out of the
-        //    db using it's key fields, so it gets flagged as a Phantom.
-               return true;
-       
-       } // End of thisVertexIsAPhantom()
-       
-       
-       /**
-        * Gets the node by unique key.
-        *
-        * @param transId the trans id
-        * @param fromAppId the from app id
-        * @param graph the graph
-        * @param aaiUniquekey the aai uniquekey
-        * @return the node by unique key
-        */
-       public TitanVertex getNodeByUniqueKey(String transId, String fromAppId, TitanTransaction graph, String aaiUniquekey) {
-               
-               TitanVertex vert = null;
-               
-               Iterator<?> vertI =  graph.query().has("aai-unique-key", aaiUniquekey).vertices().iterator(); 
-                                               
-               if( vertI != null && vertI.hasNext()) {
-                       // We found a vertex that meets the input criteria. 
-                       vert = (TitanVertex) vertI.next();
-               }
-               
-               return vert;
-       }
-
-
-
-}
-
diff --git a/aai-core/src/main/java/org/openecomp/aai/domain/model/AAIResource.java b/aai-core/src/main/java/org/openecomp/aai/domain/model/AAIResource.java
deleted file mode 100644 (file)
index 2a2cef9..0000000
+++ /dev/null
@@ -1,675 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.openecomp.aai
- * ================================================================================
- * Copyright (C) 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=========================================================
- */
-
-package org.openecomp.aai.domain.model;
-
-import java.util.ArrayList;
-import java.util.Map;
-
-import com.google.common.collect.Multimap;
-
-
-public class AAIResource {
-       private AAIResource parent;
-       private AAIResources children;
-               
-       private AAIResourceKeys aaiResourceKeys;
-       
-       private String namespace; // /Network/Vces/Vce/PortGroups/PortGroup/CvlanTags/CvlanTag -> "Network"
-
-       private String resourceType; // node or container
-       private String resourceClassName; 
-       private String simpleName; // Vce
-       private String fullName; // /Network/Vces/Vce/PortGroups/PortGroup/CvlanTags/CvlanTag
-       private String uri; // /network/vces/vce/{vnf-id}/port-groups/port-group/{interface-name}/cvlan-tags/cvlan-tag/{cvlan-tag}
-       private String apiVersion;
-       private String relationshipListClass;
-       private String relationshipUtils;
-       
-       private Map<String, String>      PropertyDataTypeMap; 
-       private Multimap<String, String> NodeMapIndexedProps;
-       private Multimap<String, String> NodeAltKey1Props;
-       private Multimap<String, String> NodeDependencies;
-       private Multimap<String, String> NodeKeyProps;
-       private Multimap<String, String> NodeReqProps;
-       private Multimap<String, String> NodeNameProps;
-       private Multimap<String, String> NodeUniqueProps;
-       
-       // if new dataTypes are added - make sure to update getAllFields() method below
-       private ArrayList<String> stringFields;
-       private ArrayList<String> stringListFields;
-       private ArrayList<String> longFields;
-       private ArrayList<String> intFields;
-       private ArrayList<String> shortFields;
-       private ArrayList<String> booleanFields;
-               
-       private ArrayList<String> requiredFields;
-       private ArrayList<String> orderedFields;
-       private AAIResource recurseToResource;
-       private boolean allowDirectWrite;
-       private boolean allowDirectRead;
-       private ArrayList<String> autoGenUuidFields;
-       
-       /**
-        * Gets the parent.
-        *
-        * @return the parent
-        */
-       public AAIResource getParent() {
-               return parent;
-       }
-       
-       /**
-        * Sets the parent.
-        *
-        * @param parent the new parent
-        */
-       public void setParent(AAIResource parent) {
-               this.parent = parent;
-       }
-       
-       /**
-        * Gets the children.
-        *
-        * @return the children
-        */
-       public AAIResources getChildren() { 
-               if (this.children == null) { 
-                       this.children = new AAIResources();
-               }
-               return this.children;
-       }
-       
-       /**
-        * Gets the aai resource keys.
-        *
-        * @return the aai resource keys
-        */
-       public AAIResourceKeys getAaiResourceKeys() {
-               if (aaiResourceKeys == null) {
-                       aaiResourceKeys = new AAIResourceKeys();
-               }
-               return aaiResourceKeys;
-       }
-       
-       /**
-        * Gets the namespace.
-        *
-        * @return the namespace
-        */
-       public String getNamespace() {
-               return namespace;
-       }
-       
-       /**
-        * Sets the namespace.
-        *
-        * @param namespace the new namespace
-        */
-       public void setNamespace(String namespace) {
-               this.namespace = namespace;
-       }
-       
-       /**
-        * Gets the resource type.
-        *
-        * @return the resource type
-        */
-       public String getResourceType() {
-               return resourceType;
-       }
-       
-       /**
-        * Sets the resource type.
-        *
-        * @param resourceType the new resource type
-        */
-       public void setResourceType(String resourceType) {
-               this.resourceType = resourceType;
-       }
-       
-       /**
-        * Gets the simple name.
-        *
-        * @return the simple name
-        */
-       public String getSimpleName() {
-               return simpleName;
-       }
-       
-       /**
-        * Sets the simple name.
-        *
-        * @param simpleName the new simple name
-        */
-       public void setSimpleName(String simpleName) {
-               this.simpleName = simpleName;
-       }
-       
-       /**
-        * Gets the full name.
-        *
-        * @return the full name
-        */
-       public String getFullName() {
-               return fullName;
-       }
-       
-       /**
-        * Sets the full name.
-        *
-        * @param fullName the new full name
-        */
-       public void setFullName(String fullName) {
-               this.fullName = fullName;
-       }
-       
-       /**
-        * Gets the uri.
-        *
-        * @return the uri
-        */
-       public String getUri() {
-               return uri;
-       }
-       
-       /**
-        * Sets the uri.
-        *
-        * @param uri the new uri
-        */
-       public void setUri(String uri) {
-               this.uri = uri;
-       }
-       
-       /**
-        * Gets the resource class name.
-        *
-        * @return the resource class name
-        */
-       public String getResourceClassName() {
-               return resourceClassName;
-       }
-       
-       /**
-        * Sets the resource class name.
-        *
-        * @param resourceClassName the new resource class name
-        */
-       public void setResourceClassName(String resourceClassName) {
-               this.resourceClassName = resourceClassName;
-       }
-
-       /**
-        * Gets the property data type map.
-        *
-        * @return the property data type map
-        */
-       public Map<String, String> getPropertyDataTypeMap() {
-               return PropertyDataTypeMap;
-       }
-       
-       /**
-        * Sets the property data type map.
-        *
-        * @param propertyDataTypeMap the property data type map
-        */
-       public void setPropertyDataTypeMap(Map<String, String> propertyDataTypeMap) {
-               PropertyDataTypeMap = propertyDataTypeMap;
-       }
-       
-       /**
-        * Gets the node map indexed props.
-        *
-        * @return the node map indexed props
-        */
-       public Multimap<String, String> getNodeMapIndexedProps() {
-               return NodeMapIndexedProps;
-       }
-       
-       /**
-        * Sets the node map indexed props.
-        *
-        * @param nodeMapIndexedProps the node map indexed props
-        */
-       public void setNodeMapIndexedProps(Multimap<String, String> nodeMapIndexedProps) {
-               NodeMapIndexedProps = nodeMapIndexedProps;
-       }
-       
-       /**
-        * Gets the node key props.
-        *
-        * @return the node key props
-        */
-       public Multimap<String, String> getNodeKeyProps() {     
-               return NodeKeyProps;
-       }
-       
-       /**
-        * Sets the node key props.
-        *
-        * @param nodeKeyProps the node key props
-        */
-       public void setNodeKeyProps(Multimap<String, String> nodeKeyProps) {
-               this.NodeKeyProps = nodeKeyProps;
-       }
-       
-       /**
-        * Gets the node name props.
-        *
-        * @return the node name props
-        */
-       public Multimap<String, String> getNodeNameProps() {
-               return NodeNameProps;
-       }
-       
-       /**
-        * Sets the node name props.
-        *
-        * @param nodeNameProps the node name props
-        */
-       public void setNodeNameProps(Multimap<String, String> nodeNameProps) {
-       
-               NodeNameProps = nodeNameProps;
-       }
-       
-       /**
-        * Gets the node unique props.
-        *
-        * @return the node unique props
-        */
-       public Multimap<String, String> getNodeUniqueProps() {
-               return NodeUniqueProps;
-       }
-       
-       /**
-        * Sets the node unique props.
-        *
-        * @param nodeUniqueProps the node unique props
-        */
-       public void setNodeUniqueProps(Multimap<String, String> nodeUniqueProps) {
-               NodeUniqueProps = nodeUniqueProps;
-       }
-       
-       /**
-        * Gets the node req props.
-        *
-        * @return the node req props
-        */
-       public Multimap<String, String> getNodeReqProps() {
-               return NodeReqProps;
-       }
-       
-       /**
-        * Sets the node req props.
-        *
-        * @param nodeReqProps the node req props
-        */
-       public void setNodeReqProps(Multimap<String, String> nodeReqProps) {
-               NodeReqProps = nodeReqProps;
-       }
-       
-       /**
-        * Gets the api version.
-        *
-        * @return the api version
-        */
-       public String getApiVersion() {
-               return apiVersion;
-       }
-       
-       /**
-        * Sets the api version.
-        *
-        * @param apiVersion the new api version
-        */
-       public void setApiVersion(String apiVersion) {
-               this.apiVersion = apiVersion;
-       }
-       
-       /**
-        * Gets the relationship list class.
-        *
-        * @return the relationship list class
-        */
-       public String getRelationshipListClass() {
-               return relationshipListClass;
-       }
-       
-       /**
-        * Sets the relationship list class.
-        *
-        * @param relationshipListClass the new relationship list class
-        */
-       public void setRelationshipListClass(String relationshipListClass) {
-               this.relationshipListClass = relationshipListClass;
-       }
-       
-       /**
-        * Gets the relationship utils.
-        *
-        * @return the relationship utils
-        */
-       public String getRelationshipUtils() {
-               return relationshipUtils;
-       }
-       
-       /**
-        * Sets the relationship utils.
-        *
-        * @param relationshipUtils the new relationship utils
-        */
-       public void setRelationshipUtils(String relationshipUtils) {
-               this.relationshipUtils = relationshipUtils;
-       }
-       
-       /**
-        * Gets the string fields.
-        *
-        * @return the string fields
-        */
-       public ArrayList<String> getStringFields() {
-               if (this.stringFields == null) {
-                       this.stringFields = new ArrayList<String>();
-               }
-               return this.stringFields;
-       }
-       
-       /**
-        * Sets the string fields.
-        *
-        * @param stringFields the new string fields
-        */
-       public void setStringFields(ArrayList<String> stringFields) {
-               this.stringFields = stringFields;
-       }
-       
-       /**
-        * Gets the string list fields.
-        *
-        * @return the string list fields
-        */
-       public ArrayList<String> getStringListFields() {
-               if (this.stringListFields == null) {
-                       this.stringListFields = new ArrayList<String>();
-               }
-               return this.stringListFields;
-       }
-       
-       /**
-        * Sets the string list fields.
-        *
-        * @param stringListFields the new string list fields
-        */
-       public void setStringListFields(ArrayList<String> stringListFields) {
-               this.stringListFields = stringListFields;
-       }
-       
-       /**
-        * Gets the long fields.
-        *
-        * @return the long fields
-        */
-       public ArrayList<String> getLongFields() {
-               if (this.longFields == null) {
-                       this.longFields = new ArrayList<String>();
-               }
-               return longFields;
-       }
-       
-       /**
-        * Sets the long fields.
-        *
-        * @param longFields the new long fields
-        */
-       public void setLongFields(ArrayList<String> longFields) {
-               this.longFields = longFields;
-       }
-       
-       /**
-        * Gets the int fields.
-        *
-        * @return the int fields
-        */
-       public ArrayList<String> getIntFields() {
-               if (this.intFields == null) {
-                       this.intFields = new ArrayList<String>();
-               }
-               return intFields;
-       }
-       
-       /**
-        * Sets the int fields.
-        *
-        * @param intFields the new int fields
-        */
-       public void setIntFields(ArrayList<String> intFields) {
-               this.intFields = intFields;
-       }
-       
-       /**
-        * Gets the short fields.
-        *
-        * @return the short fields
-        */
-       public ArrayList<String> getShortFields() {
-               if (this.shortFields == null) {
-                       this.shortFields = new ArrayList<String>();
-               }
-               return shortFields;
-       }
-       
-       /**
-        * Sets the short fields.
-        *
-        * @param shortFields the new short fields
-        */
-       public void setShortFields(ArrayList<String> shortFields) {
-               this.shortFields = shortFields;
-       }
-       
-       /**
-        * Gets the boolean fields.
-        *
-        * @return the boolean fields
-        */
-       public ArrayList<String> getBooleanFields() {
-               if (this.booleanFields == null) {
-                       this.booleanFields = new ArrayList<String>();
-               }
-               return booleanFields;
-       }
-       
-       /**
-        * Sets the boolean fields.
-        *
-        * @param booleanFields the new boolean fields
-        */
-       public void setBooleanFields(ArrayList<String> booleanFields) {
-               this.booleanFields = booleanFields;
-       }
-       
-       /**
-        * Gets the required fields.
-        *
-        * @return the required fields
-        */
-       public ArrayList<String> getRequiredFields() {
-               if (this.requiredFields == null) {
-                       this.requiredFields = new ArrayList<String>();
-               }
-               return requiredFields;
-       }
-       
-       /**
-        * Sets the required fields.
-        *
-        * @param requiredFields the new required fields
-        */
-       public void setRequiredFields(ArrayList<String> requiredFields) {
-               this.requiredFields = requiredFields;
-       }
-       
-       /**
-        * Gets the ordered fields.
-        *
-        * @return the ordered fields
-        */
-       public ArrayList<String> getOrderedFields() {
-               if (this.orderedFields == null) { 
-                       this.orderedFields = new ArrayList<String>();
-               }
-               return this.orderedFields;
-       }
-       
-       /**
-        * Gets the all fields.
-        *
-        * @return the all fields
-        */
-       public ArrayList<String>  getAllFields() {
-               
-               ArrayList<String> allFields = new ArrayList<String>();
-               allFields.addAll(getBooleanFields());
-               allFields.addAll(getStringListFields());
-               allFields.addAll(getStringFields());
-               allFields.addAll(getIntFields());
-               allFields.addAll(getLongFields());
-               allFields.addAll(getShortFields());
-               
-               return allFields;
-       }
-               
-       /**
-        * Gets the plural name.
-        *
-        * @return the plural name
-        */
-       public String  getPluralName() {        
-               
-               if (simpleName.contains("List")  || simpleName.contains("-list") )
-                       return "";
-               String[] fullNameList = getFullName().split("/");               
-               return fullNameList[fullNameList.length - 2];
-       }
-       
-       /**
-        * Sets the node alt key 1 props.
-        *
-        * @param _dbRulesNodeAltKey1Props the db rules node alt key 1 props
-        */
-       public void setNodeAltKey1Props(Multimap<String, String> _dbRulesNodeAltKey1Props) {
-               this.NodeAltKey1Props = _dbRulesNodeAltKey1Props;
-       }
-       
-       /**
-        * Gets the node alt key 1 props.
-        *
-        * @return the node alt key 1 props
-        */
-       public Multimap<String,String> getNodeAltKey1Props() {
-               return this.NodeAltKey1Props;
-       }
-       
-       /**
-        * Sets the node dependencies.
-        *
-        * @param _dbRulesNodeDependencies the db rules node dependencies
-        */
-       public void setNodeDependencies(Multimap<String, String> _dbRulesNodeDependencies) {
-               this.NodeDependencies = _dbRulesNodeDependencies;
-       }
-       
-       /**
-        * Gets the node dependencies.
-        *
-        * @return the node dependencies
-        */
-       public Multimap<String,String> getNodeDependencies() {
-               return this.NodeDependencies;
-       }
-       
-       /**
-        * Gets the recurse to resource.
-        *
-        * @return the recurse to resource
-        */
-       public AAIResource getRecurseToResource() { 
-               return this.recurseToResource;
-       }
-       
-       /**
-        * Sets the recurse to resource.
-        *
-        * @param ancestor the new recurse to resource
-        */
-       public void setRecurseToResource(AAIResource ancestor) {
-               this.recurseToResource = ancestor;
-               
-       }
-       
-       /**
-        * Sets the allow direct write.
-        *
-        * @param allowDirectWrite the new allow direct write
-        */
-       public void setAllowDirectWrite(boolean allowDirectWrite) {
-               this.allowDirectWrite = allowDirectWrite;
-       }
-       
-       /**
-        * Checks if is allow direct write.
-        *
-        * @return true, if is allow direct write
-        */
-       public boolean isAllowDirectWrite() {
-               return this.allowDirectWrite;
-       }
-       
-       /**
-        * Sets the allow direct read.
-        *
-        * @param allowDirectRead the new allow direct read
-        */
-       public void setAllowDirectRead(boolean allowDirectRead) {
-               this.allowDirectRead = allowDirectRead;
-       }
-       
-       /**
-        * Checks if is allow direct read.
-        *
-        * @return true, if is allow direct read
-        */
-       public boolean isAllowDirectRead() {
-               return this.allowDirectRead;
-       }
-       
-       /**
-        * Gets the auto gen uuid fields.
-        *
-        * @return the auto gen uuid fields
-        */
-       public ArrayList<String> getAutoGenUuidFields() {
-               if (this.autoGenUuidFields == null) { 
-                       this.autoGenUuidFields = new ArrayList<String>();
-               }
-               return this.autoGenUuidFields;
-       }
-}
diff --git a/aai-core/src/main/java/org/openecomp/aai/domain/model/AAIResourceKey.java b/aai-core/src/main/java/org/openecomp/aai/domain/model/AAIResourceKey.java
deleted file mode 100644 (file)
index aa3c1e5..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.openecomp.aai
- * ================================================================================
- * Copyright (C) 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=========================================================
- */
-
-package org.openecomp.aai.domain.model;
-
-import com.google.common.base.CaseFormat;
-
-public class AAIResourceKey {
-       private String keyName;
-       private String keyType;
-       private String pathParamName;
-       private String dnCamKeyName;
-       
-       /**
-        * Gets the key name.
-        *
-        * @return the key name
-        */
-       public String getKeyName() {
-               return keyName;
-       }
-       
-       /**
-        * Sets the key name.
-        *
-        * @param keyName the new key name
-        */
-       public void setKeyName(String keyName) {
-               this.keyName = keyName;
-       }
-       
-       /**
-        * Gets the key type.
-        *
-        * @return the key type
-        */
-       public String getKeyType() {
-               return keyType;
-       }
-       
-       /**
-        * Sets the key type.
-        *
-        * @param t the new key type
-        */
-       public void setKeyType(String t) {
-               this.keyType = t;
-       }
-       
-       /**
-        * Gets the path param name.
-        *
-        * @return the path param name
-        */
-       public String getPathParamName() {
-               return pathParamName;
-       }
-       
-       /**
-        * Sets the path param name.
-        *
-        * @param pathParamName the new path param name
-        */
-       public void setPathParamName(String pathParamName) {
-               this.pathParamName = pathParamName;
-       }
-       
-       /**
-        * Gets the dn cam key name.
-        *
-        * @return the dn cam key name
-        */
-       public String getDnCamKeyName() {
-               return dnCamKeyName;
-       }
-       
-       /**
-        * Sets the dn cam key name.
-        *
-        * @param dnCamKeyName the new dn cam key name
-        */
-       public void setDnCamKeyName(String dnCamKeyName) {
-               this.dnCamKeyName = dnCamKeyName;
-       }
-       
-}
diff --git a/aai-core/src/main/java/org/openecomp/aai/domain/model/AAIResources.java b/aai-core/src/main/java/org/openecomp/aai/domain/model/AAIResources.java
deleted file mode 100644 (file)
index 0a91ca6..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.openecomp.aai
- * ================================================================================
- * Copyright (C) 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=========================================================
- */
-
-package org.openecomp.aai.domain.model;
-
-import java.util.HashMap;
-
-import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
-
-public class AAIResources {
-       
-       private DynamicJAXBContext jaxbContext;
-       
-       private HashMap<String, AAIResource> aaiResources;
-       private HashMap<String, AAIResource> resourceLookup;
-       
-       
-       /**
-        * Gets the aai resources.
-        *
-        * @return the aai resources
-        */
-       public HashMap<String, AAIResource> getAaiResources() {
-               if (aaiResources == null) { 
-                       aaiResources = new HashMap<String, AAIResource>();
-               }
-               return aaiResources;
-       }
-
-       /**
-        * Gets the jaxb context.
-        *
-        * @return the jaxb context
-        */
-       public DynamicJAXBContext getJaxbContext() {
-               return jaxbContext;
-       }
-
-       /**
-        * Sets the jaxb context.
-        *
-        * @param jaxbContext the new jaxb context
-        */
-       public void setJaxbContext(DynamicJAXBContext jaxbContext) {
-               this.jaxbContext = jaxbContext;
-       }
-
-       /**
-        * Gets the resource lookup.
-        *
-        * @return the resource lookup
-        */
-       public HashMap<String, AAIResource> getResourceLookup() {
-               if (resourceLookup == null) { 
-                       resourceLookup = new HashMap<String, AAIResource>();
-               }
-               return resourceLookup;
-       }
-
-       /**
-        * Sets the resource lookup.
-        *
-        * @param resourceLookup the resource lookup
-        */
-       public void setResourceLookup(HashMap<String, AAIResource> resourceLookup) {
-               this.resourceLookup = resourceLookup;
-       }
-       
-}
diff --git a/aai-core/src/main/java/org/openecomp/aai/ingestModel/ConvertXmlToJsonMoxyOxm.java b/aai-core/src/main/java/org/openecomp/aai/ingestModel/ConvertXmlToJsonMoxyOxm.java
deleted file mode 100644 (file)
index 5861f38..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.openecomp.aai
- * ================================================================================
- * Copyright (C) 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=========================================================
- */
-
-package org.openecomp.aai.ingestModel;
-
-import java.io.File;
-import java.io.StringWriter;
-import java.util.ArrayList;
-
-import javax.xml.transform.stream.StreamSource;
-
-import org.eclipse.persistence.dynamic.DynamicEntity;
-import org.eclipse.persistence.jaxb.JAXBMarshaller;
-import org.eclipse.persistence.jaxb.JAXBUnmarshaller;
-import org.eclipse.persistence.jaxb.MarshallerProperties;
-import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
-
-import org.openecomp.aai.util.AAIConfig;
-import org.openecomp.aai.util.AAIConstants;
-
-/**
- * The Class ConvertXmlToJsonMoxyOxm.
- */
-public class ConvertXmlToJsonMoxyOxm
-{
-       /**
-        * The main method.
-        *
-        * @param args the arguments
-        * @throws Exception the exception
-        */
-       public static void main(String[] args) throws Exception {
-
-               String _apiVersion = AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP);
-               String fileName = null;
-               String dynamicType = null;
-               if (args.length > 0) { 
-                       if (args[0] != null) {
-                               _apiVersion = args[0];
-                       }
-                       if (args[1] != null) { 
-                               fileName = args[1];
-                       }
-                       if (args[2] != null) { 
-                               dynamicType = args[2];
-                       }
-               }
-               
-               if (fileName == null) { 
-                       System.err.println("You must specify a fileName");
-                       System.exit(0);
-               }
-               if (dynamicType == null) { 
-                       System.err.println("You must specify a dynamic Type");
-                       System.exit(0);
-               }
-               
-               ArrayList<String> apiVersions = new ArrayList<String>();
-               apiVersions.add(_apiVersion);
-               final IngestModelMoxyOxm m = new IngestModelMoxyOxm();
-               m.init(apiVersions, false);
-
-               DynamicJAXBContext jaxbContext = IngestModelMoxyOxm.aaiResourceContainer.get(_apiVersion).getJaxbContext();
-
-               JAXBUnmarshaller unmarshaller = jaxbContext.createUnmarshaller();
-
-               Class<? extends DynamicEntity> resultClass = jaxbContext.newDynamicEntity(dynamicType).getClass();
-
-               DynamicEntity meObject = (DynamicEntity) unmarshaller.unmarshal(new StreamSource(new File(fileName)), resultClass).getValue();
-
-               // put it out as JSON
-               
-               JAXBMarshaller marshaller = jaxbContext.createMarshaller();
-               marshaller.setProperty(JAXBMarshaller.JAXB_FORMATTED_OUTPUT, true);
-
-               marshaller.setProperty("eclipselink.media-type", "application/json");
-               marshaller.setProperty("eclipselink.json.include-root", false);
-               marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, Boolean.FALSE) ;
-
-               StringWriter writer = new StringWriter();
-               marshaller.marshal(meObject, writer);
-               
-               System.out.println(writer.toString());
-               
-               System.exit(0);
-       }
-
-}
index 1800629..885f285 100644 (file)
@@ -22,24 +22,20 @@ package org.openecomp.aai.ingestModel;
 
 import java.io.File;
 import java.io.PrintWriter;
-import java.io.StringWriter;
 import java.util.ArrayList;
-import java.util.Map;
+import java.util.List;
+import java.util.Map.Entry;
 import java.util.UUID;
 
 import javax.xml.transform.stream.StreamSource;
 
-import org.eclipse.persistence.dynamic.DynamicEntity;
-import org.eclipse.persistence.jaxb.JAXBMarshaller;
-import org.eclipse.persistence.jaxb.JAXBUnmarshaller;
-import org.eclipse.persistence.jaxb.MarshallerProperties;
-import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
-
-import org.openecomp.aai.domain.model.AAIResource;
-import org.openecomp.aai.domain.model.AAIResources;
+import org.openecomp.aai.introspection.Introspector;
+import org.openecomp.aai.introspection.Loader;
+import org.openecomp.aai.introspection.LoaderFactory;
+import org.openecomp.aai.introspection.ModelType;
+import org.openecomp.aai.introspection.Version;
 import org.openecomp.aai.util.AAIConfig;
 import org.openecomp.aai.util.AAIConstants;
-import com.google.common.base.CaseFormat;
 
 /**
  * The Class CreateWidgetModels.
@@ -78,33 +74,27 @@ public class CreateWidgetModels
                        System.exit(0);
                }
 
-               ArrayList<String> apiVersions = new ArrayList<String>();
-               apiVersions.add(_apiVersion);
-               final IngestModelMoxyOxm m = new IngestModelMoxyOxm();
-               m.init(apiVersions, false);
-
-               AAIResources aaiResources = IngestModelMoxyOxm.aaiResourceContainer.get(_apiVersion);
 
-               DynamicJAXBContext jaxbContext = aaiResources.getJaxbContext();
+               Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.valueOf(_apiVersion));
 
                // iterate the collection of resources
 
                ArrayList<String> processedWidgets = new ArrayList<String>();
-               for (Map.Entry<String, AAIResource> aaiResEnt : aaiResources.getAaiResources().entrySet()) { 
-                       DynamicEntity meObject = jaxbContext.newDynamicEntity("inventory.aai.openecomp.org." + _apiVersion + ".Model");
+               for (Entry<String, Introspector> aaiResEnt : loader.getAllObjects().entrySet()) {
+                       Introspector meObject = loader.introspectorFromName("model");
                        // no need for a ModelVers DynamicEntity
 
-                       AAIResource aaiRes = aaiResEnt.getValue();
+                       Introspector aaiRes = aaiResEnt.getValue();
 
-                       if (aaiRes.getResourceType().equals("node")) {
-                               String resource = aaiRes.getSimpleName();
+                       if (!(aaiRes.isContainer() || aaiRes.getName().equals("aai-internal"))) {
+                               String resource = aaiRes.getName();
 
                                if (processedWidgets.contains(resource)) {
                                        continue;
                                }
                                processedWidgets.add(resource);
 
-                               String widgetName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, resource);
+                               String widgetName = resource;
                                String filePathString = widgetJsonDir + "/" + widgetName + "-" + modelVersion + ".json";
                                File f = new File(filePathString);
 
@@ -116,46 +106,32 @@ public class CreateWidgetModels
                                        if (f2.exists()) { 
                                                System.out.println("Using old file for " + resource + ".");
 
-                                               JAXBUnmarshaller unmarshaller = jaxbContext.createUnmarshaller();
-                                               unmarshaller.setProperty("eclipselink.media-type", "application/json");
-                                               unmarshaller.setProperty("eclipselink.json.include-root", false);
-                                               Class<? extends DynamicEntity> resultClass = meObject.getClass();
-                                               meObject = (DynamicEntity) unmarshaller.unmarshal(new StreamSource(f2), resultClass).getValue();
+                                               meObject = loader.unmarshal("model", new StreamSource(f2).getReader().toString());
                                                // override, some of them are wrong
-                                               meObject.set("modelVersion", modelVersion);
-                                       } else { 
-
+                                               meObject.setValue("model-version", modelVersion);
+                                       } else {
                                                System.out.println("Making new file for " + resource + ".");
-                                               meObject.set("modelInvariantId", UUID.randomUUID().toString());
-                                               meObject.set("modelType", "widget");
-                                               DynamicEntity mevObject = jaxbContext.newDynamicEntity("inventory.aai.openecomp.org." + _apiVersion + ".ModelVer");
-                                               DynamicEntity mevsObject = jaxbContext.newDynamicEntity("inventory.aai.openecomp.org." + _apiVersion + ".ModelVers");
-                                               mevObject.set("modelVersionId", UUID.randomUUID().toString());
-                                               mevObject.set("modelVersion", modelVersion);
-                                               mevObject.set("modelName", widgetName);
+                                               meObject.setValue("model-invariant-id", UUID.randomUUID().toString());
+                                               meObject.setValue("model-type", "widget");
+                                               Introspector mevObject = loader.introspectorFromName("model-ver");
+                                               Introspector mevsObject = loader.introspectorFromName("model-vers");
+                                               mevObject.setValue("model-version-id", UUID.randomUUID().toString());
+                                               mevObject.setValue("model-version", modelVersion);
+                                               mevObject.setValue("model-Name", widgetName);
                                                // make a list of dynamic Entities
-                                               ArrayList<DynamicEntity> mevsList = new ArrayList<DynamicEntity>();
+                                               List<Object> mevsList = new ArrayList<>();
                                                // add this one, it will be the only one in the list in this case
-                                               mevsList.add(mevObject);
-                                               mevsObject.set("modelVer", mevsList);
+                                               mevsList.add(mevObject.getUnderlyingObject());
+                                               mevsObject.setValue("model-ver", mevsList);
                                                // Have to figure out how to add my mev object to the mevsObject, 
                                                // the modelVers is a list of dynamic entities so we can just attach the array here
-                                               meObject.set("modelVers",mevsObject);
+                                               meObject.setValue("model-vers",mevsObject.getUnderlyingObject());
                                        }
 
                                        // put it out as JSON
 
-                                       JAXBMarshaller marshaller = jaxbContext.createMarshaller();
-                                       marshaller.setProperty(JAXBMarshaller.JAXB_FORMATTED_OUTPUT, true);
-
-                                       marshaller.setProperty("eclipselink.media-type", "application/json");
-                                       marshaller.setProperty("eclipselink.json.include-root", false);
-                                       marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, Boolean.FALSE) ;
-
-                                       StringWriter writer = new StringWriter();
-                                       marshaller.marshal(meObject, writer);
                                        PrintWriter out = new PrintWriter(f);
-                                       out.println(writer.toString());
+                                       out.println(meObject.marshal(true));
                                        out.close();
 
                                } else { 
diff --git a/aai-core/src/main/java/org/openecomp/aai/ingestModel/DbMaps.java b/aai-core/src/main/java/org/openecomp/aai/ingestModel/DbMaps.java
deleted file mode 100644 (file)
index c872f38..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.openecomp.aai
- * ================================================================================
- * Copyright (C) 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=========================================================
- */
-
-package org.openecomp.aai.ingestModel;
-import java.util.HashMap; 
-import java.util.LinkedHashMap;
-import java.util.Map; 
-
-import com.google.common.collect.ArrayListMultimap; 
-import com.google.common.collect.Multimap;
-
-/**
- * The Class DbMaps.
- */
-public class DbMaps {
-
-       // from oxm file
-    public  Multimap<String, String> NodeAltKey1Props      = ArrayListMultimap.create();
-    
-    public  Multimap<String, String> NodeDependencies      = ArrayListMultimap.create();
-    
-    public  Multimap<String, String> NodeNameProps         = ArrayListMultimap.create();
-    
-    public  Multimap<String, String> NodeMapIndexedProps   = ArrayListMultimap.create();
-    
-    public  Multimap<String, String> NodeMapUniqueProps    = ArrayListMultimap.create();
-    
-       public Map<Integer, String>      EdgeInfoMap            = new LinkedHashMap<Integer, String>();
-       
-       public Map<String, String>       ReservedPropNames      = new HashMap<String, String>();
-     
-    // from AAIResources
-    public  Multimap<String, String> NodeProps              = ArrayListMultimap.create();   
-    
-    public  Multimap<String, String> NodeKeyProps           = ArrayListMultimap.create();
-    
-    public  Map<String, String>      NodePlural             = new HashMap<String, String>();
-    
-    public  Map<String, String>      NodeNamespace          = new HashMap<String, String>();
-       
-       public  Map<String, String>      PropertyVersionInfoMap = new HashMap<String, String>(); 
-       
-       public  Map<String, String>      NodeVersionInfoMap     = new HashMap<String, String>(); 
-    
-    public  Map<String, String>      PropertyDataTypeMap    = new HashMap<String, String>();
-
-       }
diff --git a/aai-core/src/main/java/org/openecomp/aai/ingestModel/IngestModelListener.java b/aai-core/src/main/java/org/openecomp/aai/ingestModel/IngestModelListener.java
deleted file mode 100644 (file)
index 6adccee..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.openecomp.aai
- * ================================================================================
- * Copyright (C) 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=========================================================
- */
-
-package org.openecomp.aai.ingestModel;
-
-import java.util.ArrayList;
-
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
-import org.openecomp.aai.exceptions.AAIException;
-import org.openecomp.aai.logging.ErrorLogHelper;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-
-/**
- * The listener interface for receiving ingestModel events.
- * The class that is interested in processing a ingestModel
- * event implements this interface, and the object created
- * with that class is registered with a component using the
- * component's <code>addIngestModelListener<code> method. When
- * the ingestModel event occurs, that object's appropriate
- * method is invoked.
- *
- * @see IngestModelEvent
- */
-public class IngestModelListener implements ServletContextListener {
-       
-       private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(IngestModelListener.class);
-
-/**
- * Destroys context.
- *
- * @param arg0 the ServletContextEvent
- */
-//@Override
-       public void contextDestroyed(ServletContextEvent arg0) {
-               IngestModelMoxyOxm m = new IngestModelMoxyOxm();
-               m.cleanup();
-               LOGGER.info("AAI Auth Listener contextDestroyed() complete.");
-       }
-
-//Run this before web application is started
-       /**
- * Initializaes the context.
- *
- * @param arg0 the ServletContextEvent
- */
-//@Override
-       public void contextInitialized(ServletContextEvent arg0)  {
-               
-               LOGGER.info("IngestModel starts initialization...");
-               try { 
-                       ArrayList<String> apiVersions = new ArrayList<String>();
-                       apiVersions.add("v10");
-                       apiVersions.add("v9");
-                       apiVersions.add("v8");
-                       apiVersions.add("v7");
-                       apiVersions.add("v2");
-                       IngestModelMoxyOxm m = new IngestModelMoxyOxm();
-                       m.init(apiVersions);
-               } catch (AAIException e) {
-                       ErrorLogHelper.logException(e);
-               }
-       }
-}
diff --git a/aai-core/src/main/java/org/openecomp/aai/ingestModel/IngestModelMoxyOxm.java b/aai-core/src/main/java/org/openecomp/aai/ingestModel/IngestModelMoxyOxm.java
deleted file mode 100644 (file)
index 30ffb88..0000000
+++ /dev/null
@@ -1,862 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * org.openecomp.aai
- * ================================================================================
- * Copyright (C) 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=========================================================
- */
-
-package org.openecomp.aai.ingestModel;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.Vector;
-
-import org.eclipse.persistence.descriptors.ClassDescriptor;
-import org.eclipse.persistence.dynamic.DynamicType;
-import org.eclipse.persistence.internal.dynamic.DynamicTypeImpl;
-import org.eclipse.persistence.internal.helper.DatabaseField;
-import org.eclipse.persistence.jaxb.JAXBContextProperties;
-import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
-import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContextFactory;
-import org.eclipse.persistence.mappings.DatabaseMapping;
-import org.eclipse.persistence.oxm.XMLField;
-import org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping;
-import org.eclipse.persistence.oxm.mappings.XMLCompositeDirectCollectionMapping;
-
-import org.openecomp.aai.domain.model.AAIResource;
-import org.openecomp.aai.domain.model.AAIResourceKey;
-import org.openecomp.aai.domain.model.AAIResourceKeys;
-import org.openecomp.aai.domain.model.AAIResources;
-import org.openecomp.aai.exceptions.AAIException;
-import org.openecomp.aai.logging.ErrorLogHelper;
-import org.openecomp.aai.util.AAIConfig;
-import org.openecomp.aai.util.AAIConstants;
-import org.openecomp.aai.util.FileWatcher;
-import com.att.eelf.configuration.EELFLogger;
-import com.att.eelf.configuration.EELFManager;
-import com.google.common.base.CaseFormat;
-import com.google.common.base.Splitter;
-import com.google.common.collect.Multimap;
-
-/**
- * The Class IngestModelMoxyOxm.
- */
-public class IngestModelMoxyOxm
-{
-
-       private static final EELFLogger LOGGER = EELFManager.getInstance().getLogger(IngestModelMoxyOxm.class);
-
-       public static HashMap<String, AAIResources> aaiResourceContainer;
-       public static HashMap<String, DbMaps> dbMapsContainer;
-
-       private static HashMap<String, Timer> timers = new HashMap<String,Timer>();
-
-       /**
-        * The main method.
-        *
-        * @param args the arguments
-        * @throws Exception the exception
-        */
-       public static void main(String[] args) throws Exception {
-
-               String _apiVersion = AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP);
-
-               if (args.length > 0) { 
-                       if (args[0] != null) {
-                               _apiVersion = args[0];
-                       }
-               }
-               ArrayList<String> apiVersions = new ArrayList<String>();
-               apiVersions.add(_apiVersion);
-               final IngestModelMoxyOxm m = new IngestModelMoxyOxm();
-               m.init(apiVersions, false);
-
-               ArrayList<String> endpoints = new ArrayList<String>();
-
-               for (Map.Entry<String, AAIResources> ent: aaiResourceContainer.entrySet()) {
-
-                       AAIResources aaiResources = ent.getValue();
-                       DynamicJAXBContext jaxbContext = aaiResources.getJaxbContext();
-                       for (Map.Entry<String, AAIResource> aaiResEnt : aaiResources.getAaiResources().entrySet()) { 
-                               AAIResource aaiRes = aaiResEnt.getValue();
-
-                               String uri = aaiRes.getUri();
-                               if (uri != null) { 
-                                       endpoints.add(uri);
-                                       DynamicType dt = jaxbContext.getDynamicType(aaiRes.getResourceClassName());
-                                       if (dt.containsProperty("relationshipList")) {
-                                               endpoints.add(uri + "/relationship-list/relationship");
-                                       }
-                               }
-                       }
-                       Collections.sort(endpoints);
-                       for (String endpoint : endpoints) {
-                               if (!endpoint.contains("/aai-internal/")) { 
-                                       System.out.println(endpoint);
-                               }
-                       }
-               }
-
-               System.exit(0);
-       }
-
-       /**
-        * Inits the.
-        *
-        * @param apiVersions the api versions
-        * @throws Exception the exception
-        */
-       public synchronized void init(ArrayList<String> apiVersions) throws AAIException {
-               final IngestModelMoxyOxm m = new IngestModelMoxyOxm();
-               m.init(apiVersions, true);
-       }
-
-       /**
-        * Inits the.
-        *
-        * @param apiVersions the api versions
-        * @param setTimer the set timer
-        * @throws AAIException If AAIConfig is missing necessary properties
-        * @throws Exception the exception
-        */
-       public synchronized void init(ArrayList<String> apiVersions, Boolean setTimer) throws AAIException {
-
-               aaiResourceContainer = new HashMap<String, AAIResources>();
-               dbMapsContainer = new HashMap<String, DbMaps>();
-
-               final IngestModelMoxyOxm m = new IngestModelMoxyOxm();
-
-               for (String apiVersion : apiVersions) { 
-
-                       String relationshipUtils = "org.openecomp.aai.dbmap.RelationshipUtils";
-                       final String thisRelationshipUtils = relationshipUtils;
-
-                       final String thisApiVersion = apiVersion;
-                       final String schemaFile = AAIConstants.AAI_HOME_ETC_OXM + "aai_oxm_" + apiVersion + ".xml";
-
-                       m.loadSchema(apiVersion, schemaFile, relationshipUtils);
-
-                       if (!setTimer) continue;
-
-                       TimerTask task = null;
-                       task = new FileWatcher ( new File(schemaFile)) {
-                               protected void onChange( File file ) {
-                                       m.loadSchema(thisApiVersion, schemaFile, thisRelationshipUtils);
-                               }
-                       };
-
-                       if (!timers.containsKey(apiVersion)) {
-                               Timer timer = new Timer();
-                               timer.schedule( task , new Date(), 10000 );
-                               timers.put(apiVersion,  timer);
-
-                       }
-               }
-               if (apiVersions.contains(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP))) { 
-                       m.createPropertyAndNodeVersionInfoMapFromDbMaps();
-
-                       for (Map.Entry<String, AAIResources> ent: aaiResourceContainer.entrySet()) {
-                               String apiVersion = ent.getKey();
-                               AAIResources aaiResources = ent.getValue();
-
-                               DbMaps dbMap = dbMapsContainer.get(apiVersion);
-
-                               for (Map.Entry<String, AAIResource> aaiResEnt : aaiResources.getAaiResources().entrySet()) { 
-                                       AAIResource aaiRes = aaiResEnt.getValue();
-                                       aaiRes.setPropertyDataTypeMap(dbMap.PropertyDataTypeMap); 
-                                       aaiRes.setNodeKeyProps(dbMap.NodeKeyProps);
-                                       aaiRes.setNodeNameProps(dbMap.NodeNameProps);
-                                       aaiRes.setNodeMapIndexedProps(dbMap.NodeMapIndexedProps);
-                               }
-                       }
-               }
-       }
-
-       /**
-        * Load schema.
-        *
-        * @param apiVersion the api version
-        * @param schemaFile the schema file
-        * @param relationshipUtils the relationship utils
-        * @return the dynamic JAXB context
-        */
-       private DynamicJAXBContext loadSchema(String apiVersion,
-                       String schemaFile, 
-                       String relationshipUtils)  {
-
-               AAIResources aaiResources = new AAIResources();
-               DbMaps dbMaps = new DbMaps();
-               DynamicJAXBContext jaxbContext = null;
-
-               try {
-
-                       InputStream iStream = new FileInputStream(new File(schemaFile));
-
-                       Map<String, Object> properties = new HashMap<String, Object>(); 
-                       properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, iStream); 
-
-                       jaxbContext = 
-                                       DynamicJAXBContextFactory.createContextFromOXM(IngestModelMoxyOxm.class.getClassLoader(), properties);
-
-                       aaiResources.setJaxbContext(jaxbContext);
-                       String rootClassName = "inventory.aai.openecomp.org." + apiVersion + ".Inventory";
-
-                       if ("v2".equals(apiVersion)) { 
-                               rootClassName = "inventory.aai.openecomp.org.Inventory";
-                       } 
-
-                       DynamicTypeImpl t = (DynamicTypeImpl)jaxbContext.getDynamicType(rootClassName);
-
-                       lookAtDynamicResource("Inventory",
-                                       "inventory.aai.openecomp.org." + apiVersion, 
-                                       jaxbContext, 
-                                       t,
-                                       1, "", "", apiVersion, "/" + apiVersion, false, aaiResources, dbMaps, relationshipUtils);
-
-               } catch (Exception e) {
-                       ErrorLogHelper.logException(new AAIException("AAI_3000", e));
-               }
-
-               LOGGER.info("---> Loading " + apiVersion + " in aaiResourceContainer");
-               aaiResourceContainer.put(apiVersion,  aaiResources);
-
-               createDbMapsfromAAIResources(aaiResources, dbMaps);
-
-               LOGGER.info("---> Loading " + apiVersion + " in dbMapsContainer");
-               dbMapsContainer.put(apiVersion,  dbMaps);
-
-               return jaxbContext;
-       }
-
-       /**
-        * Cleanup.
-        */
-       public void cleanup() {
-               aaiResourceContainer.clear();
-               dbMapsContainer.clear();
-       }
-
-       /**
-        * Look at dynamic resource.
-        *
-        * @param resource the resource
-        * @param pojoBase the pojo base
-        * @param jaxbContext the jaxb context
-        * @param t the t
-        * @param depth the depth
-        * @param parent the parent
-        * @param namespace the namespace
-        * @param apiVersion the api version
-        * @param url the url
-        * @param container the container
-        * @param aaiResources the aai resources
-        * @param dbMaps the db maps
-        * @param relationshipUtils the relationship utils
-        * @throws ClassNotFoundException the class not found exception
-        * @throws NoSuchFieldException the no such field exception
-        * @throws SecurityException the security exception
-        * @throws IOException Signals that an I/O exception has occurred.
-        */
-       private void lookAtDynamicResource(String resource, 
-                       String pojoBase, 
-                       DynamicJAXBContext jaxbContext, 
-                       DynamicTypeImpl t,
-                       int depth,
-                       String parent,
-                       String namespace,
-                       String apiVersion,
-                       String url, 
-                       boolean container, 
-                       AAIResources aaiResources,
-                       DbMaps dbMaps,
-                       String relationshipUtils
-                       ) 
-                                       throws ClassNotFoundException, NoSuchFieldException, SecurityException,  IOException {
-
-               String className = pojoBase + "." + CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL, resource);
-
-               AAIResource parentResource = aaiResources.getAaiResources().get(parent);
-
-               AAIResources siblings = null;
-
-               if (parentResource == null) { 
-                       String fullName = "/" +  resource;
-                       AAIResource aaiRes = new AAIResource();
-                       aaiRes.setFullName(fullName);
-                       aaiRes.setSimpleName(resource);
-                       aaiRes.setResourceType("container");
-                       aaiRes.setResourceClassName(className);
-                       aaiRes.setApiVersion(apiVersion);
-
-                       aaiResources.getAaiResources().put(fullName, aaiRes);
-                       parentResource = aaiRes;
-               }
-
-               if (depth >= 50) return;
-
-               siblings = parentResource.getChildren();
-
-               if (depth == 2) { 
-                       namespace = resource;
-               }
-               if (depth >= 50) {
-                       return;
-               }
-
-               /*              if ("Actions".equals(namespace) || "Search".equals(namespace)) {
-                       return;
-               }*/
-
-               ClassDescriptor cd = t.getDescriptor();
-
-               createDbMapsfromOXM(cd.getProperties(), resource, dbMaps);
-
-               
-
-               Vector<DatabaseMapping> dm = cd.getMappings();          
-
-               for (DatabaseMapping dmInst : dm) {
-                       String dmName = dmInst.getAttributeName();
-
-                       ClassDescriptor cd2 = dmInst.getReferenceDescriptor();
-                       if (cd2 != null) { 
-
-                               String newClassName = cd2.getJavaClassName();
-                               //                              
-                               if (newClassName.contains("RelationshipList")) {
-                                       continue;
-                               }
-
-                               DynamicTypeImpl newDt = (DynamicTypeImpl)jaxbContext.getDynamicType(newClassName);
-
-                               if (dmInst instanceof XMLCompositeCollectionMapping) { 
-                                       String simpleName = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, dmName);
-                                       //                                      System.out.println(spaces + "+ List of A&AI Object named " + simpleName);
-
-                                       String hypName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, simpleName);
-
-                                       String fullName = parent + "/" + simpleName;
-
-                                       //Class<?> newClazz = Class.forName(newClassName);
-                                       AAIResource aaiRes = new AAIResource();
-
-                                       if ("cvlan-tag-entry".equals(hypName)) {
-                                       }
-
-                                       ClassDescriptor cd3 = newDt.getDescriptor();
-
-                                       boolean allowDirectWrite = true;
-                                       if (cd3.getProperties().containsKey("allowDirectWrite")) {
-                                               if (cd3.getProperties().get("allowDirectWrite").equals("false")) {
-                                                       allowDirectWrite = false;
-                                               }
-                                       }
-                                       
-
-                                       boolean allowDirectRead = true;
-                                       if (cd3.getProperties().containsKey("allowDirectRead")) {
-                                               if (cd3.getProperties().get("allowDirectRead").equals("false")) {
-                                                       allowDirectRead = false;
-                                               }
-                                       }
-                                       
-                                       List<DatabaseField> dbfList = cd3.getPrimaryKeyFields();
-                                       ArrayList<String> keyFields = new ArrayList<String>();
-
-                                       if (dbfList != null) { 
-                                               for (DatabaseField dbf : dbfList) {
-                                                       String name = dbf.getName();
-                                                       name = name.substring(0, name.indexOf('/'));
-                                                       keyFields.add(name);
-                                               }
-                                       }
-                                       Vector<DatabaseMapping> dm2 = cd3.getMappings();
-                                       for (DatabaseMapping dmInst2 : dm2) {
-                                               String dmName2= CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,dmInst2.getAttributeName());
-                                               DatabaseField xf2 = dmInst2.getField();
-                                               if (dmInst2.getProperties().containsKey("autoGenerateUuid")) { 
-                                                       if (dmInst2.getProperties().get("autoGenerateUuid").equals("true")) { 
-                                                               aaiRes.getAutoGenUuidFields().add(dmName2);
-                                                       }
-                                               }
-                                               if (xf2 instanceof XMLField) { 
-                                                       XMLField x = (XMLField)xf2;
-                                                       if (x != null) { 
-                                                               if (x.isRequired()) {
-                                                                       aaiRes.getRequiredFields().add(dmName2);
-                                                               }
-                                                       }
-                                                       
-                                               }
-                                               try {
-                                                       Class<?> xf2Clazz = xf2.getType();
-                                                       if (xf2Clazz.getSimpleName().equals("String")) {
-                                                               if (dmInst2 instanceof XMLCompositeDirectCollectionMapping) { 
-                                                                       aaiRes.getStringListFields().add(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN,dmName2));
-                                                               } else { 
-                                                                       aaiRes.getStringFields().add(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN,dmName2));
-                                                               }
-                                                       } else if (xf2Clazz.getSimpleName().toLowerCase().contains("long")) {
-                                                               aaiRes.getLongFields().add(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN,dmName2));
-                                                       } else if (xf2Clazz.getSimpleName().toLowerCase().contains("int")) {
-                                                               aaiRes.getIntFields().add(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN,dmName2));
-                                                       } else if (xf2Clazz.getSimpleName().toLowerCase().contains("short")) {
-                                                               aaiRes.getShortFields().add(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN,dmName2));
-                                                       } else if (xf2Clazz.getSimpleName().toLowerCase().contains("boolean")) {
-                                                               aaiRes.getBooleanFields().add(CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN,dmName2));
-                                                       }
-                                               } catch (Exception e) {  // this xf2.getType() throws null pointer when I try to get the type and it doesn't have one
-                                                       ;
-                                               }
-                                       }
-
-                                       // get the key(s) from DbRules
-                                       String uriKey = "";
-                                       LinkedHashMap<String, ArrayList<String>> itemKeyList = new LinkedHashMap<String, ArrayList<String>>();
-
-                                       aaiRes.setApiVersion(apiVersion);
-                                       itemKeyList.put(hypName, new ArrayList<String>());
-                                       for (String thisKey : keyFields) { 
-                                               String pathParamName = hypName + "-" + thisKey;
-
-                                               AAIResourceKey aaiResKey = new AAIResourceKey();
-                                               aaiResKey.setKeyName(thisKey);
-                                               aaiResKey.setDnCamKeyName(CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, pathParamName));
-                                               aaiResKey.setPathParamName(pathParamName);
-
-                                               for (DatabaseMapping dmInst2 : dm2) {
-                                                       String dmName2= CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,dmInst2.getAttributeName());
-                                                       if (dmName2.equals(thisKey)){ 
-                                                               DatabaseField xf2 = dmInst2.getField();
-                                                               aaiResKey.setKeyType(xf2.getType().getSimpleName());
-                                                               break;
-                                                       }
-                                               }
-
-                                               aaiRes.getAaiResourceKeys().getAaiResourceKey().add(aaiResKey);
-
-                                               if (siblings != null) {
-                                                       siblings.getAaiResources().put(fullName, aaiRes);
-                                               }
-
-                                               uriKey += "/{" + pathParamName + "}";
-                                       }
-
-                                       String newUri = url + "/" + hypName + uriKey;
-
-
-                                       if ("v2".equals(apiVersion)) { 
-                                               aaiRes.setResourceClassName("inventory.aai.openecomp.org." + simpleName);
-                                       } else { 
-                                               aaiRes.setResourceClassName("inventory.aai.openecomp.org." + apiVersion + "." + simpleName);
-                                       }
-                                       
-                                       aaiRes.setAllowDirectWrite(allowDirectWrite);
-                                       aaiRes.setAllowDirectRead(allowDirectRead);
-                                       aaiRes.setNamespace(namespace);
-                                       aaiRes.setSimpleName(simpleName);
-                                       
-                                       if (!aaiResources.getResourceLookup().containsKey(simpleName)) {
-                                               aaiResources.getResourceLookup().put(simpleName, aaiRes);
-                                       }
-                                       
-                                       aaiRes.setFullName(fullName);
-                                       aaiRes.setUri(newUri);
-                                       aaiRes.setResourceType("node");
-                                       if ("v2".equals(apiVersion)) { 
-                                               aaiRes.setRelationshipListClass("inventory.aai.openecomp.org.RelationshipList");
-                                       } else { 
-                                               aaiRes.setRelationshipListClass("inventory.aai.openecomp.org." + apiVersion + ".RelationshipList");
-                                       }
-                                       aaiRes.setRelationshipUtils(relationshipUtils);
-
-                                       if (parentResource != null) { 
-                                               aaiRes.setParent(parentResource);
-                                       } else { 
-                                               aaiRes.setParent(aaiRes);
-                                       }
-
-                                       aaiResources.getAaiResources().put(fullName, aaiRes);
-
-                                       if (siblings != null) {
-                                               siblings.getAaiResources().put(fullName, aaiRes);
-                                       }
-//                                     AAIResource ancestor = parentResource;
-//
-//                                     boolean recursiveEntity = false;
-//                                     while (ancestor != null) { 
-//
-//                                             if (ancestor.getSimpleName().equals(aaiRes.getSimpleName())) {
-//                                                     recursiveEntity = true;
-//                                                     // attach it to the container that contains the resource above this one with the same name
-//                                                     if (ancestor.getParent() != null && ancestor.getParent().getResourceType().equals("container")) {
-//                                                             AAIResource recurseHere = ancestor.getParent();
-//                                                             aaiRes.setRecurseToResource(recurseHere);
-//                                                     }
-//                                                     break;
-//                                             }
-//                                             ancestor = ancestor.getParent();
-//
-//                                     }
-//                                     if (recursiveEntity == false) { 
-                                               lookAtDynamicResource(cd2.getJavaClass().getSimpleName(),
-                                                               pojoBase, 
-                                                               jaxbContext, 
-                                                               newDt,
-                                                               (depth + 1), fullName, namespace, apiVersion, newUri, false, aaiResources, dbMaps,
-                                                               relationshipUtils);
-//                                     }
-                               } else { 
-                                       String simpleName = CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, dmName);
-                                       String fullName = parent + "/" +  simpleName;
-                                       //                                      System.out.println(spaces + "+ Container of A&AI Object named " + simpleName);
-
-                                       AAIResource aaiRes = new AAIResource();
-                                       if (parentResource != null) { 
-                                               aaiRes.setParent(parentResource);
-                                       } else { 
-                                               aaiRes.setParent(aaiRes);
-                                       }
-                                       aaiRes.setAllowDirectWrite(true);
-                                       aaiRes.setAllowDirectRead(true);
-                                       aaiRes.setFullName(fullName);
-                                       aaiRes.setSimpleName(simpleName);
-                                       if (!aaiResources.getResourceLookup().containsKey(simpleName)) {
-                                               aaiResources.getResourceLookup().put(simpleName, aaiRes);
-                                       }
-                                       aaiRes.setResourceType("container");
-
-                                       if ("v2".equals(apiVersion)) { 
-                                               aaiRes.setResourceClassName("inventory.aai.openecomp.org." + simpleName);
-                                               aaiRes.setRelationshipListClass("inventory.aai.openecomp.org.RelationshipList");
-                                       } else {
-                                               aaiRes.setResourceClassName("inventory.aai.openecomp.org." + apiVersion + "." + simpleName);
-                                               aaiRes.setRelationshipListClass("inventory.aai.openecomp.org." + apiVersion  + ".RelationshipList");
-                                       }
-                                       aaiRes.setApiVersion(apiVersion);
-
-                                       aaiResources.getAaiResources().put(fullName, aaiRes);
-                                       aaiRes.setRelationshipUtils(relationshipUtils);
-
-                                       String hypName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, simpleName);
-
-                                       if (siblings != null) {
-                                               siblings.getAaiResources().put(fullName, aaiRes);
-                                       }
-
-                                       lookAtDynamicResource(cd2.getJavaClass().getSimpleName(),
-                                                       pojoBase, 
-                                                       jaxbContext, 
-                                                       (DynamicTypeImpl)jaxbContext.getDynamicType(newClassName),
-                                                       (depth + 1), fullName, namespace, apiVersion, url + "/" + hypName, false, aaiResources, dbMaps,
-                                                       relationshipUtils);
-
-
-                               }
-                       }
-               }
-       }
-
-       /**
-        * Creates the db mapsfrom OXM.
-        *
-        * @param propMap the prop map
-        * @param resource the resource
-        * @param dbMaps the db maps
-        */
-       private void createDbMapsfromOXM(Map<?, ?> propMap, String resource, DbMaps dbMaps) {
-               String nodeType = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN, resource);
-               if ("cvlan-tag-entry".equals(nodeType)) {
-                       nodeType = "cvlan-tag";
-               }
-
-               // if we have nodes dependent on multiple nodes we might revisit the node again - skip then
-               if (propMap.size() > 1 && !dbMaps.NodeMapIndexedProps.containsKey(nodeType)) {
-
-                       if (propMap.containsKey("nameProps")) 
-                               dbMaps.NodeNameProps.putAll(nodeType, 
-                                               (Iterable<String>) fromCommaSeparatedString(propMap.get("nameProps").toString()));
-
-                       if (propMap.containsKey("indexedProps")) 
-                               dbMaps.NodeMapIndexedProps.putAll(nodeType, 
-                                               (Iterable<String>) fromCommaSeparatedString(propMap.get("indexedProps").toString()));
-
-                       if (propMap.containsKey("dependentOn")) 
-                               dbMaps.NodeDependencies.putAll(nodeType, 
-                                               (Iterable<String>) fromCommaSeparatedString(propMap.get("dependentOn").toString()));
-
-                       if (propMap.containsKey("alternateKeys1")) 
-                               dbMaps.NodeAltKey1Props.putAll(nodeType, 
-                                               (Iterable<String>) fromCommaSeparatedString(propMap.get("alternateKeys1").toString()));
-
-                       if (propMap.containsKey("uniqueProps")) 
-                               dbMaps.NodeMapUniqueProps.putAll(nodeType, 
-                                               (Iterable<String>) fromCommaSeparatedString(propMap.get("uniqueProps").toString()));
-
-                       // build EdgeInfoMap
-                       if (propMap.containsKey("edgeInfo")) {
-                               int i = 0;
-                               Iterable<String> edgeInfoIterable = (Iterable<String>) fromCommaSeparatedString(propMap.get("edgeInfo").toString());
-                               Iterator<String> edgeInfoIterator = edgeInfoIterable.iterator();
-                               while(edgeInfoIterator.hasNext()) {
-                                       String propName = edgeInfoIterator.next();
-                                       dbMaps.EdgeInfoMap.put(i++, propName);
-                               }
-                       }
-               }
-       }
-
-       /**
-        * Creates the db mapsfrom AAI resources.
-        *
-        * @param aaiResources the aai resources
-        * @param dbMaps the db maps
-        */
-       private void createDbMapsfromAAIResources(AAIResources aaiResources, DbMaps dbMaps) {
-
-               for (String  resource: aaiResources.getAaiResources().keySet()) {
-
-                       AAIResource aaiResource = aaiResources.getAaiResources().get(resource);
-                       String nodeType = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN,aaiResource.getSimpleName());
-
-                       if (nodeType.equals("cvlan-tag-entry"))
-                               nodeType = "cvlan-tag"; 
-
-                       // Build NodeNamespace
-                       if (aaiResource.getNamespace() != null && !aaiResource.getNamespace().equalsIgnoreCase("search")) 
-                               // oamNetworks is also defined under the search namespace - do not want that namespace 
-                               dbMaps.NodeNamespace.put(nodeType, CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, aaiResource.getNamespace()));
-
-                       // only process one nodetype once 
-                       if (dbMaps.NodeProps.containsKey(nodeType)) 
-                               continue;
-
-                       // Build NodePlural
-                       if (aaiResource.getPluralName() != null && !aaiResource.getPluralName().equals(aaiResource.getNamespace())) 
-                               // dont want resources which are namespaces themselves in map
-                               dbMaps.NodePlural.put(nodeType, CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN, aaiResource.getPluralName()));
-
-                       // Build NodeProps
-                       dbMaps.NodeProps.putAll(nodeType, aaiResource.getAllFields());
-
-                       // build ReservedNames
-                       if (nodeType.equalsIgnoreCase("reserved-prop-names")) {
-                               for (String propName: aaiResource.getAllFields()) {
-                                       dbMaps.ReservedPropNames.put(propName, "");
-                               }
-                       }
-
-                       // Build NodekeyProps
-                       AAIResourceKeys aaiResKeys = aaiResource.getAaiResourceKeys();
-                       List<String> keyList = new ArrayList<String>();
-                       for (AAIResourceKey rk : aaiResKeys.getAaiResourceKey()) { 
-                               String keyProp = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN,rk.getKeyName());
-                               if (!keyList.contains(keyProp))
-                                       keyList.add(keyProp);
-                       }                               
-                       dbMaps.NodeKeyProps.putAll(nodeType, (Iterable<String>)keyList);
-
-                       // Build PropertyDataTypeMap
-                       for (String propName: aaiResource.getBooleanFields()) {
-                               if (nodeType.equalsIgnoreCase("edge-prop-names")) // these properties are in mixed format in DB
-                                       propName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, propName);
-                               if (propName.equals("sVCINFRA")) propName = "SVC-INFRA";
-                               if (propName.equals("sVCINFRAREV")) propName = "SVC-INFRA-REV";
-                               if (!dbMaps.PropertyDataTypeMap.containsKey(propName))
-                                       dbMaps.PropertyDataTypeMap.put(propName, "Boolean");
-                               else if (!dbMaps.PropertyDataTypeMap.get(propName).equals("Boolean"))
-                                       System.out.println(propName + "defined with mis-matched types in oxm file");
-                       }
-                       for (String propName: aaiResource.getShortFields()) {
-                               if (nodeType.equalsIgnoreCase("edge-prop-names")) // these properties are in mixed format in DB
-                                       propName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, propName);
-                               if (propName.equals("sVCINFRA")) propName = "SVC-INFRA";
-                               if (propName.equals("sVCINFRAREV")) propName = "SVC-INFRA-REV";
-                               if (!dbMaps.PropertyDataTypeMap.containsKey(propName))
-                                       dbMaps.PropertyDataTypeMap.put(propName, "Integer");
-                               else if (!dbMaps.PropertyDataTypeMap.get(propName).equals("Integer"))
-                                       System.out.println(propName + "defined with mis-matched types in oxm file");
-                       }
-                       for (String propName: aaiResource.getLongFields()) {
-                               if (nodeType.equalsIgnoreCase("edge-prop-names")) // these properties are in mixed format in DB
-                                       propName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, propName);
-                               if (propName.equals("sVCINFRA")) propName = "SVC-INFRA";
-                               if (propName.equals("sVCINFRAREV")) propName = "SVC-INFRA-REV";
-                               if (!dbMaps.PropertyDataTypeMap.containsKey(propName)) {
-                                       if (propName.contains("-ts"))
-                                               dbMaps.PropertyDataTypeMap.put(propName, "Long");
-                                       else
-                                               dbMaps.PropertyDataTypeMap.put(propName, "Integer");
-                               } else if (!dbMaps.PropertyDataTypeMap.get(propName).equals("Integer"))
-                                       System.out.println(propName + "defined with mis-matched types in oxm file");
-                       }
-                       for (String propName: aaiResource.getIntFields()) {
-                               if (nodeType.equalsIgnoreCase("edge-prop-names")) // these properties are in mixed format in DB
-                                       propName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, propName);
-                               if (propName.equals("sVCINFRA")) propName = "SVC-INFRA";
-                               if (propName.equals("sVCINFRAREV")) propName = "SVC-INFRA-REV";
-                               if (!dbMaps.PropertyDataTypeMap.containsKey(propName))
-                                       dbMaps.PropertyDataTypeMap.put(propName, "Integer");
-                               else if (!dbMaps.PropertyDataTypeMap.get(propName).equals("Integer"))
-                                       System.out.println(propName + "defined with mis-matched types in oxm file");
-                       }
-                       for (String propName: aaiResource.getStringFields()) {
-                               if (nodeType.equalsIgnoreCase("edge-prop-names")) // these properties are in mixed format in DB
-                                       propName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, propName);
-                               if (propName.equals("sVCINFRA")) propName = "SVC-INFRA";
-                               if (propName.equals("sVCINFRAREV")) propName = "SVC-INFRA-REV";
-                               if (!dbMaps.PropertyDataTypeMap.containsKey(propName))
-                                       dbMaps.PropertyDataTypeMap.put(propName, "String");
-                               else if (!dbMaps.PropertyDataTypeMap.get(propName).equals("String"))
-                                       System.out.println(propName + "defined with mis-matched types in oxm file");
-                       }
-                       for (String propName: aaiResource.getStringListFields()) {
-                               if (nodeType.equalsIgnoreCase("edge-prop-names")) // these properties are in mixed format in DB
-                                       propName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL, propName);
-                               if (propName.equals("sVCINFRA")) propName = "SVC-INFRA";
-                               if (propName.equals("sVCINFRAREV")) propName = "SVC-INFRA-REV";
-                               if (!dbMaps.PropertyDataTypeMap.containsKey(propName))
-                                       dbMaps.PropertyDataTypeMap.put(propName, "Set<String>");
-                               else if (!dbMaps.PropertyDataTypeMap.get(propName).equals("Set<String>"))
-                                       System.out.println(propName + "defined with mis-matched types in oxm file");
-                       }
-               }
-
-       }
-
-
-       /**
-        * Creates the property and node version info map from db maps.
-        */
-       private void createPropertyAndNodeVersionInfoMapFromDbMaps() {
-               DbMaps dbMaps = null;
-               String previousApiVersion = null;
-               List<Integer> apiIntegerKeySet = new ArrayList<Integer>();
-               for ( String vers : dbMapsContainer.keySet()) {
-                       apiIntegerKeySet.add(Integer.valueOf(vers.substring(1)));
-               }
-               ArrayList<Integer> apiIntegerVersionsList = (ArrayList<Integer>) asSortedList(apiIntegerKeySet);
-               String apiVersion;
-               for ( Integer apiIntegerVersion : apiIntegerVersionsList) {
-                       apiVersion = "v" + apiIntegerVersion;
-                       System.out.println("apiVersion=" + apiVersion);
-                       dbMaps = dbMapsContainer.get(apiVersion);
-
-                       if (previousApiVersion != null) { // when running more than one version
-                               dbMaps.PropertyVersionInfoMap.putAll(dbMapsContainer.get(previousApiVersion).PropertyVersionInfoMap);
-                               dbMaps.NodeVersionInfoMap.putAll(dbMapsContainer.get(previousApiVersion).NodeVersionInfoMap);
-                       }
-                       
-                       Iterator<String> nodeTypeIterator = dbMaps.NodeProps.keySet().iterator();
-                       while( nodeTypeIterator.hasNext() ){
-                               String nType = nodeTypeIterator.next();
-                               if (!dbMaps.NodeVersionInfoMap.containsKey(nType)) {
-                                       dbMaps.NodeVersionInfoMap.put(nType, apiVersion);
-                               }
-                               Collection <String> nodePropsForType =  dbMaps.NodeProps.get(nType);
-                               Iterator <String> propIter = nodePropsForType.iterator();
-                               while( propIter.hasNext() ){
-                                       String propName = propIter.next();
-                                       String infoKey = nType + "|" + propName;
-                                       if( ! dbMaps.PropertyVersionInfoMap.containsKey(infoKey) ){
-                                               // We haven't seen this one yet -- add it in.
-                                               dbMaps.PropertyVersionInfoMap.put(infoKey, apiVersion);
-                                       }
-                               }
-                       }
-                       dbMapsContainer.put(apiVersion, dbMaps);
-                       previousApiVersion = apiVersion;
-               }
-       }
-
-       /**
-        * As sorted list.
-        *
-        * @param <T> the generic type
-        * @param c the c
-        * @return the list
-        */
-       private <T extends Comparable<? super T>> List<T> asSortedList(Collection<T> c) {
-               List<T> list = new ArrayList<T>(c);
-               java.util.Collections.sort(list);
-               return list;
-       }
-
-       /**
-        * From comma separated string.
-        *
-        * @param string the string
-        * @return the iterable
-        */
-       public Iterable<String> fromCommaSeparatedString( String string ) {
-               Iterable<String> split = Splitter.on( "," ).omitEmptyStrings().trimResults().split( string );
-               return split;
-       }
-
-       /**
-        * Pretty print map.
-        *
-        * @param map the map
-        * @return the string
-        */
-       public String prettyPrintMap(Multimap<String, String> map) {
-               StringBuilder sb = new StringBuilder();
-               sb.append('\n');
-               for (String key:map.keySet()) {
-                       sb.append('\t');
-                       sb.append(key);
-                       sb.append('=').append('"');
-                       sb.append(map.get(key));
-                       sb.append('"');
-                       sb.append('\n');
-               }
-               return sb.toString();
-       }
-
-       /**
-        * Pretty print map.
-        *
-        * @param map the map
-        * @return the string
-        */
-       public String prettyPrintMap(Map<?, String> map) {
-               StringBuilder sb = new StringBuilder();
-               sb.append('\n');
-               for (Object key:map.keySet()) {
-                       sb.append('\t');
-                       sb.append(key);
-                       sb.append('=').append('"');
-                       sb.append(map.get(key));
-                       sb.append('"');
-                       sb.append('\n');
-               }
-               return sb.toString();
-       }
-
-}
index ff0ae17..b5a8003 100644 (file)
@@ -23,6 +23,7 @@ package org.openecomp.aai.introspection;
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.List;
@@ -32,13 +33,13 @@ import java.util.Set;
 
 import org.apache.commons.lang.ClassUtils;
 import org.eclipse.persistence.exceptions.DynamicException;
-
 import org.openecomp.aai.introspection.exceptions.AAIUnknownObjectException;
 import org.openecomp.aai.logging.ErrorLogHelper;
 import org.openecomp.aai.restcore.MediaType;
 import org.openecomp.aai.schema.enums.ObjectMetadata;
 import org.openecomp.aai.schema.enums.PropertyMetadata;
 import org.openecomp.aai.workarounds.NamingExceptions;
+
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import com.google.common.base.CaseFormat;
@@ -297,6 +298,14 @@ public abstract class Introspector implements Cloneable {
                result = this.uniqueProperties;
                return result;
        }
+       
+       public Set<String> getDependentOn() {
+               String dependentOn = this.getMetadata(ObjectMetadata.DEPENDENT_ON);
+               if (dependentOn == null) {
+                       dependentOn = "";
+               }
+               return new LinkedHashSet<>(Arrays.asList(dependentOn.split(",")));
+       }
        /**
         * 
         * @param name
index b28e435..9163f29 100644 (file)
@@ -37,16 +37,16 @@ import javax.xml.transform.stream.StreamSource;
 import org.eclipse.persistence.dynamic.DynamicEntity;
 import org.eclipse.persistence.jaxb.UnmarshallerProperties;
 import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
-import org.w3c.dom.Document;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
 import org.openecomp.aai.exceptions.AAIException;
 import org.openecomp.aai.introspection.exceptions.AAIUnknownObjectException;
 import org.openecomp.aai.introspection.exceptions.AAIUnmarshallingException;
 import org.openecomp.aai.logging.ErrorLogHelper;
 import org.openecomp.aai.restcore.MediaType;
 import org.openecomp.aai.workarounds.NamingExceptions;
+import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import com.google.common.base.CaseFormat;
@@ -85,6 +85,9 @@ public class MoxyLoader extends Loader {
        @Override
        public Object objectFromName(String name) throws AAIUnknownObjectException {
 
+               if (name == null) {
+                       throw new AAIUnknownObjectException("null name passed in");
+               }
                final String sanitizedName = NamingExceptions.getInstance().getObjectName(name);
                final String upperCamel;
 
@@ -186,5 +189,9 @@ public class MoxyLoader extends Loader {
                result.remove("EdgePropNames");
                return result;
        }
+       
+       public DynamicJAXBContext getJAXBContext() {
+               return this.jaxbContext;
+       }
 
 }
index 0cd0780..dec830a 100644 (file)
@@ -28,18 +28,18 @@ import javax.xml.bind.JAXBException;
 import javax.xml.bind.Unmarshaller;
 import javax.xml.transform.stream.StreamSource;
 
+import org.eclipse.persistence.jaxb.JAXBContextFactory;
 import org.eclipse.persistence.jaxb.UnmarshallerProperties;
-
 import org.openecomp.aai.db.props.AAIProperties;
 import org.openecomp.aai.introspection.exceptions.AAIUnknownObjectException;
 import org.openecomp.aai.introspection.exceptions.AAIUnmarshallingException;
 import org.openecomp.aai.logging.ErrorLogHelper;
 import org.openecomp.aai.restcore.MediaType;
 import org.openecomp.aai.workarounds.NamingExceptions;
+
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import com.google.common.base.CaseFormat;
-import org.eclipse.persistence.jaxb.JAXBContextFactory;
 
 public class PojoLoader extends Loader {
 
@@ -73,6 +73,9 @@ public class PojoLoader extends Loader {
        @Override
        public Object objectFromName(String name) throws AAIUnknownObjectException {
 
+               if (name == null) {
+                       throw new AAIUnknownObjectException("null name passed in");
+               }
                final String sanitizedName = NamingExceptions.getInstance().getObjectName(name);
                final String upperCamel;
 
index 37a1074..43af40a 100644 (file)
@@ -558,7 +558,13 @@ public class ErrorLogHelper {
        public static void logException(AAIException e) {
                final ErrorObject errorObject = e.getErrorObject();
 
-               MDC.put("severity", errorObject.getSeverity()); //TODO Use LoggingContext.severity(int severity)
+//             MDC.put("severity", errorObject.getSeverity()); //TODO Use LoggingContext.severity(int severity)
+               String severityCode = errorObject.getSeverityCode(errorObject.getSeverity());
+               int sevCode = Integer.parseInt(severityCode);
+               if (sevCode > 0 && sevCode <= 3 )
+               {
+                       LoggingContext.severity(sevCode);
+               }
                
                final String errorMessage = new StringBuilder()
                                                                                        .append(errorObject.getErrorText())
index 0198c60..50822f6 100644 (file)
@@ -294,6 +294,29 @@ public class ErrorObject {
                }
                return prefix + disposition + "." + category + "." + errorCode;
        }
+       
+       /**
+        * Gets the severity Code.  This is also the string
+        * configured in Nagios to alert on
+        *
+        * @return the severity
+        */
+       // Get the numerical value of severity
+       public String getSeverityCode(String severity) {
+               String severityCode = "";
+               switch (severity) {
+               case "WARN":
+                       severityCode = "1";
+                       break;
+               case "ERROR":
+                       severityCode = "2";
+                       break;
+               case "FATAL":
+                       severityCode = "3";
+                       break;
+               }
+               return severityCode;
+       }
 
        /**
         * {@inheritDoc}
index 1a46bb2..9a2d591 100644 (file)
@@ -115,6 +115,10 @@ public class LoggingContext {
 
        public static void requestId(String requestId) {
                try {
+                       if (requestId.contains(":")) {
+                               String[] uuidParts = requestId.split(":");
+                               requestId = uuidParts[0];
+                       }
                        MDC.put(LoggingField.REQUEST_ID.toString(), UUID.fromString(requestId).toString());
                } catch (IllegalArgumentException e) {
                        final UUID generatedRequestUuid = UUID.randomUUID();
  * ============LICENSE_END=========================================================
  */
 
-package org.openecomp.aai.domain.model;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class AAIResourceKeys {
-       private List<AAIResourceKey> aaiResourceKey;
-
-       /**
-        * Gets the aai resource key.
-        *
-        * @return the aai resource key
-        */
-       public List<AAIResourceKey> getAaiResourceKey() {
-               if (aaiResourceKey == null) { 
-                       aaiResourceKey = new ArrayList<AAIResourceKey>();
-               }
-               return aaiResourceKey;
+package org.openecomp.aai.parsers.exceptions;
+
+import org.openecomp.aai.exceptions.AAIException;
+
+public class DoesNotStartWithValidNamespaceException extends AAIException {
+
+       private static final long serialVersionUID = -888876613879411865L;
+       
+       public DoesNotStartWithValidNamespaceException(String message) {
+               super("AAI_3000", message);
+       }
+
+       public DoesNotStartWithValidNamespaceException(Throwable cause) {
+               super("AAI_3000",cause);
        }
+
+       public DoesNotStartWithValidNamespaceException(String message, Throwable cause) {
+               super("AAI_3000", cause, message);
+       }
+
 }
+
index 8fc2ea2..bd9280f 100644 (file)
@@ -31,7 +31,6 @@ import java.util.Optional;
 import javax.ws.rs.core.UriBuilder;
 
 import org.apache.tinkerpop.gremlin.structure.Direction;
-
 import org.openecomp.aai.exceptions.AAIException;
 import org.openecomp.aai.introspection.Introspector;
 import org.openecomp.aai.introspection.IntrospectorFactory;
@@ -47,6 +46,7 @@ import org.openecomp.aai.serialization.db.EdgeRule;
 import org.openecomp.aai.serialization.db.EdgeRules;
 import org.openecomp.aai.serialization.db.EdgeType;
 import org.openecomp.aai.workarounds.LegacyURITransformer;
+
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 
@@ -115,7 +115,9 @@ public class RelationshipToURI {
                        } else {
                                throw new AAIIdentityMapParseException("nothing to parse");
                        }
-               } catch (UnsupportedEncodingException | URISyntaxException e) {
+               } catch (AAIException e) { 
+                       throw e;
+               } catch (Exception e) {
                        throw new AAIIdentityMapParseException("Could not parse relationship-list object: " + e.getMessage(), e);
                }
 
index 8f86717..b145717 100644 (file)
@@ -28,18 +28,18 @@ import javax.ws.rs.core.MultivaluedHashMap;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.UriBuilder;
 
-import org.springframework.web.util.UriUtils;
-
 import org.openecomp.aai.exceptions.AAIException;
 import org.openecomp.aai.introspection.Introspector;
 import org.openecomp.aai.introspection.Loader;
 import org.openecomp.aai.introspection.LoaderFactory;
 import org.openecomp.aai.introspection.Version;
 import org.openecomp.aai.logging.ErrorLogHelper;
+import org.openecomp.aai.parsers.exceptions.DoesNotStartWithValidNamespaceException;
 import org.openecomp.aai.rest.RestTokens;
 import org.openecomp.aai.schema.enums.ObjectMetadata;
 import org.openecomp.aai.serialization.db.EdgeType;
 import org.openecomp.aai.util.AAIConfig;
+import org.springframework.web.util.UriUtils;
 
 
 /**
@@ -48,7 +48,7 @@ import org.openecomp.aai.util.AAIConfig;
 public class URIParser {
        
        private URI uri = null;
-       
+
        protected Loader loader = null;
        
        protected Loader originalLoader = null;
@@ -74,9 +74,9 @@ public class URIParser {
                } catch (AAIException e) {
                        ErrorLogHelper.logException(e);
                }
-               
+
                //Load the latest version because we need it for cloud region
-               
+
                this.loader = loader;
        }
        
@@ -175,7 +175,7 @@ public class URIParser {
                                                //first time through, make sure it starts from a namespace
                                                //ignore abstract types
                                                if (!isRelative && !abstractType.equals("true") && !validNamespaces.hasChild(introspector)) {
-                                                       throw new AAIException("AAI_3000", uri + " not a valid path. It does not start from a valid namespace");
+                                                       throw new DoesNotStartWithValidNamespaceException( uri + " not a valid path. It does not start from a valid namespace");
                                                }
                                        }
                                        
@@ -248,7 +248,7 @@ public class URIParser {
        protected URI handleCloudRegion(String action, URI uri) {
                
                return uri;
-               
+
        }
        
        /**
index cf011bf..57a1de5 100644 (file)
@@ -71,7 +71,7 @@ public class URIToObject implements Parsable {
         * @throws AAIException the AAI exception
         * @throws UnsupportedEncodingException the unsupported encoding exception
         */
-       public URIToObject(Loader loader, URI uri) throws IllegalArgumentException, AAIException, UnsupportedEncodingException {
+       public URIToObject(Loader loader, URI uri) throws AAIException, UnsupportedEncodingException {
                
                URIParser parser = new URIParser(loader, uri);
                this.relatedObjects = new HashMap<>();
@@ -80,7 +80,7 @@ public class URIToObject implements Parsable {
                this.loader = parser.getLoader();
                this.version = loader.getVersion();
        }
-       public URIToObject(Loader loader, URI uri, HashMap<String, Introspector> relatedObjects) throws IllegalArgumentException, AAIException, UnsupportedEncodingException {
+       public URIToObject(Loader loader, URI uri, HashMap<String, Introspector> relatedObjects) throws AAIException, UnsupportedEncodingException {
                
                URIParser parser = new URIParser(loader, uri);
                this.relatedObjects = relatedObjects;
index e5ab80e..f1f53a4 100644 (file)
 
 package org.openecomp.aai.restcore;
 
-import java.io.StringReader;
 import java.io.UnsupportedEncodingException;
 import java.net.URI;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
-import javax.xml.bind.JAXBException;
-import javax.xml.transform.stream.StreamSource;
-
-import org.eclipse.persistence.dynamic.DynamicEntity;
-import org.eclipse.persistence.jaxb.JAXBUnmarshaller;
-import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
 
 import org.openecomp.aai.db.props.AAIProperties;
 import org.openecomp.aai.dbmap.DBConnectionType;
-import org.openecomp.aai.domain.model.AAIResource;
 import org.openecomp.aai.exceptions.AAIException;
 import org.openecomp.aai.introspection.Introspector;
 import org.openecomp.aai.introspection.Loader;
@@ -57,6 +46,8 @@ import org.openecomp.aai.logging.LoggingContext;
 import org.openecomp.aai.util.AAIConfig;
 import org.openecomp.aai.util.AAIConstants;
 import org.openecomp.aai.util.AAITxnLog;
+import org.openecomp.aai.util.FormatDate;
+
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 import com.google.common.base.Joiner;
@@ -149,19 +140,9 @@ public class RESTAPI {
         * @return the string
         */
        protected String genDate() {
-               Date date = new Date();
-               DateFormat formatter = null;
-               try {
-                       formatter = new SimpleDateFormat(AAIConfig.get(AAIConstants.HBASE_TABLE_TIMESTAMP_FORMAT));
-               } catch (AAIException ex) {
-                       ErrorLogHelper.logException(ex);
-               } finally {
-                       if (formatter == null) {
-                               formatter = new SimpleDateFormat("YYMMdd-HH:mm:ss:SSS");
-                       }
-               }
-
-               return formatter.format(date);
+               FormatDate fd = new FormatDate(AAIConfig.get(AAIConstants.HBASE_TABLE_TIMESTAMP_FORMAT, "YYMMdd-HH:mm:ss:SSS"));
+               
+               return fd.getDateTime();
        }
 
        /**
index 0da8484..3a90e8e 100644 (file)
 package org.openecomp.aai.util;
 
 import java.io.IOException;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 
 import org.apache.hadoop.hbase.HBaseConfiguration;
@@ -40,11 +37,11 @@ import org.apache.hadoop.hbase.filter.FilterList;
 import org.apache.hadoop.hbase.filter.RegexStringComparator;
 import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
 import org.apache.hadoop.hbase.util.Bytes;
-
 import org.openecomp.aai.domain.notificationEvent.NotificationEvent;
 import org.openecomp.aai.domain.translog.TransactionLogEntries;
 import org.openecomp.aai.domain.translog.TransactionLogEntry;
 import org.openecomp.aai.exceptions.AAIException;
+
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 
@@ -74,9 +71,9 @@ public class AAITxnLog  {
                        config.set(AAIConstants.HBASE_CONFIGURATION_ZOOKEEPER_QUORUM, AAIConfig.get(AAIConstants.HBASE_CONFIGURATION_ZOOKEEPER_QUORUM));
                        config.set(AAIConstants.HBASE_CONFIGURATION_ZOOKEEPER_CLIENTPORT, AAIConfig.get(AAIConstants.HBASE_CONFIGURATION_ZOOKEEPER_CLIENTPORT));
                        
-                       Date date = new Date();
-                       DateFormat formatter = new SimpleDateFormat(AAIConfig.get(AAIConstants.HBASE_TABLE_TIMESTAMP_FORMAT));
-                       tm = formatter.format(date);
+                       FormatDate fd = new FormatDate(AAIConfig.get(AAIConstants.HBASE_TABLE_TIMESTAMP_FORMAT, "YYMMdd-HH:mm:ss:SSS"));
+                       
+                       tm = fd.getDateTime();
                } catch (AAIException e) {
                        LOGGER.warn("Missing configuration in AAIConfig: " + e.getMessage());
                }
@@ -188,14 +185,9 @@ public class AAITxnLog  {
                        ) {
 
                if (tid == null || "".equals(tid)) {
-                       Date date = new Date();
-                       DateFormat formatter = null;
-                       try {
-                               formatter = new SimpleDateFormat(AAIConfig.get(AAIConstants.HBASE_TABLE_TIMESTAMP_FORMAT));
-                       } catch (Exception e) {
-                               formatter = new SimpleDateFormat("YYYYMMdd-HH:mm:ss:SSS");
-                       }
-                       tm = formatter.format(date);
+                       FormatDate fd = new FormatDate(AAIConfig.get(AAIConstants.HBASE_TABLE_TIMESTAMP_FORMAT, "YYMMdd-HH:mm:ss:SSS"));
+                       
+                       tm = fd.getDateTime();
                        tid = tm + "-";
                } 
                String htid = tid;
 
 package org.openecomp.aai.util;
 
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Collections;
-import java.util.Date;
-import java.util.TimeZone;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
 
-public class AAIUtils {
+public class FormatDate {
 
-       /**
-        * Null check.
-        *
-        * @param <T> the generic type
-        * @param iterable the iterable
-        * @return the iterable
-        */
-       public static <T> Iterable<T> nullCheck(Iterable<T> iterable) {
-           return iterable == null ? Collections.<T>emptyList() : iterable;
+       private final String timeZone;
+       private final String pattern;
+       public FormatDate(String pattern) {
+               this.pattern = pattern;
+               this.timeZone = "GMT";
+       }
+       public FormatDate(String pattern, String timeZone) {
+               this.pattern = pattern;
+               this.timeZone = timeZone;
        }
        
-       /**
-        * Gen date.
-        *
-        * @return the string
-        */
-       public static String genDate() {
-               Date date = new Date();
-               DateFormat formatter = new SimpleDateFormat("YYMMdd-HH:mm:ss:SSS");
-               formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
-               return formatter.format(date);
-       }       
-
+       public String getDateTime() {
+               
+               final DateTimeFormatter formatter =
+                               DateTimeFormatter.ofPattern(pattern);
+               return formatter.format(ZonedDateTime.now(ZoneId.of(timeZone)));
+       }
 }
index 870ddec..8840f41 100644 (file)
 
 package org.openecomp.aai.util;
 
+import java.io.IOException;
+
+import org.apache.commons.io.output.ByteArrayOutputStream;
+
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.core.JsonGenerationException;
 import com.fasterxml.jackson.databind.DeserializationFeature;
@@ -27,64 +31,8 @@ import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
-import com.google.common.base.CaseFormat;
-import com.google.common.collect.Multimap;
-import com.thinkaurelius.titan.core.TitanVertex;
-import org.apache.commons.io.output.ByteArrayOutputStream;
-import org.eclipse.persistence.dynamic.DynamicEntity;
-import org.eclipse.persistence.dynamic.DynamicType;
-import org.eclipse.persistence.jaxb.MarshallerProperties;
-import org.openecomp.aai.domain.model.AAIResource;
-import org.openecomp.aai.exceptions.AAIException;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.*;
-import java.util.Map.Entry;
 
 public class PojoUtils {
-       
-       /**
-        * Gets the key value list.
-        *
-        * @param <T> the generic type
-        * @param e the e
-        * @param clazz the clazz
-        * @return the key value list
-        * @throws IllegalAccessException the illegal access exception
-        * @throws IllegalArgumentException the illegal argument exception
-        * @throws InvocationTargetException the invocation target exception
-        */
-       public <T> List<KeyValueList> getKeyValueList(Entity e, T clazz) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
-               List<KeyValueList> kvList = e.getKeyValueList();
-               Object value = null;
-               Method[] methods = clazz.getClass().getDeclaredMethods();
-               String propertyName = "";
-               
-               for (Method method : methods) { 
-                       if (method.getName().startsWith("get")) { 
-                               propertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,method.getName().substring(3));
-                               if (!(method.getReturnType().getName().contains("aai")) || method.getReturnType().getName().contains("java.util.List")) {
-                                       value = method.invoke(clazz);
-                                       KeyValueList kv = new KeyValueList();
-                                       kv.setKey(propertyName);
-                                       if (value != null) { 
-                                               kv.setValue(value.toString());
-                                       } else { 
-                                               kv.setValue("");
-                                       }
-                                       kvList.add(kv);
-                               }
-                       }
-               }
-               return kvList;
-       }
-       
        /**
         * Gets the json from object.
         *
@@ -131,608 +79,4 @@ public class PojoUtils {
     
         return baos.toString();
        }
-       
-       /**
-        * Gets the json from dynamic object.
-        *
-        * @param ent the ent
-        * @param jaxbContext the jaxb context
-        * @param includeRoot the include root
-        * @return the json from dynamic object
-        * @throws JsonGenerationException the json generation exception
-        * @throws JsonMappingException the json mapping exception
-        * @throws IOException Signals that an I/O exception has occurred.
-        * @throws JAXBException the JAXB exception
-        */
-       public String getJsonFromDynamicObject(DynamicEntity ent, org.eclipse.persistence.jaxb.JAXBContext jaxbContext, boolean includeRoot) throws JsonGenerationException, JsonMappingException, IOException, JAXBException {
-               org.eclipse.persistence.jaxb.JAXBMarshaller marshaller = jaxbContext.createMarshaller();
-               
-               marshaller.setProperty(org.eclipse.persistence.jaxb.JAXBMarshaller.JAXB_FORMATTED_OUTPUT, false);
-               marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, Boolean.FALSE) ;
-               marshaller.setProperty("eclipselink.json.include-root", includeRoot);
-               marshaller.setProperty("eclipselink.media-type", "application/json");
-               StringWriter writer = new StringWriter();
-               marshaller.marshal(ent, writer);
-        
-               return writer.toString();
-       }
-       
-       /**
-        * Gets the xml from object.
-        *
-        * @param <T> the generic type
-        * @param clazz the clazz
-        * @return the xml from object
-        * @throws JAXBException the JAXB exception
-        */
-       public <T> String getXmlFromObject(T clazz) throws JAXBException {
-               ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               JAXBContext jc = JAXBContext.newInstance(clazz.getClass().getPackage().getName());
-
-               Marshaller marshaller = jc.createMarshaller();
-               marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
-               marshaller.marshal(clazz, baos);
-        
-        return baos.toString();
-       }
-       
-       /**
-        * Gets the lookup key.
-        *
-        * @param baseKey the base key
-        * @param lookupHash the lookup hash
-        * @param keyProps the key props
-        * @return the lookup key
-        */
-       public String getLookupKey (String baseKey, HashMap<String,Object> lookupHash, Collection<String> keyProps) { 
-               int baseKeyLen = baseKey.length();
-               StringBuffer newKey = new StringBuffer();
-               if (baseKeyLen > 0) { 
-                       newKey.append(baseKey);
-               }
-               
-               Iterator <String> keyPropI = keyProps.iterator();
-               while( keyPropI.hasNext() ){
-                       String keyProp = keyPropI.next();
-                       if (baseKeyLen > 0) {
-                               newKey.append("&");
-                       }
-                       newKey.append(keyProp + "=" + lookupHash.get(keyProp));
-               }
-               return newKey.toString();
-       }
-       
-       /**
-        * Gets the lookup keys.
-        *
-        * @param lookupHashes the lookup hashes
-        * @param _dbRulesNodeKeyProps the db rules node key props
-        * @return the lookup keys
-        */
-       public String getLookupKeys (LinkedHashMap<String,HashMap<String,Object>> lookupHashes, Multimap<String, String> _dbRulesNodeKeyProps) { 
-               Iterator<String> it = lookupHashes.keySet().iterator();
-               String lookupKeys = "";
-               while (it.hasNext()) {
-                       String objectType = (String)it.next();
-                       HashMap<String,Object> lookupHash = lookupHashes.get(objectType);
-                                               
-                       Collection<String> keyProps = _dbRulesNodeKeyProps.get(objectType);
-                       Iterator <String> keyPropI = keyProps.iterator();
-                       while( keyPropI.hasNext() ){
-                               lookupKeys += lookupHash.get(keyPropI.next());
-                       }
-               }
-               return lookupKeys;
-       }
-
-       /**
-        * Gets the example object.
-        *
-        * @param <T> the generic type
-        * @param clazz the clazz
-        * @param singleton the singleton
-        * @return the example object
-        * @throws IllegalAccessException the illegal access exception
-        * @throws IllegalArgumentException the illegal argument exception
-        * @throws InvocationTargetException the invocation target exception
-        * @throws NoSuchMethodException the no such method exception
-        * @throws SecurityException the security exception
-        * @throws AAIException the AAI exception
-        */
-       public <T> void getExampleObject(T clazz, boolean singleton) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, AAIException {
-               Method[] methods = clazz.getClass().getDeclaredMethods();
-               String dnHypPropertyName = "";
-               String upCamPropertyName = "";
-               Random rand = new Random();
-               int randInt = rand.nextInt(10000000);
-
-               for (Method method : methods) { 
-                       boolean go = false;
-                       if (method.getName().startsWith("get")) { 
-                               dnHypPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,method.getName().substring(3));
-                               upCamPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL,method.getName().substring(3));
-                               go = true;
-                       } else if (method.getName().startsWith("is")) { 
-                               dnHypPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,method.getName().substring(2));
-                               upCamPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL,method.getName().substring(2));
-                               go = true;
-                       }
-                       // don't return resource-version on a singleton
-                       if (singleton && dnHypPropertyName.equals("resource-version")) {
-                               go = false;
-                       }
-                       if (go) { 
-                               String retType = method.getReturnType().getName();
-                               if (!retType.contains("aai") && !retType.contains("java.util.List")) {
-                                       // get the setter
-                                       Method meth = clazz.getClass().getMethod("set" + upCamPropertyName, method.getReturnType());
-                                       
-                                       if (retType.contains("String")) { 
-                                               String val = "example-" + dnHypPropertyName + "-val-" +  randInt;
-                                               if (val != null) { 
-                                                       meth.invoke(clazz, val);
-                                               }
-                                       } else if (retType.toLowerCase().contains("long")) {
-                                               Integer foo = rand.nextInt(100000);
-                                               meth.invoke(clazz, foo.longValue());
-                                       } else if (retType.toLowerCase().contains("int")) { 
-                                               meth.invoke(clazz, rand.nextInt(100000));
-                                       } else if (retType.toLowerCase().contains("short")) { 
-                                               Integer randShort = rand.nextInt(10000);
-                                               meth.invoke(clazz, randShort.shortValue());
-                                       } else if (retType.toLowerCase().contains("boolean")) { 
-                                               meth.invoke(clazz, true);
-                                       }
-                               }
-                       }
-               }
-       }
-
-       
-       /**
-        * Gets the aai object from vertex.
-        *
-        * @param <T> the generic type
-        * @param clazz the clazz
-        * @param vert the vert
-        * @param _propertyDataTypeMap the property data type map
-        * @return the aai object from vertex
-        * @throws IllegalAccessException the illegal access exception
-        * @throws IllegalArgumentException the illegal argument exception
-        * @throws InvocationTargetException the invocation target exception
-        * @throws NoSuchMethodException the no such method exception
-        * @throws SecurityException the security exception
-        * @throws AAIException the AAI exception
-        */
-       public <T> void getAaiObjectFromVertex(T clazz, TitanVertex vert, Map<String, String> _propertyDataTypeMap) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, AAIException {
-               Method[] methods = clazz.getClass().getDeclaredMethods();
-               String dnHypPropertyName = "";
-               String upCamPropertyName = "";
-               for (Method method : methods) { 
-                       boolean go = false;
-                       if (method.getName().startsWith("get")) { 
-                               dnHypPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,method.getName().substring(3));
-                               upCamPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL,method.getName().substring(3));
-                               go = true;
-                       } else if (method.getName().startsWith("is")) { 
-                               dnHypPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,method.getName().substring(2));
-                               upCamPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL,method.getName().substring(2));
-                               go = true;
-                       }
-                       if (go) { 
-                               String retType = method.getReturnType().getName();
-                               if (!retType.contains("aai") && !retType.contains("java.util.List")) {
-                                       // get the setter
-                                       Method meth = clazz.getClass().getMethod("set" + upCamPropertyName, method.getReturnType());
-                                       
-                                       if (retType.contains("String")) { 
-                                               String val = (String)vert.<String>property(dnHypPropertyName).orElse(null);
-                                               if (val != null) { 
-                                                       meth.invoke(clazz, val);
-                                               }
-                                       } else if (retType.toLowerCase().contains("long")) {
-                                               String titanType = _propertyDataTypeMap.get(dnHypPropertyName);
-                                               
-                                               Long val = null;
-                                               // we have a case where the type in titan is "Integer" but in the POJO it's Long or long
-                                               if (titanType.toLowerCase().contains("int")) {
-                                                       Integer intVal = (Integer)vert.<Integer>property(dnHypPropertyName).orElse(null);
-                                                       if (intVal != null) { 
-                                                               val = intVal.longValue();
-                                                       }
-                                               } else { 
-                                                       val = (Long)vert.<Long>property(dnHypPropertyName).orElse(null);
-                                               }
-                                               if (val != null) { 
-                                                       meth.invoke(clazz, val);
-                                               }
-                                       } else if (retType.toLowerCase().contains("int")) { 
-                                               Integer val = (Integer)vert.<Integer>property(dnHypPropertyName).orElse(null);
-                                               if (val != null) { 
-                                                       meth.invoke(clazz, val);
-                                               }
-                                       } else if (retType.toLowerCase().contains("short")) { 
-                                               Short val = (Short)vert.<Short>property(dnHypPropertyName).orElse(null);
-                                               if (val != null) { 
-                                                       meth.invoke(clazz, val);
-                                               }
-                                       } else if (retType.toLowerCase().contains("boolean")) { 
-                                               Boolean val = (Boolean)vert.<Boolean>property(dnHypPropertyName).orElse(null);
-                                               if (val != null) { 
-                                                       meth.invoke(clazz, val);
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-
-       /**
-        * Gets the topology object.
-        *
-        * @param <T> the generic type
-        * @param clazz the clazz
-        * @param _dbRulesNodeNameProps the db rules node name props
-        * @param _dbRulesNodeKeyProps the db rules node key props
-        * @param vert the vert
-        * @return the topology object
-        * @throws IllegalAccessException the illegal access exception
-        * @throws IllegalArgumentException the illegal argument exception
-        * @throws InvocationTargetException the invocation target exception
-        * @throws NoSuchMethodException the no such method exception
-        * @throws SecurityException the security exception
-        * @throws AAIException the AAI exception
-        */
-       public <T> void getTopologyObject(T clazz, Multimap<String, String> _dbRulesNodeNameProps, Multimap<String, String> _dbRulesNodeKeyProps, TitanVertex vert) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, AAIException {
-               Method[] methods = clazz.getClass().getDeclaredMethods();
-               String dnHypPropertyName = "";
-//             Object value = null;
-               List<String> includeProps = new ArrayList<String>();
-                               
-               if ("false".equals(AAIConfig.get("aai.notification.topology.allAttrs", "false"))) {
-                       for (Method method : methods) { 
-                               if (method.getName().startsWith("is")) { 
-                                       dnHypPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,method.getName().substring(2));
-                                       String upCamPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL,method.getName().substring(2));
-                                       String retType = method.getReturnType().getName();
-                                       if (retType.equals("java.lang.Boolean")) {
-                                               // get the setter
-                                               Method setterMeth = clazz.getClass().getMethod("set" + upCamPropertyName, method.getReturnType());
-                                               setterMeth.invoke(clazz, (Boolean)null);
-                                       }
-                               }
-                       }
-                       String dnHypClassName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,clazz.getClass().getSimpleName());
-                       Collection<String> keepProps = _dbRulesNodeNameProps.get(dnHypClassName);
-                       Iterator <String> keepPropI = keepProps.iterator();
-                       while( keepPropI.hasNext() ){
-                               includeProps.add(keepPropI.next());
-                       }
-                       Collection<String> keepProps2 = _dbRulesNodeKeyProps.get(dnHypClassName);
-                       Iterator <String> keepPropI2 = keepProps2.iterator();
-                       while( keepPropI2.hasNext() ){
-                               includeProps.add(keepPropI2.next());
-                       }
-               }
-               
-               for (Method method : methods) { 
-                       if (method.getName().startsWith("get")) { 
-                               dnHypPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,method.getName().substring(3));
-                               if (includeProps.size() > 0) { 
-                                       if (!includeProps.contains(dnHypPropertyName)) {
-                                               continue;
-                                       }
-                               }
-                               String upCamPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL,method.getName().substring(3));
-                               String retType = method.getReturnType().getName();
-                               if (!retType.contains("aai") && !retType.contains("java.util.List")) {
-                                       // get the setter
-                                       Method meth = clazz.getClass().getMethod("set" + upCamPropertyName, method.getReturnType());
-                                       
-                                       if (retType.contains("String")) { 
-                                               String val = (String)vert.<String>property(dnHypPropertyName).orElse(null);
-                                               if (val != null) { 
-                                                       meth.invoke(clazz, val);
-                                               }
-                                       } else if (retType.toLowerCase().contains("long")) {
-                                               Long val = (Long)vert.<Long>property(dnHypPropertyName).orElse(null);
-                                               if (val != null) { 
-                                                       meth.invoke(clazz, val);
-                                               }
-                                       } else if (retType.toLowerCase().contains("int")) { 
-                                               Integer val = (Integer)vert.<Integer>property(dnHypPropertyName).orElse(null);
-                                               if (val != null) { 
-                                                       meth.invoke(clazz, val);
-                                               }
-                                       } else if (retType.toLowerCase().contains("short")) { 
-                                               Short val = (Short)vert.<Short>property(dnHypPropertyName).orElse(null);
-                                               if (val != null) { 
-                                                       meth.invoke(clazz, val);
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-
-       /**
-        * Gets the dynamic topology object.
-        *
-        * @param aaiRes the aai res
-        * @param meObjectType the me object type
-        * @param _dbRulesNodeNameProps the db rules node name props
-        * @param _dbRulesNodeKeyProps the db rules node key props
-        * @param _propertyDataTypeMap the property data type map
-        * @param vert the vert
-        * @return the dynamic topology object
-        * @throws AAIException the AAI exception
-        */
-       public DynamicEntity getDynamicTopologyObject(AAIResource aaiRes, DynamicType meObjectType, Multimap<String, String> _dbRulesNodeNameProps,
-                                                  Multimap<String, String> _dbRulesNodeKeyProps, Map<String, String> _propertyDataTypeMap, TitanVertex vert) throws AAIException {
-               
-               DynamicEntity meObject = meObjectType.newDynamicEntity();
-               
-               List<String> includeProps = new ArrayList<String>();
-                               
-               if ("false".equals(AAIConfig.get("aai.notification.topology.allAttrs", "false"))) {
-                       String dnHypClassName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,meObjectType.getJavaClass().getSimpleName());
-                       Collection<String> keepProps = _dbRulesNodeNameProps.get(dnHypClassName);
-                       Iterator <String> keepPropI = keepProps.iterator();
-                       while( keepPropI.hasNext() ){
-                               includeProps.add(keepPropI.next());
-                       }
-                       Collection<String> keepProps2 = _dbRulesNodeKeyProps.get(dnHypClassName);
-                       Iterator <String> keepPropI2 = keepProps2.iterator();
-                       while( keepPropI2.hasNext() ) {
-                               includeProps.add(keepPropI2.next());
-                       }
-               }
-               
-       
-               
-               for (String attrName : aaiRes.getStringFields()) { 
-                       if (includeProps.contains(attrName)) { 
-                               meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), vert.<String>property(attrName).orElse(null));
-                       }
-               }
-               // the attrName might need to be converted to camel case!!!
-               for (String attrName : aaiRes.getLongFields()) {
-                       if (includeProps.contains(attrName)) { 
-                               String titanType = _propertyDataTypeMap.get(attrName);          
-
-                               Long val = null;
-                               // we have a case where the type in titan is "Integer" but in the POJO it's Long or long
-                               if (titanType.toLowerCase().contains("int")) {
-                                       Integer intVal = (Integer)vert.<Integer>property(attrName).orElse(null);
-                                       if (intVal != null) { 
-                                               val = intVal.longValue();
-                                       }
-                               } else { 
-                                       val = (Long)vert.<Long>property(attrName).orElse(null);
-                               }
-                               meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), val);
-                       }
-               }
-
-               for (String attrName : aaiRes.getIntFields()) { 
-                       if (includeProps.contains(attrName)) { 
-                               Integer val = (Integer)vert.<Integer>property(attrName).orElse(null);
-                               meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), val);
-                       }
-               }
-
-               for (String attrName : aaiRes.getShortFields()) { 
-                       if (includeProps.contains(attrName)) { 
-                               String titanType = _propertyDataTypeMap.get(attrName);          
-
-                               Short val = null;
-                               // we have a case where the type in titan is "Integer" but in the POJO it's Long or long
-                               if (titanType.toLowerCase().contains("int")) {
-                                       Integer intVal = (Integer)vert.<Integer>property(attrName).orElse(null);
-                                       if (intVal != null) { 
-                                               val = intVal.shortValue();
-                                       }
-                               } else { 
-                                       val = (Short)vert.<Short>property(attrName).orElse(null);
-                               }
-                               meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), val);
-                       }
-               }
-
-               for (String attrName : aaiRes.getBooleanFields()) {
-                       if (includeProps.contains(attrName)) { 
-                               Boolean val = (Boolean)vert.<Boolean>property(attrName).orElse(null);
-                               meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)),  val);
-                       }
-               }
-               return meObject;        
-       }
-
-       /**
-        * Gets the aai dynamic object from vertex.
-        *
-        * @param aaiRes the aai res
-        * @param meObject the me object
-        * @param vert the vert
-        * @param _propertyDataTypeMap the property data type map
-        * @return the aai dynamic object from vertex
-        */
-       public void getAaiDynamicObjectFromVertex(AAIResource aaiRes, DynamicEntity meObject, TitanVertex vert,
-                                              Map<String, String> _propertyDataTypeMap) {
-               getAaiDynamicObjectFromVertex(aaiRes, meObject, vert, _propertyDataTypeMap, null);
-       }
-       
-       /**
-        * Gets the aai dynamic object from vertex.
-        *
-        * @param aaiRes the aai res
-        * @param meObject the me object
-        * @param vert the vert
-        * @param _propertyDataTypeMap the property data type map
-        * @param propertyOverRideHash the property over ride hash
-        * @return the aai dynamic object from vertex
-        */
-       @SuppressWarnings("unchecked")
-       public void getAaiDynamicObjectFromVertex(AAIResource aaiRes, DynamicEntity meObject, TitanVertex vert,
-                                              Map<String, String> _propertyDataTypeMap, HashMap<String, Object> propertyOverRideHash) {
-                       
-               for (String attrName : aaiRes.getStringFields()) { 
-                       if (propertyOverRideHash == null || (propertyOverRideHash != null && propertyOverRideHash.containsKey(attrName))) {
-                               meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), vert.<String>property(dbAliasWorkaround(attrName)).orElse(null));
-                       }
-               }
-               
-               for (String attrName : aaiRes.getStringListFields()) { 
-                       if (propertyOverRideHash == null || (propertyOverRideHash != null && propertyOverRideHash.containsKey(attrName))) {
-                               meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), vert.<ArrayList<String>>property(attrName).orElse(null));
-                       }
-               }
-               
-               // the attrName might need to be converted to camel case!!!
-               for (String attrName : aaiRes.getLongFields()) { 
-                       String titanType = _propertyDataTypeMap.get(attrName);          
-                       Long val = null;
-                       // we have a case where the type in titan is "Integer" but in the POJO it's Long or long
-                       if (titanType.toLowerCase().contains("int")) {
-                               Object vertexVal = vert.property(attrName).orElse(null);
-                               if (vertexVal != null) {
-                                       if (vertexVal instanceof Integer) {
-                                               val = ((Integer)vertexVal).longValue();
-                                               
-                                       } else {
-                                               val = (Long)vert.<Long>property(attrName).orElse(null); 
-                                       }
-                               }
-                       } else {
-                               val = (Long)vert.<Long>property(attrName).orElse(null); 
-                       }
-                       if (val != null) { 
-                               if (propertyOverRideHash == null || (propertyOverRideHash != null && propertyOverRideHash.containsKey(attrName))) {
-                                       meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), val);
-                               }
-                       }
-               }
-               
-               for (String attrName : aaiRes.getIntFields()) { 
-                       Integer val = (Integer)vert.<Integer>property(attrName).orElse(null);
-                       if (val != null) { 
-                               if (propertyOverRideHash == null || (propertyOverRideHash != null && propertyOverRideHash.containsKey(attrName))) {
-                                       meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), val);
-                               }
-                       }
-               }
-               
-               for (String attrName : aaiRes.getShortFields()) { 
-                       String titanType = _propertyDataTypeMap.get(attrName);          
-                       Short val = null;
-                       // we have a case where the type in titan is "Integer" but in the POJO it's Long or long
-                       if (titanType.toLowerCase().contains("int")) {
-                               Integer intVal = (Integer)vert.<Integer>property(attrName).orElse(null);
-                               if (intVal != null) { 
-                                       val = intVal.shortValue();
-                               }
-                       } else { 
-                               val = (Short)vert.<Short>property(attrName).orElse(null);
-                       }
-                       if (val != null) { 
-                               if (propertyOverRideHash == null || (propertyOverRideHash != null && propertyOverRideHash.containsKey(attrName))) {
-                                       meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), val);
-                               }
-                       }
-               }
-               
-               for (String attrName : aaiRes.getBooleanFields()) {
-                       Boolean val = (Boolean)vert.<Boolean>property(attrName).orElse(null);
-                       // This is not ideal, but moxy isn't marshalling these attributes.
-                       // TODO: Figure out how to see the default-value from the OXM at startup (or at runtime).
-                       String dnHypClassName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,aaiRes.getSimpleName());
-                       if (val == null && AAIConfig.getDefaultBools().containsKey(dnHypClassName)) {
-                               if (AAIConfig.getDefaultBools().get(dnHypClassName).contains(attrName)) {
-                                       val = false;
-                               }
-                       }
-                       if (val != null) { 
-                               if (propertyOverRideHash == null || (propertyOverRideHash != null && propertyOverRideHash.containsKey(attrName))) {
-                                       meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)),  val);
-                               }
-                       }
-               }
-                       
-       }
-       
-       private String dbAliasWorkaround(String propName) {
-               final String modelInvariantIdLocal = "model-invariant-id-local";
-               final String modelVersionIdLocal = "model-version-id-local";
-               final String modelInvariantId = "model-invariant-id";
-               final String modelVersionId = "model-version-id";
-               
-               if (propName.equals(modelInvariantId)) {
-                       return modelInvariantIdLocal;
-               }
-               if (propName.equals(modelVersionId)) {
-                       return modelVersionIdLocal;
-               }
-               
-               return propName;
-               
-       }
-
-       /**
-        * Gets the dynamic example object.
-        *
-        * @param childObject the child object
-        * @param aaiRes the aai res
-        * @param singleton the singleton
-        * @return the dynamic example object
-        */
-       public void getDynamicExampleObject(DynamicEntity childObject, AAIResource aaiRes, boolean singleton) {
-               // TODO Auto-generated method stub
-
-               Random rand = new Random();
-               Integer randInt = rand.nextInt(100000);
-               long range = 100000000L;
-               long randLong = (long)(rand.nextDouble()*range);
-               Integer randShrt = rand.nextInt(20000);
-               short randShort = randShrt.shortValue();
-
-               for (String dnHypAttrName : aaiRes.getStringFields()) { 
-                       
-                       if (singleton && ("resource-version").equals(dnHypAttrName)) {
-                               continue;
-                       }
-                       
-                       String dnCamAttrName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,dnHypAttrName);
-                       childObject.set(dnCamAttrName, "example-" + dnHypAttrName + "-val-" +  randInt);
-
-               }
-               
-               for (String dnHypAttrName : aaiRes.getStringListFields()) { 
-                       ArrayList<String> exampleList = new ArrayList<String>();
-                       exampleList.add("example-" + dnHypAttrName + "-val-" + randInt + "-" + 1);
-                       exampleList.add("example-" + dnHypAttrName + "-val-" + randInt + "-" + 2);
-                       String dnCamAttrName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,dnHypAttrName);
-                       childObject.set(dnCamAttrName, exampleList);
-               }
-               
-               // the attrName might need to be converted to camel case!!!
-               for (String dnHypAttrName : aaiRes.getLongFields()) { 
-                       String dnCamAttrName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,dnHypAttrName);
-                       childObject.set(dnCamAttrName, randLong);
-               }
-
-               for (String dnHypAttrName : aaiRes.getIntFields()) { 
-                       String dnCamAttrName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,dnHypAttrName);
-                       childObject.set(dnCamAttrName, randInt);
-               }
-
-               for (String dnHypAttrName : aaiRes.getShortFields()) { 
-                       String dnCamAttrName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,dnHypAttrName);
-                       childObject.set(dnCamAttrName, randShort);
-               }
-
-               for (String dnHypAttrName : aaiRes.getBooleanFields()) {
-                       String dnCamAttrName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,dnHypAttrName);
-                       childObject.set(dnCamAttrName, Boolean.TRUE);
-               }
-       }
 }
diff --git a/aai-core/src/test/resources/bundleconfig-local/etc/auth/aai_policy.json b/aai-core/src/test/resources/bundleconfig-local/etc/auth/aai_policy.json
new file mode 100644 (file)
index 0000000..9706ce9
--- /dev/null
@@ -0,0 +1,37 @@
+{
+    "roles": [{
+            "name": "testRole",
+            "functions": [{
+                    "name": "testFunction",
+                    "methods": [{
+                            "name": "GET"
+                        }, {
+                            "name": "DELETE"
+                        }, {
+                            "name": "PUT"
+                        }
+                    ]
+                }
+            ],
+            "users": [{
+                    "username": "testUser"
+                }
+            ]
+        }, {
+            "name": "testBasicAuth",
+            "functions": [{
+                    "name": "testBasicAuthFuncyion",
+                    "methods": [{
+                            "name": "GET"
+                        }
+                    ]
+                }
+            ],
+            "users": [{
+                    "user": "testBasicAuthUser",
+                    "pass": "OBF:1ytc1vu91v2p1rxf1mqh1v8s1z0d1msn1san1mqf1z0h1v9u1msl1rvf1v1p1vv11yta"
+                }
+            ]
+        }
+    ]
+}
\ No newline at end of file