diff options
author | Lamont, William (wl2432) <wl2432@att.com> | 2018-01-15 13:15:33 -0500 |
---|---|---|
committer | Lamont, William (wl2432) <wl2432@att.com> | 2018-01-15 13:16:09 -0500 |
commit | 55e085c6b8fbac94207e0f69ac2b17c561dbc203 (patch) | |
tree | d1a677faf36f7241cc8a35d9249e712d33559092 | |
parent | 78c96d11932a849a1702ab134391918a723f01ef (diff) |
Add ability to do optional params for custom query
Change-Id: I1e61bbee2def41db5e7064ad3a3e916b7afcc299
Issue-ID: AAI-652
Signed-off-by: Lamont, William (wl2432) <wl2432@att.com>
39 files changed, 2134 insertions, 480 deletions
diff --git a/aai-traversal/bundleconfig-local/etc/appprops/aaiconfig.properties b/aai-traversal/bundleconfig-local/etc/appprops/aaiconfig.properties index 3943d08..9524a16 100644 --- a/aai-traversal/bundleconfig-local/etc/appprops/aaiconfig.properties +++ b/aai-traversal/bundleconfig-local/etc/appprops/aaiconfig.properties @@ -106,3 +106,5 @@ aai.dmaap.workload.enableEventProcessing=true aai.realtime.clients=RO,SDNC,MSO aai.server.rebind=g + +aai.jms.enable=false diff --git a/aai-traversal/bundleconfig-local/etc/appprops/error.properties b/aai-traversal/bundleconfig-local/etc/appprops/error.properties index 0599bf2..34ef2de 100644 --- a/aai-traversal/bundleconfig-local/etc/appprops/error.properties +++ b/aai-traversal/bundleconfig-local/etc/appprops/error.properties @@ -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 index 0000000..8b883ce --- /dev/null +++ b/aai-traversal/bundleconfig-local/etc/query/stored-queries.json @@ -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 index 0ea6ab6..0000000 --- a/aai-traversal/bundleconfig-local/etc/query/stored-queries.properties +++ /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() - diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/QueryConsumer.java b/aai-traversal/src/main/java/org/onap/aai/rest/QueryConsumer.java index b5f2658..3218396 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/QueryConsumer.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/QueryConsumer.java @@ -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 index 0000000..ada67c7 --- /dev/null +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/CustomQueryConfig.java @@ -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; + } +} diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/GenericQueryProcessor.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/GenericQueryProcessor.java index 9f6f3aa..14e218f 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/GenericQueryProcessor.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/GenericQueryProcessor.java @@ -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 index 0000000..9ea0b1d --- /dev/null +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/GetCustomQueryConfig.java @@ -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; + + } + + + +} diff --git a/aai-traversal/src/main/java/org/onap/aai/rest/search/GremlinServerSingleton.java b/aai-traversal/src/main/java/org/onap/aai/rest/search/GremlinServerSingleton.java index e4ac815..2265680 100644 --- a/aai-traversal/src/main/java/org/onap/aai/rest/search/GremlinServerSingleton.java +++ b/aai-traversal/src/main/java/org/onap/aai/rest/search/GremlinServerSingleton.java @@ -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 index 0000000..780a5de --- /dev/null +++ b/aai-traversal/src/main/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJson.java @@ -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 index 0000000..1ec1a05 --- /dev/null +++ b/aai-traversal/src/test/java/org/onap/aai/HttpTestUtil.java @@ -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 index 0000000..8925ecd --- /dev/null +++ b/aai-traversal/src/test/java/org/onap/aai/PayloadUtil.java @@ -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 index 0000000..552dbe4 --- /dev/null +++ b/aai-traversal/src/test/java/org/onap/aai/dbgraphmap/SearchGraphNamedQueryTest.java @@ -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 index 0000000..58c5876 --- /dev/null +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/GetCustomQueryConfigTest.java @@ -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()); + + } +} diff --git a/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryTest.java b/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryTest.java index 5457937..a7c8470 100644 --- a/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryTest.java +++ b/aai-traversal/src/test/java/org/onap/aai/rest/search/QueryTest.java @@ -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 index 0000000..b324a94 --- /dev/null +++ b/aai-traversal/src/test/java/org/onap/aai/rest/util/ConvertQueryPropertiesToJsonTest.java @@ -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 index 0000000..13a4552 --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/cloud-region.ComponentList-1.2.json @@ -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 index 0000000..b1ed9fa --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/cloud-region.closed-loop-named-query-1.0.json @@ -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 index 0000000..b86ffe0 --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/cloud-region2.closed-loop-named-query-1.0.json @@ -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 index 0000000..bff2f49 --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/customer.ComponentList-1.2.json @@ -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 index 0000000..4f010bb --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/customer.SvcSubscriberModelInfo-1.0.json @@ -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 index 0000000..21d4468 --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/customer.closed-loop-named-query-1.0.json @@ -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 index 0000000..e85d7e9 --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/generic-vnf.ComponentList-1.2.json @@ -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 index 0000000..17c39cd --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/generic-vnf.closed-loop-named-query-1.0.json @@ -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 index 0000000..ad45b91 --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/logical-link.DHVLogicalLinkByCircuitId-1.0.json @@ -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 index 0000000..6a15af7 --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/model.ComponentList-1.2.json @@ -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 index 0000000..63cfdf5 --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/model.SvcSubscriberModelInfo-1.0.json @@ -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 index 0000000..f2b95dc --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/model.closed-loop-named-query-1.0.json @@ -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 index 0000000..685c1c2 --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/query-payload.ComponentList-1.2.json @@ -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 index 0000000..e16d9be --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/query-payload.DHVLogicalLinkByCircuitId-1.0.json @@ -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 index 0000000..9e39c2f --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/query-payload.SvcSubscriberModelInfo-1.0.json @@ -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 index 0000000..2aa3f3a --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/query-payload.closed-loop-named-query-1.0.json @@ -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 index 0000000..7aeed9e --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/tenant.ComponentList-1.2.json @@ -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 index 0000000..33b9598 --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/tenant.closed-loop-named-query-1.0.json @@ -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 index 0000000..5fa4d18 --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/tenant2.closed-loop-named-query-1.0.json @@ -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 index 0000000..abc27bc --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/vf-module.ComponentList-1.2.json @@ -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 index 0000000..edeb2a2 --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/vserver.ComponentList-1.2.json @@ -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 index 0000000..f78f3d4 --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/vserver.closed-loop-named-query-1.0.json @@ -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 index 0000000..e4e131a --- /dev/null +++ b/aai-traversal/src/test/resources/payloads/named-queries/vserver2.closed-loop-named-query-1.0.json @@ -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 |