Add ability to do optional params for custom query 19/28219/1
authorLamont, William (wl2432) <wl2432@att.com>
Mon, 15 Jan 2018 18:15:33 +0000 (13:15 -0500)
committerLamont, William (wl2432) <wl2432@att.com>
Mon, 15 Jan 2018 18:16:09 +0000 (13:16 -0500)
Change-Id: I1e61bbee2def41db5e7064ad3a3e916b7afcc299
Issue-ID: AAI-652
Signed-off-by: Lamont, William (wl2432) <wl2432@att.com>
39 files changed:
aai-traversal/bundleconfig-local/etc/appprops/aaiconfig.properties
aai-traversal/bundleconfig-local/etc/appprops/error.properties
aai-traversal/bundleconfig-local/etc/query/stored-queries.json [new file with mode: 0644]
aai-traversal/bundleconfig-local/etc/query/stored-queries.properties [deleted file]
aai-traversal/src/main/java/org/onap/aai/rest/QueryConsumer.java
aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryConfig.java [new file with mode: 0644]
aai-traversal/src/main/java/org/onap/aai/rest/search/GenericQueryProcessor.java
aai-traversal/src/main/java/org/onap/aai/rest/search/GetCustomQueryConfig.java [new file with mode: 0644]
aai-traversal/src/main/java/org/onap/aai/rest/search/GremlinServerSingleton.java
aai-traversal/src/main/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJson.java [new file with mode: 0644]
aai-traversal/src/test/java/org/onap/aai/HttpTestUtil.java [new file with mode: 0644]
aai-traversal/src/test/java/org/onap/aai/PayloadUtil.java [new file with mode: 0644]
aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphNamedQueryTest.java [new file with mode: 0644]
aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomQueryConfigTest.java [new file with mode: 0644]
aai-traversal/src/test/java/org/onap/aai/rest/search/QueryTest.java
aai-traversal/src/test/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJsonTest.java [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/cloud-region.ComponentList-1.2.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/cloud-region.closed-loop-named-query-1.0.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/cloud-region2.closed-loop-named-query-1.0.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/customer.ComponentList-1.2.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/customer.SvcSubscriberModelInfo-1.0.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/customer.closed-loop-named-query-1.0.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/generic-vnf.ComponentList-1.2.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/generic-vnf.closed-loop-named-query-1.0.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/logical-link.DHVLogicalLinkByCircuitId-1.0.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/model.ComponentList-1.2.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/model.SvcSubscriberModelInfo-1.0.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/model.closed-loop-named-query-1.0.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/query-payload.ComponentList-1.2.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/query-payload.DHVLogicalLinkByCircuitId-1.0.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/query-payload.SvcSubscriberModelInfo-1.0.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/query-payload.closed-loop-named-query-1.0.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/tenant.ComponentList-1.2.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/tenant.closed-loop-named-query-1.0.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/tenant2.closed-loop-named-query-1.0.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/vf-module.ComponentList-1.2.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/vserver.ComponentList-1.2.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/vserver.closed-loop-named-query-1.0.json [new file with mode: 0644]
aai-traversal/src/test/resources/payloads/named-queries/vserver2.closed-loop-named-query-1.0.json [new file with mode: 0644]

index 0599bf2..34ef2de 100644 (file)
@@ -25,11 +25,13 @@ AAI_3003=5:1:WARN:3003:400:3003:Failed to make edge to missing target node of ty
 AAI_3005=5:6:WARN:3005:404:3001:Node cannot be directly accessed for read, must be accessed via ancestor(s)
 AAI_3006=5:6:WARN:3006:404:3001:Node cannot be directly accessed for write, must be accessed via ancestor(s)
 AAI_3007=5:6:INFO:3007:410:3007:This version (%1) of the API is retired, please migrate to %2
-AAI_3008=5:6:ERROR:3008:400:3008:URI is not encoded in UTF-8
-AAI_3009=5:6:ERROR:3009:400:3002:Malformed URL
-AAI_3010=5:6:ERROR:3010:400:3002:Cannot write via this URL
-AAI_3011=5:6:ERROR:3011:400:3000:Unknown XML namespace used in payload
-AAI_3012=5:6:ERROR:3012:400:3012:Unrecognized A&AI function
+AAI_3008=5:6:WARN:3008:400:3008:URI is not encoded in UTF-8
+AAI_3009=5:6:WARN:3009:400:3002:Malformed URL
+AAI_3010=5:6:WARN:3010:400:3002:Cannot write via this URL
+AAI_3011=5:6:WARN:3011:400:3000:Unknown XML namespace used in payload
+AAI_3012=5:6:WARN:3012:400:3012:Unrecognized AAI function
+AAI_3013=5:6:WARN:3013:400:3013:Query payload missing required parameters %1
+AAI_3014=5:6:WARN:3014:400:3014:Query payload is invalid %1
 # pol errors
 AAI_3100=5:1:WARN:3100:400:3100:Unsupported operation %1
 AAI_3101=5:1:WARN:3101:403:3101:Attempt by client %1 to execute API %2
@@ -37,7 +39,7 @@ AAI_3102=5:1:WARN:3102:400:3102:Error parsing input performing %1 on %2
 AAI_3300=5:1:WARN:3300:403:3300:Unauthorized
 AAI_3301=5:1:WARN:3301:401:3301:Stale credentials
 AAI_3302=5:1:WARN:3302:401:3301:Not authenticated
-AAI_3303=5:1:ERROR:3303:403:3300:Too many objects would be returned by this request, please refine your request and retry
+AAI_3303=5:1:WARN:3303:403:3300:Too many objects would be returned by this request, please refine your request and retry
 
 #--- aaigen: 4000-4099
 AAI_4000=5:4:ERROR:4000:500:3002:Internal Error
@@ -47,23 +49,18 @@ AAI_4003=5:4:ERROR:4003:500:3002:Error writing to log file
 AAI_4004=5:4:FATAL:4004:500:3002:Error reading/parsing the error properties file
 AAI_4005=5:4:FATAL:4005:500:3002:Missing or invalid configuration parameter
 AAI_4006=5:4:FATAL:4006:500:3002:Unexpected error in service
-AAI_4007=5:4:ERROR:4007:500:3102:Input parsing error
+AAI_4007=5:4:WARN:4007:500:3102:Input parsing error
 AAI_4008=5:4:ERROR:4008:500:3002:Output parsing error
-AAI_4009=4:0:ERROR:4009:400:3000:Invalid X-FromAppId in header
-AAI_4010=4:0:ERROR:4010:400:3000:Invalid X-TransactionId in header
+AAI_4009=4:0:WARN:4009:400:3000:Invalid X-FromAppId in header
+AAI_4010=4:0:WARN:4010:400:3000:Invalid X-TransactionId in header
 AAI_4011=5:4:ERROR:4011:500:3002:Missing data for REST error response
-AAI_4012=5:4:ERROR:4012:500:3002:Bad rule data in RestRules 
-AAI_4013=5:4:ERROR:4013:500:3002:Error connecting to AAI REST API
-AAI_4014=4:0:ERROR:4014:400:3000:Invalid Accept header
-AAI_4015=4:0:ERROR:4015:400:3000:You must provide at least one indexed property
-AAI_4016=4:0:ERROR:4016:400:3000:The depth parameter must be a number or the string "all"
+AAI_4014=4:0:WARN:4014:400:3000:Invalid Accept header
+AAI_4015=4:0:WARN:4015:400:3000:You must provide at least one indexed property
+AAI_4016=4:0:WARN:4016:400:3000:The depth parameter must be a number or the string "all"
 AAI_4017=5:2:INFO:4017:400:3000:Could not set property
-AAI_4018=5:2:ERROR:4018:400:3000:Unable to convert the string to integer
-#--- aaidbmap: 5101-5199
-AAI_5101=5:4:FATAL:5101:500:3002:Could not connect to database
+AAI_4018=5:2:WARN:4018:400:3000:Unable to convert the string to integer
+#--- aaidbmap: 5102-5199
 AAI_5102=5:4:FATAL:5102:500:3002:Graph database is null after open
-AAI_5103=5:4:ERROR:5103:500:3002:Unexpected error during commit
-AAI_5104=5:4:ERROR:5104:500:3002:Unexpected error during rollback
 AAI_5105=5:4:ERROR:5105:500:3002:Unexpected error reading/updating database
 AAI_5106=5:4:WARN:5106:404:3001:Node not found
 AAI_5107=5:2:WARN:5107:400:3000:Required information missing
@@ -80,14 +77,14 @@ AAI_6107=5:4:WARN:6107:400:3000:Required Edge-property not found in input data
 AAI_6108=5:4:WARN:6108:400:3000:Required Edge-property was passed with no data
 AAI_6109=5:4:WARN:6109:400:3000:Bad dependent Node value
 AAI_6110=5:4:ERROR:6110:400:3100:Node cannot be deleted
-AAI_6111=5:4:ERROR:6111:400:3000:JSON processing error
+AAI_6111=5:4:WARN:6111:400:3000:JSON processing error
 AAI_6112=5:4:ERROR:6112:400:3000:More than one node found by getUniqueNode()
 AAI_6114=5:4:INFO:6114:404:3001:Node Not Found
 AAI_6115=5:4:ERROR:6115:400:3000:Unrecognized NodeType
 AAI_6116=5:4:ERROR:6116:400:3000:Unrecognized Property
 AAI_6117=5:4:ERROR:6117:400:3000:Uniqueness constraint violated
-AAI_6118=5:4:ERROR:6118:400:3000:Required Field not passed.
-AAI_6120=5:4:ERROR:6120:400:3000:Bad Parameter Passed
+AAI_6118=5:4:WARN:6118:400:3000:Required Field not passed.
+AAI_6120=5:4:WARN:6120:400:3000:Bad Parameter Passed
 AAI_6121=5:4:ERROR:6121:400:3000:Problem with internal AAI reference data
 AAI_6122=5:4:ERROR:6122:400:3000:Data Set not complete in DB for this request
 AAI_6123=5:4:ERROR:6123:500:3000:Bad Data found by DataGrooming Tool - Investigate
diff --git a/aai-traversal/bundleconfig-local/etc/query/stored-queries.json b/aai-traversal/bundleconfig-local/etc/query/stored-queries.json
new file mode 100644 (file)
index 0000000..8b883ce
--- /dev/null
@@ -0,0 +1,239 @@
+{
+  "stored-queries":[{
+    "cloud-region-fromVnf":{
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnfc').store('x').createEdgeTraversal(EdgeType.COUSIN, 'vnfc', 'vserver').store('x').createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').store('x').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "linked-devices":{
+      "stored-query":"builder.store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'l-interface'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'lag-interface'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'newvce', 'l-interface'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface')).dedup().until(builder.newInstance().getVerticesByProperty('aai-node-type', new ArrayList<>(Arrays.asList('generic-vnf','newvce','vserver')))).repeat(builder.newInstance().union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'lag-interface', 'l-interface'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'lag-interface'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'vlan'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vlan', 'l-interface'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'lag-interface', 'logical-link'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'lag-interface'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'l-interface', 'logical-link'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'l-interface'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vlan', 'logical-link'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'vlan'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'generic-vnf'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'lag-interface', 'generic-vnf'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'newvce'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'vserver')).dedup().simplePath()).store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "cloud-region-sites":{
+      "query":{
+        "required-properties":["owner"]
+      },
+      "stored-query":"builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner', owner).store('x').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region', 'complex').store('x').cap('x').unfold()"
+    }
+  },{
+    "pserver-fromConfiguration":{
+      "stored-query":"builder.store('x').createEdgeTraversal(EdgeType.COUSIN, 'configuration', 'logical-link').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'l-interface').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'generic-vnf').store('x')).cap('x').unfold().dedup()"
+    }
+  },{
+    "spaas-topology-fromServiceInstance":{
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'generic-vnf').createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'flavor').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'image').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'vserver', 'l-interface').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'l-interface', 'logical-link').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'subnet').store('x').createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'subnet').store('x').createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x')),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'pserver', 'p-interface').createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link').store('x'))).cap('x').unfold().dedup()"
+    }
+  },{
+    "vnf-instances-fromServiceInstancebyModelVersion":{
+      "query":{
+        "required-properties":["vnfType","modelVersionId"]
+      },
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'generic-vnf').getVerticesByProperty('vnf-type', vnfType).getVerticesByProperty('model-version-id-local', modelVersionId).store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "pnf-topology":{
+      "stored-query":"builder.store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'pnf', 'p-interface').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link')).as('item').store('x').createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link').store('x').createEdgeTraversal(EdgeType.COUSIN, 'physical-link', 'p-interface').where(builder.newInstance().not(builder.newInstance().cap('item'))).store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'p-interface', 'pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'p-interface', 'pnf').store('x')),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pnf', 'complex').store('x')).cap('x').unfold().dedup()"
+    }
+  },{
+    "so-request-vfModule":{
+      "stored-query":"builder.store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vf-module', 'generic-vnf').store('x').createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vf-module', 'vserver').createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vf-module', 'volume-group').store('x')).cap('x').unfold().dedup()"
+    }
+  },{
+    "ucpe-instance":{
+      "stored-query":"builder.store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'cloud-region').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region', 'complex')).store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "images-fromCloudRegionNfType":{
+      "query":{
+        "required-properties":["nfType"]
+      },
+      "stored-query":"builder.createEdgeTraversal(EdgeType.TREE, 'cloud-region', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'vserver').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'generic-vnf').getVerticesByProperty('nf-type',nfType)).createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'image').store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "site-l3network-cloudRegion":{
+      "stored-query":"builder.store('x').createEdgeTraversal(EdgeType.COUSIN, 'complex', 'l3-network').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-network', 'cloud-region').store('x').cap('x').unfold()"
+    }
+  },{
+    "topology-fromCloudRegionIdandServiceId":{
+      "query":{
+        "required-properties":["serviceId"]
+      },
+      "stored-query":"builder.createEdgeTraversal(EdgeType.TREE, 'cloud-region', 'availability-zone').createEdgeTraversal(EdgeType.COUSIN, 'availability-zone', 'generic-vnf').getVerticesByProperty('service-id',serviceId).union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'flavor').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'image').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'vserver', 'volume').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'vnfc').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'snapshot').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'vf-module').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'vserver', 'l-interface').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'l-interface', 'logical-link').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'subnet').store('x').createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'subnet').store('x').createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x')))).cap('x').unfold().dedup()"
+    }
+  },{
+    "network-name-fromNetwork-role":{
+      "query":{
+        "required-properties":["networkRole"]
+      },
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN, 'cloud-region', 'l3-network').getVerticesByProperty('network-role', networkRole).store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-network', 'network-policy').store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "service-sites":{
+      "query":{
+        "required-properties":["customerId","type"]
+      },
+      "stored-query":"builder.getVerticesByProperty('global-customer-id', customerId).createEdgeTraversal(EdgeType.TREE, 'customer', 'service-subscription').getVerticesByProperty('service-type', type).createEdgeTraversal(EdgeType.TREE, 'service-subscription', 'service-instance').store('x').createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'generic-vnf').store('x').createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region')).store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "pserver-fromConfigurationFilterInterfaceId":{
+      "query":{
+        "required-properties":["interfaceId"]
+      },
+      "stored-query":"builder.store('x').createEdgeTraversal(EdgeType.COUSIN, 'configuration', 'logical-link').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'l-interface').getVerticesByProperty('interface-id', interfaceId).store('x')).union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'generic-vnf').store('x')).cap('x').unfold().dedup()"
+    }
+  },{
+    "cloudRegion-fromCountry":{
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN, 'complex', 'cloud-region').store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "sites-byCountryFilterCloudRegionVer":{
+      "query":{
+        "required-properties":["cloudRegionVersion"]
+      },
+      "stored-query":"builder.where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex', 'l3-network').createEdgeTraversal(EdgeType.COUSIN, 'l3-network', 'cloud-region').getVerticesByProperty('cloud-region-version', cloudRegionVersion)).store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "vnf-topology-fromVfModule":{
+      "stored-query":"builder.createEdgeTraversal(EdgeType.TREE, 'vf-module', 'generic-vnf').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-instance', 'service-subscription').createEdgeTraversal(EdgeType.TREE, 'service-subscription', 'customer').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-instance', 'allotted-resource').store('x')),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'vf-module').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'volume-group').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'l-interface').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'l3-network').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'l3-network').store('x'),),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').store('x').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'l3-network').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'l3-network').store('x'),)).cap('x').unfold().dedup()"
+    }
+  },{
+    "serviceModels-byDistributionStatus":{
+      "query":{
+        "required-properties":["distributionStatus"]
+      },
+      "stored-query":"builder.where(builder.newInstance().createEdgeTraversal(EdgeType.TREE,'model', 'model-ver').getVerticesByProperty('distribution-status', distributionStatus)).store('x').createEdgeTraversal(EdgeType.TREE,'model', 'model-ver').getVerticesByProperty('distribution-status', distributionStatus).store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "vserver-fromVnf":{
+      "query":{
+        "required-properties":["nfcFunction"]
+      },
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnfc').getVerticesByProperty('nfc-function', nfcFunction).store('x').createEdgeTraversal(EdgeType.COUSIN, 'vnfc', 'vserver').store('x').createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv4-address-list').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x')).cap('x').unfold().dedup()"
+    }
+  },{
+    "sites-byCloudRegionId":{
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN, 'cloud-region', 'l3-network').createEdgeTraversal(EdgeType.COUSIN, 'l3-network', 'complex').store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "availabilityZoneAndComplex-fromCloudRegion":{
+      "stored-query":"builder.union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'cloud-region', 'availability-zone').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'cloud-region', 'complex').store('x')).cap('x').unfold().dedup()"
+    }
+  },{
+    "locationNetTypeNetRole-fromCloudRegion":{
+      "stored-query":"builder.store('x').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region', 'complex').store('x').createEdgeTraversal(EdgeType.COUSIN, 'complex', 'l3-network').store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "service-fromPserverandSubsName":{
+      "query":{
+        "required-properties":["subscriberName"]
+      },
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'vserver').createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'generic-vnf').createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').where(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-instance', 'service-subscription').where(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-subscription', 'customer').getVerticesByProperty('subscriber-name', subscriberName)).store('x')).store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "nfType-fromCloudRegion":{
+      "stored-query":"builder.createEdgeTraversal(EdgeType.TREE, 'cloud-region', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'vserver').createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'generic-vnf').store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "sites-byCountryFilterCloudRegionId":{
+      "query":{
+        "required-properties":["cloudRegionId"]
+      },
+      "stored-query":"builder.where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex', 'l3-network').createEdgeTraversal(EdgeType.COUSIN, 'l3-network', 'cloud-region').getVerticesByProperty('cloud-region-id', cloudRegionId)).store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "complex-fromVnf":{
+      "stored-query":"builder.store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'pserver').store('x').createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x').createEdgeTraversal(EdgeType.COUSIN,'pserver', 'complex')).store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "queryvnfFromModelbyRegion":{
+      "query":{
+        "required-properties":["cloudRegionId"]
+      },
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'generic-vnf').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').getVerticesByProperty('cloud-region-id', cloudRegionId)).store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "v2-legacy-subgraph":{
+      "stored-query":"builder.newInstance().store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'flavor'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'image'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x').createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex')).store('x').cap('x').unfold()"
+    }
+  },{
+    "colocated-devices":{
+      "stored-query":"builder.store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'pserver', 'p-interface').store('x').createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex', 'pserver').store('x').createEdgeTraversal(EdgeType.TREE, 'pserver', 'p-interface').store('x').createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex', 'pnf').store('x').createEdgeTraversal(EdgeType.TREE, 'pnf', 'p-interface').store('x').createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link').store('x'))).cap('x').unfold().dedup()"
+    }
+  },{
+    "cloudRegion-fromCountryCloudRegionVersion":{
+      "query":{
+        "required-properties":["cloudRegionVersion"]
+      },
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN, 'complex', 'cloud-region').getVerticesByProperty('cloud-region-version', cloudRegionVersion).store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "cloudRegion-fromNfType":{
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "cloudRegion-fromNfTypeVendorVersion":{
+      "query":{
+        "required-properties":["nfType"]
+      },
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN, 'image', 'vserver').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'generic-vnf').getVerticesByProperty('nf-type',nfType)).createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "vnf-topology-fromServiceInstance":{
+      "stored-query":"builder.store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-instance', 'service-subscription').createEdgeTraversal(EdgeType.TREE, 'service-subscription', 'customer').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-instance', 'allotted-resource').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'generic-vnf').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'vf-module').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'volume-group').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'l-interface').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'l3-network').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'l3-network').store('x')),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').store('x').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'l3-network').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'l3-network').store('x')))).cap('x').unfold().dedup()"
+    }
+  },{
+    "ucpe-topology":{
+      "stored-query":"builder.store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'pserver', 'p-interface').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link')).as('item').store('x').createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link').store('x').createEdgeTraversal(EdgeType.COUSIN, 'physical-link', 'p-interface').where(builder.newInstance().not(builder.newInstance().cap('item'))).store('x').createEdgeTraversal(EdgeType.TREE, 'p-interface', 'pnf').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'generic-vnf').store('x').as('vnf').createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnf-image').store('x').select('vnf').createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').store('x').createEdgeTraversal(EdgeType.TREE, 'service-instance', 'service-subscription').store('x').createEdgeTraversal(EdgeType.TREE, 'service-subscription', 'customer').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'vserver').createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'generic-vnf').store('x').as('vnf').createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnf-image').store('x').select('vnf').createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').store('x').createEdgeTraversal(EdgeType.TREE, 'service-instance', 'service-subscription').store('x').createEdgeTraversal(EdgeType.TREE, 'service-subscription', 'customer').store('x')).cap('x').unfold().dedup()"
+    }
+  },{
+    "topology-summary":{
+      "stored-query":"builder.store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnfc').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'vnfc').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').store('x').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'image').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'flavor').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x').createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex').store('x'))).cap('x').unfold().dedup()"
+    }
+  },{
+    "topology-detail":{
+      "stored-query":"builder.store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'platform').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'line-of-business').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'owning-entity').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'project').store('x')),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnfc').store('x').createEdgeTraversal(EdgeType.COUSIN, 'vnfc', 'vserver').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'vserver', 'l-interface').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'subnet').store('x').createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'subnet').store('x').createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x')),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex').store('x'))).cap('x').unfold().dedup()"
+    }
+  },{
+    "vnfs-fromPserver":{
+      "query":{
+        "required-properties":["hostname"]
+      },
+      "stored-query":"builder.where(builder.newInstance().union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'pserver').getVerticesByProperty('hostname', hostname),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').getVerticesByProperty('hostname', hostname))).store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "pending-topology-detail":{
+      "stored-query":"builder.store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'platform').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'line-of-business').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'owning-entity').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'project').store('x')),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnfc').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vnfc', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'subnet').store('x').createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vnfc', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'subnet').store('x').createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vnfc', 'vip-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'vip-ipv4-address-list', 'subnet').store('x').createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vnfc', 'vip-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'vip-ipv6-address-list', 'subnet').store('x').createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x')).dedup()).cap('x').unfold().dedup()"
+    }
+  },{
+    "vnfs-fromServiceInstance":{
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'generic-vnf').store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "owning-entity-fromService-instance":{
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN,'service-instance', 'owning-entity').store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "pservers-fromVnf":{
+      "stored-query":"builder.union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x')).cap('x').unfold().dedup()"
+    }
+  },{
+    "fn-topology":{
+      "stored-query":"builder.union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'line-of-business', 'generic-vnf').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'generic-vnf').store('x')).dedup().union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnfc').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'pnf').store('x')).cap('x').unfold().dedup()"
+    }
+  },{
+    "edge-tag":{
+      "stored-query":"builder.emit().repeat(builder.newInstance().union(builder.newInstance().outE().getVerticesByProperty(tag, \"OUT\").inV(), builder.newInstance().inE().getVerticesByProperty(tag, \"IN\").outV()).dedup())"
+    }
+  },{
+    "topology-detail-fromVserver":{
+      "stored-query":"builder.store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'vserver', 'l-interface').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'subnet').store('x').createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'subnet').store('x').createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x')),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'generic-vnf').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'platform').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'line-of-business').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'owning-entity').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'project').store('x')),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnfc').store('x'))).cap('x').unfold().dedup()"
+    }
+  },{
+    "vserverlogicallink-frompServer":{
+      "stored-query":"builder.createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'vserver').store('x').createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').createEdgeTraversal(EdgeType.COUSIN, 'l-interface', 'logical-link').store('x').cap('x').unfold().dedup()"
+    }
+  },{
+    "vnf-topology-fromVnf":{
+      "stored-query":"builder.store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-instance', 'service-subscription').createEdgeTraversal(EdgeType.TREE, 'service-subscription', 'customer').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-instance', 'allotted-resource').store('x')),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'vf-module').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'volume-group').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'l-interface').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'l3-network').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'l3-network').store('x'),),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').store('x').union(builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').store('x').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'l3-network').store('x'),builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'l3-network').store('x'),)).cap('x').unfold().dedup()"
+    }
+  }]
+}
diff --git a/aai-traversal/bundleconfig-local/etc/query/stored-queries.properties b/aai-traversal/bundleconfig-local/etc/query/stored-queries.properties
deleted file mode 100644 (file)
index 0ea6ab6..0000000
+++ /dev/null
@@ -1,418 +0,0 @@
-ucpe-instance=builder.store('x').union(\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex'),\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'cloud-region').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region', 'complex')\
-                               ).store('x').cap('x').unfold().dedup()
-cloud-region-sites=builder.getVerticesByProperty('aai-node-type', 'cloud-region').getVerticesByProperty('cloud-owner', owner).store('x').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region', 'complex').store('x').cap('x').unfold()
-service-sites=builder.getVerticesByProperty('global-customer-id', customerId).createEdgeTraversal(EdgeType.TREE, 'customer', 'service-subscription')\
-                               .getVerticesByProperty('service-type', type).createEdgeTraversal(EdgeType.TREE, 'service-subscription', 'service-instance').store('x')\
-                               .createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'generic-vnf').store('x')\
-                               .createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').union(\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex'),\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region')\
-                               ).store('x')\
-                               .cap('x').unfold().dedup()
-edge-tag=builder.emit().repeat(builder.newInstance().union(builder.newInstance().outE().getVerticesByProperty(tag, "OUT").inV(), builder.newInstance().inE().getVerticesByProperty(tag, "IN").outV()).dedup())
-ucpe-topology=builder.store('x').union(\
-                        builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'pserver', 'p-interface')\
-                                       .where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link')).as('item').store('x')\
-                                                               .createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link').store('x')\
-                                                               .createEdgeTraversal(EdgeType.COUSIN, 'physical-link', 'p-interface').where(builder.newInstance().not(builder.newInstance().cap('item'))).store('x')\
-                                .createEdgeTraversal(EdgeType.TREE, 'p-interface', 'pnf').store('x'),\
-                        builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'generic-vnf').store('x')\
-                                .as('vnf').createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnf-image').store('x')\
-                                .select('vnf')\
-                                .createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').store('x')\
-                                .createEdgeTraversal(EdgeType.TREE, 'service-instance', 'service-subscription').store('x')\
-                                .createEdgeTraversal(EdgeType.TREE, 'service-subscription', 'customer').store('x'),\
-                        builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex').store('x'),\
-                        builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'vserver').createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'generic-vnf').store('x')\
-                                .as('vnf').createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnf-image').store('x')\
-                                .select('vnf')\
-                                .createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').store('x')\
-                                .createEdgeTraversal(EdgeType.TREE, 'service-instance', 'service-subscription').store('x')\
-                                .createEdgeTraversal(EdgeType.TREE, 'service-subscription', 'customer').store('x')\
-                        ).cap('x').unfold().dedup()
-pnf-topology=builder.store('x').union(\
-                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'pnf', 'p-interface').where(builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link')).as('item').store('x')\
-                               .createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link').store('x')\
-                               .createEdgeTraversal(EdgeType.COUSIN, 'physical-link', 'p-interface').where(builder.newInstance().not(builder.newInstance().cap('item'))).store('x')\
-                               .union(\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'p-interface', 'pserver').store('x'),\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'p-interface', 'pnf').store('x')\
-                               ),\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pnf', 'complex').store('x')\
-                               ).cap('x').unfold().dedup()
-topology-summary=builder.store('x').union(\
-                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnfc').store('x'),\
-                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').store('x').union(\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'vnfc').store('x'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').store('x').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'image').store('x'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'flavor').store('x'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x').createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex').store('x'))\
-                                               ).cap('x').unfold().dedup()
-v2-legacy-subgraph=builder.newInstance().store('x').union(\
-                    builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'flavor'),\
-                    builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'image'),\
-                    builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x').createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex')\
-                ).store('x').cap('x').unfold()
-                
-sites-byCountryFilterCloudRegionVer=builder.where(\
-               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex', 'l3-network')\
-               .createEdgeTraversal(EdgeType.COUSIN, 'l3-network', 'cloud-region').getVerticesByProperty('cloud-region-version', cloudRegionVersion))\
-               .store('x').cap('x').unfold().dedup()
-sites-byCloudRegionId=builder.createEdgeTraversal(EdgeType.COUSIN, 'cloud-region', 'l3-network')\
-                .createEdgeTraversal(EdgeType.COUSIN, 'l3-network', 'complex')\
-                .store('x').cap('x').unfold().dedup()
-
-site-l3network-cloudRegion=builder.store('x')\
-                       .createEdgeTraversal(EdgeType.COUSIN, 'complex', 'l3-network').store('x')\
-                       .createEdgeTraversal(EdgeType.COUSIN, 'l3-network', 'cloud-region').store('x').cap('x').unfold()
-               
-sites-byCountryFilterCloudRegionId=builder.where(\
-                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex', 'l3-network')\
-                       .createEdgeTraversal(EdgeType.COUSIN, 'l3-network', 'cloud-region').getVerticesByProperty('cloud-region-id', cloudRegionId))\
-               .store('x').cap('x').unfold().dedup()
-               
-complex-fromVnf=builder.store('x').union(\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'pserver').store('x')\
-                                                               .createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver')\
-                                                               .createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x')\
-                                                               .createEdgeTraversal(EdgeType.COUSIN,'pserver', 'complex')\
-                                                       ).store('x').cap('x').unfold().dedup()          
-
-colocated-devices=builder.store('x').union(\
-                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'pserver', 'p-interface').store('x').createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link').store('x'),\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex')\
-                               .union(\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex', 'pserver').store('x')\
-                                               .createEdgeTraversal(EdgeType.TREE, 'pserver', 'p-interface').store('x').createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link').store('x'),\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'complex', 'pnf').store('x')\
-                                               .createEdgeTraversal(EdgeType.TREE, 'pnf', 'p-interface').store('x').createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link').store('x')\
-                               )).cap('x').unfold().dedup()
-                               
-pservers-fromVnf=builder.union(\
-                builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'pserver').store('x'),\
-                builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x')\
-                ).cap('x').unfold().dedup()
-                
-cloudRegion-fromNfType=builder.createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region')\
-                                               .store('x').cap('x').unfold().dedup()
-  
-nfType-fromCloudRegion=builder.createEdgeTraversal(EdgeType.TREE, 'cloud-region', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'vserver').createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'generic-vnf')\
-                                               .store('x').cap('x').unfold().dedup()
-
-cloudRegion-fromCountry=builder.createEdgeTraversal(EdgeType.COUSIN, 'complex', 'cloud-region')\
-                                                               .store('x').cap('x').unfold().dedup()
-
-locationNetTypeNetRole-fromCloudRegion=builder.store('x').createEdgeTraversal(EdgeType.COUSIN, 'cloud-region', 'complex').store('x')\
-                                                                                       .createEdgeTraversal(EdgeType.COUSIN, 'complex', 'l3-network')\
-                                                                                               .store('x').cap('x').unfold().dedup()
-cloudRegion-fromCountryCloudRegionVersion=builder.createEdgeTraversal(EdgeType.COUSIN, 'complex', 'cloud-region').getVerticesByProperty('cloud-region-version', cloudRegionVersion)\
-                                                                                               .store('x').cap('x').unfold().dedup()
-vnf-topology-fromServiceInstance=builder.store('x').union(\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-instance', 'service-subscription').createEdgeTraversal(EdgeType.TREE, 'service-subscription', 'customer').store('x'),\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-instance', 'allotted-resource').store('x'),\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'generic-vnf').store('x').union(\
-                                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'vf-module').store('x'),\
-                                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'volume-group').store('x'),\
-                                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'l-interface').union(\
-                                                                                         builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'l3-network').store('x'),\
-                                                                                         builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'l3-network').store('x')\
-                                                                                 ),\
-                                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').store('x').union(\
-                                                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').store('x').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x'),\
-                                                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x'),\
-                                                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'l3-network').store('x'),\
-                                                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'l3-network').store('x')\
-                                                                               )\
-                                                                       )\
-                                                               ).cap('x').unfold().dedup()
-                                                               
-vnf-topology-fromVnf=builder.store('x').union(\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').store('x').union(\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-instance', 'service-subscription').createEdgeTraversal(EdgeType.TREE, 'service-subscription', 'customer').store('x'),\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-instance', 'allotted-resource').store('x')\
-                                ),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'vf-module').store('x'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'volume-group').store('x'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'l-interface').union(\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'l3-network').store('x'),\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'l3-network').store('x'),\
-                                                               ),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').store('x').union(\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').store('x').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x'),\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x'),\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'l3-network').store('x'),\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'l3-network').store('x'),\
-                                                               )\
-                                                       ).cap('x').unfold().dedup()
-
-vnf-topology-fromVfModule=builder.createEdgeTraversal(EdgeType.TREE, 'vf-module', 'generic-vnf').store('x').union(\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').store('x').union(\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-instance', 'service-subscription').createEdgeTraversal(EdgeType.TREE, 'service-subscription', 'customer').store('x'),\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-instance', 'allotted-resource').store('x')\
-                                ),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'vf-module').store('x'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'volume-group').store('x'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'l-interface').union(\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'l3-network').store('x'),\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'l3-network').store('x'),\
-                                                               ),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').store('x').union(\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').store('x').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x'),\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x'),\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv4-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'l3-network').store('x'),\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x').createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'l3-network').store('x'),\
-                                                               )\
-                                                       ).cap('x').unfold().dedup()
-                       
-images-fromCloudRegionNfType=builder.createEdgeTraversal(EdgeType.TREE, 'cloud-region', 'tenant')\
-                       .createEdgeTraversal(EdgeType.TREE, 'tenant', 'vserver').where(\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'generic-vnf').getVerticesByProperty('nf-type',nfType)\
-                       ).createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'image').store('x').cap('x').unfold().dedup()
-
-cloudRegion-fromNfTypeVendorVersion=builder.createEdgeTraversal(EdgeType.COUSIN, 'image', 'vserver').where(\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'generic-vnf').getVerticesByProperty('nf-type',nfType)\
-                               ).createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region')\
-                               .store('x').cap('x').unfold().dedup()
-vnf-instances-fromServiceInstancebyModelVersion=builder.createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'generic-vnf')\
-                       .getVerticesByProperty('vnf-type', vnfType).getVerticesByProperty('model-version-id-local', modelVersionId)\
-                       .store('x').cap('x').unfold().dedup()
-
-topology-fromCloudRegionIdandServiceId=builder.createEdgeTraversal(EdgeType.TREE, 'cloud-region', 'availability-zone')\
-                       .createEdgeTraversal(EdgeType.COUSIN, 'availability-zone', 'generic-vnf').getVerticesByProperty('service-id',serviceId).union(\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').store('x'),\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').store('x').union(\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'flavor').store('x'),\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'image').store('x'),\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'vserver', 'volume').store('x'),\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'vnfc').store('x'),\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'snapshot').store('x'),\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'vf-module').store('x'),\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'vserver', 'l-interface').store('x').union(\
-                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'l-interface', 'logical-link').store('x'),\
-                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'l-interface', 'l3-interface-ipv4-address-list').store('x')\
-                                                       .createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'subnet').store('x')\
-                                                       .createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x'),\
-                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x')\
-                                                       .createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'subnet').store('x')\
-                                                       .createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x')\
-                                       )\
-                               )\
-                       ).cap('x').unfold().dedup()
-vserverlogicallink-frompServer=builder.createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'vserver').store('x')\
-                                                       .createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface')\
-                                                       .createEdgeTraversal(EdgeType.COUSIN, 'l-interface', 'logical-link')\
-                                                       .store('x').cap('x').unfold().dedup()
-                                                                               
-service-fromPserverandSubsName=builder.createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'vserver')\
-                       .createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'generic-vnf')\
-                       .createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').where(\
-                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-instance', 'service-subscription').where(\
-                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'service-subscription', 'customer').getVerticesByProperty('subscriber-name', subscriberName)\
-                               ).store('x')\
-                       ).store('x').cap('x').unfold().dedup()
-                       
-spaas-topology-fromServiceInstance=builder.createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'generic-vnf')\
-                          .createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').store('x').union(\
-                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'flavor').store('x'),\
-                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'image').store('x'),\
-                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'vserver', 'l-interface').store('x').union(\
-                                                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'l-interface', 'logical-link').store('x'),\
-                                                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'l-interface', 'l3-interface-ipv4-address-list').store('x')\
-                                                                                                       .createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'subnet').store('x')\
-                                                                                                       .createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x'),\
-                                                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x')\
-                                                                                                       .createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'subnet').store('x')\
-                                                                                                       .createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x')\
-                                                                                       ),\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').store('x').union(\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex').store('x'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'pserver', 'p-interface')\
-                                                                  .createEdgeTraversal(EdgeType.COUSIN, 'p-interface', 'physical-link').store('x')\
-                                                               )\
-                     ).cap('x').unfold().dedup()
-
-vnfs-fromServiceInstance=builder.createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'generic-vnf')\
-       .store('x').cap('x').unfold().dedup()
-
-linked-devices=builder.store('x').union(\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'l-interface'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'generic-vnf', 'lag-interface'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'newvce', 'l-interface'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface')\
-                                               ).dedup()\
-                                                .until(builder.newInstance().getVerticesByProperty('aai-node-type', new ArrayList<>(Arrays.asList('generic-vnf','newvce','vserver'))))\
-                                                .repeat(builder.newInstance()\
-                                                       .union(\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'lag-interface', 'l-interface'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'lag-interface'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'vlan'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vlan', 'l-interface'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'lag-interface', 'logical-link'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'lag-interface'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'l-interface', 'logical-link'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'l-interface'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vlan', 'logical-link'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'vlan'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'generic-vnf'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'lag-interface', 'generic-vnf'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'newvce'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'vserver')\
-                                                       ).dedup().simplePath()\
-                                                ).store('x').cap('x').unfold().dedup()
-vnfs-fromPserver=builder.where(\
-       builder.newInstance().union(\
-               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'pserver').getVerticesByProperty('hostname', hostname),\
-               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').getVerticesByProperty('hostname', hostname)\
-       )\
-       ).store('x').cap('x').unfold().dedup()
-
-network-name-fromNetwork-role=builder.createEdgeTraversal(EdgeType.COUSIN, 'cloud-region', 'l3-network')\
-                                                                               .getVerticesByProperty('network-role', networkRole).store('x')\
-                                                                       .createEdgeTraversal(EdgeType.COUSIN, 'l3-network', 'network-policy').store('x')\
-                                                                       .cap('x').unfold().dedup()
-
-vserver-fromVnf=builder.createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnfc')\
-                                                       .getVerticesByProperty('nfc-function', nfcFunction).store('x')\
-                                               .createEdgeTraversal(EdgeType.COUSIN, 'vnfc', 'vserver').store('x')\
-                                               .createEdgeTraversal(EdgeType.TREE, 'vserver', 'l-interface').store('x')\
-                                               .union(\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv4-address-list').store('x'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x')\
-                                               ).cap('x').unfold().dedup()
-
-cloud-region-fromVnf=builder.createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnfc').store('x')\
-                               .createEdgeTraversal(EdgeType.COUSIN, 'vnfc', 'vserver').store('x')\
-                               .createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').store('x')\
-                               .createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x')\
-                               .cap('x').unfold().dedup()
-
-topology-detail-fromVserver=builder.store('x').union(\
-       builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'vserver', 'l-interface').store('x').union(\
-               builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'l-interface', 'l3-interface-ipv4-address-list').store('x')\
-                       .createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'subnet').store('x')\
-                       .createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x'),\
-               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x')\
-                       .createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'subnet').store('x')\
-                       .createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x')\
-               ),\
-               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x'),\
-               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex').store('x'),\
-               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'generic-vnf').store('x').union(\
-                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'platform').store('x'),\
-                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'line-of-business').store('x'),\
-                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance')\
-                       .union(\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'owning-entity').store('x'),\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'project').store('x')\
-                       ),\
-                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnfc').store('x')\
-               )\
-).cap('x').unfold().dedup()    
-
-topology-detail=builder.store('x').union(\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'platform').store('x'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'line-of-business').store('x'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance')\
-                                                       .union(\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'owning-entity').store('x'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'project').store('x')\
-                                                               ),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnfc').store('x').\
-                                                                       createEdgeTraversal(EdgeType.COUSIN, 'vnfc', 'vserver').store('x').union(\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'vserver', 'l-interface').store('x').union(\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE,   'l-interface', 'l3-interface-ipv4-address-list').store('x')\
-                                                                       .createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'subnet').store('x')\
-                                                                       .createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'l-interface', 'l3-interface-ipv6-address-list').store('x')\
-                                                                       .createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'subnet').store('x')\
-                                                                       .createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x')\
-                                                       ),\
-                                                          builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x'),\
-                                                          builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vserver', 'pserver').createEdgeTraversal(EdgeType.COUSIN, 'pserver', 'complex').store('x')\
-                                                          )\
-                                                       ).cap('x').unfold().dedup()
-
-pending-topology-detail=builder.store('x').union(\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'platform').store('x'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'line-of-business').store('x'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance')\
-                                                       .union(\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'owning-entity').store('x'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'project').store('x')\
-                                                       ),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnfc').store('x')\
-                                                       .union(\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vnfc', 'l3-interface-ipv4-address-list').store('x')\
-                                                                       .createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv4-address-list', 'subnet').store('x')\
-                                                                       .createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vnfc', 'l3-interface-ipv6-address-list').store('x')\
-                                                                       .createEdgeTraversal(EdgeType.COUSIN, 'l3-interface-ipv6-address-list', 'subnet').store('x')\
-                                                                       .createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vnfc', 'vip-ipv4-address-list').store('x')\
-                                                                       .createEdgeTraversal(EdgeType.COUSIN, 'vip-ipv4-address-list', 'subnet').store('x')\
-                                                                       .createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vnfc', 'vip-ipv6-address-list').store('x')\
-                                                                       .createEdgeTraversal(EdgeType.COUSIN, 'vip-ipv6-address-list', 'subnet').store('x')\
-                                                                       .createEdgeTraversal(EdgeType.TREE, 'subnet', 'l3-network').store('x')\
-                                                       ).dedup()\
-                                       ).cap('x').unfold().dedup()
-                                       
-pserver-fromConfiguration=builder.store('x').createEdgeTraversal(EdgeType.COUSIN, 'configuration', 'logical-link')\
-               .union(\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'l-interface').store('x'),\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'pserver').store('x'),\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'generic-vnf').store('x')\
-               ).cap('x').unfold().dedup()
-               
-pserver-fromConfigurationFilterInterfaceId=builder.store('x').createEdgeTraversal(EdgeType.COUSIN, 'configuration', 'logical-link')\
-                       .where(\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'l-interface').getVerticesByProperty('interface-id', interfaceId).store('x')\
-                       )\
-                       .union(\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'pserver').store('x'),\
-                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'logical-link', 'generic-vnf').store('x')\
-               ).cap('x').unfold().dedup()
-               
-fn-topology=builder.union(\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'line-of-business', 'generic-vnf').store('x'),\
-                                                       builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'generic-vnf').store('x')\
-                                               ).dedup()\
-                                                       .union(\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vnfc').store('x'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver').store('x'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'pserver').store('x'),\
-                                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'pnf').store('x')\
-                                                       )\
-                                                       .cap('x').unfold().dedup()                                                                                              
-so-request-vfModule=builder.store('x').union(\
-                                               builder.newInstance().createEdgeTraversal(EdgeType.TREE, 'vf-module', 'generic-vnf').store('x')\
-                                                       .createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'service-instance').store('x'),\
-                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vf-module', 'vserver')\
-                                                       .createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant').createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region').store('x'),\
-                                               builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'vf-module', 'volume-group').store('x')\
-                                               ).cap('x').unfold().dedup()     
-
-owning-entity-fromService-instance=builder.createEdgeTraversal(EdgeType.COUSIN,'service-instance', 'owning-entity').store('x').cap('x').unfold().dedup()       
-
-queryvnfFromModelbyRegion=builder.createEdgeTraversal(EdgeType.COUSIN, 'service-instance', 'generic-vnf')\
-                        .where(\
-                            builder.newInstance().createEdgeTraversal(EdgeType.COUSIN, 'generic-vnf', 'vserver')\
-                            .createEdgeTraversal(EdgeType.TREE, 'vserver', 'tenant')\
-                            .createEdgeTraversal(EdgeType.TREE, 'tenant', 'cloud-region')\
-                            .getVerticesByProperty('cloud-region-id', cloudRegionId)\
-                        ).store('x')\
-                        .cap('x').unfold().dedup()
-
-serviceModels-byDistributionStatus=builder.where(\
-                                                                       builder.newInstance().createEdgeTraversal(EdgeType.TREE,'model', 'model-ver')\
-                                                                               .getVerticesByProperty('distribution-status', distributionStatus)\
-                                                                                       ).store('x')\
-                                                                       .createEdgeTraversal(EdgeType.TREE,'model', 'model-ver')\
-                                                                               .getVerticesByProperty('distribution-status', distributionStatus)\
-                                                                                       .store('x').cap('x').unfold().dedup()
-                               
index b5f2658..3218396 100644 (file)
@@ -23,6 +23,7 @@ package org.onap.aai.rest;
 
 import java.net.URI;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
@@ -49,9 +50,12 @@ import org.onap.aai.dbmap.DBConnectionType;
 import org.onap.aai.exceptions.AAIException;
 import org.onap.aai.introspection.ModelType;
 import org.onap.aai.introspection.Version;
+import org.onap.aai.logging.ErrorLogHelper;
 import org.onap.aai.parsers.query.QueryParser;
 import org.onap.aai.rest.db.HttpEntry;
+import org.onap.aai.rest.search.CustomQueryConfig;
 import org.onap.aai.rest.search.GenericQueryProcessor;
+import org.onap.aai.rest.search.GremlinServerSingleton;
 import org.onap.aai.rest.search.QueryProcessorType;
 import org.onap.aai.restcore.HttpMethod;
 import org.onap.aai.restcore.RESTAPI;
@@ -121,7 +125,6 @@ public class QueryConsumer extends RESTAPI {
                                        startURIs.add(new URI(startElement.getAsString()));
                                }
                        }
-                       
                        if (queryElement != null) {
                                queryURI = queryElement.getAsString();
                        }
@@ -129,6 +132,18 @@ public class QueryConsumer extends RESTAPI {
                                gremlin = gremlinElement.getAsString();
                        }
                        URI queryURIObj = new URI(queryURI);
+                       
+                       CustomQueryConfig customQueryConfig = getCustomQueryConfig(queryURIObj);
+                       if ( customQueryConfig != null ) {
+                               List<String> missingRequiredQueryParameters =  checkForMissingQueryParameters( customQueryConfig.getQueryRequiredProperties(), URITools.getQueryMap(queryURIObj));
+                               if ( !missingRequiredQueryParameters.isEmpty() ) {
+                                       return( createMessageMissingQueryRequiredParameters( missingRequiredQueryParameters, headers, info, req));
+                               }
+                       } else if ( queryElement != null ) {
+                               return( createMessageInvalidQuerySection( queryURI, headers, info, req));
+                       }
+                       
+
                        GenericQueryProcessor processor = null;
                        
                        if (!startURIs.isEmpty()) {
@@ -193,5 +208,79 @@ public class QueryConsumer extends RESTAPI {
                
                
        }
+       
+       private List<String> checkForMissingQueryParameters( List<String> requiredParameters, MultivaluedMap<String, String> queryParams ) {
+               List<String> result = new ArrayList<>();
+               Iterator it = requiredParameters.iterator();
+               String param;
+               while(it.hasNext()) {
+                       param = (String)it.next();
+                       if ( !queryParams.containsKey(param)) {
+                               result.add(param);
+                       }
+               }
+               return result;
+       }
+       
+       private CustomQueryConfig getCustomQueryConfig(URI uriObj ) {
+               
+               GremlinServerSingleton gremlinServerSingleton;
+               CustomQueryConfig customQueryConfig;
+               String path = uriObj.getPath();
+
+               String[] parts = path.split("/");
+               boolean hasQuery = false;
+               for ( String part:parts ) {
+                       if  ( hasQuery) {
+                               gremlinServerSingleton = GremlinServerSingleton.getInstance();
+                               return gremlinServerSingleton.getCustomQueryConfig(part);
+                       }
+                       if ( "query".equals(part)) {
+                               hasQuery = true;
+                       }
+               }
+               
+               return null;
+               
+       }
+       
+       private Response createMessageMissingQueryRequiredParameters(List<String> missingRequiredQueryParams, HttpHeaders headers, UriInfo info, HttpServletRequest req) {
+               AAIException e = new AAIException("AAI_3013");
+               
+               ArrayList<String> templateVars = new ArrayList<>();
+
+               if (templateVars.isEmpty()) {
+                       templateVars.add(missingRequiredQueryParams.toString());
+               }
+               Status s = e.getErrorObject().getHTTPResponseCode();
+               String errorResponse = ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, 
+                               templateVars);
+               Response response = Response.status(s).entity(errorResponse).build();
+               /*
+               Response response = Response
+                               .status(e.getErrorObject().getHTTPResponseCode())
+                               .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, 
+                                               templateVars)).build(); 
+               */
+               return response;
+       } 
+       
+       private Response createMessageInvalidQuerySection(String invalidQuery, HttpHeaders headers, UriInfo info, HttpServletRequest req) {
+               AAIException e = new AAIException("AAI_3014");
+               
+               ArrayList<String> templateVars = new ArrayList<>();
+
+               if (templateVars.isEmpty()) {
+                       templateVars.add(invalidQuery);
+               }
+
+               Response response = Response
+                               .status(e.getErrorObject().getHTTPResponseCode())
+                               .entity(ErrorLogHelper.getRESTAPIErrorResponse(headers.getAcceptableMediaTypes(), e, 
+                                               templateVars)).build(); 
+
+               return response;
+       } 
+
 
 }
diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryConfig.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryConfig.java
new file mode 100644 (file)
index 0000000..ada67c7
--- /dev/null
@@ -0,0 +1,34 @@
+package org.onap.aai.rest.search;
+
+import java.util.List;
+
+public class CustomQueryConfig {
+       public CustomQueryConfig() {
+               // used by GetCustomQueryConfig
+       }
+       
+       
+       private String query;
+       private List<String> queryOptionalProperties;
+       private List<String> queryRequiredProperties;
+       
+       public void setQuery(String query) {
+               this.query = query;
+       }
+       public String getQuery() {
+               return this.query;
+       }
+
+       public void setQueryOptionalProperties( List<String> queryOptionalProperties) {
+               this.queryOptionalProperties = queryOptionalProperties;
+       }
+       public List<String> getQueryOptionalProperties( ) {
+               return queryOptionalProperties;
+       }
+       public void setQueryRequiredProperties( List<String> queryRequiredProperties) {
+               this.queryRequiredProperties = queryRequiredProperties;
+       }
+       public List<String> getQueryRequiredProperties( ) {
+               return queryRequiredProperties;
+       }
+}
index 9f6f3aa..14e218f 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * org.onap.aai
  * ================================================================================
- * Copyright Â© 2017 AT&T Intellectual Property. All rights reserved.
+ * 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.
@@ -25,6 +25,7 @@ import java.io.FileNotFoundException;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -42,6 +43,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.javatuples.Pair;
+import org.onap.aai.query.builder.MissingOptionalParameter;
 import org.onap.aai.restcore.util.URITools;
 import org.onap.aai.serialization.engines.TransactionalGraphEngine;
 import org.onap.aai.serialization.queryformats.SubGraphStyle;
@@ -117,28 +119,41 @@ public abstract class GenericQueryProcessor {
                if (!this.isGremlin) {
                        Matcher m = p.matcher(uri.get().getPath());
                        String queryName = "";
+                       List<String> optionalParameters = Collections.emptyList();
                        if (m.find()) {
                                queryName = m.group(1);
+                               CustomQueryConfig queryConfig = gremlinServerSingleton.getCustomQueryConfig(queryName);
+                               if ( queryConfig != null ) {
+                                       query = queryConfig.getQuery();
+                                       optionalParameters = queryConfig.getQueryOptionalProperties();
+                               }
                        }
-               
+                       
                        for (String key : queryParams.keySet()) {
                                params.put(key, queryParams.getFirst(key));
+                               if ( optionalParameters.contains(key) ){
+                                       optionalParameters.remove(key);
+                               }
                        }
                        
-                       query = gremlinServerSingleton.getStoredQuery(queryName);
-                       if (query == null) {
-                               query = "";
-                       } else {
-                               query = queryBuilderSingleton.executeTraversal(dbEngine, query, params);
+                       if (!optionalParameters.isEmpty()){
+                               MissingOptionalParameter missingParameter = MissingOptionalParameter.getInstance();
+                               for ( String key : optionalParameters ) {
+                                       params.put(key, missingParameter);
+                               }
                        }
                        
-                       
                        List<Object> ids = new ArrayList<>();
                        
                        if (vertices.isPresent() && !vertices.get().isEmpty()) {
                                for (Vertex v : vertices.get()) {
                                        ids.add(v.id());
                                }
+                               if (query == null) {
+                                       query = "";
+                               } else {
+                                       query = queryBuilderSingleton.executeTraversal(dbEngine, query, params);
+                               }
                                StringBuilder sb = new StringBuilder();
                                sb.append("[");
                                sb.append(Joiner.on(",").join(ids));
diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/GetCustomQueryConfig.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/GetCustomQueryConfig.java
new file mode 100644 (file)
index 0000000..9ea0b1d
--- /dev/null
@@ -0,0 +1,159 @@
+package org.onap.aai.rest.search;
+
+/*-
+ * ============LICENSE_START=======================================================
+ * org.onap.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=========================================================
+ */
+
+import java.io.IOException;
+import java.lang.reflect.Type;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.List;
+
+import org.onap.aai.util.AAIConstants;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.google.gson.reflect.TypeToken;
+
+public class GetCustomQueryConfig {
+
+       private JsonArray storedQueries = null;
+       private CustomQueryConfig customQueryConfig;
+       
+       
+       private final static String QUERY_CONFIG = "query";
+       private final static String REQUIRED_CONFIG = "required-properties";
+       private final static String OPTIONAL_CONFIG = "optional-properties";
+       private final static String STORED_QUERIES_CONFIG = "stored-queries";
+       private final static String STORED_QUERY_CONFIG = "stored-query";
+       
+       public static final String AAI_HOME_ETC_QUERY_JSON = AAIConstants.AAI_HOME_ETC + "query" + AAIConstants.AAI_FILESEP + "stored-queries.json";
+       
+       public GetCustomQueryConfig(String customQueryJson ) {
+               init(customQueryJson);
+       }
+       
+       private void init( String customQueryJson) {
+               JsonParser parser = new JsonParser();
+               JsonObject queriesObject = parser.parse(customQueryJson).getAsJsonObject();
+               if (queriesObject.has(STORED_QUERIES_CONFIG)) {
+                       
+                       storedQueries = queriesObject.getAsJsonArray(STORED_QUERIES_CONFIG);
+               }
+       }
+
+       private List<String> toStringList(JsonArray array) {
+          Gson converter = new Gson(); 
+          Type listType = new TypeToken<List<String>>() {}.getType();
+          return converter.fromJson(array, listType);
+       }
+       
+       private List<String> getPropertyList(JsonObject configObject, String config ) {
+               JsonElement subqueryConfig;
+               JsonArray props;
+               
+               if ( configObject.has(config)) {
+                       subqueryConfig = configObject.get(config);
+                       if ( subqueryConfig != null && !subqueryConfig.isJsonNull() ) {
+                               props = subqueryConfig.getAsJsonArray();
+                               if ( props != null ) {
+                                       return toStringList(props);
+                               }
+                       }
+               }
+               return toStringList(null);
+       }
+       
+       private String getPropertyString(JsonObject configObject, String config) {
+               JsonElement subqueryConfig;
+               
+               if ( configObject.has(config)) {
+                       subqueryConfig = configObject.get(config);
+                       if ( subqueryConfig != null && !subqueryConfig.isJsonNull() ) {
+                               return subqueryConfig.getAsString();
+                       }
+               }
+               return null;
+       }
+       
+       private void getStoredQueryBlock( JsonObject configObject, String config ) {
+               if ( !configObject.has(config)) {
+                       return;
+               }
+               
+               JsonElement queryConfig;
+               JsonObject subObject;
+               String multipleStartNodes;
+               List<String> propertyList;
+
+               queryConfig = configObject.get(config);
+               subObject = queryConfig.getAsJsonObject();
+               propertyList = getPropertyList(subObject, REQUIRED_CONFIG);
+               if ( QUERY_CONFIG.equals(config)) {
+                       customQueryConfig.setQueryRequiredProperties( propertyList );
+               } else {
+                       customQueryConfig.setQueryRequiredProperties( null );
+               }
+
+               propertyList = getPropertyList(subObject, OPTIONAL_CONFIG);
+               if ( QUERY_CONFIG.equals(config)) {
+                       customQueryConfig.setQueryOptionalProperties( propertyList );
+               } else {
+                       customQueryConfig.setQueryOptionalProperties( null );
+               }
+                       
+       }
+       
+       
+       public CustomQueryConfig getStoredQuery(String queryName ) {
+       
+               customQueryConfig = null;
+               JsonObject configObject;
+               JsonElement query;
+               JsonElement queryConfig;
+               String queryString;
+
+               for (JsonElement storedQuery : storedQueries) {
+                       if (storedQuery.isJsonObject()) {
+                               JsonObject queryObject = storedQuery.getAsJsonObject();
+                               query = queryObject.get(queryName);
+                               if ( query != null ) {
+                                       customQueryConfig = new CustomQueryConfig();
+                                       configObject = query.getAsJsonObject();
+                                       getStoredQueryBlock(configObject, QUERY_CONFIG);
+                                       if ( configObject.has(STORED_QUERY_CONFIG)) {
+                                               queryConfig = configObject.get(STORED_QUERY_CONFIG);
+                                               customQueryConfig.setQuery(queryConfig.getAsString());
+                                       }
+                                       break;
+                               } 
+                       }
+               }
+
+               return customQueryConfig;
+               
+       }
+
+
+
+}
index e4ac815..2265680 100644 (file)
@@ -31,6 +31,9 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.Date;
 import java.util.Properties;
 import java.util.Timer;
@@ -43,7 +46,10 @@ public class GremlinServerSingleton {
     private Cluster cluster;
     private boolean timerSet;
     private Timer timer;
-    private Properties properties;
+
+    
+    private GetCustomQueryConfig queryConfig;
+
 
     private static class Helper {
         private static final GremlinServerSingleton INSTANCE = new GremlinServerSingleton();
@@ -68,8 +74,6 @@ public class GremlinServerSingleton {
      */
     private void init() {
 
-        properties = new Properties();
-
         try {
             cluster = Cluster.build(new File(AAIConstants.AAI_HOME_ETC_APP_PROPERTIES + "gremlin-server-config.yaml"))
                     .maxContentLength(6537920)
@@ -78,27 +82,29 @@ public class GremlinServerSingleton {
             logger.error("Unable to find the file: " + e);
         }
 
-        File queryFile = new File(AAIConstants.AAI_HOME_ETC_QUERY);
+               try {
+                       String filepath = GetCustomQueryConfig.AAI_HOME_ETC_QUERY_JSON;
+                       Path path = Paths.get(filepath);
+                       String customQueryConfigJson = new String(Files.readAllBytes(path));
+                       
 
-        try (FileInputStream fis = new FileInputStream(queryFile)){
-            properties.load(fis);
-        } catch (IOException e) {
-            logger.error("Error occurred during the processing of query file: " + e);
-        }
+                       queryConfig = new GetCustomQueryConfig(customQueryConfigJson);
+               } catch (IOException e) {
+                       logger.error("Error occurred during the processing of query json file: " + e);
+               }
 
 
-        TimerTask task = new FileWatcher(new File(AAIConstants.AAI_HOME_ETC_QUERY)) {
+        TimerTask task = new FileWatcher(new File(GetCustomQueryConfig.AAI_HOME_ETC_QUERY_JSON)) {
             @Override
             protected void onChange(File file) {
-                File queryFile = new File(AAIConstants.AAI_HOME_ETC_QUERY);
-                try (FileInputStream fis = new FileInputStream(queryFile)){
-                    properties.load(fis);
-                    logger.debug("File: " + file + " was changed so the cluster is rebuild for gremlin server");
-                } catch (FileNotFoundException e) {
-                    logger.error("Unable to find the file: " + e);
-                } catch (IOException e) {
-                    logger.error("Error occurred during the processing of query file: " + e);
-                }
+                       try {
+                               String filepath = GetCustomQueryConfig.AAI_HOME_ETC_QUERY_JSON;
+                               Path path = Paths.get(filepath);
+                               String customQueryConfigJson = new String(Files.readAllBytes(path));
+                               queryConfig = new GetCustomQueryConfig(customQueryConfigJson);
+                       } catch (IOException e) {
+                               logger.error("Error occurred during the processing of query json file: " + e);
+                       }
             }
         };
 
@@ -113,19 +119,20 @@ public class GremlinServerSingleton {
     public Cluster getCluster(){
         return cluster;
     }
-
+    
     /**
-     * Gets the key if the properties contains that key
-     *
-     * Purposely not checking if the property exists due
-     * to if you check for the property and then get the property
-     * Then you are going to have to synchronize the method
-     *
-     * @param key the query to check if it exists in the file
-     * @return string if the key exists or null if it doesn't
+     * Gets the query using CustomQueryConfig
+     * @param key
+     * @return
      */
-    public String getStoredQuery(String key){
-        return (String) properties.get(key);
+    public String getStoredQueryFromConfig(String key){
+       CustomQueryConfig customQueryConfig = queryConfig.getStoredQuery(key);
+       return customQueryConfig.getQuery();
     }
+    
+    public CustomQueryConfig getCustomQueryConfig(String key) {
+       return queryConfig.getStoredQuery(key);
+    }
+
 
 }
diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJson.java b/aai-traversal/src/main/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJson.java
new file mode 100644 (file)
index 0000000..780a5de
--- /dev/null
@@ -0,0 +1,112 @@
+package org.onap.aai.rest.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+
+
+import org.onap.aai.util.AAIConstants;
+
+public class ConvertQueryPropertiesToJson {
+       
+       private final static int maxfilesize = 256000;
+       
+       private void addStart( StringBuilder sb ) {
+               sb.append("{\n  \"stored-queries\":[{\n");
+       }
+       
+       private void addRequiredQueryProperties( StringBuilder sb, List<String> rqd ) {
+               Iterator it = rqd.iterator();
+               sb.append("      \"query\":{\n        \"required-properties\":[");
+               while( it.hasNext()) {
+                       sb.append("\"" + it.next() + "\"");
+                       if ( it.hasNext()) {
+                               sb.append(",");
+                       }
+               }
+               sb.append("]\n      },\n");
+       }
+       
+       private void addAnotherQuery( StringBuilder sb, String queryName, String query, List<String> rqd ) {
+               sb.append("    \"" + queryName + "\":{\n");
+               if ( !rqd.isEmpty()) {
+                     addRequiredQueryProperties( sb, rqd);
+               }
+               sb.append("      \"stored-query\":\"" + query + "\"\n    }\n  },{\n");
+       }
+       
+       private void addLastQuery( StringBuilder sb, String queryName, String query, List<String> rqd ) {
+               sb.append("    \"" + queryName + "\":{\n");
+               if ( !rqd.isEmpty() ) {
+                     addRequiredQueryProperties( sb, rqd);
+               }
+               sb.append("      \"stored-query\":\"" + query + "\"\n    }\n  }]\n}\n");
+       }
+       
+       private String get2ndParameter( String paramString) {
+               String endParams = paramString.substring(0, paramString.indexOf(')'));
+               String result = endParams.substring(endParams.indexOf(',') + 1 );
+               String lastParam = result.trim();
+               if ( lastParam.startsWith("\\") || lastParam.startsWith("'") || lastParam.startsWith("new ") ){
+                       return null;
+               }
+               
+               return lastParam;
+       }
+       
+       private List<String> findRqdProperties( String query) {
+               String[] parts = query.split("getVerticesByProperty");
+               List<String> result = new ArrayList<String>();
+               if ( parts.length == 1 )
+                       return result;
+               int count = 0;
+               String foundRqdProperty;
+               while ( count++ < parts.length - 1 ) {
+                       foundRqdProperty = get2ndParameter(parts[count]);
+                       if ( foundRqdProperty != null  && !result.contains(foundRqdProperty)) {
+                               result.add(foundRqdProperty);
+                       }
+               }
+               return result;
+       }
+
+       public  String convertProperties( Properties props ) {
+               Enumeration<?> e = props.propertyNames();
+               StringBuilder sb = new StringBuilder(maxfilesize);
+               String queryName;
+               String query;
+               addStart( sb );
+               List<String> rqd;
+               while ( e.hasMoreElements()) {
+                       queryName = (String)e.nextElement();
+                       query = props.getProperty(queryName).trim().replace("\"", "\\\"");
+                       rqd = findRqdProperties(  query);
+                       if ( e.hasMoreElements()) {
+                               addAnotherQuery( sb, queryName, query, rqd);
+                       } else {
+                               addLastQuery( sb, queryName, query, rqd);
+                       }
+               }
+               
+        return sb.toString();
+       }
+       public static void main(String[] args) {
+               File queryFile = new File(AAIConstants.AAI_HOME_ETC_QUERY);
+               Properties properties = new Properties();
+        try (FileInputStream fis = new FileInputStream(queryFile)){
+            properties.load(fis);
+        } catch (IOException e) {
+               e.printStackTrace();
+            System.out.println("Error occurred during the processing of query file: " + e);
+        }
+        ConvertQueryPropertiesToJson c = new ConvertQueryPropertiesToJson();
+        String json = c.convertProperties(properties);
+        System.out.println("returned json:\n" + json);
+       }
+
+}
diff --git a/aai-traversal/src/test/java/org/onap/aai/HttpTestUtil.java b/aai-traversal/src/test/java/org/onap/aai/HttpTestUtil.java
new file mode 100644 (file)
index 0000000..1ec1a05
--- /dev/null
@@ -0,0 +1,369 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright Â© 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.aai;
+
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
+import org.javatuples.Pair;
+import org.mockito.Mockito;
+import org.onap.aai.dbmap.DBConnectionType;
+import org.onap.aai.exceptions.AAIException;
+import org.onap.aai.introspection.Introspector;
+import org.onap.aai.introspection.Loader;
+import org.onap.aai.introspection.ModelType;
+import org.onap.aai.introspection.Version;
+import org.onap.aai.parsers.query.QueryParser;
+import org.onap.aai.parsers.uri.URIToObject;
+import org.onap.aai.rest.db.DBRequest;
+import org.onap.aai.rest.db.HttpEntry;
+import org.onap.aai.restcore.HttpMethod;
+import org.onap.aai.restcore.RESTAPI;
+import org.onap.aai.serialization.engines.QueryStyle;
+import org.onap.aai.serialization.engines.TransactionalGraphEngine;
+
+import javax.ws.rs.core.*;
+import java.io.UnsupportedEncodingException;
+import java.net.URI;
+import java.util.*;
+
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+public class HttpTestUtil extends RESTAPI {
+
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(HttpTestUtil.class);
+
+    protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json");
+
+    private static final String EMPTY = "";
+
+    protected HttpHeaders httpHeaders;
+    protected UriInfo uriInfo;
+
+    protected MultivaluedMap<String, String> headersMultiMap;
+    protected MultivaluedMap<String, String> queryParameters;
+
+    protected List<String> aaiRequestContextList;
+    protected List<MediaType> outputMediaTypes;
+
+    public void init(){
+
+        httpHeaders         = Mockito.mock(HttpHeaders.class);
+        uriInfo             = Mockito.mock(UriInfo.class);
+
+        headersMultiMap     = new MultivaluedHashMap<>();
+        queryParameters     = Mockito.spy(new MultivaluedHashMap<>());
+
+        headersMultiMap.add("X-FromAppId", "JUNIT");
+        headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString());
+        headersMultiMap.add("Real-Time", "true");
+        headersMultiMap.add("Accept", "application/json");
+        headersMultiMap.add("aai-request-context", "");
+
+        outputMediaTypes = new ArrayList<>();
+        outputMediaTypes.add(APPLICATION_JSON);
+
+        aaiRequestContextList = new ArrayList<>();
+        aaiRequestContextList.add("");
+
+        when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap);
+        when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes);
+
+        when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList);
+
+        when(uriInfo.getQueryParameters()).thenReturn(queryParameters);
+        when(uriInfo.getQueryParameters(false)).thenReturn(queryParameters);
+
+        doReturn(null).when(queryParameters).remove(anyObject());
+        when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON);
+    }
+
+    public Response doPut(String uri, String payload) throws UnsupportedEncodingException, AAIException {
+
+        this.init();
+        Response response = null;
+        boolean success = true;
+        TransactionalGraphEngine dbEngine = null;
+
+        try {
+
+            uri = uri.replaceAll("/aai/", "");
+            logger.info("Starting the put request for the uri {} with payload {}", uri, payload);
+
+            String [] arr = uri.split("/");
+
+            Version version = null;
+
+            if(arr != null && arr.length > 1){
+                if(arr[0].matches("^v\\d+")){
+                    version = Version.valueOf(arr[0]);
+                    uri = uri.replaceAll("^v\\d+", "");
+                }
+            }
+
+            if(version == null){
+                version = Version.getLatest();
+            }
+            Mockito.when(uriInfo.getPath()).thenReturn(uri);
+
+            DBConnectionType type = DBConnectionType.REALTIME;
+            HttpEntry httpEntry   = new HttpEntry(version, ModelType.MOXY, QueryStyle.TRAVERSAL, type);
+            Loader loader         = httpEntry.getLoader();
+            dbEngine              = httpEntry.getDbEngine();
+
+            URI uriObject = UriBuilder.fromPath(uri).build();
+            URIToObject uriToObject = new URIToObject(loader, uriObject);
+
+            String objType = uriToObject.getEntityName();
+            QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject);
+
+
+            logger.info("Unmarshalling the payload to this {}", objType);
+
+            Introspector obj;
+            HttpMethod httpMethod;
+            if(uri.contains("/relationship-list/relationship")){
+                obj = loader.unmarshal("relationship", payload, org.onap.aai.restcore.MediaType.getEnum("application/json"));
+                httpMethod = HttpMethod.PUT_EDGE;
+            } else {
+                obj = loader.unmarshal(objType, payload, org.onap.aai.restcore.MediaType.getEnum("application/json"));
+                httpMethod = HttpMethod.PUT;
+                this.validateIntrospector(obj, loader, uriObject, httpMethod);
+            }
+
+
+            DBRequest dbRequest =
+                    new DBRequest.Builder(httpMethod, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION")
+                            .rawRequestContent(payload).build();
+
+            List<DBRequest> dbRequestList = new ArrayList<>();
+            dbRequestList.add(dbRequest);
+
+            Pair<Boolean, List<Pair<URI, Response>>> responsesTuple  = httpEntry.process(dbRequestList, "JUNIT");
+            response = responsesTuple.getValue1().get(0).getValue1();
+
+        } catch (AAIException e) {
+                       response = this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, e);
+                       success = false;
+               } catch(Exception e){
+            AAIException ex = new AAIException("AAI_4000", e);
+            response = this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, ex);
+            success = false;
+        } finally {
+            if(success){
+                if(response != null){
+                    if((response.getStatus() / 100) == 2){
+                        logger.info("Successfully completed the PUT request with status {} and committing it to DB", response.getStatus());
+                    } else {
+                        logFailure(HttpMethod.PUT, response);
+                    }
+                }
+                dbEngine.commit();
+            } else {
+                if(response != null) {
+                    logFailure(HttpMethod.PUT, response);
+                }
+                dbEngine.rollback();
+            }
+        }
+
+        return response;
+    }
+
+    public Response doGet(String uri) throws UnsupportedEncodingException, AAIException {
+
+        this.init();
+        Response response = null;
+        boolean success = true;
+        TransactionalGraphEngine dbEngine = null;
+
+        try {
+
+            uri = uri.replaceAll("/aai/", "");
+            logger.info("Starting the GET request for the uri {} with depth {}", uri, "all");
+
+            String [] arr = uri.split("/");
+
+            Version version = null;
+
+            if(arr != null && arr.length > 1){
+                if(arr[0].matches("^v\\d+")){
+                    version = Version.valueOf(arr[0]);
+                    uri = uri.replaceAll("^v\\d+", "");
+                }
+            }
+
+            if(version == null){
+                version = Version.getLatest();
+            }
+
+            DBConnectionType type = DBConnectionType.REALTIME;
+            HttpEntry httpEntry   = new HttpEntry(version, ModelType.MOXY, QueryStyle.TRAVERSAL, type);
+            Loader loader         = httpEntry.getLoader();
+            dbEngine              = httpEntry.getDbEngine();
+
+            URI uriObject = UriBuilder.fromPath(uri).build();
+            URIToObject uriToObject = new URIToObject(loader, uriObject);
+
+            String objType = uriToObject.getEntityName();
+            queryParameters.add("depth", "all");
+            QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject, queryParameters);
+
+            Mockito.when(uriInfo.getPath()).thenReturn(uri);
+
+            logger.info("Unmarshalling the payload to this {}", objType);
+
+            Introspector obj = loader.introspectorFromName(objType);
+
+            DBRequest dbRequest =
+                    new DBRequest.Builder(HttpMethod.GET, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION")
+                            .build();
+
+            List<DBRequest> dbRequestList = new ArrayList<>();
+            dbRequestList.add(dbRequest);
+
+            Pair<Boolean, List<Pair<URI, Response>>> responsesTuple  = httpEntry.process(dbRequestList, "JUNIT");
+            response = responsesTuple.getValue1().get(0).getValue1();
+
+        } catch (AAIException e) {
+            response = this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, e);
+            success = false;
+        } catch(Exception e){
+            AAIException ex = new AAIException("AAI_4000", e);
+            response = this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, ex);
+            success = false;
+        } finally {
+            if(success){
+                if(response != null){
+                    if((response.getStatus() / 100) == 2){
+                        logger.info("Successfully completed the GET request with status {} and committing it to DB", response.getStatus());
+                    } else {
+                        logFailure(HttpMethod.GET, response);
+                    }
+                }
+                dbEngine.commit();
+            } else {
+                logFailure(HttpMethod.GET, response);
+                dbEngine.rollback();
+            }
+        }
+
+        return response;
+    }
+
+    public Response doDelete(String uri, String resourceVersion) throws UnsupportedEncodingException, AAIException {
+
+        this.init();
+        Response response = null;
+        boolean success = true;
+        TransactionalGraphEngine dbEngine = null;
+
+        try {
+
+            uri = uri.replaceAll("/aai/", "");
+            logger.info("Starting the delete request for the uri {} with resource version {}", uri, resourceVersion);
+
+            String [] arr = uri.split("/");
+
+            Version version = null;
+
+            if(arr != null && arr.length > 1){
+                if(arr[0].matches("^v\\d+")){
+                    version = Version.valueOf(arr[0]);
+                    if(!uri.contains("relationship-list/relationship")){
+                        uri = uri.replaceAll("^v\\d+", "");
+                    }
+                }
+            }
+
+            if(version == null){
+                version = Version.getLatest();
+            }
+
+            Mockito.when(uriInfo.getPath()).thenReturn(uri);
+            DBConnectionType type = DBConnectionType.REALTIME;
+            HttpEntry httpEntry   = new HttpEntry(version, ModelType.MOXY, QueryStyle.TRAVERSAL, type);
+            Loader loader         = httpEntry.getLoader();
+            dbEngine              = httpEntry.getDbEngine();
+
+            URI uriObject = UriBuilder.fromPath(uri).build();
+            URIToObject uriToObject = new URIToObject(loader, uriObject);
+
+            String objType = uriToObject.getEntityName();
+            queryParameters.add("resource-version", resourceVersion);
+            QueryParser uriQuery = dbEngine.getQueryBuilder().createQueryFromURI(uriObject, queryParameters);
+
+            logger.info("Unmarshalling the payload to this {}", objType);
+
+            Introspector obj;
+            HttpMethod httpMethod;
+            if(uri.contains("/relationship-list/relationship")){
+                obj = loader.introspectorFromName("relationship");
+                httpMethod = HttpMethod.DELETE_EDGE;
+            } else {
+                obj = loader.introspectorFromName(objType);
+                httpMethod = HttpMethod.DELETE;
+            }
+
+            DBRequest dbRequest =
+                    new DBRequest.Builder(httpMethod, uriObject, uriQuery, obj, httpHeaders, uriInfo, "JUNIT-TRANSACTION")
+                            .build();
+
+            List<DBRequest> dbRequestList = new ArrayList<>();
+            dbRequestList.add(dbRequest);
+
+            Pair<Boolean, List<Pair<URI, Response>>> responsesTuple  = httpEntry.process(dbRequestList, "JUNIT");
+            response = responsesTuple.getValue1().get(0).getValue1();
+
+        } catch (AAIException e) {
+            response = this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, e);
+            success = false;
+        } catch(Exception e){
+            AAIException ex = new AAIException("AAI_4000", e);
+            response = this.consumerExceptionResponseGenerator(httpHeaders, uriInfo, HttpMethod.PUT, ex);
+            success = false;
+        } finally {
+            if(success){
+                if(response != null){
+                    if((response.getStatus() / 100) == 2){
+                        logger.info("Successfully completed the DELETE request with status {} and committing it to DB", response.getStatus());
+                    } else {
+                        logFailure(HttpMethod.DELETE, response);
+                    }
+                }
+                dbEngine.commit();
+            } else {
+                logFailure(HttpMethod.DELETE, response);
+                dbEngine.rollback();
+            }
+        }
+
+        return response;
+    }
+
+    public static void logFailure(HttpMethod httpMethod, Response response){
+        logger.info("Unable to complete the {} request with status {} and rolling back", httpMethod.toString(), response.getStatus());
+        logger.info("Response body of failed request {}", response.getEntity());
+
+    }
+}
diff --git a/aai-traversal/src/test/java/org/onap/aai/PayloadUtil.java b/aai-traversal/src/test/java/org/onap/aai/PayloadUtil.java
new file mode 100644 (file)
index 0000000..8925ecd
--- /dev/null
@@ -0,0 +1,113 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright Â© 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.aai;
+
+import org.apache.commons.io.IOUtils;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.junit.Assert.assertNotNull;
+
+public class PayloadUtil {
+
+    private static final Map<String, String> cache = new HashMap<>();
+    private static final Pattern TEMPLATE_PATTERN = Pattern.compile("\\$\\{[^}]+\\}");
+
+    public static String getExpectedPayload(String fileName) throws IOException {
+
+        InputStream inputStream = PayloadUtil.class.getClassLoader().getResourceAsStream("payloads/expected/" + fileName);
+
+        String message = String.format("Unable to find the %s in src/test/resources", fileName);
+        assertNotNull(message, inputStream);
+
+        String resource = IOUtils.toString(inputStream);
+
+        inputStream.close();
+        return resource;
+    }
+
+    public static String getResourcePayload(String fileName) throws IOException {
+
+        InputStream inputStream = PayloadUtil.class.getClassLoader().getResourceAsStream("payloads/resource/" + fileName);
+
+        String message = String.format("Unable to find the %s in src/test/resources", fileName);
+        assertNotNull(message, inputStream);
+
+        String resource = IOUtils.toString(inputStream);
+
+        inputStream.close();
+        return resource;
+    }
+
+    public static String getTemplatePayload(String fileName, Map<String, String> templateValueMap) throws Exception {
+
+        InputStream inputStream = PayloadUtil.class.getClassLoader().getResourceAsStream("payloads/templates/" + fileName);
+
+        String message = String.format("Unable to find the %s in src/test/resources", fileName);
+        assertNotNull(message, inputStream);
+
+        String resource;
+
+        if(cache.containsKey(fileName)){
+            resource = cache.get(fileName);
+        } else {
+            resource = IOUtils.toString(inputStream);
+            cache.put(fileName, resource);
+        }
+
+        Matcher matcher = TEMPLATE_PATTERN.matcher(resource);
+
+        String resourceWithTemplateValues = resource;
+
+        while(matcher.find()){
+            int start = matcher.start() + 2;
+            int end = matcher.end() - 1;
+            String key = resource.substring(start, end);
+            if(templateValueMap.containsKey(key)){
+                resourceWithTemplateValues = resourceWithTemplateValues.replaceAll("\\$\\{" + key +"\\}", templateValueMap.get(key));
+            } else {
+                throw new RuntimeException("Unable to find the key value pair in map for the template processing for key " + key);
+            }
+        }
+
+        inputStream.close();
+        return resourceWithTemplateValues;
+    }
+    
+    public static String getNamedQueryPayload(String fileName) throws IOException {
+
+        InputStream inputStream = PayloadUtil.class.getClassLoader().getResourceAsStream("payloads/named-queries/" + fileName);
+
+        String message = String.format("Unable to find the %s in src/test/resources/payloads/named-queries", fileName);
+        assertNotNull(message, inputStream);
+
+        String resource = IOUtils.toString(inputStream);
+
+        inputStream.close();
+        return resource;
+    }
+}
diff --git a/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphNamedQueryTest.java b/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphNamedQueryTest.java
new file mode 100644 (file)
index 0000000..552dbe4
--- /dev/null
@@ -0,0 +1,406 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright Â© 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ */
+package org.onap.aai.dbgraphmap;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+import org.apache.commons.io.IOUtils;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.onap.aai.HttpTestUtil;
+import org.onap.aai.PayloadUtil;
+import org.onap.aai.dbmap.DBConnectionType;
+import org.onap.aai.exceptions.AAIException;
+import org.onap.aai.extensions.AAIExtensionMap;
+import org.onap.aai.introspection.*;
+import org.onap.aai.serialization.engines.QueryStyle;
+import org.onap.aai.util.AAIApiVersion;
+import org.onap.aai.util.AAIConstants;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.*;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.*;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Mockito.*;
+
+public class SearchGraphNamedQueryTest {
+
+    private SearchGraph searchGraph;
+
+    protected static final MediaType APPLICATION_JSON = MediaType.valueOf("application/json");
+
+    private static final Set<Integer> VALID_HTTP_STATUS_CODES = new HashSet<>();
+
+    private final static Version version = Version.getLatest();
+    private final static ModelType introspectorFactoryType = ModelType.MOXY;
+    private final static QueryStyle queryStyle = QueryStyle.TRAVERSAL;
+    private final static DBConnectionType type = DBConnectionType.REALTIME;
+
+    static {
+        VALID_HTTP_STATUS_CODES.add(200);
+        VALID_HTTP_STATUS_CODES.add(201);
+        VALID_HTTP_STATUS_CODES.add(204);
+    }
+
+    private HttpHeaders httpHeaders;
+
+    private MultivaluedMap<String, String> headersMultiMap;
+    private MultivaluedMap<String, String> queryParameters;
+
+    private List<String> aaiRequestContextList;
+
+    private List<MediaType> outputMediaTypes;
+
+    private static boolean ranOnce = false;
+    
+    private HttpTestUtil httpTestUtil;
+
+    
+    private String getJsonValue(String json, String key ) {
+        JsonObject jsonObj = new JsonParser().parse(json).getAsJsonObject();
+        String strValue = "";
+        if ( jsonObj.isJsonObject()) {
+               strValue = jsonObj.get(key).getAsString();
+        }
+       return strValue;
+    }
+    
+    private void addWidgets() {
+        String widgetPath = "." + AAIConstants.AAI_FILESEP + "bundleconfig-local" + AAIConstants.AAI_FILESEP + "etc" + 
+                       AAIConstants.AAI_FILESEP + "scriptdata"+ AAIConstants.AAI_FILESEP + "widget-model-json";
+        
+        File dir = new File(widgetPath);
+        File[] files = dir.listFiles();
+        for ( File file : files) {
+               try {
+                       Path path = Paths.get(widgetPath + AAIConstants.AAI_FILESEP + file.getName());
+               String widgetPayload = new String(Files.readAllBytes(path));
+               String modelInvariantId = getJsonValue(widgetPayload, "model-invariant-id");
+               String widgetUri = "/aai/v12/service-design-and-creation/models/model/" + modelInvariantId;
+               Response response     = httpTestUtil.doPut(widgetUri, widgetPayload);
+               assertEquals("Expected the named-query to be created", 201, response.getStatus());
+                       } catch ( AAIException | IOException e) {
+                               // TODO Auto-generated catch block
+                               e.printStackTrace();
+                       }
+               
+        }      
+    }
+    
+    private void addNamedQueries() {
+        String namedQueryPath = "." + AAIConstants.AAI_FILESEP + "bundleconfig-local" + AAIConstants.AAI_FILESEP + "etc" + 
+                       AAIConstants.AAI_FILESEP + "scriptdata"+ AAIConstants.AAI_FILESEP + "named-query-json";
+        
+        File dir = new File(namedQueryPath);
+        File[] files = dir.listFiles();
+        for ( File file : files) {
+               try {
+                       Path path = Paths.get(namedQueryPath + AAIConstants.AAI_FILESEP + file.getName());
+               String namedQueryPayload = new String(Files.readAllBytes(path));
+               String namedQueryUuid = getJsonValue(namedQueryPayload, "named-query-uuid");
+               String namedQueryUri = "/aai/v12/service-design-and-creation/named-queries/named-query/" + namedQueryUuid;
+
+               Response response     = httpTestUtil.doPut(namedQueryUri, namedQueryPayload);
+               assertEquals("Expected the named-query to be created", 201, response.getStatus());
+                       } catch ( AAIException | IOException e) {
+                               // TODO Auto-generated catch block
+                               e.printStackTrace();
+                       }
+               
+        }      
+    }
+    
+    private String addVersionToUri(String uri ) {
+       return "/aai/" + Version.getLatest() + "/" + uri;
+    }
+
+    @Before
+    public void setup(){
+       
+        httpTestUtil = new HttpTestUtil();
+
+        System.setProperty("AJSC_HOME", ".");
+        System.setProperty("BUNDLECONFIG_DIR", "bundleconfig-local");
+        
+
+        searchGraph = new SearchGraph();
+
+        httpHeaders         = mock(HttpHeaders.class);
+
+        headersMultiMap     = new MultivaluedHashMap<>();
+        queryParameters     = Mockito.spy(new MultivaluedHashMap<>());
+
+        headersMultiMap.add("X-FromAppId", "JUNIT");
+        headersMultiMap.add("X-TransactionId", UUID.randomUUID().toString());
+        headersMultiMap.add("Real-Time", "true");
+        headersMultiMap.add("Accept", "application/json");
+        headersMultiMap.add("aai-request-context", "");
+
+        outputMediaTypes = new ArrayList<>();
+        outputMediaTypes.add(APPLICATION_JSON);
+
+        aaiRequestContextList = new ArrayList<>();
+        aaiRequestContextList.add("");
+
+        when(httpHeaders.getAcceptableMediaTypes()).thenReturn(outputMediaTypes);
+        when(httpHeaders.getRequestHeaders()).thenReturn(headersMultiMap);
+        when(httpHeaders.getRequestHeader("X-FromAppId")).thenReturn(Arrays.asList("JUNIT"));
+        when(httpHeaders.getRequestHeader("X-TransactionId")).thenReturn(Arrays.asList("JUNIT"));
+
+        when(httpHeaders.getRequestHeader("aai-request-context")).thenReturn(aaiRequestContextList);
+
+
+        // TODO - Check if this is valid since RemoveDME2QueryParameters seems to be very unreasonable
+        Mockito.doReturn(null).when(queryParameters).remove(anyObject());
+
+        when(httpHeaders.getMediaType()).thenReturn(APPLICATION_JSON);
+
+        if ( !ranOnce ) {
+               ranOnce = true;
+               addWidgets();
+               addNamedQueries();
+        }    
+    }
+
+
+    @Test
+    public void getDHVLogicalLinkByCircuitId_1_0_Test() throws Exception {
+
+               AAIExtensionMap aaiExtMap = new AAIExtensionMap();                                              
+               aaiExtMap.setHttpHeaders(httpHeaders);
+               String queryParameters = PayloadUtil.getNamedQueryPayload("query-payload.DHVLogicalLinkByCircuitId-1.0.json");
+               String putPayload = PayloadUtil.getNamedQueryPayload("logical-link.DHVLogicalLinkByCircuitId-1.0.json");
+               
+        String linkName = getJsonValue(putPayload, "link-name");
+        String putUri = addVersionToUri("network/logical-links/logical-link/" + linkName);
+
+        Response response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the logical-link to be created", 201, response.getStatus());
+        
+        HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+        Mockito.when(request.getContentType()).thenReturn("application/json");
+       
+               aaiExtMap.setUri("/search/named-query");
+               aaiExtMap.setApiVersion(AAIApiVersion.get());
+               aaiExtMap.setServletRequest(request);
+               
+               SearchGraph searchGraph = new SearchGraph();
+               response = searchGraph.runNamedQuery("JUNIT", "JUNIT", queryParameters, DBConnectionType.REALTIME, aaiExtMap);
+        System.out.println("response was\n" + response.getEntity().toString());
+        assertEquals("Expected success from query", 200, response.getStatus());
+        boolean hasLinkName = response.getEntity().toString().indexOf(linkName) > 0 ? true : false;
+        assertTrue("Response contains linkName", hasLinkName );
+    }
+
+    @Test
+    public void getSvcSubscriberModelInfo_1_0_Test() throws Exception {
+
+               AAIExtensionMap aaiExtMap = new AAIExtensionMap();                                              
+               aaiExtMap.setHttpHeaders(httpHeaders);
+               String queryParameters = PayloadUtil.getNamedQueryPayload("query-payload.SvcSubscriberModelInfo-1.0.json");
+               
+               String putPayload = PayloadUtil.getNamedQueryPayload("model.SvcSubscriberModelInfo-1.0.json");
+        String modelInvariantId = getJsonValue(putPayload, "model-invariant-id");
+        String putUri = addVersionToUri("service-design-and-creation/models/model/" + modelInvariantId);
+        Response response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the model to be created", 201, response.getStatus());
+        
+        putPayload = PayloadUtil.getNamedQueryPayload("customer.SvcSubscriberModelInfo-1.0.json");
+        String globalCustomerId = getJsonValue(putPayload, "global-customer-id");
+        putUri = addVersionToUri("business/customers/customer/" + globalCustomerId);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the customer to be created", 201, response.getStatus());
+        
+        HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+        Mockito.when(request.getContentType()).thenReturn("application/json");
+       
+               aaiExtMap.setUri("/search/named-query");
+               aaiExtMap.setApiVersion(AAIApiVersion.get());
+               aaiExtMap.setServletRequest(request);
+               
+               SearchGraph searchGraph = new SearchGraph();
+               response = searchGraph.runNamedQuery("JUNIT", "JUNIT", queryParameters, DBConnectionType.REALTIME, aaiExtMap);
+        assertEquals("Expected success from query", 200, response.getStatus());
+        boolean hasModelName = response.getEntity().toString().indexOf("junit-model-name") > 0 ? true : false;
+        assertTrue("Response contains modelName from model-ver", hasModelName );
+    }
+  
+    @Test
+    public void getClosedLoopNamedQuery_1_0_Test() throws Exception {
+
+               AAIExtensionMap aaiExtMap = new AAIExtensionMap();                                              
+               aaiExtMap.setHttpHeaders(httpHeaders);
+               String queryParameters = PayloadUtil.getNamedQueryPayload("query-payload.closed-loop-named-query-1.0.json");
+               
+               String putPayload = PayloadUtil.getNamedQueryPayload("model.closed-loop-named-query-1.0.json");
+        String modelInvariantId = getJsonValue(putPayload, "model-invariant-id");
+        String putUri = addVersionToUri("service-design-and-creation/models/model/" + modelInvariantId);
+        Response response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the model to be created", 201, response.getStatus());     
+        
+        putPayload = PayloadUtil.getNamedQueryPayload("cloud-region.closed-loop-named-query-1.0.json");
+        String cloudOwner = getJsonValue(putPayload, "cloud-owner");
+        String cloudRegionId = getJsonValue(putPayload, "cloud-region-id");
+        putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the cloud-region to be created", 201, response.getStatus());
+        
+        putPayload = PayloadUtil.getNamedQueryPayload("cloud-region2.closed-loop-named-query-1.0.json");
+        String cloudOwner2 = getJsonValue(putPayload, "cloud-owner");
+        String cloudRegionId2 = getJsonValue(putPayload, "cloud-region-id");
+        putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner2 + "/" + cloudRegionId2);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the cloud-region2 to be created", 201, response.getStatus()); 
+        
+        putPayload = PayloadUtil.getNamedQueryPayload("tenant.closed-loop-named-query-1.0.json");
+        String tenantId = getJsonValue(putPayload, "tenant-id");
+        putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId
+                       + "/tenants/tenant/" + tenantId);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the tenant to be created", 201, response.getStatus());        
+
+        putPayload = PayloadUtil.getNamedQueryPayload("tenant2.closed-loop-named-query-1.0.json");
+        String tenantId2 = getJsonValue(putPayload, "tenant-id");
+        putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner2 + "/" + cloudRegionId2
+                       + "/tenants/tenant/" + tenantId2);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the tenant2 to be created", 201, response.getStatus());
+        
+        putPayload = PayloadUtil.getNamedQueryPayload("vserver.closed-loop-named-query-1.0.json");
+        String vserverId = getJsonValue(putPayload, "vserver-id");
+        putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId
+                       + "/tenants/tenant/" + tenantId + "/vservers/vserver/" + vserverId);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the vserver to be created", 201, response.getStatus());        
+
+        putPayload = PayloadUtil.getNamedQueryPayload("vserver2.closed-loop-named-query-1.0.json");
+        String vserverId2 = getJsonValue(putPayload, "vserver-id");
+        putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner2 + "/" + cloudRegionId2
+                       + "/tenants/tenant/" + tenantId2 + "/vservers/vserver/" + vserverId2);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the vserver2 to be created", 201, response.getStatus());
+        
+        putPayload = PayloadUtil.getNamedQueryPayload("customer.closed-loop-named-query-1.0.json");
+        String globalCustomerId = getJsonValue(putPayload, "global-customer-id");
+        putUri = addVersionToUri("business/customers/customer/" + globalCustomerId);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the customer to be created", 201, response.getStatus());
+
+        putPayload = PayloadUtil.getNamedQueryPayload("generic-vnf.closed-loop-named-query-1.0.json");
+        String vnfId = getJsonValue(putPayload, "vnf-id");
+        putUri = addVersionToUri("network/generic-vnfs/generic-vnf/" + vnfId);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the generic-vnf to be created", 201, response.getStatus());
+        
+        HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+        Mockito.when(request.getContentType()).thenReturn("application/json");
+       
+               aaiExtMap.setUri("/search/named-query");
+               aaiExtMap.setApiVersion(AAIApiVersion.get());
+               aaiExtMap.setServletRequest(request);
+               
+               SearchGraph searchGraph = new SearchGraph();
+               response = searchGraph.runNamedQuery("JUNIT", "JUNIT", queryParameters, DBConnectionType.REALTIME, aaiExtMap);
+        assertEquals("Expected success from query", 200, response.getStatus());
+        boolean hasModelName = response.getEntity().toString().indexOf("example-model-name-val-closed-loop") > 0 ? true : false;
+        assertTrue("Response contains modelName from model-ver", hasModelName );
+    }
+    
+    @Test
+    public void getComponentList_1_2_Test() throws Exception {
+
+               AAIExtensionMap aaiExtMap = new AAIExtensionMap();                                              
+               aaiExtMap.setHttpHeaders(httpHeaders);
+               String queryParameters = PayloadUtil.getNamedQueryPayload("query-payload.ComponentList-1.2.json");
+               
+               String putPayload = PayloadUtil.getNamedQueryPayload("model.ComponentList-1.2.json");
+        String modelInvariantId = getJsonValue(putPayload, "model-invariant-id");
+        String putUri = addVersionToUri("service-design-and-creation/models/model/" + modelInvariantId);
+        Response response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the model to be created", 201, response.getStatus());
+                
+        putPayload = PayloadUtil.getNamedQueryPayload("customer.ComponentList-1.2.json");
+        String globalCustomerId = getJsonValue(putPayload, "global-customer-id");
+        putUri = addVersionToUri("business/customers/customer/" + globalCustomerId);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the customer to be created", 201, response.getStatus());
+        
+        putPayload = PayloadUtil.getNamedQueryPayload("generic-vnf.ComponentList-1.2.json");
+        String vnfId = getJsonValue(putPayload, "vnf-id");
+        putUri = addVersionToUri("network/generic-vnfs/generic-vnf/" + vnfId);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the generic-vnf to be created", 201, response.getStatus());        
+
+        putPayload = PayloadUtil.getNamedQueryPayload("vf-module.ComponentList-1.2.json");
+        String vfModuleId = getJsonValue(putPayload, "vf-module-id");
+        putUri = addVersionToUri("network/generic-vnfs/generic-vnf/" + vnfId + "/vf-modules/vf-module/" + vfModuleId);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the vf-module to be created", 201, response.getStatus());
+        
+        putPayload = PayloadUtil.getNamedQueryPayload("cloud-region.ComponentList-1.2.json");
+        String cloudOwner = getJsonValue(putPayload, "cloud-owner");
+        String cloudRegionId = getJsonValue(putPayload, "cloud-region-id");
+        putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the cloud-region to be created", 201, response.getStatus());
+        
+        putPayload = PayloadUtil.getNamedQueryPayload("tenant.ComponentList-1.2.json");
+        String tenantId = getJsonValue(putPayload, "tenant-id");
+        putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId
+                       + "/tenants/tenant/" + tenantId);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the tenant to be created", 201, response.getStatus());        
+        
+        putPayload = PayloadUtil.getNamedQueryPayload("vserver.ComponentList-1.2.json");
+        String vserverId = getJsonValue(putPayload, "vserver-id");
+        putUri = addVersionToUri("cloud-infrastructure/cloud-regions/cloud-region/" + cloudOwner + "/" + cloudRegionId
+                       + "/tenants/tenant/" + tenantId + "/vservers/vserver/" + vserverId);
+        response     = httpTestUtil.doPut(putUri, putPayload);
+        assertEquals("Expected the vserver to be created", 201, response.getStatus());        
+        
+        HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
+        Mockito.when(request.getContentType()).thenReturn("application/json");
+       
+               aaiExtMap.setUri("/search/named-query");
+               aaiExtMap.setApiVersion(AAIApiVersion.get());
+               aaiExtMap.setServletRequest(request);
+               
+               SearchGraph searchGraph = new SearchGraph();
+               response = searchGraph.runNamedQuery("JUNIT", "JUNIT", queryParameters, DBConnectionType.REALTIME, aaiExtMap);
+        assertEquals("Expected success from query", 200, response.getStatus());
+        boolean hasModelName = response.getEntity().toString().indexOf("example-model-name-val-component-list") > 0 ? true : false;
+        assertTrue("Response contains modelName from model-ver", hasModelName );
+    }    
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomQueryConfigTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomQueryConfigTest.java
new file mode 100644 (file)
index 0000000..58c5876
--- /dev/null
@@ -0,0 +1,62 @@
+package org.onap.aai.rest.search;
+
+import static org.junit.Assert.*;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.collect.Lists;
+
+public class GetCustomQueryConfigTest {
+
+       private String configJson;
+       
+       @Before
+       public void setUp() throws Exception {
+               System.setProperty("AJSC_HOME", ".");
+               System.setProperty("BUNDLECONFIG_DIR", "bundleconfig-local");
+               
+
+               configJson = "{\n       \"stored-queries\": [{\n" +
+                               "               \"queryName1\": {\n                     \"query\": {\n                          \"required-properties\": [\"prop1\", \"prop2\"],\n                              \"optional-properties\": [\"prop3\", \"prop4\"]\n                       },\n                    \"stored-query\": \"out('blah').has('something','foo')\"\n              }\n     }, {\n" +
+                               "               \"queryName2\": {\n                     \"query\": {\n                          \"optional-properties\": [\"prop5\"]\n                  },\n                    \"stored-query\": \"out('bar').has('stuff','baz')\"\n           }\n     }, {\n" +
+                               "               \"queryName3\": {\n                     \"stored-query\": \"out('bar1').has('stuff','baz1')\"\n         }\n     }]\n}";
+       }
+
+
+       @Test
+       public void testGetStoredQueryNameWithOptAndReqProps() {
+               
+               GetCustomQueryConfig getCustomQueryConfig = new GetCustomQueryConfig(configJson);
+               CustomQueryConfig cqc = getCustomQueryConfig.getStoredQuery("queryName1");
+
+               assertEquals(Lists.newArrayList("prop3", "prop4"), cqc.getQueryOptionalProperties());
+               assertEquals(Lists.newArrayList("prop1", "prop2"), cqc.getQueryRequiredProperties());
+               assertEquals("out('blah').has('something','foo')", cqc.getQuery());
+
+       }
+
+       @Test
+       public void testGetStoredQueryNameWithOptProps() {
+               
+               GetCustomQueryConfig getCustomQueryConfig = new GetCustomQueryConfig(configJson);
+               CustomQueryConfig cqc = getCustomQueryConfig.getStoredQuery("queryName2");
+
+               assertEquals(Lists.newArrayList("prop5"), cqc.getQueryOptionalProperties());
+               assertEquals(null, cqc.getQueryRequiredProperties());
+               assertEquals("out('bar').has('stuff','baz')", cqc.getQuery());
+
+       }
+
+       @Test
+       public void testGetStoredQueryNameWithNoProps() {
+               
+               GetCustomQueryConfig getCustomQueryConfig = new GetCustomQueryConfig(configJson);
+               CustomQueryConfig cqc = getCustomQueryConfig.getStoredQuery("queryName3");
+
+               assertEquals(null, cqc.getQueryOptionalProperties());
+               assertEquals(null, cqc.getQueryRequiredProperties());
+               assertEquals("out('bar1').has('stuff','baz1')", cqc.getQuery());
+
+       }
+}
index 5457937..a7c8470 100644 (file)
@@ -73,7 +73,7 @@ public abstract class QueryTest {
        
        public void run() {
                
-               String query = gremlinServerSingleton.getStoredQuery(getQueryName());
+               String query = gremlinServerSingleton.getStoredQueryFromConfig(getQueryName());
                Map<String, Object> params = new HashMap<>();
                addParam(params);
                when(dbEngine.getQueryBuilder(any(QueryStyle.class))).thenReturn(new GremlinTraversal<>(loader, graph.traversal()));
diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJsonTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJsonTest.java
new file mode 100644 (file)
index 0000000..b324a94
--- /dev/null
@@ -0,0 +1,31 @@
+package org.onap.aai.rest.util;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Properties;
+
+import org.junit.Test;
+
+public class ConvertQueryPropertiesToJsonTest {
+    @Test
+    public void testRqdProperty(){
+
+        ConvertQueryPropertiesToJson convert = new ConvertQueryPropertiesToJson();
+        Properties props = new Properties();
+        props.setProperty("queryName1", "builder.getVerticesByProperty('rqdProp', rqdPropId).getVerticesByProperty('rqdProp2', rqdPropId2).createEdgeTraversal(EdgeType.TREE, 'node1', 'child-node1')");
+        props.setProperty("lastQueryName", "builder.getVerticesByProperty('notRqdProp', \"OUT\").createEdgeTraversal(EdgeType.TREE, 'node2', 'child-node2')");
+        String json = convert.convertProperties(props);
+        assertNotNull(json);
+    }
+    @Test
+    public void testLastQueryRqdProperty(){
+
+        ConvertQueryPropertiesToJson convert = new ConvertQueryPropertiesToJson();
+        Properties props = new Properties();
+        props.setProperty("queryName1", "builder.createEdgeTraversal(EdgeType.TREE, 'node1', 'child-node1')");
+        props.setProperty("lastQueryName", "builder.getVerticesByProperty('rqdProp', rqdPropId).createEdgeTraversal(EdgeType.TREE, 'node2', 'child-node2')");
+        String json = convert.convertProperties(props);
+        assertNotNull(json);
+    }
+}
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/cloud-region.ComponentList-1.2.json b/aai-traversal/src/test/resources/payloads/named-queries/cloud-region.ComponentList-1.2.json
new file mode 100644 (file)
index 0000000..13a4552
--- /dev/null
@@ -0,0 +1,4 @@
+       {
+   "cloud-owner": "cloud-owner-component-list-junit",
+   "cloud-region-id": "cloud-region-id-component-list-junit"
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/cloud-region.closed-loop-named-query-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/cloud-region.closed-loop-named-query-1.0.json
new file mode 100644 (file)
index 0000000..b1ed9fa
--- /dev/null
@@ -0,0 +1,4 @@
+       {
+   "cloud-owner": "cloud-owner-closed-loop-junit",
+   "cloud-region-id": "cloud-region-id-closed-loop-junit"
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/cloud-region2.closed-loop-named-query-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/cloud-region2.closed-loop-named-query-1.0.json
new file mode 100644 (file)
index 0000000..b86ffe0
--- /dev/null
@@ -0,0 +1,4 @@
+       {
+   "cloud-owner": "cloud-owner2-closed-loop-junit",
+   "cloud-region-id": "cloud-region-id2-closed-loop-junit"
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/customer.ComponentList-1.2.json b/aai-traversal/src/test/resources/payloads/named-queries/customer.ComponentList-1.2.json
new file mode 100644 (file)
index 0000000..bff2f49
--- /dev/null
@@ -0,0 +1,18 @@
+{
+       "global-customer-id": "customer-component-list-junit",
+       "subscriber-name": "subscriber-name-component-list-junit",
+       "subscriber-type": "subscriber-type-component-list",
+       "service-subscriptions": {
+               "service-subscription": [{
+                       "service-type": "service-type-component-list-junit",
+                       "service-instances": {
+                               "service-instance": [{
+                                       "service-instance-id": "service-instance-id-component-list-junit",
+                                       "service-instance-name": "service-instance-name-component-list-junit",
+                                       "model-invariant-id": "model-invariant-id-component-list-junit",
+                                       "model-version-id": "model-version-id-component-list-junit"
+                               }]
+                       }
+               }]
+       }
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/customer.SvcSubscriberModelInfo-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/customer.SvcSubscriberModelInfo-1.0.json
new file mode 100644 (file)
index 0000000..4f010bb
--- /dev/null
@@ -0,0 +1,13 @@
+{
+   "global-customer-id": "junit-global-customer-id",
+   "subscriber-name": "junit-subscriber",
+   "subscriber-type": "CUST",
+   "service-subscriptions": {"service-subscription": [   {
+      "service-type": "junit-service-type",
+      "service-instances": {"service-instance": [      {
+         "service-instance-id": "junit-service-instance-id",
+         "model-invariant-id": "junit-model-invariant-id",
+         "model-version-id": "junit-model-version-id"
+      }]}
+   }]}
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/customer.closed-loop-named-query-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/customer.closed-loop-named-query-1.0.json
new file mode 100644 (file)
index 0000000..21d4468
--- /dev/null
@@ -0,0 +1,32 @@
+       {
+       "global-customer-id": "customer-closed-loop-junit",
+       "subscriber-name": "example-subscriber-name-val-closed-loop-junitcustomer-closed-loop-junit",
+       "subscriber-type": "example-subscriber-type-val-closed-loop-junit",
+       "service-subscriptions": {
+               "service-subscription": [
+                       {
+                               "service-type": "service-type-closed-loop-junit",
+                               "temp-ub-sub-account-id": "example-temp-ub-sub-account-id-val-closed-loop-junit",
+                               "service-instances": {
+                                       "service-instance": [
+                                               {
+                                                       "service-instance-id": "service-instance-closed-loop-junit",
+                                                       "service-instance-name": "example-service-instance-name-val-closed-loop-junit",
+                                                       "model-invariant-id": "model-invariant-id-closed-loop-junit",
+                                                       "model-version-id": "model-version-id-closed-loop-junit",
+                                                       "widget-model-id": "example-widget-model-id-val-closed-loop-junit",
+                                                       "widget-model-version": "example-widget-model-version-val-closed-loop-junit",
+                                                       "bandwidth-total": "example-bandwidth-total-val-closed-loop-junit",
+                                                       "bandwidth-up-wan1": "example-bandwidth-up-wan1-val-closed-loop-junit",
+                                                       "bandwidth-down-wan1": "example-bandwidth-down-wan1-val-closed-loop-junit",
+                                                       "bandwidth-up-wan2": "example-bandwidth-up-wan2-val-closed-loop-junit",
+                                                       "bandwidth-down-wan2": "example-bandwidth-down-wan2-val-closed-loop-junit",
+                                                       "vhn-portal-url": "example-vhn-portal-url-val-closed-loop-junit",
+                                                       "service-instance-location-id": "example-service-instance-location-id-val-closed-loop-junit"
+                                               }
+                                       ]
+                               }
+                       }
+               ]
+       }
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/generic-vnf.ComponentList-1.2.json b/aai-traversal/src/test/resources/payloads/named-queries/generic-vnf.ComponentList-1.2.json
new file mode 100644 (file)
index 0000000..e85d7e9
--- /dev/null
@@ -0,0 +1,27 @@
+       {
+               "vnf-id": "vnf-id-component-list-junit",
+               "vnf-name": "vnf-id-component-list-junit",
+               "vnf-type": "vnf-type-component-list",
+               "equipment-role": "equipment-role-component-list",
+               "service-id": "service-id-component-list",
+               "prov-status": "prov-status-component-list",
+               "relationship-list": {
+                       "relationship": [{
+                                       "related-to": "service-instance",
+                                       "relationship-data": [{ 
+                                               "relationship-key": "customer.global-customer-id", 
+                                               "relationship-value": "customer-component-list-junit" 
+                                       }, 
+                                       { 
+                                               "relationship-key": "service-subscription.service-type", 
+                                               "relationship-value": "service-type-component-list-junit" 
+                                       }, 
+                                       { 
+                                               "relationship-key": "service-instance.service-instance-id", 
+                                               "relationship-value": "service-instance-id-component-list-junit" 
+                                       } 
+                                       ]
+                               }
+                       ]
+               }
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/generic-vnf.closed-loop-named-query-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/generic-vnf.closed-loop-named-query-1.0.json
new file mode 100644 (file)
index 0000000..17c39cd
--- /dev/null
@@ -0,0 +1,131 @@
+{
+       "vnf-id": "generic-vnf-closed-loop-junit",
+       "vnf-name": "example-vnf-name-val-closed-loop",
+       "vnf-name2": "example-vnf-name2-val-closed-loop",
+       "vnf-type": "example-vnf-type-val-closed-loop",
+       "prov-status": "example-prov-status-val-closed-loop",
+       "service-id": "example-service-id-val-closed-loop",
+       "model-invariant-id": "model-invariant-id-closed-loop-junit",
+       "model-version-id": "model-version-id-closed-loop-junit",
+       "regional-resource-zone": "example-regional-resource-zone-val-closed-loop",
+       "license-key": "example-license-key-val-closed-loop",
+       "equipment-role": "example-equipment-role-val-closed-loop",
+       "orchestration-status": "example-orchestration-status-val-closed-loop",
+       "heat-stack-id": "example-heat-stack-id-val-closed-loop",
+       "mso-catalog-key": "example-mso-catalog-key-val-closed-loop",
+       "management-option": "example-management-option-val-closed-loop",
+       "ipv4-oam-address": "example-ipv4-oam-address-val-closed-loop",
+       "ipv4-loopback0-address": "example-ipv4-loopback0-address-val-closed-loop",
+       "nm-lan-v6-address": "example-nm-lan-v6-address-val-closed-loop",
+       "management-v6-address": "example-management-v6-address-val-closed-loop",
+       "vcpu": 7957,
+       "vcpu-units": "example-vcpu-units-val-closed-loop",
+       "vmemory": 168,
+       "vmemory-units": "example-vmemory-units-val-closed-loop",
+       "vdisk": 3227,
+       "vdisk-units": "example-vdisk-units-val-closed-loop",
+       "l-interfaces": {
+               "l-interface": [{
+                       "interface-name": "interface-name-generic-vnf-closed-loop-junit",
+                       "interface-role": "example-interface-role-val-closed-loop",
+                       "v6-wan-link-ip": "example-v6-wan-link-ip-val-closed-loop",
+                       "selflink": "example-selflink-val-closed-loop",
+                       "interface-id": "example-interface-id-val-closed-loop",
+                       "macaddr": "example-macaddr-val-closed-loop",
+                       "network-name": "example-network-name-val-closed-loop",
+                       "vlans": {
+                               "vlan": [{
+                                       "vlan-interface": "vlan-interface-generic-vnf-closed-loop-junit",
+                                       "vlan-id-inner": 498,
+                                       "vlan-id-outer": 2746,
+                                       "l3-interface-ipv4-address-list": [{
+                                               "l3-interface-ipv4-address": "1.1.1.1",
+                                               "l3-interface-ipv4-prefix-length": 3722,
+                                               "vlan-id-inner": 6519,
+                                               "vlan-id-outer": 194,
+                                               "is-floating": true,
+                                               "neutron-network-id": "1.1.1.1",
+                                               "neutron-subnet-id": "1.1.1.1"
+                                       }],
+                                       "l3-interface-ipv6-address-list": [{
+                                               "l3-interface-ipv6-address": "1111:4444:2222:3333::5555:7777",
+                                               "l3-interface-ipv6-prefix-length": 9215,
+                                               "vlan-id-inner": 9602,
+                                               "vlan-id-outer": 5177,
+                                               "is-floating": true,
+                                               "neutron-network-id": "2.2.2.2",
+                                               "neutron-subnet-id": "2.2.2.2"
+                                       }]
+                               }]
+                       },
+                       "l3-interface-ipv4-address-list": [{
+                               "l3-interface-ipv4-address": "3.3.3.3",
+                               "l3-interface-ipv4-prefix-length": 9797,
+                               "vlan-id-inner": 5534,
+                               "vlan-id-outer": 8820,
+                               "is-floating": true,
+                               "neutron-network-id": "3.3.3.3",
+                               "neutron-subnet-id": "3.3.3.3"
+                       }],
+                       "l3-interface-ipv6-address-list": [{
+                               "l3-interface-ipv6-address": "1111:4444:2222:3333::5555:6666",
+                               "l3-interface-ipv6-prefix-length": 5983,
+                               "vlan-id-inner": 747,
+                               "vlan-id-outer": 7535,
+                               "is-floating": true,
+                               "neutron-network-id": "4.4.4.4",
+                               "neutron-subnet-id": "4.4.4.4"
+                       }]
+               }]
+       },
+       "lag-interfaces": {
+               "lag-interface": [{
+                       "interface-name": "interface-name-generic-vnf-closed-loop-junit"
+               }]
+       },
+       "relationship-list": {
+               "relationship": [{
+                       "related-to": "service-instance",
+                       "relationship-data": [{
+                               "relationship-key": "service-instance.service-instance-id",
+                               "relationship-value": "service-instance-closed-loop-junit"
+                       }, {
+                               "relationship-key": "service-subscription.service-type",
+                               "relationship-value": "service-type-closed-loop-junit"
+                       }, {
+                               "relationship-key": "customer.global-customer-id",
+                               "relationship-value": "customer-closed-loop-junit"
+                       }]
+               }, {
+                       "related-to": "vserver",
+                       "relationship-data": [{
+                               "relationship-key": "vserver.vserver-id",
+                               "relationship-value": "vserver-closed-loop-junit"
+                       }, {
+                               "relationship-key": "tenant.tenant-id",
+                               "relationship-value": "tenant-closed-loop-junit"
+                       }, {
+                               "relationship-key": "cloud-region.cloud-owner",
+                               "relationship-value": "cloud-owner-closed-loop-junit"
+                       }, {
+                               "relationship-key": "cloud-region.cloud-region-id",
+                               "relationship-value": "cloud-region-id-closed-loop-junit"
+                       }]
+               }, {
+                       "related-to": "vserver",
+                       "relationship-data": [{
+                               "relationship-key": "vserver.vserver-id",
+                               "relationship-value": "vserver2-closed-loop-junit"
+                       }, {
+                               "relationship-key": "tenant.tenant-id",
+                               "relationship-value": "tenant2-closed-loop-junit"
+                       }, {
+                               "relationship-key": "cloud-region.cloud-owner",
+                               "relationship-value": "cloud-owner2-closed-loop-junit"
+                       }, {
+                               "relationship-key": "cloud-region.cloud-region-id",
+                               "relationship-value": "cloud-region-id2-closed-loop-junit"
+                       }]
+               }]
+       }
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/logical-link.DHVLogicalLinkByCircuitId-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/logical-link.DHVLogicalLinkByCircuitId-1.0.json
new file mode 100644 (file)
index 0000000..ad45b91
--- /dev/null
@@ -0,0 +1,5 @@
+{
+   "link-name": "junit-logical-link",
+   "link-type": "junit-link-type",
+   "circuit-id": "junit-circuit-id"
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/model.ComponentList-1.2.json b/aai-traversal/src/test/resources/payloads/named-queries/model.ComponentList-1.2.json
new file mode 100644 (file)
index 0000000..6a15af7
--- /dev/null
@@ -0,0 +1,22 @@
+       {
+       "model-invariant-id": "model-invariant-id-component-list-junit",
+       "model-type": "example-model-type-val-component-list",
+       "model-vers": {
+               "model-ver": [
+                       {
+                               "model-version-id": "model-version-id-component-list-junit",
+                               "model-name": "example-model-name-val-component-list",
+                               "model-version": "5.0",
+                               "model-description": "example-model-description-val-component-list",
+                               "metadata": {
+                                       "metadatum": [
+                                               {
+                                                       "metaname": "metaname-component-list-junit",
+                                                       "metaval": "example-metaval-val-component-list"
+                                               }
+                                       ]
+                               }
+                       }
+               ]
+       }
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/model.SvcSubscriberModelInfo-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/model.SvcSubscriberModelInfo-1.0.json
new file mode 100644 (file)
index 0000000..63cfdf5
--- /dev/null
@@ -0,0 +1,10 @@
+{
+   "model-invariant-id": "junit-model-invariant-id",
+   "model-type": "junit-model-type",
+   "model-vers": {"model-ver": [   {
+      "model-version-id": "junit-model-version-id",
+      "model-name": "junit-model-name",
+      "model-version": "1",
+      "model-description": "junit-model-description"
+   }]}
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/model.closed-loop-named-query-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/model.closed-loop-named-query-1.0.json
new file mode 100644 (file)
index 0000000..f2b95dc
--- /dev/null
@@ -0,0 +1,22 @@
+       {
+       "model-invariant-id": "model-invariant-id-closed-loop-junit",
+       "model-type": "example-model-type-val-closed-loop",
+       "model-vers": {
+               "model-ver": [
+                       {
+                               "model-version-id": "model-version-id-closed-loop-junit",
+                               "model-name": "example-model-name-val-closed-loop",
+                               "model-version": "5.0",
+                               "model-description": "example-model-description-val-closed-loop",
+                               "metadata": {
+                                       "metadatum": [
+                                               {
+                                                       "metaname": "metaname-closed-loop-junit",
+                                                       "metaval": "example-metaval-val-closed-loop"
+                                               }
+                                       ]
+                               }
+                       }
+               ]
+       }
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/query-payload.ComponentList-1.2.json b/aai-traversal/src/test/resources/payloads/named-queries/query-payload.ComponentList-1.2.json
new file mode 100644 (file)
index 0000000..685c1c2
--- /dev/null
@@ -0,0 +1,23 @@
+       {
+    "query-parameters": {
+        "named-query": {
+            "named-query-uuid": "2a183f99-2c66-482b-ade5-7962efd801ef"
+        }
+    },
+    "instance-filters": {
+        "instance-filter": [
+            {
+                  
+                "customer": {
+                    "global-customer-id": "customer-component-list-junit"
+                },
+                  "service-subscription": {
+                    "service-type": "service-type-component-list-junit"
+                },
+                "service-instance": {
+                    "service-instance-id": "service-instance-id-component-list-junit"
+                }
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/query-payload.DHVLogicalLinkByCircuitId-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/query-payload.DHVLogicalLinkByCircuitId-1.0.json
new file mode 100644 (file)
index 0000000..e16d9be
--- /dev/null
@@ -0,0 +1,16 @@
+{
+  "query-parameters": {
+    "named-query": {
+      "named-query-uuid": "4028faed-b7d5-4059-9d49-7df06da9ebfb"
+    }
+  },
+  "instance-filters": {
+    "instance-filter": [
+      {
+        "logical-link": {
+          "circuit-id": "junit-circuit-id"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/query-payload.SvcSubscriberModelInfo-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/query-payload.SvcSubscriberModelInfo-1.0.json
new file mode 100644 (file)
index 0000000..9e39c2f
--- /dev/null
@@ -0,0 +1,20 @@
+{
+"instance-filters": {
+"instance-filter": [
+{
+"customer": {
+"global-customer-id": "junit-global-customer-id"
+},
+"service-subscription": {
+"service-type": "junit-service-type"
+}
+
+}
+]
+},
+"query-parameters": {
+"named-query": {
+"named-query-uuid": "6e806bc2-8f9b-4534-bb68-be91267ff6c8"
+}
+}
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/query-payload.closed-loop-named-query-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/query-payload.closed-loop-named-query-1.0.json
new file mode 100644 (file)
index 0000000..2aa3f3a
--- /dev/null
@@ -0,0 +1,29 @@
+       {
+       "query-parameters": {
+               "named-query": {
+                       "named-query-uuid": "4ff56a54-9e3f-46b7-a337-07a1d3c6b469"
+               }
+       },
+       "instance-filters": {
+               "instance-filter": [
+                       {
+                               "vserver": {
+                                       "vserver-name": "example-vserver-name-val-closed-loopvserver-closed-loop-junit"
+                               }
+                       }
+               ]
+       },
+       "secondary-filts": {
+               "secondary-filt": [
+                       {
+                               "cloud-region": {
+                                       "cloud-owner": "cloud-owner2-closed-loop-junit"
+                               },
+                               "cloud-region": {
+                                       "cloud-region-id": "cloud-region-id2-closed-loop-junit"
+                               }                               
+                       }
+               ]
+       },
+       "secondary-filter-cut-point": "cloud-region"
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/tenant.ComponentList-1.2.json b/aai-traversal/src/test/resources/payloads/named-queries/tenant.ComponentList-1.2.json
new file mode 100644 (file)
index 0000000..7aeed9e
--- /dev/null
@@ -0,0 +1,5 @@
+       {
+    "tenant-id": "tenant-component-list-junit",
+    "tenant-name": "tenant-name-component-list",
+    "relationship-list": {}
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/tenant.closed-loop-named-query-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/tenant.closed-loop-named-query-1.0.json
new file mode 100644 (file)
index 0000000..33b9598
--- /dev/null
@@ -0,0 +1,5 @@
+       {
+    "tenant-id": "tenant-closed-loop-junit",
+    "tenant-name": "tenant-name-closed-loop",
+    "relationship-list": {}
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/tenant2.closed-loop-named-query-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/tenant2.closed-loop-named-query-1.0.json
new file mode 100644 (file)
index 0000000..5fa4d18
--- /dev/null
@@ -0,0 +1,5 @@
+       {
+    "tenant-id": "tenant2-closed-loop-junit",
+    "tenant-name": "tenant-name2-closed-loop",
+    "relationship-list": {}
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/vf-module.ComponentList-1.2.json b/aai-traversal/src/test/resources/payloads/named-queries/vf-module.ComponentList-1.2.json
new file mode 100644 (file)
index 0000000..abc27bc
--- /dev/null
@@ -0,0 +1,6 @@
+       {
+         "vf-module-id": "vf-module-id-component-list-junit",
+         "vf-module-name": "vf-module-name-component-list",
+         "orchestration-status": "orchestration-status-component-list",
+         "is-base-vf-module": true                       
+ }
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/vserver.ComponentList-1.2.json b/aai-traversal/src/test/resources/payloads/named-queries/vserver.ComponentList-1.2.json
new file mode 100644 (file)
index 0000000..edeb2a2
--- /dev/null
@@ -0,0 +1,22 @@
+       {
+       "vserver-id": "vserver-id-component-list-junit",
+       "vserver-name": "vserver-name-component-list-junit",
+       "vserver-name2": "vserver-name2-component-list",
+       "prov-status": "prov-status-component-list",
+       "vserver-selflink": "vserver-selflink-component-list",
+       "relationship-list": {
+               "relationship": [{
+                               "related-to": "vf-module",
+                               "relationship-data": [{ 
+                                                       "relationship-key": "generic-vnf.vnf-id",
+                                                       "relationship-value": "vnf-id-component-list-junit"
+                                               },
+                                               {
+                                               "relationship-key": "vf-module.vf-module-id",
+                                               "relationship-value": "vf-module-id-component-list-junit"
+                                       }
+                               ]
+                       }
+               ]
+       }
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/vserver.closed-loop-named-query-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/vserver.closed-loop-named-query-1.0.json
new file mode 100644 (file)
index 0000000..f78f3d4
--- /dev/null
@@ -0,0 +1,7 @@
+       {
+    "vserver-id": "vserver-closed-loop-junit",
+    "vserver-name": "example-vserver-name-val-closed-loopvserver-closed-loop-junit",
+    "vserver-name2": "example-vserver-name2-val-closed-loop",
+    "prov-status": "example-prov-status-val-closed-loop",
+    "vserver-selflink": "example-vserver-selflink-val-closed-loop"
+}
\ No newline at end of file
diff --git a/aai-traversal/src/test/resources/payloads/named-queries/vserver2.closed-loop-named-query-1.0.json b/aai-traversal/src/test/resources/payloads/named-queries/vserver2.closed-loop-named-query-1.0.json
new file mode 100644 (file)
index 0000000..e4e131a
--- /dev/null
@@ -0,0 +1,7 @@
+       {
+    "vserver-id": "vserver2-closed-loop-junit",
+    "vserver-name": "example-vserver-name-val-closed-loopvserver-closed-loop-junit",
+    "vserver-name2": "example-vserver-name2-val-closed-loop",
+    "prov-status": "example-prov-status-val-closed-loop",
+    "vserver-selflink": "example-vserver-selflink-val-closed-loop"    
+}
\ No newline at end of file