Implement support for v10 model entities. 61/3861/1
authorFraboni, Gino (gf403a) <gino.fraboni@amdocs.com>
Wed, 3 May 2017 17:47:43 +0000 (13:47 -0400)
committerFraboni, Gino (gf403a) <gino.fraboni@amdocs.com>
Wed, 3 May 2017 17:48:14 +0000 (13:48 -0400)
Change-Id: Id2b42b70d7fe0ada6695ac9632b314f21ace193f
Signed-off-by: Fraboni, Gino (gf403a) <gino.fraboni@amdocs.com>
93 files changed:
ajsc-shared-config/README.txt [new file with mode: 0644]
ajsc-shared-config/etc/PartnerProfile.xml [new file with mode: 0644]
ajsc-shared-config/etc/aft.properties [new file with mode: 0644]
ajsc-shared-config/etc/basic-logback_root_logger_level_off.xml [new file with mode: 0644]
ajsc-shared-config/etc/logback.xml [moved from src/main/resources/logback.xml with 86% similarity]
ajsc-shared-config/etc/spm2.jks [new file with mode: 0644]
antBuild/build.xml [new file with mode: 0644]
bundleconfig-local/etc/appprops/AAFUserRoles.properties [new file with mode: 0644]
bundleconfig-local/etc/appprops/PostProcessorInterceptors.properties [new file with mode: 0644]
bundleconfig-local/etc/appprops/PreProcessorInterceptors.properties [new file with mode: 0644]
bundleconfig-local/etc/appprops/app-intercepts.properties [new file with mode: 0644]
bundleconfig-local/etc/appprops/methodMapper.properties [new file with mode: 0644]
bundleconfig-local/etc/sysprops/sys-props.properties [new file with mode: 0644]
pom.xml
src/main/ajsc/model-loader_v1/model-loader/v1/conf/modelLoaderBeans.groovy [new file with mode: 0644]
src/main/ajsc/model-loader_v1/model-loader/v1/docs/README.txt [new file with mode: 0644]
src/main/ajsc/model-loader_v1/model-loader/v1/lib/README.txt [new file with mode: 0644]
src/main/ajsc/model-loader_v1/model-loader/v1/props/module.props [moved from src/main/docker/startup.sh with 84% similarity]
src/main/ajsc/model-loader_v1/model-loader/v1/routes/modelLoader.route [moved from src/test/resources/models/vnf-model.xml with 78% similarity]
src/main/assemble/ajsc_module_assembly.xml [new file with mode: 0644]
src/main/assemble/ajsc_props_assembly.xml [moved from src/main/webapp/WEB-INF/rest-servlet.xml with 56% similarity]
src/main/assemble/ajsc_runtime_assembly.xml [new file with mode: 0644]
src/main/bin/start.sh [moved from src/main/resources/model-loader.properties with 51% similarity]
src/main/config/ajsc-chef.jks [new file with mode: 0644]
src/main/config/ajsc-jetty.xml [new file with mode: 0644]
src/main/config/ajsc-override-web.xml [new file with mode: 0644]
src/main/config/ajscJetty.jks [new file with mode: 0644]
src/main/config/cadi.properties [new file with mode: 0644]
src/main/config/jul-redirect.properties [new file with mode: 0644]
src/main/config/keyfile [new file with mode: 0644]
src/main/config/runner-web.xml [new file with mode: 0644]
src/main/docker/.dockerignore [deleted file]
src/main/docker/Dockerfile
src/main/docker/update_config.sh [deleted file]
src/main/java/org/openecomp/modelloader/config/ModelLoaderConfig.java
src/main/java/org/openecomp/modelloader/entity/Artifact.java
src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java
src/main/java/org/openecomp/modelloader/entity/ArtifactType.java
src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java
src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java
src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java
src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java
src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java
src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java
src/main/java/org/openecomp/modelloader/notification/DistributionStatusMsg.java
src/main/java/org/openecomp/modelloader/notification/EventCallback.java
src/main/java/org/openecomp/modelloader/restclient/AaiRestClient.java
src/main/java/org/openecomp/modelloader/service/ModelLoaderInterface.java
src/main/java/org/openecomp/modelloader/service/ModelLoaderMsgs.java
src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java
src/main/java/org/openecomp/modelloader/util/JsonXmlConverter.java
src/main/resources/aai-os-cert.p12 [deleted file]
src/main/resources/org/openecomp/modelloader/filemonitor/FileMonitorMsgs.properties [deleted file]
src/main/resources/org/openecomp/modelloader/service/ModelLoaderMsgs.properties
src/main/resources/schema/aai_schema_v8.xsd
src/main/resources/schema/vnfcatalog.xsd
src/main/runtime/context/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.context [new file with mode: 0644]
src/main/runtime/context/default#0.context [new file with mode: 0644]
src/main/runtime/deploymentPackage/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.json [new file with mode: 0644]
src/main/runtime/shiroRole/ajscadmin.json [new file with mode: 0644]
src/main/runtime/shiroRole/contextadmin#__module.ajsc.namespace.name__.json [new file with mode: 0644]
src/main/runtime/shiroRole/contextadmin#default.json [new file with mode: 0644]
src/main/runtime/shiroUser/ajsc.json [new file with mode: 0644]
src/main/runtime/shiroUserRole/ajsc#ajscadmin.json [new file with mode: 0644]
src/main/runtime/shiroUserRole/ajsc#contextadmin#__module.ajsc.namespace.name__.json [new file with mode: 0644]
src/main/runtime/shiroUserRole/ajsc#contextadmin#default.json [new file with mode: 0644]
src/test/java/org/openecomp/modelloader/config/ModelLoaderConfigTest.java
src/test/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandlerTest.java
src/test/java/org/openecomp/modelloader/entity/model/ModelArtifactParserTest.java
src/test/java/org/openecomp/modelloader/entity/model/ModelSorterTest.java
src/test/java/org/openecomp/modelloader/restclient/AaiRestClientTest.java [moved from src/test/java/org/openecomp/modelloader/restclient/AAIRestClientTest.java with 92% similarity]
src/test/java/org/openecomp/modelloader/service/ModelLoaderServiceTest.java [deleted file]
src/test/java/org/openecomp/modelloader/util/JsonXmlConverterTest.java
src/test/resources/logback-test.xml
src/test/resources/model-loader-empty-auth-password.properties
src/test/resources/model-loader-no-auth-password.properties
src/test/resources/model-loader.properties
src/test/resources/models/AAI-Testvsp..vmme_cinder..module-1-resource-1.xml [new file with mode: 0644]
src/test/resources/models/AAI-Testvsp..vmme_small_ecomp..module-0-resource-1.xml [new file with mode: 0644]
src/test/resources/models/AAI-VL-resource-1.xml [new file with mode: 0644]
src/test/resources/models/AAI-stellService-service-1.xml [new file with mode: 0644]
src/test/resources/models/AAI-testvsp-resource-1.xml [new file with mode: 0644]
src/test/resources/models/complete-model.xml
src/test/resources/models/incomplete-model.xml [moved from src/main/webapp/WEB-INF/web.xml with 56% similarity]
src/test/resources/models/incomplete-models.xml [new file with mode: 0644]
src/test/resources/models/invalid-model.xml [new file with mode: 0644]
src/test/resources/models/l3-network-widget.json [new file with mode: 0644]
src/test/resources/models/l3-network-widget.xml [moved from src/main/webapp/WEB-INF/applicationContext.xml with 61% similarity]
src/test/resources/models/named-query-wan-connector.xml
src/test/resources/models/vnf-model.json [deleted file]
src/test/resources/models/wan-connector-model.xml [deleted file]
src/test/resources/vnfcatalogexample.xml
version.properties

diff --git a/ajsc-shared-config/README.txt b/ajsc-shared-config/README.txt
new file mode 100644 (file)
index 0000000..a82eb64
--- /dev/null
@@ -0,0 +1,6 @@
+The ajsc-shared-config folder is included in the service project to provide the functionality of the AJSC_SHARED_CONFIG 
+location that will exist in CSI envs. This includes the logback.xml for logging configurations, and some csm related 
+artifacts necessary for proper functionality of the csm framework within the CSI env. Within the 2 profiles that can 
+be utilized to run the AJSC locally, "runLocal" and "runAjsc", the system propery, "AJSC_SHARED_CONFIG", has been set
+to point to this directory. The files in this folder will NOT be copied/moved anywhere within the AJSC SWM package. These 
+files will already be in existence within the CSI env.
\ No newline at end of file
diff --git a/ajsc-shared-config/etc/PartnerProfile.xml b/ajsc-shared-config/etc/PartnerProfile.xml
new file mode 100644 (file)
index 0000000..de9ca07
--- /dev/null
@@ -0,0 +1,2408 @@
+<!-- edited with XMLSpy v2008 (http://www.altova.com) by AT&T (AT&T) -->
+<!-- Edited with XMLSpy v2008 (http://www.altova.com) by Binh Quach (CINGULAR WIRELESS) -->
+<!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by Durshetti (AT&T Wireless Services) -->
+<!--Sample XML file generated by XMLSPY v2004 rel. 3 U (http://www.xmlspy.com)-->
+<PartnerProfile xmlns="http://csi.cingular.com/CSI/Namespaces/Configuration/PartnerProfile.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://csi.cingular.com/CSI/Namespaces/Configuration/PartnerProfile.xsd C:\csi_projects\CommonServices\Schemas\v36\CSI\Partner\PartnerProfile.xsd">
+       <!--
+       Each partner will be listed in a unique block below along with a description of the
+       authorized interfaces, and any parameters describing or required by the interface.
+        This is valid for Dev & ST, but IST will need to identify the partners expecting to
+       test the environment and add blocks to authorize them. 
+   -->
+       <ModifierATTID>sg7477</ModifierATTID>
+       <UpdateTimeStamp>2013-06-30T00:06:07+05:30</UpdateTimeStamp>
+       <GlobalConnectionBlocking>
+               <ClientBlocking/>
+               <InterfaceBlocking/>
+       </GlobalConnectionBlocking>
+       <GlobalConnectionLimitsConfiguration>
+               <GlobalConnectionLimits>
+                       <alertThreshold>100</alertThreshold>
+                       <maxConnections>110</maxConnections>
+               </GlobalConnectionLimits>
+               <GlobalInterfaceConnectionLimits>
+                       <interfaceName>AddAccount</interfaceName>
+                       <InterfaceConnectionLimits>
+                               <maxConnections>10</maxConnections>
+                       </InterfaceConnectionLimits>
+               </GlobalInterfaceConnectionLimits>
+               <GlobalInterfaceConnectionLimits>
+                       <interfaceName>AddNote</interfaceName>
+                       <InterfaceConnectionLimits>
+                               <alertThreshold>90</alertThreshold>
+                               <maxConnections>110</maxConnections>
+                       </InterfaceConnectionLimits>
+               </GlobalInterfaceConnectionLimits>
+       </GlobalConnectionLimitsConfiguration>
+       <GlobalTimeoutConfiguration>
+               <GlobalTimeout>
+                       <minTimeout>5000</minTimeout>
+                       <defaultTimeout>300000</defaultTimeout>
+                       <maxTimeout>600000</maxTimeout>
+               </GlobalTimeout>
+               <GlobalInterfaceTimeout>
+                       <interfaceName>AddNote</interfaceName>
+                       <InterfaceTimeout>
+                               <minTimeout>5000</minTimeout>
+                               <defaultTimeout>250000</defaultTimeout>
+                               <maxTimeout>300000</maxTimeout>
+                       </InterfaceTimeout>
+               </GlobalInterfaceTimeout>
+               <GlobalInterfaceTimeout>
+                       <interfaceName>CreateFiberServiceVOIPNumber</interfaceName>
+                       <InterfaceTimeout>
+                               <minTimeout>120000</minTimeout>
+                               <defaultTimeout>300000</defaultTimeout>
+                               <maxTimeout>300000</maxTimeout>
+                       </InterfaceTimeout>
+               </GlobalInterfaceTimeout>
+               <GlobalInterfaceTimeout>
+                       <interfaceName>InquireAccountProfile</interfaceName>
+                       <InterfaceTimeout>
+                               <minTimeout>5000</minTimeout>
+                               <defaultTimeout>100000</defaultTimeout>
+                               <maxTimeout>250000</maxTimeout>
+                       </InterfaceTimeout>
+               </GlobalInterfaceTimeout>
+               <GlobalInterfaceTimeout>
+                       <interfaceName>InquireUnbilledUsageDetail</interfaceName>
+                       <InterfaceTimeout>
+                               <minTimeout>5000</minTimeout>
+                               <defaultTimeout>250000</defaultTimeout>
+                               <maxTimeout>300000</maxTimeout>
+                       </InterfaceTimeout>
+               </GlobalInterfaceTimeout>
+               <GlobalInterfaceTimeout>
+                       <interfaceName>InquireWirelinePortEligibility</interfaceName>
+                       <InterfaceTimeout>
+                               <minTimeout>5000</minTimeout>
+                               <defaultTimeout>330000</defaultTimeout>
+                               <maxTimeout>600000</maxTimeout>
+                       </InterfaceTimeout>
+               </GlobalInterfaceTimeout>
+               <GlobalInterfaceTimeout>
+                       <interfaceName>QualifyAndQuoteFiberServiceProducts</interfaceName>
+                       <InterfaceTimeout>
+                               <minTimeout>120000</minTimeout>
+                               <defaultTimeout>300000</defaultTimeout>
+                               <maxTimeout>300000</maxTimeout>
+                       </InterfaceTimeout>
+               </GlobalInterfaceTimeout>
+               <GlobalInterfaceTimeout>
+                       <interfaceName>SendSms</interfaceName>
+                       <InterfaceTimeout>
+                               <minTimeout>5000</minTimeout>
+                               <defaultTimeout>150000</defaultTimeout>
+                               <maxTimeout>180000</maxTimeout>
+                       </InterfaceTimeout>
+               </GlobalInterfaceTimeout>
+               <GlobalInterfaceTimeout>
+                       <interfaceName>ValidateFiberServiceFacility</interfaceName>
+                       <InterfaceTimeout>
+                               <minTimeout>120000</minTimeout>
+                               <defaultTimeout>1200000</defaultTimeout>
+                               <maxTimeout>1200000</maxTimeout>
+                       </InterfaceTimeout>
+               </GlobalInterfaceTimeout>
+               <GlobalInterfaceTimeout>
+                       <interfaceName>ValidateFiberServiceFacilityResponse</interfaceName>
+                       <InterfaceTimeout>
+                               <minTimeout>120000</minTimeout>
+                               <defaultTimeout>1200000</defaultTimeout>
+                               <maxTimeout>1200000</maxTimeout>
+                       </InterfaceTimeout>
+               </GlobalInterfaceTimeout>
+               <GlobalInterfaceTimeout>
+                       <interfaceName>ExecuteWirelineMechanizedLoopTest</interfaceName>
+                       <InterfaceTimeout>
+                               <minTimeout>120000</minTimeout>
+                               <defaultTimeout>1200000</defaultTimeout>
+                               <maxTimeout>1200000</maxTimeout>
+                       </InterfaceTimeout>
+               </GlobalInterfaceTimeout>
+               <GlobalInterfaceTimeout>
+                       <interfaceName>ExecuteWirelineMechanizedLoopTestResponse</interfaceName>
+                       <InterfaceTimeout>
+                               <minTimeout>120000</minTimeout>
+                               <defaultTimeout>1200000</defaultTimeout>
+                               <maxTimeout>1200000</maxTimeout>
+                       </InterfaceTimeout>
+               </GlobalInterfaceTimeout>
+               <GlobalInterfaceTimeout>
+                       <interfaceName>AppDev_NetworkPerformance</interfaceName>
+                       <InterfaceTimeout>
+                               <minTimeout>60000</minTimeout>
+                               <defaultTimeout>100000</defaultTimeout>
+                               <maxTimeout>250000</maxTimeout>
+                       </InterfaceTimeout>
+               </GlobalInterfaceTimeout>
+       </GlobalTimeoutConfiguration>
+       <GlobalRuntimeEngineConfiguration>
+               <runtimeEngine>BW</runtimeEngine>
+       </GlobalRuntimeEngineConfiguration>
+       <GlobalIAPMaxAllowedCtns>25</GlobalIAPMaxAllowedCtns>
+       <GlobalIUCSPMaxAllowedCtns>10</GlobalIUCSPMaxAllowedCtns>
+       <GlobalACTFSTNPMaxAllowedCtns>10</GlobalACTFSTNPMaxAllowedCtns>
+       <GlobalADDFSTNPMaxAllowedCtns>10</GlobalADDFSTNPMaxAllowedCtns>
+       <GlobalIFSTNPSMaxAllowedCtns>10</GlobalIFSTNPSMaxAllowedCtns>
+       <Partner>
+               <userName>csitest</userName>
+               <userPassword>testingcsi</userPassword> 
+               <originatorId>csitest</originatorId> 
+               <isReseller>false</isReseller>
+               <isBusinessAllianceChannel>false</isBusinessAllianceChannel>
+               <salesChannelId>WALMART</salesChannelId>
+               <isBroker>false</isBroker>
+               <PartnerTimeoutConfiguration>
+                       <minTimeout>500</minTimeout>
+                       <defaultTimeout>300000</defaultTimeout>
+                       <maxTimeout>600000</maxTimeout>
+               </PartnerTimeoutConfiguration>
+               <AuthorizedInterface>
+                       <name>accountdetails</name>
+                       <resource>v1</resource>
+                       <allowedMethods>get</allowedMethods>
+               </AuthorizedInterface>          
+               <AuthorizedInterface>
+                       <name>AddContentProviderSponsor</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddEmployeeDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireEmployeeDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireVoiceUsageDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateContentProviderSponsor</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireContentProviderSponsor</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCircuitTestResults</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAccountProfileV78</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSubscriberProfileV78</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ScheduleCircuitTest</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelScheduledCircuitTest</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableCircuitTestList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SubmitCircuitTest</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCustomerTroubleTicketDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateCustomerTroubleTicketDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddCustomerTroubleTicket</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ManageBusinessServices</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireMobileUsageDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateEnterpriseEndUserPermissions</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SwapCrossUpgradeEquipment</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ManageMobilePaymentProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCustomerAlarmList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCustomerAlarmCount</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateCustomerAlarmAcknowledgment</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireRatingModel</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCustomerPurchaseEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCustomerTroubleTicketList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCustomerTroubleTicketCount</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireResellerAccountProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SubmitResellerContractInformation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireInternationalOfferings</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAccessCircuitSummary</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireEnterpriseOrderDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireEnterpriseOrderList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireEnterpriseOrderStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireEthernetDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCustomerDigitalLifeInstallationProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireDirectoryListingHeadings</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ManageDigitalLifeDevice</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendDigitalLifeDeviceNotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ExecuteWirelineMechanizedLoopTest</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ExecuteWirelineMechanizedLoopTestResponse</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireNetworkAssetDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireVOIPProbeDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireVOIPAssetDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireManagedAssetDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ExecuteExternalIdVerificationQA</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireIPNetworkServiceLocationDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUnifiedCreditCheckResult</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ProcessDeviceUnlock</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelessDashboard</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineServiceAppointmentReservations</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateWirelineServiceAppointmentReservation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireTechnicianDispatchStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateIDDBAutoGroup</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateIDDBDailyRules</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateIDDBGeography</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateIDDBMasterTemplate</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateOpenDeviceEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateOpenDeviceEmailAddressAvailability</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>RetrieveAvailableOpenDeviceProducts</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>RetrieveOpenDeviceDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateAndQualifyOpenDeviceAddress</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>RetrieveOpenDeviceTax</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CreateOpenDeviceCustomer</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CreateOpenDeviceCustomerOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddRetailStoreAppointment</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateAddressServiceAvailability</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableRetailStoreAppointments</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireRetailStoreAppointmentReferenceDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateFanProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireRetailStoreAppointmentList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireKeyValueStore</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateKeyValueStore</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AppDev_NetworkPerformance</name>
+                       <resource>wireless</resource>
+                       <allowedMethods>get</allowedMethods>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUnifiedCustomerIdentifiers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireNetworkLatency</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireNetworkTrafficDensity</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireReferenceCodeList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireBillList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSubscriberBilledCallDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSubscriberCharges</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSubscriberHistory</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSwitchCircuitDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSwitchCircuitList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddBillAccounts</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddUCOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>OrderDeviceProtectionPlan</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ResetEwalletSecurityProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateCustomerSalesSupportDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdatePartnerServicesProductStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateSubscriberParentalControls</name>
+                       <voltageEnabledIndicator>false</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireOrderDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateCPEDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireNonSBSInventory</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateUCCustomerProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUCCustomerProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CreateUCCustomerNumber</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AuthorizeLOAUpdate</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ReleaseInquiredTelephoneNumbers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateTelephoneNumbers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateLOADetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateBVOIPSiteProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUpsellEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireIncompatibleOfferings</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateBVOIPSubscriberAssociation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendBVOIPSubscriberAssociationNotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CreateWirelineServiceOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineDirectoryAvailability</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableCustomerSparePairsSummary</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateUnifiedCustomerLoginProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireEnterpriseDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePaymentProductApplicationResult</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireTroubleTicketStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireTroubleReferenceDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireTroubleTicketHistory</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateTroubleTicketDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddEnterpriseTroubleTicket</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireContractTerminationDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdatePaymentPreferences</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineServiceAppointments</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ReserveWirelineServiceAppointment</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelinePendingOrderDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SubmitWirelineFacilityAssignmentOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelinePendingOrderDetailsResponse</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddTroubleTicket</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFemtocellDevice</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateFemtocellDevice</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendTroubleTicketStatusNotice</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineTechnicianAssignments</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableFiberServiceAppointments</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SubmitMechanizedLoopTest</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePortedTNList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelinePortDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireHostRoutingDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireBundledOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireBundledAccountServices</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateBundledAccountServices</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateWirelineWorkOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSubscriberCallList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateSubscriberCallList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateCreditPolicy</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddPaymentProfile</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ActivateSwitchFeatures</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddTechnicianTroubleNote</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdatePaymentProfile</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSBSBundledDiscountSubscriberList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ExchangePerformanceMetrics</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireBundledOrderStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableBundlePackages</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireBundledOrderList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>DeletePaymentProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateBillingPreferences</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendBillingPreferencesNotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePaymentProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireServiceAvailabilityForLocation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ActivateCustomer</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ActivateDevice</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ActivateFemtocellService</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ActivateFiberServiceResidentialGateway</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ActivateFiberServiceTNPort</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ActivatePendingEquipmentUpgrade</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ActivateSubscriber</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ActivateSubscriberReseller</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ActivateSubscriberResellerResponse</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ActivateSubscriberResponse</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>Add3PPOrderNotes</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>Add3PPOrderShipment</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddAccount</name>
+                       <InterfaceConnectionConfiguration>
+                               <maxConnections>25</maxConnections>
+                       </InterfaceConnectionConfiguration>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddAffiliateDiscount</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddATTConnectAccount</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddCombinedBilling</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddCreditPolicyProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddCustomerDeviceSalesData</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddBundledOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateBundledOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddFemtocellAddress</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddFemtocellCALEALocation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddFemtocellProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddFiberServiceAccount</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddFiberServiceCreditPolicy</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddFiberServiceTNPort</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddInsuranceClaimOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddNetworkElementTroubleReport</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddNote</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddOrderEmail</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddOtherChargesCredits</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddPayment</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddPort</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddPrepaidFeature</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddPrepaidPayment</name>
+                       <InterfaceTimeoutConfiguration>
+                               <minTimeout>5000</minTimeout>
+                               <defaultTimeout>300000</defaultTimeout>
+                               <maxTimeout>300000</maxTimeout>
+                       </InterfaceTimeoutConfiguration>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddPromiseToPay</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddRemoveProductCodeIndicator</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddSbcCombinedBilling</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddSbcSaleInformation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddSmsPayment</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddWirelineNote</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddWirelineOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddWirelinePayment</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddWirelinePaymentPlan</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ApplyDataTreatment</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ApplyFiberServiceCreditPolicy</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ApplyPrepaidPayment</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ApplyPrepaidVoucher</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AuthenticateFanPassword</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AuthenticateFanPin</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AuthorizeCreditCard</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CalculateSatelliteServiceTaxes</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CalculateTaxes</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>Cancel3PPOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelCombinedBilling</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelCopay</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelFemtocellE911Service</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelFemtocellNetwork</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelFemtocellService</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelFiberServiceWorkOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelHLRRegistration</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelInsuranceClaimOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelPendingEquipmentUpgrade</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelPort</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelReservedFiberServiceVOIPNumber</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelWirelinePayment</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ChangeSubscriberNumber</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CheckEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ConfirmHLRRegistration</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ConfirmWirelineTNReservation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CreateFiberServiceAccount</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CreateFiberServiceVOIPNumber</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CreateFiberServiceWorkOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CreateSatelliteServiceOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>DeleteFemtocellAddress</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>DeleteFemtocellProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>DetermineFiberServiceAccountHistoryList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>DetermineFiberServiceDuplicateApplicationList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>Echo</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ExecuteAffiliateCreditCheck</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ExecuteCreditCheck</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ExecuteFiberServiceCreditCheck</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ExecuteNBIMigration</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ExecuteSalesOpportunityCreditCheck</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ExecuteWirelineCreditCheck</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ExecuteWirelineTroubleReportFunction</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>Generic</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InitiateFiberServiceOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InitiateUnifiedCreditPolicyRetrieval</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAccessoryPricing</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAccountList</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAccountPaymentHistory</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAccountProfile</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAccountSubscribers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireActivationCommissionCodes</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAdditionalOfferings</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAddressMatch</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAffiliateAccountPaymentBalance</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAffiliateAccountProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAffiliateCustomerAccount</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAffiliateEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAffiliateGeneralMessages</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAffiliateOrderStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAffiliateProductCatalog</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAffiliateProductConfiguration</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAffiliateProductDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAffiliateProductOfferingEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAffiliateServiceQualification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAffiliateServiceScheduling</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireARRemittance</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireATTCreditCardOffer</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireATTCreditCardOfferList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAutomaticPayment</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableAccessory</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableFiberServiceAppointments</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableCircuitSparePairs</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableDevice</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableFees</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableFiberServiceAppointments</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableFiberServiceCustomers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableFiberServiceVOIPNumbers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableItemQuantity</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableOfferDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableOffers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailablePortInSubscriber</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableSatelliteServiceAppointments</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableSubscriberNumbers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCollectionData</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCombinedBillingEligibility</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireContractedConversionFee</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCopayEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCopaySubscriber</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCopaySubscriberHistory</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCPNIContactInformation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCpniPreferenceHistory</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCreditCheckResult</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCreditPolicyProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCustomerDeviceSalesData</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireDataAccessEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireDataTreatmentHistory</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireDepositPaymentStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireDeviceDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireDeviceShippingInformation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireDuplicateOfferings</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireEquipmentOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireEquipmentOrderInvoice</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireEquipmentPricing</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireEstimatedFulfillmentTime</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireExistingCustomer</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFanProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFemtocellAddressList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFemtocellDeviceList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFemtocellEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFemtocellProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceAccountDetails</name>
+                       <!-- indicator should be set based on client voltage status-->
+                       <voltageEnabledIndicator>false</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceAssignedProductDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceCircuitDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceCreditVerificationQuestions</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceCrossProductPackages</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceEquipmentDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceOfferEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceOrderDetail</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceOrderList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceOrderStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceProductDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceQualification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceQuotation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceSubscriptionAccount</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServicePendingAdjustments</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceTNPortStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceUsageDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireFiberServiceVOIPPortEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireInsuranceClaimOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireInsuranceClaimReplacementProducts</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireInternationalRoamingMinutes</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireInternationalRoamingUsageParameters</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireLandLinePaymentServiceFee</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireLastSuccessfulPayment</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireMarketByZip</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireMarketServiceAreas</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireMaximumDryLoopFTNAllowed</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireMessagingCapabilities</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireNBIMigrationEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireOfferHistory</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireOfferingEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireOTAHistory</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireOTAProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePaymentLocationDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePendingPricePlan</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePort</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePortActivationStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePortEligibilityByRange</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePortEligibilityBySubscriberNumber</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePrepaidBalance</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePrepaidFeatures</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePrepaidFeaturesHistory</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePrepaidPaymentEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePrepaidPricePlans</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePrepaidPINDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePrepaidSubscriberProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePricePlanList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePricePlans</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquirePurchaseOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSatelliteServiceOrderDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSatelliteServiceProducts</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSatelliteServiceQualification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSatelliteServiceQuotation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSbcCombinedBillingEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireServiceAreaByZip</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireServiceOrderActivationStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSharedGroupUpdateStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireShippingZipBySubscriberNumber</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSIMStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSubscriberList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSubscriberParentalControls</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSubscriberPin</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSubscriberProfile</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSubscriberServiceStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSubscriberTransactionData</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSubscriptionAccountIdentifiers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineSwitchProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSwitchTransactionStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUnbilledUsageDetail</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUnifiedCustomerProfileByServiceLocation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUnifiedCustomerServiceProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUpgradeEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUnifiedOrderDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWiFiEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineAccountProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineAccountAssociations</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireInternetSubscriptionAccounts</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineBillingAccountList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineCreditApplicationList</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineCreditVerificationQuestions</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineCustomerAccount</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineDSLandConnectTechOrderDetail</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineDTVOrderDetail</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineFiberServiceAppointments</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineGeneralMessages</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineNetworkChannelDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineNonRecurringCharges</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineOpenTroubleReports</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineOrderDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineOrderStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelinePaymentHistory</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelinePaymentPlan</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelinePortEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableTelephoneNumbers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ReserveTelephoneNumbers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineProductCatalog</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineProductConfiguration</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineProductCount</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineProductDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineProductsForResource</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineRegion</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineServiceQualification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineServiceScheduling</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineQualifiedProducts</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineServiceOrderDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineTelcoOrderDetail</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineTransportDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineUsageDetail</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineWholesaleProductFamilies</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>MaintainAffiliateAccountAssociation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ManageAutomaticPayments</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ManageCopay</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ManageSubscriberPin</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ModifySatelliteServiceOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelSatelliteServiceOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>MoveSubscriber</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>NotifyFemtocellAction</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>OrderEquipment</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>OrderEquipmentWithValidation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>OrderFiberService</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ParseUnfieldedWirelineAddress</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>PortFiberServiceTelephoneNumber</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ProcessEcho</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ProcessEchoBackOffice</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ProcessEchoFrontOffice</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ProcessWirelineCPNIElection</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ProvisionAddressBookService</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ProvisionFemtocellE911Service</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ProvisionFemtocellNetwork</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ProvisionFemtocellRegistration</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>PublishUnifiedCreditPolicy</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>QualifyAndQuoteFiberServiceProducts</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>QualifyProducts</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>RegisterFemtocellService</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ReleaseAvailableFiberServiceVOIPNumbers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ReleaseDryLoopFTN</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ReleaseSubscriberNumber</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>RemoveCustomerDeviceSalesData</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ResendOTAProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ReserveFiberServiceAppointments</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ReserveFiberServiceVOIPNumber</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ReserveSubscriberNumber</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ResetVoiceMailPassword</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>RetrieveAbandonedFiberServiceOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>RetrieveFiberServiceAccount</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>RetrieveFiberServiceAppointments</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>RetrieveFiberServiceOrderStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>RetrieveFiberServiceProducts</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>RetrieveOrderDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>RetrieveProducts</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>RetrieveQuotation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>RetrieveUnifiedCreditPolicy</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ScheduleAppointments</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ScheduleSatelliteServiceInstallation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendAccountNotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendCPNINotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendEmail</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendFanProfileNotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendFiberServiceTNPortNotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendFiberServiceWorkOrderNotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendFiberServiceWorkOrderNotificationAsync</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendSms</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendSmsResponse</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendTreatmentNotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SubmitATTCreditCard</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SubmitCreditCheck</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SubmitFiberServiceOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SubmitFiberServiceTNAssignmentOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SubmitOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SubmitWalmartProxy</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SwapEquipment</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SwapFemtocellDevice</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateAccountDisputeDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateAccountManager</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateAccountProfile</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateAccountStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateAffiliateProductOffering</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateBillMedia</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateCpniPreference</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateCreditPolicyProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateDepositPaymentStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateDeviceInventory</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateDeviceProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateEwalletStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireEwalletEventHistory</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireEwalletSubscriberProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCustomerSnapshot</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateFemtocellCALEALocation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateFemtocellProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateFiberServiceAccount</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateFiberServiceAccountDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateFiberServiceCreditApplication</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateInternationalRoamingUsageParameters</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateOfferDisposition</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdatePort</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdatePrepaidFeature</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdatePrepaidSubscriberProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateSalesOpportunityCreditCheck</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateSatelliteServiceAccountAssociation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateSubscriberAddressBookIdentifier</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateSubscriberProfile</name>
+                       <InterfaceTimeoutConfiguration>
+                               <minTimeout>5000</minTimeout>
+                               <defaultTimeout>100000</defaultTimeout>
+                               <maxTimeout>120000</maxTimeout>
+                       </InterfaceTimeoutConfiguration>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateSubscriberStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateVoiceMailProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateWirelineAccountProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateWirelineCPNIPreference</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateWirelineCreditApplication</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateWirelineTroubleReport</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpgradeEquipment</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpqueryAffiliateOfferingEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateAddress</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateAffiliateCustomer</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateAffiliateOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateCreditCard</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateFemtocellCoverageArea</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateFemtocellE911Coverage</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateFemtocellEquipmentIdentifier</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateFemtocellWhitelist</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateFiberServiceCreditPolicy</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateFiberServiceCreditVerificationAnswers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateFiberServiceFacility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateFiberServiceFacilityResponse</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateFiberServiceFacilityNotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateFiberServiceProductDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateSatelliteServiceProducts</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateShippingPriority</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateWirelineCreditVerificationAnswers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateWirelineCustomer</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateWirelineOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineFutureAvailability</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateWirelinePostalAddress</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelMobileContent</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireMobileContentDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateFiberServiceOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ExecuteUnifiedCreditCheck</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendPaymentProductApplicationResultNotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ConfirmUnifiedCreditAccountDebtPayment</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUnifiedCreditAccountDebtDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUnifiedCreditVerificationQuestions</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SubmitUnifiedCreditApplication</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateUnifiedCreditApplication</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateUnifiedCreditVerificationAnswers</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUnifiedCreditAdverseActionLetter</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUnifiedCreditPolicyDecision</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>NotifyUnifiedCreditOrderSubmission</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AssignAvailableWorkOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendNetworkPathWorkOrderStatusNotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ProcessNetworkPathWorkOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CreateCentralOfficeWorkOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateCentralOfficeWorkOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CreateFiberServiceRepairWorkOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CreateFiberServiceRepairWorkOrderAsnyc</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendRepairWorkOrderNotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelFiberServiceRepairWorkOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>CancelFiberServiceRepairWorkOrderAsnyc</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUnifiedCustomerLoginProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCustomerSubscriptionDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendCancelWorkOrderNotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineAccountLevelCSR</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireWirelineServiceLevelCSR</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireUnifiedPaymentProfile</name>
+                       <voltageEnabledIndicator>true</voltageEnabledIndicator>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateCloudServiceDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireNote</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateSubscriberOfferings</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>AddBundledOrderV48</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateBundledAccountServicesV48</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateBundledOrderV48</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateBundledOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireBundledAccountProfile</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireRecommendationDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireEnterpriseEndUserPermissions</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireNCIMigrationEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ExecuteNCIMigration</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateCommonOrder</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireBillCycleDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireCommonOrderListDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ValidateWirelineTroubleReportCompletion</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSubscriberContractDetails</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>ExecuteExternalCreditCheck</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireExternalApplicantKey</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateExternalCreditApplication</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SendExternalCreditResultNotification</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireAvailableRetailStoresByLocation</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateEnterpriseEndUserPermissions</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSubscriberServiceEligibility</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>UpdateFemtocellWhiteLists</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireNetworkProductCatalog</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireNetworkProductPriceQuote</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>SubmitSLACreditClaim</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface>
+                       <name>InquireSLACreditClaimStatus</name>
+               </AuthorizedInterface>
+               <AuthorizedInterface> 
+                       <name>InquireSLANetworkCreditClaimStatus</name>
+               </AuthorizedInterface>
+               <ServicePolicy>
+                                       <name>WHOLESALE-CUSTOMER-IDDELETE</name>
+                                       <value>walmartID</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                                       <name>WHOLESALE-CUSTOMER-NAME</name>
+                                       <value>walmart</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                                       <name>WHOLESALE-CUSTOMER-RESTRICTED-STATES</name>
+                                       <value>alaska</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>BID_ID</name>
+                       <value>PlatinumSP</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>EBM_ORGID</name>
+                       <value>o3hevdtz</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>REMOTE-CALL</name>
+                       <value>true</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>CALL_NUMERITRACK</name>
+                       <value>true</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>HEARTBEAT-INTERVAL</name>
+                       <value>20</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>AP-CALL-RSN-FOR-WLNP-TLG</name>
+                       <value>false</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>AS-PROCESS-DISCOUNTS</name>
+                       <value>false</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>AS-RETRY-ON-TRANSIENT-ERROR</name>
+                       <value>true</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>AS-STORE-MARKET</name>
+                       <value>true</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>CATALOG_TYPE</name>
+                       <value>WALMART Catalog</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <!-- Should be true only for ACME -->
+                       <name>CHECK-FOR-MARKETLOOKUP-SOFTERROR</name>
+                       <value>true</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>EQUIPMENT-UPGRADE-MAX-RETRY-INTERVAL</name>
+                       <value>0</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>EQUIPMENT-UPGRADE-TRACKING-REQUIRED</name>
+                       <value>false</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>IAL-AV-REQUIRED</name>
+                       <value>false</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>IAP-ALLOWED-MASK-VALUES</name>
+                       <value>CR:TD:SL:SN:SC:DC:UD:VU:VU+PT:VU+PR:VU+PT+PR:DU:DU+PR:UE</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>IAP-AV-REQUIRED</name>
+                       <value>false</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>INFO-RESTRICT-LEVEL</name>
+                       <value>Unrestricted</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>ISP-ALLOWED-MASK-VALUES</name>
+                       <value>DI:DC:UD:VU:VU+PT:VU+PR:VU+PT+PR:DU:DU+PR:UE</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>IUCSP-MAX-ALLOWED-CTNS</name>
+                       <value>10</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>IUCSP-NEW-KIT-WARRANTY-DAYS</name>
+                       <value>366</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>IUCSP-REFURBISHED-KIT-WARRANTY-DAYS</name>
+                       <value>90</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>IUCSP-SEED-KIT-WARRANTY-DAYS</name>
+                       <value>366</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>IUUD-ALLOWED-MASK-VALUES</name>
+                       <value>VU:VU+HO:VU+RO:VU+TO:VU+AL:VU+PT:VU+PT+HO:VU+PT+RO:VU+PT+TO:VU+PT+AL:VU+PR:VU+PR+HO:VU+PR+RO:VU+PR+TO:VU+PR+AL:VU+PT+PR:VU+PT+PR+HO:VU+PT+PR+RO:VU+PT+PR+TO:VU+PT+PR+AL:DU:DU+PR</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>IWPE-LSR11-ACCESS-DENIED</name>
+                       <value>false</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>TN-REQUEST-CATEGORY</name>
+                       <value>MCSICVOIP</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>MARKET-STATUS-LOOKUP</name>
+                       <value>false</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>MEMO-NOTE-USER</name>
+                       <value>WEB</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>NBI-ACCESS-DECLINED</name>
+                       <value>false</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>PREAUTHORIZED-CREDIT-CHECK</name>
+                       <value>true</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <!-- Should always be true for IST and almost always false for prod -->
+                       <name>RESTRICTED-TO-TEST-CALLS</name>
+                       <value>true</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>RESELLER-TEST-DEALER-CODE</name>
+                       <value>IJX57</value>
+               </ServicePolicy>                
+               <ServicePolicy>
+                       <name>UPGRADE-EQUIPMENT-NEW-SALES-CHANNEL</name>
+                       <value>U2</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>UPGRADE-EQUIPMENT-UPGRADE-SECURITY-CODE</name>
+                       <value>III</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>USE-GENERIC-ASYNC-RESPONSE</name>
+                       <value>true</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>USOC-INFO-DATA-SOURCE</name>
+                       <value>CURRENT</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>VFSF-OAT-REQUIRED-MSG-LOOKUP</name>
+                       <value>false</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>VFSF-CLIENT-REQ-TYPE</name>
+                       <value>Negotiation</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>VFSF-CLIENT-ID</name>
+                       <value>BBNMS</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>SMS-DESTINATION-PORT</name>
+                       <value>-1</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>CTVCODE-SERVICE-MAINTENANCE</name>
+                       <value>true</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>XI-APPLICATION-CONTEXT</name>
+                       <value>OPSS</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>IN-MAX-BILLING-NOTE-QUANTITY</name>
+                       <value>300</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>ITTH-TL-MAX-RECORDS-TO-FETCH</name>
+                       <value>50</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>ITTH-ITH-MAX-RECORDS-TO-FETCH</name>
+                       <value>30</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>IEEUP-SYSTEM-ID</name>
+                       <value>premier</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                               <name>SUBSCRIPTION_CLASS</name>
+                               <value>S</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                        <name>MOBILE_PAYMENTS_PARTNER_ID</name>
+                        <value>S</value>
+                </ServicePolicy>
+
+               <ServicePolicy>
+                       <name>IUCPBYSL-GRID-CLIENT</name>
+                       <value>true</value>
+               </ServicePolicy>
+               <ServicePolicy>
+                       <name>APPLICATION_ID</name>
+                       <value>ONSTAR</value>
+               </ServicePolicy>
+               <ServiceProviderCredentials>
+                       <system>AES</system>
+                       <userName>NRETLTEL</userName>
+                       <userPassword>NRETLTEL</userPassword>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>BOSS</system>
+                       <userName>testcsi</userName>
+                       <userPassword/>
+                       <CredentialPolicy>
+                               <name>RACFID</name>
+                               <value>pb1975</value>
+                       </CredentialPolicy>
+                       <CredentialPolicy>
+                               <name>RACFPASSWORD</name>
+                               <value>Light@1</value>
+                       </CredentialPolicy>
+                       <!--CredentialPolicy>
+                                <name>BOSSTYPISTID</name>
+                                <value>1K34</value>
+                        </CredentialPolicy-->
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>BSTECSC</system>
+                       <userName>CSI</userName>
+                       <userPassword>a2p2!!b1</userPassword>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>CAM</system>
+                       <userName>CSIQC</userName>
+                       <userPassword>CSIQC</userPassword>
+                       <CredentialPolicy>
+                               <name>AccountType</name>
+                               <value>S</value>
+                       </CredentialPolicy>
+                       <CredentialPolicy>
+                               <name>SubAccountType</name>
+                               <value>T</value>
+                       </CredentialPolicy>
+                       <CredentialPolicy>
+                               <name>WaiveActivationFee</name>
+                               <value>true</value>
+                       </CredentialPolicy>
+                       <CredentialPolicy>
+                               <name>WaiveUpgradeFee</name>
+                               <value>true</value>
+                       </CredentialPolicy>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>CBS</system>
+                       <userName>ZCINGP1</userName>
+                       <userPassword/>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>CPSOS</system>
+                       <userName>c48794</userName>
+                       <userPassword>7941!c48</userPassword>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>DLC</system>
+                       <userName>CSIQC</userName>
+                       <userPassword/>
+                       <CredentialPolicy>
+                               <name>DLC_APP_ID</name>
+                               <value>ASURION</value>
+                       </CredentialPolicy>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>GCS</system>
+                       <userName>CSIQC</userName>
+                       <userPassword/>
+                       <CredentialPolicy>
+                               <name>GCS_MERCHANT_ID</name>
+                               <value>001342</value>
+                       </CredentialPolicy>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>InterconnectRC</system>
+                       <userName>csitest</userName>
+                       <userPassword/>
+                       <CredentialPolicy>
+                               <name>interconnectUSERID</name>
+                               <value>SBC001T</value>
+                       </CredentialPolicy>
+                       <CredentialPolicy>
+                               <name>interconnectPASSWORD</name>
+                               <value>GC@\u0011W4\#""6/\u001172OK</value>
+                       </CredentialPolicy>
+                       <CredentialPolicy>
+                               <name>interconnectLightSpeedUSERID</name>
+                               <value>SBC002T</value>
+                       </CredentialPolicy>
+                       <CredentialPolicy>
+                               <name>interconnectLightSpeedPASSWORD</name>
+                               <value>GAN\u0016T4\#""6/\u001072OK</value>
+                       </CredentialPolicy>
+                       <CredentialPolicy>
+                               <name>interconnectConsumerUSERID</name>
+                               <value>SBC003T</value>
+                       </CredentialPolicy>
+                       <CredentialPolicy>
+                               <name>interconnectConsumerPASSWORD</name>
+                               <value>GCC\u0017P4\#""6/\u001372OK</value>
+                       </CredentialPolicy>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>LNPSOA</system>
+                       <userName/>
+                       <userPassword/>
+                       <CredentialPolicy>
+                               <name>LNPSOA_APP_ID</name>
+                               <value>QC</value>
+                       </CredentialPolicy>
+                       <!--CredentialPolicy>
+        <name>LNPSOA_USER_ID</name>
+        <value>RMBISQC</value>
+         </CredentialPolicy-->
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>MRE</system>
+                       <userName>OPUS</userName>
+                       <userPassword>OPUS</userPassword>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>NSM</system>
+                       <userName>ACME</userName>
+                       <userPassword/>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>OrderTrack</system>
+                       <userName>csitest</userName>
+                       <userPassword/>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>PDC</system>
+                       <userName>RS</userName>
+                       <userPassword/>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>QPAY</system>
+                       <userName>CSI_FDC</userName>
+                       <userPassword>CSI_FDC</userPassword>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>SWOT-LITE</system>
+                       <userName>cingultest</userName>
+                       <userPassword>j9WWuopev9</userPassword>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>TLGAPI</system>
+                       <userName>rimprov1</userName>
+                       <userPassword>unix11</userPassword>
+                       <CredentialPolicy>
+                               <name>APP_ID</name>
+                               <value>TLGAPI</value>
+                       </CredentialPolicy>
+                       <CredentialPolicy>
+                               <name>CALLER_IND</name>
+                               <value>FR</value>
+                       </CredentialPolicy>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>YODA</system>
+                       <userName>WTS</userName>
+                       <userPassword>CSITest</userPassword>
+               </ServiceProviderCredentials>
+               <ServiceProviderCredentials>
+                       <system>EDGE</system>
+                       <userName>WMS</userName>
+                       <userPassword>WMS</userPassword>
+               </ServiceProviderCredentials>
+               <AsyncCallbackConfig>
+                       <allowHttp>true</allowHttp>
+                       <RetryPolicy>
+                               <timeout>30000</timeout>
+                               <numRetries>3</numRetries>
+                               <delay>3000</delay>
+                       </RetryPolicy>
+                       <SSLConfig>
+                               <enableHostNameVerification>false</enableHostNameVerification>
+                               <enableTwoWaySSL>false</enableTwoWaySSL>
+                               <ServerCertificateDetails>
+                                       <trustStoreLocation>/opt/app/sg_q7/tibco/jre/lib/security/cacerts</trustStoreLocation>
+                                       <trustStorePassword>changeit</trustStorePassword>
+                               </ServerCertificateDetails>
+                               <ClientCertificateDetails>
+                                       <keyStoreLocation>/opt/app/sg_q7/gateway_a/config/ActingAsClient.keystore</keyStoreLocation>
+                                       <keyStorePassword>client</keyStorePassword>
+                               </ClientCertificateDetails>
+                       </SSLConfig>
+               </AsyncCallbackConfig>
+               <performPrepaidDeviceCheck>true</performPrepaidDeviceCheck>
+       </Partner>
+</PartnerProfile>
diff --git a/ajsc-shared-config/etc/aft.properties b/ajsc-shared-config/etc/aft.properties
new file mode 100644 (file)
index 0000000..1d9229c
--- /dev/null
@@ -0,0 +1,16 @@
+#Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
+# Flow test 319
+# The DEFAULT setup for this file is for deployment to soa cloud node which will use the "bundleconfig/etc/spm2.jks" location
+# For Testing Locally, you can set the system property, csiEnable=true, found within bundleconfig-local/etc/sysprops/sys-props.properties
+# and switch com.att.aft.keyStore and com.att.aft.trustStore values commented out below to "ajsc-shared-config/etc/spm2.jks"
+
+#replace proper values for the dummy values.
+com.att.aft.discovery.client.environment=TEST
+com.att.aft.discovery.client.latitude=35.318900
+com.att.aft.discovery.client.longitude=-80.762200
+com.att.aft.alias=fusionbus
+com.att.aft.keyStore=bundleconfig/etc/key.jks
+com.att.aft.keyStorePassword=password
+com.att.aft.trustStore=bundleconfig/etc/key.jks
+com.att.aft.trustStorePassword=password
+
diff --git a/ajsc-shared-config/etc/basic-logback_root_logger_level_off.xml b/ajsc-shared-config/etc/basic-logback_root_logger_level_off.xml
new file mode 100644 (file)
index 0000000..4ebe2db
--- /dev/null
@@ -0,0 +1,87 @@
+<!-- 
+ Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
+-->
+<configuration scan="true" scanPeriod="3 seconds" debug="true">
+       <property name="logDirectory" value="${AJSC_HOME}/log" />
+       <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+               <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+                       <level>ERROR</level>
+               </filter>
+               <encoder>
+                       <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{1024} - %msg%n
+                       </pattern>
+               </encoder>
+       </appender>
+
+       <appender name="INFO"
+               class="ch.qos.logback.core.rolling.RollingFileAppender">
+               <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+                       <level>DEBUG</level>
+               </filter>
+               <file>${logDirectory}/info_ajsc.log</file>
+               <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+                       <fileNamePattern>${logDirectory}/info_ajsc.%i.log.zip
+                       </fileNamePattern>
+                       <minIndex>1</minIndex>
+                       <maxIndex>9</maxIndex>
+               </rollingPolicy>
+               <triggeringPolicy
+                       class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+                       <maxFileSize>5MB</maxFileSize>
+               </triggeringPolicy>
+               <encoder>
+                       <pattern>"%d [%thread] %-5level %logger{1024} - %msg%n"</pattern>
+               </encoder>
+       </appender>
+       <appender name="ERROR"
+               class="ch.qos.logback.core.rolling.RollingFileAppender">
+               <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+                       <level>ERROR</level>
+               </filter>
+               <file>${logDirectory}/error_ajsc.log</file>
+               <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+                       <fileNamePattern>${logDirectory}/error_ajsc.%i.log.zip
+                       </fileNamePattern>
+                       <minIndex>1</minIndex>
+                       <maxIndex>9</maxIndex>
+               </rollingPolicy>
+               <triggeringPolicy
+                       class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+                       <maxFileSize>5MB</maxFileSize>
+               </triggeringPolicy>
+               <encoder>
+                       <!-- <pattern>"%d{HH:mm:ss.SSS} [%thread] %-5level %logger{1024} - %msg%n"</pattern> -->
+                       <pattern>"%d [%thread] %-5level %logger{1024} - %msg%n"</pattern>
+               </encoder>
+       </appender>
+
+       <appender name="AJSC-AUDIT" class="ch.qos.logback.classic.net.SyslogAppender">
+               <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+                       <level>INFO</level>
+               </filter>
+               <syslogHost>localhost</syslogHost>
+               <facility>USER</facility>
+               <!-- Note the colon character below - it is important part of "TAG" message 
+                       format You need a colon to determine where the TAG field ends and the CONTENT 
+                       begins -->
+               <suffixPattern>AJSC_AUDIT: [%thread] [%logger] %msg</suffixPattern>
+       </appender>
+       <appender name="CONTROLLER-AUDIT" class="ch.qos.logback.classic.net.SyslogAppender">
+               <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+                       <level>INFO</level>
+               </filter>
+               <syslogHost>localhost</syslogHost>
+               <facility>USER</facility>
+               <!-- Note the colon character below - it is important part of "TAG" message 
+                       format You need a colon to determine where the TAG field ends and the CONTENT 
+                       begins -->
+               <suffixPattern>AJSC_AUDIT: [%thread] [%logger] mdc:[%mdc] %msg
+               </suffixPattern>
+       </appender>
+
+       <root level="off">
+               <appender-ref ref="ERROR" />
+               <appender-ref ref="INFO" />
+               <appender-ref ref="STDOUT" />
+       </root>
+</configuration>
similarity index 86%
rename from src/main/resources/logback.xml
rename to ajsc-shared-config/etc/logback.xml
index 48233fe..d596247 100644 (file)
@@ -1,28 +1,8 @@
-<!--
-  ============LICENSE_START=======================================================
-  MODEL LOADER SERVICE
-  ================================================================================
-  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=========================================================
-  -->
-
 <configuration scan="true" scanPeriod="3 seconds" debug="false">
        <!--<jmxConfigurator /> -->
        <!-- directory path for all other type logs -->
 
-       <property name="logDir" value="logs" />
+       <property name="logDir" value="${AJSC_HOME}/logs" />
 
 
        <!-- specify the component name <ECOMP-component-name>::= "MSO" | "DCAE" 
diff --git a/ajsc-shared-config/etc/spm2.jks b/ajsc-shared-config/etc/spm2.jks
new file mode 100644 (file)
index 0000000..8ff2a00
Binary files /dev/null and b/ajsc-shared-config/etc/spm2.jks differ
diff --git a/antBuild/build.xml b/antBuild/build.xml
new file mode 100644 (file)
index 0000000..ab0f890
--- /dev/null
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+ Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
+-->
+<project>
+       <target name="runLocal">
+               <java dir="${basedir}" fork="yes" newenvironment="true"
+                       failonerror="true" classname="com.att.ajsc.runner.Runner">
+                       <classpath
+                               path="${classpath}:${basedir}/ajsc-shared-config/etc:${runAjscHome}/lib/ajsc-runner-${ajscRuntimeVersion}.jar" />
+
+                       <!-- Windows Users may need to add a jvmarg arg to create a temp directory 
+                               properly. -->
+                       <!-- <jvmarg value="-Djava.io.tmpdir=C:/yourTempDirectory"/> -->
+
+                       <!-- Uncomment the following 2 jvmarg values to enable Remote Debugging. 
+                        -->
+                       <!-- <jvmarg value="-Xdebug" /> -->
+                       <!-- <jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5432" 
+                               /> -->
+
+                       <jvmarg value="-XX:MaxPermSize=512m" />
+                       <jvmarg value="-Xmx1024m" />
+
+                       <!-- Main ajsc Variables below (Variables necessary for proper startup 
+                               of AJSC) -->
+                       <env key="AJSC_HOME" value="${runAjscHome}" />
+                       <sysproperty key="AJSC_HOME" value="${runAjscHome}" />
+                       <!-- you may specify any external location for AJSC_CONF_HOME where etc 
+                               folder & all other configs can be found under it. If not specified, it will 
+                               default to AJSC_HOME -->
+                       <sysproperty key="AJSC_CONF_HOME" value="${basedir}/bundleconfig-local" />
+                       <sysproperty key="AJSC_SHARED_CONFIG" value="${basedir}/ajsc-shared-config" />
+
+                       <!-- Location of logback.xml file used for logging configurations. Please, 
+                               note, when deploying a service to either CSI or NON-CSI environment, this 
+                               system property will be set in sys-props.properties file. We are setting 
+                               it here for running locally due to the ease of use of maven variable for 
+                               basedir. -->
+                       <sysproperty key="logback.configurationFile"
+                               value="${basedir}/ajsc-shared-config/etc/logback.xml" />
+
+                       <!-- Setting system properties for the AJSC external libs and properties 
+                               folders below. When deploying to a node, these properties will be set within 
+                               the bundleconfig/etc/sysprops/sys-props.properties file. However, when running 
+                               locally, the ${basedir} substitution works more efficiently in this manner. -->
+                       <sysproperty key="AJSC_EXTERNAL_LIB_FOLDERS" value="${basedir}/target/commonLibs" />
+                       <sysproperty key="AJSC_EXTERNAL_PROPERTIES_FOLDERS"
+                               value="${basedir}/ajsc-shared-config/etc" />
+
+                       <!-- End of Main ajsc Variables below (Variables necessary for proper 
+                               startup of AJSC) -->
+
+                       <!-- Uncomment the following line to add oauthentication to your Service -->
+                       <!-- <sysproperty key="spring.profiles.active" value="oauth" /> -->
+
+                       <!-- If using Cassandra as Database, Enter the ip/host and port below 
+                               based on your known configuration -->
+                       <!-- <sysproperty key="cassandra.ip" value="hostname" /> -->
+                       <!-- <sysproperty key="cassandra.port" value="9042" /> -->
+
+                       <!-- The APP_SERVLET_URL_PATTERN variable is defaulted to "/services" 
+                               within the initial configuration of the AJSC. If you are changing the CamelServlet 
+                               Filter within the ajsc-override-web.xml, you should use that url-pattern 
+                               here. This is necessary to properly register your service with dme2. An empty 
+                               value, "", is used when NO value is wanted (url-pattern would be /* for CamelServlet 
+                               Filter) -->
+                       <!-- As of 4.5.1, this property is no longer needed -->
+                       <!-- <sysproperty key="APP_SERVLET_URL_PATTERN" value="/services" /> -->
+
+                       <!-- GRM/DME2 System Properties below -->
+                       <sysproperty key="AJSC_SERVICE_NAMESPACE" value="${module.ajsc.namespace.name}" />
+                       <sysproperty key="AJSC_SERVICE_VERSION" value="${module.ajsc.namespace.version}" />
+                       <sysproperty key="SOACLOUD_SERVICE_VERSION" value="${project.version}" />
+                       <!-- End of GRM/DME2 System Property Variables -->
+
+                       <!-- The following server.port variable was necessary for the proper registration 
+                               of the AJSC to dme2. This value may still need to be used if the Developer 
+                               is hardcoding their port (example: 8080). Then, the server.port value="8080". 
+                               The default functionality for the AJSC is to use EPHEMERAL ports. In this 
+                               case, you do NOT need to set the server.port value. The AJSC will find the 
+                               proper port value and register to dme2 correctly -->
+                       <!-- <sysproperty key="server.port" value="${serverPort}" /> -->
+
+                       <!-- Command Line Arguments to add to the java command. Here, you can 
+                               specify the port as well as the Context you want your service to run in. 
+                               Use context=/ to run in an unnamed Context (Root Context). The default configuration 
+                               of the AJSC is to run under the /ajsc Context. Setting the port here can 
+                               aid during the development phase of your service. However, you can leave 
+                               this argument out entirely, and the AJSC will default to using an Ephemeral 
+                               port. -->
+                       <arg line="context=/ port=${serverPort} sslport=${sslport}" />
+               </java>
+       </target>
+       <target name="prep_home_directory_for_swm_pkgcreate">
+
+<!-- ********* GENERATE CADI KEY AND ENCRYPTED PASSWORD ***********
+     
+            Uncomment the following if your cadi key get corrupted , It would 
+                       generate the Cadi key and password in the package phase and keep the key 
+                       in the 'src/main/config/ajscKey' and password in the bottom of cadi.properties(you 
+                       need to modify the 'aaf_pass' variable with this value . Plese modify the 
+                       template.cadi.properties as well before uploading to SOA node 
+-->
+
+<!-- 
+               <java jar="${basedir}/target/userjars/cadi-core-1.2.5.jar" fork="true"> 
+               <arg value="keygen" /> <arg value="src/main/config/ajscKey" /> 
+               </java> 
+               
+               <echo>***Cadi Key file generated ****</echo> 
+               
+               <java jar="${basedir}/target/userjars/cadi-core-1.2.5.jar" 
+               fork="true" append="true" output="${basedir}/src/main/config/cadi.properties"> 
+               <arg value="digest" /> <arg value="ajscRocks!" /> <arg value="src/main/config/ajscKey" 
+               /> 
+               </java> 
+               
+-->
+
+
+
+               <!-- These tasks are copying contents from the installHomeDirectory into 
+                       the eventual $AJSC_HOME directory for running locally and soa cloud installation -->
+               <echo message="ENTERING 'prep_home_directory_for_swm_pkgcreate' ant tasks" />
+
+               <!-- Please, NOTE: The ajsc-archetype is setup for a default CSI Env deployment. 
+                       If you are deploying to a CSI Env, you should NOT have to change anything 
+                       within this build file. However, if you are NOT deploying to a CSI Env, you 
+                       should comment OUT the CSI related portion of this build.xml. -->
+
+               <!-- The following code snippet is copying the bundleconfig-csi directory 
+                       to the proper installation/bundleconfig directory used in CSI envs. If you 
+                       are NOT installing to a CSI node, you should comment out (or delete) the 
+                       following snippet, and uncomment the NON-CSI copy task to copy EVERYTHING 
+                       to the installation/bundleconfig directory. -->
+
+               <!-- CSI related bundleconfig copy task. If you are NOT deploying to a 
+                       CSI Env, please COMMENT OUT or delete the following copy task code snippet. -->
+               <!--<copy toDir="${basedir}/target/swm/package/nix/dist_files${distFilesRoot}/bundleconfig" 
+                       failonerror="true"> <fileset dir="${basedir}/bundleconfig-csi" /> </copy> -->
+               <!-- End of CSI related bundleconfig copy task -->
+
+               <!-- NOTE: If you are NOT deploying to CSI environment, and you are NOT 
+                       using an AJSC_SHARED_CONFIG location on a node, you should go ahead and copy 
+                       EVERYTHING from bundleconfig and ajsc-shared-config (logback.xml) directory 
+                       to utilize proper logging from logback.xml. Simply, uncomment the following 
+                       code snippet below to copy EVERYTHING and comment out the CSI related build 
+                       script above. -->
+               <!-- NON-CSI related build copy task. Please, uncomment the following code 
+                       snippet to deploy the proper artifacts to a NON-CSI Env. -->
+               <copy
+                       toDir="${basedir}/target/swm/package/nix/dist_files${distFilesRoot}/bundleconfig"
+                       failonerror="true">
+                       <fileset dir="${basedir}/bundleconfig-local" includes="**/**" />
+               </copy>
+               <copy
+                       toDir="${basedir}/target/swm/package/nix/dist_files${distFilesRoot}/bundleconfig/etc"
+                       failonerror="true">
+                       <fileset dir="${basedir}/ajsc-shared-config/etc" includes="**/**" />
+               </copy>
+               <!-- End of NON-CSI related build copy task. -->
+
+               <!-- Copying any zips (deployment packages) to $AJSC_HOME/services for 
+                       auto-deployment -->
+               <copy
+                       toDir="${basedir}/target/swm/package/nix/dist_files${distFilesRoot}/services"
+                       failonerror="false">
+                       <fileset dir="${basedir}/services" includes="*.zip" />
+               </copy>
+
+               <!-- Copying runtimeEnvironment zip file to $AJSC_HOME/runtime and renaming 
+                       runtimeEnvironment.zip for proper auto-deployment of ajsc services. 
+               <copy
+                       tofile="${basedir}/target/swm/package/nix/dist_files${distFilesRoot}/runtime/runtimeEnvironment.zip">
+                       <fileset dir="target" includes="*-runtimeEnvironment.zip" />
+               </copy>-->
+
+               <!-- Copying dependencies from the service project (not provided by AJSC 
+                       Container) to the $AJSC_HOME/extJars folder to be accessible on the classpath -->
+               <copy
+                       toDir="${basedir}/target/swm/package/nix/dist_files${distFilesRoot}/extJars"
+                       failonerror="false">
+                       <fileset dir="target/userjars" includes="*" />
+               </copy>
+
+               <!-- extApps directory MUST be created for ajsc-runner to run correctly, 
+                       even if empty. DO NOT REMOVE!!! -->
+               <!-- extApps directory created to deploy other war files on startup or 
+                       hot deploy War files after ajsc starts up. -->
+               <mkdir
+                       dir="${basedir}/target/swm/package/nix/dist_files${distFilesRoot}/extApps" />
+
+               <!-- Copying any extra wars to $AJSC_HOME/extApps to be deployed within 
+                       AJSC -->
+               <copy
+                       toDir="${basedir}/target/swm/package/nix/dist_files${distFilesRoot}/extApps"
+                       failonerror="false">
+                       <fileset dir="${basedir}/src/main/resources/extApps"
+                               includes="*" />
+               </copy>
+
+               <!-- staticContent folder is for serving static content within an ajsc 
+                       service. Any static content to be served will be copyied to the ultimate 
+                       $AJSC_HOME/staticContent folder and can be served with the att-static-content 
+                       camel component. -->
+               <!-- Uncomment the following snippet to copy items from staticContent folder 
+                       to ultimate $AJSC_HOME/staticConent -->
+               <!-- <copy toDir="${basedir}/target/swm/package/nix/dist_files${distFilesRoot}/staticContent" 
+                       failonerror="false"> <fileset dir="${basedir}/staticContent" includes="**/**" 
+                       /> </copy> -->
+
+               <!-- Copying extra jar files that have been labeled as dependencies in 
+                       service project to /extJars folder to be made available on the classpath 
+                       for your service -->
+               <copy
+                       toDir="${basedir}/target/swm/package/nix/dist_files${distFilesRoot}/extJars"
+                       failonerror="false">
+                       <fileset dir="target" includes="*.jar" />
+               </copy>
+
+               <!-- Copying deployment packages created within the project to the $AJSC_HOME/services 
+                       folder to be auto deployed. -->
+               <copy
+                       toDir="${basedir}/target/swm/package/nix/dist_files${distFilesRoot}/services">
+                       <fileset dir="target" includes="*.zip" excludes="*-runtimeEnvironment.zip" />
+               </copy>
+
+               <echo message="EXITING 'prep_assembly_output_for_swm_plugin' ant tasks" />
+       </target>
+</project>
diff --git a/bundleconfig-local/etc/appprops/AAFUserRoles.properties b/bundleconfig-local/etc/appprops/AAFUserRoles.properties
new file mode 100644 (file)
index 0000000..adb7a10
--- /dev/null
@@ -0,0 +1,13 @@
+#Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
+
+#If using AAF for Role based authentication/authorization, define your routes/services which will utilize AAF. The AJSC will
+#read this file and protect the routes given with the AAF role defined.
+
+#The following example would protect the JAXRS echo example service provided with the archetype.
+#/services/${namespace}/v1/jaxrs-services/jaxrsExample/echo/*=com.att.ajsc.myper|mymachine|manage
+
+#The following example would protect ALL AJSC services running within your project.
+#/**=com.att.ajsc.myperm|mymachine|manage
+
+#The following example would protect ALL REST services utilizing the Camel restlet routes.
+#/rest/**=com.att.ajsc.myperm|mymachine|manage
diff --git a/bundleconfig-local/etc/appprops/PostProcessorInterceptors.properties b/bundleconfig-local/etc/appprops/PostProcessorInterceptors.properties
new file mode 100644 (file)
index 0000000..08ffefa
--- /dev/null
@@ -0,0 +1,3 @@
+#Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
+#This properties file is for defining any PostProcessorInterceptors that have been created for your AJSC service.
+
diff --git a/bundleconfig-local/etc/appprops/PreProcessorInterceptors.properties b/bundleconfig-local/etc/appprops/PreProcessorInterceptors.properties
new file mode 100644 (file)
index 0000000..1383071
--- /dev/null
@@ -0,0 +1,4 @@
+#Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
+#This properties file is for defining any PreProcessorInterceptors that have been created for your AJSC service. 
+
+/**=com.att.ajsc.csi.restmethodmap.RestMethodMapInterceptor
diff --git a/bundleconfig-local/etc/appprops/app-intercepts.properties b/bundleconfig-local/etc/appprops/app-intercepts.properties
new file mode 100644 (file)
index 0000000..969ff61
--- /dev/null
@@ -0,0 +1,8 @@
+#Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
+
+#This is where all your application intercept strategies must be configured. AJSC reads this property file and adds
+#the list of intercepts specified here to the camel context. This can be useful for accessing every exchange object transferred from/to
+#each endpoint in the request/response flow and can allow for more precise debugging and/or processing of the exchange. 
+
+#e.g. 
+#intercepts=org.openecomp.modelloader.JaxrsEchoService,packagename.class1name,packagename.class2name
diff --git a/bundleconfig-local/etc/appprops/methodMapper.properties b/bundleconfig-local/etc/appprops/methodMapper.properties
new file mode 100644 (file)
index 0000000..f89b7db
--- /dev/null
@@ -0,0 +1,10 @@
+  
+{
+    "helloWorld": [
+        {
+            "method": "get",
+            "url": "/rest/model-loader/v1/helloWorld",
+            "logicalName": "GetMethod(Logical)"
+        }
+    ]
+}
diff --git a/bundleconfig-local/etc/sysprops/sys-props.properties b/bundleconfig-local/etc/sysprops/sys-props.properties
new file mode 100644 (file)
index 0000000..39f4175
--- /dev/null
@@ -0,0 +1,115 @@
+#Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
+#This file is used for defining AJSC system properties for different configuration schemes and is necessary for the AJSC to run properly.
+#The sys-props.properties file is used for running locally. The template.sys-props.properties file will be used when deployed
+#to a SOA/CSI Cloud node. 
+
+#AJSC System Properties. The following properties are required for ALL AJSC services. If you are adding System Properties for your
+#particular service, please add them AFTER all AJSC related System Properties. 
+
+#For Cadi Authorization, use value="authentication-scheme-1
+CadiAuthN=authentication-scheme-1
+
+#For Basic Authorization, use value="authentication-scheme-1
+authN=authentication-scheme-2
+
+#Persistence used for AJSC meta-data storage. For most environments, "file" should be used.
+ajscPersistence=file
+
+#For Direct Invocation to be enabled (values=true/false)
+directInvocationEnable=false
+
+# If using hawtio for local development, these properties will allow for faster server startup and usage for local development
+
+hawtio.authenticationEnabled=false
+hawtio.config.pullOnStartup=false
+
+#Removes the extraneous restlet console output
+org.restlet.engine.loggerFacadeClass=org.restlet.ext.slf4j.Slf4jLoggerFacade
+
+#server.host property to be enabled for local DME2 related testing
+#server.host=<Your network IP address> 
+
+#Enable/disable SSL (values=true/false). This property also determines which protocol to use (https if true, http otherwise), to register services into GRM through DME2.
+enableSSL=false
+
+
+#Enable/disable EJB Container
+ENABLE_EJB=false
+
+#Enable/disable OSGI
+isOSGIEnable=false
+
+#Generate/Skip api docs
+isApiDoc=false
+
+#CSI related variables for CSM framework
+csm.hostname=servername
+
+
+#SOA_CLOUD_ENV is used to register your service with dme2 and can be turned off for local development (values=true/false).
+SOA_CLOUD_ENV=false
+
+#CONTINUE_ON_LISTENER_EXCEPTION will exit the application if there is a DME2 exception at the time of registration.
+CONTINUE_ON_LISTENER_EXCEPTION=false
+
+#Jetty Container ThreadCount Configuration Variables
+AJSC_JETTY_ThreadCount_MIN=1
+AJSC_JETTY_ThreadCount_MAX=200
+AJSC_JETTY_IDLETIME_MAX=3000
+
+#Camel Context level default threadPool Profile configuration
+CAMEL_POOL_SIZE=10
+CAMEL_MAX_POOL_SIZE=20
+CAMEL_KEEP_ALIVE_TIME=60
+CAMEL_MAX_QUEUE_SIZE=1000
+
+#GRM/DME2 System Properties
+AFT_DME2_CONN_IDLE_TIMEOUTMS=5000
+AJSC_ENV=SOACLOUD
+
+SOACLOUD_NAMESPACE=com.att.ajsc
+SOACLOUD_ENV_CONTEXT=DEV
+SOACLOUD_PROTOCOL=http
+SOACLOUD_ROUTE_OFFER=DEFAULT
+
+AFT_LATITUDE=23.4
+AFT_LONGITUDE=33.6
+AFT_ENVIRONMENT=AFTUAT
+
+#Restlet Component Default Properties
+RESTLET_COMPONENT_CONTROLLER_DAEMON=true
+RESTLET_COMPONENT_CONTROLLER_SLEEP_TIME_MS=100
+RESTLET_COMPONENT_INBOUND_BUFFER_SIZE=8192
+RESTLET_COMPONENT_MIN_THREADS=1
+RESTLET_COMPONENT_MAX_THREADS=10
+RESTLET_COMPONENT_LOW_THREADS=8
+RESTLET_COMPONENT_MAX_QUEUED=0
+RESTLET_COMPONENT_MAX_CONNECTIONS_PER_HOST=-1
+RESTLET_COMPONENT_MAX_TOTAL_CONNECTIONS=-1
+RESTLET_COMPONENT_OUTBOUND_BUFFER_SIZE=8192
+RESTLET_COMPONENT_PERSISTING_CONNECTIONS=true
+RESTLET_COMPONENT_PIPELINING_CONNECTIONS=false
+RESTLET_COMPONENT_THREAD_MAX_IDLE_TIME_MS=60000
+RESTLET_COMPONENT_USE_FORWARDED_HEADER=false
+RESTLET_COMPONENT_REUSE_ADDRESS=true
+
+#Externalized jar and properties file location. In CSI environments, there are a few libs that have been externalized to aid
+#in CSTEM maintenance of the versions of these libs. The most important to the AJSC is the DME2 lib. Not only is this lib necessary
+#for proper registration of your AJSC service on a node, but it is also necessary for running locally as well. Another framework
+#used in CSI envs is the CSM framework. These 2 framework libs are shown as "provided" dependencies within the pom.xml. These
+#dependencies will be copied into the target/commonLibs folder with the normal "mvn clean package" goal of the AJSC. They will
+#then be added to the classpath via AJSC_EXTERNAL_LIB_FOLDERS system property. Any files (mainly property files) that need
+#to be on the classpath should be added to the AJSC_EXTERNAL_PROPERTIES_FOLDERS system property. The default scenario when 
+#testing your AJSC service locally will utilize the target/commonLibs directory for DME2 and CSM related artifacts and 2 
+#default csm properties files will be used for local testing with anything CSM knorelated.
+#NOTE: we are using maven-replacer-plugin to replace "(doubleUnderscore)basedir(doubleUnderscore)" with ${basedir} within the 
+#target directory for running locally. Multiple folder locations can be separated by the pipe ("|") character.
+#Please, NOTE: for running locally, we are setting this system property in the antBuild/build.xml "runLocal" target and in the 
+#"runAjsc" profile within the pom.xml. This is to most effectively use maven variables (${basedir}, most specifically. Therefore,
+#when running locally, the following 2 properties should be set within the profile(s) themselves. 
+#Example: target/commonLibs|target/otherLibs
+#AJSC_EXTERNAL_LIB_FOLDERS=__basedir__/target/commonLibs
+#AJSC_EXTERNAL_PROPERTIES_FOLDERS=__basedir__/ajsc-shared-config/etc
+#End of AJSC System Properties
+
+#Service System Properties. Please, place any Service related System Properties below.
diff --git a/pom.xml b/pom.xml
index 47ed7c7..0c9da6e 100644 (file)
--- a/pom.xml
+++ b/pom.xml
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
+       
+       <parent>
+               <artifactId>ajsc-archetype-parent</artifactId>
+               <groupId>com.att.ajsc</groupId>
+               <version>2.0.0</version>
+       </parent>
+       
        <groupId>org.openecomp.aai.model-loader</groupId>
        <artifactId>model-loader</artifactId>
        <version>1.1.0-SNAPSHOT</version>
-       <packaging>war</packaging>
        
        <properties>
                <docker.location>${basedir}/target</docker.location>
+               <module.ajsc.namespace.name>model-loader</module.ajsc.namespace.name>
+               <module.ajsc.namespace.version>v1</module.ajsc.namespace.version>
+               <ajscRuntimeVersion>2.0.0</ajscRuntimeVersion>
+               <absoluteDistFilesRoot>/appl/${project.artifactId}</absoluteDistFilesRoot>
+               <distFilesRoot>/appl/${project.artifactId}/${project.version}</distFilesRoot>
+               <runAjscHome>${basedir}/target/swm/package/nix/dist_files${distFilesRoot}</runAjscHome>
+
+               <!-- Port Selection. A value of 0 will allow for dynamic port selection. 
+                       For local testing, you may choose to hardcode this value to something like 
+                       8080 -->
+               <serverPort>0</serverPort>
+               <sslport>0</sslport>
+
+
+               <!-- For SOA Cloud Installation -->
+               <installOwnerUser>aaiadmin</installOwnerUser>
+               <installOwnerGroup>aaiadmin</installOwnerGroup>
+               <ownerManagementGroup>org.openecomp.aai.dev</ownerManagementGroup>
+
+               <testRouteOffer>workstation</testRouteOffer>
+               <testEnv>DEV</testEnv>
+
                <!-- Ecomp Version -->
                <ecomp.version>1.0.0</ecomp.version>
+
                <dependency.scope>provided</dependency.scope>
                <checkstyle.config.location>google_checks.xml</checkstyle.config.location>
                <maven.compiler.source>1.8</maven.compiler.source>
-       <maven.compiler.target>1.8</maven.compiler.target>
+                <maven.compiler.target>1.8</maven.compiler.target>
               <sonar.language>java</sonar.language>
               <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
               <sonar.surefire.reportsPath>${project.build.directory}/surefire-reports</sonar.surefire.reportsPath>
               <sonar.jacoco.reportPath>${project.build.directory}/coverage-reports/jacoco.exec</sonar.jacoco.reportPath>
               <sonar.jacoco.reportMissing.force.zero>false</sonar.jacoco.reportMissing.force.zero>
               <sonar.projectVersion>${project.version}</sonar.projectVersion>
-               <nexusproxy>https://nexus.onap.org</nexusproxy>
+               <nexusproxy>https://nexus.onap.org</nexusproxy>
        </properties>
 
        <distributionManagement>
                        <artifactId>common-logging</artifactId>
                        <version>${ecomp.version}</version>
                </dependency>
+               <dependency>
+                       <groupId>ch.qos.logback</groupId>
+                       <artifactId>logback-core</artifactId>
+                       <version>1.1.7</version>
+               </dependency>
+
                <dependency>
                        <groupId>org.openecomp.sdc</groupId>
                    <artifactId>sdc-distribution-client</artifactId>
 
           </repositories>
        
+       <profiles>
+               <profile>
+                       <id>runAjsc</id>
+                       <build>
+                               <defaultGoal>initialize</defaultGoal>
+                               <plugins>
+                                       <plugin>
+                                               <groupId>org.codehaus.mojo</groupId>
+                                               <artifactId>exec-maven-plugin</artifactId>
+                                               <version>1.3.2</version>
+                                               <executions>
+                                                       <execution>
+                                                               <phase>initialize</phase>
+                                                               <goals>
+                                                                       <goal>java</goal>
+                                                               </goals>
+                                                               <configuration>
+                                                                       <includeProjectDependencies>false</includeProjectDependencies>
+                                                                       <includePluginDependencies>true</includePluginDependencies>
+                                                                       <executable>java</executable>
+                                                                       <mainClass>com.att.ajsc.runner.Runner</mainClass>
+                                                                       <executableDependency>
+                                                                               <groupId>com.att.ajsc</groupId>
+                                                                               <artifactId>ajsc-runner</artifactId>
+                                                                       </executableDependency>
+                                                                       <additionalClasspathElements>
+                                                                               <additionalClasspathElement>${basedir}/ajsc-shared-config/etc</additionalClasspathElement>
+                                                                       </additionalClasspathElements>
+
+                                                                       <environmentVariables>
+                                                                               <AJSC_HOME>${runAjscHome}</AJSC_HOME>
+                                                                       </environmentVariables>
+
+                                                                       <!-- Main AJSC System Properties below (necessary for proper startup) -->
+                                                                       <systemProperties>
+                                                                               <systemProperty>
+                                                                                       <key>AJSC_HOME</key>
+                                                                                       <value>${runAjscHome}</value>
+                                                                               </systemProperty>
+                                                                               <systemProperty>
+                                                                                       <key>CONFIG_HOME</key>
+                                                                                       <value>${basedir}/appconfig-local/</value>
+                                                                               </systemProperty>
+                                                                               <systemProperty>
+                                                                                       <key>AJSC_CONF_HOME</key>
+                                                                                       <value>${basedir}/bundleconfig-local</value>
+                                                                               </systemProperty>
+                                                                               <systemProperty>
+                                                                                       <key>logback.configurationFile</key>
+                                                                                       <value>${basedir}/ajsc-shared-config/etc/logback.xml</value>
+                                                                               </systemProperty>
+                                                                               <systemProperty>
+                                                                                       <key>AJSC_SHARED_CONFIG</key>
+                                                                                       <value>${basedir}/ajsc-shared-config</value>
+                                                                               </systemProperty>
+
+                                                                               <sysproperty>
+                                                                                       <key>AJSC_EXTERNAL_LIB_FOLDERS</key>
+                                                                                       <value>${basedir}/target/commonLibs</value>
+                                                                               </sysproperty>
+                                                                               <sysproperty>
+                                                                                       <key>AJSC_EXTERNAL_PROPERTIES_FOLDERS</key>
+                                                                                       <value>${basedir}/ajsc-shared-config/etc</value>
+                                                                               </sysproperty>
+                                                                               <systemProperty>
+                                                                                       <key>AJSC_SERVICE_NAMESPACE</key>
+                                                                                       <value>${module.ajsc.namespace.name}</value>
+                                                                               </systemProperty>
+                                                                               <systemProperty>
+                                                                                       <key>AJSC_SERVICE_VERSION</key>
+                                                                                       <value>${module.ajsc.namespace.version}</value>
+                                                                               </systemProperty>
+                                                                               <systemProperty>
+                                                                                       <key>SOACLOUD_SERVICE_VERSION</key>
+                                                                                       <value>${project.version}</value>
+                                                                               </systemProperty>
+                                                                               <systemProperty>
+                                                                                       <key>server.port</key>
+                                                                                       <value>${serverPort}</value>
+                                                                               </systemProperty>
+                                                                       </systemProperties>
+
+                                                                       <!-- Command Line Arguments to add to the java command. Here, you 
+                                                                               can specify the port as well as the Context you want your service to run 
+                                                                               in. Use context=/ to run in an unnamed Context (Root Context). The default 
+                                                                               configuration of the AJSC is to run under the / Context. Setting the port 
+                                                                               here can aid during the development phase of your service. However, you can 
+                                                                               leave this argument out entirely, and the AJSC will default to using an Ephemeral 
+                                                                               port. -->
+                                                                       <arguments>
+                                                                               <argument>context=//</argument>
+                                                                               <argument>port=${serverPort}</argument>
+                                                                               <argument>sslport=${sslport}</argument>
+                                                                       </arguments>
+                                                               </configuration>
+                                                       </execution>
+                                               </executions>
+                                               <configuration>
+                                                       <executable>java</executable>
+                                               </configuration>
+                                               <dependencies>
+                                                       <dependency>
+                                                               <groupId>com.att.ajsc</groupId>
+                                                               <artifactId>ajsc-runner</artifactId>
+                                                               <version>${ajscRuntimeVersion}</version>
+                                                       </dependency>
+                                               </dependencies>
+                                       </plugin>
+                               </plugins>
+                       </build>
+               </profile>
+       </profiles>
        
        <build>
                <plugins>
                                                                                <include>**/*</include>
                                                                        </includes>
                                                                </resource>
+                                                               <resource>
+                                                                       <directory>${basedir}/src/main/bin/</directory>
+                                                               </resource>
                                                        </resources>
                                                </configuration>
                                        </execution>
                         
             <!-- license plugin -->
             <plugin>
-              <groupId>org.codehaus.mojo</groupId>
-              <artifactId>license-maven-plugin</artifactId>
-              <version>1.10</version>
-              <configuration>
-                <addJavaLicenseAfterPackage>false</addJavaLicenseAfterPackage>
-                <excludes>
-                  <exclude>**.json</exclude>
-                  <exclude>**.properties</exclude>
-                </excludes>
-                <processStartTag>============LICENSE_START=======================================================</processStartTag>
-                <processEndTag>============LICENSE_END=========================================================</processEndTag>
-                <sectionDelimiter>================================================================================</sectionDelimiter>
-                <licenseName>apache_v2</licenseName>
-                <inceptionYear>2017</inceptionYear>
-                <organizationName>AT&amp;T Intellectual Property. All rights reserved.</organizationName>
-                <projectName>MODEL LOADER SERVICE</projectName>
-                <canUpdateCopyright>true</canUpdateCopyright>
-                <canUpdateDescription>true</canUpdateDescription>
-                <canUpdateLicense>true</canUpdateLicense>
-                <emptyLineAfterHeader>true</emptyLineAfterHeader>
-                <roots>
-                  <root>.</root>
-                </roots>
-                <excludes>
-                  <exclude>**/*.json</exclude>
-                </excludes>
-                <extraExtensions>
-                  <route>xml</route>
-                  <props>properties</props>
-                  <xsd>xml</xsd>
-                  <txt>java</txt>
-                </extraExtensions>
-              </configuration>
-              <executions>
-                <execution>
-                  <id>first</id>
-                  <goals>
-                    <goal>update-file-header</goal>
-                  </goals>
-                  <phase>process-sources</phase>
-                </execution>
-              </executions>
-            </plugin>
+                               <groupId>com.mycila</groupId>
+                               <artifactId>license-maven-plugin</artifactId>
+                               <version>3.0</version>
+                               <configuration>
+                                       <header>License.txt</header>
+                                       <includes>
+                                               <include>src/main/java/**</include>
+                                               <include>src/test/java/**</include>
+                                       </includes>
+                               </configuration>
+                               <executions>
+                                       <execution>
+                                               <goals>
+                                                       <goal>format</goal>
+                                               </goals>
+                                               <phase>process-sources</phase>
+                                       </execution>
+                               </executions>
+                       </plugin>
+
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>                    
diff --git a/src/main/ajsc/model-loader_v1/model-loader/v1/conf/modelLoaderBeans.groovy b/src/main/ajsc/model-loader_v1/model-loader/v1/conf/modelLoaderBeans.groovy
new file mode 100644 (file)
index 0000000..2162213
--- /dev/null
@@ -0,0 +1,31 @@
+/*-\r
+ * ============LICENSE_START=======================================================
+ * MODEL LOADER SERVICE
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.
+ * ============LICENSE_END=========================================================\r
+ */\r
+\r
+beans{\r
+       xmlns cxf: "http://camel.apache.org/schema/cxf"\r
+       xmlns jaxrs: "http://cxf.apache.org/jaxrs"\r
+       xmlns util: "http://www.springframework.org/schema/util"\r
+       \r
+       modelLoader(org.openecomp.modelloader.service.ModelLoaderService)\r
+       \r
+       util.list(id: 'modelLoaderServices') {\r
+               ref(bean:'modelLoader')\r
+       }\r
+}\r
diff --git a/src/main/ajsc/model-loader_v1/model-loader/v1/docs/README.txt b/src/main/ajsc/model-loader_v1/model-loader/v1/docs/README.txt
new file mode 100644 (file)
index 0000000..508361d
--- /dev/null
@@ -0,0 +1,21 @@
+/*-\r
+ * ============LICENSE_START=======================================================
+ * MODEL LOADER SERVICE
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.
+ * ============LICENSE_END=========================================================\r
+ */\r
+\r
+Place any docs here that you want to access within the ajsc upon deployment of your service.\r
diff --git a/src/main/ajsc/model-loader_v1/model-loader/v1/lib/README.txt b/src/main/ajsc/model-loader_v1/model-loader/v1/lib/README.txt
new file mode 100644 (file)
index 0000000..f80be9b
--- /dev/null
@@ -0,0 +1,21 @@
+/*-\r
+ * ============LICENSE_START=======================================================
+ * MODEL LOADER SERVICE
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.
+ * ============LICENSE_END=========================================================\r
+ */\r
+\r
+3rd party JAR's needed by your jars (if any) for a ajsc deployment package go here...\r
@@ -1,27 +1,21 @@
-###
+###\r
 # ============LICENSE_START=======================================================
 # MODEL LOADER SERVICE
 # ================================================================================
 # 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
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+#      http://www.apache.org/licenses/LICENSE-2.0\r
+# \r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
 # limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-BIN_DIR=`dirname $0`
-
-echo "Checking environment for configuration options"
-$BIN_DIR/update_config.sh
-
-echo "Starting up model loader..."
-$BIN_DIR/jetty.sh run > /dev/null 2>&1
+# ============LICENSE_END=========================================================\r
+###\r
+\r
+EXAMPLE.PROPERTY=EXAMLE_VALUE\r
@@ -1,27 +1,24 @@
-<!--
+<!--\r
   ============LICENSE_START=======================================================
   MODEL LOADER SERVICE
   ================================================================================
   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
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
   limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<model xmlns="http://org.openecomp.aai.inventory/v8">
-       <model-id>model-id</model-id>
-       <model-type>widget</model-type>
-       <model-name>generic-vnf</model-name>
-       <model-version>v1.0</model-version>
-       <model-name-version-id>model-vid</model-name-version-id>
-</model>
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<route xmlns="http://camel.apache.org/schema/spring" trace="true">\r
+  <from uri="att-dme2-servlet:///__module_ajsc_namespace_name__/__module_ajsc_namespace_version__/model-service?matchOnUriPrefix=true" />\r
+  <to uri="cxfbean:modelLoaderServices" />\r
+</route>\r
diff --git a/src/main/assemble/ajsc_module_assembly.xml b/src/main/assemble/ajsc_module_assembly.xml
new file mode 100644 (file)
index 0000000..520870f
--- /dev/null
@@ -0,0 +1,86 @@
+<!--\r
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
+  limitations under the License.
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<assembly\r
+       xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"\r
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+       xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">\r
+       <id>${version}</id>\r
+       <includeBaseDirectory>false</includeBaseDirectory>\r
+       <formats>\r
+               <format>zip</format>\r
+       </formats>\r
+       <fileSets>\r
+               <fileSet>\r
+                       <directory>${project.basedir}/target/versioned-ajsc/routes/</directory>\r
+                       <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/routes/</outputDirectory>\r
+                       <includes>\r
+                               <include>*.route</include>\r
+                       </includes>\r
+\r
+               </fileSet>\r
+\r
+               <fileSet>\r
+                       <directory>${project.basedir}/target/versioned-ajsc/docs/</directory>\r
+                       <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/docs/</outputDirectory>\r
+                       <includes>\r
+                               <include>*.*</include>\r
+                               <!-- <include>*.vm</include>  -->\r
+                       </includes>\r
+\r
+               </fileSet>\r
+\r
+               <fileSet>\r
+                       <directory>${project.basedir}/target/versioned-ajsc/lib/</directory>\r
+                       <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/lib/</outputDirectory>\r
+                       <includes>\r
+                               <include>*.jar</include>\r
+                       </includes>\r
+\r
+               </fileSet>\r
+               <fileSet>\r
+                       <directory>${project.basedir}/target/versioned-ajsc/extJars/</directory>\r
+                       <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/extJars/</outputDirectory>\r
+                       <includes>\r
+                               <include>*.jar</include>\r
+                       </includes>\r
+               </fileSet>\r
+               \r
+               <!-- also try to grab outputs from the "jar" plugin's package phase -->\r
+               <fileSet>\r
+                       <directory>${project.basedir}/target/</directory>\r
+                       <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/lib/</outputDirectory>\r
+                       <includes>\r
+                               <include>*.jar</include>\r
+                       </includes>\r
+               </fileSet>\r
+\r
+               <fileSet>\r
+                       <directory>${project.basedir}/target/versioned-ajsc/conf/</directory>\r
+                       <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/conf/</outputDirectory>\r
+                       <includes>\r
+                               <include>*.*</include>\r
+                       </includes>\r
+\r
+               </fileSet>\r
+       </fileSets>\r
+\r
+</assembly>\r
+\r
similarity index 56%
rename from src/main/webapp/WEB-INF/rest-servlet.xml
rename to src/main/assemble/ajsc_props_assembly.xml
index 6a23c2b..e26497b 100644 (file)
@@ -1,32 +1,43 @@
-<!--
+<!--\r
   ============LICENSE_START=======================================================
   MODEL LOADER SERVICE
   ================================================================================
   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
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
   limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<beans xmlns="http://www.springframework.org/schema/beans"
-    xmlns:context="http://www.springframework.org/schema/context"
-    xmlns:mvc="http://www.springframework.org/schema/mvc"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
-    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
-    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
-
-       <bean id="modelLoader" class="org.openecomp.modelloader.service.ModelLoaderService" init-method="start"/>
-               
-
-</beans>
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<assembly\r
+       xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"\r
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+       xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">\r
+       <id>${version}_properties</id>\r
+       <includeBaseDirectory>false</includeBaseDirectory>\r
+       <formats>\r
+               <format>zip</format>\r
+       </formats>\r
+       <fileSets>\r
+               <fileSet>\r
+                       <directory>${project.basedir}/target/versioned-ajsc/props</directory>\r
+                       <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/props/</outputDirectory>\r
+                       <includes>\r
+                               <include>*.props</include>\r
+                       </includes>\r
+\r
+               </fileSet>\r
+\r
+       </fileSets>\r
+\r
+</assembly>\r
+\r
diff --git a/src/main/assemble/ajsc_runtime_assembly.xml b/src/main/assemble/ajsc_runtime_assembly.xml
new file mode 100644 (file)
index 0000000..c5c515a
--- /dev/null
@@ -0,0 +1,64 @@
+<!--\r
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
+  limitations under the License.
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<assembly\r
+       xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"\r
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+       xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">\r
+       <id>runtimeEnvironment</id>\r
+       <includeBaseDirectory>false</includeBaseDirectory>\r
+       <formats>\r
+               <format>zip</format>\r
+       </formats>\r
+       <fileSets>\r
+               <fileSet>\r
+                       <directory>${project.basedir}/target/versioned-runtime/context/</directory>\r
+                       <outputDirectory>runtime/context/</outputDirectory>\r
+                       <includes>\r
+                               <include>*.context</include>\r
+                       </includes>\r
+               </fileSet>\r
+               <fileSet>\r
+                       <directory>${project.basedir}/target/versioned-runtime/serviceProperties/</directory>\r
+                       <outputDirectory>runtime/serviceProperties/</outputDirectory>\r
+                       <includes>\r
+                               <include>*.props</include>\r
+                       </includes>\r
+               </fileSet><fileSet>\r
+                       <directory>${project.basedir}/target/versioned-runtime/shiroRole</directory>\r
+                       <outputDirectory>runtime/shiroRole/</outputDirectory>\r
+                       <includes>\r
+                               <include>*.json</include>\r
+                       </includes>\r
+               </fileSet><fileSet>\r
+                       <directory>${project.basedir}/target/versioned-runtime/shiroUser</directory>\r
+                       <outputDirectory>runtime/shiroUser/</outputDirectory>\r
+                       <includes>\r
+                               <include>*.json</include>\r
+                       </includes>\r
+               </fileSet><fileSet>\r
+                       <directory>${project.basedir}/target/versioned-runtime/shiroUserRole</directory>\r
+                       <outputDirectory>runtime/shiroUserRole</outputDirectory>\r
+                       <includes>\r
+                               <include>*.json</include>\r
+                       </includes>\r
+               </fileSet>\r
+       </fileSets>\r
+</assembly>\r
similarity index 51%
rename from src/main/resources/model-loader.properties
rename to src/main/bin/start.sh
index 7b8f63d..07f707e 100644 (file)
@@ -1,43 +1,45 @@
-###
+###\r
 # ============LICENSE_START=======================================================
 # MODEL LOADER SERVICE
 # ================================================================================
 # 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
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+#      http://www.apache.org/licenses/LICENSE-2.0\r
+# \r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
 # limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-# Model Loader Distribution Client Configuration
-ml.distribution.ACTIVE_SERVER_TLS_AUTH=false
-ml.distribution.ASDC_ADDRESS=
-ml.distribution.CONSUMER_GROUP=aai-ml-group
-ml.distribution.CONSUMER_ID=aai-ml
-ml.distribution.ENVIRONMENT_NAME=
-ml.distribution.KEYSTORE_PASSWORD=
-ml.distribution.KEYSTORE_FILE=asdc-client.jks
-ml.distribution.PASSWORD=
-ml.distribution.POLLING_INTERVAL=30
-ml.distribution.POLLING_TIMEOUT=20
-ml.distribution.USER=ci
-ml.distribution.ARTIFACT_TYPES=MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG
-
-# Model Loader AAI REST Client Configuration
-ml.aai.BASE_URL=
-ml.aai.MODEL_URL=/aai/v8/service-design-and-creation/models/model/
-ml.aai.NAMED_QUERY_URL=/aai/v8/service-design-and-creation/named-queries/named-query/
-ml.aai.VNF_IMAGE_URL=/aai/v8/service-design-and-creation/vnf-images
-ml.aai.KEYSTORE_FILE=aai-os-cert.p12
-ml.aai.KEYSTORE_PASSWORD=
-ml.aai.AUTH_USER=ModelLoader
-ml.aai.AUTH_PASSWORD=
+# ============LICENSE_END=========================================================\r
+###\r
+\r
+#!/bin/sh\r
+\r
+BASEDIR="/opt/app/model-loader/"\r
+AJSC_HOME="$BASEDIR"\r
+\r
+if [ -z "$CONFIG_HOME" ]; then\r
+       echo "CONFIG_HOME must be set in order to start up process"\r
+       exit 1\r
+fi\r
+\r
+CLASSPATH="$AJSC_HOME/lib/*"\r
+CLASSPATH="$CLASSPATH:$AJSC_HOME/extJars/"\r
+CLASSPATH="$CLASSPATH:$AJSC_HOME/etc/"\r
+PROPS="-DAJSC_HOME=$AJSC_HOME"\r
+PROPS="$PROPS -DAJSC_CONF_HOME=$BASEDIR/bundleconfig/"\r
+PROPS="$PROPS -Dlogback.configurationFile=$BASEDIR/bundleconfig/etc/logback.xml"\r
+PROPS="$PROPS -DAJSC_SHARED_CONFIG=$AJSC_CONF_HOME"\r
+PROPS="$PROPS -DAJSC_SERVICE_NAMESPACE=model-loader"\r
+PROPS="$PROPS -DAJSC_SERVICE_VERSION=v1"\r
+PROPS="$PROPS -Dserver.port=8080"\r
+PROPS="$PROPS -DCONFIG_HOME=$CONFIG_HOME"\r
+\r
+echo $CLASSPATH\r
+\r
+java -Xms1024m -Xmx4096m -XX:PermSize=2024m $PROPS -classpath $CLASSPATH com.att.ajsc.runner.Runner context=// sslport=8081\r
diff --git a/src/main/config/ajsc-chef.jks b/src/main/config/ajsc-chef.jks
new file mode 100644 (file)
index 0000000..aeca770
Binary files /dev/null and b/src/main/config/ajsc-chef.jks differ
diff --git a/src/main/config/ajsc-jetty.xml b/src/main/config/ajsc-jetty.xml
new file mode 100644 (file)
index 0000000..43741bd
--- /dev/null
@@ -0,0 +1,90 @@
+<?xml version="1.0"  encoding="UTF-8"?>\r
+<!--\r
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
+  limitations under the License.
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">\r
+<Configure id="ajsc-server" class="org.eclipse.jetty.server.Server">\r
+       <!-- DO NOT REMOVE!!!! This is setting up the AJSC Context -->\r
+       <New id="ajscContext" class="org.eclipse.jetty.webapp.WebAppContext">\r
+               <Set name="contextPath"><SystemProperty name="AJSC_CONTEXT_PATH" /></Set>\r
+               <Set name="extractWAR">true</Set>\r
+               <Set name="tempDirectory"><SystemProperty name="AJSC_TEMP_DIR" /></Set>\r
+               <Set name="war"><SystemProperty name="AJSC_WAR_PATH" /></Set>\r
+               <Set name="descriptor"><SystemProperty name="AJSC_HOME" />/etc/runner-web.xml</Set>\r
+               <Set name="overrideDescriptor"><SystemProperty name="AJSC_HOME" />/etc/ajsc-override-web.xml</Set>\r
+               <Set name="throwUnavailableOnStartupException">true</Set>\r
+               <Set name="servletHandler">\r
+                       <New class="org.eclipse.jetty.servlet.ServletHandler">\r
+                               <Set name="startWithUnavailable">false</Set>\r
+                       </New>\r
+               </Set>\r
+               <Set name="extraClasspath"><SystemProperty name="AJSC_HOME" />/extJars/httpclient-4.5.jar,<SystemProperty name="AJSC_HOME" />/extJars/httpcore-4.4.1.jar,<SystemProperty name="AJSC_HOME" />/extJars/json-20131018.jar</Set>\r
+       </New>\r
+       \r
+       <Set name="handler">\r
+               <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection">\r
+                       <Set name="Handlers">\r
+                               <Array type="org.eclipse.jetty.webapp.WebAppContext">\r
+                                       <Item>\r
+                                               <Ref refid="ajscContext" />\r
+                                       </Item>\r
+                               </Array>\r
+                       </Set>\r
+               </New>\r
+       </Set>\r
+       \r
+       <Call name="addBean">\r
+               <Arg>\r
+                       <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">\r
+                               <Set name="contexts">\r
+                                       <Ref refid="Contexts" />\r
+                               </Set>\r
+                               <Call id="extAppHotDeployProvider" name="addAppProvider">\r
+                                       <Arg>\r
+                                               <New class="org.eclipse.jetty.deploy.providers.WebAppProvider">\r
+                                                       <Set name="monitoredDirName"><SystemProperty name="AJSC_HOME" />/extApps</Set>\r
+                                                       <Set name="scanInterval">10</Set>\r
+                                                       <Set name="extractWars">true</Set>\r
+                                               </New>\r
+                                       </Arg>\r
+                               </Call>\r
+                       </New>\r
+               </Arg>\r
+       </Call>\r
+       \r
+       <Call name="addConnector">\r
+               <Arg>\r
+                       <New class="org.eclipse.jetty.server.ServerConnector">\r
+                               <Arg name="server">\r
+                                       <Ref refid="ajsc-server" />\r
+                               </Arg>\r
+                               <Set name="port"><SystemProperty name="AJSC_HTTP_PORT" default="80" /></Set>\r
+                       </New>\r
+               </Arg>\r
+       </Call>\r
+       \r
+       <Get name="ThreadPool">\r
+               <Set name="minThreads"><SystemProperty name="AJSC_JETTY_ThreadCount_MIN" /></Set>\r
+               <Set name="maxThreads"><SystemProperty name="AJSC_JETTY_ThreadCount_MAX" /></Set>\r
+               <Set name="idleTimeout"><SystemProperty name="AJSC_JETTY_IDLETIME_MAX" /></Set>\r
+               <Set name="detailedDump">false</Set>\r
+       </Get>\r
+       \r
+</Configure>\r
diff --git a/src/main/config/ajsc-override-web.xml b/src/main/config/ajsc-override-web.xml
new file mode 100644 (file)
index 0000000..b0d44f3
--- /dev/null
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!--\r
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
+  limitations under the License.
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<!-- \r
+ Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.\r
+-->\r
+<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"\r
+       metadata-complete="false" version="3.0">\r
+\r
+       <filter-mapping>\r
+               <filter-name>InterceptorFilter</filter-name>\r
+               <url-pattern>/services/*</url-pattern>\r
+       </filter-mapping> \r
+       <filter-mapping>\r
+               <filter-name>InterceptorFilter</filter-name>\r
+               <url-pattern>/rest/*</url-pattern>\r
+       </filter-mapping>  \r
+\r
+       <filter-mapping>\r
+               <filter-name>springSecurityFilterChain</filter-name>\r
+               <url-pattern>/*</url-pattern>\r
+       </filter-mapping>\r
+               \r
+       <servlet-mapping>\r
+               <servlet-name>ManagementServlet</servlet-name>\r
+               <url-pattern>/mgmt</url-pattern>\r
+       </servlet-mapping>\r
+        \r
+        <servlet-mapping>\r
+                       <servlet-name>RestletServlet</servlet-name>\r
+                       <url-pattern>/rest/*</url-pattern>\r
+       </servlet-mapping>\r
+\r
+       <servlet-mapping>\r
+               <servlet-name>CamelServlet</servlet-name>\r
+               <url-pattern>/services/*</url-pattern>\r
+       </servlet-mapping>\r
+\r
+       <servlet-mapping>\r
+               <servlet-name>jsp</servlet-name>\r
+               <url-pattern>*.jsp</url-pattern>\r
+               <url-pattern>*.jspf</url-pattern>\r
+               <url-pattern>*.jspx</url-pattern>\r
+               <url-pattern>*.xsp</url-pattern>\r
+               <url-pattern>*.JSP</url-pattern>\r
+               <url-pattern>*.JSPF</url-pattern>\r
+               <url-pattern>*.JSPX</url-pattern>\r
+               <url-pattern>*.XSP</url-pattern>\r
+       </servlet-mapping>\r
+       <servlet-mapping>\r
+               <servlet-name>default</servlet-name>\r
+               <url-pattern>/*</url-pattern>\r
+       </servlet-mapping>\r
+</web-app>\r
diff --git a/src/main/config/ajscJetty.jks b/src/main/config/ajscJetty.jks
new file mode 100644 (file)
index 0000000..48cdbff
Binary files /dev/null and b/src/main/config/ajscJetty.jks differ
diff --git a/src/main/config/cadi.properties b/src/main/config/cadi.properties
new file mode 100644 (file)
index 0000000..c3b8b14
--- /dev/null
@@ -0,0 +1,56 @@
+###\r
+# ============LICENSE_START=======================================================
+# MODEL LOADER SERVICE
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+#      http://www.apache.org/licenses/LICENSE-2.0\r
+# \r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.
+# ============LICENSE_END=========================================================\r
+###\r
+\r
+#This properties file is used for defining AAF properties related to the CADI framework. This file is used for running AAF framework\r
+\r
+#In order to test functionality of cadi-ajsc-plugin locally cross domain cookie. Cadi "should" find your hostname for you. \r
+#However, we have seen some situations where this fails. A Local testing\r
+#modification can include modifying your hosts file so that you can use "mywebserver.att.com" for your localhost in order\r
+#to test/verify GLO functionality locally. If you are on a Windows machine, you will already have a machine name associated with \r
+#it that will utilize an AT&T domain such as "sbc.com". You may need to add your  domain to this as a comma separated list depending\r
+#upon your particular machine domain. This property is commented out as cadi SHOULD find your machine name. With version 1.2.1 of cadi, \r
+#it appears to resolve Mac machine names as well, now. But, this can be somewhat inconsistent depending on your specific working envrironment.\r
+hostname=mywebserver.att.com\r
+\r
+#Setting csp_domain to PROD will allow for testing using your attuid and password through GLO.\r
+csp_domain=PROD\r
+csp_devl_localhost=true\r
+\r
+basic_realm=csp.att.com\r
+#basic_realm=aaf.att.com\r
+basic_warn=TRUE\r
+\r
+cadi_loglevel=WARN\r
+cadi_keyfile=target/swm/package/nix/dist_files/appl/model-loader/etc/keyfile\r
+\r
+# Configure AAF\r
+#These are dummy values add appropriate values required\r
+aaf_url=url\r
+\r
+#AJSC - MECHID\r
+#These are dummy values add appropriate values required\r
+aaf_id=dummyid@ajsc.att.com\r
+aaf_password=enc:277edqJCjT0RlUI3BtbDQa-3Ha-CQGd\r
+aaf_timeout=5000\r
+aaf_clean_interval=30000\r
+aaf_user_expires=5000\r
+aaf_high_count=1000\r
+\r
+\r
diff --git a/src/main/config/jul-redirect.properties b/src/main/config/jul-redirect.properties
new file mode 100644 (file)
index 0000000..b94397e
--- /dev/null
@@ -0,0 +1,32 @@
+###\r
+# ============LICENSE_START=======================================================
+# MODEL LOADER SERVICE
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+#      http://www.apache.org/licenses/LICENSE-2.0\r
+# \r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
+# limitations under the License.
+# ============LICENSE_END=========================================================\r
+###\r
+\r
+#      Bridge JUL->slf4j Logging Configuration File\r
+#\r
+# This file bridges the JUL logging infrastructure into\r
+# SLF4J so JUL logs go to logback implementation provided\r
+# in this project.  SLF4J also captures log4j and has \r
+# other framework options as well providing a common\r
+# logging infrastructure for capturing all logs from different\r
+# libraries using different frameworks in one place.\r
+\r
+#      Global properties\r
+handlers=org.slf4j.bridge.SLF4JBridgeHandler\r
+.level= ALL\r
diff --git a/src/main/config/keyfile b/src/main/config/keyfile
new file mode 100644 (file)
index 0000000..882e86a
--- /dev/null
@@ -0,0 +1,27 @@
+ZuIwp0TkyVPDeX1Up-8JtkMWvjsCpoiu1_VKeWrtrvxunvAke8_tiFyHPPyb2nkhepFYj6tXzpfS
+rGz5XF_TH9NbsKaP8u0HV5clz2WriYQRvHS85vjY7hXxkpFuLb7zkLAPqTyIDpj7FiW61NzsRUAq
+TM8jH16jr7mBNnb56w24mNGOwznMPcIZKcjgZU1ekaPDFpWyhQElU7Y0q_94P_Gkk45r66Hj22sU
+OiOaaftmudZlswLw8-8Zaakqf2yW9HjMVfuYCwSodBHCW5rdB3Ctb5W36rnD_AQco3Ky2PgPmqvk
+QkJYuUHpbuDqVHqLOajlKSIGMTIqAIBg51fRaaONtD-Q5xzY8E5wO1YWTLKcP5tsNvUpzM8Wu3NS
+ynpGpUcvlTqWWsGzTbzOyamyKkdNdx97sSqjM25Zh1-ps48h6cddGYWpab7SUvqRCS11QBUyLTry
+2iwTEHMhHRIbo7PO99ALQfuq9gI1zKGfurJdvLBeBaFs5SCF0AiCZ3WcDO8Rv3HpxVZ2_ShbDxb0
+eMoO6SotXu51fj8Y3-WqsfZziQyEsHyqpg5uQ6yUtz01h5YHLEoVuotF1U4agmQR6kEkYk-wNOiZ
+v-8gaA9gtbLoAdKhuKFxQgQLNMf6GzVzZNujbmDzLoZAP_mXAv29aBPaf64Ugzv-Oa5GZdBgD-Xd
+_pahML-ionw99r0TnkpShYmDqMKhMdjaP3m87WIAZkIB-L-VTyKcEsJ4340VSzCOsv3waiM0S89u
+4cMcG5y-PLY8IoipIlLUPTWD3SjcQ9DV1Dt3T5KjdWLsj48D3W4K4e9PB8yxs0gtUjgVUR2_xEir
+G5eDO9Ac1eHFWGDFFP0SgG-TbHJUKlvy9mwLzmU0fC3xPjhqmIr-v0HxF7HN-tmb1LHDorno8tSN
+u7kUGcKSchIiFfvkd066crUb2mH7PnXTaWmAjyVj9VsBExFUYEdpHMAV4sAP9-RxZGDRt46UhrDK
+QZvvNhBVyOEjHPHWI4vl1r1v8HNH1_2jZu5DVJWyHWR56aCo1lhFH9_X6UAHUHbnXViDONZOVXlT
+9-WD0tk2zJGuwrhdZDAnPnAmjfwbwbpnr5Hmex1i1JiD7WVyP1kbfoej2TmdiYbxr9oBYaGQ29JI
+aHod7MQCLtvL1z5XgnDPLZ4y3_9SbqHKYbNa8UgZkTLF5EacGThYVFDLA9cbafHDtR1kMGE3vv4D
+EJ-0pAYTOGmKlVI7DwNyKsY9JTyudrxTqhOxi9jgcJNWiUaNe9yhL8Pyc2YBqUTTYhh_a2d1rvkZ
+0Gh1crviVxqBrIkRKaMRXZ4f1vDLz-3NvG_vwPOo8WRFo5nGmSdTw7CjBaigJ_cYCfDhoP11pEnw
+cndsZNcHs-v05LlxeIIMDD_f5Bvz-il_DLA4eK2HqgLdxh8ziSDl2azk14MJY4amzz6reEXUuKLV
+RsZGf_jbDGKhE2HuDQ5ovoLOi4OqE1oRuqh-dGxitrYouP2SN1l_1tCEMRth86FMV-6AQtZsvdUo
+y9MtQ7e35atjA8nHtgADlDTmJBKQiUHUsOZ77p1qp17HAFMovUkc739opfEYnKUn6Itpw5Ipm_Is
+ra6chJUfMpOFof5rb5OjqFAN27c_-mPo1lQU3ndYlKGh_n5V8ufX6v2Yri8WzOPf6hjVYotkmoMP
+NPAICDCB8W5ddBjsopzLVVEtaXDu9Qj6-zf77hT4iQ7rBd2Ner8iLqN3Kis0dvkNM3_uH8onau1G
+Y_YYw7PPSZyd2S_7Dd6G-IG4ayO6e5DD6oUwwekyiQI_3rTXNa_wldGxqW9u818010ekE4Qdlfcj
+beIn7fAeaOjReZ87hRgWyMs-EgTVHw8RL3yI_O6VvRTVRONRF1Y4C_-IYa8z-bfrwXx3BBd9TTgb
+EnS9wVOyC2OgUN6BhPLGLhxzkJ05nEjizXEc9t5EPYoSRwesajGGrrG_0-qWbuU5hKLPLkyeJLHb
+5HXOTVsrUR59Vov2M3_EswkxcImblox3k3VS2yihZMGyfqLzZIUXgd8ufkevKKU6DxwacGTb
\ No newline at end of file
diff --git a/src/main/config/runner-web.xml b/src/main/config/runner-web.xml
new file mode 100644 (file)
index 0000000..99d9191
--- /dev/null
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!--\r
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
+  limitations under the License.
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<!-- \r
+ Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.\r
+-->\r
+<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
+       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"\r
+       metadata-complete="false" version="3.0">\r
+\r
+       <context-param>\r
+               <param-name>contextConfigLocation</param-name>\r
+               <param-value>/WEB-INF/spring-servlet.xml,\r
+                                       classpath:applicationContext.xml\r
+               </param-value>\r
+       </context-param>\r
+       \r
+       <context-param>\r
+        <param-name>spring.profiles.default</param-name>\r
+        <param-value>nooauth</param-value>\r
+    </context-param>\r
+    \r
+       <listener>\r
+               <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>\r
+       </listener>\r
+       \r
+       <servlet>\r
+               <servlet-name>ManagementServlet</servlet-name>\r
+               <servlet-class>ajsc.ManagementServlet</servlet-class>\r
+       </servlet>\r
+\r
+    \r
+       <filter> \r
+               <filter-name>InterceptorFilter</filter-name>\r
+               <filter-class>ajsc.filters.InterceptorFilter</filter-class>\r
+               <init-param>\r
+                <param-name>preProcessor_interceptor_config_file</param-name>\r
+                <param-value>/etc/PreProcessorInterceptors.properties</param-value>\r
+        </init-param>\r
+        <init-param>\r
+                <param-name>postProcessor_interceptor_config_file</param-name>\r
+                <param-value>/etc/PostProcessorInterceptors.properties</param-value>\r
+        </init-param>\r
+        \r
+       </filter>\r
+\r
+        <servlet>\r
+               <servlet-name>RestletServlet</servlet-name>\r
+               <servlet-class>ajsc.restlet.RestletSpringServlet</servlet-class>\r
+               <init-param>\r
+                               <param-name>org.restlet.component</param-name>\r
+                               <param-value>restletComponent</param-value>\r
+               </init-param>\r
+       </servlet>\r
+       \r
+       <servlet>\r
+               <servlet-name>CamelServlet</servlet-name>\r
+               <servlet-class>ajsc.servlet.AjscCamelServlet</servlet-class>\r
+       </servlet>\r
+\r
+\r
+       <filter>\r
+               <filter-name>springSecurityFilterChain</filter-name>\r
+               <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>\r
+       </filter>\r
+\r
+       <servlet>\r
+               <servlet-name>spring</servlet-name>\r
+               <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>\r
+               <load-on-startup>1</load-on-startup>\r
+       </servlet>      \r
+       \r
+<!--   <servlet-mapping>\r
+               <servlet-name>spring</servlet-name>\r
+               <url-pattern>/</url-pattern>\r
+       </servlet-mapping>-->\r
+\r
+<!-- BEGIN jsp -->\r
+\r
+  <servlet id="jsp">\r
+    <servlet-name>jsp</servlet-name>\r
+    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>\r
+  </servlet>\r
+\r
+       \r
+       \r
+\r
+         \r
+       <!-- BEGIN static content -->\r
+       <servlet>\r
+          <servlet-name>default</servlet-name>\r
+           <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>\r
+           <init-param>\r
+               <param-name>dirAllowed</param-name>\r
+               <param-value>true</param-value>\r
+           </init-param>\r
+       </servlet>\r
+       <!-- END static content -->     \r
+</web-app>\r
diff --git a/src/main/docker/.dockerignore b/src/main/docker/.dockerignore
deleted file mode 100644 (file)
index 1128374..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-*.war
-*.jsonld
\ No newline at end of file
index 99c34fd..6f187d5 100644 (file)
@@ -1,53 +1,24 @@
-###
-# ============LICENSE_START=======================================================
-# MODEL LOADER SERVICE
-# ================================================================================
-# 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=========================================================
-###
-
 FROM ubuntu:14.04
-ARG jettyrel=9.3.9.v20160517
-ARG jettydist=jetty-distribution-${jettyrel}
-ARG jettybase=/opt/jetty
-
-RUN apt-get update && apt-get --force-yes -y -f install wget
-
-# Install java8
-RUN apt-get install -y software-properties-common
 
-# sudo -E is required to preserve the environment
-# If you remove that line, it will most like freeze at this step
+ARG MICRO_HOME=/opt/app/model-loader
+ARG BIN_HOME=$MICRO_HOME/bin
 
-RUN apt-get install --reinstall ca-certificates && \
-               sudo -E add-apt-repository ppa:openjdk-r/ppa && apt-get update && apt-get install -y openjdk-8-jdk
-
-# Setup JAVA_HOME, this is useful for docker commandline
+RUN apt-get update
 
+# Install and setup java8
+RUN apt-get update && apt-get install -y software-properties-common
+## sudo -E is required to preserve the environment. If you remove that line, it will most like freeze at this step
+RUN sudo -E add-apt-repository ppa:openjdk-r/ppa && apt-get update && apt-get install -y openjdk-8-jdk
+## Setup JAVA_HOME, this is useful for docker commandline
 ENV JAVA_HOME usr/lib/jvm/java-8-openjdk-amd64
 RUN export JAVA_HOME
 
-RUN wget http://central.maven.org/maven2/org/eclipse/jetty/jetty-distribution/${jettyrel}/${jettydist}.tar.gz
-RUN gunzip ${jettydist}.tar.gz && tar xvf ${jettydist}.tar
-
-COPY model-loader* $jettydist/webapps/model-loader/
-
-COPY startup.sh update_config.sh ${jettydist}/bin/
-RUN chmod 700 ${jettydist}/bin/startup.sh && chmod 700 ${jettydist}/bin/update_config.sh
-RUN mkdir -p ${jettybase}
-RUN mv ${jettydist} ${jettybase}/${jettydist}
-RUN rm -rf $jettybase/$jettydist/demo-base
+# Build up the deployment folder structure
+RUN mkdir -p $MICRO_HOME
+ADD swm/package/nix/dist_files/appl/model-loader/* $MICRO_HOME/
+RUN mkdir -p $BIN_HOME
+COPY *.sh $BIN_HOME
+RUN chmod 755 $BIN_HOME/*
+RUN ln -s /logs $MICRO_HOME/logs
 
-CMD /opt/jetty/*/bin/startup.sh
+CMD /opt/app/model-loader/bin/start.sh
diff --git a/src/main/docker/update_config.sh b/src/main/docker/update_config.sh
deleted file mode 100644 (file)
index 77916ed..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-#!/bin/bash
-
-###
-# ============LICENSE_START=======================================================
-# MODEL LOADER SERVICE
-# ================================================================================
-# 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=========================================================
-###
-
-#
-# This script will update the config file, with config values supplied
-# through environment variables, if set
-# 
-
-CONFIG_FILE=`dirname $0`/../webapps/model-loader/WEB-INF/classes/model-loader.properties
-
-# Distribution client configuration
-ENVVAR=DISTR_CLIENT_ACTIVE_SERVER_TLS_AUTH
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.ACTIVE_SERVER_TLS_AUTH/s/.*/ml.distribution.ACTIVE_SERVER_TLS_AUTH=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_ASDC_ADDRESS 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.ASDC_ADDRESS/s/.*/ml.distribution.ASDC_ADDRESS=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_CONSUMER_GROUP
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.CONSUMER_GROUP/s/.*/ml.distribution.CONSUMER_GROUP=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_CONSUMER_ID
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.CONSUMER_ID/s/.*/ml.distribution.CONSUMER_ID=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_ENVIRONMENT_NAME
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.ENVIRONMENT_NAME/s/.*/ml.distribution.ENVIRONMENT_NAME=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_KEYSTORE_PASSWORD
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.KEYSTORE_PASSWORD/s/.*/ml.distribution.KEYSTORE_PASSWORD=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_KEYSTORE_FILE 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.KEYSTORE_FILE/s/.*/ml.distribution.KEYSTORE_FILE=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_PASSWORD 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.PASSWORD/s/.*/ml.distribution.PASSWORD=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_POLLING_INTERVAL 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.POLLING_INTERVAL/s/.*/ml.distribution.POLLING_INTERVAL=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_POLLING_TIMEOUT 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.POLLING_TIMEOUT/s/.*/ml.distribution.POLLING_TIMEOUT=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_USER 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.USER/s/.*/ml.distribution.USER=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=DISTR_CLIENT_ARTIFACT_TYPES 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.distribution.ARTIFACT_TYPES/s/.*/ml.distribution.ARTIFACT_TYPES=$ENVVALUE/" $CONFIG_FILE;
-
-  
-# Model Loader Application Server REST Client Configuration
-ENVVAR=APP_SERVER_BASE_URL
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.BASE_URL/s/.*/ml.aai.BASE_URL=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=APP_SERVER_MODEL_URL 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.MODEL_URL/s/.*/ml.aai.MODEL_URL=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=APP_SERVER_NAMED_QUERY_URL 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.NAMED_QUERY_URL/s/.*/ml.aai.NAMED_QUERY_URL=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=APP_SERVER_VNF_IMAGE_URL 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.VNF_IMAGE_URL/s/.*/ml.aai.VNF_IMAGE_URL=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=APP_SERVER_KEYSTORE_FILE 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.KEYSTORE_FILE/s/.*/ml.aai.KEYSTORE_FILE=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=APP_SERVER_KEYSTORE_PASSWORD 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.KEYSTORE_PASSWORD/s/.*/ml.aai.KEYSTORE_PASSWORD=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=APP_SERVER_AUTH_USER 
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.AUTH_USER/s/.*/ml.aai.AUTH_USER=$ENVVALUE/" $CONFIG_FILE;
-
-ENVVAR=APP_SERVER_AUTH_PASSWORD
-ENVVALUE=${!ENVVAR}
-ENVVALUE=${ENVVALUE//\//\\/}
-[ -z ${!ENVVAR+x} ] \
- || sed -i "/ml.aai.AUTH_PASSWORD/s/.*/ml.aai.AUTH_PASSWORD=$ENVVALUE/" $CONFIG_FILE;
index 26f13ad..407b015 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.config;
-
-import org.eclipse.jetty.util.security.Password;
-import org.openecomp.sdc.api.consumer.IConfiguration;
-
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-public class ModelLoaderConfig implements IConfiguration {
-
-  // Configuration file structure
-  public static final String PREFIX_MODEL_LOADER_CONFIG = "ml";
-  public static final String PREFIX_DISTRIBUTION_CLIENT = 
-      PREFIX_MODEL_LOADER_CONFIG + ".distribution.";
-  public static final String PREFIX_AAI = PREFIX_MODEL_LOADER_CONFIG + ".aai.";
-  public static final String PREFIX_DEBUG = PREFIX_MODEL_LOADER_CONFIG + ".debug.";
-
-  // Configuration file properties
-  protected static final String PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH = 
-      PREFIX_DISTRIBUTION_CLIENT + "ACTIVE_SERVER_TLS_AUTH";
-  protected static final String PROP_ML_DISTRIBUTION_ASDC_ADDRESS = PREFIX_DISTRIBUTION_CLIENT
-      + "ASDC_ADDRESS";
-  protected static final String PROP_ML_DISTRIBUTION_CONSUMER_GROUP = PREFIX_DISTRIBUTION_CLIENT
-      + "CONSUMER_GROUP";
-  protected static final String PROP_ML_DISTRIBUTION_CONSUMER_ID = PREFIX_DISTRIBUTION_CLIENT
-      + "CONSUMER_ID";
-  protected static final String PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME = PREFIX_DISTRIBUTION_CLIENT
-      + "ENVIRONMENT_NAME";
-  protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD = PREFIX_DISTRIBUTION_CLIENT
-      + "KEYSTORE_PASSWORD";
-  protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_FILE = PREFIX_DISTRIBUTION_CLIENT
-      + "KEYSTORE_FILE";
-  protected static final String PROP_ML_DISTRIBUTION_PASSWORD = PREFIX_DISTRIBUTION_CLIENT
-      + "PASSWORD";
-  protected static final String PROP_ML_DISTRIBUTION_POLLING_INTERVAL = PREFIX_DISTRIBUTION_CLIENT
-      + "POLLING_INTERVAL";
-  protected static final String PROP_ML_DISTRIBUTION_POLLING_TIMEOUT = PREFIX_DISTRIBUTION_CLIENT
-      + "POLLING_TIMEOUT";
-  protected static final String PROP_ML_DISTRIBUTION_USER = PREFIX_DISTRIBUTION_CLIENT + "USER";
-  protected static final String PROP_ML_DISTRIBUTION_ARTIFACT_TYPES = PREFIX_DISTRIBUTION_CLIENT
-      + "ARTIFACT_TYPES";
-
-  protected static final String PROP_AAI_BASE_URL = PREFIX_AAI + "BASE_URL";
-  protected static final String PROP_AAI_KEYSTORE_FILE = PREFIX_AAI + "KEYSTORE_FILE";
-  protected static final String PROP_AAI_KEYSTORE_PASSWORD = PREFIX_AAI + "KEYSTORE_PASSWORD";
-  protected static final String PROP_AAI_MODEL_RESOURCE_URL = PREFIX_AAI + "MODEL_URL";
-  protected static final String PROP_AAI_NAMED_QUERY_RESOURCE_URL = PREFIX_AAI + "NAMED_QUERY_URL";
-  protected static final String PROP_AAI_VNF_IMAGE_RESOURCE_URL = PREFIX_AAI + "VNF_IMAGE_URL";
-  protected static final String PROP_AAI_AUTHENTICATION_USER = PREFIX_AAI + "AUTH_USER";
-  protected static final String PROP_AAI_AUTHENTICATION_PASSWORD = PREFIX_AAI + "AUTH_PASSWORD";
-
-  protected static final String PROP_DEBUG_INGEST_SIMULATOR = PREFIX_DEBUG + "INGEST_SIMULATOR";
-
-  private Properties modelLoaderProperties = null;
-
-  private String certLocation = ".";
-
-  private List<String> artifactTypes = null;
-
-  /**
-   * This is the class constructor.
-   * 
-   * @param modelLoaderProperties properties needed to be configured for the model loader
-   * @param certLocation location of the certificate
-   */
-  public ModelLoaderConfig(Properties modelLoaderProperties) {
-    this.modelLoaderProperties = modelLoaderProperties;
-    
-    String aaiKeystoreFile = modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_FILE);
-    if(aaiKeystoreFile != null){
-           URL keystoreURL = this.getClass().getClassLoader().getResource(aaiKeystoreFile);
-           if(keystoreURL != null){
-               File fKeystoreLocation = new File(keystoreURL.getPath());
-               this.certLocation = fKeystoreLocation.getParent();
-           }
-    }
-
-    // Get list of artifacts
-    artifactTypes = new ArrayList<String>();
-    if (modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ARTIFACT_TYPES) != null) {
-      String[] artTypeList = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ARTIFACT_TYPES)
-          .split(",");
-      for (String artType : artTypeList) {
-        artifactTypes.add(artType);
-      }
-    }
-  }
-
-  @Override
-  public boolean activateServerTLSAuth() {
-    String value = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH);
-    return value == null ? false : Boolean.parseBoolean(value);
-  }
-
-  @Override
-  public String getAsdcAddress() {
-    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ASDC_ADDRESS);
-  }
-
-  @Override
-  public String getConsumerGroup() {
-    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_CONSUMER_GROUP);
-  }
-
-  @Override
-  public String getConsumerID() {
-    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_CONSUMER_ID);
-  }
-
-  @Override
-  public String getEnvironmentName() {
-    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME);
-  }
-
-  @Override
-  public String getKeyStorePassword() {
-    return Password
-        .deobfuscate(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD));
-  }
-
-  @Override
-  public String getKeyStorePath() {
-    return certLocation + modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_KEYSTORE_FILE);
-  }
-
-  @Override
-  public String getPassword() {
-    return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_PASSWORD));
-  }
-
-  @Override
-  public int getPollingInterval() {
-    return Integer
-        .parseInt(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_POLLING_INTERVAL));
-  }
-
-  @Override
-  public int getPollingTimeout() {
-    return Integer
-        .parseInt(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_POLLING_TIMEOUT));
-  }
-
-  @Override
-  public List<String> getRelevantArtifactTypes() {
-    return artifactTypes;
-  }
-
-  @Override
-  public String getUser() {
-    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_USER);
-  }
-
-  public String getAaiKeyStorePath() {
-    return certLocation + "/" + modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_FILE);
-  }
-
-  public String getAaiKeyStorePassword() {
-    return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_PASSWORD));
-  }
-
-  public String getAaiBaseUrl() {
-    return modelLoaderProperties.getProperty(PROP_AAI_BASE_URL);
-  }
-
-  public String getAaiModelUrl() {
-    return modelLoaderProperties.getProperty(PROP_AAI_MODEL_RESOURCE_URL);
-  }
-
-  public String getAaiNamedQueryUrl() {
-    return modelLoaderProperties.getProperty(PROP_AAI_NAMED_QUERY_RESOURCE_URL);
-  }
-
-  public String getAaiVnfImageUrl() {
-    return modelLoaderProperties.getProperty(PROP_AAI_VNF_IMAGE_RESOURCE_URL);
-  }
-
-  public String getAaiAuthenticationUser() {
-    return modelLoaderProperties.getProperty(PROP_AAI_AUTHENTICATION_USER);
-  }
-
-  /**
-   * @return password for AAI authentication that has been reverse-engineered
-   *         from its obfuscated form.
-   */
-  public String getAaiAuthenticationPassword() {
-    String password = Password
-        .deobfuscate(modelLoaderProperties.getProperty(PROP_AAI_AUTHENTICATION_PASSWORD));
-
-    if ((password != null) && (password.equals(""))) {
-      return null;
-    }
-
-    return password;
-  }
-
-  /**
-   * @return a boolean value indicating whether the simulator is enabled.
-   */
-  public boolean getIngestSimulatorEnabled() {
-    String propValue = modelLoaderProperties.getProperty(PROP_DEBUG_INGEST_SIMULATOR);
-
-    if (propValue == null) {
-      return false;
-    }
-
-    if (propValue.compareToIgnoreCase("enabled") == 0) {
-      return true;
-    }
-
-    return false;
-  }
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.config;\r
+\r
+import org.eclipse.jetty.util.security.Password;\r
+import org.openecomp.sdc.api.consumer.IConfiguration;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Properties;\r
+\r
+public class ModelLoaderConfig implements IConfiguration {\r
+       \r
+  // Configuration file structure\r
+  public static final String PREFIX_MODEL_LOADER_CONFIG = "ml";\r
+  public static final String PREFIX_DISTRIBUTION_CLIENT = \r
+      PREFIX_MODEL_LOADER_CONFIG + ".distribution.";\r
+  public static final String PREFIX_AAI = PREFIX_MODEL_LOADER_CONFIG + ".aai.";\r
+  public static final String PREFIX_DEBUG = PREFIX_MODEL_LOADER_CONFIG + ".debug.";\r
+\r
+  // Configuration file properties\r
+  protected static final String PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH = \r
+      PREFIX_DISTRIBUTION_CLIENT + "ACTIVE_SERVER_TLS_AUTH";\r
+  protected static final String PROP_ML_DISTRIBUTION_ASDC_ADDRESS = PREFIX_DISTRIBUTION_CLIENT\r
+      + "ASDC_ADDRESS";\r
+  protected static final String PROP_ML_DISTRIBUTION_CONSUMER_GROUP = PREFIX_DISTRIBUTION_CLIENT\r
+      + "CONSUMER_GROUP";\r
+  protected static final String PROP_ML_DISTRIBUTION_CONSUMER_ID = PREFIX_DISTRIBUTION_CLIENT\r
+      + "CONSUMER_ID";\r
+  protected static final String PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME = PREFIX_DISTRIBUTION_CLIENT\r
+      + "ENVIRONMENT_NAME";\r
+  protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD = PREFIX_DISTRIBUTION_CLIENT\r
+      + "KEYSTORE_PASSWORD";\r
+  protected static final String PROP_ML_DISTRIBUTION_KEYSTORE_FILE = PREFIX_DISTRIBUTION_CLIENT\r
+      + "KEYSTORE_FILE";\r
+  protected static final String PROP_ML_DISTRIBUTION_PASSWORD = PREFIX_DISTRIBUTION_CLIENT\r
+      + "PASSWORD";\r
+  protected static final String PROP_ML_DISTRIBUTION_POLLING_INTERVAL = PREFIX_DISTRIBUTION_CLIENT\r
+      + "POLLING_INTERVAL";\r
+  protected static final String PROP_ML_DISTRIBUTION_POLLING_TIMEOUT = PREFIX_DISTRIBUTION_CLIENT\r
+      + "POLLING_TIMEOUT";\r
+  protected static final String PROP_ML_DISTRIBUTION_USER = PREFIX_DISTRIBUTION_CLIENT + "USER";\r
+  protected static final String PROP_ML_DISTRIBUTION_ARTIFACT_TYPES = PREFIX_DISTRIBUTION_CLIENT\r
+      + "ARTIFACT_TYPES";\r
+\r
+  protected static final String PROP_AAI_BASE_URL = PREFIX_AAI + "BASE_URL";\r
+  protected static final String PROP_AAI_KEYSTORE_FILE = PREFIX_AAI + "KEYSTORE_FILE";\r
+  protected static final String PROP_AAI_KEYSTORE_PASSWORD = PREFIX_AAI + "KEYSTORE_PASSWORD";\r
+  protected static final String PROP_AAI_MODEL_RESOURCE_URL = PREFIX_AAI + "MODEL_URL";\r
+  protected static final String PROP_AAI_NAMED_QUERY_RESOURCE_URL = PREFIX_AAI + "NAMED_QUERY_URL";\r
+  protected static final String PROP_AAI_VNF_IMAGE_RESOURCE_URL = PREFIX_AAI + "VNF_IMAGE_URL";\r
+  protected static final String PROP_AAI_AUTHENTICATION_USER = PREFIX_AAI + "AUTH_USER";\r
+  protected static final String PROP_AAI_AUTHENTICATION_PASSWORD = PREFIX_AAI + "AUTH_PASSWORD";\r
+\r
+  protected static final String PROP_DEBUG_INGEST_SIMULATOR = PREFIX_DEBUG + "INGEST_SIMULATOR";\r
+\r
+  private Properties modelLoaderProperties = null;\r
+\r
+  private String certLocation = ".";\r
+\r
+  private List<String> artifactTypes = null;\r
+\r
+  /**\r
+   * This is the class constructor.\r
+   * \r
+   * @param modelLoaderProperties properties needed to be configured for the model loader\r
+   * @param certLocation location of the certificate\r
+   */\r
+  public ModelLoaderConfig(Properties modelLoaderProperties, String certLocation) {\r
+    this.modelLoaderProperties = modelLoaderProperties;\r
+    this.certLocation = certLocation;\r
+\r
+    // Get list of artifacts\r
+    artifactTypes = new ArrayList<String>();\r
+    if (modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ARTIFACT_TYPES) != null) {\r
+      String[] artTypeList = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ARTIFACT_TYPES)\r
+          .split(",");\r
+      for (String artType : artTypeList) {\r
+        artifactTypes.add(artType);\r
+      }\r
+    }\r
+  }\r
+\r
+  @Override\r
+  public boolean activateServerTLSAuth() {\r
+    String value = modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ACTIVE_SERVER_TLS_AUTH);\r
+    return value == null ? false : Boolean.parseBoolean(value);\r
+  }\r
+\r
+  @Override\r
+  public String getAsdcAddress() {\r
+    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ASDC_ADDRESS);\r
+  }\r
+\r
+  @Override\r
+  public String getConsumerGroup() {\r
+    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_CONSUMER_GROUP);\r
+  }\r
+\r
+  @Override\r
+  public String getConsumerID() {\r
+    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_CONSUMER_ID);\r
+  }\r
+\r
+  @Override\r
+  public String getEnvironmentName() {\r
+    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_ENVIRONMENT_NAME);\r
+  }\r
+\r
+  @Override\r
+  public String getKeyStorePassword() {\r
+    return Password\r
+        .deobfuscate(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD));\r
+  }\r
+\r
+  @Override\r
+  public String getKeyStorePath() {\r
+    return certLocation + modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_KEYSTORE_FILE);\r
+  }\r
+\r
+  @Override\r
+  public String getPassword() {\r
+    return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_PASSWORD));\r
+  }\r
+\r
+  @Override\r
+  public int getPollingInterval() {\r
+    return Integer\r
+        .parseInt(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_POLLING_INTERVAL));\r
+  }\r
+\r
+  @Override\r
+  public int getPollingTimeout() {\r
+    return Integer\r
+        .parseInt(modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_POLLING_TIMEOUT));\r
+  }\r
+\r
+  @Override\r
+  public List<String> getRelevantArtifactTypes() {\r
+    return artifactTypes;\r
+  }\r
+\r
+  @Override\r
+  public String getUser() {\r
+    return modelLoaderProperties.getProperty(PROP_ML_DISTRIBUTION_USER);\r
+  }\r
+\r
+  public String getAaiKeyStorePath() {\r
+    return certLocation + "/" + modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_FILE);\r
+  }\r
+\r
+  public String getAaiKeyStorePassword() {\r
+    return Password.deobfuscate(modelLoaderProperties.getProperty(PROP_AAI_KEYSTORE_PASSWORD));\r
+  }\r
+\r
+  public String getAaiBaseUrl() {\r
+    return modelLoaderProperties.getProperty(PROP_AAI_BASE_URL);\r
+  }\r
+\r
+  public String getAaiModelUrl() {\r
+    return modelLoaderProperties.getProperty(PROP_AAI_MODEL_RESOURCE_URL);\r
+  }\r
+\r
+  public String getAaiNamedQueryUrl() {\r
+    return modelLoaderProperties.getProperty(PROP_AAI_NAMED_QUERY_RESOURCE_URL);\r
+  }\r
+\r
+  public String getAaiVnfImageUrl() {\r
+    return modelLoaderProperties.getProperty(PROP_AAI_VNF_IMAGE_RESOURCE_URL);\r
+  }\r
+\r
+  public String getAaiAuthenticationUser() {\r
+    return modelLoaderProperties.getProperty(PROP_AAI_AUTHENTICATION_USER);\r
+  }\r
+\r
+  /**\r
+   * @return password for AAI authentication that has been reverse-engineered\r
+   *         from its obfuscated form.\r
+   */\r
+  public String getAaiAuthenticationPassword() {\r
+    String password = Password\r
+        .deobfuscate(modelLoaderProperties.getProperty(PROP_AAI_AUTHENTICATION_PASSWORD));\r
+\r
+    if ((password != null) && (password.equals(""))) {\r
+      return null;\r
+    }\r
+\r
+    return password;\r
+  }\r
+\r
+  /**\r
+   * @return a boolean value indicating whether the simulator is enabled.\r
+   */\r
+  public boolean getIngestSimulatorEnabled() {\r
+    String propValue = modelLoaderProperties.getProperty(PROP_DEBUG_INGEST_SIMULATOR);\r
+\r
+    if (propValue == null) {\r
+      return false;\r
+    }\r
+\r
+    if (propValue.compareToIgnoreCase("enabled") == 0) {\r
+      return true;\r
+    }\r
+\r
+    return false;\r
+  }\r
+\r
+  public boolean isFilterInEmptyResources() {\r
+         return false;\r
+  }\r
+\r
+}\r
index fb0ec9f..30709ae 100644 (file)
@@ -1,44 +1,46 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity;
-
-public abstract class Artifact {
-
-  private String payload;
-  private ArtifactType type;
-
-  public ArtifactType getType() {
-    return type;
-  }
-
-  public void setType(ArtifactType type) {
-    this.type = type;
-  }
-
-  public String getPayload() {
-    return payload;
-  }
-
-  public void setPayload(String payload) {
-    this.payload = payload;
-  }
-
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.entity;\r
+\r
+public abstract class Artifact {\r
+\r
+  private String payload;\r
+  private ArtifactType type;\r
+\r
+  public ArtifactType getType() {\r
+    return type;\r
+  }\r
+\r
+  public void setType(ArtifactType type) {\r
+    this.type = type;\r
+  }\r
+\r
+  public String getPayload() {\r
+    return payload;\r
+  }\r
+\r
+  public void setPayload(String payload) {\r
+    this.payload = payload;\r
+  }\r
+\r
+}\r
index 16f2c87..bd6a861 100644 (file)
@@ -1,37 +1,39 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity;
-
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-
-import java.util.List;
-
-public abstract class ArtifactHandler {
-
-  protected ModelLoaderConfig config;
-
-  public ArtifactHandler(ModelLoaderConfig config) {
-    this.config = config;
-  }
-
-  public abstract boolean pushArtifacts(List<Artifact> artifacts, String distributionId);
-
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.entity;\r
+\r
+import org.openecomp.modelloader.config.ModelLoaderConfig;\r
+\r
+import java.util.List;\r
+\r
+public abstract class ArtifactHandler {\r
+\r
+  protected ModelLoaderConfig config;\r
+\r
+  public ArtifactHandler(ModelLoaderConfig config) {\r
+    this.config = config;\r
+  }\r
+\r
+  public abstract boolean pushArtifacts(List<Artifact> artifacts, String distributionId);\r
+\r
+}\r
index 8977e3c..ae556bc 100644 (file)
@@ -1,25 +1,27 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity;
-
-public enum ArtifactType {
-  MODEL, NAMED_QUERY, VNF_CATALOG;
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.entity;\r
+\r
+public enum ArtifactType {\r
+  MODEL, NAMED_QUERY, VNF_CATALOG;\r
+}\r
index b2e1fdb..a15ed3c 100644 (file)
@@ -1,31 +1,33 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.catalog;
-
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.ArtifactType;
-
-public class VnfCatalogArtifact extends Artifact {
-  public VnfCatalogArtifact(String payload) {
-    setPayload(payload);
-    setType(ArtifactType.VNF_CATALOG);
-  }
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.entity.catalog;\r
+\r
+import org.openecomp.modelloader.entity.Artifact;\r
+import org.openecomp.modelloader.entity.ArtifactType;\r
+\r
+public class VnfCatalogArtifact extends Artifact {\r
+  public VnfCatalogArtifact(String payload) {\r
+    setPayload(payload);\r
+    setType(ArtifactType.VNF_CATALOG);\r
+  }\r
+}\r
index 189b069..5c526a6 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.catalog;
-
-import com.sun.jersey.api.client.ClientResponse;
-
-import generated.VnfCatalog;
-import generated.VnfCatalog.PartNumberList;
-
-import inventory.aai.openecomp.org.v8.VnfImage;
-
-import org.eclipse.persistence.jaxb.MarshallerProperties;
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.ArtifactHandler;
-import org.openecomp.modelloader.restclient.AaiRestClient;
-import org.openecomp.modelloader.restclient.AaiRestClient.MimeType;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-import javax.ws.rs.core.Response;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import javax.xml.bind.Unmarshaller;
-
-
-public class VnfCatalogArtifactHandler extends ArtifactHandler {
-
-  private static Logger logger = LoggerFactory.getInstance()
-      .getLogger(VnfCatalogArtifactHandler.class.getName());
-
-  public VnfCatalogArtifactHandler(ModelLoaderConfig config) {
-    super(config);
-  }
-
-  @Override
-  public boolean pushArtifacts(List<Artifact> artifacts, String distributionId) {
-    for (Artifact art : artifacts) {
-      VnfCatalogArtifact vnfCatalog = (VnfCatalogArtifact) art;
-      String artifactPayload = vnfCatalog.getPayload();
-
-      AaiRestClient restClient = new AaiRestClient(this.config);
-      List<VnfImage> putImages = new ArrayList<VnfImage>();
-
-      try {
-        JAXBContext inputContext = JAXBContext.newInstance(VnfCatalog.class);
-        Unmarshaller unmarshaller = inputContext.createUnmarshaller();
-        StringReader reader = new StringReader(artifactPayload);
-        VnfCatalog cat = (VnfCatalog) unmarshaller.unmarshal(reader);
-
-        int numParts = cat.getPartNumberList().size();
-
-        for (int i = 0; i < numParts; i++) {
-
-          PartNumberList pnl = cat.getPartNumberList().get(i);
-
-          String application = pnl.getVendorInfo().getVendorModel();
-          String applicationVendor = pnl.getVendorInfo().getVendorName();
-
-          int numVersions = pnl.getSoftwareVersionList().size();
-
-          for (int j = 0; j < numVersions; j++) {
-            String applicationVersion = pnl.getSoftwareVersionList().get(j).getSoftwareVersion();
-
-            String imageId = "vnf image " + applicationVendor + " " + application + " "
-                + applicationVersion;
-
-            String getUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl()
-                + "?application-vendor=" + applicationVendor + "&application=" + application
-                + "&application-version=" + applicationVersion;
-
-            ClientResponse tryGet = restClient.getResource(getUrl, distributionId, MimeType.JSON);
-            if (tryGet == null) {
-              logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-                  "Ingestion failed on " + imageId + ". Rolling back distribution.");
-              failureCleanup(putImages, restClient, distributionId);
-              return false;
-            }
-            if (tryGet.getStatus() == Response.Status.NOT_FOUND.getStatusCode()) {
-              // this vnf-image not already in the db, need to add
-              // only do this on 404 bc other error responses could mean there
-              // are problems that
-              // you might not want to try to PUT against
-
-              VnfImage image = new VnfImage();
-              image.setApplication(application);
-              image.setApplicationVendor(applicationVendor);
-              image.setApplicationVersion(applicationVersion);
-              String uuid = UUID.randomUUID().toString();
-              image.setUuid(uuid); // need to create uuid
-
-              System.setProperty("javax.xml.bind.context.factory",
-                  "org.eclipse.persistence.jaxb.JAXBContextFactory");
-              JAXBContext jaxbContext = JAXBContext.newInstance(VnfImage.class);
-              Marshaller marshaller = jaxbContext.createMarshaller();
-              marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
-              marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
-              marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);
-              marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
-              StringWriter writer = new StringWriter();
-              marshaller.marshal(image, writer);
-              String payload = writer.toString();
-
-              String putUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/"
-                  + uuid;
-
-              ClientResponse putResp = restClient.putResource(putUrl, payload, distributionId,
-                  MimeType.JSON);
-              if (putResp == null
-                  || putResp.getStatus() != Response.Status.CREATED.getStatusCode()) {
-                logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-                    "Ingestion failed on vnf-image " + imageId + ". Rolling back distribution.");
-                failureCleanup(putImages, restClient, distributionId);
-                return false;
-              }
-              putImages.add(image);
-              logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, imageId + " successfully ingested.");
-            } else if (tryGet.getStatus() == Response.Status.OK.getStatusCode()) {
-              logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-                  imageId + " already exists.  Skipping ingestion.");
-            } else {
-              // if other than 404 or 200, something went wrong
-              logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-                  "Ingestion failed on vnf-image " + imageId + " with status " + tryGet.getStatus()
-                      + ". Rolling back distribution.");
-              failureCleanup(putImages, restClient, distributionId);
-              return false;
-            }
-          }
-        }
-
-      } catch (JAXBException e) {
-        logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-            "Ingestion failed. " + e.getMessage() + ". Rolling back distribution.");
-        failureCleanup(putImages, restClient, distributionId);
-        return false;
-      }
-    }
-
-    return true;
-  }
-
-  /*
-   * if something fails in the middle of ingesting the catalog we want to
-   * rollback any changes to the db
-   */
-  private void failureCleanup(List<VnfImage> putImages, AaiRestClient restClient, String transId) {
-    for (VnfImage image : putImages) {
-      String url = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/"
-          + image.getUuid();
-      restClient.getAndDeleteResource(url, transId); // try to delete the image,
-                                                     // if something goes wrong
-                                                     // we can't really do
-                                                     // anything here
-    }
-  }
-
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.entity.catalog;\r
+\r
+import com.sun.jersey.api.client.ClientResponse;\r
+\r
+import generated.VnfCatalog;\r
+import generated.VnfCatalog.PartNumberList;\r
+\r
+import inventory.aai.openecomp.org.v8.VnfImage;\r
+\r
+import org.eclipse.persistence.jaxb.MarshallerProperties;\r
+import org.openecomp.cl.api.Logger;\r
+import org.openecomp.cl.eelf.LoggerFactory;\r
+import org.openecomp.modelloader.config.ModelLoaderConfig;\r
+import org.openecomp.modelloader.entity.Artifact;\r
+import org.openecomp.modelloader.entity.ArtifactHandler;\r
+import org.openecomp.modelloader.restclient.AaiRestClient;\r
+import org.openecomp.modelloader.restclient.AaiRestClient.MimeType;\r
+import org.openecomp.modelloader.service.ModelLoaderMsgs;\r
+import org.springframework.web.util.UriUtils;\r
+\r
+import java.io.StringReader;\r
+import java.io.StringWriter;\r
+import java.io.UnsupportedEncodingException;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.UUID;\r
+\r
+import javax.ws.rs.core.Response;\r
+import javax.xml.bind.JAXBContext;\r
+import javax.xml.bind.JAXBException;\r
+import javax.xml.bind.Marshaller;\r
+import javax.xml.bind.Unmarshaller;\r
+\r
+\r
+public class VnfCatalogArtifactHandler extends ArtifactHandler {\r
+\r
+  private static Logger logger = LoggerFactory.getInstance()\r
+      .getLogger(VnfCatalogArtifactHandler.class.getName());\r
+\r
+  public VnfCatalogArtifactHandler(ModelLoaderConfig config) {\r
+    super(config);\r
+  }\r
+\r
+  @Override\r
+  public boolean pushArtifacts(List<Artifact> artifacts, String distributionId) {\r
+    for (Artifact art : artifacts) {\r
+      VnfCatalogArtifact vnfCatalog = (VnfCatalogArtifact) art;\r
+      String artifactPayload = vnfCatalog.getPayload();\r
+\r
+      AaiRestClient restClient = new AaiRestClient(this.config);\r
+      List<VnfImage> putImages = new ArrayList<VnfImage>();\r
+\r
+      try {\r
+        JAXBContext inputContext = JAXBContext.newInstance(VnfCatalog.class);\r
+        Unmarshaller unmarshaller = inputContext.createUnmarshaller();\r
+        StringReader reader = new StringReader(artifactPayload);\r
+        VnfCatalog cat = (VnfCatalog) unmarshaller.unmarshal(reader);\r
+\r
+        int numParts = cat.getPartNumberList().size();\r
+\r
+        for (int i = 0; i < numParts; i++) {\r
+\r
+          PartNumberList pnl = cat.getPartNumberList().get(i);\r
+\r
+          String application = pnl.getVendorInfo().getVendorModel();\r
+          String applicationVendor = pnl.getVendorInfo().getVendorName();\r
+\r
+          int numVersions = pnl.getSoftwareVersionList().size();\r
+\r
+          for (int j = 0; j < numVersions; j++) {\r
+            String applicationVersion = pnl.getSoftwareVersionList().get(j).getSoftwareVersion();\r
+\r
+            String imageId = "vnf image " + applicationVendor + " " + application + " "\r
+                + applicationVersion;\r
+\r
+                       String queryURI = "application-vendor=" + applicationVendor + "&application=" + application + "&application-version=" + applicationVersion;\r
+                       \r
+                       String getUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "?" + UriUtils.encodePath(queryURI, "UTF-8");\r
+\r
+            ClientResponse tryGet = restClient.getResource(getUrl, distributionId, MimeType.JSON);\r
+            if (tryGet == null) {\r
+              logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,\r
+                  "Ingestion failed on " + imageId + ". Rolling back distribution.");\r
+              failureCleanup(putImages, restClient, distributionId);\r
+              return false;\r
+            }\r
+            if (tryGet.getStatus() == Response.Status.NOT_FOUND.getStatusCode()) {\r
+              // this vnf-image not already in the db, need to add\r
+              // only do this on 404 bc other error responses could mean there\r
+              // are problems that\r
+              // you might not want to try to PUT against\r
+\r
+              VnfImage image = new VnfImage();\r
+              image.setApplication(application);\r
+              image.setApplicationVendor(applicationVendor);\r
+              image.setApplicationVersion(applicationVersion);\r
+              String uuid = UUID.randomUUID().toString();\r
+              image.setUuid(uuid); // need to create uuid\r
+\r
+              System.setProperty("javax.xml.bind.context.factory",\r
+                  "org.eclipse.persistence.jaxb.JAXBContextFactory");\r
+              JAXBContext jaxbContext = JAXBContext.newInstance(VnfImage.class);\r
+              Marshaller marshaller = jaxbContext.createMarshaller();\r
+              marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");\r
+              marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);\r
+              marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);\r
+              marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);\r
+              StringWriter writer = new StringWriter();\r
+              marshaller.marshal(image, writer);\r
+              String payload = writer.toString();\r
+\r
+              String putUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/"\r
+                  + uuid;\r
+\r
+              ClientResponse putResp = restClient.putResource(putUrl, payload, distributionId,\r
+                  MimeType.JSON);\r
+              if (putResp == null\r
+                  || putResp.getStatus() != Response.Status.CREATED.getStatusCode()) {\r
+                logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,\r
+                    "Ingestion failed on vnf-image " + imageId + ". Rolling back distribution.");\r
+                failureCleanup(putImages, restClient, distributionId);\r
+                return false;\r
+              }\r
+              putImages.add(image);\r
+              logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, imageId + " successfully ingested.");\r
+            } else if (tryGet.getStatus() == Response.Status.OK.getStatusCode()) {\r
+              logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,\r
+                  imageId + " already exists.  Skipping ingestion.");\r
+            } else {\r
+              // if other than 404 or 200, something went wrong\r
+              logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,\r
+                  "Ingestion failed on vnf-image " + imageId + " with status " + tryGet.getStatus()\r
+                      + ". Rolling back distribution.");\r
+              failureCleanup(putImages, restClient, distributionId);\r
+              return false;\r
+            }\r
+          }\r
+        }\r
+\r
+      } catch (JAXBException e) {\r
+        logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,\r
+            "Ingestion failed. " + e.getMessage() + ". Rolling back distribution.");\r
+        failureCleanup(putImages, restClient, distributionId);\r
+        return false;\r
+      } catch (UnsupportedEncodingException e) {\r
+         logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed. " + e.getMessage() + ". Rolling back distribution.");\r
+         failureCleanup(putImages, restClient, distributionId);\r
+         return false;\r
+      }\r
+    }\r
+\r
+    return true;\r
+  }\r
+\r
+  /*\r
+   * if something fails in the middle of ingesting the catalog we want to\r
+   * rollback any changes to the db\r
+   */\r
+  private void failureCleanup(List<VnfImage> putImages, AaiRestClient restClient, String transId) {\r
+    for (VnfImage image : putImages) {\r
+      String url = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "/vnf-image/"\r
+          + image.getUuid();\r
+      restClient.getAndDeleteResource(url, transId); // try to delete the image,\r
+                                                     // if something goes wrong\r
+                                                     // we can't really do\r
+                                                     // anything here\r
+    }\r
+  }\r
+\r
+}\r
index 904dba9..14749e5 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.model;
-
-import org.openecomp.modelloader.entity.Artifact;
-
-import java.util.HashSet;
-import java.util.Set;
-
-public class ModelArtifact extends Artifact {
-
-  String nameVersionId;
-  Set<String> referencedModelIds = new HashSet<String>();
-
-  public String getNameVersionId() {
-    return nameVersionId;
-  }
-
-  public void setNameVersionId(String nameVersionId) {
-    this.nameVersionId = nameVersionId;
-  }
-
-  public Set<String> getDependentModelIds() {
-    return referencedModelIds;
-  }
-
-  public void addDependentModelId(String dependentModelId) {
-    this.referencedModelIds.add(dependentModelId);
-  }
-
-  @Override
-  public String toString() {
-    StringBuilder sb = new StringBuilder();
-    sb.append("NameVersId=" + nameVersionId + "(" + getType().toString() + ") ==> ");
-    for (String dep : referencedModelIds) {
-      sb.append(dep + "  ");
-    }
-
-    return sb.toString();
-  }
-
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.entity.model;\r
+\r
+import org.openecomp.modelloader.entity.Artifact;\r
+import org.w3c.dom.Node;\r
+\r
+import java.util.HashSet;\r
+import java.util.Set;\r
+\r
+public class ModelArtifact extends Artifact {\r
+\r
+       String modelVerId;\r
+       String modelInvariantId;\r
+       String nameVersionId;\r
+       String modelModelVerCombinedKey;\r
+       String modelVerModelVersionId;\r
+       String modelModelInvariantId;\r
+       String modelNamespace;\r
+       Set<String> referencedModelIds = new HashSet<String>(); \r
+       Node modelVer;\r
+       boolean isV9Artifact = true;\r
+       \r
+       public boolean isV9Artifact() {\r
+               return isV9Artifact;\r
+       }\r
+       \r
+       public void setV9Artifact(boolean isV9Artifact) {\r
+               this.isV9Artifact = isV9Artifact;\r
+       }\r
+\r
+       public String getModelVerModelVersionId() {\r
+               return modelVerModelVersionId;\r
+       }\r
+       \r
+       public void setModelVerModelVersionId(String modelVerModelVersionId) {\r
+               this.modelVerModelVersionId = modelVerModelVersionId;\r
+       }\r
+       \r
+       public String getModelModelInvariantId() {\r
+               return modelModelInvariantId;\r
+       }\r
+       \r
+       public void setModelModelInvariantId(String modelModelInvariantId) {\r
+               this.modelModelInvariantId = modelModelInvariantId;\r
+       }\r
+       \r
+       public String getNameVersionId() {\r
+               return nameVersionId;\r
+       }\r
+\r
+       public void setNameVersionId(String nameVersionId) {\r
+               this.nameVersionId = nameVersionId;\r
+       }\r
+       \r
+       public String getModelNamespace() {\r
+               return modelNamespace;\r
+       }\r
+       \r
+       public void setModelNamespace(String modelNamespace) {\r
+               this.modelNamespace = modelNamespace;\r
+       }\r
+\r
+       public Set<String> getDependentModelIds() {\r
+               return referencedModelIds;\r
+       }\r
+\r
+       public void addDependentModelId(String dependentModelId) {\r
+               this.referencedModelIds.add(dependentModelId);\r
+       }\r
+\r
+       @Override\r
+       public String toString() {\r
+               StringBuilder sb = new StringBuilder();\r
+               sb.append("ModelInvariantId=" + modelInvariantId + "(" + getType().toString() + ") ==> ");\r
+               for (String dep : referencedModelIds) {\r
+                       sb.append(dep + "  ");\r
+               }\r
+\r
+               return sb.toString();\r
+       }\r
+\r
+       public String getModelVerId() {\r
+               return modelVerId;\r
+       }\r
+       \r
+       public void setModelVerId(String modelVerId) {\r
+               this.modelVerId = modelVerId;\r
+       }\r
+       \r
+       public String getModelInvariantId() {\r
+               return modelInvariantId;\r
+       }\r
+       \r
+       public void setModelInvariantId(String modelInvariantId) {\r
+               this.modelInvariantId = modelInvariantId;\r
+       }\r
+       \r
+       public Node getModelVer() {\r
+               return modelVer;\r
+       }\r
+       \r
+       public void setModelVer(Node modelVer) {\r
+               this.modelVer = modelVer;\r
+       }\r
+       \r
+       public String getModelModelVerCombinedKey() {\r
+               return getModelInvariantId() + "|" + getModelVerId();\r
+       }\r
+       \r
+       public void setModelModelVerCombinedKey(String modelModelVerCombinedKey) {\r
+               this.modelModelVerCombinedKey = getModelInvariantId() + "|" + getModelVerId();\r
+       }\r
+}\r
index fb269b1..ce6d986 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.model;
-
-import com.sun.jersey.api.client.ClientResponse;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.ArtifactHandler;
-import org.openecomp.modelloader.entity.ArtifactType;
-import org.openecomp.modelloader.restclient.AaiRestClient;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.ws.rs.core.Response;
-
-public class ModelArtifactHandler extends ArtifactHandler {
-
-  private static Logger logger = LoggerFactory.getInstance()
-      .getLogger(ArtifactHandler.class.getName());
-
-  public ModelArtifactHandler(ModelLoaderConfig config) {
-    super(config);
-  }
-
-  @Override
-  public boolean pushArtifacts(List<Artifact> artifacts, String distributionId) {
-    ModelSorter modelSorter = new ModelSorter();
-    List<Artifact> sortedModelArtifacts = modelSorter.sort(artifacts);
-
-    // Push the ordered list of model artifacts to A&AI. If one fails, we need
-    // to roll back
-    // the changes.
-    List<ModelArtifact> completedModels = new ArrayList<ModelArtifact>();
-    AaiRestClient aaiClient = new AaiRestClient(config);
-
-    for (Artifact art : sortedModelArtifacts) {
-      ModelArtifact model = (ModelArtifact) art;
-      ClientResponse getResponse = aaiClient.getResource(getUrl(model), distributionId,
-          AaiRestClient.MimeType.XML);
-      if ((getResponse == null)
-          || (getResponse.getStatus() != Response.Status.OK.getStatusCode())) {
-        // Only attempt the PUT if the model doesn't already exist
-        ClientResponse putResponse = aaiClient.putResource(getUrl(model), model.getPayload(),
-            distributionId, AaiRestClient.MimeType.XML);
-        if ((putResponse != null)
-            && (putResponse.getStatus() == Response.Status.CREATED.getStatusCode())) {
-          completedModels.add(model);
-          logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + " "
-              + model.getNameVersionId() + " successfully ingested.");
-        } else {
-          logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-              "Ingestion failed for " + model.getType().toString() + " " + model.getNameVersionId()
-                  + ". Rolling back distribution.");
-
-          for (ModelArtifact modelToDelete : completedModels) {
-            // Best effort to delete. Nothing we can do in the event this fails.
-            aaiClient.getAndDeleteResource(getUrl(modelToDelete), distributionId);
-          }
-
-          return false;
-        }
-      } else {
-        logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + " "
-            + model.getNameVersionId() + " already exists.  Skipping ingestion.");
-      }
-    }
-
-    return true;
-  }
-
-  private String getUrl(ModelArtifact model) {
-    String baseUrl = config.getAaiBaseUrl().trim();
-    String subUrl = null;
-    if (model.getType().equals(ArtifactType.MODEL)) {
-      subUrl = config.getAaiModelUrl().trim();
-    } else {
-      subUrl = config.getAaiNamedQueryUrl().trim();
-    }
-
-    if ((!baseUrl.endsWith("/")) && (!subUrl.startsWith("/"))) {
-      baseUrl = baseUrl + "/";
-    }
-
-    if (baseUrl.endsWith("/") && subUrl.startsWith("/")) {
-      baseUrl = baseUrl.substring(0, baseUrl.length() - 1);
-    }
-
-    if (!subUrl.endsWith("/")) {
-      subUrl = subUrl + "/";
-    }
-
-    String url = baseUrl + subUrl + model.getNameVersionId();
-    return url;
-  }
-
-  /**
-   * This method is used for the test REST interface to load models without an
-   * ASDC.
-   * 
-   * @param payload content of the request
-   */
-  public void loadModelTest(byte[] payload) {
-    List<Artifact> modelArtifacts = new ArrayList<Artifact>();
-    ModelArtifactParser parser = new ModelArtifactParser();
-    modelArtifacts.addAll(parser.parse(payload, "Test-Artifact"));
-    ModelSorter modelSorter = new ModelSorter();
-    List<Artifact> sortedModelArtifacts = modelSorter.sort(modelArtifacts);
-    pushArtifacts(sortedModelArtifacts, "Test-Distribution");
-  }
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.entity.model;\r
+\r
+import com.sun.jersey.api.client.ClientResponse;\r
+\r
+import org.openecomp.cl.api.Logger;\r
+import org.openecomp.cl.eelf.LoggerFactory;\r
+import org.openecomp.modelloader.config.ModelLoaderConfig;\r
+import org.openecomp.modelloader.entity.Artifact;\r
+import org.openecomp.modelloader.entity.ArtifactHandler;\r
+import org.openecomp.modelloader.entity.ArtifactType;\r
+import org.openecomp.modelloader.restclient.AaiRestClient;\r
+import org.openecomp.modelloader.service.ModelLoaderMsgs;\r
+\r
+import org.w3c.dom.Node;\r
+\r
+import java.io.StringWriter;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.ws.rs.core.Response;\r
+import javax.xml.transform.OutputKeys;\r
+import javax.xml.transform.Transformer;\r
+import javax.xml.transform.TransformerException;\r
+import javax.xml.transform.TransformerFactory;\r
+import javax.xml.transform.dom.DOMSource;\r
+import javax.xml.transform.stream.StreamResult;\r
+\r
+\r
+public class ModelArtifactHandler extends ArtifactHandler {\r
+\r
+  private static final String AAI_MODEL_VER = "/model-vers/model-ver";\r
+  private static Logger logger = LoggerFactory.getInstance().getLogger(ArtifactHandler.class.getName());\r
+\r
+\r
+  public ModelArtifactHandler(ModelLoaderConfig config) {\r
+    super(config);\r
+  }\r
+\r
+  @Override\r
+  public boolean pushArtifacts(List<Artifact> artifacts, String distributionID) {\r
+    ModelSorter modelSorter = new ModelSorter();\r
+    List<Artifact> sortedModelArtifacts = modelSorter.sort(artifacts);\r
+\r
+    // Push the ordered list of model artifacts to A&AI.  If one fails, we need to roll back\r
+    // the changes.\r
+    List<ModelArtifact> completedModels = new ArrayList<ModelArtifact>();\r
+    AaiRestClient aaiClient = new AaiRestClient(config);\r
+\r
+    for (Artifact art : sortedModelArtifacts) {\r
+      ModelArtifact model = (ModelArtifact)art;\r
+\r
+      boolean version = model.isV9Artifact();\r
+      //Non - V9 version for models\r
+      if(version == false){\r
+        ClientResponse getResponse = aaiClient.getResource(getModelVerURL(model), distributionID, AaiRestClient.MimeType.XML);\r
+        if ( (getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode()) ) {\r
+          logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, " Artifact format not valid for " + \r
+              model.getType().toString() + "- model-invariant-id[model-id]: " + \r
+              model.getModelInvariantId() + " and model-version-id[model-name-version-id]: "+ \r
+              model.getModelVerId()+ " . Rolling back distribution.");\r
+          return false;\r
+        }\r
+        else{\r
+          completedModels.add(model);\r
+          logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + \r
+              " " + model.getModelInvariantId() + " successfully ingested.");\r
+        }\r
+      }\r
+      else\r
+      {\r
+        ClientResponse getResponse  = aaiClient.getResource(getURL(model), distributionID, AaiRestClient.MimeType.XML);\r
+        if ( (getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode()) ) {\r
+          // Only attempt the PUT if the model doesn't already exist\r
+          ClientResponse putResponse = aaiClient.putResource(getURL(model), model.getPayload(), distributionID, AaiRestClient.MimeType.XML);\r
+          if ( (putResponse != null) && (putResponse.getStatus() == Response.Status.CREATED.getStatusCode()) ) {\r
+            completedModels.add(model);\r
+            logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + \r
+                " " + model.getModelInvariantId() + " successfully ingested.");\r
+          }\r
+          else {\r
+            logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " + \r
+                model.getType().toString() + " " + model.getModelInvariantId() + ". Rolling back distribution.");\r
+\r
+            for (ModelArtifact modelToDelete : completedModels) {\r
+              // Best effort to delete.  Nothing we can do in the event this fails.\r
+              aaiClient.getAndDeleteResource(getURL(modelToDelete), distributionID);\r
+            }\r
+\r
+            return false;\r
+          }\r
+        }\r
+        else {\r
+          logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + " " + model.getModelInvariantId() + \r
+              " already exists.  Skipping ingestion.");\r
+          getResponse  = aaiClient.getResource(getModelVerURL(model), distributionID, AaiRestClient.MimeType.XML);\r
+          if ( (getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode()) ) {\r
+            // Only attempt the PUT if the model-ver doesn't already exist\r
+            ClientResponse putResponse = null;\r
+\r
+            try {\r
+              putResponse = aaiClient.putResource(getModelVerURL(model), nodeToString(model.getModelVer()), distributionID, AaiRestClient.MimeType.XML);\r
+            } catch (TransformerException e) {\r
+              // TODO Auto-generated catch block\r
+              e.printStackTrace();\r
+            }\r
+            if ( (putResponse != null) && (putResponse.getStatus() == Response.Status.CREATED.getStatusCode()) ) {\r
+              completedModels.add(model);\r
+              logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + " " + \r
+                  model.getNameVersionId() + " successfully ingested.");\r
+            }\r
+            else {\r
+              logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " + \r
+                  model.getType().toString() + " " + model.getNameVersionId() + ". Rolling back distribution.");\r
+\r
+              for (ModelArtifact modelToDelete : completedModels) {\r
+                // Best effort to delete.  Nothing we can do in the event this fails.\r
+                aaiClient.getAndDeleteResource(getModelVerURL(modelToDelete), distributionID);\r
+              }\r
+\r
+              return false;\r
+            }\r
+          }\r
+          else {\r
+            logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + " " + \r
+                model.getModelInvariantId() + " already exists.  Skipping ingestion.");\r
+          }\r
+        }\r
+      }\r
+    }\r
+\r
+    return true;\r
+  }\r
+\r
+\r
+  private String nodeToString(Node node) throws TransformerException {\r
+    StringWriter sw = new StringWriter();\r
+    Transformer t = TransformerFactory.newInstance().newTransformer();\r
+    t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");\r
+    t.transform(new DOMSource(node), new StreamResult(sw));\r
+    System.out.println(sw.toString());\r
+    return sw.toString();\r
+  }\r
+\r
+  private String getURL(ModelArtifact model) {\r
+    String baseURL = config.getAaiBaseUrl().trim();\r
+    String subURL = null;\r
+    if (model.getType().equals(ArtifactType.MODEL)) {\r
+      subURL = config.getAaiModelUrl().trim();\r
+    }\r
+    else {\r
+      subURL = config.getAaiNamedQueryUrl().trim();\r
+    }\r
+\r
+    if ( (!baseURL.endsWith("/")) && (!subURL.startsWith("/")) ) {\r
+      baseURL = baseURL + "/";\r
+    }\r
+\r
+    if ( baseURL.endsWith("/") && subURL.startsWith("/") ) {\r
+      baseURL = baseURL.substring(0, baseURL.length()-1);\r
+    }\r
+\r
+    if (!subURL.endsWith("/")) {\r
+      subURL = subURL + "/";\r
+    }\r
+\r
+    String url = baseURL + subURL + model.getModelInvariantId();\r
+    return url;\r
+  }\r
+\r
+  private String getModelVerURL(ModelArtifact model) {\r
+    String baseURL = config.getAaiBaseUrl().trim();\r
+    String subURL = null;\r
+    if (model.getType().equals(ArtifactType.MODEL)) {\r
+      subURL = config.getAaiModelUrl().trim() + model.getModelInvariantId() + AAI_MODEL_VER;\r
+    }\r
+    else {\r
+      subURL = config.getAaiNamedQueryUrl().trim();\r
+    }\r
+\r
+    if ( (!baseURL.endsWith("/")) && (!subURL.startsWith("/")) ) {\r
+      baseURL = baseURL + "/";\r
+    }\r
+\r
+    if ( baseURL.endsWith("/") && subURL.startsWith("/") ) {\r
+      baseURL = baseURL.substring(0, baseURL.length()-1);\r
+    }\r
+\r
+    if (!subURL.endsWith("/")) {\r
+      subURL = subURL + "/";\r
+    }\r
+\r
+    String url = baseURL + subURL + model.getModelVerId();\r
+    System.out.println(url);\r
+    return url;\r
+  }\r
+\r
+  // This method is used for the test REST interface to load models without an ASDC\r
+  public void loadModelTest(byte[] payload) {\r
+    List<Artifact> modelArtifacts = new ArrayList<Artifact>();\r
+    ModelArtifactParser parser = new ModelArtifactParser();\r
+    modelArtifacts.addAll(parser.parse(payload, "Test-Artifact"));\r
+    ModelSorter modelSorter = new ModelSorter();\r
+    List<Artifact> sortedModelArtifacts = modelSorter.sort(modelArtifacts);\r
+    pushArtifacts(sortedModelArtifacts, "Test-Distribution");\r
+  }\r
+}\r
index 625145f..de27924 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.model;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.ArtifactType;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-import org.openecomp.modelloader.util.JsonXmlConverter;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-public class ModelArtifactParser {
-
-  private static String MODELS_ELEMENT = "models";
-  private static String MODEL_ELEMENT = "model";
-  private static String NAMED_QUERIES_ELEMENT = "named-queries";
-  private static String NAMED_QUERY_ELEMENT = "named-query";
-  private static String MODEL_NAME_VERSION_ID = "model-name-version-id";
-  private static String NAMED_QUERY_VERSION_ID = "named-query-uuid";
-  private static String RELATIONSHIP_DATA = "relationship-data";
-  private static String RELATIONSHIP_KEY = "relationship-key";
-  private static String RELATIONSHIP_VALUE = "relationship-value";
-  private static String MODEL_ELEMENT_RELATIONSHIP_KEY = "model.model-name-version-id";
-
-  private static Logger logger = LoggerFactory.getInstance()
-      .getLogger(ModelArtifactParser.class.getName());
-
-  /**
-   * This method parses the given artifact payload in byte array format and
-   * generates a list of model artifacts according to the content.
-   * 
-   * @param artifactPayload
-   *          artifact content to be parsed
-   * @param artifactName
-   *          name of the artifact
-   * @return a list of model artifacts
-   */
-  public List<Artifact> parse(byte[] artifactPayload, String artifactName) {
-    String payload = new String(artifactPayload);
-    List<Artifact> modelList = new ArrayList<Artifact>();
-
-    try {
-      // Artifact could be JSON or XML
-      if (JsonXmlConverter.isValidJson(payload)) {
-        payload = JsonXmlConverter.convertJsonToXml(payload);
-      }
-
-      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-      DocumentBuilder builder = factory.newDocumentBuilder();
-      InputSource is = new InputSource(new StringReader(payload));
-      Document doc = builder.parse(is);
-
-      if ((doc.getDocumentElement().getNodeName().equalsIgnoreCase(MODEL_ELEMENT))
-          || (doc.getDocumentElement().getNodeName().equalsIgnoreCase(NAMED_QUERY_ELEMENT))) {
-        ModelArtifact model = parseModel(doc.getDocumentElement(), payload);
-        if (model != null) {
-          modelList.add(model);
-        } else {
-          // TODO: A WARN message?
-          logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-              "Unable to parse artifact " + artifactName);
-        }
-      } else if ((doc.getDocumentElement().getNodeName().equalsIgnoreCase(MODELS_ELEMENT))
-          || (doc.getDocumentElement().getNodeName().equalsIgnoreCase(NAMED_QUERIES_ELEMENT))) {
-        // The complete set of models/named-queries were contained in this
-        // artifact
-        NodeList nodeList = doc.getDocumentElement().getChildNodes();
-        for (int i = 0; i < nodeList.getLength(); i++) {
-          Node childNode = nodeList.item(i);
-          if ((childNode.getNodeName().equalsIgnoreCase(MODEL_ELEMENT))
-              || (childNode.getNodeName().equalsIgnoreCase(NAMED_QUERY_ELEMENT))) {
-            String modelPayload = nodeToString(childNode);
-            ModelArtifact model = parseModel(childNode, modelPayload);
-            if (model != null) {
-              modelList.add(model);
-            } else {
-              // TODO: A WARN message?
-              logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-                  "Unable to parse artifact " + artifactName);
-              modelList.clear();
-              break;
-            }
-          }
-        }
-      }
-    } catch (Exception ex) {
-      // This may not be an error. We may be receiving an artifact that is
-      // unrelated
-      // to models. In this case, we just ignore it.
-      // TODO: A WARN message?
-      logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-          "Unable to parse artifact " + artifactName + ": " + ex.getLocalizedMessage());
-    }
-
-    return modelList;
-  }
-
-  private ModelArtifact parseModel(Node modelNode, String payload) {
-    ModelArtifact model = new ModelArtifact();
-    model.setPayload(payload);
-
-    if (modelNode.getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) {
-      model.setType(ArtifactType.MODEL);
-    } else {
-      model.setType(ArtifactType.NAMED_QUERY);
-    }
-
-    parseNode(modelNode, model);
-
-    if (model.getNameVersionId() == null) {
-      return null;
-    }
-
-    return model;
-  }
-
-  private void parseNode(Node node, ModelArtifact model) {
-    if (node.getNodeName().equalsIgnoreCase(MODEL_NAME_VERSION_ID)) {
-      model.setNameVersionId(node.getTextContent().trim());
-    } else if (node.getNodeName().equalsIgnoreCase(NAMED_QUERY_VERSION_ID)) {
-      model.setNameVersionId(node.getTextContent().trim());
-    } else if (node.getNodeName().equalsIgnoreCase(RELATIONSHIP_DATA)) {
-      parseRelationshipNode(node, model);
-    } else {
-      NodeList nodeList = node.getChildNodes();
-      for (int i = 0; i < nodeList.getLength(); i++) {
-        Node childNode = nodeList.item(i);
-        parseNode(childNode, model);
-      }
-    }
-  }
-
-  private void parseRelationshipNode(Node node, ModelArtifact model) {
-    String key = null;
-    String value = null;
-
-    NodeList nodeList = node.getChildNodes();
-    for (int i = 0; i < nodeList.getLength(); i++) {
-      Node childNode = nodeList.item(i);
-      if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_KEY)) {
-        key = childNode.getTextContent().trim();
-      } else if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_VALUE)) {
-        value = childNode.getTextContent().trim();
-      }
-    }
-
-    if ((key != null) && (key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY))) {
-      if (value != null) {
-        model.addDependentModelId(value);
-      }
-    }
-  }
-
-  private String nodeToString(Node node) throws TransformerException {
-    StringWriter sw = new StringWriter();
-    Transformer transfomer = TransformerFactory.newInstance().newTransformer();
-    transfomer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
-    transfomer.transform(new DOMSource(node), new StreamResult(sw));
-    return sw.toString();
-  }
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.entity.model;\r
+\r
+import org.openecomp.cl.api.Logger;\r
+import org.openecomp.cl.eelf.LoggerFactory;\r
+import org.openecomp.modelloader.entity.Artifact;\r
+import org.openecomp.modelloader.entity.ArtifactType;\r
+import org.openecomp.modelloader.service.ModelLoaderMsgs;\r
+import org.openecomp.modelloader.util.JsonXmlConverter;\r
+\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Element;\r
+import org.w3c.dom.Node;\r
+import org.w3c.dom.NodeList;\r
+import org.xml.sax.InputSource;\r
+\r
+import java.io.StringReader;\r
+import java.io.StringWriter;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import javax.xml.XMLConstants;\r
+import javax.xml.parsers.DocumentBuilder;\r
+import javax.xml.parsers.DocumentBuilderFactory;\r
+import javax.xml.transform.OutputKeys;\r
+import javax.xml.transform.Transformer;\r
+import javax.xml.transform.TransformerException;\r
+import javax.xml.transform.TransformerFactory;\r
+import javax.xml.transform.dom.DOMSource;\r
+import javax.xml.transform.stream.StreamResult;\r
+\r
+\r
+public class ModelArtifactParser {\r
+\r
+       private static String MODELS_ELEMENT = "models";\r
+       private static String MODEL_ELEMENT = "model";\r
+       private static String NAMED_QUERIES_ELEMENT = "named-queries";\r
+       private static String NAMED_QUERY_ELEMENT = "named-query";\r
+       private static String MODEL_NAME_VERSION_ID = "model-name-version-id";\r
+       private static String MODEL_VER = "model-ver";\r
+       private static String MODEL_VERSION_ID = "model-version-id";\r
+       private static String MODEL_INVARIANT_ID = "model-invariant-id";\r
+       private static String NAMED_QUERY_VERSION_ID = "named-query-uuid";\r
+       private static String RELATIONSHIP_DATA = "relationship-data";\r
+       private static String RELATIONSHIP_KEY = "relationship-key";\r
+       private static String RELATIONSHIP_VALUE = "relationship-value";\r
+       private static String MODEL_ELEMENT_RELATIONSHIP_KEY = "model.model-invariant-id";\r
+       private static String MODEL_VER_ELEMENT_RELATIONSHIP_KEY = "model-ver.model-version-id";\r
+       \r
+       private  static Logger logger = LoggerFactory.getInstance().getLogger(ModelArtifactParser.class.getName());\r
+       \r
+       public List<Artifact> parse(byte[] artifactPayload, String artifactName) {\r
+         String payload = new String(artifactPayload);\r
+         List<Artifact> modelList = new ArrayList<Artifact>();\r
+\r
+         try {\r
+           // Artifact could be JSON or XML\r
+           if (JsonXmlConverter.isValidJson(payload)) {\r
+             payload = JsonXmlConverter.convertJsonToXml(payload);\r
+           }\r
+\r
+           DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\r
+           DocumentBuilder builder = factory.newDocumentBuilder();\r
+           InputSource is = new InputSource(new StringReader(payload));\r
+           Document doc = builder.parse(is);\r
+\r
+           if ( (doc.getDocumentElement().getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) || \r
+               (doc.getDocumentElement().getNodeName().equalsIgnoreCase(NAMED_QUERY_ELEMENT)) ) {\r
+\r
+             ModelArtifact model = parseModel(doc.getDocumentElement(), payload);\r
+\r
+             if (model != null) {\r
+               if ( ArtifactType.MODEL.equals(model.getType())) {\r
+                 logger.info( ModelLoaderMsgs.DISTRIBUTION_EVENT, "Model parsed =====>>>> "\r
+                     + "Model-invariant-Id: "+ model.getModelInvariantId()\r
+                     + " Model-Version-Id: "+ model.getModelVerId());\r
+               }\r
+               modelList.add(model);\r
+             }\r
+             else {\r
+               logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName);\r
+               return null;\r
+             }\r
+           }\r
+           else if ( (doc.getDocumentElement().getNodeName().equalsIgnoreCase(MODELS_ELEMENT)) ||\r
+               (doc.getDocumentElement().getNodeName().equalsIgnoreCase(NAMED_QUERIES_ELEMENT)) ) {\r
+             // The complete set of models/named-queries were contained in this artifact\r
+             NodeList nodeList = doc.getDocumentElement().getChildNodes();\r
+             for (int i = 0; i < nodeList.getLength(); i++) {\r
+               Node childNode = nodeList.item(i);\r
+               if ( (childNode.getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) || \r
+                   (childNode.getNodeName().equalsIgnoreCase(NAMED_QUERY_ELEMENT)) ) {\r
+                 String modelPayload = nodeToString(childNode);\r
+                 ModelArtifact model = parseModel(childNode, modelPayload);\r
+                 if (model != null) {\r
+                   modelList.add(model);\r
+                 }\r
+                 else {\r
+                   logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName);\r
+                   modelList.clear();\r
+                   break;\r
+                 }\r
+               }\r
+             }\r
+           }\r
+         }\r
+         catch (Exception ex) {\r
+           logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName + ": " + ex.getLocalizedMessage());\r
+         }\r
+\r
+         return modelList;\r
+       }\r
+\r
+       private void printDetails(Node modelVer) throws TransformerException {\r
+         logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, nodeToString(modelVer));\r
+       }\r
+\r
+       private ModelArtifact parseModel(Node modelNode, String payload) {\r
+         ModelArtifact model = new ModelArtifact();\r
+         model.setPayload(payload);\r
+\r
+         if (modelNode.getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) {\r
+           //compare with Model-ver\r
+           model.setType(ArtifactType.MODEL);\r
+         }\r
+         else {\r
+           model.setType(ArtifactType.NAMED_QUERY);\r
+         }\r
+\r
+         Element e = (Element)modelNode;\r
+         model.setModelNamespace(e.getAttribute("xmlns"));\r
+\r
+         parseNode(modelNode, model);\r
+\r
+         if (model.getModelInvariantId() == null  && model.getNameVersionId() == null) {\r
+           return null;\r
+         }\r
+\r
+         return model;\r
+       }\r
+\r
+       private void parseNode(Node node, ModelArtifact model) {\r
+\r
+         if(node.getNodeName().equalsIgnoreCase(MODEL_NAME_VERSION_ID)){\r
+           model.setModelVerId(node.getTextContent().trim());\r
+           model.setV9Artifact(false);\r
+         }\r
+         else if(node.getNodeName().equalsIgnoreCase("model-id")){\r
+           model.setModelInvariantId(node.getTextContent().trim());\r
+           model.setV9Artifact(false);\r
+         }\r
+\r
+         else if (node.getNodeName().equalsIgnoreCase(MODEL_INVARIANT_ID)) {\r
+           model.setModelInvariantId(node.getTextContent().trim());\r
+         }\r
+         else if (node.getNodeName().equalsIgnoreCase(MODEL_VERSION_ID)) {\r
+           model.setModelVerId(node.getTextContent().trim());\r
+           //Change to Model Invariant Id\r
+         }\r
+         else if (node.getNodeName().equalsIgnoreCase(NAMED_QUERY_VERSION_ID)) {\r
+           model.setNameVersionId(node.getTextContent().trim());\r
+         }\r
+         else if (node.getNodeName().equalsIgnoreCase(RELATIONSHIP_DATA)) {\r
+           parseRelationshipNode(node, model);\r
+           if(model.getModelModelInvariantId()!=null && model.getModelVerModelVersionId()!=null && !model.getModelModelInvariantId().isEmpty() && !model.getModelVerModelVersionId().isEmpty()){\r
+             model.addDependentModelId(model.getModelModelInvariantId() + "|" + model.getModelVerModelVersionId());\r
+             model.setModelModelInvariantId("");\r
+             model.setModelVerModelVersionId("");\r
+           }\r
+         }\r
+         else {\r
+\r
+           if (node.getNodeName().equalsIgnoreCase(MODEL_VER)) {\r
+             model.setModelVer(node);\r
+             if ( (model.getModelNamespace() != null) && (!model.getModelNamespace().isEmpty()) ) {\r
+               Element e = (Element) node;\r
+               e.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "xmlns", model.getModelNamespace());\r
+               System.out.println("Setting NS: " + e.getAttribute("xmlns"));\r
+             }\r
+           }\r
+\r
+           NodeList nodeList = node.getChildNodes();\r
+\r
+           for (int i = 0; i < nodeList.getLength(); i++) {\r
+             Node childNode = nodeList.item(i); \r
+             parseNode(childNode, model);\r
+           }\r
+         }\r
+       }\r
+\r
+       private void parseRelationshipNode(Node node, ModelArtifact model) {\r
+\r
+         //invariant-id comes before model-version-id .. create a list of values\r
+         String key = null;\r
+         String value = null;\r
+         String modelVersionIdKey=null;\r
+         String modelInvariantIdIdKey=null;\r
+         String modelVersionIdValue=null;\r
+         String modelInvariantIdIdValue=null;\r
+\r
+         NodeList nodeList = node.getChildNodes();\r
+         for (int i = 0; i < nodeList.getLength(); i++) {\r
+           Node childNode = nodeList.item(i);\r
+\r
+\r
+           if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_KEY)) {\r
+             key = childNode.getTextContent().trim();\r
+             if(key.equalsIgnoreCase(MODEL_VER_ELEMENT_RELATIONSHIP_KEY)){\r
+               modelVersionIdKey = key;\r
+             }\r
+             else if(key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY)){\r
+               modelInvariantIdIdKey = key;\r
+             }\r
+           }\r
+           else if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_VALUE)) {\r
+             value = childNode.getTextContent().trim();\r
+             if(modelVersionIdKey!=null){\r
+               modelVersionIdValue = value;\r
+               model.setModelVerModelVersionId(modelVersionIdValue);\r
+             }\r
+             else if(modelInvariantIdIdKey!=null){\r
+               modelInvariantIdIdValue = value;\r
+               model.setModelModelInvariantId(modelInvariantIdIdValue);\r
+             } \r
+\r
+           }\r
+         }\r
+\r
+         if ( (key != null) && (key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY )) && \r
+             (model.isV9Artifact == false ||ArtifactType.NAMED_QUERY.equals(model.getType())) ) {\r
+           if (value != null) {\r
+             model.addDependentModelId(value);\r
+           }\r
+         }\r
+       }\r
+\r
+       private String nodeToString(Node node) throws TransformerException {\r
+         StringWriter sw = new StringWriter();\r
+         Transformer t = TransformerFactory.newInstance().newTransformer();\r
+         t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");\r
+         t.transform(new DOMSource(node), new StreamResult(sw));\r
+         return sw.toString();\r
+       }\r
+}\r
index 4dcda71..79f1c29 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.model;
-
-import jline.internal.Log;
-
-import org.openecomp.modelloader.entity.Artifact;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Utility class to sort the given Models according to their dependencies.
- * Example: Given a list of Models [A, B, C] where B depends on A, and A depends
- * on C, the sorted result will be [C, A, B]
- */
-public class ModelSorter {
-
-  /**
-   * Wraps a Model object to form dependencies other Models using Edges.
-   */
-  static class Node {
-    private final ModelArtifact model;
-    private final HashSet<Edge> inEdges;
-    private final HashSet<Edge> outEdges;
-
-    public Node(ModelArtifact model) {
-      this.model = model;
-      inEdges = new HashSet<Edge>();
-      outEdges = new HashSet<Edge>();
-    }
-
-    public Node addEdge(Node node) {
-      Edge edge = new Edge(this, node);
-      outEdges.add(edge);
-      node.inEdges.add(edge);
-      return this;
-    }
-
-    @Override
-    public String toString() {
-      return model.getNameVersionId();
-    }
-
-    @Override
-    public boolean equals(Object other) {
-      ModelArtifact otherModel = ((Node) other).model;
-      return this.model.getNameVersionId().equals(otherModel.getNameVersionId());
-    }
-
-    @Override
-    public int hashCode() {
-      return this.model.getNameVersionId().hashCode();
-
-    }
-  }
-
-  /**
-   * Represents a dependency between two Nodes.
-   */
-  static class Edge {
-    public final Node from;
-    public final Node to;
-
-    public Edge(Node from, Node to) {
-      this.from = from;
-      this.to = to;
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-      Edge edge = (Edge) obj;
-      return edge.from == from && edge.to == to;
-    }
-  }
-
-  /**
-   * Returns the list of models sorted by order of dependency.
-   * 
-   * @param originalList
-   *          the list that needs to be sorted
-   * @return a list of sorted models
-   */
-  public List<Artifact> sort(List<Artifact> originalList) {
-
-    if (originalList.size() <= 1) {
-      return originalList;
-    }
-
-    Collection<Node> nodes = createNodes(originalList);
-    Collection<Node> sortedNodes = sortNodes(nodes);
-
-    List<Artifact> sortedModelsList = new ArrayList<Artifact>(sortedNodes.size());
-    for (Node node : sortedNodes) {
-      sortedModelsList.add(node.model);
-    }
-
-    return sortedModelsList;
-  }
-
-  /**
-   * Create nodes from the list of models and their dependencies.
-   * 
-   * @param models
-   *          what the nodes creation is based upon
-   * @return Collection of Node objects
-   */
-  private Collection<Node> createNodes(Collection<Artifact> models) {
-
-    // load list of models into a map, so we can later replace referenceIds with
-    // real Models
-    HashMap<String, ModelArtifact> versionIdToModelMap = new HashMap<String, ModelArtifact>();
-    for (Artifact art : models) {
-      ModelArtifact ma = (ModelArtifact) art;
-      versionIdToModelMap.put(ma.getNameVersionId(), ma);
-    }
-
-    HashMap<String, Node> nodes = new HashMap<String, Node>();
-    // create a node for each model and its referenced models
-    for (Artifact art : models) {
-      ModelArtifact model = (ModelArtifact) art;
-
-      // node might have been created by another model referencing it
-      Node node = nodes.get(model.getNameVersionId());
-
-      if (null == node) {
-        node = new Node(model);
-        nodes.put(model.getNameVersionId(), node);
-      }
-
-      for (String referencedModelId : model.getDependentModelIds()) {
-        // node might have been created by another model referencing it
-        Node referencedNode = nodes.get(referencedModelId);
-
-        if (null == referencedNode) {
-          // create node
-          ModelArtifact referencedModel = versionIdToModelMap.get(referencedModelId);
-          if (referencedModel == null) {
-            Log.debug("ignoring " + referencedModelId);
-            continue; // referenced model not supplied, no need to sort it
-          }
-          referencedNode = new Node(referencedModel);
-          nodes.put(referencedModelId, referencedNode);
-        }
-        referencedNode.addEdge(node);
-      }
-    }
-
-    return nodes.values();
-  }
-
-  /**
-   * Sorts the given Nodes by order of dependency.
-   * 
-   * @param originalList
-   *          the collection of nodes to be sorted
-   * @return a sorted collection of the given nodes
-   */
-  private Collection<Node> sortNodes(Collection<Node> unsortedNodes) {
-
-    // L <- Empty list that will contain the sorted elements
-    ArrayList<Node> nodeList = new ArrayList<Node>();
-
-    // S <- Set of all nodes with no incoming edges
-    HashSet<Node> nodeSet = new HashSet<Node>();
-    for (Node unsortedNode : unsortedNodes) {
-      if (unsortedNode.inEdges.size() == 0) {
-        nodeSet.add(unsortedNode);
-      }
-    }
-
-    // while S is non-empty do
-    while (!nodeSet.isEmpty()) {
-      // remove a node n from S
-      Node node = nodeSet.iterator().next();
-      nodeSet.remove(node);
-
-      // insert n into L
-      nodeList.add(node);
-
-      // for each node m with an edge e from n to m do
-      for (Iterator<Edge> it = node.outEdges.iterator(); it.hasNext();) {
-        // remove edge e from the graph
-        Edge edge = it.next();
-        Node to = edge.to;
-        it.remove();// Remove edge from n
-        to.inEdges.remove(edge);// Remove edge from m
-
-        // if m has no other incoming edges then insert m into S
-        if (to.inEdges.isEmpty()) {
-          nodeSet.add(to);
-        }
-      }
-    }
-    // Check to see if all edges are removed
-    boolean cycle = false;
-    for (Node node : unsortedNodes) {
-      if (!node.inEdges.isEmpty()) {
-        cycle = true;
-        break;
-      }
-    }
-    if (cycle) {
-      throw new RuntimeException(
-          "Circular dependency present between models, topological sort not possible");
-    }
-
-    return nodeList;
-  }
-
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.entity.model;\r
+\r
+import jline.internal.Log;\r
+\r
+import org.openecomp.modelloader.entity.Artifact;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+\r
+/**\r
+ * Utility class to sort the given Models according to their dependencies.\r
+ * Example: Given a list of Models [A, B, C] where B depends on A, and A depends\r
+ * on C, the sorted result will be [C, A, B]\r
+ */\r
+public class ModelSorter {\r
+\r
+  /**\r
+   * Wraps a Model object to form dependencies other Models using Edges.\r
+   */\r
+  static class Node {\r
+    private final ModelArtifact model;\r
+    private final HashSet<Edge> inEdges;\r
+    private final HashSet<Edge> outEdges;\r
+\r
+    public Node(ModelArtifact model) {\r
+      this.model = model;\r
+      inEdges = new HashSet<Edge>();\r
+      outEdges = new HashSet<Edge>();\r
+    }\r
+\r
+    public Node addEdge(Node node) {\r
+      Edge edge = new Edge(this, node);\r
+      outEdges.add(edge);\r
+      node.inEdges.add(edge);\r
+      return this;\r
+    }\r
+\r
+    @Override\r
+    public String toString() {\r
+      return model.getModelInvariantId();\r
+    }\r
+\r
+    @Override\r
+    public boolean equals(Object other) {\r
+      ModelArtifact otherModel = ((Node) other).model;\r
+      return this.model.getModelInvariantId().equals(otherModel.getModelInvariantId());\r
+    }\r
+\r
+    @Override\r
+    public int hashCode() {\r
+      return this.model.getModelInvariantId().hashCode();\r
+\r
+    }\r
+  }\r
+\r
+  /**\r
+   * Represents a dependency between two Nodes.\r
+   */\r
+  static class Edge {\r
+    public final Node from;\r
+    public final Node to;\r
+\r
+    public Edge(Node from, Node to) {\r
+      this.from = from;\r
+      this.to = to;\r
+    }\r
+\r
+    @Override\r
+    public boolean equals(Object obj) {\r
+      Edge edge = (Edge) obj;\r
+      return edge.from == from && edge.to == to;\r
+    }\r
+  }\r
+\r
+  /**\r
+   * Returns the list of models sorted by order of dependency.\r
+   * \r
+   * @param originalList\r
+   *          the list that needs to be sorted\r
+   * @return a list of sorted models\r
+   */\r
+  public List<Artifact> sort(List<Artifact> originalList) {\r
+\r
+    if (originalList.size() <= 1) {\r
+      return originalList;\r
+    }\r
+\r
+    Collection<Node> nodes = createNodes(originalList);\r
+    Collection<Node> sortedNodes = sortNodes(nodes);\r
+\r
+    List<Artifact> sortedModelsList = new ArrayList<Artifact>(sortedNodes.size());\r
+    for (Node node : sortedNodes) {\r
+      sortedModelsList.add(node.model);\r
+    }\r
+\r
+    return sortedModelsList;\r
+  }\r
+\r
+  /**\r
+   * Create nodes from the list of models and their dependencies.\r
+   * \r
+   * @param models\r
+   *          what the nodes creation is based upon\r
+   * @return Collection of Node objects\r
+   */\r
+  private Collection<Node> createNodes(Collection<Artifact> models) {\r
+\r
+    // load list of models into a map, so we can later replace referenceIds with\r
+    // real Models\r
+    HashMap<String, ModelArtifact> versionIdToModelMap = new HashMap<String, ModelArtifact>();\r
+    for (Artifact art : models) {\r
+      ModelArtifact ma = (ModelArtifact) art;\r
+      versionIdToModelMap.put(ma.getModelModelVerCombinedKey(), ma);\r
+    }\r
+\r
+    HashMap<String, Node> nodes = new HashMap<String, Node>();\r
+    // create a node for each model and its referenced models\r
+    for (Artifact art : models) {\r
+      ModelArtifact model = (ModelArtifact) art;\r
+\r
+      // node might have been created by another model referencing it\r
+      Node node = nodes.get(model.getModelModelVerCombinedKey());\r
+\r
+      if (null == node) {\r
+        node = new Node(model);\r
+        nodes.put(model.getModelModelVerCombinedKey(), node);\r
+      }\r
+\r
+      for (String referencedModelId : model.getDependentModelIds()) {\r
+        // node might have been created by another model referencing it\r
+        Node referencedNode = nodes.get(referencedModelId);\r
+\r
+        if (null == referencedNode) {\r
+          // create node\r
+          ModelArtifact referencedModel = versionIdToModelMap.get(referencedModelId);\r
+          if (referencedModel == null) {\r
+            Log.debug("ignoring " + referencedModelId);\r
+            continue; // referenced model not supplied, no need to sort it\r
+          }\r
+          referencedNode = new Node(referencedModel);\r
+          nodes.put(referencedModelId, referencedNode);\r
+        }\r
+        referencedNode.addEdge(node);\r
+      }\r
+    }\r
+\r
+    return nodes.values();\r
+  }\r
+\r
+  /**\r
+   * Sorts the given Nodes by order of dependency.\r
+   * \r
+   * @param originalList\r
+   *          the collection of nodes to be sorted\r
+   * @return a sorted collection of the given nodes\r
+   */\r
+  private Collection<Node> sortNodes(Collection<Node> unsortedNodes) {\r
+\r
+    // L <- Empty list that will contain the sorted elements\r
+    ArrayList<Node> nodeList = new ArrayList<Node>();\r
+\r
+    // S <- Set of all nodes with no incoming edges\r
+    HashSet<Node> nodeSet = new HashSet<Node>();\r
+    for (Node unsortedNode : unsortedNodes) {\r
+      if (unsortedNode.inEdges.size() == 0) {\r
+        nodeSet.add(unsortedNode);\r
+      }\r
+    }\r
+\r
+    // while S is non-empty do\r
+    while (!nodeSet.isEmpty()) {\r
+      // remove a node n from S\r
+      Node node = nodeSet.iterator().next();\r
+      nodeSet.remove(node);\r
+\r
+      // insert n into L\r
+      nodeList.add(node);\r
+\r
+      // for each node m with an edge e from n to m do\r
+      for (Iterator<Edge> it = node.outEdges.iterator(); it.hasNext();) {\r
+        // remove edge e from the graph\r
+        Edge edge = it.next();\r
+        Node to = edge.to;\r
+        it.remove();// Remove edge from n\r
+        to.inEdges.remove(edge);// Remove edge from m\r
+\r
+        // if m has no other incoming edges then insert m into S\r
+        if (to.inEdges.isEmpty()) {\r
+          nodeSet.add(to);\r
+        }\r
+      }\r
+    }\r
+    // Check to see if all edges are removed\r
+    boolean cycle = false;\r
+    for (Node node : unsortedNodes) {\r
+      if (!node.inEdges.isEmpty()) {\r
+        cycle = true;\r
+        break;\r
+      }\r
+    }\r
+    if (cycle) {\r
+      throw new RuntimeException(\r
+          "Circular dependency present between models, topological sort not possible");\r
+    }\r
+\r
+    return nodeList;\r
+  }\r
+\r
+}\r
index 6079d5d..0ef2a42 100644 (file)
@@ -1,75 +1,77 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.notification;
-
-import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;
-import org.openecomp.sdc.utils.DistributionStatusEnum;
-
-public class DistributionStatusMsg implements IDistributionStatusMessage {
-  private DistributionStatusEnum status;
-  private String distributionId;
-  private String consumerId;
-  private String artifactUrl;
-
-  /**
-   * Creates a new DistributionStatusMsg instance.
-   * 
-   * @param status         - The distribution status to be reported.
-   * @param distributionId - The identifier of the distribution who's status is being rported on.
-   * @param consumerId     - Identifier of the consumer associated with the distribution.
-   * @param artifactUrl    - Resource identifier for the artifact.
-   */
-  public DistributionStatusMsg(DistributionStatusEnum status, 
-                               String distributionId,
-                               String consumerId, 
-                               String artifactUrl) {
-    this.status = status;
-    this.distributionId = distributionId;
-    this.consumerId = consumerId;
-    this.artifactUrl = artifactUrl;
-  }
-
-  @Override
-  public long getTimestamp() {
-    long currentTimeMillis = System.currentTimeMillis();
-    return currentTimeMillis;
-  }
-
-  @Override
-  public DistributionStatusEnum getStatus() {
-    return status;
-  }
-
-  @Override
-  public String getDistributionID() {
-    return distributionId;
-  }
-
-  @Override
-  public String getConsumerID() {
-    return consumerId;
-  }
-  
-  @Override
-  public String getArtifactURL() {
-    return artifactUrl;
-  }
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.notification;\r
+\r
+import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;\r
+import org.openecomp.sdc.utils.DistributionStatusEnum;\r
+\r
+public class DistributionStatusMsg implements IDistributionStatusMessage {\r
+  private DistributionStatusEnum status;\r
+  private String distributionId;\r
+  private String consumerId;\r
+  private String artifactUrl;\r
+\r
+  /**\r
+   * Creates a new DistributionStatusMsg instance.\r
+   * \r
+   * @param status         - The distribution status to be reported.\r
+   * @param distributionId - The identifier of the distribution who's status is being rported on.\r
+   * @param consumerId     - Identifier of the consumer associated with the distribution.\r
+   * @param artifactUrl    - Resource identifier for the artifact.\r
+   */\r
+  public DistributionStatusMsg(DistributionStatusEnum status, \r
+                               String distributionId,\r
+                               String consumerId, \r
+                               String artifactUrl) {\r
+    this.status = status;\r
+    this.distributionId = distributionId;\r
+    this.consumerId = consumerId;\r
+    this.artifactUrl = artifactUrl;\r
+  }\r
+\r
+  @Override\r
+  public long getTimestamp() {\r
+    long currentTimeMillis = System.currentTimeMillis();\r
+    return currentTimeMillis;\r
+  }\r
+\r
+  @Override\r
+  public DistributionStatusEnum getStatus() {\r
+    return status;\r
+  }\r
+\r
+  @Override\r
+  public String getDistributionID() {\r
+    return distributionId;\r
+  }\r
+\r
+  @Override\r
+  public String getConsumerID() {\r
+    return consumerId;\r
+  }\r
+  \r
+  @Override\r
+  public String getArtifactURL() {\r
+    return artifactUrl;\r
+  }\r
+}\r
index 3b32315..8634741 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.notification;
-
-import org.openecomp.sdc.api.IDistributionClient;
-import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;
-import org.openecomp.sdc.api.consumer.INotificationCallback;
-import org.openecomp.sdc.api.notification.IArtifactInfo;
-import org.openecomp.sdc.api.notification.INotificationData;
-import org.openecomp.sdc.api.notification.IResourceInstance;
-import org.openecomp.sdc.api.results.IDistributionClientDownloadResult;
-import org.openecomp.sdc.api.results.IDistributionClientResult;
-import org.openecomp.sdc.utils.ArtifactTypeEnum;
-import org.openecomp.sdc.utils.DistributionActionResultEnum;
-import org.openecomp.sdc.utils.DistributionStatusEnum;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.cl.mdc.MdcContext;
-import org.openecomp.cl.mdc.MdcOverride;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.catalog.VnfCatalogArtifact;
-import org.openecomp.modelloader.entity.catalog.VnfCatalogArtifactHandler;
-import org.openecomp.modelloader.entity.model.ModelArtifactHandler;
-import org.openecomp.modelloader.entity.model.ModelArtifactParser;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-import org.slf4j.MDC;
-
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.List;
-
-public class EventCallback implements INotificationCallback {
-
-  private IDistributionClient client;
-  private ModelLoaderConfig config;
-  private static Logger logger = LoggerFactory.getInstance()
-      .getLogger(EventCallback.class.getName());
-  private static Logger auditLogger = LoggerFactory.getInstance()
-      .getAuditLogger(EventCallback.class.getName());
-  private static Logger metricsLogger = LoggerFactory.getInstance()
-      .getMetricsLogger(EventCallback.class.getName());
-
-  private static SimpleDateFormat dateFormatter = new SimpleDateFormat(
-      "yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
-
-  public EventCallback(IDistributionClient client, ModelLoaderConfig config) {
-    this.client = client;
-    this.config = config;
-  }
-
-  @Override
-  public void activateCallback(INotificationData data) {
-    // Init MDC
-    MdcContext.initialize(data.getDistributionID(), "ModelLoader", "", "Event-Bus", "");
-
-    logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-        "Received distribution " + data.getDistributionID());
-
-    boolean success = true;
-    List<IArtifactInfo> artifacts = getArtifacts(data);
-    List<Artifact> modelArtifacts = new ArrayList<Artifact>();
-    List<Artifact> catalogArtifacts = new ArrayList<Artifact>();
-    ModelArtifactParser modelArtParser = new ModelArtifactParser();
-
-    for (IArtifactInfo artifact : artifacts) {
-      // Grab the current time so we can measure the download time for the
-      // metrics log
-      long startTimeInMs = System.currentTimeMillis();
-      MdcOverride override = new MdcOverride();
-      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-      // Download Artifact
-      IDistributionClientDownloadResult downloadResult = client.download(artifact);
-
-      // Generate metrics log
-      metricsLogger.info(ModelLoaderMsgs.DOWNLOAD_COMPLETE, null, override,
-          artifact.getArtifactName(), downloadResult.getDistributionActionResult().toString());
-
-      if (downloadResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-        publishDownloadFailure(data, artifact, downloadResult.getDistributionMessageResult());
-        success = false;
-        break;
-      }
-
-      logger.debug("Artifact: " + artifact.getArtifactName() + "  Payload:\n" + new String(downloadResult.getArtifactPayload()));
-      
-      publishDownloadSuccess(data, artifact, downloadResult);
-
-      if ((artifact.getArtifactType()
-          .compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0)
-          || (artifact.getArtifactType()
-              .compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) {
-        modelArtifacts.addAll(modelArtParser.parse(downloadResult.getArtifactPayload(),
-            downloadResult.getArtifactName()));
-      } else if (artifact.getArtifactType()
-          .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) {
-        catalogArtifacts
-            .add(new VnfCatalogArtifact(new String(downloadResult.getArtifactPayload())));
-      }
-    }
-
-    String statusString = "SUCCESS";
-    if (success) {
-      ModelArtifactHandler modelHandler = new ModelArtifactHandler(config);
-      boolean modelDeploySuccess = modelHandler.pushArtifacts(modelArtifacts,
-          data.getDistributionID());
-
-      VnfCatalogArtifactHandler catalogHandler = new VnfCatalogArtifactHandler(config);
-      boolean catalogDeploySuccess = catalogHandler.pushArtifacts(catalogArtifacts,
-          data.getDistributionID());
-
-      for (IArtifactInfo artifact : artifacts) {
-        if ((artifact.getArtifactType()
-            .compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0)
-            || (artifact.getArtifactType()
-                .compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) {
-          if (modelDeploySuccess) {
-            publishDeploySuccess(data, artifact);
-          } else {
-            publishDeployFailure(data, artifact);
-            statusString = "FAILURE";
-          }
-        } else if (artifact.getArtifactType()
-            .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) {
-          if (catalogDeploySuccess) {
-            publishDeploySuccess(data, artifact);
-          } else {
-            publishDeployFailure(data, artifact);
-            statusString = "FAILURE";
-          }
-        }
-      }
-    }
-
-    auditLogger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-        "Processed distribution " + data.getDistributionID() + "  (" + statusString + ")");
-    MDC.clear();
-  }
-
-  private List<IArtifactInfo> getArtifacts(INotificationData data) {
-    List<IArtifactInfo> artifacts = new ArrayList<IArtifactInfo>();
-    List<IResourceInstance> resources = data.getResources();
-
-    if (data.getServiceArtifacts() != null) {
-      artifacts.addAll(data.getServiceArtifacts());
-    }
-
-    if (resources != null) {
-      for (IResourceInstance resource : resources) {
-        if (resource.getArtifacts() != null) {
-          artifacts.addAll(resource.getArtifacts());
-        }
-      }
-    }
-
-    return artifacts;
-  }
-
-  private void publishDownloadFailure(INotificationData data, IArtifactInfo artifact,
-      String errorMessage) {
-    // Grab the current time so we can measure the download time for the metrics
-    // log
-    long startTimeInMs = System.currentTimeMillis();
-    MdcOverride override = new MdcOverride();
-    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-    IDistributionClientResult sendDownloadStatus = client.sendDownloadStatus(
-        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DOWNLOAD_ERROR));
-    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download failure",
-        artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString());
-
-    if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-          "Failed to publish download failure status: "
-              + sendDownloadStatus.getDistributionMessageResult());
-    }
-
-    logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-        "Failed to download artifact " + artifact.getArtifactName() + ": " + errorMessage);
-  }
-
-  private void publishDownloadSuccess(INotificationData data, IArtifactInfo artifact,
-      IDistributionClientDownloadResult downloadResult) {
-    // Grab the current time so we can measure the download time for the metrics
-    // log
-    long startTimeInMs = System.currentTimeMillis();
-    MdcOverride override = new MdcOverride();
-    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-    IDistributionClientResult sendDownloadStatus = client.sendDownloadStatus(
-        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DOWNLOAD_OK));
-    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download success",
-        artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString());
-
-    logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
-        "Downloaded artifact: " + artifact.getArtifactName());
-
-    if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-          "Failed to publish download success status: "
-              + sendDownloadStatus.getDistributionMessageResult());
-    }
-
-    if (logger.isDebugEnabled()) {
-      StringBuilder sb = new StringBuilder();
-      sb.append("Downloaded artifact:\n");
-      sb.append("ArtInfo_Art_Name: " + artifact.getArtifactName());
-      sb.append("\nArtInfo_Art_description: " + artifact.getArtifactDescription());
-      sb.append("\nArtInfo_Art_CheckSum: " + artifact.getArtifactChecksum());
-      sb.append("\nArtInfo_Art_Url: " + artifact.getArtifactURL());
-      sb.append("\nArtInfo_Art_Type: " + artifact.getArtifactType());
-      sb.append("\nArtInfo_Serv_description: " + data.getServiceDescription());
-      sb.append("\nArtInfo_Serv_Name: " + data.getServiceName());
-      sb.append("\nGet_serviceVersion: " + data.getServiceVersion());
-      sb.append("\nGet_Service_UUID: " + data.getServiceUUID());
-      sb.append("\nArtInfo_DistributionId: " + data.getDistributionID());
-      logger.debug(sb.toString());
-    }
-  }
-
-  private void publishDeployFailure(INotificationData data, IArtifactInfo artifact) {
-    // Grab the current time so we can measure the download time for the metrics
-    // log
-    long startTimeInMs = System.currentTimeMillis();
-    MdcOverride override = new MdcOverride();
-    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-    IDistributionClientResult sendStatus = client.sendDeploymentStatus(
-        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DEPLOY_ERROR));
-    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy failure",
-        artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString());
-
-    if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-          "Failed to publish deploy failure status: " + sendStatus.getDistributionMessageResult());
-    }
-  }
-
-  private void publishDeploySuccess(INotificationData data, IArtifactInfo artifact) {
-    // Grab the current time so we can measure the download time for the metrics
-    // log
-    long startTimeInMs = System.currentTimeMillis();
-    MdcOverride override = new MdcOverride();
-    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-    IDistributionClientResult sendStatus = client.sendDownloadStatus(
-        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DEPLOY_OK));
-    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy success",
-        artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString());
-
-    if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,
-          "Failed to publish deploy success status: " + sendStatus.getDistributionMessageResult());
-    }
-  }
-
-  private IDistributionStatusMessage buildStatusMessage(IDistributionClient client,
-      INotificationData data, IArtifactInfo artifact, DistributionStatusEnum status) {
-    IDistributionStatusMessage statusMessage = new DistributionStatusMsg(status,
-        data.getDistributionID(), client.getConfiguration().getConsumerID(),
-        artifact.getArtifactURL());
-
-    return statusMessage;
-  }
-
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.notification;\r
+\r
+import org.openecomp.sdc.api.IDistributionClient;\r
+import org.openecomp.sdc.api.consumer.IDistributionStatusMessage;\r
+import org.openecomp.sdc.api.consumer.INotificationCallback;\r
+import org.openecomp.sdc.api.notification.IArtifactInfo;\r
+import org.openecomp.sdc.api.notification.INotificationData;\r
+import org.openecomp.sdc.api.notification.IResourceInstance;\r
+import org.openecomp.sdc.api.results.IDistributionClientDownloadResult;\r
+import org.openecomp.sdc.api.results.IDistributionClientResult;\r
+import org.openecomp.sdc.utils.ArtifactTypeEnum;\r
+import org.openecomp.sdc.utils.DistributionActionResultEnum;\r
+import org.openecomp.sdc.utils.DistributionStatusEnum;\r
+\r
+import org.openecomp.cl.api.Logger;\r
+import org.openecomp.cl.eelf.LoggerFactory;\r
+import org.openecomp.cl.mdc.MdcContext;\r
+import org.openecomp.cl.mdc.MdcOverride;\r
+import org.openecomp.modelloader.config.ModelLoaderConfig;\r
+import org.openecomp.modelloader.entity.Artifact;\r
+import org.openecomp.modelloader.entity.catalog.VnfCatalogArtifact;\r
+import org.openecomp.modelloader.entity.catalog.VnfCatalogArtifactHandler;\r
+import org.openecomp.modelloader.entity.model.ModelArtifactHandler;\r
+import org.openecomp.modelloader.entity.model.ModelArtifactParser;\r
+import org.openecomp.modelloader.service.ModelLoaderMsgs;\r
+import org.slf4j.MDC;\r
+\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+public class EventCallback implements INotificationCallback {\r
+\r
+  private IDistributionClient client;\r
+  private ModelLoaderConfig config;\r
+  private static Logger logger = LoggerFactory.getInstance()\r
+      .getLogger(EventCallback.class.getName());\r
+  private static Logger auditLogger = LoggerFactory.getInstance()\r
+      .getAuditLogger(EventCallback.class.getName());\r
+  private static Logger metricsLogger = LoggerFactory.getInstance()\r
+      .getMetricsLogger(EventCallback.class.getName());\r
+\r
+  private static SimpleDateFormat dateFormatter = new SimpleDateFormat(\r
+      "yyyy-MM-dd'T'HH:mm:ss.SSSXXX");\r
+\r
+  public EventCallback(IDistributionClient client, ModelLoaderConfig config) {\r
+    this.client = client;\r
+    this.config = config;\r
+  }\r
+\r
+  @Override\r
+  public void activateCallback(INotificationData data) {\r
+    // Init MDC\r
+    MdcContext.initialize(data.getDistributionID(), "ModelLoader", "", "Event-Bus", "");\r
+\r
+    logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,\r
+        "Received distribution " + data.getDistributionID());\r
+\r
+    boolean success = true;\r
+    List<IArtifactInfo> artifacts = getArtifacts(data);\r
+    List<Artifact> modelArtifacts = new ArrayList<Artifact>();\r
+    List<Artifact> catalogArtifacts = new ArrayList<Artifact>();\r
+    ModelArtifactParser modelArtParser = new ModelArtifactParser();\r
+\r
+    for (IArtifactInfo artifact : artifacts) {\r
+      // Grab the current time so we can measure the download time for the\r
+      // metrics log\r
+      long startTimeInMs = System.currentTimeMillis();\r
+      MdcOverride override = new MdcOverride();\r
+      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));\r
+\r
+      // Download Artifact\r
+      IDistributionClientDownloadResult downloadResult = client.download(artifact);\r
+\r
+      // Generate metrics log\r
+      metricsLogger.info(ModelLoaderMsgs.DOWNLOAD_COMPLETE, null, override,\r
+          artifact.getArtifactName(), downloadResult.getDistributionActionResult().toString());\r
+\r
+      if (downloadResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {\r
+        publishDownloadFailure(data, artifact, downloadResult.getDistributionMessageResult());\r
+        success = false;\r
+        break;\r
+      }\r
+\r
+      logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,\r
+               "Downloaded artifact: " + artifact.getArtifactName() + "  Payload:\n" + new String(downloadResult.getArtifactPayload()));\r
+      \r
+      publishDownloadSuccess(data, artifact, downloadResult);\r
+\r
+      if ((artifact.getArtifactType()\r
+          .compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0)\r
+          || (artifact.getArtifactType()\r
+              .compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) {\r
+        List<Artifact> parsedArtifacts = modelArtParser.parse(downloadResult.getArtifactPayload(), downloadResult.getArtifactName());\r
+        if (parsedArtifacts != null && !parsedArtifacts.isEmpty()) {\r
+          modelArtifacts.addAll(parsedArtifacts);\r
+        } else {\r
+          success = false;\r
+          publishDeployFailure(data, artifact);\r
+          break;\r
+        }\r
+      } else if (artifact.getArtifactType()\r
+          .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) {\r
+        catalogArtifacts\r
+            .add(new VnfCatalogArtifact(new String(downloadResult.getArtifactPayload())));\r
+      }\r
+    }\r
+\r
+    String statusString = "SUCCESS";\r
+    if (success) {\r
+      ModelArtifactHandler modelHandler = new ModelArtifactHandler(config);\r
+      boolean modelDeploySuccess = modelHandler.pushArtifacts(modelArtifacts,\r
+          data.getDistributionID());\r
+\r
+      VnfCatalogArtifactHandler catalogHandler = new VnfCatalogArtifactHandler(config);\r
+      boolean catalogDeploySuccess = catalogHandler.pushArtifacts(catalogArtifacts,\r
+          data.getDistributionID());\r
+\r
+      for (IArtifactInfo artifact : artifacts) {\r
+        if ((artifact.getArtifactType()\r
+            .compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()) == 0)\r
+            || (artifact.getArtifactType()\r
+                .compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()) == 0)) {\r
+          if (modelDeploySuccess) {\r
+            publishDeploySuccess(data, artifact);\r
+          } else {\r
+            publishDeployFailure(data, artifact);\r
+            statusString = "FAILURE";\r
+          }\r
+        } else if (artifact.getArtifactType()\r
+            .compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()) == 0) {\r
+          if (catalogDeploySuccess) {\r
+            publishDeploySuccess(data, artifact);\r
+          } else {\r
+            publishDeployFailure(data, artifact);\r
+            statusString = "FAILURE";\r
+          }\r
+        }\r
+      }\r
+    } else {\r
+      statusString = "FAILURE";\r
+    }\r
+\r
+    auditLogger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,\r
+        "Processed distribution " + data.getDistributionID() + "  (" + statusString + ")");\r
+    MDC.clear();\r
+  }\r
+\r
+  private List<IArtifactInfo> getArtifacts(INotificationData data) {\r
+    List<IArtifactInfo> artifacts = new ArrayList<IArtifactInfo>();\r
+    List<IResourceInstance> resources = data.getResources();\r
+\r
+    if (data.getServiceArtifacts() != null) {\r
+      artifacts.addAll(data.getServiceArtifacts());\r
+    }\r
+\r
+    if (resources != null) {\r
+      for (IResourceInstance resource : resources) {\r
+        if (resource.getArtifacts() != null) {\r
+          artifacts.addAll(resource.getArtifacts());\r
+        }\r
+      }\r
+    }\r
+\r
+    return artifacts;\r
+  }\r
+\r
+  private void publishDownloadFailure(INotificationData data, IArtifactInfo artifact,\r
+      String errorMessage) {\r
+    // Grab the current time so we can measure the download time for the metrics\r
+    // log\r
+    long startTimeInMs = System.currentTimeMillis();\r
+    MdcOverride override = new MdcOverride();\r
+    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));\r
+\r
+    IDistributionClientResult sendDownloadStatus = client.sendDownloadStatus(\r
+        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DOWNLOAD_ERROR));\r
+    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download failure",\r
+        artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString());\r
+\r
+    if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {\r
+      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,\r
+          "Failed to publish download failure status: "\r
+              + sendDownloadStatus.getDistributionMessageResult());\r
+    }\r
+\r
+    logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,\r
+        "Failed to download artifact " + artifact.getArtifactName() + ": " + errorMessage);\r
+  }\r
+\r
+  private void publishDownloadSuccess(INotificationData data, IArtifactInfo artifact,\r
+      IDistributionClientDownloadResult downloadResult) {\r
+    // Grab the current time so we can measure the download time for the metrics\r
+    // log\r
+    long startTimeInMs = System.currentTimeMillis();\r
+    MdcOverride override = new MdcOverride();\r
+    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));\r
+\r
+    IDistributionClientResult sendDownloadStatus = client.sendDownloadStatus(\r
+        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DOWNLOAD_OK));\r
+    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "download success",\r
+        artifact.getArtifactName(), sendDownloadStatus.getDistributionActionResult().toString());\r
+\r
+    if (sendDownloadStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {\r
+      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,\r
+          "Failed to publish download success status: "\r
+              + sendDownloadStatus.getDistributionMessageResult());\r
+    }\r
+\r
+    if (logger.isDebugEnabled()) {\r
+      StringBuilder sb = new StringBuilder();\r
+      sb.append("Downloaded artifact:\n");\r
+      sb.append("ArtInfo_Art_Name: " + artifact.getArtifactName());\r
+      sb.append("\nArtInfo_Art_description: " + artifact.getArtifactDescription());\r
+      sb.append("\nArtInfo_Art_CheckSum: " + artifact.getArtifactChecksum());\r
+      sb.append("\nArtInfo_Art_Url: " + artifact.getArtifactURL());\r
+      sb.append("\nArtInfo_Art_Type: " + artifact.getArtifactType());\r
+      sb.append("\nArtInfo_Serv_description: " + data.getServiceDescription());\r
+      sb.append("\nArtInfo_Serv_Name: " + data.getServiceName());\r
+      sb.append("\nGet_serviceVersion: " + data.getServiceVersion());\r
+      sb.append("\nGet_Service_UUID: " + data.getServiceUUID());\r
+      sb.append("\nArtInfo_DistributionId: " + data.getDistributionID());\r
+      logger.debug(sb.toString());\r
+    }\r
+  }\r
+\r
+  private void publishDeployFailure(INotificationData data, IArtifactInfo artifact) {\r
+    // Grab the current time so we can measure the download time for the metrics\r
+    // log\r
+    long startTimeInMs = System.currentTimeMillis();\r
+    MdcOverride override = new MdcOverride();\r
+    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));\r
+\r
+    IDistributionClientResult sendStatus = client.sendDeploymentStatus(\r
+        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DEPLOY_ERROR));\r
+    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy failure",\r
+        artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString());\r
+\r
+    if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {\r
+      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,\r
+          "Failed to publish deploy failure status: " + sendStatus.getDistributionMessageResult());\r
+    }\r
+  }\r
+\r
+  private void publishDeploySuccess(INotificationData data, IArtifactInfo artifact) {\r
+    // Grab the current time so we can measure the download time for the metrics\r
+    // log\r
+    long startTimeInMs = System.currentTimeMillis();\r
+    MdcOverride override = new MdcOverride();\r
+    override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));\r
+\r
+    IDistributionClientResult sendStatus = client.sendDownloadStatus(\r
+        buildStatusMessage(client, data, artifact, DistributionStatusEnum.DEPLOY_OK));\r
+    metricsLogger.info(ModelLoaderMsgs.EVENT_PUBLISHED, null, override, "deploy success",\r
+        artifact.getArtifactName(), sendStatus.getDistributionActionResult().toString());\r
+\r
+    if (sendStatus.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {\r
+      logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR,\r
+          "Failed to publish deploy success status: " + sendStatus.getDistributionMessageResult());\r
+    }\r
+  }\r
+\r
+  private IDistributionStatusMessage buildStatusMessage(IDistributionClient client,\r
+      INotificationData data, IArtifactInfo artifact, DistributionStatusEnum status) {\r
+    IDistributionStatusMessage statusMessage = new DistributionStatusMsg(status,\r
+        data.getDistributionID(), client.getConfiguration().getConsumerID(),\r
+        artifact.getArtifactURL());\r
+\r
+    return statusMessage;\r
+  }\r
+\r
+}\r
index e13bdbd..d4ee738 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.restclient;
-
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.config.ClientConfig;
-import com.sun.jersey.api.client.config.DefaultClientConfig;
-import com.sun.jersey.api.client.filter.LoggingFilter;
-import com.sun.jersey.client.urlconnection.HTTPSProperties;
-import org.openecomp.cl.api.LogFields;
-import org.openecomp.cl.api.LogLine;
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.cl.mdc.MdcContext;
-import org.openecomp.cl.mdc.MdcOverride;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.service.ModelLoaderMsgs;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-
-import java.io.ByteArrayOutputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.io.StringReader;
-import java.security.GeneralSecurityException;
-import java.security.KeyStore;
-import java.security.cert.X509Certificate;
-import java.text.SimpleDateFormat;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.HttpsURLConnection;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSession;
-import javax.net.ssl.TrustManager;
-import javax.net.ssl.X509TrustManager;
-import javax.ws.rs.core.Response;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-public class AaiRestClient {
-  public enum MimeType {
-    XML("application/xml"), JSON("application/json");
-
-    private String httpType;
-
-    MimeType(String httpType) {
-      this.httpType = httpType;
-    }
-
-    String getHttpHeaderType() {
-      return httpType;
-    }
-  }
-
-  private static String HEADER_TRANS_ID = "X-TransactionId";
-  private static String HEADER_FROM_APP_ID = "X-FromAppId";
-  private static String HEADER_AUTHORIZATION = "Authorization";
-  private static String ML_APP_NAME = "ModelLoader";
-  private static String RESOURCE_VERSION_PARAM = "resource-version";
-
-  private static SimpleDateFormat dateFormatter = new SimpleDateFormat(
-      "yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
-
-  private static Logger logger = LoggerFactory.getInstance()
-      .getLogger(AaiRestClient.class.getName());
-  private static Logger metricsLogger = LoggerFactory.getInstance()
-      .getMetricsLogger(AaiRestClient.class.getName());
-
-  private ModelLoaderConfig config = null;
-
-  public AaiRestClient(ModelLoaderConfig config) {
-    this.config = config;
-  }
-
-  /**
-   * Send a PUT request to the A&AI.
-   *
-   * @param url
-   *          - the url
-   * @param transId
-   *          - transaction ID
-   * @param payload
-   *          - the XML or JSON payload for the request
-   * @param mimeType
-   *          - the content type (XML or JSON)
-   * @return ClientResponse
-   */
-  public ClientResponse putResource(String url, String payload, String transId, MimeType mimeType) {
-    ClientResponse result = null;
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    long startTimeInMs = 0;
-    MdcOverride override = new MdcOverride();
-
-    try {
-      Client client = setupClient();
-
-      baos = new ByteArrayOutputStream();
-      PrintStream ps = new PrintStream(baos);
-      if (logger.isDebugEnabled()) {
-        client.addFilter(new LoggingFilter(ps));
-      }
-
-      // Grab the current time so that we can use it for metrics purposes later.
-      startTimeInMs = System.currentTimeMillis();
-      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-      if (useBasicAuth()) {
-        result = client.resource(url).header(HEADER_TRANS_ID, transId)
-            .header(HEADER_FROM_APP_ID, ML_APP_NAME)
-            .header(HEADER_AUTHORIZATION, getAuthenticationCredentials())
-            .type(mimeType.getHttpHeaderType()).put(ClientResponse.class, payload);
-      } else {
-        result = client.resource(url).header(HEADER_TRANS_ID, transId)
-            .header(HEADER_FROM_APP_ID, ML_APP_NAME).type(mimeType.getHttpHeaderType())
-            .put(ClientResponse.class, payload);
-      }
-    } catch (Exception ex) {
-      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "PUT", url, ex.getLocalizedMessage());
-      return null;
-    } finally {
-      if (logger.isDebugEnabled()) {
-        logger.debug(baos.toString());
-      }
-    }
-
-    if ((result != null) && ((result.getStatus() == Response.Status.CREATED.getStatusCode())
-        || (result.getStatus() == Response.Status.OK.getStatusCode()))) {
-      logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS, "PUT", url,
-          Integer.toString(result.getStatus()));
-      metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS,
-          new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus())
-              .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION,
-                  result.getResponseStatus().toString()),
-          override, "PUT", url, Integer.toString(result.getStatus()));
-    } else {
-      // If response is not 200 OK, then additionally log the reason
-      String respMsg = result.getEntity(String.class);
-      if (respMsg == null) {
-        respMsg = result.getStatusInfo().getReasonPhrase();
-      }
-      logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_UNSUCCESSFUL, "PUT", url,
-          Integer.toString(result.getStatus()), respMsg);
-      metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_UNSUCCESSFUL,
-          new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus())
-              .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION,
-                  result.getResponseStatus().toString()),
-          override, "PUT", url, Integer.toString(result.getStatus()), respMsg);
-    }
-
-    return result;
-  }
-
-  /**
-   * Send a DELETE request to the A&AI.
-   *
-   * @param url
-   *          - the url
-   * @param resourceVersion
-   *          - the resource-version of the model to delete
-   * @param transId
-   *          - transaction ID
-   * @return ClientResponse
-   */
-  public ClientResponse deleteResource(String url, String resourceVersion, String transId) {
-    ClientResponse result = null;
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    long startTimeInMs = 0;
-    MdcOverride override = new MdcOverride();
-
-    try {
-      Client client = setupClient();
-
-      baos = new ByteArrayOutputStream();
-      PrintStream ps = new PrintStream(baos);
-      if (logger.isDebugEnabled()) {
-        client.addFilter(new LoggingFilter(ps));
-      }
-
-      // Grab the current time so that we can use it for metrics purposes later.
-      startTimeInMs = System.currentTimeMillis();
-      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-      if (useBasicAuth()) {
-        result = client.resource(url).queryParam(RESOURCE_VERSION_PARAM, resourceVersion)
-            .header(HEADER_TRANS_ID, transId).header(HEADER_FROM_APP_ID, ML_APP_NAME)
-            .header(HEADER_AUTHORIZATION, getAuthenticationCredentials())
-            .delete(ClientResponse.class);
-      } else {
-        result = client.resource(url).queryParam(RESOURCE_VERSION_PARAM, resourceVersion)
-            .header(HEADER_TRANS_ID, transId).header(HEADER_FROM_APP_ID, ML_APP_NAME)
-            .delete(ClientResponse.class);
-      }
-    } catch (Exception ex) {
-      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "DELETE", url, ex.getLocalizedMessage());
-      return null;
-    } finally {
-      if (logger.isDebugEnabled()) {
-        logger.debug(baos.toString());
-      }
-    }
-
-    logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS, "DELETE", url,
-        Integer.toString(result.getStatus()));
-    metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS,
-        new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus()).setField(
-            LogLine.DefinedFields.RESPONSE_DESCRIPTION, result.getResponseStatus().toString()),
-        override, "DELETE", url, Integer.toString(result.getStatus()));
-
-    return result;
-  }
-
-  /**
-   * Send a GET request to the A&AI for a resource.
-   *
-   * @param url
-   *          - the url to use
-   * @param transId
-   *          - transaction ID
-   * @return ClientResponse
-   */
-  public ClientResponse getResource(String url, String transId, MimeType mimeType) {
-    ClientResponse result = null;
-    ByteArrayOutputStream baos = new ByteArrayOutputStream();
-    long startTimeInMs = 0;
-    MdcOverride override = new MdcOverride();
-
-    try {
-      Client client = setupClient();
-
-      baos = new ByteArrayOutputStream();
-      PrintStream ps = new PrintStream(baos);
-      if (logger.isDebugEnabled()) {
-        client.addFilter(new LoggingFilter(ps));
-      }
-
-      // Grab the current time so that we can use it for metrics purposes later.
-      startTimeInMs = System.currentTimeMillis();
-      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));
-
-      if (useBasicAuth()) {
-        result = client.resource(url).header(HEADER_TRANS_ID, transId)
-            .header(HEADER_FROM_APP_ID, ML_APP_NAME).accept(mimeType.getHttpHeaderType())
-            .header(HEADER_AUTHORIZATION, getAuthenticationCredentials()).get(ClientResponse.class);
-      } else {
-        result = client.resource(url).header(HEADER_TRANS_ID, transId)
-            .header(HEADER_FROM_APP_ID, ML_APP_NAME).accept(mimeType.getHttpHeaderType())
-            .get(ClientResponse.class);
-
-      }
-    } catch (Exception ex) {
-      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "GET", url, ex.getLocalizedMessage());
-      return null;
-    } finally {
-      if (logger.isDebugEnabled()) {
-        logger.debug(baos.toString());
-      }
-    }
-
-    logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS, "GET", url,
-        Integer.toString(result.getStatus()));
-    metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS,
-        new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus()).setField(
-            LogLine.DefinedFields.RESPONSE_DESCRIPTION, result.getResponseStatus().toString()),
-        override, "GET", url, Integer.toString(result.getStatus()));
-
-    return result;
-  }
-
-  /**
-   * Does a GET on a resource to retrieve the resource version, and then DELETE
-   * that version.
-   *
-   * @param url
-   *          - the url
-   * @param transId
-   *          - transaction ID
-   * @return ClientResponse
-   */
-  public ClientResponse getAndDeleteResource(String url, String transId) {
-    // First, GET the model
-    ClientResponse getResponse = getResource(url, transId, MimeType.XML);
-    if ((getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode())) {
-      return getResponse;
-    }
-
-    // Delete the model using the resource version in the response
-    String resVersion = null;
-    try {
-      resVersion = getResourceVersion(getResponse);
-    } catch (Exception e) {
-      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "GET", url, e.getLocalizedMessage());
-      return null;
-    }
-
-    return deleteResource(url, resVersion, transId);
-  }
-
-  private Client setupClient() throws IOException, GeneralSecurityException {
-    ClientConfig clientConfig = new DefaultClientConfig();
-
-    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
-      @Override
-      public boolean verify(String string, SSLSession ssls) {
-        return true;
-      }
-    });
-
-    // Create a trust manager that does not validate certificate chains
-    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
-      @Override
-      public X509Certificate[] getAcceptedIssuers() {
-        return null;
-      }
-
-      @Override
-      public void checkClientTrusted(X509Certificate[] certs, String authType) {}
-
-      @Override
-      public void checkServerTrusted(X509Certificate[] certs, String authType) {}
-    } };
-
-    SSLContext ctx = SSLContext.getInstance("TLS");
-    KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
-    FileInputStream fin = new FileInputStream(config.getAaiKeyStorePath());
-    KeyStore ks = KeyStore.getInstance("PKCS12");
-    char[] pwd = config.getAaiKeyStorePassword().toCharArray();
-    ks.load(fin, pwd);
-    kmf.init(ks, pwd);
-
-    ctx.init(kmf.getKeyManagers(), trustAllCerts, null);
-    clientConfig.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,
-        new HTTPSProperties(new HostnameVerifier() {
-          @Override
-          public boolean verify(String theString, SSLSession sslSession) {
-            return true;
-          }
-        }, ctx));
-
-    Client client = Client.create(clientConfig);
-
-    return client;
-  }
-
-  private String getResourceVersion(ClientResponse response)
-      throws ParserConfigurationException, SAXException, IOException {
-    String respData = response.getEntity(String.class);
-
-    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-    DocumentBuilder builder = factory.newDocumentBuilder();
-    InputSource is = new InputSource(new StringReader(respData));
-    Document doc = builder.parse(is);
-
-    NodeList nodeList = doc.getDocumentElement().getChildNodes();
-    for (int i = 0; i < nodeList.getLength(); i++) {
-      Node currentNode = nodeList.item(i);
-      if (currentNode.getNodeName().equals(RESOURCE_VERSION_PARAM)) {
-        return currentNode.getTextContent();
-      }
-    }
-
-    return null;
-  }
-
-  private String getAuthenticationCredentials() {
-
-    String usernameAndPassword = config.getAaiAuthenticationUser() + ":"
-        + config.getAaiAuthenticationPassword();
-    return "Basic " + java.util.Base64.getEncoder().encodeToString(usernameAndPassword.getBytes());
-  }
-
-  public boolean useBasicAuth() {
-    return (config.getAaiAuthenticationUser() != null)
-        && (config.getAaiAuthenticationPassword() != null);
-  }
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.restclient;\r
+\r
+import com.sun.jersey.api.client.Client;\r
+import com.sun.jersey.api.client.ClientResponse;\r
+import com.sun.jersey.api.client.config.ClientConfig;\r
+import com.sun.jersey.api.client.config.DefaultClientConfig;\r
+import com.sun.jersey.api.client.filter.LoggingFilter;\r
+import com.sun.jersey.client.urlconnection.HTTPSProperties;\r
+import org.openecomp.cl.api.LogFields;\r
+import org.openecomp.cl.api.LogLine;\r
+import org.openecomp.cl.api.Logger;\r
+import org.openecomp.cl.eelf.LoggerFactory;\r
+import org.openecomp.cl.mdc.MdcContext;\r
+import org.openecomp.cl.mdc.MdcOverride;\r
+import org.openecomp.modelloader.config.ModelLoaderConfig;\r
+import org.openecomp.modelloader.service.ModelLoaderMsgs;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Node;\r
+import org.w3c.dom.NodeList;\r
+import org.xml.sax.InputSource;\r
+import org.xml.sax.SAXException;\r
+\r
+import java.io.ByteArrayOutputStream;\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.io.PrintStream;\r
+import java.io.StringReader;\r
+import java.security.GeneralSecurityException;\r
+import java.security.KeyStore;\r
+import java.security.cert.X509Certificate;\r
+import java.text.SimpleDateFormat;\r
+\r
+import javax.net.ssl.HostnameVerifier;\r
+import javax.net.ssl.HttpsURLConnection;\r
+import javax.net.ssl.KeyManagerFactory;\r
+import javax.net.ssl.SSLContext;\r
+import javax.net.ssl.SSLSession;\r
+import javax.net.ssl.TrustManager;\r
+import javax.net.ssl.X509TrustManager;\r
+import javax.ws.rs.core.Response;\r
+import javax.xml.parsers.DocumentBuilder;\r
+import javax.xml.parsers.DocumentBuilderFactory;\r
+import javax.xml.parsers.ParserConfigurationException;\r
+\r
+public class AaiRestClient {\r
+  public enum MimeType {\r
+    XML("application/xml"), JSON("application/json");\r
+\r
+    private String httpType;\r
+\r
+    MimeType(String httpType) {\r
+      this.httpType = httpType;\r
+    }\r
+\r
+    String getHttpHeaderType() {\r
+      return httpType;\r
+    }\r
+  }\r
+\r
+  private static String HEADER_TRANS_ID = "X-TransactionId";\r
+  private static String HEADER_FROM_APP_ID = "X-FromAppId";\r
+  private static String HEADER_AUTHORIZATION = "Authorization";\r
+  private static String ML_APP_NAME = "ModelLoader";\r
+  private static String RESOURCE_VERSION_PARAM = "resource-version";\r
+\r
+  private static SimpleDateFormat dateFormatter = new SimpleDateFormat(\r
+      "yyyy-MM-dd'T'HH:mm:ss.SSSXXX");\r
+\r
+  private static Logger logger = LoggerFactory.getInstance()\r
+      .getLogger(AaiRestClient.class.getName());\r
+  private static Logger metricsLogger = LoggerFactory.getInstance()\r
+      .getMetricsLogger(AaiRestClient.class.getName());\r
+\r
+  private ModelLoaderConfig config = null;\r
+\r
+  public AaiRestClient(ModelLoaderConfig config) {\r
+    this.config = config;\r
+  }\r
+\r
+  /**\r
+   * Send a PUT request to the A&AI.\r
+   *\r
+   * @param url\r
+   *          - the url\r
+   * @param transId\r
+   *          - transaction ID\r
+   * @param payload\r
+   *          - the XML or JSON payload for the request\r
+   * @param mimeType\r
+   *          - the content type (XML or JSON)\r
+   * @return ClientResponse\r
+   */\r
+  public ClientResponse putResource(String url, String payload, String transId, MimeType mimeType) {\r
+    ClientResponse result = null;\r
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();\r
+    long startTimeInMs = 0;\r
+    MdcOverride override = new MdcOverride();\r
+\r
+    try {\r
+      Client client = setupClient();\r
+\r
+      baos = new ByteArrayOutputStream();\r
+      PrintStream ps = new PrintStream(baos);\r
+      if (logger.isDebugEnabled()) {\r
+        client.addFilter(new LoggingFilter(ps));\r
+      }\r
+\r
+      // Grab the current time so that we can use it for metrics purposes later.\r
+      startTimeInMs = System.currentTimeMillis();\r
+      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));\r
+\r
+      if (useBasicAuth()) {\r
+        result = client.resource(url).header(HEADER_TRANS_ID, transId)\r
+            .header(HEADER_FROM_APP_ID, ML_APP_NAME)\r
+            .header(HEADER_AUTHORIZATION, getAuthenticationCredentials())\r
+            .type(mimeType.getHttpHeaderType()).put(ClientResponse.class, payload);\r
+      } else {\r
+        result = client.resource(url).header(HEADER_TRANS_ID, transId)\r
+            .header(HEADER_FROM_APP_ID, ML_APP_NAME).type(mimeType.getHttpHeaderType())\r
+            .put(ClientResponse.class, payload);\r
+      }\r
+    } catch (Exception ex) {\r
+      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "PUT", url, ex.getLocalizedMessage());\r
+      return null;\r
+    } finally {\r
+      if (logger.isDebugEnabled()) {\r
+        logger.debug(baos.toString());\r
+      }\r
+    }\r
+\r
+    if ((result != null) && ((result.getStatus() == Response.Status.CREATED.getStatusCode())\r
+        || (result.getStatus() == Response.Status.OK.getStatusCode()))) {\r
+      logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS, "PUT", url,\r
+          Integer.toString(result.getStatus()));\r
+      metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS,\r
+          new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus())\r
+              .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION,\r
+                  result.getResponseStatus().toString()),\r
+          override, "PUT", url, Integer.toString(result.getStatus()));\r
+    } else {\r
+      // If response is not 200 OK, then additionally log the reason\r
+      String respMsg = result.getEntity(String.class);\r
+      if (respMsg == null) {\r
+        respMsg = result.getStatusInfo().getReasonPhrase();\r
+      }\r
+      logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_UNSUCCESSFUL, "PUT", url,\r
+          Integer.toString(result.getStatus()), respMsg);\r
+      metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_UNSUCCESSFUL,\r
+          new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus())\r
+              .setField(LogLine.DefinedFields.RESPONSE_DESCRIPTION,\r
+                  result.getResponseStatus().toString()),\r
+          override, "PUT", url, Integer.toString(result.getStatus()), respMsg);\r
+    }\r
+\r
+    return result;\r
+  }\r
+\r
+  /**\r
+   * Send a DELETE request to the A&AI.\r
+   *\r
+   * @param url\r
+   *          - the url\r
+   * @param resourceVersion\r
+   *          - the resource-version of the model to delete\r
+   * @param transId\r
+   *          - transaction ID\r
+   * @return ClientResponse\r
+   */\r
+  public ClientResponse deleteResource(String url, String resourceVersion, String transId) {\r
+    ClientResponse result = null;\r
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();\r
+    long startTimeInMs = 0;\r
+    MdcOverride override = new MdcOverride();\r
+\r
+    try {\r
+      Client client = setupClient();\r
+\r
+      baos = new ByteArrayOutputStream();\r
+      PrintStream ps = new PrintStream(baos);\r
+      if (logger.isDebugEnabled()) {\r
+        client.addFilter(new LoggingFilter(ps));\r
+      }\r
+\r
+      // Grab the current time so that we can use it for metrics purposes later.\r
+      startTimeInMs = System.currentTimeMillis();\r
+      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));\r
+\r
+      if (useBasicAuth()) {\r
+        result = client.resource(url).queryParam(RESOURCE_VERSION_PARAM, resourceVersion)\r
+            .header(HEADER_TRANS_ID, transId).header(HEADER_FROM_APP_ID, ML_APP_NAME)\r
+            .header(HEADER_AUTHORIZATION, getAuthenticationCredentials())\r
+            .delete(ClientResponse.class);\r
+      } else {\r
+        result = client.resource(url).queryParam(RESOURCE_VERSION_PARAM, resourceVersion)\r
+            .header(HEADER_TRANS_ID, transId).header(HEADER_FROM_APP_ID, ML_APP_NAME)\r
+            .delete(ClientResponse.class);\r
+      }\r
+    } catch (Exception ex) {\r
+      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "DELETE", url, ex.getLocalizedMessage());\r
+      return null;\r
+    } finally {\r
+      if (logger.isDebugEnabled()) {\r
+        logger.debug(baos.toString());\r
+      }\r
+    }\r
+\r
+    logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS, "DELETE", url,\r
+        Integer.toString(result.getStatus()));\r
+    metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS,\r
+        new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus()).setField(\r
+            LogLine.DefinedFields.RESPONSE_DESCRIPTION, result.getResponseStatus().toString()),\r
+        override, "DELETE", url, Integer.toString(result.getStatus()));\r
+\r
+    return result;\r
+  }\r
+\r
+  /**\r
+   * Send a GET request to the A&AI for a resource.\r
+   *\r
+   * @param url\r
+   *          - the url to use\r
+   * @param transId\r
+   *          - transaction ID\r
+   * @return ClientResponse\r
+   */\r
+  public ClientResponse getResource(String url, String transId, MimeType mimeType) {\r
+    ClientResponse result = null;\r
+    ByteArrayOutputStream baos = new ByteArrayOutputStream();\r
+    long startTimeInMs = 0;\r
+    MdcOverride override = new MdcOverride();\r
+\r
+    try {\r
+      Client client = setupClient();\r
+\r
+      baos = new ByteArrayOutputStream();\r
+      PrintStream ps = new PrintStream(baos);\r
+      if (logger.isDebugEnabled()) {\r
+        client.addFilter(new LoggingFilter(ps));\r
+      }\r
+\r
+      // Grab the current time so that we can use it for metrics purposes later.\r
+      startTimeInMs = System.currentTimeMillis();\r
+      override.addAttribute(MdcContext.MDC_START_TIME, dateFormatter.format(startTimeInMs));\r
+\r
+      if (useBasicAuth()) {\r
+        result = client.resource(url).header(HEADER_TRANS_ID, transId)\r
+            .header(HEADER_FROM_APP_ID, ML_APP_NAME).accept(mimeType.getHttpHeaderType())\r
+            .header(HEADER_AUTHORIZATION, getAuthenticationCredentials()).get(ClientResponse.class);\r
+      } else {\r
+        result = client.resource(url).header(HEADER_TRANS_ID, transId)\r
+            .header(HEADER_FROM_APP_ID, ML_APP_NAME).accept(mimeType.getHttpHeaderType())\r
+            .get(ClientResponse.class);\r
+\r
+      }\r
+    } catch (Exception ex) {\r
+      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "GET", url, ex.getLocalizedMessage());\r
+      return null;\r
+    } finally {\r
+      if (logger.isDebugEnabled()) {\r
+        logger.debug(baos.toString());\r
+      }\r
+    }\r
+\r
+    logger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS, "GET", url,\r
+        Integer.toString(result.getStatus()));\r
+    metricsLogger.info(ModelLoaderMsgs.AAI_REST_REQUEST_SUCCESS,\r
+        new LogFields().setField(LogLine.DefinedFields.RESPONSE_CODE, result.getStatus()).setField(\r
+            LogLine.DefinedFields.RESPONSE_DESCRIPTION, result.getResponseStatus().toString()),\r
+        override, "GET", url, Integer.toString(result.getStatus()));\r
+\r
+    return result;\r
+  }\r
+\r
+  /**\r
+   * Does a GET on a resource to retrieve the resource version, and then DELETE\r
+   * that version.\r
+   *\r
+   * @param url\r
+   *          - the url\r
+   * @param transId\r
+   *          - transaction ID\r
+   * @return ClientResponse\r
+   */\r
+  public ClientResponse getAndDeleteResource(String url, String transId) {\r
+    // First, GET the model\r
+    ClientResponse getResponse = getResource(url, transId, MimeType.XML);\r
+    if ((getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode())) {\r
+      return getResponse;\r
+    }\r
+\r
+    // Delete the model using the resource version in the response\r
+    String resVersion = null;\r
+    try {\r
+      resVersion = getResourceVersion(getResponse);\r
+    } catch (Exception e) {\r
+      logger.error(ModelLoaderMsgs.AAI_REST_REQUEST_ERROR, "GET", url, e.getLocalizedMessage());\r
+      return null;\r
+    }\r
+\r
+    return deleteResource(url, resVersion, transId);\r
+  }\r
+\r
+  private Client setupClient() throws IOException, GeneralSecurityException {\r
+    ClientConfig clientConfig = new DefaultClientConfig();\r
+\r
+    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {\r
+      @Override\r
+      public boolean verify(String string, SSLSession ssls) {\r
+        return true;\r
+      }\r
+    });\r
+\r
+    // Create a trust manager that does not validate certificate chains\r
+    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {\r
+      @Override\r
+      public X509Certificate[] getAcceptedIssuers() {\r
+        return null;\r
+      }\r
+\r
+      @Override\r
+      public void checkClientTrusted(X509Certificate[] certs, String authType) {}\r
+\r
+      @Override\r
+      public void checkServerTrusted(X509Certificate[] certs, String authType) {}\r
+    } };\r
+\r
+    SSLContext ctx = SSLContext.getInstance("TLS");\r
+    KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");\r
+    FileInputStream fin = new FileInputStream(config.getAaiKeyStorePath());\r
+    KeyStore ks = KeyStore.getInstance("PKCS12");\r
+    char[] pwd = config.getAaiKeyStorePassword().toCharArray();\r
+    ks.load(fin, pwd);\r
+    kmf.init(ks, pwd);\r
+\r
+    ctx.init(kmf.getKeyManagers(), trustAllCerts, null);\r
+    clientConfig.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES,\r
+        new HTTPSProperties(new HostnameVerifier() {\r
+          @Override\r
+          public boolean verify(String theString, SSLSession sslSession) {\r
+            return true;\r
+          }\r
+        }, ctx));\r
+\r
+    Client client = Client.create(clientConfig);\r
+\r
+    return client;\r
+  }\r
+\r
+  private String getResourceVersion(ClientResponse response)\r
+      throws ParserConfigurationException, SAXException, IOException {\r
+    String respData = response.getEntity(String.class);\r
+\r
+    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\r
+    DocumentBuilder builder = factory.newDocumentBuilder();\r
+    InputSource is = new InputSource(new StringReader(respData));\r
+    Document doc = builder.parse(is);\r
+\r
+    NodeList nodeList = doc.getDocumentElement().getChildNodes();\r
+    for (int i = 0; i < nodeList.getLength(); i++) {\r
+      Node currentNode = nodeList.item(i);\r
+      if (currentNode.getNodeName().equals(RESOURCE_VERSION_PARAM)) {\r
+        return currentNode.getTextContent();\r
+      }\r
+    }\r
+\r
+    return null;\r
+  }\r
+\r
+  private String getAuthenticationCredentials() {\r
+\r
+    String usernameAndPassword = config.getAaiAuthenticationUser() + ":"\r
+        + config.getAaiAuthenticationPassword();\r
+    return "Basic " + java.util.Base64.getEncoder().encodeToString(usernameAndPassword.getBytes());\r
+  }\r
+\r
+  public boolean useBasicAuth() {\r
+    return (config.getAaiAuthenticationUser() != null)\r
+        && (config.getAaiAuthenticationPassword() != null);\r
+  }\r
+}\r
index 689115e..99c5735 100644 (file)
@@ -1,53 +1,55 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.service;
-
-import java.io.IOException;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.Response;
-
-public interface ModelLoaderInterface {
-
-  @GET
-  @Path("/loadModel/{modelid}")
-  public Response loadModel(@PathParam("modelid") String modelid);
-
-  @PUT
-  @Path("/saveModel/{modelid}/{modelname}")
-  public Response saveModel(@PathParam("modelid") String modelid,
-      @PathParam("modelname") String modelname);
-
-  @POST
-  @Consumes("application/xml")
-  @Produces("application/xml")
-  @Path("/ingestModel/{modelid}")
-  public Response ingestModel(@PathParam("modelid") String modelid, @Context HttpServletRequest req,
-      String payload) throws IOException;
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.service;\r
+\r
+import java.io.IOException;\r
+\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.ws.rs.Consumes;\r
+import javax.ws.rs.GET;\r
+import javax.ws.rs.POST;\r
+import javax.ws.rs.PUT;\r
+import javax.ws.rs.Path;\r
+import javax.ws.rs.PathParam;\r
+import javax.ws.rs.Produces;\r
+import javax.ws.rs.core.Context;\r
+import javax.ws.rs.core.Response;\r
+\r
+public interface ModelLoaderInterface {\r
+\r
+  @GET\r
+  @Path("/loadModel/{modelid}")\r
+  public Response loadModel(@PathParam("modelid") String modelid);\r
+\r
+  @PUT\r
+  @Path("/saveModel/{modelid}/{modelname}")\r
+  public Response saveModel(@PathParam("modelid") String modelid,\r
+      @PathParam("modelname") String modelname);\r
+\r
+  @POST\r
+  @Consumes("application/xml")\r
+  @Produces("application/xml")\r
+  @Path("/ingestModel/{modelid}")\r
+  public Response ingestModel(@PathParam("modelid") String modelid, @Context HttpServletRequest req,\r
+      String payload) throws IOException;\r
+}\r
index b81c541..2d3137b 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.service;
-
-import com.att.eelf.i18n.EELFResourceManager;
-
-import org.openecomp.cl.eelf.LogMessageEnum;
-
-public enum ModelLoaderMsgs implements LogMessageEnum {
-
-  /**
-   * Arguments: None.
-   */
-  LOADING_CONFIGURATION,
-
-  /**
-   * Arguments: None.
-   */
-  STOPPING_CLIENT,
-
-  /**
-   * Arguments: {0} = message.
-   */
-  INITIALIZING,
-
-  /**
-   * Arguments: {0} = reason.
-   */
-  ASDC_CONNECTION_ERROR,
-
-  /**
-   * Arguments: {0} = message.
-   */
-  DISTRIBUTION_EVENT,
-
-  /**
-   * Arguments: {0} = error message.
-   */
-  DISTRIBUTION_EVENT_ERROR, 
-  
-  /**
-    * Arguments: {0} = request type.
-    *            {1} = endpoint. 
-    *            {2} = result code.
-    */
-  AAI_REST_REQUEST_SUCCESS,
-
-  /**
-   * Arguments: {0} = request type. 
-   *            {1} = endpoint. 
-   *            {2} = result code. 
-   *            {3} = result.
-   * message
-   */
-  AAI_REST_REQUEST_UNSUCCESSFUL,
-
-  /**
-   * Arguments: {0} = request type. 
-   *            {1} = endpoint.
-   *            {2} = error message.
-   */
-  AAI_REST_REQUEST_ERROR,
-
-  /**
-   * Arguments: {0} = artifact name. 
-   *            {1} = result.
-   */
-  DOWNLOAD_COMPLETE,
-
-  /**
-   * Arguments: {0} = event. 
-   *            {1} = artifact name. 
-   *            {2} = result.
-   */
-  EVENT_PUBLISHED;
-
-  /**
-   * Load message bundle (ModelLoaderMsgs.properties file)
-   */
-  static {
-    EELFResourceManager.loadMessageBundle("org/openecomp/modelloader/service/ModelLoaderMsgs");
-  }
-
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.service;\r
+\r
+import com.att.eelf.i18n.EELFResourceManager;\r
+\r
+import org.openecomp.cl.eelf.LogMessageEnum;\r
+\r
+public enum ModelLoaderMsgs implements LogMessageEnum {\r
+\r
+  /**\r
+   * Arguments: None.\r
+   */\r
+  LOADING_CONFIGURATION,\r
+\r
+  /**\r
+   * Arguments: None.\r
+   */\r
+  STOPPING_CLIENT,\r
+\r
+  /**\r
+   * Arguments: {0} = message.\r
+   */\r
+  INITIALIZING,\r
+\r
+  /**\r
+   * Arguments: {0} = reason.\r
+   */\r
+  ASDC_CONNECTION_ERROR,\r
+\r
+  /**\r
+   * Arguments: {0} = message.\r
+   */\r
+  DISTRIBUTION_EVENT,\r
+\r
+  /**\r
+   * Arguments: {0} = error message.\r
+   */\r
+  DISTRIBUTION_EVENT_ERROR, \r
+  \r
+  /**\r
+    * Arguments: {0} = request type.\r
+    *            {1} = endpoint. \r
+    *            {2} = result code.\r
+    */\r
+  AAI_REST_REQUEST_SUCCESS,\r
+\r
+  /**\r
+   * Arguments: {0} = request type. \r
+   *            {1} = endpoint. \r
+   *            {2} = result code. \r
+   *            {3} = result.\r
+   * message\r
+   */\r
+  AAI_REST_REQUEST_UNSUCCESSFUL,\r
+\r
+  /**\r
+   * Arguments: {0} = request type. \r
+   *            {1} = endpoint.\r
+   *            {2} = error message.\r
+   */\r
+  AAI_REST_REQUEST_ERROR,\r
+\r
+  /**\r
+   * Arguments:\r
+   * {0} = artifact name\r
+   */\r
+  ARTIFACT_PARSE_ERROR,\r
+  \r
+  /**\r
+   * Arguments: {0} = artifact name. \r
+   *            {1} = result.\r
+   */\r
+  DOWNLOAD_COMPLETE,\r
+\r
+  /**\r
+   * Arguments: {0} = event. \r
+   *            {1} = artifact name. \r
+   *            {2} = result.\r
+   */\r
+  EVENT_PUBLISHED;\r
+\r
+  /**\r
+   * Load message bundle (ModelLoaderMsgs.properties file)\r
+   */\r
+  static {\r
+    EELFResourceManager.loadMessageBundle("org/openecomp/modelloader/service/ModelLoaderMsgs");\r
+  }\r
+\r
+}\r
index 16aba7e..118cd18 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.service;
-
-import org.openecomp.sdc.api.IDistributionClient;
-import org.openecomp.sdc.api.results.IDistributionClientResult;
-import org.openecomp.sdc.impl.DistributionClientFactory;
-import org.openecomp.sdc.utils.DistributionActionResultEnum;
-
-import org.openecomp.cl.api.Logger;
-import org.openecomp.cl.eelf.LoggerFactory;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.model.ModelArtifactHandler;
-import org.openecomp.modelloader.notification.EventCallback;
-
-import java.io.IOException;
-import java.util.Properties;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.core.Response;
-
-/**
- * Service class in charge of managing the negotiating model loading
- * capabilities between AAI and an ASDC.
- */
-public class ModelLoaderService implements ModelLoaderInterface {
-
-  protected static String CONFIG_FILE = "model-loader.properties";
-
-  private IDistributionClient client;
-  private ModelLoaderConfig config;
-
-  static Logger logger = LoggerFactory.getInstance().getLogger(ModelLoaderService.class.getName());
-
-  /**
-   * Responsible for loading configuration files and calling initialization.
-   */
-  @PostConstruct
-  protected void start() {
-    // Load model loader system configuration
-    logger.info(ModelLoaderMsgs.LOADING_CONFIGURATION);
-    Properties configProperties = new Properties();
-    try {
-      configProperties.load(this.getClass().getClassLoader().getResourceAsStream(CONFIG_FILE));
-    } catch (IOException e) {
-      String errorMsg = "Failed to load configuration: " + e.getMessage();
-      logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
-      shutdown();
-    }
-    
-    config = new ModelLoaderConfig(configProperties);
-    init();
-  }
-
-  /**
-   * Responsible for stopping the connection to the distribution client before
-   * the resource is destroyed.
-   */
-  @PreDestroy
-  protected void preShutdownOperations() {
-    logger.info(ModelLoaderMsgs.STOPPING_CLIENT);
-    if (client != null) {
-      client.stop();
-    }
-  }
-
-  /**
-   * Responsible for loading configuration files, initializing model
-   * distribution clients, and starting them.
-   */
-  protected void init() {
-    // Initialize distribution client
-    logger.debug(ModelLoaderMsgs.INITIALIZING, "Initializing distribution client...");
-    client = DistributionClientFactory.createDistributionClient();
-    IDistributionClientResult initResult = client.init(config, new EventCallback(client, config));
-    if (initResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      String errorMsg = "Failed to initialize distribution client: "
-          + initResult.getDistributionMessageResult();
-      logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
-      shutdown();
-    }
-
-    // Start distribution client
-    logger.debug(ModelLoaderMsgs.INITIALIZING, "Starting distribution client...");
-    IDistributionClientResult startResult = client.start();
-    if (startResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-      String errorMsg = "Failed to start distribution client: "
-          + startResult.getDistributionMessageResult();
-      logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
-      shutdown();
-    }
-
-    logger.debug(ModelLoaderMsgs.INITIALIZING,
-        "Succcessfully loaded service: " + this.getClass().getSimpleName());
-  }
-
-  /**
-   * Shut down the process.
-   */
-  private void shutdown() {
-    preShutdownOperations();
-
-    // TODO: Find a better way to shut down the model loader.
-    try {
-      // Give logs time to write to file
-      Thread.sleep(2000);
-    } catch (InterruptedException e) {
-      // Nothing we can do at this point
-    }
-
-    Runtime.getRuntime().halt(1);
-  }
-
-  /** (non-Javadoc)
-   * @see org.openecomp.modelloader.service.ModelLoaderInterface#loadModel(java.lang.String)
-   */
-  @Override
-  public Response loadModel(String modelid) {
-    Response response = Response.ok("{\"model_loaded\":\"" + modelid + "\"}").build();
-
-    return response;
-  }
-
-  /** (non-Javadoc)
-   * @see org.openecomp.modelloader.service.ModelLoaderInterface#saveModel(java.lang.String, java.lang.String)
-   */
-  @Override
-  public Response saveModel(String modelid, String modelname) {
-    Response response = Response.ok("{\"model_saved\":\"" + modelid + "-" + modelname + "\"}")
-        .build();
-
-    return response;
-  }
-
-  @Override
-  public Response ingestModel(String modelid, HttpServletRequest req, String payload)
-      throws IOException {
-    Response response;
-
-    if (config.getIngestSimulatorEnabled()) {
-      logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Received test artifact");
-
-      ModelArtifactHandler handler = new ModelArtifactHandler(config);
-      handler.loadModelTest(payload.getBytes());
-
-      response = Response.ok().build();
-    } else {
-      logger.debug("Simulation interface disabled");
-      response = Response.serverError().build();
-    }
-
-    return response;
-  }
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.service;\r
+\r
+import org.openecomp.sdc.api.IDistributionClient;\r
+import org.openecomp.sdc.api.results.IDistributionClientResult;\r
+import org.openecomp.sdc.impl.DistributionClientFactory;\r
+import org.openecomp.sdc.utils.DistributionActionResultEnum;\r
+\r
+import org.openecomp.cl.api.Logger;\r
+import org.openecomp.cl.eelf.LoggerFactory;\r
+import org.openecomp.modelloader.config.ModelLoaderConfig;\r
+import org.openecomp.modelloader.entity.model.ModelArtifactHandler;\r
+import org.openecomp.modelloader.notification.EventCallback;\r
+\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.util.Properties;\r
+\r
+import javax.annotation.PreDestroy;\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.ws.rs.core.Response;\r
+\r
+/**\r
+ * Service class in charge of managing the negotiating model loading\r
+ * capabilities between AAI and an ASDC.\r
+ */\r
+public class ModelLoaderService implements ModelLoaderInterface {\r
+       \r
+       protected static final String FILESEP = (System.getProperty("file.separator") == null) ? "/"\r
+            : System.getProperty("file.separator");\r
+\r
+       protected static final String CONFIG_DIR = System.getProperty("CONFIG_HOME") + FILESEP;\r
+       protected static final String CONFIG_AUTH_LOCATION = CONFIG_DIR + "auth" + FILESEP;\r
+       protected static final String CONFIG_FILE = CONFIG_DIR + "model-loader.properties";\r
+\r
+       private IDistributionClient client;\r
+       private ModelLoaderConfig config;\r
+\r
+       static Logger logger = LoggerFactory.getInstance().getLogger(ModelLoaderService.class.getName());\r
+\r
+       /**\r
+        * Responsible for loading configuration files and calling initialization.\r
+        */\r
+       public ModelLoaderService() {\r
+               start();\r
+       }\r
+\r
+       protected void start() {\r
+               // Load model loader system configuration\r
+               logger.info(ModelLoaderMsgs.LOADING_CONFIGURATION);\r
+               Properties configProperties = new Properties();\r
+               try {\r
+                       configProperties.load(new FileInputStream(CONFIG_FILE));\r
+               } catch (IOException e) {\r
+                       String errorMsg = "Failed to load configuration: " + e.getMessage();\r
+                       logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);\r
+                       shutdown();\r
+               }\r
+\r
+               config = new ModelLoaderConfig(configProperties, CONFIG_AUTH_LOCATION);\r
+               init();\r
+       }\r
+\r
+       @Override\r
+       public void finalize() {\r
+               preShutdownOperations();\r
+       }\r
+       \r
+       /**\r
+        * Responsible for stopping the connection to the distribution client before\r
+        * the resource is destroyed.\r
+        */\r
+       protected void preShutdownOperations() {\r
+               logger.info(ModelLoaderMsgs.STOPPING_CLIENT);\r
+               if (client != null) {\r
+                       client.stop();\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Responsible for loading configuration files, initializing model\r
+        * distribution clients, and starting them.\r
+        */\r
+       protected void init() {\r
+               // Initialize distribution client\r
+               logger.debug(ModelLoaderMsgs.INITIALIZING, "Initializing distribution client...");\r
+               client = DistributionClientFactory.createDistributionClient();\r
+               IDistributionClientResult initResult = client.init(config, new EventCallback(client, config));\r
+               if (initResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {\r
+                       String errorMsg = "Failed to initialize distribution client: "\r
+                                       + initResult.getDistributionMessageResult();\r
+                       logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);\r
+                       shutdown();\r
+               }\r
+\r
+               // Start distribution client\r
+               logger.debug(ModelLoaderMsgs.INITIALIZING, "Starting distribution client...");\r
+               IDistributionClientResult startResult = client.start();\r
+               if (startResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {\r
+                       String errorMsg = "Failed to start distribution client: "\r
+                                       + startResult.getDistributionMessageResult();\r
+                       logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);\r
+                       shutdown();\r
+               }\r
+\r
+               logger.debug(ModelLoaderMsgs.INITIALIZING,\r
+                               "Succcessfully loaded service: " + this.getClass().getSimpleName());\r
+       }\r
+\r
+       /**\r
+        * Shut down the process.\r
+        */\r
+       private void shutdown() {\r
+               preShutdownOperations();\r
+\r
+               // TODO: Find a better way to shut down the model loader.\r
+               try {\r
+                       // Give logs time to write to file\r
+                       Thread.sleep(2000);\r
+               } catch (InterruptedException e) {\r
+                       // Nothing we can do at this point\r
+               }\r
+\r
+               Runtime.getRuntime().halt(1);\r
+       }\r
+\r
+       /** (non-Javadoc)\r
+        * @see org.openecomp.modelloader.service.ModelLoaderInterface#loadModel(java.lang.String)\r
+        */\r
+       @Override\r
+       public Response loadModel(String modelid) {\r
+               Response response = Response.ok("{\"model_loaded\":\"" + modelid + "\"}").build();\r
+\r
+               return response;\r
+       }\r
+\r
+       /** (non-Javadoc)\r
+        * @see org.openecomp.modelloader.service.ModelLoaderInterface#saveModel(java.lang.String, java.lang.String)\r
+        */\r
+       @Override\r
+       public Response saveModel(String modelid, String modelname) {\r
+               Response response = Response.ok("{\"model_saved\":\"" + modelid + "-" + modelname + "\"}")\r
+                               .build();\r
+\r
+               return response;\r
+       }\r
+\r
+       @Override\r
+       public Response ingestModel(String modelid, HttpServletRequest req, String payload)\r
+                       throws IOException {\r
+               Response response;\r
+\r
+               if (config.getIngestSimulatorEnabled()) {\r
+                       logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Received test artifact");\r
+\r
+                       ModelArtifactHandler handler = new ModelArtifactHandler(config);\r
+                       handler.loadModelTest(payload.getBytes());\r
+\r
+                       response = Response.ok().build();\r
+               } else {\r
+                       logger.debug("Simulation interface disabled");\r
+                       response = Response.serverError().build();\r
+               }\r
+\r
+               return response;\r
+       }\r
+}\r
index ca63b23..621f704 100644 (file)
@@ -1,79 +1,81 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.util;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.json.XML;
-
-public class JsonXmlConverter {
-
-  /**
-   * Determines whether or not the supplied text string represents a valid
-   * JSON structure or not.
-   * 
-   * @param text - The text to be evaluated.
-   * 
-   * @return - true if the string represents a valid JSON object,
-   *           false, otherwise.
-   */
-  public static boolean isValidJson(String text) {
-    try {
-      new JSONObject(text);
-    } catch (JSONException ex) {
-      try {
-        new JSONArray(text);
-      } catch (JSONException ex1) {
-        return false;
-      }
-    }
-
-    return true;
-  }
-
-  /**
-   * Takes a text string representing a valid JSON structure and converts it to
-   * an equivalent XML string.
-   * 
-   * @param jsonText - The JSON string to convert to XML.
-   * 
-   * @return - An XML string representation of the supplied JSON string.
-   */
-  public static String convertJsonToXml(String jsonText) {
-    JSONObject jsonObj = new JSONObject(jsonText);
-    String xmlText = XML.toString(jsonObj);
-    return xmlText;
-  }
-
-  /**
-   * Takes a text string representing a valid XML structure and converts it to
-   * an equivalent JSON string.
-   * 
-   * @param xmlText - The XML string to convert to JSON.
-   * 
-   * @return - A JSON string representation of the supplied XML string.
-   */
-  public static String convertXmlToJson(String xmlText) {
-    JSONObject jsonObj = XML.toJSONObject(xmlText);
-    return jsonObj.toString();
-  }
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.util;\r
+\r
+import org.json.JSONArray;\r
+import org.json.JSONException;\r
+import org.json.JSONObject;\r
+import org.json.XML;\r
+\r
+public class JsonXmlConverter {\r
+\r
+  /**\r
+   * Determines whether or not the supplied text string represents a valid\r
+   * JSON structure or not.\r
+   * \r
+   * @param text - The text to be evaluated.\r
+   * \r
+   * @return - true if the string represents a valid JSON object,\r
+   *           false, otherwise.\r
+   */\r
+  public static boolean isValidJson(String text) {\r
+    try {\r
+      new JSONObject(text);\r
+    } catch (JSONException ex) {\r
+      try {\r
+        new JSONArray(text);\r
+      } catch (JSONException ex1) {\r
+        return false;\r
+      }\r
+    }\r
+\r
+    return true;\r
+  }\r
+\r
+  /**\r
+   * Takes a text string representing a valid JSON structure and converts it to\r
+   * an equivalent XML string.\r
+   * \r
+   * @param jsonText - The JSON string to convert to XML.\r
+   * \r
+   * @return - An XML string representation of the supplied JSON string.\r
+   */\r
+  public static String convertJsonToXml(String jsonText) {\r
+    JSONObject jsonObj = new JSONObject(jsonText);\r
+    String xmlText = XML.toString(jsonObj);\r
+    return xmlText;\r
+  }\r
+\r
+  /**\r
+   * Takes a text string representing a valid XML structure and converts it to\r
+   * an equivalent JSON string.\r
+   * \r
+   * @param xmlText - The XML string to convert to JSON.\r
+   * \r
+   * @return - A JSON string representation of the supplied XML string.\r
+   */\r
+  public static String convertXmlToJson(String xmlText) {\r
+    JSONObject jsonObj = XML.toJSONObject(xmlText);\r
+    return jsonObj.toString();\r
+  }\r
+}\r
diff --git a/src/main/resources/aai-os-cert.p12 b/src/main/resources/aai-os-cert.p12
deleted file mode 100644 (file)
index ee57120..0000000
Binary files a/src/main/resources/aai-os-cert.p12 and /dev/null differ
diff --git a/src/main/resources/org/openecomp/modelloader/filemonitor/FileMonitorMsgs.properties b/src/main/resources/org/openecomp/modelloader/filemonitor/FileMonitorMsgs.properties
deleted file mode 100644 (file)
index 9abd55c..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-###
-# ============LICENSE_START=======================================================
-# MODEL LOADER SERVICE
-# ================================================================================
-# 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=========================================================
-###
-
-#Resource key=Error Code|Message text|Resolution text |Description text
-#######
-#Newlines can be utilized to add some clarity ensuring continuing line
-#has atleast one leading space
-#ResourceKey=\
-#             ERR0000E\
-#             Sample error msg txt\
-#             Sample resolution msg\
-#             Sample description txt
-#
-######
-#Error code classification category
-#100    Permission errors
-#200    Availability errors/Timeouts
-#300    Data errors
-#400    Schema Interface type/validation errors
-#500    Business process errors
-#900    Unknown errors
-#
-########################################################################
-
-#AVAILABILITY ERRORS
-
-LOADING_FROM_FILE=\
-                  FILEMON2001I|\
-                  Loading service properties from file {0}|\
-                  None. Attempting to load file|\
-                  Attempting to load service properties from the given service file
-                  
-FILE_SUCCESSFULLY_LOADED=\
-                  FILEMON2002I|\
-                  File {0} is loaded into the map and the corresponding system properties have been refreshed|\
-                  None. Successfully loaded file|\
-                  The given service file and its properties were successfully loaded
-                  
-FILE_CANNOT_BE_LOADED=\
-                  FILEMON2003E|\
-                  File {0} cannot be loaded into the map|\
-                  Please check the file permissions and format of the file|\
-                  Unable to load the given service file due to an error
-                        
-CANNOT_READ_FILE_STREAM=\  
-                  FILEMON2004E|\
-                  Error reading the file stream for file {0}|\
-                  Please ensure that the file exists and the permissions are set correctly|\
-                  Unable to read the file stream for the given file
-                
-#UNKNOWN ERRORS                
-                
-FILE_LISTENER_ATTACH_FAILED=\
-                  FILEMON9002W|\
-                  Unable to attach file change listener to file {0} due to an internal error|\
-                  Failed to attach file change listener to the given file. Please check the reported exception for details|\
-                  The file will not be actively monitored for changes
-                
-                
-PROP_MAP_CREATION_FAILED=\
-                  FILEMON9001E|\
-                  Internal Error occurred while creating property map for service files|\
-                  Error occurred due to an internal issue. Please check the reported exception for details |\
-                  Failed to create a property map for the service files
index 53c96dc..8e2d043 100644 (file)
-###
+###\r
 # ============LICENSE_START=======================================================
 # MODEL LOADER SERVICE
 # ================================================================================
 # 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
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+#      http://www.apache.org/licenses/LICENSE-2.0\r
+# \r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
 # limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-#Resource key=Error Code|Message text|Resolution text |Description text
-#######
-#Newlines can be utilized to add some clarity ensuring continuing line
-#has at least one leading space
-#ResourceKey=\
-#             ERR0000E\
-#             Sample error msg txt\
-#             Sample resolution msg\
-#             Sample description txt
-#
-######
-#Error code classification category
-#000 Info/Debug
-#100 Permission errors
-#200 Availability errors/Timeouts
-#300 Data errors
-#400 Schema Interface type/validation errors
-#500 Business process errors
-#900 Unknown errors
-#
-########################################################################
-
-# INFO Level Logs
-LOADING_CONFIGURATION=\
-                  MDLSVC0001I|\
-                  Loading configuration |\
-                  None. Attempting to load configuration|\
-                  Attempting to load Model Loader Service configuration
-                  
-STOPPING_CLIENT=\
-                  MDLSVC0002I|\
-                  Stopping distribution client|\
-                  None. Stopping service|\
-                  Stopping the Model Service distribution client
-                  
-DISTRIBUTION_EVENT=\
-                  MDLSVC0003I|\
-                  Distribution event: {0}|\
-                  None. Processing distribution.|\
-                  A distribution event was received from the ASDC
-                  
-AAI_REST_REQUEST_SUCCESS=\
-                  MDLSVC0004I|\
-                  Sent {0} request to {1}.  Response: {2}|\
-                  None. Successfully sent REST request to AAI.|\
-                  The given request was sent to the specified endpoint.
-                  
-AAI_REST_REQUEST_UNSUCCESSFUL=\
-                  MDLSVC0005I|\
-                  Sent {0} request to {1}.  Response code: {2}, Response message: {3}|\
-                  REST request to AAI unsuccessful. Check response code, and message. |\
-                  The given request was unsuccessful.                                        
-
-DOWNLOAD_COMPLETE=\
-                  MDLSVC0006I|\
-                  Download of artifact {0} from ASDC complete.  Result: {1}|\
-                  None.|\
-                  An artifact was downloaded from the ASDC
-                  
-EVENT_PUBLISHED=\
-                  MDLSVC0007I|\
-                  Published {0} event for artifact {1}.  Result: {2}|\
-                  None.|\
-                  An event was published to the event bus
-                  
-# ERROR Level Logs                  
-ASDC_CONNECTION_ERROR=\
-                  MDLSVC2001E|\
-                  Unable to register with ASDC: {0}|\
-                  Check configuration.  Check network connection to ASDC|\
-                  During initialization, was not able to register with the configured ASDC instance
-                  
-DISTRIBUTION_EVENT_ERROR=\
-                  MDLSVC2002E|\
-                  Distribution event error: {0}|\
-                  Check configuration.  Check network connection to ASDC and UEB|\
-                  A failure occurred processing a distribution event
-                  
-AAI_REST_REQUEST_ERROR=\
-                  MDLSVC2003E|\
-                  Failed to send {0} request to {1}: {2}|\
-                  Check configuration.  Check network connection to AAI.|\
-                  A failure occurred attempting to send a request to the AAI
-                                  
-# DEBUG Level Logs                  
-INITIALIZING=\
-                  MDLSVC0001D|\
-                  init(): {0}|\
-                  None. Initializing service|\
-                  Debug information during model loader initialization
-                                  
-    
+# ============LICENSE_END=========================================================\r
+###\r
+\r
+#Resource key=Error Code|Message text|Resolution text |Description text\r
+#######\r
+#Newlines can be utilized to add some clarity ensuring continuing line\r
+#has at least one leading space\r
+#ResourceKey=\\r
+#             ERR0000E\\r
+#             Sample error msg txt\\r
+#             Sample resolution msg\\r
+#             Sample description txt\r
+#\r
+######\r
+#Error code classification category\r
+#000 Info/Debug\r
+#100 Permission errors\r
+#200 Availability errors/Timeouts\r
+#300 Data errors\r
+#400 Schema Interface type/validation errors\r
+#500 Business process errors\r
+#900 Unknown errors\r
+#\r
+########################################################################\r
+\r
+# INFO Level Logs\r
+LOADING_CONFIGURATION=\\r
+                  MDLSVC0001I|\\r
+                  Loading configuration |\\r
+                  None. Attempting to load configuration|\\r
+                  Attempting to load Model Loader Service configuration\r
+                  \r
+STOPPING_CLIENT=\\r
+                  MDLSVC0002I|\\r
+                  Stopping distribution client|\\r
+                  None. Stopping service|\\r
+                  Stopping the Model Service distribution client\r
+                  \r
+DISTRIBUTION_EVENT=\\r
+                  MDLSVC0003I|\\r
+                  Distribution event: {0}|\\r
+                  None. Processing distribution.|\\r
+                  A distribution event was received from the ASDC\r
+                  \r
+AAI_REST_REQUEST_SUCCESS=\\r
+                  MDLSVC0004I|\\r
+                  Sent {0} request to {1}.  Response: {2}|\\r
+                  None. Successfully sent REST request to AAI.|\\r
+                  The given request was sent to the specified endpoint.\r
+                  \r
+AAI_REST_REQUEST_UNSUCCESSFUL=\\r
+                  MDLSVC0005I|\\r
+                  Sent {0} request to {1}.  Response code: {2}, Response message: {3}|\\r
+                  REST request to AAI unsuccessful. Check response code, and message. |\\r
+                  The given request was unsuccessful.                                        \r
+\r
+DOWNLOAD_COMPLETE=\\r
+                  MDLSVC0006I|\\r
+                  Download of artifact {0} from ASDC complete.  Result: {1}|\\r
+                  None.|\\r
+                  An artifact was downloaded from the ASDC\r
+                  \r
+EVENT_PUBLISHED=\\r
+                  MDLSVC0007I|\\r
+                  Published {0} event for artifact {1}.  Result: {2}|\\r
+                  None.|\\r
+                  An event was published to the event bus\r
+                  \r
+# ERROR Level Logs                  \r
+ASDC_CONNECTION_ERROR=\\r
+                  MDLSVC2001E|\\r
+                  Unable to register with ASDC: {0}|\\r
+                  Check configuration.  Check network connection to ASDC|\\r
+                  During initialization, was not able to register with the configured ASDC instance\r
+                  \r
+DISTRIBUTION_EVENT_ERROR=\\r
+                  MDLSVC2002E|\\r
+                  Distribution event error: {0}|\\r
+                  Check configuration.  Check network connection to ASDC and UEB|\\r
+                  A failure occurred processing a distribution event\r
+                  \r
+AAI_REST_REQUEST_ERROR=\\r
+                  MDLSVC2003E|\\r
+                  Failed to send {0} request to {1}: {2}|\\r
+                  Check configuration.  Check network connection to AAI.|\\r
+                  A failure occurred attempting to send a request to the AAI\r
+\r
+ARTIFACT_PARSE_ERROR=\\r
+                  MDLSVC2004E|\\r
+                  Failed to parse artifact: {0}|\\r
+                  Check artifact. |\\r
+                  A failure occurred attempting to parse artifact from SDC\r
+                                                    \r
+# DEBUG Level Logs                  \r
+INITIALIZING=\\r
+                  MDLSVC0001D|\\r
+                  init(): {0}|\\r
+                  None. Initializing service|\\r
+                  Debug information during model loader initialization\r
+                                  \r
+    \r
index 66bc3db..14f2610 100644 (file)
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r
+<!--\r
   ============LICENSE_START=======================================================
   MODEL LOADER SERVICE
   ================================================================================
   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
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
   limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<xs:schema elementFormDefault="qualified" version="1.0"
-       targetNamespace="http://org.openecomp.aai.inventory/v8" xmlns:tns="http://org.openecomp.aai.inventory/v8"
-       xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-       <xs:element name="inventory-item-data">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="property-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="property-value" type="xs:string"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="inventory-item">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="inventory-item-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="inventory-item-link" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:inventory-item-data" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                               <xs:element ref="tns:tagged-inventory-item-list"
-                                       minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="tagged-inventory-item-list">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:inventory-item" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="edge-tag-query-result">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:tagged-inventory-item-list"
-                                       minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="start-node-filter">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="property-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="property-value" type="xs:string"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="include-node-filter">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="include-node-type" type="xs:string"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="secondary-filter">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="property-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="filter-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="property-value" type="xs:string"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="edge-tag-query-request">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="edge-tag" type="xs:string" minOccurs="0" />
-                               <xs:element name="result-detail" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="start-node-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:start-node-filter" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                               <xs:element ref="tns:include-node-filter" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                               <xs:element ref="tns:secondary-filter" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="result-data">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="resource-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-link" type="xs:string"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="search-results">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:result-data" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="relationship-data">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="relationship-key" type="xs:string" />
-                               <xs:element name="relationship-value" type="xs:string" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="related-to-property">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="property-key" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="property-value" type="xs:string"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="relationship">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="related-to" type="xs:string" minOccurs="0" />
-                               <xs:element name="related-link" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-data" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                               <xs:element ref="tns:related-to-property" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="relationship-list">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:relationship" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="oam-network">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="network-uuid" type="xs:string" />
-                               <xs:element name="network-name" type="xs:string" />
-                               <xs:element name="cvlan-tag" type="xs:unsignedInt" />
-                               <xs:element name="ipv4-oam-gateway-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipv4-oam-gateway-address-prefix-length"
-                                       type="xs:int" minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="oam-networks">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:oam-network" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="dvs-switch">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="switch-name" type="xs:string" />
-                               <xs:element name="vcenter-url" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="dvs-switches">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:dvs-switch" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="availability-zone">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="availability-zone-name" type="xs:string" />
-                               <xs:element name="hypervisor-type" type="xs:string" />
-                               <xs:element name="operational-state" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="az-and-dvs-switches">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:dvs-switches" minOccurs="0" />
-                               <xs:element ref="tns:availability-zone" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="sdn-zone-response">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:oam-networks" minOccurs="0" />
-                               <xs:element ref="tns:az-and-dvs-switches" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="search">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:edge-tag-query-result" minOccurs="0" />
-                               <xs:element ref="tns:edge-tag-query-request" minOccurs="0" />
-                               <xs:element ref="tns:search-results" minOccurs="0" />
-                               <xs:element ref="tns:sdn-zone-response" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="update-node-key">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="key-name" type="xs:string" minOccurs="0" />
-                               <xs:element name="key-value" type="xs:string" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="action-data">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="property-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="property-value" type="xs:string"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="action">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="action-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:action-data" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="update">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="update-node-type" type="xs:string" />
-                               <xs:element ref="tns:update-node-key" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                               <xs:element name="update-node-uri" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:action" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="key-data">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="key-name" type="xs:string" minOccurs="0" />
-                               <xs:element name="key-value" type="xs:string" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="notify">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="event-id" type="xs:string" />
-                               <xs:element name="node-type" type="xs:string" minOccurs="0" />
-                               <xs:element name="event-trigger" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:key-data" minOccurs="0" maxOccurs="unbounded" />
-                               <xs:element name="selflink" type="xs:string" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="actions">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:update" minOccurs="0" />
-                               <xs:element ref="tns:notify" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="ctag-pool">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="target-pe" type="xs:string" />
-                               <xs:element name="availability-zone-name" type="xs:string" />
-                               <xs:element name="ctag-pool-purpose" type="xs:string" />
-                               <xs:element name="ctag-values" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="ctag-pools">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:ctag-pool" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="complex">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="physical-location-id" type="xs:string" />
-                               <xs:element name="data-center-code" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="complex-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="identity-url" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="physical-location-type" type="xs:string" />
-                               <xs:element name="street1" type="xs:string" />
-                               <xs:element name="street2" type="xs:string" minOccurs="0" />
-                               <xs:element name="city" type="xs:string" />
-                               <xs:element name="state" type="xs:string" minOccurs="0" />
-                               <xs:element name="postal-code" type="xs:string" />
-                               <xs:element name="country" type="xs:string" />
-                               <xs:element name="region" type="xs:string" />
-                               <xs:element name="latitude" type="xs:string" minOccurs="0" />
-                               <xs:element name="longitude" type="xs:string" minOccurs="0" />
-                               <xs:element name="elevation" type="xs:string" minOccurs="0" />
-                               <xs:element name="lata" type="xs:string" minOccurs="0" />
-                               <xs:element ref="tns:ctag-pools" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="complexes">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:complex" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="volume-group">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="volume-group-id" type="xs:string" />
-                               <xs:element name="volume-group-name" type="xs:string" />
-                               <xs:element name="heat-stack-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="vnf-type" type="xs:string" />
-                               <xs:element name="orchestration-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="volume-groups">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:volume-group" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="volume">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="volume-id" type="xs:string" />
-                               <xs:element name="volume-selflink" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="volumes">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:volume" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="l3-interface-ipv4-address-list">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="l3-interface-ipv4-address" type="xs:string" />
-                               <xs:element name="l3-interface-ipv4-prefix-length" type="xs:unsignedInt"
-                                       minOccurs="0" />
-                               <xs:element name="vlan-id-inner" type="xs:unsignedInt"
-                                       minOccurs="0" />
-                               <xs:element name="vlan-id-outer" type="xs:unsignedInt"
-                                       minOccurs="0" />
-                               <xs:element name="is-floating" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="neutron-network-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="neutron-subnet-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="l3-interface-ipv6-address-list">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="l3-interface-ipv6-address" type="xs:string" />
-                               <xs:element name="l3-interface-ipv6-prefix-length" type="xs:unsignedInt"
-                                       minOccurs="0" />
-                               <xs:element name="vlan-id-inner" type="xs:unsignedInt"
-                                       minOccurs="0" />
-                               <xs:element name="vlan-id-outer" type="xs:unsignedInt"
-                                       minOccurs="0" />
-                               <xs:element name="is-floating" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="neutron-network-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="neutron-subnet-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vlan">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="vlan-interface" type="xs:string" />
-                               <xs:element name="vlan-id-inner" type="xs:unsignedInt"
-                                       minOccurs="0" />
-                               <xs:element name="vlan-id-outer" type="xs:unsignedInt"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="speed-value" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="speed-units" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="vlan-description" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="backdoor-connection" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="vpn-id" type="xs:string" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:l3-interface-ipv4-address-list"
-                                       minOccurs="0" maxOccurs="unbounded" />
-                               <xs:element ref="tns:l3-interface-ipv6-address-list"
-                                       minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vlans">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:vlan" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="sriov-vf">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="pci-id" type="xs:string" />
-                               <xs:element name="vf-vlan-filter" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="vf-mac-filter" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="vf-vlan-strip" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element name="vf-vlan-anti-spoof-check" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element name="vf-mac-anti-spoof-check" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element name="vf-mirrors" type="xs:string" minOccurs="0" />
-                               <xs:element name="vf-broadcast-allow" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element name="vf-unknown-multicast-allow" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element name="vf-unknown-unicast-allow" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element name="vf-insert-stag" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element name="vf-link-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="neutron-network-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="sriov-vfs">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:sriov-vf" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="l-interface">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="interface-name" type="xs:string" />
-                               <xs:element name="interface-role" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="v6-wan-link-ip" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="selflink" type="xs:string" minOccurs="0" />
-                               <xs:element name="interface-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="macaddr" type="xs:string" minOccurs="0" />
-                               <xs:element name="network-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="management-option" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:vlans" minOccurs="0" />
-                               <xs:element ref="tns:sriov-vfs" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:l3-interface-ipv4-address-list"
-                                       minOccurs="0" maxOccurs="unbounded" />
-                               <xs:element ref="tns:l3-interface-ipv6-address-list"
-                                       minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="l-interfaces">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:l-interface" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vserver">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="vserver-id" type="xs:string" />
-                               <xs:element name="vserver-name" type="xs:string" />
-                               <xs:element name="vserver-name2" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="prov-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="vserver-selflink" type="xs:string" />
-                               <xs:element name="in-maint" type="xs:boolean" />
-                               <xs:element name="is-closed-loop-disabled" type="xs:boolean" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:volumes" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:l-interfaces" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vservers">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:vserver" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="tenant">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="tenant-id" type="xs:string" />
-                               <xs:element name="tenant-name" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:vservers" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="tenants">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:tenant" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="flavor">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="flavor-id" type="xs:string" />
-                               <xs:element name="flavor-name" type="xs:string" />
-                               <xs:element name="flavor-vcpus" type="xs:int" minOccurs="0" />
-                               <xs:element name="flavor-ram" type="xs:int" minOccurs="0" />
-                               <xs:element name="flavor-disk" type="xs:int" minOccurs="0" />
-                               <xs:element name="flavor-ephemeral" type="xs:int"
-                                       minOccurs="0" />
-                               <xs:element name="flavor-swap" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="flavor-is-public" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element name="flavor-selflink" type="xs:string" />
-                               <xs:element name="flavor-disabled" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="flavors">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:flavor" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="group-assignment">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="group-id" type="xs:string" />
-                               <xs:element name="group-type" type="xs:string" />
-                               <xs:element name="group-name" type="xs:string" />
-                               <xs:element name="group-description" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="group-assignments">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:group-assignment" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="snapshot">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="snapshot-id" type="xs:string" />
-                               <xs:element name="snapshot-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="snapshot-architecture" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="snapshot-os-distro" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="snapshot-os-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="application" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="application-vendor" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="application-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="snapshot-selflink" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="prev-snapshot-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="snapshots">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:snapshot" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="metadatum">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="metaname" type="xs:string" />
-                               <xs:element name="metaval" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="metadata">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:metadatum" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="image">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="image-id" type="xs:string" />
-                               <xs:element name="image-name" type="xs:string" />
-                               <xs:element name="image-architecture" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="image-os-distro" type="xs:string" />
-                               <xs:element name="image-os-version" type="xs:string" />
-                               <xs:element name="application" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="application-vendor" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="application-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="image-selflink" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:metadata" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="images">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:image" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="availability-zones">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:availability-zone" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="cloud-region">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="cloud-owner" type="xs:string" />
-                               <xs:element name="cloud-region-id" type="xs:string" />
-                               <xs:element name="cloud-type" type="xs:string" minOccurs="0" />
-                               <xs:element name="owner-defined-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="cloud-region-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="identity-url" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="cloud-zone" type="xs:string" minOccurs="0" />
-                               <xs:element name="complex-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:volume-groups" minOccurs="0" />
-                               <xs:element ref="tns:tenants" minOccurs="0" />
-                               <xs:element ref="tns:flavors" minOccurs="0" />
-                               <xs:element ref="tns:group-assignments" minOccurs="0" />
-                               <xs:element ref="tns:snapshots" minOccurs="0" />
-                               <xs:element ref="tns:images" minOccurs="0" />
-                               <xs:element ref="tns:dvs-switches" minOccurs="0" />
-                               <xs:element ref="tns:oam-networks" minOccurs="0" />
-                               <xs:element ref="tns:availability-zones" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="cloud-regions">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:cloud-region" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="network-profile">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="nm-profile-name" type="xs:string" />
-                               <xs:element name="community-string" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="network-profiles">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:network-profile" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="p-interface">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="interface-name" type="xs:string" />
-                               <xs:element name="speed-value" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="speed-units" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="port-description" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="equipment-identifier" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="interface-role" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="interface-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:l-interfaces" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="p-interfaces">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:p-interface" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="lag-interface">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="interface-name" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="speed-value" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="speed-units" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:l-interfaces" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="lag-interfaces">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:lag-interface" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="pserver">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="hostname" type="xs:string" />
-                               <xs:element name="ptnii-equip-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="number-of-cpus" type="xs:int"
-                                       minOccurs="0" />
-                               <xs:element name="disk-in-gigabytes" type="xs:int"
-                                       minOccurs="0" />
-                               <xs:element name="ram-in-megabytes" type="xs:int"
-                                       minOccurs="0" />
-                               <xs:element name="equip-type" type="xs:string" minOccurs="0" />
-                               <xs:element name="equip-vendor" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="equip-model" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="fqdn" type="xs:string" minOccurs="0" />
-                               <xs:element name="pserver-selflink" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipv4-oam-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="serial-number" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="pserver-id" type="xs:string" minOccurs="0" />
-                               <xs:element name="internet-topology" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="in-maint" type="xs:boolean" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="pserver-name2" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="purpose" type="xs:string" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:p-interfaces" minOccurs="0" />
-                               <xs:element ref="tns:lag-interfaces" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="pservers">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:pserver" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="virtual-data-center">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="vdc-id" type="xs:string" />
-                               <xs:element name="vdc-name" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="virtual-data-centers">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:virtual-data-center" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="cloud-infrastructure">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:complexes" minOccurs="0" />
-                               <xs:element ref="tns:cloud-regions" minOccurs="0" />
-                               <xs:element ref="tns:network-profiles" minOccurs="0" />
-                               <xs:element ref="tns:pservers" minOccurs="0" />
-                               <xs:element ref="tns:virtual-data-centers" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="license-key-resource">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="uuid" type="xs:string" />
-                               <xs:element name="assignment-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="assignment-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="assignment-group-uuid" type="xs:string" />
-                               <xs:element name="assignment-date" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="name" type="xs:string" minOccurs="0" />
-                               <xs:element name="model-uuid" type="xs:string" minOccurs="0" />
-                               <xs:element name="model-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="license-key" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="license-key-file-url" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="supplier-release-list" type="xs:string"
-                                       minOccurs="0" maxOccurs="unbounded" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="license-key-resources">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:license-key-resource" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="license-management">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:license-key-resources" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="connector">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="resource-instance-id" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="persona-model-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="persona-model-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="widget-model-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="widget-model-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:metadata" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="connectors">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:connector" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="service-instance">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="service-instance-id" type="xs:string" />
-                               <xs:element name="service-instance-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="persona-model-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="persona-model-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="widget-model-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="widget-model-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="bandwidth-total" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="bandwidth-up-wan1" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="bandwidth-down-wan1" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="bandwidth-up-wan2" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="bandwidth-down-wan2" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="vhn-portal-url" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="operational-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="service-instance-location-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:metadata" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="service-instances">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:service-instance" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="service-subscription">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="service-type" type="xs:string" />
-                               <xs:element name="temp-ub-sub-account-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:service-instances" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="service-subscriptions">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:service-subscription" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="customer">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="global-customer-id" type="xs:string" />
-                               <xs:element name="subscriber-name" type="xs:string" />
-                               <xs:element name="subscriber-type" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:service-subscriptions" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="customers">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:customer" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="business">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:connectors" minOccurs="0" />
-                               <xs:element ref="tns:customers" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vnf-image">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="uuid" type="xs:string" />
-                               <xs:element name="application" type="xs:string" />
-                               <xs:element name="application-vendor" type="xs:string" />
-                               <xs:element name="application-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="selflink" type="xs:string" minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vnf-images">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:vnf-image" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="service">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="service-id" type="xs:string" />
-                               <xs:element name="service-description" type="xs:string" />
-                               <xs:element name="service-selflink" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="service-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="services">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:service" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="service-capability">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="service-type" type="xs:string" />
-                               <xs:element name="vnf-type" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="service-capabilities">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:service-capability" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="element-choice-set">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="element-choice-set-uuid" type="xs:string" />
-                               <xs:element name="element-choice-set-name" type="xs:string" />
-                               <xs:element name="cardinality" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:model-elements" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="element-choice-sets">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:element-choice-set" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="constrained-element-set">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="constrained-element-set-uuid" type="xs:string" />
-                               <xs:element name="constraint-type" type="xs:string" />
-                               <xs:element name="check-type" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:element-choice-sets" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="constrained-element-sets">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:constrained-element-set" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="model-constraint">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="model-constraint-uuid" type="xs:string" />
-                               <xs:element name="constrained-element-set-uuid-to-replace"
-                                       type="xs:string" />
-                               <xs:element ref="tns:constrained-element-sets" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="model-constraints">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:model-constraint" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="model-element">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="model-element-uuid" type="xs:string" />
-                               <xs:element name="new-data-del-flag" type="xs:string" />
-                               <xs:element name="cardinality" type="xs:string" />
-                               <xs:element name="linkage-points" minOccurs="0">
-                                       <xs:complexType>
-                                               <xs:sequence>
-                                                       <xs:element name="linkage-point" type="xs:string"
-                                                               minOccurs="0" maxOccurs="unbounded" />
-                                               </xs:sequence>
-                                       </xs:complexType>
-                               </xs:element>
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:model-elements" minOccurs="0" />
-                               <xs:element ref="tns:model-constraints" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="model-elements">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:model-element" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="model">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="model-name-version-id" type="xs:string" />
-                               <xs:element name="model-type" type="xs:string" />
-                               <xs:element name="model-name" type="xs:string" />
-                               <xs:element name="model-id" type="xs:string" />
-                               <xs:element name="model-version" type="xs:string" />
-                               <xs:element name="model-description" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:model-elements" minOccurs="0" />
-                               <xs:element ref="tns:metadata" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="models">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:model" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="related-lookup">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="related-lookup-uuid" type="xs:string" />
-                               <xs:element name="source-node-type" type="xs:string" />
-                               <xs:element name="source-node-property" type="xs:string" />
-                               <xs:element name="target-node-type" type="xs:string" />
-                               <xs:element name="target-node-property" type="xs:string" />
-                               <xs:element name="property-collect-list" type="xs:string"
-                                       minOccurs="0" maxOccurs="unbounded" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="related-lookups">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:related-lookup" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="property-constraint">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="property-constraint-uuid" type="xs:string" />
-                               <xs:element name="constraint-type" type="xs:string" />
-                               <xs:element name="property-name" type="xs:string" />
-                               <xs:element name="property-value" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="property-constraints">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:property-constraint" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="named-query-element">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="named-query-element-uuid" type="xs:string" />
-                               <xs:element name="property-collect-list" type="xs:string"
-                                       minOccurs="0" maxOccurs="unbounded" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="property-limit-desc" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="do-not-output" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:named-query-elements" minOccurs="0" />
-                               <xs:element ref="tns:related-lookups" minOccurs="0" />
-                               <xs:element ref="tns:property-constraints" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="named-query-elements">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:named-query-element" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="named-query">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="named-query-uuid" type="xs:string" />
-                               <xs:element name="named-query-name" type="xs:string" />
-                               <xs:element name="named-query-version" type="xs:string" />
-                               <xs:element name="required-input-params" minOccurs="0">
-                                       <xs:complexType>
-                                               <xs:sequence>
-                                                       <xs:element name="required-input-param" type="xs:string"
-                                                               minOccurs="0" maxOccurs="unbounded" />
-                                               </xs:sequence>
-                                       </xs:complexType>
-                               </xs:element>
-                               <xs:element name="description" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:named-query-elements" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="named-queries">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:named-query" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="service-design-and-creation">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:vnf-images" minOccurs="0" />
-                               <xs:element ref="tns:services" minOccurs="0" />
-                               <xs:element ref="tns:service-capabilities" minOccurs="0" />
-                               <xs:element ref="tns:models" minOccurs="0" />
-                               <xs:element ref="tns:named-queries" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="logical-link">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="link-name" type="xs:string" />
-                               <xs:element name="link-type" type="xs:string" />
-                               <xs:element name="speed-value" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="speed-units" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ip-version" type="xs:string" minOccurs="0" />
-                               <xs:element name="routing-protocol" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="persona-model-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="persona-model-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="widget-model-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="widget-model-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="operational-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="link-role" type="xs:string" minOccurs="0" />
-                               <xs:element name="link-name2" type="xs:string" minOccurs="0" />
-                               <xs:element name="link-id" type="xs:string" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="logical-links">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:logical-link" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="class-of-service">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="cos" type="xs:string" />
-                               <xs:element name="probe-id" type="xs:string" minOccurs="0" />
-                               <xs:element name="probe-type" type="xs:string" minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="classes-of-service">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:class-of-service" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="site-pair">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="site-pair-id" type="xs:string" />
-                               <xs:element name="source-ip" type="xs:string" minOccurs="0" />
-                               <xs:element name="destination-ip" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ip-version" type="xs:string" minOccurs="0" />
-                               <xs:element name="destination-hostname" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="destination-equip-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:classes-of-service" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="site-pairs">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:site-pair" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="routing-instance">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="routing-instance-id" type="xs:string" />
-                               <xs:element name="rpm-owner" type="xs:string" minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:site-pairs" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="routing-instances">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:routing-instance" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="site-pair-set">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="site-pair-set-id" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:routing-instances" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="site-pair-sets">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:site-pair-set" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vpn-binding">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="vpn-id" type="xs:string" />
-                               <xs:element name="vpn-name" type="xs:string" />
-                               <xs:element name="global-route-target" type="xs:string" />
-                               <xs:element name="vpn-platform" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vpn-bindings">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:vpn-binding" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vpls-pe">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="equipment-name" type="xs:string" />
-                               <xs:element name="prov-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipv4-oam-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="equipment-role" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="vlan-id-outer" type="xs:unsignedInt"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:p-interfaces" minOccurs="0" />
-                               <xs:element ref="tns:lag-interfaces" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vpls-pes">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:vpls-pe" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="multicast-configuration">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="multicast-configuration-id" type="xs:string" />
-                               <xs:element name="multicast-protocol" type="xs:string" />
-                               <xs:element name="rp-type" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="multicast-configurations">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:multicast-configuration" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="cvlan-tag-entry">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="cvlan-tag" type="xs:unsignedInt" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="cvlan-tags">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:cvlan-tag-entry" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="port-group">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="interface-id" type="xs:string" />
-                               <xs:element name="neutron-network-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="neutron-network-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="interface-role" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="port-group-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="port-group-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="switch-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="orchestration-status" type="xs:string" />
-                               <xs:element name="heat-stack-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="mso-catalog-key" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:cvlan-tags" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="port-groups">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:port-group" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vce">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="vnf-id" type="xs:string" />
-                               <xs:element name="vnf-name" type="xs:string" />
-                               <xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
-                               <xs:element name="vnf-type" type="xs:string" />
-                               <xs:element name="service-id" type="xs:string" minOccurs="0" />
-                               <xs:element name="regional-resource-zone" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="prov-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="operational-state" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="license-key" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="equipment-role" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="orchestration-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="heat-stack-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="mso-catalog-key" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="vpe-id" type="xs:string" minOccurs="0" />
-                               <xs:element name="v6-vce-wan-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipv4-oam-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipv4-loopback0-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:port-groups" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vces">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:vce" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vpe">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="vnf-id" type="xs:string" />
-                               <xs:element name="vnf-name" type="xs:string" />
-                               <xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
-                               <xs:element name="vnf-type" type="xs:string" />
-                               <xs:element name="service-id" type="xs:string" minOccurs="0" />
-                               <xs:element name="regional-resource-zone" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="prov-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="operational-state" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="license-key" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="equipment-role" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="orchestration-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="heat-stack-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="mso-catalog-key" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipv4-oam-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipv4-oam-gateway-address-prefix-length"
-                                       type="xs:int" minOccurs="0" />
-                               <xs:element name="ipv4-oam-gateway-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="v4-loopback0-ip-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="vlan-id-outer" type="xs:unsignedInt"
-                                       minOccurs="0" />
-                               <xs:element name="as-number" type="xs:string" minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="summary-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="encrypted-access-flag" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:l-interfaces" minOccurs="0" />
-                               <xs:element ref="tns:lag-interfaces" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vpes">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:vpe" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vnfc">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="vnfc-name" type="xs:string" />
-                               <xs:element name="vnfc-function-code" type="xs:string" />
-                               <xs:element name="vnfc-type" type="xs:string" />
-                               <xs:element name="prov-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="orchestration-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipaddress-v4-oam-vip" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="in-maint" type="xs:boolean" />
-                               <xs:element name="is-closed-loop-disabled" type="xs:boolean" />
-                               <xs:element name="group-notation" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vnfcs">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:vnfc" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="subnet">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="subnet-id" type="xs:string" />
-                               <xs:element name="subnet-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="neutron-subnet-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="gateway-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="network-start-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="cidr-mask" type="xs:string" minOccurs="0" />
-                               <xs:element name="ip-version" type="xs:string" minOccurs="0" />
-                               <xs:element name="orchestration-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="dhcp-enabled" type="xs:boolean" />
-                               <xs:element name="dhcp-start" type="xs:string" minOccurs="0" />
-                               <xs:element name="dhcp-end" type="xs:string" minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="subnets">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:subnet" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="ctag-assignment">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="vlan-id-inner" type="xs:unsignedInt" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="ctag-assignments">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:ctag-assignment" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="segmentation-assignment">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="segmentation-id" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="segmentation-assignments">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:segmentation-assignment" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="l3-network">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="network-id" type="xs:string" />
-                               <xs:element name="network-name" type="xs:string" />
-                               <xs:element name="network-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="network-role" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="network-technology" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="neutron-network-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="is-bound-to-vpn" type="xs:boolean" />
-                               <xs:element name="service-id" type="xs:string" minOccurs="0" />
-                               <xs:element name="network-role-instance" type="xs:unsignedInt"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="orchestration-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="heat-stack-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="mso-catalog-key" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="contrail-network-fqdn" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="persona-model-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="persona-model-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="widget-model-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="widget-model-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="physical-network-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="is-provider-network" type="xs:boolean" />
-                               <xs:element name="is-shared-network" type="xs:boolean" />
-                               <xs:element name="is-external-network" type="xs:boolean" />
-                               <xs:element ref="tns:subnets" minOccurs="0" />
-                               <xs:element ref="tns:ctag-assignments" minOccurs="0" />
-                               <xs:element ref="tns:segmentation-assignments" minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="l3-networks">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:l3-network" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="network-policy">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="network-policy-id" type="xs:string" />
-                               <xs:element name="network-policy-fqdn" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="heat-stack-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="network-policies">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:network-policy" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vf-module">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="vf-module-id" type="xs:string" />
-                               <xs:element name="vf-module-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="heat-stack-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="orchestration-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="is-base-vf-module" type="xs:boolean" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="persona-model-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="persona-model-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="widget-model-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="widget-model-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="contrail-service-instance-fqdn" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vf-modules">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:vf-module" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="generic-vnf">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="vnf-id" type="xs:string" />
-                               <xs:element name="vnf-name" type="xs:string" />
-                               <xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
-                               <xs:element name="vnf-type" type="xs:string" />
-                               <xs:element name="service-id" type="xs:string" minOccurs="0" />
-                               <xs:element name="regional-resource-zone" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="prov-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="operational-state" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="license-key" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="equipment-role" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="orchestration-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="heat-stack-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="mso-catalog-key" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="management-option" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipv4-oam-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipv4-loopback0-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="nm-lan-v6-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="management-v6-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="vcpu" type="xs:unsignedInt" minOccurs="0" />
-                               <xs:element name="vcpu-units" type="xs:string" minOccurs="0" />
-                               <xs:element name="vmemory" type="xs:unsignedInt"
-                                       minOccurs="0" />
-                               <xs:element name="vmemory-units" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="vdisk" type="xs:unsignedInt" minOccurs="0" />
-                               <xs:element name="vdisk-units" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="in-maint" type="xs:boolean" />
-                               <xs:element name="is-closed-loop-disabled" type="xs:boolean" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="summary-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="encrypted-access-flag" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element name="entitlement-assignment-group-uuid"
-                                       type="xs:string" minOccurs="0" />
-                               <xs:element name="entitlement-resource-uuid" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="license-assignment-group-uuid" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="license-key-uuid" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="persona-model-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="persona-model-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="widget-model-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="widget-model-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="as-number" type="xs:string" minOccurs="0" />
-                               <xs:element name="regional-resource-subzone" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:l-interfaces" minOccurs="0" />
-                               <xs:element ref="tns:lag-interfaces" minOccurs="0" />
-                               <xs:element ref="tns:vf-modules" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="generic-vnfs">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:generic-vnf" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="lag-link">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="link-name" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="lag-links">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:lag-link" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="newvce">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="vnf-id2" type="xs:string" />
-                               <xs:element name="vnf-name" type="xs:string" />
-                               <xs:element name="vnf-name2" type="xs:string" minOccurs="0" />
-                               <xs:element name="vnf-type" type="xs:string" />
-                               <xs:element name="prov-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="operational-state" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="license-key" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipv4-oam-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="equipment-role" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipv4-loopback0-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="orchestration-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="heat-stack-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="mso-catalog-key" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:l-interfaces" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="newvces">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:newvce" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="pnf">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="pnf-name" type="xs:string" />
-                               <xs:element name="pnf-name2" type="xs:string" minOccurs="0" />
-                               <xs:element name="pnf-name2-source" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="pnf-id" type="xs:string" minOccurs="0" />
-                               <xs:element name="equip-type" type="xs:string" minOccurs="0" />
-                               <xs:element name="equip-vendor" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="equip-model" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="management-option" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipaddress-v4-oam" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="sw-version" type="xs:string" minOccurs="0" />
-                               <xs:element name="orchestration-status" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="in-maint" type="xs:boolean" />
-                               <xs:element name="frame-id" type="xs:string" minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:p-interfaces" minOccurs="0" />
-                               <xs:element ref="tns:lag-interfaces" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="pnfs">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:pnf" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="physical-link">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="link-name" type="xs:string" />
-                               <xs:element name="speed-value" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="speed-units" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="circuit-id" type="xs:string" minOccurs="0" />
-                               <xs:element name="dual-mode" type="xs:string" minOccurs="0" />
-                               <xs:element name="management-option" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="service-provider-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="physical-links">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:physical-link" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vig-server">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="vig-address-type" type="xs:string" />
-                               <xs:element name="ipaddress-v4-vig" type="xs:string"
-                                       minOccurs="0" maxOccurs="unbounded" />
-                               <xs:element name="ipaddress-v6-vig" type="xs:string"
-                                       minOccurs="0" maxOccurs="unbounded" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vig-servers">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:vig-server" minOccurs="0" maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="ipsec-configuration">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="ipsec-configuration-id" type="xs:string" />
-                               <xs:element name="requested-vig-address-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="requested-encryption-strength" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="requested-dmz-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="shared-dmz-network-address" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="requested-customer-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ike-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ikev1-authentication" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ikev1-encryption" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ikev1-dh-group" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ikev1-am-group-id" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ikev1-am-password" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ikev1-sa-lifetime" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipsec-authentication" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipsec-encryption" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipsec-sa-lifetime" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="ipsec-pfs" type="xs:string" minOccurs="0" />
-                               <xs:element name="xauth-userid" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="xauth-user-password" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="dpd-interval" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="dpd-frequency" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                               <xs:element ref="tns:vig-servers" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="ipsec-configurations">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:ipsec-configuration" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="route-table-reference">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="route-table-reference-id" type="xs:string" />
-                               <xs:element name="route-table-reference-fqdn" type="xs:string" />
-                               <xs:element name="resource-version" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:relationship-list" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="route-table-references">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:route-table-reference" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="network">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:logical-links" minOccurs="0" />
-                               <xs:element ref="tns:site-pair-sets" minOccurs="0" />
-                               <xs:element ref="tns:vpn-bindings" minOccurs="0" />
-                               <xs:element ref="tns:vpls-pes" minOccurs="0" />
-                               <xs:element ref="tns:multicast-configurations" minOccurs="0" />
-                               <xs:element ref="tns:vces" minOccurs="0" />
-                               <xs:element ref="tns:vpes" minOccurs="0" />
-                               <xs:element ref="tns:vnfcs" minOccurs="0" />
-                               <xs:element ref="tns:l3-networks" minOccurs="0" />
-                               <xs:element ref="tns:network-policies" minOccurs="0" />
-                               <xs:element ref="tns:generic-vnfs" minOccurs="0" />
-                               <xs:element ref="tns:lag-links" minOccurs="0" />
-                               <xs:element ref="tns:newvces" minOccurs="0" />
-                               <xs:element ref="tns:pnfs" minOccurs="0" />
-                               <xs:element ref="tns:physical-links" minOccurs="0" />
-                               <xs:element ref="tns:ipsec-configurations" minOccurs="0" />
-                               <xs:element ref="tns:route-table-references" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="reserved-prop-names">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="last-mod-source-of-truth" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="aai-node-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="aai-created-ts" type="xs:unsignedInt"
-                                       minOccurs="0" />
-                               <xs:element name="aai-unique-key" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="aai-last-mod-ts" type="xs:unsignedInt"
-                                       minOccurs="0" />
-                               <xs:element name="source-of-truth" type="xs:string"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="edge-prop-names">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="edgeLabel" type="xs:string" minOccurs="0" />
-                               <xs:element name="direction" type="xs:string" minOccurs="0" />
-                               <xs:element name="multiplicityRule" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="isParent" type="xs:boolean" minOccurs="0" />
-                               <xs:element name="usesResource" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element name="hasDelTarget" type="xs:boolean"
-                                       minOccurs="0" />
-                               <xs:element name="SVC-INFRA" type="xs:string" minOccurs="0" />
-                               <xs:element name="SVC-INFRA-REV" type="xs:string"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="aai-internal">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:reserved-prop-names" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                               <xs:element ref="tns:edge-prop-names" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="inventory">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:search" minOccurs="0" />
-                               <xs:element ref="tns:actions" minOccurs="0" />
-                               <xs:element ref="tns:cloud-infrastructure" minOccurs="0" />
-                               <xs:element ref="tns:license-management" minOccurs="0" />
-                               <xs:element ref="tns:business" minOccurs="0" />
-                               <xs:element ref="tns:service-design-and-creation"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:network" minOccurs="0" />
-                               <xs:element ref="tns:aai-internal" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="notification-event-header">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="id" type="xs:string" minOccurs="0" />
-                               <xs:element name="timestamp" type="xs:string" minOccurs="0" />
-                               <xs:element name="source-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="domain" type="xs:string" minOccurs="0" />
-                               <xs:element name="sequence-number" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="severity" type="xs:string" minOccurs="0" />
-                               <xs:element name="event-type" type="xs:string" minOccurs="0" />
-                               <xs:element name="version" type="xs:string" minOccurs="0" />
-                               <xs:element name="action" type="xs:string" minOccurs="0" />
-                               <xs:element name="entity-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="top-entity-type" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="entity-link" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="status" type="xs:string" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="notification-event">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="cambria.partition" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element ref="tns:notification-event-header"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="query-parameters">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:named-query" minOccurs="0" />
-                               <xs:element ref="tns:model" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="instance-filter">
-               <xs:complexType>
-                       <xs:sequence />
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="instance-filters">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:instance-filter" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="model-and-named-query-search">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:query-parameters" minOccurs="0" />
-                               <xs:element ref="tns:instance-filters" minOccurs="0" />
-                               <xs:element name="top-node-type" type="xs:string"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="properties">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="property-name" type="xs:string"
-                                       minOccurs="0" />
-                               <xs:element name="property-value" type="xs:string"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="extra-properties">
-               <xs:complexType>
-                       <xs:sequence />
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="inventory-response-item">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="model-name" type="xs:string" minOccurs="0" />
-                               <xs:element ref="tns:extra-properties" minOccurs="0" />
-                               <xs:element ref="tns:inventory-response-items" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="inventory-response-items">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:inventory-response-item" minOccurs="0"
-                                       maxOccurs="unbounded" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="response-list">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element ref="tns:inventory-response-items" minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="extra-property">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="property-name" type="xs:string"
-                                       minOccurs="0" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-       <xs:element name="vnf">
-               <xs:complexType>
-                       <xs:sequence>
-                               <xs:element name="vnf-id" type="xs:string" />
-                       </xs:sequence>
-               </xs:complexType>
-       </xs:element>
-</xs:schema>
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<xs:schema elementFormDefault="qualified" version="1.0"\r
+       targetNamespace="http://org.openecomp.aai.inventory/v8" xmlns:tns="http://org.openecomp.aai.inventory/v8"\r
+       xmlns:xs="http://www.w3.org/2001/XMLSchema">\r
+\r
+       <xs:element name="inventory-item-data">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="property-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="property-value" type="xs:string"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="inventory-item">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="inventory-item-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="inventory-item-link" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:inventory-item-data" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                               <xs:element ref="tns:tagged-inventory-item-list"\r
+                                       minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="tagged-inventory-item-list">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:inventory-item" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="edge-tag-query-result">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:tagged-inventory-item-list"\r
+                                       minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="start-node-filter">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="property-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="property-value" type="xs:string"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="include-node-filter">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="include-node-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="secondary-filter">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="property-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="filter-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="property-value" type="xs:string"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="edge-tag-query-request">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="edge-tag" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="result-detail" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="start-node-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:start-node-filter" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                               <xs:element ref="tns:include-node-filter" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                               <xs:element ref="tns:secondary-filter" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="result-data">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="resource-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-link" type="xs:string"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="search-results">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:result-data" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="relationship-data">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="relationship-key" type="xs:string" />\r
+                               <xs:element name="relationship-value" type="xs:string" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="related-to-property">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="property-key" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="property-value" type="xs:string"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="relationship">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="related-to" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="related-link" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-data" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                               <xs:element ref="tns:related-to-property" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="relationship-list">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:relationship" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="oam-network">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="network-uuid" type="xs:string" />\r
+                               <xs:element name="network-name" type="xs:string" />\r
+                               <xs:element name="cvlan-tag" type="xs:unsignedInt" />\r
+                               <xs:element name="ipv4-oam-gateway-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipv4-oam-gateway-address-prefix-length"\r
+                                       type="xs:int" minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="oam-networks">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:oam-network" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="dvs-switch">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="switch-name" type="xs:string" />\r
+                               <xs:element name="vcenter-url" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="dvs-switches">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:dvs-switch" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="availability-zone">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="availability-zone-name" type="xs:string" />\r
+                               <xs:element name="hypervisor-type" type="xs:string" />\r
+                               <xs:element name="operational-state" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="az-and-dvs-switches">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:dvs-switches" minOccurs="0" />\r
+                               <xs:element ref="tns:availability-zone" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="sdn-zone-response">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:oam-networks" minOccurs="0" />\r
+                               <xs:element ref="tns:az-and-dvs-switches" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="search">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:edge-tag-query-result" minOccurs="0" />\r
+                               <xs:element ref="tns:edge-tag-query-request" minOccurs="0" />\r
+                               <xs:element ref="tns:search-results" minOccurs="0" />\r
+                               <xs:element ref="tns:sdn-zone-response" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="update-node-key">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="key-name" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="key-value" type="xs:string" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="action-data">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="property-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="property-value" type="xs:string"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="action">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="action-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:action-data" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="update">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="update-node-type" type="xs:string" />\r
+                               <xs:element ref="tns:update-node-key" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                               <xs:element name="update-node-uri" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:action" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="key-data">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="key-name" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="key-value" type="xs:string" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="notify">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="event-id" type="xs:string" />\r
+                               <xs:element name="node-type" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="event-trigger" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:key-data" minOccurs="0" maxOccurs="unbounded" />\r
+                               <xs:element name="selflink" type="xs:string" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="actions">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:update" minOccurs="0" />\r
+                               <xs:element ref="tns:notify" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="ctag-pool">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="target-pe" type="xs:string" />\r
+                               <xs:element name="availability-zone-name" type="xs:string" />\r
+                               <xs:element name="ctag-pool-purpose" type="xs:string" />\r
+                               <xs:element name="ctag-values" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="ctag-pools">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:ctag-pool" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="complex">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="physical-location-id" type="xs:string" />\r
+                               <xs:element name="data-center-code" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="complex-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="identity-url" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="physical-location-type" type="xs:string" />\r
+                               <xs:element name="street1" type="xs:string" />\r
+                               <xs:element name="street2" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="city" type="xs:string" />\r
+                               <xs:element name="state" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="postal-code" type="xs:string" />\r
+                               <xs:element name="country" type="xs:string" />\r
+                               <xs:element name="region" type="xs:string" />\r
+                               <xs:element name="latitude" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="longitude" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="elevation" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="lata" type="xs:string" minOccurs="0" />\r
+                               <xs:element ref="tns:ctag-pools" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="complexes">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:complex" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="volume-group">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="volume-group-id" type="xs:string" />\r
+                               <xs:element name="volume-group-name" type="xs:string" />\r
+                               <xs:element name="heat-stack-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vnf-type" type="xs:string" />\r
+                               <xs:element name="orchestration-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="volume-groups">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:volume-group" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="volume">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="volume-id" type="xs:string" />\r
+                               <xs:element name="volume-selflink" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="volumes">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:volume" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="l3-interface-ipv4-address-list">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="l3-interface-ipv4-address" type="xs:string" />\r
+                               <xs:element name="l3-interface-ipv4-prefix-length" type="xs:unsignedInt"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vlan-id-inner" type="xs:unsignedInt"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vlan-id-outer" type="xs:unsignedInt"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="is-floating" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="neutron-network-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="neutron-subnet-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="l3-interface-ipv6-address-list">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="l3-interface-ipv6-address" type="xs:string" />\r
+                               <xs:element name="l3-interface-ipv6-prefix-length" type="xs:unsignedInt"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vlan-id-inner" type="xs:unsignedInt"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vlan-id-outer" type="xs:unsignedInt"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="is-floating" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="neutron-network-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="neutron-subnet-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vlan">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="vlan-interface" type="xs:string" />\r
+                               <xs:element name="vlan-id-inner" type="xs:unsignedInt"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vlan-id-outer" type="xs:unsignedInt"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="speed-value" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="speed-units" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vlan-description" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="backdoor-connection" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vpn-id" type="xs:string" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:l3-interface-ipv4-address-list"\r
+                                       minOccurs="0" maxOccurs="unbounded" />\r
+                               <xs:element ref="tns:l3-interface-ipv6-address-list"\r
+                                       minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vlans">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:vlan" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="sriov-vf">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="pci-id" type="xs:string" />\r
+                               <xs:element name="vf-vlan-filter" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vf-mac-filter" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vf-vlan-strip" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vf-vlan-anti-spoof-check" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vf-mac-anti-spoof-check" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vf-mirrors" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="vf-broadcast-allow" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vf-unknown-multicast-allow" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vf-unknown-unicast-allow" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vf-insert-stag" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vf-link-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="neutron-network-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="sriov-vfs">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:sriov-vf" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="l-interface">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="interface-name" type="xs:string" />\r
+                               <xs:element name="interface-role" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="v6-wan-link-ip" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="selflink" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="interface-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="macaddr" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="network-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="management-option" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:vlans" minOccurs="0" />\r
+                               <xs:element ref="tns:sriov-vfs" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:l3-interface-ipv4-address-list"\r
+                                       minOccurs="0" maxOccurs="unbounded" />\r
+                               <xs:element ref="tns:l3-interface-ipv6-address-list"\r
+                                       minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="l-interfaces">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:l-interface" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vserver">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="vserver-id" type="xs:string" />\r
+                               <xs:element name="vserver-name" type="xs:string" />\r
+                               <xs:element name="vserver-name2" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="prov-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vserver-selflink" type="xs:string" />\r
+                               <xs:element name="in-maint" type="xs:boolean" />\r
+                               <xs:element name="is-closed-loop-disabled" type="xs:boolean" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:volumes" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:l-interfaces" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vservers">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:vserver" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="tenant">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="tenant-id" type="xs:string" />\r
+                               <xs:element name="tenant-name" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:vservers" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="tenants">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:tenant" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="flavor">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="flavor-id" type="xs:string" />\r
+                               <xs:element name="flavor-name" type="xs:string" />\r
+                               <xs:element name="flavor-vcpus" type="xs:int" minOccurs="0" />\r
+                               <xs:element name="flavor-ram" type="xs:int" minOccurs="0" />\r
+                               <xs:element name="flavor-disk" type="xs:int" minOccurs="0" />\r
+                               <xs:element name="flavor-ephemeral" type="xs:int"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="flavor-swap" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="flavor-is-public" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="flavor-selflink" type="xs:string" />\r
+                               <xs:element name="flavor-disabled" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="flavors">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:flavor" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="group-assignment">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="group-id" type="xs:string" />\r
+                               <xs:element name="group-type" type="xs:string" />\r
+                               <xs:element name="group-name" type="xs:string" />\r
+                               <xs:element name="group-description" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="group-assignments">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:group-assignment" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="snapshot">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="snapshot-id" type="xs:string" />\r
+                               <xs:element name="snapshot-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="snapshot-architecture" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="snapshot-os-distro" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="snapshot-os-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="application" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="application-vendor" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="application-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="snapshot-selflink" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="prev-snapshot-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="snapshots">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:snapshot" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="metadatum">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="metaname" type="xs:string" />\r
+                               <xs:element name="metaval" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="metadata">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:metadatum" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="image">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="image-id" type="xs:string" />\r
+                               <xs:element name="image-name" type="xs:string" />\r
+                               <xs:element name="image-architecture" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="image-os-distro" type="xs:string" />\r
+                               <xs:element name="image-os-version" type="xs:string" />\r
+                               <xs:element name="application" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="application-vendor" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="application-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="image-selflink" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:metadata" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="images">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:image" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="availability-zones">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:availability-zone" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="cloud-region">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="cloud-owner" type="xs:string" />\r
+                               <xs:element name="cloud-region-id" type="xs:string" />\r
+                               <xs:element name="cloud-type" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="owner-defined-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="cloud-region-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="identity-url" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="cloud-zone" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="complex-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:volume-groups" minOccurs="0" />\r
+                               <xs:element ref="tns:tenants" minOccurs="0" />\r
+                               <xs:element ref="tns:flavors" minOccurs="0" />\r
+                               <xs:element ref="tns:group-assignments" minOccurs="0" />\r
+                               <xs:element ref="tns:snapshots" minOccurs="0" />\r
+                               <xs:element ref="tns:images" minOccurs="0" />\r
+                               <xs:element ref="tns:dvs-switches" minOccurs="0" />\r
+                               <xs:element ref="tns:oam-networks" minOccurs="0" />\r
+                               <xs:element ref="tns:availability-zones" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="cloud-regions">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:cloud-region" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="network-profile">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="nm-profile-name" type="xs:string" />\r
+                               <xs:element name="community-string" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="network-profiles">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:network-profile" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="p-interface">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="interface-name" type="xs:string" />\r
+                               <xs:element name="speed-value" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="speed-units" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="port-description" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="equipment-identifier" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="interface-role" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="interface-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:l-interfaces" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="p-interfaces">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:p-interface" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="lag-interface">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="interface-name" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="speed-value" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="speed-units" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:l-interfaces" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="lag-interfaces">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:lag-interface" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="pserver">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="hostname" type="xs:string" />\r
+                               <xs:element name="ptnii-equip-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="number-of-cpus" type="xs:int"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="disk-in-gigabytes" type="xs:int"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ram-in-megabytes" type="xs:int"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="equip-type" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="equip-vendor" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="equip-model" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="fqdn" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="pserver-selflink" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipv4-oam-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="serial-number" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="pserver-id" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="internet-topology" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="in-maint" type="xs:boolean" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="pserver-name2" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="purpose" type="xs:string" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:p-interfaces" minOccurs="0" />\r
+                               <xs:element ref="tns:lag-interfaces" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="pservers">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:pserver" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="virtual-data-center">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="vdc-id" type="xs:string" />\r
+                               <xs:element name="vdc-name" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="virtual-data-centers">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:virtual-data-center" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="cloud-infrastructure">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:complexes" minOccurs="0" />\r
+                               <xs:element ref="tns:cloud-regions" minOccurs="0" />\r
+                               <xs:element ref="tns:network-profiles" minOccurs="0" />\r
+                               <xs:element ref="tns:pservers" minOccurs="0" />\r
+                               <xs:element ref="tns:virtual-data-centers" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="license-key-resource">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="uuid" type="xs:string" />\r
+                               <xs:element name="assignment-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="assignment-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="assignment-group-uuid" type="xs:string" />\r
+                               <xs:element name="assignment-date" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="name" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="model-uuid" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="model-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="license-key" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="license-key-file-url" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="supplier-release-list" type="xs:string"\r
+                                       minOccurs="0" maxOccurs="unbounded" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="license-key-resources">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:license-key-resource" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="license-management">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:license-key-resources" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="connector">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="resource-instance-id" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="persona-model-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="persona-model-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="widget-model-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="widget-model-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:metadata" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="connectors">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:connector" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="service-instance">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="service-instance-id" type="xs:string" />\r
+                               <xs:element name="service-instance-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="persona-model-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="persona-model-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="widget-model-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="widget-model-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="bandwidth-total" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="bandwidth-up-wan1" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="bandwidth-down-wan1" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="bandwidth-up-wan2" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="bandwidth-down-wan2" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vhn-portal-url" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="operational-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="service-instance-location-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:metadata" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="service-instances">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:service-instance" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="service-subscription">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="service-type" type="xs:string" />\r
+                               <xs:element name="temp-ub-sub-account-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:service-instances" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="service-subscriptions">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:service-subscription" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="customer">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="global-customer-id" type="xs:string" />\r
+                               <xs:element name="subscriber-name" type="xs:string" />\r
+                               <xs:element name="subscriber-type" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:service-subscriptions" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="customers">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:customer" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="business">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:connectors" minOccurs="0" />\r
+                               <xs:element ref="tns:customers" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vnf-image">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="uuid" type="xs:string" />\r
+                               <xs:element name="application" type="xs:string" />\r
+                               <xs:element name="application-vendor" type="xs:string" />\r
+                               <xs:element name="application-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="selflink" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vnf-images">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:vnf-image" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="service">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="service-id" type="xs:string" />\r
+                               <xs:element name="service-description" type="xs:string" />\r
+                               <xs:element name="service-selflink" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="service-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="services">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:service" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="service-capability">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="service-type" type="xs:string" />\r
+                               <xs:element name="vnf-type" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="service-capabilities">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:service-capability" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="element-choice-set">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="element-choice-set-uuid" type="xs:string" />\r
+                               <xs:element name="element-choice-set-name" type="xs:string" />\r
+                               <xs:element name="cardinality" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:model-elements" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="element-choice-sets">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:element-choice-set" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="constrained-element-set">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="constrained-element-set-uuid" type="xs:string" />\r
+                               <xs:element name="constraint-type" type="xs:string" />\r
+                               <xs:element name="check-type" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:element-choice-sets" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="constrained-element-sets">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:constrained-element-set" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="model-constraint">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="model-constraint-uuid" type="xs:string" />\r
+                               <xs:element name="constrained-element-set-uuid-to-replace"\r
+                                       type="xs:string" />\r
+                               <xs:element ref="tns:constrained-element-sets" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="model-constraints">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:model-constraint" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="model-element">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="model-element-uuid" type="xs:string" />\r
+                               <xs:element name="new-data-del-flag" type="xs:string" />\r
+                               <xs:element name="cardinality" type="xs:string" />\r
+                               <xs:element name="linkage-points" minOccurs="0">\r
+                                       <xs:complexType>\r
+                                               <xs:sequence>\r
+                                                       <xs:element name="linkage-point" type="xs:string"\r
+                                                               minOccurs="0" maxOccurs="unbounded" />\r
+                                               </xs:sequence>\r
+                                       </xs:complexType>\r
+                               </xs:element>\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:model-elements" minOccurs="0" />\r
+                               <xs:element ref="tns:model-constraints" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="model-elements">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:model-element" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="model">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="model-name-version-id" type="xs:string" />\r
+                               <xs:element name="model-type" type="xs:string" />\r
+                               <xs:element name="model-name" type="xs:string" />\r
+                               <xs:element name="model-id" type="xs:string" />\r
+                               <xs:element name="model-version" type="xs:string" />\r
+                               <xs:element name="model-description" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:model-elements" minOccurs="0" />\r
+                               <xs:element ref="tns:metadata" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="models">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:model" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="related-lookup">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="related-lookup-uuid" type="xs:string" />\r
+                               <xs:element name="source-node-type" type="xs:string" />\r
+                               <xs:element name="source-node-property" type="xs:string" />\r
+                               <xs:element name="target-node-type" type="xs:string" />\r
+                               <xs:element name="target-node-property" type="xs:string" />\r
+                               <xs:element name="property-collect-list" type="xs:string"\r
+                                       minOccurs="0" maxOccurs="unbounded" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="related-lookups">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:related-lookup" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="property-constraint">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="property-constraint-uuid" type="xs:string" />\r
+                               <xs:element name="constraint-type" type="xs:string" />\r
+                               <xs:element name="property-name" type="xs:string" />\r
+                               <xs:element name="property-value" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="property-constraints">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:property-constraint" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="named-query-element">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="named-query-element-uuid" type="xs:string" />\r
+                               <xs:element name="property-collect-list" type="xs:string"\r
+                                       minOccurs="0" maxOccurs="unbounded" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="property-limit-desc" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="do-not-output" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:named-query-elements" minOccurs="0" />\r
+                               <xs:element ref="tns:related-lookups" minOccurs="0" />\r
+                               <xs:element ref="tns:property-constraints" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="named-query-elements">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:named-query-element" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="named-query">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="named-query-uuid" type="xs:string" />\r
+                               <xs:element name="named-query-name" type="xs:string" />\r
+                               <xs:element name="named-query-version" type="xs:string" />\r
+                               <xs:element name="required-input-params" minOccurs="0">\r
+                                       <xs:complexType>\r
+                                               <xs:sequence>\r
+                                                       <xs:element name="required-input-param" type="xs:string"\r
+                                                               minOccurs="0" maxOccurs="unbounded" />\r
+                                               </xs:sequence>\r
+                                       </xs:complexType>\r
+                               </xs:element>\r
+                               <xs:element name="description" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:named-query-elements" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="named-queries">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:named-query" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="service-design-and-creation">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:vnf-images" minOccurs="0" />\r
+                               <xs:element ref="tns:services" minOccurs="0" />\r
+                               <xs:element ref="tns:service-capabilities" minOccurs="0" />\r
+                               <xs:element ref="tns:models" minOccurs="0" />\r
+                               <xs:element ref="tns:named-queries" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="logical-link">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="link-name" type="xs:string" />\r
+                               <xs:element name="link-type" type="xs:string" />\r
+                               <xs:element name="speed-value" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="speed-units" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ip-version" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="routing-protocol" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="persona-model-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="persona-model-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="widget-model-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="widget-model-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="operational-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="link-role" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="link-name2" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="link-id" type="xs:string" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="logical-links">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:logical-link" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="class-of-service">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="cos" type="xs:string" />\r
+                               <xs:element name="probe-id" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="probe-type" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="classes-of-service">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:class-of-service" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="site-pair">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="site-pair-id" type="xs:string" />\r
+                               <xs:element name="source-ip" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="destination-ip" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ip-version" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="destination-hostname" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="destination-equip-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:classes-of-service" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="site-pairs">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:site-pair" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="routing-instance">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="routing-instance-id" type="xs:string" />\r
+                               <xs:element name="rpm-owner" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:site-pairs" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="routing-instances">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:routing-instance" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="site-pair-set">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="site-pair-set-id" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:routing-instances" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="site-pair-sets">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:site-pair-set" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vpn-binding">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="vpn-id" type="xs:string" />\r
+                               <xs:element name="vpn-name" type="xs:string" />\r
+                               <xs:element name="global-route-target" type="xs:string" />\r
+                               <xs:element name="vpn-platform" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vpn-bindings">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:vpn-binding" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vpls-pe">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="equipment-name" type="xs:string" />\r
+                               <xs:element name="prov-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipv4-oam-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="equipment-role" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vlan-id-outer" type="xs:unsignedInt"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:p-interfaces" minOccurs="0" />\r
+                               <xs:element ref="tns:lag-interfaces" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vpls-pes">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:vpls-pe" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="multicast-configuration">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="multicast-configuration-id" type="xs:string" />\r
+                               <xs:element name="multicast-protocol" type="xs:string" />\r
+                               <xs:element name="rp-type" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="multicast-configurations">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:multicast-configuration" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="cvlan-tag-entry">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="cvlan-tag" type="xs:unsignedInt" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="cvlan-tags">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:cvlan-tag-entry" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="port-group">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="interface-id" type="xs:string" />\r
+                               <xs:element name="neutron-network-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="neutron-network-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="interface-role" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="port-group-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="port-group-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="switch-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="orchestration-status" type="xs:string" />\r
+                               <xs:element name="heat-stack-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="mso-catalog-key" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:cvlan-tags" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="port-groups">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:port-group" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vce">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="vnf-id" type="xs:string" />\r
+                               <xs:element name="vnf-name" type="xs:string" />\r
+                               <xs:element name="vnf-name2" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="vnf-type" type="xs:string" />\r
+                               <xs:element name="service-id" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="regional-resource-zone" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="prov-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="operational-state" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="license-key" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="equipment-role" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="orchestration-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="heat-stack-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="mso-catalog-key" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vpe-id" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="v6-vce-wan-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipv4-oam-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipv4-loopback0-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:port-groups" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vces">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:vce" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vpe">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="vnf-id" type="xs:string" />\r
+                               <xs:element name="vnf-name" type="xs:string" />\r
+                               <xs:element name="vnf-name2" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="vnf-type" type="xs:string" />\r
+                               <xs:element name="service-id" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="regional-resource-zone" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="prov-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="operational-state" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="license-key" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="equipment-role" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="orchestration-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="heat-stack-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="mso-catalog-key" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipv4-oam-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipv4-oam-gateway-address-prefix-length"\r
+                                       type="xs:int" minOccurs="0" />\r
+                               <xs:element name="ipv4-oam-gateway-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="v4-loopback0-ip-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vlan-id-outer" type="xs:unsignedInt"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="as-number" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="summary-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="encrypted-access-flag" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:l-interfaces" minOccurs="0" />\r
+                               <xs:element ref="tns:lag-interfaces" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vpes">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:vpe" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vnfc">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="vnfc-name" type="xs:string" />\r
+                               <xs:element name="vnfc-function-code" type="xs:string" />\r
+                               <xs:element name="vnfc-type" type="xs:string" />\r
+                               <xs:element name="prov-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="orchestration-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipaddress-v4-oam-vip" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="in-maint" type="xs:boolean" />\r
+                               <xs:element name="is-closed-loop-disabled" type="xs:boolean" />\r
+                               <xs:element name="group-notation" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vnfcs">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:vnfc" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="subnet">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="subnet-id" type="xs:string" />\r
+                               <xs:element name="subnet-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="neutron-subnet-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="gateway-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="network-start-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="cidr-mask" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="ip-version" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="orchestration-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="dhcp-enabled" type="xs:boolean" />\r
+                               <xs:element name="dhcp-start" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="dhcp-end" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="subnets">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:subnet" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="ctag-assignment">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="vlan-id-inner" type="xs:unsignedInt" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="ctag-assignments">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:ctag-assignment" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="segmentation-assignment">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="segmentation-id" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="segmentation-assignments">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:segmentation-assignment" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="l3-network">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="network-id" type="xs:string" />\r
+                               <xs:element name="network-name" type="xs:string" />\r
+                               <xs:element name="network-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="network-role" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="network-technology" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="neutron-network-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="is-bound-to-vpn" type="xs:boolean" />\r
+                               <xs:element name="service-id" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="network-role-instance" type="xs:unsignedInt"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="orchestration-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="heat-stack-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="mso-catalog-key" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="contrail-network-fqdn" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="persona-model-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="persona-model-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="widget-model-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="widget-model-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="physical-network-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="is-provider-network" type="xs:boolean" />\r
+                               <xs:element name="is-shared-network" type="xs:boolean" />\r
+                               <xs:element name="is-external-network" type="xs:boolean" />\r
+                               <xs:element ref="tns:subnets" minOccurs="0" />\r
+                               <xs:element ref="tns:ctag-assignments" minOccurs="0" />\r
+                               <xs:element ref="tns:segmentation-assignments" minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="l3-networks">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:l3-network" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="network-policy">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="network-policy-id" type="xs:string" />\r
+                               <xs:element name="network-policy-fqdn" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="heat-stack-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="network-policies">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:network-policy" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vf-module">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="vf-module-id" type="xs:string" />\r
+                               <xs:element name="vf-module-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="heat-stack-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="orchestration-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="is-base-vf-module" type="xs:boolean" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="persona-model-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="persona-model-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="widget-model-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="widget-model-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="contrail-service-instance-fqdn" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vf-modules">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:vf-module" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="generic-vnf">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="vnf-id" type="xs:string" />\r
+                               <xs:element name="vnf-name" type="xs:string" />\r
+                               <xs:element name="vnf-name2" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="vnf-type" type="xs:string" />\r
+                               <xs:element name="service-id" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="regional-resource-zone" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="prov-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="operational-state" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="license-key" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="equipment-role" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="orchestration-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="heat-stack-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="mso-catalog-key" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="management-option" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipv4-oam-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipv4-loopback0-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="nm-lan-v6-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="management-v6-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vcpu" type="xs:unsignedInt" minOccurs="0" />\r
+                               <xs:element name="vcpu-units" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="vmemory" type="xs:unsignedInt"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vmemory-units" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="vdisk" type="xs:unsignedInt" minOccurs="0" />\r
+                               <xs:element name="vdisk-units" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="in-maint" type="xs:boolean" />\r
+                               <xs:element name="is-closed-loop-disabled" type="xs:boolean" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="summary-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="encrypted-access-flag" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="entitlement-assignment-group-uuid"\r
+                                       type="xs:string" minOccurs="0" />\r
+                               <xs:element name="entitlement-resource-uuid" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="license-assignment-group-uuid" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="license-key-uuid" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="persona-model-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="persona-model-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="widget-model-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="widget-model-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="as-number" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="regional-resource-subzone" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:l-interfaces" minOccurs="0" />\r
+                               <xs:element ref="tns:lag-interfaces" minOccurs="0" />\r
+                               <xs:element ref="tns:vf-modules" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="generic-vnfs">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:generic-vnf" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="lag-link">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="link-name" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="lag-links">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:lag-link" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="newvce">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="vnf-id2" type="xs:string" />\r
+                               <xs:element name="vnf-name" type="xs:string" />\r
+                               <xs:element name="vnf-name2" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="vnf-type" type="xs:string" />\r
+                               <xs:element name="prov-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="operational-state" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="license-key" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipv4-oam-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="equipment-role" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipv4-loopback0-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="orchestration-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="heat-stack-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="mso-catalog-key" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:l-interfaces" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="newvces">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:newvce" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="pnf">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="pnf-name" type="xs:string" />\r
+                               <xs:element name="pnf-name2" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="pnf-name2-source" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="pnf-id" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="equip-type" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="equip-vendor" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="equip-model" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="management-option" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipaddress-v4-oam" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="sw-version" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="orchestration-status" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="in-maint" type="xs:boolean" />\r
+                               <xs:element name="frame-id" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:p-interfaces" minOccurs="0" />\r
+                               <xs:element ref="tns:lag-interfaces" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="pnfs">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:pnf" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="physical-link">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="link-name" type="xs:string" />\r
+                               <xs:element name="speed-value" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="speed-units" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="circuit-id" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="dual-mode" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="management-option" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="service-provider-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="physical-links">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:physical-link" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vig-server">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="vig-address-type" type="xs:string" />\r
+                               <xs:element name="ipaddress-v4-vig" type="xs:string"\r
+                                       minOccurs="0" maxOccurs="unbounded" />\r
+                               <xs:element name="ipaddress-v6-vig" type="xs:string"\r
+                                       minOccurs="0" maxOccurs="unbounded" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vig-servers">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:vig-server" minOccurs="0" maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="ipsec-configuration">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="ipsec-configuration-id" type="xs:string" />\r
+                               <xs:element name="requested-vig-address-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="requested-encryption-strength" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="requested-dmz-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="shared-dmz-network-address" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="requested-customer-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ike-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ikev1-authentication" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ikev1-encryption" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ikev1-dh-group" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ikev1-am-group-id" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ikev1-am-password" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ikev1-sa-lifetime" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipsec-authentication" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipsec-encryption" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipsec-sa-lifetime" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="ipsec-pfs" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="xauth-userid" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="xauth-user-password" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="dpd-interval" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="dpd-frequency" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                               <xs:element ref="tns:vig-servers" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="ipsec-configurations">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:ipsec-configuration" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="route-table-reference">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="route-table-reference-id" type="xs:string" />\r
+                               <xs:element name="route-table-reference-fqdn" type="xs:string" />\r
+                               <xs:element name="resource-version" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:relationship-list" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="route-table-references">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:route-table-reference" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="network">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:logical-links" minOccurs="0" />\r
+                               <xs:element ref="tns:site-pair-sets" minOccurs="0" />\r
+                               <xs:element ref="tns:vpn-bindings" minOccurs="0" />\r
+                               <xs:element ref="tns:vpls-pes" minOccurs="0" />\r
+                               <xs:element ref="tns:multicast-configurations" minOccurs="0" />\r
+                               <xs:element ref="tns:vces" minOccurs="0" />\r
+                               <xs:element ref="tns:vpes" minOccurs="0" />\r
+                               <xs:element ref="tns:vnfcs" minOccurs="0" />\r
+                               <xs:element ref="tns:l3-networks" minOccurs="0" />\r
+                               <xs:element ref="tns:network-policies" minOccurs="0" />\r
+                               <xs:element ref="tns:generic-vnfs" minOccurs="0" />\r
+                               <xs:element ref="tns:lag-links" minOccurs="0" />\r
+                               <xs:element ref="tns:newvces" minOccurs="0" />\r
+                               <xs:element ref="tns:pnfs" minOccurs="0" />\r
+                               <xs:element ref="tns:physical-links" minOccurs="0" />\r
+                               <xs:element ref="tns:ipsec-configurations" minOccurs="0" />\r
+                               <xs:element ref="tns:route-table-references" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="reserved-prop-names">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="last-mod-source-of-truth" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="aai-node-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="aai-created-ts" type="xs:unsignedInt"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="aai-unique-key" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="aai-last-mod-ts" type="xs:unsignedInt"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="source-of-truth" type="xs:string"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="edge-prop-names">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="edgeLabel" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="direction" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="multiplicityRule" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="isParent" type="xs:boolean" minOccurs="0" />\r
+                               <xs:element name="usesResource" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="hasDelTarget" type="xs:boolean"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="SVC-INFRA" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="SVC-INFRA-REV" type="xs:string"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="aai-internal">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:reserved-prop-names" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                               <xs:element ref="tns:edge-prop-names" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="inventory">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:search" minOccurs="0" />\r
+                               <xs:element ref="tns:actions" minOccurs="0" />\r
+                               <xs:element ref="tns:cloud-infrastructure" minOccurs="0" />\r
+                               <xs:element ref="tns:license-management" minOccurs="0" />\r
+                               <xs:element ref="tns:business" minOccurs="0" />\r
+                               <xs:element ref="tns:service-design-and-creation"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:network" minOccurs="0" />\r
+                               <xs:element ref="tns:aai-internal" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="notification-event-header">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="id" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="timestamp" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="source-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="domain" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="sequence-number" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="severity" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="event-type" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="version" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="action" type="xs:string" minOccurs="0" />\r
+                               <xs:element name="entity-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="top-entity-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="entity-link" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="status" type="xs:string" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="notification-event">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="cambria.partition" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element ref="tns:notification-event-header"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="query-parameters">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:named-query" minOccurs="0" />\r
+                               <xs:element ref="tns:model" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="instance-filter">\r
+               <xs:complexType>\r
+                       <xs:sequence />\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="instance-filters">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:instance-filter" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="model-and-named-query-search">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:query-parameters" minOccurs="0" />\r
+                               <xs:element ref="tns:instance-filters" minOccurs="0" />\r
+                               <xs:element name="top-node-type" type="xs:string"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="properties">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="property-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                               <xs:element name="property-value" type="xs:string"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="extra-properties">\r
+               <xs:complexType>\r
+                       <xs:sequence />\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="inventory-response-item">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="model-name" type="xs:string" minOccurs="0" />\r
+                               <xs:element ref="tns:extra-properties" minOccurs="0" />\r
+                               <xs:element ref="tns:inventory-response-items" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="inventory-response-items">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:inventory-response-item" minOccurs="0"\r
+                                       maxOccurs="unbounded" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="response-list">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element ref="tns:inventory-response-items" minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="extra-property">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="property-name" type="xs:string"\r
+                                       minOccurs="0" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+       <xs:element name="vnf">\r
+               <xs:complexType>\r
+                       <xs:sequence>\r
+                               <xs:element name="vnf-id" type="xs:string" />\r
+                       </xs:sequence>\r
+               </xs:complexType>\r
+       </xs:element>\r
+</xs:schema>\r
index 9789124..1b18ef1 100644 (file)
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
   ============LICENSE_START=======================================================
   MODEL LOADER SERVICE
   ================================================================================
   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
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
   limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-       <xsd:element name="vnf-catalog">
-               <xsd:complexType>
-                       <xsd:sequence>
-                               <xsd:element name="part-number-list" maxOccurs="unbounded">
-                                       <xsd:complexType>
-                                               <xsd:sequence>
-                                                       <xsd:element name="part-number" minOccurs="0"
-                                                               maxOccurs="1" type="xsd:normalizedString" />
-                                                       <xsd:element name="vnf-type" minOccurs="0" maxOccurs="1"
-                                                               type="xsd:normalizedString" />
-                                                       <xsd:element name="vendor-info" minOccurs="0"
-                                                               maxOccurs="1">
-                                                               <xsd:complexType>
-                                                                       <xsd:sequence>
-                                                                               <xsd:element name="vendor-name" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:normalizedString" />
-                                                                               <xsd:element name="vendor-part-number" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:normalizedString" />
-                                                                               <xsd:element name="vendor-model" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:normalizedString" />
-                                                                       </xsd:sequence>
-                                                               </xsd:complexType>
-                                                       </xsd:element>
-                                                       <xsd:element name="vcpu" minOccurs="0" maxOccurs="1">
-                                                               <xsd:complexType>
-                                                                       <xsd:sequence>
-                                                                               <xsd:element name="vcpu-default" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:int" />
-                                                                               <xsd:element name="vcpu-min" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:int" />
-                                                                               <xsd:element name="vcpu-max" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:int" />
-                                                                       </xsd:sequence>
-                                                               </xsd:complexType>
-                                                       </xsd:element>
-                                                       <xsd:element name="vmemory" minOccurs="0" maxOccurs="1">
-                                                               <xsd:complexType>
-                                                                       <xsd:sequence>
-                                                                               <xsd:element name="vmemory-default" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:int" />
-                                                                               <xsd:element name="vmemory-units" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:normalizedString" />
-                                                                               <xsd:element name="vmemory-min" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:int" />
-                                                                               <xsd:element name="vmemory-max" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:int" />
-                                                                       </xsd:sequence>
-                                                               </xsd:complexType>
-                                                       </xsd:element>
-                                                       <xsd:element name="vdisk" minOccurs="0" maxOccurs="1">
-                                                               <xsd:complexType>
-                                                                       <xsd:sequence>
-                                                                               <xsd:element name="vdisk-default" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:int" />
-                                                                               <xsd:element name="vdisk-units" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:normalizedString" />
-                                                                               <xsd:element name="vdisk-min" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:int" />
-                                                                               <xsd:element name="vdisk-max" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:int" />
-                                                                       </xsd:sequence>
-                                                               </xsd:complexType>
-                                                       </xsd:element>
-                                                       <xsd:element name="software-version-list" maxOccurs="unbounded">
-                                                               <xsd:complexType>
-                                                                       <xsd:sequence>
-                                                                               <xsd:element name="software-version" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:normalizedString" />
-                                                                               <xsd:element name="software-version-state"
-                                                                                       minOccurs="0" maxOccurs="1" type="xsd:int" />
-                                                                               <xsd:element name="software-filetype" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:normalizedString" />
-                                                                               <xsd:element name="file-md5-value" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:normalizedString" />
-                                                                               <xsd:element name="software-filename" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:normalizedString" />
-                                                                       </xsd:sequence>
-                                                               </xsd:complexType>
-                                                       </xsd:element>
-                                                       <xsd:element name="vnf-features-list" maxOccurs="unbounded">
-                                                               <xsd:complexType>
-                                                                       <xsd:sequence>
-                                                                               <xsd:element name="vnf-feature" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:normalizedString" />
-                                                                       </xsd:sequence>
-                                                               </xsd:complexType>
-                                                       </xsd:element>
-                                                       <xsd:element name="license-list" minOccurs="0"
-                                                               maxOccurs="1">
-                                                               <xsd:complexType>
-                                                                       <xsd:sequence>
-                                                                               <xsd:element name="license-assignment-group"
-                                                                                       minOccurs="0" maxOccurs="1" type="xsd:normalizedString" />
-                                                                               <xsd:element name="license-required" minOccurs="0"
-                                                                                       maxOccurs="1" type="xsd:normalizedString" />
-                                                                       </xsd:sequence>
-                                                               </xsd:complexType>
-                                                       </xsd:element>
-                                               </xsd:sequence>
-                                       </xsd:complexType>
-                               </xsd:element>
-                       </xsd:sequence>
-               </xsd:complexType>
-       </xsd:element>
-</xsd:schema>
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">\r
+       <xsd:element name="vnf-catalog">\r
+               <xsd:complexType>\r
+                       <xsd:sequence>\r
+                               <xsd:element name="part-number-list" maxOccurs="unbounded">\r
+                                       <xsd:complexType>\r
+                                               <xsd:sequence>\r
+                                                       <xsd:element name="part-number" minOccurs="0"\r
+                                                               maxOccurs="1" type="xsd:normalizedString" />\r
+                                                       <xsd:element name="vnf-type" minOccurs="0" maxOccurs="1"\r
+                                                               type="xsd:normalizedString" />\r
+                                                       <xsd:element name="vendor-info" minOccurs="0"\r
+                                                               maxOccurs="1">\r
+                                                               <xsd:complexType>\r
+                                                                       <xsd:sequence>\r
+                                                                               <xsd:element name="vendor-name" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:normalizedString" />\r
+                                                                               <xsd:element name="vendor-part-number" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:normalizedString" />\r
+                                                                               <xsd:element name="vendor-model" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:normalizedString" />\r
+                                                                       </xsd:sequence>\r
+                                                               </xsd:complexType>\r
+                                                       </xsd:element>\r
+                                                       <xsd:element name="vcpu" minOccurs="0" maxOccurs="1">\r
+                                                               <xsd:complexType>\r
+                                                                       <xsd:sequence>\r
+                                                                               <xsd:element name="vcpu-default" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:int" />\r
+                                                                               <xsd:element name="vcpu-min" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:int" />\r
+                                                                               <xsd:element name="vcpu-max" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:int" />\r
+                                                                       </xsd:sequence>\r
+                                                               </xsd:complexType>\r
+                                                       </xsd:element>\r
+                                                       <xsd:element name="vmemory" minOccurs="0" maxOccurs="1">\r
+                                                               <xsd:complexType>\r
+                                                                       <xsd:sequence>\r
+                                                                               <xsd:element name="vmemory-default" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:int" />\r
+                                                                               <xsd:element name="vmemory-units" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:normalizedString" />\r
+                                                                               <xsd:element name="vmemory-min" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:int" />\r
+                                                                               <xsd:element name="vmemory-max" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:int" />\r
+                                                                       </xsd:sequence>\r
+                                                               </xsd:complexType>\r
+                                                       </xsd:element>\r
+                                                       <xsd:element name="vdisk" minOccurs="0" maxOccurs="1">\r
+                                                               <xsd:complexType>\r
+                                                                       <xsd:sequence>\r
+                                                                               <xsd:element name="vdisk-default" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:int" />\r
+                                                                               <xsd:element name="vdisk-units" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:normalizedString" />\r
+                                                                               <xsd:element name="vdisk-min" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:int" />\r
+                                                                               <xsd:element name="vdisk-max" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:int" />\r
+                                                                       </xsd:sequence>\r
+                                                               </xsd:complexType>\r
+                                                       </xsd:element>\r
+                                                       <xsd:element name="software-version-list" maxOccurs="unbounded">\r
+                                                               <xsd:complexType>\r
+                                                                       <xsd:sequence>\r
+                                                                               <xsd:element name="software-version" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:normalizedString" />\r
+                                                                               <xsd:element name="software-version-state"\r
+                                                                                       minOccurs="0" maxOccurs="1" type="xsd:int" />\r
+                                                                               <xsd:element name="software-filetype" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:normalizedString" />\r
+                                                                               <xsd:element name="file-md5-value" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:normalizedString" />\r
+                                                                               <xsd:element name="software-filename" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:normalizedString" />\r
+                                                                       </xsd:sequence>\r
+                                                               </xsd:complexType>\r
+                                                       </xsd:element>\r
+                                                       <xsd:element name="vnf-features-list" maxOccurs="unbounded">\r
+                                                               <xsd:complexType>\r
+                                                                       <xsd:sequence>\r
+                                                                               <xsd:element name="vnf-feature" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:normalizedString" />\r
+                                                                       </xsd:sequence>\r
+                                                               </xsd:complexType>\r
+                                                       </xsd:element>\r
+                                                       <xsd:element name="license-list" minOccurs="0"\r
+                                                               maxOccurs="1">\r
+                                                               <xsd:complexType>\r
+                                                                       <xsd:sequence>\r
+                                                                               <xsd:element name="license-assignment-group"\r
+                                                                                       minOccurs="0" maxOccurs="1" type="xsd:normalizedString" />\r
+                                                                               <xsd:element name="license-required" minOccurs="0"\r
+                                                                                       maxOccurs="1" type="xsd:normalizedString" />\r
+                                                                       </xsd:sequence>\r
+                                                               </xsd:complexType>\r
+                                                       </xsd:element>\r
+                                               </xsd:sequence>\r
+                                       </xsd:complexType>\r
+                               </xsd:element>\r
+                       </xsd:sequence>\r
+               </xsd:complexType>\r
+       </xsd:element>\r
+</xsd:schema>\r
diff --git a/src/main/runtime/context/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.context b/src/main/runtime/context/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.context
new file mode 100644 (file)
index 0000000..8514196
--- /dev/null
@@ -0,0 +1 @@
+{"context":{"contextClass":"ajsc.Context","contextId":"__module_ajsc_namespace_name__:__module_ajsc_namespace_version__","contextName":"__module_ajsc_namespace_name__","contextVersion":"__module_ajsc_namespace_version__","description":"__module_ajsc_namespace_name__ Context"}}
\ No newline at end of file
diff --git a/src/main/runtime/context/default#0.context b/src/main/runtime/context/default#0.context
new file mode 100644 (file)
index 0000000..d1b5ab4
--- /dev/null
@@ -0,0 +1 @@
+{"context":{"contextClass":"ajsc.Context","contextId":"default:0","contextName":"default","contextVersion":"0","description":"Default Context"}}
\ No newline at end of file
diff --git a/src/main/runtime/deploymentPackage/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.json b/src/main/runtime/deploymentPackage/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.json
new file mode 100644 (file)
index 0000000..d0954cf
--- /dev/null
@@ -0,0 +1 @@
+{"deploymentPackage":{"Class":"ajsc.DeploymentPackage","Id":"__module.ajsc.namespace.name__:__module_ajsc_namespace_version__","namespace":"__module_ajsc_namespace_name__","namespaceVersion":"__module_ajsc_namespace_version__","description":"__module_ajsc_namespace_name__ __module_ajsc_namespace_version__ - default description","userId":"ajsc"}}
\ No newline at end of file
diff --git a/src/main/runtime/shiroRole/ajscadmin.json b/src/main/runtime/shiroRole/ajscadmin.json
new file mode 100644 (file)
index 0000000..f5e981e
--- /dev/null
@@ -0,0 +1 @@
+{"shiroRoleClass":"ajsc.auth.ShiroRole","shiroRoleId":"ajscadmin","name":"ajscadmin","permissions":"[ajscadmin:*, ajsc:*]"}
\ No newline at end of file
diff --git a/src/main/runtime/shiroRole/contextadmin#__module.ajsc.namespace.name__.json b/src/main/runtime/shiroRole/contextadmin#__module.ajsc.namespace.name__.json
new file mode 100644 (file)
index 0000000..2dae9f5
--- /dev/null
@@ -0,0 +1 @@
+{"shiroRoleClass":"ajsc.auth.ShiroRole","shiroRoleId":"contextadmin:__module_ajsc_namespace_name__","name":"contextadmin:__module_ajsc_namespace_name__","permissions":"[]"}
\ No newline at end of file
diff --git a/src/main/runtime/shiroRole/contextadmin#default.json b/src/main/runtime/shiroRole/contextadmin#default.json
new file mode 100644 (file)
index 0000000..5de814e
--- /dev/null
@@ -0,0 +1 @@
+{"shiroRoleClass":"ajsc.auth.ShiroRole","shiroRoleId":"contextadmin:default","name":"contextadmin:default","permissions":"[]"}
\ No newline at end of file
diff --git a/src/main/runtime/shiroUser/ajsc.json b/src/main/runtime/shiroUser/ajsc.json
new file mode 100644 (file)
index 0000000..f4c7855
--- /dev/null
@@ -0,0 +1 @@
+{"shiroUserClass":"ajsc.auth.ShiroUser","shiroUserId":"ajsc","passwordHash":"9471697417008c880720ba54c6038791ad7e98f3b88136fe34f4d31a462dd27a","permissions":"[*:*]","username":"ajsc"}
\ No newline at end of file
diff --git a/src/main/runtime/shiroUserRole/ajsc#ajscadmin.json b/src/main/runtime/shiroUserRole/ajsc#ajscadmin.json
new file mode 100644 (file)
index 0000000..cb8d483
--- /dev/null
@@ -0,0 +1 @@
+{"shiroUserRoleClass":"ajsc.auth.ShiroUserRole","shiroUserRoleId":"ajsc:ajscadmin","roleId":"ajscadmin","userId":"ajsc"}
\ No newline at end of file
diff --git a/src/main/runtime/shiroUserRole/ajsc#contextadmin#__module.ajsc.namespace.name__.json b/src/main/runtime/shiroUserRole/ajsc#contextadmin#__module.ajsc.namespace.name__.json
new file mode 100644 (file)
index 0000000..95d2361
--- /dev/null
@@ -0,0 +1 @@
+{"shiroUserRoleClass":"ajsc.auth.ShiroUserRole","shiroUserRoleId":"ajsc:contextadmin:__module_ajsc_namespace_name__","roleId":"contextadmin:__module_ajsc_namespace_name__","userId":"ajsc"}
\ No newline at end of file
diff --git a/src/main/runtime/shiroUserRole/ajsc#contextadmin#default.json b/src/main/runtime/shiroUserRole/ajsc#contextadmin#default.json
new file mode 100644 (file)
index 0000000..2bd5063
--- /dev/null
@@ -0,0 +1 @@
+{"shiroUserRoleClass":"ajsc.auth.ShiroUserRole","shiroUserRoleId":"ajsc:contextadmin:default","roleId":"contextadmin:default","userId":"ajsc"}
\ No newline at end of file
index 4018f14..0d068d5 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.config;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.List;
-import java.util.Properties;
-
-import org.eclipse.jetty.util.security.Password;
-import org.junit.Test;
-import org.openecomp.modelloader.restclient.AaiRestClient;
-
-import org.openecomp.sdc.utils.ArtifactTypeEnum;
-
-public class ModelLoaderConfigTest {
-
-  @Test
-  public void testYangModelArtifactType() {
-    Properties props = new Properties();
-    props.setProperty("ml.distribution.ARTIFACT_TYPES",
-        "MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG");
-    ModelLoaderConfig config = new ModelLoaderConfig(props);
-
-    List<String> types = config.getRelevantArtifactTypes();
-
-    System.out.println("ArtifactType: " + types.get(0));
-    assertEquals(0,
-        types.get(0).compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()));
-
-    System.out.println("ArtifactType: " + types.get(1));
-    assertEquals(0, types.get(1).compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()));
-
-    System.out.println("ArtifactType: " + types.get(2));
-    assertEquals(0, types.get(2).compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()));
-
-    assertEquals(3, types.size());
-  }
-
-  @Test
-  public void testDecryptPassword() {
-    Properties props = new Properties();
-    String testPass = "youshallnotpass";
-    String encryptedTestPass = Password.obfuscate(testPass);
-
-    System.out.println("Encrypt " + testPass + " ==> " + encryptedTestPass);
-
-    props.put(ModelLoaderConfig.PROP_ML_DISTRIBUTION_PASSWORD, encryptedTestPass);
-    ModelLoaderConfig config = new ModelLoaderConfig(props);
-
-    assertEquals(testPass, config.getPassword());
-  }
-
-  @Test
-  public void testDecryptKeystorePassword() {
-    Properties props = new Properties();
-    String testPass = "youshallnotpass";
-    String encryptedTestPass = Password.obfuscate(testPass);
-
-    System.out.println("Encrypt " + testPass + " ==> " + encryptedTestPass);
-
-    props.put(ModelLoaderConfig.PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD, encryptedTestPass);
-    ModelLoaderConfig config = new ModelLoaderConfig(props);
-
-    assertEquals(testPass, config.getKeyStorePassword());
-  }
-
-  @Test
-  public void testDecryptAAIPassword() {
-
-    Properties props = new Properties();
-    String testPassword = "myvoiceismypassword";
-    String encryptedTestPassword = Password.obfuscate(testPassword);
-
-    props.put(ModelLoaderConfig.PROP_AAI_AUTHENTICATION_PASSWORD, encryptedTestPassword);
-    ModelLoaderConfig config = new ModelLoaderConfig(props);
-
-    assertEquals(testPassword, config.getAaiAuthenticationPassword());
-  }
-
-  @Test
-  public void testNoAAIAuth() throws IOException {
-
-    Properties props = new Properties();
-    props.load(
-        new FileInputStream("src/test/resources/model-loader-empty-auth-password.properties"));
-
-    ModelLoaderConfig config = new ModelLoaderConfig(props);
-    AaiRestClient aaiClient = new AaiRestClient(config);
-
-    assertFalse("Empty AAI Password should result in no basic authentication",
-        aaiClient.useBasicAuth());
-
-    props.load(new FileInputStream("src/test/resources/model-loader-no-auth-password.properties"));
-    config = new ModelLoaderConfig(props);
-    aaiClient = new AaiRestClient(config);
-
-    assertFalse("No AAI Password should result in no basic authentication",
-        aaiClient.useBasicAuth());
-  }
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.config;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertFalse;\r
+\r
+import java.io.FileInputStream;\r
+import java.io.IOException;\r
+import java.util.List;\r
+import java.util.Properties;\r
+\r
+import org.eclipse.jetty.util.security.Password;\r
+import org.junit.Test;\r
+import org.openecomp.modelloader.restclient.AaiRestClient;\r
+\r
+import org.openecomp.sdc.utils.ArtifactTypeEnum;\r
+\r
+public class ModelLoaderConfigTest {\r
+\r
+  @Test\r
+  public void testYangModelArtifactType() {\r
+    Properties props = new Properties();\r
+    props.setProperty("ml.distribution.ARTIFACT_TYPES",\r
+        "MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG");\r
+    ModelLoaderConfig config = new ModelLoaderConfig(props, null);\r
+\r
+    List<String> types = config.getRelevantArtifactTypes();\r
+\r
+    System.out.println("ArtifactType: " + types.get(0));\r
+    assertEquals(0,\r
+        types.get(0).compareToIgnoreCase(ArtifactTypeEnum.MODEL_INVENTORY_PROFILE.toString()));\r
+\r
+    System.out.println("ArtifactType: " + types.get(1));\r
+    assertEquals(0, types.get(1).compareToIgnoreCase(ArtifactTypeEnum.MODEL_QUERY_SPEC.toString()));\r
+\r
+    System.out.println("ArtifactType: " + types.get(2));\r
+    assertEquals(0, types.get(2).compareToIgnoreCase(ArtifactTypeEnum.VNF_CATALOG.toString()));\r
+\r
+    assertEquals(3, types.size());\r
+  }\r
+\r
+  @Test\r
+  public void testDecryptPassword() {\r
+    Properties props = new Properties();\r
+    String testPass = "youshallnotpass";\r
+    String encryptedTestPass = Password.obfuscate(testPass);\r
+\r
+    System.out.println("Encrypt " + testPass + " ==> " + encryptedTestPass);\r
+\r
+    props.put(ModelLoaderConfig.PROP_ML_DISTRIBUTION_PASSWORD, encryptedTestPass);\r
+    ModelLoaderConfig config = new ModelLoaderConfig(props, null);\r
+\r
+    assertEquals(testPass, config.getPassword());\r
+  }\r
+\r
+  @Test\r
+  public void testDecryptKeystorePassword() {\r
+    Properties props = new Properties();\r
+    String testPass = "youshallnotpass";\r
+    String encryptedTestPass = Password.obfuscate(testPass);\r
+\r
+    System.out.println("Encrypt " + testPass + " ==> " + encryptedTestPass);\r
+\r
+    props.put(ModelLoaderConfig.PROP_ML_DISTRIBUTION_KEYSTORE_PASSWORD, encryptedTestPass);\r
+    ModelLoaderConfig config = new ModelLoaderConfig(props, null);\r
+\r
+    assertEquals(testPass, config.getKeyStorePassword());\r
+  }\r
+\r
+  @Test\r
+  public void testDecryptAAIPassword() {\r
+\r
+    Properties props = new Properties();\r
+    String testPassword = "myvoiceismypassword";\r
+    String encryptedTestPassword = Password.obfuscate(testPassword);\r
+\r
+    props.put(ModelLoaderConfig.PROP_AAI_AUTHENTICATION_PASSWORD, encryptedTestPassword);\r
+    ModelLoaderConfig config = new ModelLoaderConfig(props, null);\r
+\r
+    assertEquals(testPassword, config.getAaiAuthenticationPassword());\r
+  }\r
+\r
+  @Test\r
+  public void testNoAAIAuth() throws IOException {\r
+\r
+    Properties props = new Properties();\r
+    props.load(\r
+        new FileInputStream("src/test/resources/model-loader-empty-auth-password.properties"));\r
+\r
+    ModelLoaderConfig config = new ModelLoaderConfig(props, null);\r
+    AaiRestClient aaiClient = new AaiRestClient(config);\r
+\r
+    assertFalse("Empty AAI Password should result in no basic authentication",\r
+        aaiClient.useBasicAuth());\r
+\r
+    props.load(new FileInputStream("src/test/resources/model-loader-no-auth-password.properties"));\r
+    config = new ModelLoaderConfig(props, null);\r
+    aaiClient = new AaiRestClient(config);\r
+\r
+    assertFalse("No AAI Password should result in no basic authentication",\r
+        aaiClient.useBasicAuth());\r
+  }\r
+  \r
+}\r
index 1b1d955..c81b51d 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.catalog;
-
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mockito;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.restclient.AaiRestClient;
-import org.openecomp.modelloader.restclient.AaiRestClient.MimeType;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-import com.sun.jersey.api.client.ClientResponse;
-
-@RunWith(PowerMockRunner.class)
-@PrepareForTest({ VnfCatalogArtifactHandler.class, ClientResponse.class, AaiRestClient.class })
-public class VnfCatalogArtifactHandlerTest {
-
-  protected static String CONFIG_FILE = "model-loader.properties";
-
-  @Test
-  public void testWithMocks() throws Exception {
-
-    Properties configProperties = new Properties();
-    try {
-      configProperties.load(this.getClass().getClassLoader().getResourceAsStream(CONFIG_FILE));
-    } catch (IOException e) {
-      fail();
-    }
-    ModelLoaderConfig config = new ModelLoaderConfig(configProperties);
-
-    ClientResponse mockGetResp = PowerMockito.mock(ClientResponse.class);
-    PowerMockito.when(mockGetResp.getStatus()).thenReturn(200).thenReturn(200).thenReturn(404)
-        .thenReturn(404).thenReturn(200); // only second two will be PUT
-    ClientResponse mockPutResp = PowerMockito.mock(ClientResponse.class);
-    PowerMockito.when(mockPutResp.getStatus()).thenReturn(201);
-
-    AaiRestClient mockRestClient = PowerMockito.mock(AaiRestClient.class);
-    PowerMockito.whenNew(AaiRestClient.class).withAnyArguments().thenReturn(mockRestClient);
-    PowerMockito.when(mockRestClient.getResource(Mockito.anyString(), Mockito.anyString(),
-        Mockito.any(MimeType.class))).thenReturn(mockGetResp);
-    PowerMockito.when(mockRestClient.putResource(Mockito.anyString(), Mockito.anyString(),
-        Mockito.anyString(), Mockito.any(MimeType.class))).thenReturn(mockPutResp);
-
-    VnfCatalogArtifactHandler vnfCAH = new VnfCatalogArtifactHandler(config);
-
-    String examplePath = "src/test/resources/vnfcatalogexample.xml";
-
-    byte[] encoded = Files.readAllBytes(Paths.get(examplePath));
-    String payload = new String(encoded, "utf-8");
-
-    VnfCatalogArtifact artifact = new VnfCatalogArtifact(payload);
-    List<Artifact> artifacts = new ArrayList<Artifact>();
-    artifacts.add(artifact);
-
-    String distributionID = "test";
-
-    assertTrue(vnfCAH.pushArtifacts(artifacts, distributionID));
-    // times(2) bc with above get returns should only get to this part twice
-    ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class);
-    Mockito.verify(mockRestClient, Mockito.times(2)).putResource(Mockito.anyString(),
-        argument.capture(), Mockito.anyString(), Mockito.any(MimeType.class));
-    assertTrue(argument.getAllValues().get(0).contains("5.2.5"));
-    assertTrue(argument.getAllValues().get(1).contains("5.2.4"));
-  }
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.entity.catalog;\r
+\r
+import static org.junit.Assert.assertTrue;\r
+import static org.junit.Assert.fail;\r
+\r
+import java.io.IOException;\r
+import java.nio.file.Files;\r
+import java.nio.file.Paths;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Properties;\r
+\r
+import org.junit.Test;\r
+import org.junit.runner.RunWith;\r
+import org.mockito.ArgumentCaptor;\r
+import org.mockito.Mockito;\r
+import org.openecomp.modelloader.config.ModelLoaderConfig;\r
+import org.openecomp.modelloader.entity.Artifact;\r
+import org.openecomp.modelloader.restclient.AaiRestClient;\r
+import org.openecomp.modelloader.restclient.AaiRestClient.MimeType;\r
+import org.powermock.api.mockito.PowerMockito;\r
+import org.powermock.core.classloader.annotations.PrepareForTest;\r
+import org.powermock.modules.junit4.PowerMockRunner;\r
+\r
+import com.sun.jersey.api.client.ClientResponse;\r
+\r
+@RunWith(PowerMockRunner.class)\r
+@PrepareForTest({ VnfCatalogArtifactHandler.class, ClientResponse.class, AaiRestClient.class })\r
+public class VnfCatalogArtifactHandlerTest {\r
+\r
+  protected static String CONFIG_FILE = "model-loader.properties";\r
+\r
+  @Test\r
+  public void testWithMocks() throws Exception {\r
+\r
+    Properties configProperties = new Properties();\r
+    try {\r
+      configProperties.load(this.getClass().getClassLoader().getResourceAsStream(CONFIG_FILE));\r
+    } catch (IOException e) {\r
+      fail();\r
+    }\r
+    ModelLoaderConfig config = new ModelLoaderConfig(configProperties, null);\r
+\r
+    ClientResponse mockGetResp = PowerMockito.mock(ClientResponse.class);\r
+    PowerMockito.when(mockGetResp.getStatus()).thenReturn(200).thenReturn(200).thenReturn(404)\r
+        .thenReturn(404).thenReturn(200); // only second two will be PUT\r
+    ClientResponse mockPutResp = PowerMockito.mock(ClientResponse.class);\r
+    PowerMockito.when(mockPutResp.getStatus()).thenReturn(201);\r
+\r
+    AaiRestClient mockRestClient = PowerMockito.mock(AaiRestClient.class);\r
+    PowerMockito.whenNew(AaiRestClient.class).withAnyArguments().thenReturn(mockRestClient);\r
+    PowerMockito.when(mockRestClient.getResource(Mockito.anyString(), Mockito.anyString(),\r
+        Mockito.any(MimeType.class))).thenReturn(mockGetResp);\r
+    PowerMockito.when(mockRestClient.putResource(Mockito.anyString(), Mockito.anyString(),\r
+        Mockito.anyString(), Mockito.any(MimeType.class))).thenReturn(mockPutResp);\r
+\r
+    VnfCatalogArtifactHandler vnfCAH = new VnfCatalogArtifactHandler(config);\r
+\r
+    String examplePath = "src/test/resources/vnfcatalogexample.xml";\r
+\r
+    byte[] encoded = Files.readAllBytes(Paths.get(examplePath));\r
+    String payload = new String(encoded, "utf-8");\r
+\r
+    VnfCatalogArtifact artifact = new VnfCatalogArtifact(payload);\r
+    List<Artifact> artifacts = new ArrayList<Artifact>();\r
+    artifacts.add(artifact);\r
+\r
+    String distributionID = "test";\r
+\r
+    assertTrue(vnfCAH.pushArtifacts(artifacts, distributionID));\r
+    // times(2) bc with above get returns should only get to this part twice\r
+    ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class);\r
+    Mockito.verify(mockRestClient, Mockito.times(2)).putResource(Mockito.anyString(),\r
+        argument.capture(), Mockito.anyString(), Mockito.any(MimeType.class));\r
+    assertTrue(argument.getAllValues().get(0).contains("5.2.5"));\r
+    assertTrue(argument.getAllValues().get(1).contains("5.2.4"));\r
+  }\r
+}\r
index f7b7871..994c4db 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.model;
-
-import static org.junit.Assert.assertTrue;
-
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.List;
-
-import org.junit.Test;
-import org.openecomp.modelloader.entity.Artifact;
-
-public class ModelArtifactParserTest {
-
-  @Test
-  public void testParseModelFileNoDeps() throws Exception {
-    final String MODEL_FILE = "src/test/resources/models/vnf-model.xml";
-
-    try {
-      byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE));
-
-      ModelArtifactParser parser = new ModelArtifactParser();
-      List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact");
-
-      assertTrue(modelList.size() == 1);
-
-      ModelArtifact model = (ModelArtifact) modelList.get(0);
-      System.out.println(model.toString());
-
-      assertTrue(model.getNameVersionId().equalsIgnoreCase("model-vid"));
-      assertTrue(model.getType().toString().equalsIgnoreCase("MODEL"));
-      assertTrue(model.getDependentModelIds().size() == 0);
-    } catch (Exception e) {
-      e.printStackTrace();
-      assertTrue(false);
-    }
-  }
-
-  @Test
-  public void testParseModelFileDeps() throws Exception {
-    final String MODEL_FILE = "src/test/resources/models/wan-connector-model.xml";
-
-    try {
-      byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE));
-
-      ModelArtifactParser parser = new ModelArtifactParser();
-      List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact");
-
-      assertTrue(modelList.size() == 1);
-
-      ModelArtifact model = (ModelArtifact) modelList.get(0);
-      System.out.println(model.toString());
-
-      assertTrue(model.getNameVersionId().equalsIgnoreCase("93d9d45d-7eec-4371-9083-675e4c353de3"));
-      assertTrue(model.getType().toString().equalsIgnoreCase("MODEL"));
-      assertTrue(model.getDependentModelIds().size() == 7);
-      assertTrue(model.getDependentModelIds().contains("d09dd9da-0148-46cd-a947-591afc844d24"));
-      assertTrue(model.getDependentModelIds().contains("ae16244f-4d29-4801-a559-e25f2db2a4c3"));
-      assertTrue(model.getDependentModelIds().contains("a6d9de88-4046-4b78-a59e-5691243d292a"));
-    } catch (Exception e) {
-      e.printStackTrace();
-      assertTrue(false);
-    }
-  }
-
-  @Test
-  public void testParseCompleteModel() throws Exception {
-    final String MODEL_FILE = "src/test/resources/models/complete-model.xml";
-
-    try {
-      byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE));
-
-      ModelArtifactParser parser = new ModelArtifactParser();
-      List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact");
-
-      for (Artifact art : modelList) {
-        ModelArtifact model = (ModelArtifact) art;
-        System.out.println(model.toString());
-      }
-
-      assertTrue(modelList.size() == 3);
-
-      ModelArtifact modelVdc = (ModelArtifact) modelList.get(0);
-      assertTrue(
-          modelVdc.getNameVersionId().equalsIgnoreCase("997fc7-fca1-451f-b953-9a1e6197b4d6"));
-      assertTrue(modelVdc.getType().toString().equalsIgnoreCase("MODEL"));
-      assertTrue(modelVdc.getDependentModelIds().size() == 1);
-      assertTrue(modelVdc.getDependentModelIds().contains("93d9d45d-7eec-4371-9083-675e4c353de3"));
-
-      ModelArtifact modelPserver = (ModelArtifact) modelList.get(2);
-      assertTrue(
-          modelPserver.getNameVersionId().equalsIgnoreCase("f2b24d95-c582-48d5-b2d6-c5b3a94ce812"));
-      assertTrue(modelPserver.getType().toString().equalsIgnoreCase("MODEL"));
-      assertTrue(modelPserver.getDependentModelIds().size() == 2);
-      assertTrue(
-          modelPserver.getDependentModelIds().contains("35be1acf-1298-48c6-a128-66850083b8bd"));
-      assertTrue(
-          modelPserver.getDependentModelIds().contains("759dbd4a-2473-46f3-a932-48d987c9b4a1"));
-    } catch (Exception e) {
-      e.printStackTrace();
-      assertTrue(false);
-    }
-  }
-
-  @Test
-  public void testParseNamedQuery() throws Exception {
-    final String MODEL_FILE = "src/test/resources/models/named-query-wan-connector.xml";
-
-    try {
-      byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE));
-
-      ModelArtifactParser parser = new ModelArtifactParser();
-      List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact");
-
-      assertTrue(modelList.size() == 1);
-
-      ModelArtifact model = (ModelArtifact) modelList.get(0);
-      System.out.println(model.toString());
-
-      assertTrue(model.getNameVersionId().equalsIgnoreCase("94cac189-8d88-4d63-a194-f44214e080ff"));
-      assertTrue(model.getType().toString().equalsIgnoreCase("NAMED_QUERY"));
-      assertTrue(model.getDependentModelIds().size() == 4);
-      assertTrue(model.getDependentModelIds().contains("d09dd9da-0148-46cd-a947-591afc844d24"));
-      assertTrue(model.getDependentModelIds().contains("997fc7-fca1-451f-b953-9a1e6197b4d6"));
-      assertTrue(model.getDependentModelIds().contains("897df7ea-8938-42b0-bc57-46e913a4d93b"));
-      assertTrue(model.getDependentModelIds().contains("f2b24d95-c582-48d5-b2d6-c5b3a94ce812"));
-    } catch (Exception e) {
-      e.printStackTrace();
-      assertTrue(false);
-    }
-  }
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.entity.model;\r
+\r
+import static org.junit.Assert.assertTrue;\r
+\r
+import java.nio.file.Files;\r
+import java.nio.file.Paths;\r
+import java.util.List;\r
+\r
+import org.junit.Test;\r
+import org.openecomp.modelloader.entity.Artifact;\r
+\r
+public class ModelArtifactParserTest {\r
+\r
+       @Test\r
+       public void testParseModelFileNoDeps() throws Exception {\r
+               final String MODEL_FILE = "src/test/resources/models/l3-network-widget.xml";\r
+\r
+               try {\r
+                       byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE));\r
+\r
+                       ModelArtifactParser parser = new ModelArtifactParser();\r
+                       List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact");\r
+\r
+                       assertTrue(modelList.size() == 1);\r
+\r
+                       ModelArtifact model = (ModelArtifact) modelList.get(0);\r
+                       System.out.println(model.toString());\r
+\r
+                       assertTrue(model.getModelInvariantId().equalsIgnoreCase("3d560d81-57d0-438b-a2a1-5334dba0651a"));\r
+                       assertTrue(model.getType().toString().equalsIgnoreCase("MODEL"));\r
+                       System.out.println(model.getDependentModelIds().size());\r
+                       assertTrue(model.getDependentModelIds().size() == 0);\r
+               } catch (Exception e) {\r
+                       e.printStackTrace();\r
+                       assertTrue(false);\r
+               }\r
+       }\r
+\r
+       @Test\r
+       public void testParseModelFileDeps() throws Exception {\r
+               final String MODEL_FILE = "src/test/resources/models/AAI-stellService-service-1.xml";\r
+\r
+               try {\r
+                       byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE));\r
+\r
+                       ModelArtifactParser parser = new ModelArtifactParser();\r
+                       List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact");\r
+\r
+                       assertTrue(modelList.size() == 1);\r
+\r
+                       ModelArtifact model = (ModelArtifact) modelList.get(0);\r
+                       System.out.println(model.toString());\r
+\r
+                       assertTrue(model.getModelInvariantId().equalsIgnoreCase("fedf9da3-6a74-4813-8fa2-221a98b0e7ad"));\r
+                       assertTrue(model.getModelVerId().equalsIgnoreCase("e0373537-7f66-4094-9939-e2f5de6ff5f6"));\r
+                       assertTrue(model.getType().toString().equalsIgnoreCase("MODEL"));\r
+                       assertTrue(model.getDependentModelIds().size() == 3);\r
+                       assertTrue(model.getDependentModelIds().contains("5c12984d-db0f-4300-a0e0-9791775cc40f|88bdbadf-db8a-490f-881e-c8effcbc3f66"));\r
+                       assertTrue(model.getDependentModelIds().contains("959b7c09-9f34-4e5f-8b63-505381db176e|374d0899-bbc2-4403-9320-fe9bebef75c6"));\r
+               } catch (Exception e) {\r
+                       e.printStackTrace();\r
+                       assertTrue(false);\r
+               }\r
+       }\r
+\r
+       @Test\r
+       public void testParseCompleteModel() throws Exception {\r
+               final String MODEL_FILE = "src/test/resources/models/complete-model.xml";\r
+\r
+               try {\r
+                       byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE));\r
+\r
+                       ModelArtifactParser parser = new ModelArtifactParser();\r
+                       List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact");\r
+\r
+                       for (Artifact art : modelList) {\r
+                               ModelArtifact model = (ModelArtifact) art;\r
+                               System.out.println(model.toString());\r
+                       }\r
+\r
+                       assertTrue(modelList.size() == 5);\r
+\r
+                       ModelArtifact model1 = (ModelArtifact)modelList.get(0);\r
+                       assertTrue(model1.getModelVerId().equalsIgnoreCase("88bdbadf-db8a-490f-881e-c8effcbc3f66"));\r
+                       assertTrue(model1.getType().toString().equalsIgnoreCase("MODEL"));\r
+                       assertTrue(model1.getDependentModelIds().size() == 1);\r
+                       assertTrue(model1.getDependentModelIds().contains("3d560d81-57d0-438b-a2a1-5334dba0651a|9111f20f-e680-4001-b83f-19a2fc23bfc1"));\r
+\r
+                       ModelArtifact model4 = (ModelArtifact)modelList.get(4);\r
+                       assertTrue(model4.getModelInvariantId().equalsIgnoreCase("fedf9da3-6a74-4813-8fa2-221a98b0e7ad"));\r
+                       assertTrue(model4.getType().toString().equalsIgnoreCase("MODEL"));\r
+                       assertTrue(model4.getDependentModelIds().size() == 3);\r
+                       assertTrue(model4.getDependentModelIds().contains("5c12984d-db0f-4300-a0e0-9791775cc40f|88bdbadf-db8a-490f-881e-c8effcbc3f66"));\r
+                       assertTrue(model4.getDependentModelIds().contains("82194af1-3c2c-485a-8f44-420e22a9eaa4|46b92144-923a-4d20-b85a-3cbd847668a9"));\r
+               } catch (Exception e) {\r
+                       e.printStackTrace();\r
+                       assertTrue(false);\r
+               }\r
+       }\r
+\r
+       @Test\r
+       public void testParseNamedQuery() throws Exception {\r
+               final String MODEL_FILE = "src/test/resources/models/named-query-wan-connector.xml";\r
+\r
+               try {\r
+                       byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE));\r
+\r
+                       ModelArtifactParser parser = new ModelArtifactParser();\r
+                       List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact");\r
+\r
+                       assertTrue(modelList.size() == 1);\r
+\r
+                       ModelArtifact model = (ModelArtifact) modelList.get(0);\r
+                       System.out.println(model.toString());\r
+\r
+                       assertTrue(model.getNameVersionId().equalsIgnoreCase("94cac189-8d88-4d63-a194-f44214e080ff"));\r
+                       assertTrue(model.getType().toString().equalsIgnoreCase("NAMED_QUERY"));\r
+                       assertTrue(model.getDependentModelIds().size() == 4);\r
+                       assertTrue(model.getDependentModelIds().contains("d09dd9da-0148-46cd-a947-591afc844d24"));\r
+                       assertTrue(model.getDependentModelIds().contains("997fc7-fca1-451f-b953-9a1e6197b4d6"));\r
+                       assertTrue(model.getDependentModelIds().contains("897df7ea-8938-42b0-bc57-46e913a4d93b"));\r
+                       assertTrue(model.getDependentModelIds().contains("f2b24d95-c582-48d5-b2d6-c5b3a94ce812"));\r
+               } catch (Exception e) {\r
+                       e.printStackTrace();\r
+                       assertTrue(false);\r
+               }\r
+       }\r
+\r
+       @Test\r
+       public void testParseModelFileInvalidArtifact() throws Exception {\r
+               final String MODEL_FILE = "src/test/resources/models/invalid-model.xml";\r
+\r
+               try {\r
+                       byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE));            \r
+\r
+                       ModelArtifactParser parser = new ModelArtifactParser();\r
+                       List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact");\r
+\r
+                       assertTrue(modelList == null || modelList.isEmpty());\r
+               }\r
+               catch (Exception e) {\r
+                       e.printStackTrace();\r
+                       assertTrue(false);\r
+               }\r
+       }\r
+\r
+       @Test\r
+       public void testParseModelFileIncompleteArtifact() throws Exception {\r
+               final String MODEL_FILE = "src/test/resources/models/incomplete-model.xml";\r
+\r
+               try {\r
+                       byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE));            \r
+\r
+                       ModelArtifactParser parser = new ModelArtifactParser();\r
+                       List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact");\r
+\r
+                       assertTrue(modelList == null || modelList.isEmpty());\r
+               }\r
+               catch (Exception e) {\r
+                       e.printStackTrace();\r
+                       assertTrue(false);\r
+               }\r
+       }\r
+\r
+       @Test\r
+       public void testParseModelFileIncompleteArtifacts() throws Exception {\r
+               final String MODEL_FILE = "src/test/resources/models/incomplete-models.xml";\r
+\r
+               try {\r
+                       byte[] xmlBytes = Files.readAllBytes(Paths.get(MODEL_FILE));            \r
+\r
+                       ModelArtifactParser parser = new ModelArtifactParser();\r
+                       List<Artifact> modelList = parser.parse(xmlBytes, "test-artifact");\r
+\r
+                       assertTrue(modelList == null || modelList.isEmpty());\r
+               }\r
+               catch (Exception e) {\r
+                       e.printStackTrace();\r
+                       assertTrue(false);\r
+               }\r
+       }\r
+\r
+}\r
index dea537f..6a9cf88 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.entity.model;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.junit.Test;
-import org.openecomp.modelloader.entity.Artifact;
-
-public class ModelSorterTest {
-
-  @Test
-  public void noModels() {
-
-    List<Artifact> emptyList = Collections.emptyList();
-
-    ModelSorter sorter = new ModelSorter();
-    sorter = new ModelSorter();
-
-    List<Artifact> sortedList = sorter.sort(emptyList);
-    assertNotNull(sortedList);
-    assertEquals(0, sortedList.size());
-
-  }
-
-  @Test
-  public void singleModel() {
-
-    List<Artifact> modelList = new ArrayList<Artifact>();
-
-    ModelArtifact model = new ModelArtifact();
-    model.setNameVersionId("aaaaa");
-    model.addDependentModelId("xyz");
-    modelList.add(model);
-
-    ModelSorter sorter = new ModelSorter();
-    sorter = new ModelSorter();
-
-    List<Artifact> sortedList = sorter.sort(modelList);
-    assertNotNull(sortedList);
-    assertEquals(1, sortedList.size());
-
-  }
-
-  /**
-   * 
-   * depends on depends on B ------> A -------> C
-   *
-   *
-   * Input list = a, b, c Sorted list = c, a, b
-   *
-   */
-  @Test
-  public void multipleModels() {
-
-    List<Artifact> modelList = new ArrayList<Artifact>();
-
-    ModelArtifact aaaa = new ModelArtifact();
-    aaaa.setNameVersionId("aaaa");
-    aaaa.addDependentModelId("cccc");
-
-    ModelArtifact bbbb = new ModelArtifact();
-    bbbb.setNameVersionId("bbbb");
-    bbbb.addDependentModelId("aaaa");
-
-    ModelArtifact cccc = new ModelArtifact();
-    cccc.setNameVersionId("cccc");
-
-    modelList.add(aaaa);
-    modelList.add(bbbb);
-    modelList.add(cccc);
-
-    ModelSorter sorter = new ModelSorter();
-    sorter = new ModelSorter();
-
-    List<Artifact> sortedList = sorter.sort(modelList);
-    assertNotNull(sortedList);
-    assertEquals(3, sortedList.size());
-
-    assertEquals(cccc, sortedList.get(0));
-    assertEquals(aaaa, sortedList.get(1));
-    assertEquals(bbbb, sortedList.get(2));
-  }
-
-  @Test(expected = RuntimeException.class)
-  public void circularDependency() {
-
-    List<Artifact> modelList = new ArrayList<Artifact>();
-
-    ModelArtifact aaaa = new ModelArtifact();
-    aaaa.setNameVersionId("aaaa");
-    aaaa.addDependentModelId("bbbb");
-
-    ModelArtifact bbbb = new ModelArtifact();
-    bbbb.setNameVersionId("bbbb");
-    bbbb.addDependentModelId("aaaa");
-
-    modelList.add(aaaa);
-    modelList.add(bbbb);
-
-    ModelSorter sorter = new ModelSorter();
-    sorter = new ModelSorter();
-
-    List<Artifact> sortedList = sorter.sort(modelList);
-    assertNotNull(sortedList);
-    assertEquals(3, sortedList.size());
-
-  }
-
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.entity.model;\r
+\r
+import static org.junit.Assert.assertEquals;\r
+import static org.junit.Assert.assertNotNull;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.List;\r
+\r
+import org.junit.Test;\r
+import org.openecomp.modelloader.entity.Artifact;\r
+\r
+public class ModelSorterTest {\r
+\r
+  @Test\r
+  public void noModels() {\r
+\r
+    List<Artifact> emptyList = Collections.emptyList();\r
+\r
+    ModelSorter sorter = new ModelSorter();\r
+    sorter = new ModelSorter();\r
+\r
+    List<Artifact> sortedList = sorter.sort(emptyList);\r
+    assertNotNull(sortedList);\r
+    assertEquals(0, sortedList.size());\r
+\r
+  }\r
+\r
+  @Test\r
+  public void singleModel() {\r
+\r
+    List<Artifact> modelList = new ArrayList<Artifact>();\r
+\r
+    ModelArtifact model = new ModelArtifact();\r
+    model.setNameVersionId("aaaaa");\r
+    model.addDependentModelId("xyz");\r
+    modelList.add(model);\r
+\r
+    ModelSorter sorter = new ModelSorter();\r
+    sorter = new ModelSorter();\r
+\r
+    List<Artifact> sortedList = sorter.sort(modelList);\r
+    assertNotNull(sortedList);\r
+    assertEquals(1, sortedList.size());\r
+\r
+  }\r
+\r
+  /**\r
+   * \r
+   * depends on depends on B ------> A -------> C\r
+   *\r
+   *\r
+   * Input list = a, b, c Sorted list = c, a, b\r
+   *\r
+   */\r
+  @Test\r
+  public void multipleModels() {\r
+\r
+    List<Artifact> modelList = new ArrayList<Artifact>();\r
+\r
+    ModelArtifact aaaa = new ModelArtifact();\r
+    aaaa.setModelInvariantId("aaaa");\r
+       aaaa.setModelVerId("mvaaaa");\r
+       aaaa.addDependentModelId("cccc|mvcccc");\r
+\r
+    ModelArtifact bbbb = new ModelArtifact();\r
+    bbbb.setModelInvariantId("bbbb");\r
+       bbbb.setModelVerId("mvbbbb");\r
+       bbbb.addDependentModelId("aaaa|mvaaaa");\r
+\r
+    ModelArtifact cccc = new ModelArtifact();\r
+    cccc.setModelInvariantId("cccc");\r
+       cccc.setModelVerId("mvcccc");\r
+\r
+    modelList.add(aaaa);\r
+    modelList.add(bbbb);\r
+    modelList.add(cccc);\r
+\r
+    ModelSorter sorter = new ModelSorter();\r
+    sorter = new ModelSorter();\r
+\r
+    List<Artifact> sortedList = sorter.sort(modelList);\r
+    assertNotNull(sortedList);\r
+    assertEquals(3, sortedList.size());\r
+\r
+    assertEquals(cccc, sortedList.get(0));\r
+    assertEquals(aaaa, sortedList.get(1));\r
+    assertEquals(bbbb, sortedList.get(2));\r
+  }\r
+\r
+  @Test(expected = RuntimeException.class)\r
+  public void circularDependency() {\r
+\r
+    List<Artifact> modelList = new ArrayList<Artifact>();\r
+\r
+    ModelArtifact aaaa = new ModelArtifact();\r
+    aaaa.setNameVersionId("aaaa");\r
+    aaaa.addDependentModelId("bbbb");\r
+\r
+    ModelArtifact bbbb = new ModelArtifact();\r
+    bbbb.setNameVersionId("bbbb");\r
+    bbbb.addDependentModelId("aaaa");\r
+\r
+    modelList.add(aaaa);\r
+    modelList.add(bbbb);\r
+\r
+    ModelSorter sorter = new ModelSorter();\r
+    sorter = new ModelSorter();\r
+\r
+    List<Artifact> sortedList = sorter.sort(modelList);\r
+    assertNotNull(sortedList);\r
+    assertEquals(3, sortedList.size());\r
+\r
+  }\r
+\r
+}\r
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.restclient;
-
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.entity.ArtifactType;
-import org.openecomp.modelloader.entity.model.ModelArtifact;
-
-public class AAIRestClientTest {
-
-  // This test requires a running A&AI system. Uncomment to test locally.
-  /*
-   * @Test public void testRestClient() throws Exception { final String
-   * MODEL_FILE = "src/test/resources/models/vnf-model.xml";
-   * 
-   * Properties props = new Properties();
-   * props.setProperty("ml.distribution.ARTIFACT_TYPES",
-   * "MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG");
-   * props.setProperty("ml.aai.BASE_URL", "https://127.0.0.1:4321");
-   * props.setProperty("ml.aai.MODEL_URL",
-   * "/aai/v8/service-design-and-creation/models/model/");
-   * props.setProperty("ml.aai.KEYSTORE_FILE", "aai-client-cert.p12");
-   * props.setProperty("ml.aai.KEYSTORE_PASSWORD",
-   * "OBF:1i9a1u2a1unz1lr61wn51wn11lss1unz1u301i6o");
-   * 
-   * ModelLoaderConfig config = new ModelLoaderConfig(props, "");
-   * 
-   * String payload = readFile(MODEL_FILE); System.out.println("FILE:" +
-   * payload);
-   * 
-   * File xmlFile = new File(MODEL_FILE); DocumentBuilderFactory dbFactory =
-   * DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder =
-   * dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(xmlFile);
-   * 
-   * // Get the ID of the model String modelId = null; NodeList nodeList =
-   * doc.getDocumentElement().getChildNodes(); for (int i = 0; i <
-   * nodeList.getLength(); i++) { Node currentNode = nodeList.item(i); if
-   * (currentNode.getNodeName().equals("model-name-version-id")) { modelId =
-   * currentNode.getTextContent(); break; } }
-   * 
-   * // Add the model try { ModelArtifact model = new ModelArtifact();
-   * model.setNameVersionId(modelId); model.setType(ArtifactType.MODEL);
-   * model.setPayload(payload);
-   * 
-   * AAIRestClient aaiClient = new AAIRestClient(config);
-   * 
-   * // GET model System.out.println("Calling GET API ..."); ClientResponse
-   * getResponse = aaiClient.getResource(getURL(model, config),
-   * "example-trans-id-0", AAIRestClient.MimeType.XML); System.out.println(
-   * "GET result: " + getResponse.getStatus());
-   * assertTrue(getResponse.getStatus() ==
-   * Response.Status.NOT_FOUND.getStatusCode());
-   * 
-   * // Add the model System.out.println("Calling PUT API ..."); ClientResponse
-   * res = aaiClient.putResource(getURL(model, config), model.getPayload(),
-   * "example-trans-id-1", AAIRestClient.MimeType.XML); System.out.println(
-   * "PUT result: " + res.getStatus()); assertTrue(res.getStatus() ==
-   * Response.Status.CREATED.getStatusCode());
-   * 
-   * // Delete the model System.out.println("Calling DELETE API ..."); res =
-   * aaiClient.getAndDeleteResource(getURL(model, config),
-   * "example-trans-id-3"); System.out.println("DELETE result: " +
-   * res.getStatus()); assertTrue(res.getStatus() ==
-   * Response.Status.NO_CONTENT.getStatusCode()); } catch (Exception e) {
-   * e.printStackTrace(); } }
-   */
-
-  static String readFile(String path) throws IOException {
-    byte[] encoded = Files.readAllBytes(Paths.get(path));
-    return new String(encoded);
-  }
-
-  private String getURL(ModelArtifact model, ModelLoaderConfig config) {
-    String baseURL = config.getAaiBaseUrl().trim();
-    String subURL = null;
-    if (model.getType().equals(ArtifactType.MODEL)) {
-      subURL = config.getAaiModelUrl().trim();
-    } else {
-      subURL = config.getAaiNamedQueryUrl().trim();
-    }
-
-    if ((!baseURL.endsWith("/")) && (!subURL.startsWith("/"))) {
-      baseURL = baseURL + "/";
-    }
-
-    if (baseURL.endsWith("/") && subURL.startsWith("/")) {
-      baseURL = baseURL.substring(0, baseURL.length() - 1);
-    }
-
-    if (!subURL.endsWith("/")) {
-      subURL = subURL + "/";
-    }
-
-    String url = baseURL + subURL + model.getNameVersionId();
-    return url;
-  }
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.restclient;\r
+\r
+import java.io.IOException;\r
+import java.nio.file.Files;\r
+import java.nio.file.Paths;\r
+\r
+import org.openecomp.modelloader.config.ModelLoaderConfig;\r
+import org.openecomp.modelloader.entity.ArtifactType;\r
+import org.openecomp.modelloader.entity.model.ModelArtifact;\r
+\r
+public class AaiRestClientTest {\r
+\r
+  // This test requires a running A&AI system. Uncomment to test locally.\r
+  /*\r
+   * @Test public void testRestClient() throws Exception { final String\r
+   * MODEL_FILE = "src/test/resources/models/vnf-model.xml";\r
+   * \r
+   * Properties props = new Properties();\r
+   * props.setProperty("ml.distribution.ARTIFACT_TYPES",\r
+   * "MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG");\r
+   * props.setProperty("ml.aai.BASE_URL", "https://127.0.0.1:4321");\r
+   * props.setProperty("ml.aai.MODEL_URL",\r
+   * "/aai/v8/service-design-and-creation/models/model/");\r
+   * props.setProperty("ml.aai.KEYSTORE_FILE", "aai-client-cert.p12");\r
+   * props.setProperty("ml.aai.KEYSTORE_PASSWORD",\r
+   * "OBF:1i9a1u2a1unz1lr61wn51wn11lss1unz1u301i6o");\r
+   * \r
+   * ModelLoaderConfig config = new ModelLoaderConfig(props, "");\r
+   * \r
+   * String payload = readFile(MODEL_FILE); System.out.println("FILE:" +\r
+   * payload);\r
+   * \r
+   * File xmlFile = new File(MODEL_FILE); DocumentBuilderFactory dbFactory =\r
+   * DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder =\r
+   * dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(xmlFile);\r
+   * \r
+   * // Get the ID of the model String modelId = null; NodeList nodeList =\r
+   * doc.getDocumentElement().getChildNodes(); for (int i = 0; i <\r
+   * nodeList.getLength(); i++) { Node currentNode = nodeList.item(i); if\r
+   * (currentNode.getNodeName().equals("model-name-version-id")) { modelId =\r
+   * currentNode.getTextContent(); break; } }\r
+   * \r
+   * // Add the model try { ModelArtifact model = new ModelArtifact();\r
+   * model.setNameVersionId(modelId); model.setType(ArtifactType.MODEL);\r
+   * model.setPayload(payload);\r
+   * \r
+   * AAIRestClient aaiClient = new AAIRestClient(config);\r
+   * \r
+   * // GET model System.out.println("Calling GET API ..."); ClientResponse\r
+   * getResponse = aaiClient.getResource(getURL(model, config),\r
+   * "example-trans-id-0", AAIRestClient.MimeType.XML); System.out.println(\r
+   * "GET result: " + getResponse.getStatus());\r
+   * assertTrue(getResponse.getStatus() ==\r
+   * Response.Status.NOT_FOUND.getStatusCode());\r
+   * \r
+   * // Add the model System.out.println("Calling PUT API ..."); ClientResponse\r
+   * res = aaiClient.putResource(getURL(model, config), model.getPayload(),\r
+   * "example-trans-id-1", AAIRestClient.MimeType.XML); System.out.println(\r
+   * "PUT result: " + res.getStatus()); assertTrue(res.getStatus() ==\r
+   * Response.Status.CREATED.getStatusCode());\r
+   * \r
+   * // Delete the model System.out.println("Calling DELETE API ..."); res =\r
+   * aaiClient.getAndDeleteResource(getURL(model, config),\r
+   * "example-trans-id-3"); System.out.println("DELETE result: " +\r
+   * res.getStatus()); assertTrue(res.getStatus() ==\r
+   * Response.Status.NO_CONTENT.getStatusCode()); } catch (Exception e) {\r
+   * e.printStackTrace(); } }\r
+   */\r
+\r
+  static String readFile(String path) throws IOException {\r
+    byte[] encoded = Files.readAllBytes(Paths.get(path));\r
+    return new String(encoded);\r
+  }\r
+\r
+  private String getURL(ModelArtifact model, ModelLoaderConfig config) {\r
+    String baseURL = config.getAaiBaseUrl().trim();\r
+    String subURL = null;\r
+    if (model.getType().equals(ArtifactType.MODEL)) {\r
+      subURL = config.getAaiModelUrl().trim();\r
+    } else {\r
+      subURL = config.getAaiNamedQueryUrl().trim();\r
+    }\r
+\r
+    if ((!baseURL.endsWith("/")) && (!subURL.startsWith("/"))) {\r
+      baseURL = baseURL + "/";\r
+    }\r
+\r
+    if (baseURL.endsWith("/") && subURL.startsWith("/")) {\r
+      baseURL = baseURL.substring(0, baseURL.length() - 1);\r
+    }\r
+\r
+    if (!subURL.endsWith("/")) {\r
+      subURL = subURL + "/";\r
+    }\r
+\r
+    String url = baseURL + subURL + model.getNameVersionId();\r
+    return url;\r
+  }\r
+}\r
diff --git a/src/test/java/org/openecomp/modelloader/service/ModelLoaderServiceTest.java b/src/test/java/org/openecomp/modelloader/service/ModelLoaderServiceTest.java
deleted file mode 100644 (file)
index c2893a9..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.service;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Matchers;
-import org.openecomp.modelloader.config.ModelLoaderConfig;
-import org.openecomp.modelloader.notification.EventCallback;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-import org.openecomp.sdc.api.IDistributionClient;
-import org.openecomp.sdc.api.results.IDistributionClientResult;
-import org.openecomp.sdc.impl.DistributionClientFactory;
-import org.openecomp.sdc.utils.DistributionActionResultEnum;
-
-@PrepareForTest({ DistributionClientFactory.class })
-@RunWith(PowerMockRunner.class)
-public class ModelLoaderServiceTest {
-
-  /*
-   * //TODO this should be re-added once we come up with a strategy to fail
-   * gracefully
-   * 
-   * @Test public void testNonExistentConfiguration(){
-   * ModelLoaderService.CONFIG_LOCATION = "FAKELOCATION";
-   * 
-   * try{ new ModelLoaderService().start(); }catch(RuntimeException e){
-   * assertTrue("Got unexpected message from error log",
-   * e.getMessage().contains("Failed to load configuration")); return; }
-   * 
-   * fail("Expecting runtime exception"); }
-   */
-
-  @Test
-  public void testConfigureStartDistributionClient() {
-    PowerMockito.mockStatic(DistributionClientFactory.class);
-
-    IDistributionClient mockClient = mock(IDistributionClient.class);
-    ModelLoaderConfig mockConfig = mock(ModelLoaderConfig.class);
-
-    when(DistributionClientFactory.createDistributionClient()).thenReturn(mockClient);
-
-    IDistributionClientResult result = mock(IDistributionClientResult.class);
-
-    when(result.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS);
-    when(mockClient.init(Matchers.<ModelLoaderConfig> any(), Matchers.<EventCallback> any()))
-        .thenReturn(result);
-    when(mockClient.start()).thenReturn(result);
-
-    new ModelLoaderService().init();
-
-    // Validate that the client was initialized and started
-    verify(mockClient, times(1)).init(Matchers.<ModelLoaderConfig> any(),
-        Matchers.<EventCallback> any());
-    verify(mockClient, times(1)).start();
-  }
-
-  @Test
-  public void testInitializeButNotStarted() {
-    PowerMockito.mockStatic(DistributionClientFactory.class);
-
-    IDistributionClient mockClient = mock(IDistributionClient.class);
-    ModelLoaderConfig mockConfig = mock(ModelLoaderConfig.class);
-
-    DistributionActionResultEnum failureReason = DistributionActionResultEnum.ASDC_CONNECTION_FAILED;
-
-    when(DistributionClientFactory.createDistributionClient()).thenReturn(mockClient);
-
-    IDistributionClientResult initResult = mock(IDistributionClientResult.class);
-    when(initResult.getDistributionActionResult()).thenReturn(DistributionActionResultEnum.SUCCESS);
-    IDistributionClientResult startResult = mock(IDistributionClientResult.class);
-    when(startResult.getDistributionActionResult()).thenReturn(failureReason);
-
-    when(mockClient.init(Matchers.<ModelLoaderConfig> any(), Matchers.<EventCallback> any()))
-        .thenReturn(initResult);
-    when(mockClient.start()).thenReturn(startResult);
-
-    // TODO this should be re-added once we come up with a strategy to fail
-    // gracefully
-    /*
-     * try{ new ModelLoaderService().init(mockConfig); }catch(RuntimeException
-     * e){ assertTrue(e.getMessage().contains(failureReason.toString()));
-     * return; }
-     * 
-     * fail("Expecting runtime exception with failure: " +
-     * failureReason.toString());
-     */
-  }
-}
index 4654c93..da89c78 100644 (file)
@@ -1,79 +1,81 @@
-/*-
- * ============LICENSE_START=======================================================
- * MODEL LOADER SERVICE
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.modelloader.util;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.io.ByteArrayInputStream;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.junit.Test;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-public class JsonXmlConverterTest {
-
-  @Test
-  public void testConversion() throws Exception {
-    final String XML_MODEL_FILE = "src/test/resources/models/vnf-model.xml";
-    final String JSON_MODEL_FILE = "src/test/resources/models/vnf-model.json";
-
-    try {
-      byte[] encoded = Files.readAllBytes(Paths.get(XML_MODEL_FILE));
-      String originalXML = new String(encoded);
-
-      assertFalse(JsonXmlConverter.isValidJson(originalXML));
-
-      encoded = Files.readAllBytes(Paths.get(JSON_MODEL_FILE));
-      String originalJSON = new String(encoded);
-
-      assertTrue(JsonXmlConverter.isValidJson(originalJSON));
-
-      String xmlFromJson = JsonXmlConverter.convertJsonToXml(originalJSON);
-
-      // Spot check one of the attributes
-      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-      DocumentBuilder builder = factory.newDocumentBuilder();
-      Document doc = builder.parse(new ByteArrayInputStream(xmlFromJson.getBytes()));
-      NodeList nodeList = doc.getDocumentElement().getChildNodes();
-
-      String modelVid = "notFound";
-      for (int i = 0; i < nodeList.getLength(); i++) {
-        Node currentNode = nodeList.item(i);
-        if (currentNode.getNodeName().equals("model-name-version-id")) {
-          modelVid = currentNode.getTextContent();
-          break;
-        }
-      }
-
-      assertTrue(modelVid.equals("model-vid"));
-    } catch (Exception e) {
-      e.printStackTrace();
-      assertTrue(false);
-    }
-  }
-}
+/**\r
+ * ============LICENSE_START=======================================================\r
+ * Model Loader\r
+ * ================================================================================\r
+ * Copyright Â© 2017 AT&T Intellectual Property.\r
+ * Copyright Â© 2017 Amdocs\r
+ * All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ *\r
+ * ECOMP and OpenECOMP are trademarks\r
+ * and service marks of AT&T Intellectual Property.\r
+ */\r
+package org.openecomp.modelloader.util;\r
+\r
+import static org.junit.Assert.assertFalse;\r
+import static org.junit.Assert.assertTrue;\r
+\r
+import java.io.ByteArrayInputStream;\r
+import java.nio.file.Files;\r
+import java.nio.file.Paths;\r
+\r
+import javax.xml.parsers.DocumentBuilder;\r
+import javax.xml.parsers.DocumentBuilderFactory;\r
+\r
+import org.junit.Test;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.Node;\r
+import org.w3c.dom.NodeList;\r
+\r
+public class JsonXmlConverterTest {\r
+\r
+  @Test\r
+  public void testConversion() throws Exception {\r
+       final String XML_MODEL_FILE = "src/test/resources/models/l3-network-widget.xml";\r
+       final String JSON_MODEL_FILE = "src/test/resources/models/l3-network-widget.json";\r
+\r
+    try {\r
+      byte[] encoded = Files.readAllBytes(Paths.get(XML_MODEL_FILE));\r
+      String originalXML = new String(encoded);\r
+\r
+      assertFalse(JsonXmlConverter.isValidJson(originalXML));\r
+\r
+      encoded = Files.readAllBytes(Paths.get(JSON_MODEL_FILE));\r
+      String originalJSON = new String(encoded);\r
+\r
+      assertTrue(JsonXmlConverter.isValidJson(originalJSON));\r
+\r
+      String xmlFromJson = JsonXmlConverter.convertJsonToXml(originalJSON);\r
+\r
+      // Spot check one of the attributes\r
+      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\r
+      DocumentBuilder builder = factory.newDocumentBuilder();\r
+      Document doc = builder.parse(new ByteArrayInputStream(xmlFromJson.getBytes()));\r
+      NodeList nodeList = doc.getDocumentElement().getChildNodes();\r
+\r
+      String modelVid = "notFound";\r
+      for (int i = 0; i < nodeList.getLength(); i++) {\r
+        Node currentNode = nodeList.item(i);\r
+        if (currentNode.getNodeName().equals("model-invariant-id")) {\r
+          modelVid = currentNode.getTextContent();\r
+          break;\r
+        }\r
+      }\r
+\r
+      assertTrue(modelVid.equals("3d560d81-57d0-438b-a2a1-5334dba0651a"));\r
+    } catch (Exception e) {\r
+      e.printStackTrace();\r
+      assertTrue(false);\r
+    }\r
+  }\r
+}\r
index 1252135..3f0fb7a 100644 (file)
@@ -1,37 +1,37 @@
-<!--
+<!--\r
   ============LICENSE_START=======================================================
   MODEL LOADER SERVICE
   ================================================================================
   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
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
   limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<configuration debug="false">
-
-       <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-               <!-- encoders are by default assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
-               <encoder>
-                       <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
-               </encoder>
-       </appender>
-
-       <logger name="com.att.eelf" level="DEBUG" additivity="false">
-               <appender-ref ref="STDOUT" />
-       </logger>
-
-       <root level="debug">
-               <appender-ref ref="STDOUT" />
-       </root>
-</configuration>
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<configuration debug="false">\r
+\r
+       <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">\r
+               <!-- encoders are by default assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder -->\r
+               <encoder>\r
+                       <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>\r
+               </encoder>\r
+       </appender>\r
+\r
+       <logger name="com.att.eelf" level="DEBUG" additivity="false">\r
+               <appender-ref ref="STDOUT" />\r
+       </logger>\r
+\r
+       <root level="debug">\r
+               <appender-ref ref="STDOUT" />\r
+       </root>\r
+</configuration>\r
index 69f3da1..34432a4 100644 (file)
@@ -1,43 +1,43 @@
-###
+###\r
 # ============LICENSE_START=======================================================
 # MODEL LOADER SERVICE
 # ================================================================================
 # 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
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+#      http://www.apache.org/licenses/LICENSE-2.0\r
+# \r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
 # limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-# Model Loader Distribution Client Configuration
-ml.distribution.ACTIVE_SERVER_TLS_AUTH=false
-ml.distribution.ASDC_ADDRESS=
-ml.distribution.CONSUMER_GROUP=aai-ml-group-test
-ml.distribution.CONSUMER_ID=aai-ml-id-test
-ml.distribution.ENVIRONMENT_NAME=
-ml.distribution.KEYSTORE_PASSWORD=
-ml.distribution.KEYSTORE_FILE=asdc-client.jks
-ml.distribution.PASSWORD=
-ml.distribution.POLLING_INTERVAL=30
-ml.distribution.POLLING_TIMEOUT=20
-ml.distribution.USER=ci
-ml.distribution.ARTIFACT_TYPES=MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG
-
-# Model Loader AAI REST Client Configuration
-ml.aai.BASE_URL=
-ml.aai.MODEL_URL=/aai/v8/service-design-and-creation/models/model/
-ml.aai.NAMED_QUERY_URL=/aai/v8/service-design-and-creation/named-queries/named-query/
-ml.aai.VNF_IMAGE_URL=/aai/v8/service-design-and-creation/vnf-images
-ml.aai.KEYSTORE_FILE=aai-client-cert.p12
-ml.aai.KEYSTORE_PASSWORD=
-ml.aai.AUTH_USER=ModelLoader
-ml.aai.AUTH_PASSWORD=
+# ============LICENSE_END=========================================================\r
+###\r
+\r
+# Model Loader Distribution Client Configuration\r
+ml.distribution.ACTIVE_SERVER_TLS_AUTH=false\r
+ml.distribution.ASDC_ADDRESS=\r
+ml.distribution.CONSUMER_GROUP=aai-ml-group-test\r
+ml.distribution.CONSUMER_ID=aai-ml-id-test\r
+ml.distribution.ENVIRONMENT_NAME=\r
+ml.distribution.KEYSTORE_PASSWORD=\r
+ml.distribution.KEYSTORE_FILE=asdc-client.jks\r
+ml.distribution.PASSWORD=\r
+ml.distribution.POLLING_INTERVAL=30\r
+ml.distribution.POLLING_TIMEOUT=20\r
+ml.distribution.USER=ci\r
+ml.distribution.ARTIFACT_TYPES=MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG\r
+\r
+# Model Loader AAI REST Client Configuration\r
+ml.aai.BASE_URL=\r
+ml.aai.MODEL_URL=/aai/v8/service-design-and-creation/models/model/\r
+ml.aai.NAMED_QUERY_URL=/aai/v8/service-design-and-creation/named-queries/named-query/\r
+ml.aai.VNF_IMAGE_URL=/aai/v8/service-design-and-creation/vnf-images\r
+ml.aai.KEYSTORE_FILE=aai-client-cert.p12\r
+ml.aai.KEYSTORE_PASSWORD=\r
+ml.aai.AUTH_USER=ModelLoader\r
+ml.aai.AUTH_PASSWORD=\r
index 8d59db1..035d3e8 100644 (file)
@@ -1,41 +1,41 @@
-###
+###\r
 # ============LICENSE_START=======================================================
 # MODEL LOADER SERVICE
 # ================================================================================
 # 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
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+#      http://www.apache.org/licenses/LICENSE-2.0\r
+# \r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
 # limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-# Model Loader Distribution Client Configuration
-ml.distribution.ACTIVE_SERVER_TLS_AUTH=false
-ml.distribution.ASDC_ADDRESS=
-ml.distribution.CONSUMER_GROUP=aai-ml-group-test
-ml.distribution.CONSUMER_ID=aai-ml-id-test
-ml.distribution.ENVIRONMENT_NAME=
-ml.distribution.KEYSTORE_PASSWORD=
-ml.distribution.KEYSTORE_FILE=asdc-client.jks
-ml.distribution.PASSWORD=
-ml.distribution.POLLING_INTERVAL=30
-ml.distribution.POLLING_TIMEOUT=20
-ml.distribution.USER=ci
-ml.distribution.ARTIFACT_TYPES=MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG
-
-# Model Loader AAI REST Client Configuration
-ml.aai.BASE_URL=
-ml.aai.MODEL_URL=/aai/v8/service-design-and-creation/models/model/
-ml.aai.NAMED_QUERY_URL=/aai/v8/service-design-and-creation/named-queries/named-query/
-ml.aai.VNF_IMAGE_URL=/aai/v8/service-design-and-creation/vnf-images
-ml.aai.KEYSTORE_FILE=aai-client-cert.p12
-ml.aai.KEYSTORE_PASSWORD=
+# ============LICENSE_END=========================================================\r
+###\r
+\r
+# Model Loader Distribution Client Configuration\r
+ml.distribution.ACTIVE_SERVER_TLS_AUTH=false\r
+ml.distribution.ASDC_ADDRESS=\r
+ml.distribution.CONSUMER_GROUP=aai-ml-group-test\r
+ml.distribution.CONSUMER_ID=aai-ml-id-test\r
+ml.distribution.ENVIRONMENT_NAME=\r
+ml.distribution.KEYSTORE_PASSWORD=\r
+ml.distribution.KEYSTORE_FILE=asdc-client.jks\r
+ml.distribution.PASSWORD=\r
+ml.distribution.POLLING_INTERVAL=30\r
+ml.distribution.POLLING_TIMEOUT=20\r
+ml.distribution.USER=ci\r
+ml.distribution.ARTIFACT_TYPES=MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG\r
+\r
+# Model Loader AAI REST Client Configuration\r
+ml.aai.BASE_URL=\r
+ml.aai.MODEL_URL=/aai/v8/service-design-and-creation/models/model/\r
+ml.aai.NAMED_QUERY_URL=/aai/v8/service-design-and-creation/named-queries/named-query/\r
+ml.aai.VNF_IMAGE_URL=/aai/v8/service-design-and-creation/vnf-images\r
+ml.aai.KEYSTORE_FILE=aai-client-cert.p12\r
+ml.aai.KEYSTORE_PASSWORD=\r
index 69f3da1..34432a4 100644 (file)
@@ -1,43 +1,43 @@
-###
+###\r
 # ============LICENSE_START=======================================================
 # MODEL LOADER SERVICE
 # ================================================================================
 # 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
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+#      http://www.apache.org/licenses/LICENSE-2.0\r
+# \r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
 # limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-# Model Loader Distribution Client Configuration
-ml.distribution.ACTIVE_SERVER_TLS_AUTH=false
-ml.distribution.ASDC_ADDRESS=
-ml.distribution.CONSUMER_GROUP=aai-ml-group-test
-ml.distribution.CONSUMER_ID=aai-ml-id-test
-ml.distribution.ENVIRONMENT_NAME=
-ml.distribution.KEYSTORE_PASSWORD=
-ml.distribution.KEYSTORE_FILE=asdc-client.jks
-ml.distribution.PASSWORD=
-ml.distribution.POLLING_INTERVAL=30
-ml.distribution.POLLING_TIMEOUT=20
-ml.distribution.USER=ci
-ml.distribution.ARTIFACT_TYPES=MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG
-
-# Model Loader AAI REST Client Configuration
-ml.aai.BASE_URL=
-ml.aai.MODEL_URL=/aai/v8/service-design-and-creation/models/model/
-ml.aai.NAMED_QUERY_URL=/aai/v8/service-design-and-creation/named-queries/named-query/
-ml.aai.VNF_IMAGE_URL=/aai/v8/service-design-and-creation/vnf-images
-ml.aai.KEYSTORE_FILE=aai-client-cert.p12
-ml.aai.KEYSTORE_PASSWORD=
-ml.aai.AUTH_USER=ModelLoader
-ml.aai.AUTH_PASSWORD=
+# ============LICENSE_END=========================================================\r
+###\r
+\r
+# Model Loader Distribution Client Configuration\r
+ml.distribution.ACTIVE_SERVER_TLS_AUTH=false\r
+ml.distribution.ASDC_ADDRESS=\r
+ml.distribution.CONSUMER_GROUP=aai-ml-group-test\r
+ml.distribution.CONSUMER_ID=aai-ml-id-test\r
+ml.distribution.ENVIRONMENT_NAME=\r
+ml.distribution.KEYSTORE_PASSWORD=\r
+ml.distribution.KEYSTORE_FILE=asdc-client.jks\r
+ml.distribution.PASSWORD=\r
+ml.distribution.POLLING_INTERVAL=30\r
+ml.distribution.POLLING_TIMEOUT=20\r
+ml.distribution.USER=ci\r
+ml.distribution.ARTIFACT_TYPES=MODEL_INVENTORY_PROFILE,MODEL_QUERY_SPEC,VNF_CATALOG\r
+\r
+# Model Loader AAI REST Client Configuration\r
+ml.aai.BASE_URL=\r
+ml.aai.MODEL_URL=/aai/v8/service-design-and-creation/models/model/\r
+ml.aai.NAMED_QUERY_URL=/aai/v8/service-design-and-creation/named-queries/named-query/\r
+ml.aai.VNF_IMAGE_URL=/aai/v8/service-design-and-creation/vnf-images\r
+ml.aai.KEYSTORE_FILE=aai-client-cert.p12\r
+ml.aai.KEYSTORE_PASSWORD=\r
+ml.aai.AUTH_USER=ModelLoader\r
+ml.aai.AUTH_PASSWORD=\r
diff --git a/src/test/resources/models/AAI-Testvsp..vmme_cinder..module-1-resource-1.xml b/src/test/resources/models/AAI-Testvsp..vmme_cinder..module-1-resource-1.xml
new file mode 100644 (file)
index 0000000..7bd1073
--- /dev/null
@@ -0,0 +1,52 @@
+<!--\r
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
+  limitations under the License.
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<model xmlns="http://org.openecomp.aai.inventory/v9">\r
+    <model-invariant-id>5a2aac99-ffe8-415f-9242-420ed10da23e</model-invariant-id>\r
+    <model-type>resource</model-type>\r
+    <model-vers>\r
+        <model-ver>\r
+            <model-version-id>29d3fc43-4ff2-4e5c-acd0-7370f5b2715a</model-version-id>\r
+            <model-name>Testvsp..vmme_cinder..module-1</model-name>\r
+            <model-version>1</model-version>\r
+            <model-description></model-description>\r
+            <model-elements>\r
+                <model-element>\r
+                    <new-data-del-flag>F</new-data-del-flag>\r
+                    <cardinality>unbounded</cardinality>\r
+                    <model-elements/>\r
+                    <relationship-list>\r
+                        <relationship>\r
+                            <related-to>model-ver</related-to>\r
+                            <relationship-data>\r
+                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                <relationship-value>c00563ae-812b-4e62-8330-7c4d0f47088a</relationship-value>\r
+                            </relationship-data>\r
+                            <relationship-data>\r
+                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                <relationship-value>ef86f9c5-2165-44f3-8fc3-96018b609ea5</relationship-value>\r
+                            </relationship-data>\r
+                        </relationship>\r
+                    </relationship-list>\r
+                </model-element>\r
+            </model-elements>\r
+        </model-ver>\r
+    </model-vers>\r
+</model>\r
diff --git a/src/test/resources/models/AAI-Testvsp..vmme_small_ecomp..module-0-resource-1.xml b/src/test/resources/models/AAI-Testvsp..vmme_small_ecomp..module-0-resource-1.xml
new file mode 100644 (file)
index 0000000..8fe5319
--- /dev/null
@@ -0,0 +1,180 @@
+<!--\r
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
+  limitations under the License.
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<model xmlns="http://org.openecomp.aai.inventory/v9">\r
+    <model-invariant-id>1e8fdfc0-03cf-4742-b060-dab818954d67</model-invariant-id>\r
+    <model-type>resource</model-type>\r
+    <model-vers>\r
+        <model-ver>\r
+            <model-version-id>da6769f0-aa58-4e90-b2c9-664c2630d131</model-version-id>\r
+            <model-name>Testvsp..vmme_small_ecomp..module-0</model-name>\r
+            <model-version>1</model-version>\r
+            <model-description></model-description>\r
+            <model-elements>\r
+                <model-element>\r
+                    <new-data-del-flag>F</new-data-del-flag>\r
+                    <cardinality>unbounded</cardinality>\r
+                    <model-elements>\r
+                        <model-element>\r
+                            <new-data-del-flag>F</new-data-del-flag>\r
+                            <cardinality>unbounded</cardinality>\r
+                            <model-elements>\r
+                                <model-element>\r
+                                    <new-data-del-flag>F</new-data-del-flag>\r
+                                    <cardinality>unbounded</cardinality>\r
+                                    <model-elements/>\r
+                                    <relationship-list>\r
+                                        <relationship>\r
+                                            <related-to>model-ver</related-to>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                                <relationship-value>f6a038c2-820c-42ba-8c2b-375e24e8f932</relationship-value>\r
+                                            </relationship-data>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                                <relationship-value>3f4c7204-739b-4bbb-87a7-8a6856439c90</relationship-value>\r
+                                            </relationship-data>\r
+                                        </relationship>\r
+                                    </relationship-list>\r
+                                </model-element>\r
+                                <model-element>\r
+                                    <new-data-del-flag>F</new-data-del-flag>\r
+                                    <cardinality>unbounded</cardinality>\r
+                                    <model-elements/>\r
+                                    <relationship-list>\r
+                                        <relationship>\r
+                                            <related-to>model-ver</related-to>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                                <relationship-value>abcc54bc-bb74-49dc-9043-7f7171707545</relationship-value>\r
+                                            </relationship-data>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                                <relationship-value>97c26c99-6870-44c1-8a07-1d900d3f4ce6</relationship-value>\r
+                                            </relationship-data>\r
+                                        </relationship>\r
+                                    </relationship-list>\r
+                                </model-element>\r
+                                <model-element>\r
+                                    <new-data-del-flag>F</new-data-del-flag>\r
+                                    <cardinality>unbounded</cardinality>\r
+                                    <model-elements/>\r
+                                    <relationship-list>\r
+                                        <relationship>\r
+                                            <related-to>model-ver</related-to>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                                <relationship-value>36200fb5-f251-4f5d-a520-7c5ad5c2cd4b</relationship-value>\r
+                                            </relationship-data>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                                <relationship-value>bace8d1c-a261-4041-9e37-823117415d0f</relationship-value>\r
+                                            </relationship-data>\r
+                                        </relationship>\r
+                                    </relationship-list>\r
+                                </model-element>\r
+                                <model-element>\r
+                                    <new-data-del-flag>F</new-data-del-flag>\r
+                                    <cardinality>unbounded</cardinality>\r
+                                    <model-elements/>\r
+                                    <relationship-list>\r
+                                        <relationship>\r
+                                            <related-to>model-ver</related-to>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                                <relationship-value>a32613fd-18b9-459e-aab8-fffb3912966a</relationship-value>\r
+                                            </relationship-data>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                                <relationship-value>cea0a982-8d55-4093-921e-418fbccf7060</relationship-value>\r
+                                            </relationship-data>\r
+                                        </relationship>\r
+                                    </relationship-list>\r
+                                </model-element>\r
+                                <model-element>\r
+                                    <new-data-del-flag>F</new-data-del-flag>\r
+                                    <cardinality>unbounded</cardinality>\r
+                                    <model-elements/>\r
+                                    <relationship-list>\r
+                                        <relationship>\r
+                                            <related-to>model-ver</related-to>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                                <relationship-value>5761e0a7-c6df-4d8a-9ebd-b8f445054dec</relationship-value>\r
+                                            </relationship-data>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                                <relationship-value>96129eb9-f0de-4e05-8af2-73146473f766</relationship-value>\r
+                                            </relationship-data>\r
+                                        </relationship>\r
+                                    </relationship-list>\r
+                                </model-element>\r
+                            </model-elements>\r
+                            <relationship-list>\r
+                                <relationship>\r
+                                    <related-to>model-ver</related-to>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                        <relationship-value>8ecb2c5d-7176-4317-a255-26274edfdd53</relationship-value>\r
+                                    </relationship-data>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model.model-invariant-id</relationship-key>\r
+                                        <relationship-value>ff69d4e0-a8e8-4108-bdb0-dd63217e63c7</relationship-value>\r
+                                    </relationship-data>\r
+                                </relationship>\r
+                            </relationship-list>\r
+                        </model-element>\r
+                        <model-element>\r
+                            <new-data-del-flag>F</new-data-del-flag>\r
+                            <cardinality>unbounded</cardinality>\r
+                            <model-elements/>\r
+                            <relationship-list>\r
+                                <relationship>\r
+                                    <related-to>model-ver</related-to>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                        <relationship-value>9111f20f-e680-4001-b83f-19a2fc23bfc1</relationship-value>\r
+                                    </relationship-data>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model.model-invariant-id</relationship-key>\r
+                                        <relationship-value>3d560d81-57d0-438b-a2a1-5334dba0651a</relationship-value>\r
+                                    </relationship-data>\r
+                                </relationship>\r
+                            </relationship-list>\r
+                        </model-element>\r
+                    </model-elements>\r
+                    <relationship-list>\r
+                        <relationship>\r
+                            <related-to>model-ver</related-to>\r
+                            <relationship-data>\r
+                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                <relationship-value>c00563ae-812b-4e62-8330-7c4d0f47088a</relationship-value>\r
+                            </relationship-data>\r
+                            <relationship-data>\r
+                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                <relationship-value>ef86f9c5-2165-44f3-8fc3-96018b609ea5</relationship-value>\r
+                            </relationship-data>\r
+                        </relationship>\r
+                    </relationship-list>\r
+                </model-element>\r
+            </model-elements>\r
+        </model-ver>\r
+    </model-vers>\r
+</model>\r
diff --git a/src/test/resources/models/AAI-VL-resource-1.xml b/src/test/resources/models/AAI-VL-resource-1.xml
new file mode 100644 (file)
index 0000000..98941ad
--- /dev/null
@@ -0,0 +1,52 @@
+<!--\r
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
+  limitations under the License.
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<model xmlns="http://org.openecomp.aai.inventory/v9">\r
+    <model-invariant-id>5c12984d-db0f-4300-a0e0-9791775cc40f</model-invariant-id>\r
+    <model-type>resource</model-type>\r
+    <model-vers>\r
+        <model-ver>\r
+            <model-version-id>88bdbadf-db8a-490f-881e-c8effcbc3f66</model-version-id>\r
+            <model-name>VL</model-name>\r
+            <model-version>1</model-version>\r
+            <model-description> Virtual link (VL) describes the basic topology of the connectivity as well as other required parameters (e.g. bandwidth and QoS class). </model-description>\r
+            <model-elements>\r
+                <model-element>\r
+                    <new-data-del-flag>F</new-data-del-flag>\r
+                    <cardinality>unbounded</cardinality>\r
+                    <model-elements/>\r
+                    <relationship-list>\r
+                        <relationship>\r
+                            <related-to>model-ver</related-to>\r
+                            <relationship-data>\r
+                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                <relationship-value>9111f20f-e680-4001-b83f-19a2fc23bfc1</relationship-value>\r
+                            </relationship-data>\r
+                            <relationship-data>\r
+                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                <relationship-value>3d560d81-57d0-438b-a2a1-5334dba0651a</relationship-value>\r
+                            </relationship-data>\r
+                        </relationship>\r
+                    </relationship-list>\r
+                </model-element>\r
+            </model-elements>\r
+        </model-ver>\r
+    </model-vers>\r
+</model>\r
diff --git a/src/test/resources/models/AAI-stellService-service-1.xml b/src/test/resources/models/AAI-stellService-service-1.xml
new file mode 100644 (file)
index 0000000..378b09e
--- /dev/null
@@ -0,0 +1,89 @@
+<!--\r
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
+  limitations under the License.
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<model xmlns="http://org.openecomp.aai.inventory/v9">\r
+    <model-invariant-id>fedf9da3-6a74-4813-8fa2-221a98b0e7ad</model-invariant-id>\r
+    <model-type>service</model-type>\r
+    <model-vers>\r
+        <model-ver>\r
+            <model-version-id>e0373537-7f66-4094-9939-e2f5de6ff5f6</model-version-id>\r
+            <model-name>stellService</model-name>\r
+            <model-version>1</model-version>\r
+            <model-description>fd</model-description>\r
+            <model-elements>\r
+                <model-element>\r
+                    <new-data-del-flag>F</new-data-del-flag>\r
+                    <cardinality>unbounded</cardinality>\r
+                    <model-elements>\r
+                        <model-element>\r
+                            <new-data-del-flag>F</new-data-del-flag>\r
+                            <cardinality>unbounded</cardinality>\r
+                            <model-elements/>\r
+                            <relationship-list>\r
+                                <relationship>\r
+                                    <related-to>model-ver</related-to>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                        <relationship-value>88bdbadf-db8a-490f-881e-c8effcbc3f66</relationship-value>\r
+                                    </relationship-data>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model.model-invariant-id</relationship-key>\r
+                                        <relationship-value>5c12984d-db0f-4300-a0e0-9791775cc40f</relationship-value>\r
+                                    </relationship-data>\r
+                                </relationship>\r
+                            </relationship-list>\r
+                        </model-element>\r
+                        <model-element>\r
+                            <new-data-del-flag>F</new-data-del-flag>\r
+                            <cardinality>unbounded</cardinality>\r
+                            <model-elements/>\r
+                            <relationship-list>\r
+                                <relationship>\r
+                                    <related-to>model-ver</related-to>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                        <relationship-value>374d0899-bbc2-4403-9320-fe9bebef75c6</relationship-value>\r
+                                    </relationship-data>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model.model-invariant-id</relationship-key>\r
+                                        <relationship-value>959b7c09-9f34-4e5f-8b63-505381db176e</relationship-value>\r
+                                    </relationship-data>\r
+                                </relationship>\r
+                            </relationship-list>\r
+                        </model-element>\r
+                    </model-elements>\r
+                    <relationship-list>\r
+                        <relationship>\r
+                            <related-to>model-ver</related-to>\r
+                            <relationship-data>\r
+                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                <relationship-value>46b92144-923a-4d20-b85a-3cbd847668a9</relationship-value>\r
+                            </relationship-data>\r
+                            <relationship-data>\r
+                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                <relationship-value>82194af1-3c2c-485a-8f44-420e22a9eaa4</relationship-value>\r
+                            </relationship-data>\r
+                        </relationship>\r
+                    </relationship-list>\r
+                </model-element>\r
+            </model-elements>\r
+        </model-ver>\r
+    </model-vers>\r
+</model>\r
diff --git a/src/test/resources/models/AAI-testvsp-resource-1.xml b/src/test/resources/models/AAI-testvsp-resource-1.xml
new file mode 100644 (file)
index 0000000..c9a70ff
--- /dev/null
@@ -0,0 +1,89 @@
+<!--\r
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
+  limitations under the License.
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<model xmlns="http://org.openecomp.aai.inventory/v9">\r
+    <model-invariant-id>959b7c09-9f34-4e5f-8b63-505381db176e</model-invariant-id>\r
+    <model-type>resource</model-type>\r
+    <model-vers>\r
+        <model-ver>\r
+            <model-version-id>374d0899-bbc2-4403-9320-fe9bebef75c6</model-version-id>\r
+            <model-name>testvsp</model-name>\r
+            <model-version>1</model-version>\r
+            <model-description>nkjlkl</model-description>\r
+            <model-elements>\r
+                <model-element>\r
+                    <new-data-del-flag>F</new-data-del-flag>\r
+                    <cardinality>unbounded</cardinality>\r
+                    <model-elements>\r
+                        <model-element>\r
+                            <new-data-del-flag>F</new-data-del-flag>\r
+                            <cardinality>unbounded</cardinality>\r
+                            <model-elements/>\r
+                            <relationship-list>\r
+                                <relationship>\r
+                                    <related-to>model-ver</related-to>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                        <relationship-value>da6769f0-aa58-4e90-b2c9-664c2630d131</relationship-value>\r
+                                    </relationship-data>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model.model-invariant-id</relationship-key>\r
+                                        <relationship-value>1e8fdfc0-03cf-4742-b060-dab818954d67</relationship-value>\r
+                                    </relationship-data>\r
+                                </relationship>\r
+                            </relationship-list>\r
+                        </model-element>\r
+                        <model-element>\r
+                            <new-data-del-flag>F</new-data-del-flag>\r
+                            <cardinality>unbounded</cardinality>\r
+                            <model-elements/>\r
+                            <relationship-list>\r
+                                <relationship>\r
+                                    <related-to>model-ver</related-to>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                        <relationship-value>29d3fc43-4ff2-4e5c-acd0-7370f5b2715a</relationship-value>\r
+                                    </relationship-data>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model.model-invariant-id</relationship-key>\r
+                                        <relationship-value>5a2aac99-ffe8-415f-9242-420ed10da23e</relationship-value>\r
+                                    </relationship-data>\r
+                                </relationship>\r
+                            </relationship-list>\r
+                        </model-element>\r
+                    </model-elements>\r
+                    <relationship-list>\r
+                        <relationship>\r
+                            <related-to>model-ver</related-to>\r
+                            <relationship-data>\r
+                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                <relationship-value>93a6166f-b3d5-4f06-b4ba-aed48d009ad9</relationship-value>\r
+                            </relationship-data>\r
+                            <relationship-data>\r
+                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                <relationship-value>acc6edd8-a8d4-4b93-afaa-0994068be14c</relationship-value>\r
+                            </relationship-data>\r
+                        </relationship>\r
+                    </relationship-list>\r
+                </model-element>\r
+            </model-elements>\r
+        </model-ver>\r
+    </model-vers>\r
+</model>\r
index 45e849b..394c073 100644 (file)
-<!--
+<!--\r
   ============LICENSE_START=======================================================
   MODEL LOADER SERVICE
   ================================================================================
   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
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
   limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<models xmlns="http://org.openecomp.aai.inventory/v8">
-       <model>
-               <model-name-version-id>997fc7-fca1-451f-b953-9a1e6197b4d6
-               </model-name-version-id>
-               <model-type>widget</model-type>
-               <model-name>vdc</model-name>
-               <model-id>897df7ea-8938-42b0-bc57-46e913a4d93b</model-id>
-               <model-version>v1.0</model-version>
-               <resource-version>1463175188</resource-version>
-               <relationship-list>
-                       <relationship>
-                               <related-to>model-element</related-to>
-                               <related-link>https://localhost:8443/aai/v8/service-design-and-creation/model-elements/model-element/ccb3a5a4-1722-4213-8785-2b6b5527d453/
-                               </related-link>
-                               <relationship-data>
-                                       <relationship-key>model-element.model-element-uuid
-                                       </relationship-key>
-                                       <relationship-value>ccb3a5a4-1722-4213-8785-2b6b5527d453
-                                       </relationship-value>
-                               </relationship-data>
-                               <relationship-data>
-                                       <relationship-key>model-element.model-element-uuid
-                                       </relationship-key>
-                                       <relationship-value>df2e4cc0-18ca-4046-9c1b-2abec86a58d6
-                                       </relationship-value>
-                               </relationship-data>
-                               <relationship-data>
-                                       <relationship-key>model.model-name-version-id</relationship-key>
-                                       <relationship-value>93d9d45d-7eec-4371-9083-675e4c353de3
-                                       </relationship-value>
-                               </relationship-data>
-                       </relationship>
-               </relationship-list>
-       </model>
-       <model>
-               <model-name-version-id>8da97b81-e0e9-4157-a4cd-af3ba52871d6
-               </model-name-version-id>
-               <model-type>resource</model-type>
-               <model-name>vDbe</model-name>
-               <model-id>77b83c95-7707-4624-8bfe-9110b9c2dc88</model-id>
-               <model-version>v1.0</model-version>
-               <resource-version>1463175188</resource-version>
-               <relationship-list>
-                       <relationship>
-                               <related-to>model-element</related-to>
-                               <related-link>https://localhost:8443/aai/v8/service-design-and-creation/model-elements/model-element/fc3a2260-d0ee-4c8e-b7e9-74791d7c5721/
-                               </related-link>
-                               <relationship-data>
-                                       <relationship-key>model-element.model-element-uuid
-                                       </relationship-key>
-                                       <relationship-value>fc3a2260-d0ee-4c8e-b7e9-74791d7c5721
-                                       </relationship-value>
-                               </relationship-data>
-                               <relationship-data>
-                                       <relationship-key>element-choice-set.element-choice-set-uuid
-                                       </relationship-key>
-                                       <relationship-value>646ee687-1475-419d-bd10-f3760d5430dc
-                                       </relationship-value>
-                               </relationship-data>
-                               <relationship-data>
-                                       <relationship-key>constrained-element-set.constrained-element-set-uuid
-                                       </relationship-key>
-                                       <relationship-value>999</relationship-value>
-                               </relationship-data>
-                               <relationship-data>
-                                       <relationship-key>model-element.model-element-uuid
-                                       </relationship-key>
-                                       <relationship-value>df2e4cc0-18ca-4046-9c1b-2abec86a58d6
-                                       </relationship-value>
-                               </relationship-data>
-                               <relationship-data>
-                                       <relationship-key>model.model-name-version-id</relationship-key>
-                                       <relationship-value>93d9d45d-7eec-4371-9083-675e4c353de3
-                                       </relationship-value>
-                               </relationship-data>
-                       </relationship>
-               </relationship-list>
-       </model>
-               <model>
-               <model-name-version-id>f2b24d95-c582-48d5-b2d6-c5b3a94ce812
-               </model-name-version-id>
-               <model-type>widget</model-type>
-               <model-name>pserver</model-name>
-               <model-id>a033a95f-93af-4dc6-811e-f818baf13ef1</model-id>
-               <model-version>v1.0</model-version>
-               <resource-version>1463175178</resource-version>
-               <relationship-list>
-                       <relationship>
-                               <related-to>model-element</related-to>
-                               <related-link>https://localhost:8443/aai/v8/service-design-and-creation/model-elements/model-element/5eab2693-78ec-446a-afe4-14332e348246/
-                               </related-link>
-                               <relationship-data>
-                                       <relationship-key>model-element.model-element-uuid
-                                       </relationship-key>
-                                       <relationship-value>5eab2693-78ec-446a-afe4-14332e348246
-                                       </relationship-value>
-                               </relationship-data>
-                               <relationship-data>
-                                       <relationship-key>model.model-name-version-id</relationship-key>
-                                       <relationship-value>35be1acf-1298-48c6-a128-66850083b8bd
-                                       </relationship-value>
-                               </relationship-data>
-                       </relationship>
-                       <relationship>
-                               <related-to>model-element</related-to>
-                               <related-link>https://localhost:8443/aai/v8/service-design-and-creation/model-elements/model-element/f7659dac-6311-45b6-b483-60b39364a85a/
-                               </related-link>
-                               <relationship-data>
-                                       <relationship-key>model-element.model-element-uuid
-                                       </relationship-key>
-                                       <relationship-value>f7659dac-6311-45b6-b483-60b39364a85a
-                                       </relationship-value>
-                               </relationship-data>
-                               <relationship-data>
-                                       <relationship-key>model.model-name-version-id</relationship-key>
-                                       <relationship-value>759dbd4a-2473-46f3-a932-48d987c9b4a1
-                                       </relationship-value>
-                               </relationship-data>
-                       </relationship>
-               </relationship-list>
-       </model>
-       
-</models>
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<models xmlns="http://org.openecomp.aai.inventory/v9">\r
+  <model>\r
+    <model-invariant-id>5c12984d-db0f-4300-a0e0-9791775cc40f</model-invariant-id>\r
+    <model-type>resource</model-type>\r
+    <model-vers>\r
+        <model-ver>\r
+            <model-version-id>88bdbadf-db8a-490f-881e-c8effcbc3f66</model-version-id>\r
+            <model-name>VL</model-name>\r
+            <model-version>1</model-version>\r
+            <model-description> Virtual link (VL) describes the basic topology of the connectivity as well as other required parameters (e.g. bandwidth and QoS class). </model-description>\r
+            <model-elements>\r
+                <model-element>\r
+                    <new-data-del-flag>F</new-data-del-flag>\r
+                    <cardinality>unbounded</cardinality>\r
+                    <model-elements/>\r
+                    <relationship-list>\r
+                        <relationship>\r
+                            <related-to>model-ver</related-to>\r
+                            <relationship-data>\r
+                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                <relationship-value>9111f20f-e680-4001-b83f-19a2fc23bfc1</relationship-value>\r
+                            </relationship-data>\r
+                            <relationship-data>\r
+                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                <relationship-value>3d560d81-57d0-438b-a2a1-5334dba0651a</relationship-value>\r
+                            </relationship-data>\r
+                        </relationship>\r
+                    </relationship-list>\r
+                </model-element>\r
+            </model-elements>\r
+        </model-ver>\r
+    </model-vers>\r
+</model>\r
+<model>\r
+    <model-invariant-id>1e8fdfc0-03cf-4742-b060-dab818954d67</model-invariant-id>\r
+    <model-type>resource</model-type>\r
+    <model-vers>\r
+        <model-ver>\r
+            <model-version-id>da6769f0-aa58-4e90-b2c9-664c2630d131</model-version-id>\r
+            <model-name>Testvsp..vmme_small_ecomp..module-0</model-name>\r
+            <model-version>1</model-version>\r
+            <model-description></model-description>\r
+            <model-elements>\r
+                <model-element>\r
+                    <new-data-del-flag>F</new-data-del-flag>\r
+                    <cardinality>unbounded</cardinality>\r
+                    <model-elements>\r
+                        <model-element>\r
+                            <new-data-del-flag>F</new-data-del-flag>\r
+                            <cardinality>unbounded</cardinality>\r
+                            <model-elements>\r
+                                <model-element>\r
+                                    <new-data-del-flag>F</new-data-del-flag>\r
+                                    <cardinality>unbounded</cardinality>\r
+                                    <model-elements/>\r
+                                    <relationship-list>\r
+                                        <relationship>\r
+                                            <related-to>model-ver</related-to>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                                <relationship-value>f6a038c2-820c-42ba-8c2b-375e24e8f932</relationship-value>\r
+                                            </relationship-data>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                                <relationship-value>3f4c7204-739b-4bbb-87a7-8a6856439c90</relationship-value>\r
+                                            </relationship-data>\r
+                                        </relationship>\r
+                                    </relationship-list>\r
+                                </model-element>\r
+                                <model-element>\r
+                                    <new-data-del-flag>F</new-data-del-flag>\r
+                                    <cardinality>unbounded</cardinality>\r
+                                    <model-elements/>\r
+                                    <relationship-list>\r
+                                        <relationship>\r
+                                            <related-to>model-ver</related-to>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                                <relationship-value>abcc54bc-bb74-49dc-9043-7f7171707545</relationship-value>\r
+                                            </relationship-data>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                                <relationship-value>97c26c99-6870-44c1-8a07-1d900d3f4ce6</relationship-value>\r
+                                            </relationship-data>\r
+                                        </relationship>\r
+                                    </relationship-list>\r
+                                </model-element>\r
+                                <model-element>\r
+                                    <new-data-del-flag>F</new-data-del-flag>\r
+                                    <cardinality>unbounded</cardinality>\r
+                                    <model-elements/>\r
+                                    <relationship-list>\r
+                                        <relationship>\r
+                                            <related-to>model-ver</related-to>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                                <relationship-value>36200fb5-f251-4f5d-a520-7c5ad5c2cd4b</relationship-value>\r
+                                            </relationship-data>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                                <relationship-value>bace8d1c-a261-4041-9e37-823117415d0f</relationship-value>\r
+                                            </relationship-data>\r
+                                        </relationship>\r
+                                    </relationship-list>\r
+                                </model-element>\r
+                                <model-element>\r
+                                    <new-data-del-flag>F</new-data-del-flag>\r
+                                    <cardinality>unbounded</cardinality>\r
+                                    <model-elements/>\r
+                                    <relationship-list>\r
+                                        <relationship>\r
+                                            <related-to>model-ver</related-to>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                                <relationship-value>a32613fd-18b9-459e-aab8-fffb3912966a</relationship-value>\r
+                                            </relationship-data>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                                <relationship-value>cea0a982-8d55-4093-921e-418fbccf7060</relationship-value>\r
+                                            </relationship-data>\r
+                                        </relationship>\r
+                                    </relationship-list>\r
+                                </model-element>\r
+                                <model-element>\r
+                                    <new-data-del-flag>F</new-data-del-flag>\r
+                                    <cardinality>unbounded</cardinality>\r
+                                    <model-elements/>\r
+                                    <relationship-list>\r
+                                        <relationship>\r
+                                            <related-to>model-ver</related-to>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                                <relationship-value>5761e0a7-c6df-4d8a-9ebd-b8f445054dec</relationship-value>\r
+                                            </relationship-data>\r
+                                            <relationship-data>\r
+                                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                                <relationship-value>96129eb9-f0de-4e05-8af2-73146473f766</relationship-value>\r
+                                            </relationship-data>\r
+                                        </relationship>\r
+                                    </relationship-list>\r
+                                </model-element>\r
+                            </model-elements>\r
+                            <relationship-list>\r
+                                <relationship>\r
+                                    <related-to>model-ver</related-to>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                        <relationship-value>8ecb2c5d-7176-4317-a255-26274edfdd53</relationship-value>\r
+                                    </relationship-data>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model.model-invariant-id</relationship-key>\r
+                                        <relationship-value>ff69d4e0-a8e8-4108-bdb0-dd63217e63c7</relationship-value>\r
+                                    </relationship-data>\r
+                                </relationship>\r
+                            </relationship-list>\r
+                        </model-element>\r
+                        <model-element>\r
+                            <new-data-del-flag>F</new-data-del-flag>\r
+                            <cardinality>unbounded</cardinality>\r
+                            <model-elements/>\r
+                            <relationship-list>\r
+                                <relationship>\r
+                                    <related-to>model-ver</related-to>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                        <relationship-value>9111f20f-e680-4001-b83f-19a2fc23bfc1</relationship-value>\r
+                                    </relationship-data>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model.model-invariant-id</relationship-key>\r
+                                        <relationship-value>3d560d81-57d0-438b-a2a1-5334dba0651a</relationship-value>\r
+                                    </relationship-data>\r
+                                </relationship>\r
+                            </relationship-list>\r
+                        </model-element>\r
+                    </model-elements>\r
+                    <relationship-list>\r
+                        <relationship>\r
+                            <related-to>model-ver</related-to>\r
+                            <relationship-data>\r
+                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                <relationship-value>c00563ae-812b-4e62-8330-7c4d0f47088a</relationship-value>\r
+                            </relationship-data>\r
+                            <relationship-data>\r
+                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                <relationship-value>ef86f9c5-2165-44f3-8fc3-96018b609ea5</relationship-value>\r
+                            </relationship-data>\r
+                        </relationship>\r
+                    </relationship-list>\r
+                </model-element>\r
+            </model-elements>\r
+        </model-ver>\r
+    </model-vers>\r
+</model>\r
+<model>\r
+    <model-invariant-id>5a2aac99-ffe8-415f-9242-420ed10da23e</model-invariant-id>\r
+    <model-type>resource</model-type>\r
+    <model-vers>\r
+        <model-ver>\r
+            <model-version-id>29d3fc43-4ff2-4e5c-acd0-7370f5b2715a</model-version-id>\r
+            <model-name>Testvsp..vmme_cinder..module-1</model-name>\r
+            <model-version>1</model-version>\r
+            <model-description></model-description>\r
+            <model-elements>\r
+                <model-element>\r
+                    <new-data-del-flag>F</new-data-del-flag>\r
+                    <cardinality>unbounded</cardinality>\r
+                    <model-elements/>\r
+                    <relationship-list>\r
+                        <relationship>\r
+                            <related-to>model-ver</related-to>\r
+                            <relationship-data>\r
+                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                <relationship-value>c00563ae-812b-4e62-8330-7c4d0f47088a</relationship-value>\r
+                            </relationship-data>\r
+                            <relationship-data>\r
+                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                <relationship-value>ef86f9c5-2165-44f3-8fc3-96018b609ea5</relationship-value>\r
+                            </relationship-data>\r
+                        </relationship>\r
+                    </relationship-list>\r
+                </model-element>\r
+            </model-elements>\r
+        </model-ver>\r
+    </model-vers>\r
+</model>\r
+<model>\r
+    <model-invariant-id>959b7c09-9f34-4e5f-8b63-505381db176e</model-invariant-id>\r
+    <model-type>resource</model-type>\r
+    <model-vers>\r
+        <model-ver>\r
+            <model-version-id>374d0899-bbc2-4403-9320-fe9bebef75c6</model-version-id>\r
+            <model-name>testvsp</model-name>\r
+            <model-version>1</model-version>\r
+            <model-description>nkjlkl</model-description>\r
+            <model-elements>\r
+                <model-element>\r
+                    <new-data-del-flag>F</new-data-del-flag>\r
+                    <cardinality>unbounded</cardinality>\r
+                    <model-elements>\r
+                        <model-element>\r
+                            <new-data-del-flag>F</new-data-del-flag>\r
+                            <cardinality>unbounded</cardinality>\r
+                            <model-elements/>\r
+                            <relationship-list>\r
+                                <relationship>\r
+                                    <related-to>model-ver</related-to>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                        <relationship-value>da6769f0-aa58-4e90-b2c9-664c2630d131</relationship-value>\r
+                                    </relationship-data>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model.model-invariant-id</relationship-key>\r
+                                        <relationship-value>1e8fdfc0-03cf-4742-b060-dab818954d67</relationship-value>\r
+                                    </relationship-data>\r
+                                </relationship>\r
+                            </relationship-list>\r
+                        </model-element>\r
+                        <model-element>\r
+                            <new-data-del-flag>F</new-data-del-flag>\r
+                            <cardinality>unbounded</cardinality>\r
+                            <model-elements/>\r
+                            <relationship-list>\r
+                                <relationship>\r
+                                    <related-to>model-ver</related-to>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                        <relationship-value>29d3fc43-4ff2-4e5c-acd0-7370f5b2715a</relationship-value>\r
+                                    </relationship-data>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model.model-invariant-id</relationship-key>\r
+                                        <relationship-value>5a2aac99-ffe8-415f-9242-420ed10da23e</relationship-value>\r
+                                    </relationship-data>\r
+                                </relationship>\r
+                            </relationship-list>\r
+                        </model-element>\r
+                    </model-elements>\r
+                    <relationship-list>\r
+                        <relationship>\r
+                            <related-to>model-ver</related-to>\r
+                            <relationship-data>\r
+                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                <relationship-value>93a6166f-b3d5-4f06-b4ba-aed48d009ad9</relationship-value>\r
+                            </relationship-data>\r
+                            <relationship-data>\r
+                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                <relationship-value>acc6edd8-a8d4-4b93-afaa-0994068be14c</relationship-value>\r
+                            </relationship-data>\r
+                        </relationship>\r
+                    </relationship-list>\r
+                </model-element>\r
+            </model-elements>\r
+        </model-ver>\r
+    </model-vers>\r
+</model>\r
+<model>\r
+    <model-invariant-id>fedf9da3-6a74-4813-8fa2-221a98b0e7ad</model-invariant-id>\r
+    <model-type>service</model-type>\r
+    <model-vers>\r
+        <model-ver>\r
+            <model-version-id>e0373537-7f66-4094-9939-e2f5de6ff5f6</model-version-id>\r
+            <model-name>stellService</model-name>\r
+            <model-version>1</model-version>\r
+            <model-description>fd</model-description>\r
+            <model-elements>\r
+                <model-element>\r
+                    <new-data-del-flag>F</new-data-del-flag>\r
+                    <cardinality>unbounded</cardinality>\r
+                    <model-elements>\r
+                        <model-element>\r
+                            <new-data-del-flag>F</new-data-del-flag>\r
+                            <cardinality>unbounded</cardinality>\r
+                            <model-elements/>\r
+                            <relationship-list>\r
+                                <relationship>\r
+                                    <related-to>model-ver</related-to>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                        <relationship-value>88bdbadf-db8a-490f-881e-c8effcbc3f66</relationship-value>\r
+                                    </relationship-data>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model.model-invariant-id</relationship-key>\r
+                                        <relationship-value>5c12984d-db0f-4300-a0e0-9791775cc40f</relationship-value>\r
+                                    </relationship-data>\r
+                                </relationship>\r
+                            </relationship-list>\r
+                        </model-element>\r
+                        <model-element>\r
+                            <new-data-del-flag>F</new-data-del-flag>\r
+                            <cardinality>unbounded</cardinality>\r
+                            <model-elements/>\r
+                            <relationship-list>\r
+                                <relationship>\r
+                                    <related-to>model-ver</related-to>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                        <relationship-value>374d0899-bbc2-4403-9320-fe9bebef75c6</relationship-value>\r
+                                    </relationship-data>\r
+                                    <relationship-data>\r
+                                        <relationship-key>model.model-invariant-id</relationship-key>\r
+                                        <relationship-value>959b7c09-9f34-4e5f-8b63-505381db176e</relationship-value>\r
+                                    </relationship-data>\r
+                                </relationship>\r
+                            </relationship-list>\r
+                        </model-element>\r
+                    </model-elements>\r
+                    <relationship-list>\r
+                        <relationship>\r
+                            <related-to>model-ver</related-to>\r
+                            <relationship-data>\r
+                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                <relationship-value>46b92144-923a-4d20-b85a-3cbd847668a9</relationship-value>\r
+                            </relationship-data>\r
+                            <relationship-data>\r
+                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                <relationship-value>82194af1-3c2c-485a-8f44-420e22a9eaa4</relationship-value>\r
+                            </relationship-data>\r
+                        </relationship>\r
+                    </relationship-list>\r
+                </model-element>\r
+            </model-elements>\r
+        </model-ver>\r
+    </model-vers>\r
+  </model>\r
+</models>\r
similarity index 56%
rename from src/main/webapp/WEB-INF/web.xml
rename to src/test/resources/models/incomplete-model.xml
index c256b26..b30d4d7 100644 (file)
@@ -1,40 +1,37 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<!--\r
   ============LICENSE_START=======================================================
   MODEL LOADER SERVICE
   ================================================================================
   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
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
   limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
-  <display-name>model-loader</display-name>
-  
-  <listener>
-       <listener-class>
-               org.springframework.web.context.ContextLoaderListener
-       </listener-class>
-  </listener>
-  
-  <servlet>
-    <servlet-name>rest</servlet-name>
-    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
-    <load-on-startup>1</load-on-startup>
-  </servlet>
-  <servlet-mapping>
-    <servlet-name>rest</servlet-name>
-    <url-pattern>/</url-pattern>
-  </servlet-mapping>
-</web-app>
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<model xmlns="http://org.openecomp.aai.inventory/v9">\r
+    <model-type>resource</model-type>\r
+    <model-vers>\r
+        <model-ver>\r
+            <model-name>VL</model-name>\r
+            <model-version>1</model-version>\r
+            <model-description> Virtual link (VL) describes the basic topology of the connectivity as well as other required parameters (e.g. bandwidth and QoS class). </model-description>\r
+            <model-elements>\r
+                <model-element>\r
+                    <new-data-del-flag>F</new-data-del-flag>\r
+                    <cardinality>unbounded</cardinality>\r
+                    <model-elements/>\r
+                </model-element>\r
+            </model-elements>\r
+        </model-ver>\r
+    </model-vers>\r
+</model>\r
diff --git a/src/test/resources/models/incomplete-models.xml b/src/test/resources/models/incomplete-models.xml
new file mode 100644 (file)
index 0000000..56b10de
--- /dev/null
@@ -0,0 +1,50 @@
+<!--\r
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
+  limitations under the License.
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<models xmlns="http://org.openecomp.aai.inventory/v9">\r
+<model>\r
+   <model-invariant-id>3d560d81-57d0-438b-a2a1-5334dba0651a</model-invariant-id>\r
+       <model-type>widget</model-type>\r
+       <model-vers>\r
+               <model-ver>\r
+                       <model-version-id>9111f20f-e680-4001-b83f-19a2fc23bfc1</model-version-id>\r
+                       <model-version>1.0</model-version>\r
+                       <model-name>l3-network</model-name>\r
+               </model-ver>\r
+       </model-vers>\r
+</model>\r
+<model>\r
+    <model-type>resource</model-type>\r
+    <model-vers>\r
+        <model-ver>\r
+            <model-name>VL</model-name>\r
+            <model-version>1</model-version>\r
+            <model-description> Virtual link (VL) describes the basic topology of the connectivity as well as other required parameters (e.g. bandwidth and QoS class). </model-description>\r
+            <model-elements>\r
+                <model-element>\r
+                    <new-data-del-flag>F</new-data-del-flag>\r
+                    <cardinality>unbounded</cardinality>\r
+                    <model-elements/>\r
+                </model-element>\r
+            </model-elements>\r
+        </model-ver>\r
+    </model-vers>\r
+</model>\r
+</models>\r
diff --git a/src/test/resources/models/invalid-model.xml b/src/test/resources/models/invalid-model.xml
new file mode 100644 (file)
index 0000000..906cd21
--- /dev/null
@@ -0,0 +1,51 @@
+<!--\r
+  ============LICENSE_START=======================================================
+  MODEL LOADER SERVICE
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
+  limitations under the License.
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<model xmlns="http://org.openecomp.aai.inventory/v9">\r
+    <model-invariant-id>5c12984d-db0f-4300-a0e0-9791775cc40f</model-invariant-id>\r
+    <model-type>resource</model-type>\r
+    <model-vers>\r
+        <model-ver>\r
+            <model-version-id>88bdbadf-db8a-490f-881e-c8effcbc3f66</model-version-id>\r
+            <model-name>VL</model-name>\r
+            <model-version>1</model-version>\r
+            <model-description> Virtual link (VL) describes the basic topology of the connectivity as well as other required parameters (e.g. bandwidth and QoS class). </model-description>\r
+            <model-elements>\r
+                <model-element>\r
+                    <new-data-del-flag>F</new-data-del-flag>\r
+                    <cardinality>unbounded</cardinality>\r
+                    <model-elements/>\r
+                    <relationship-list>\r
+                        <relationship>\r
+                            <related-to>model-ver</related-to>\r
+                            <relationship-data>\r
+                                <relationship-key>model-ver.model-version-id</relationship-key>\r
+                                <relationship-value>9111f20f-e680-4001-b83f-19a2fc23bfc1</relationship-value>\r
+                            </relationship-data>\r
+                            <relationship-data>\r
+                                <relationship-key>model.model-invariant-id</relationship-key>\r
+                                <relationship-value>3d560d81-57d0-438b-a2a1-5334dba0651a</relationship-value>\r
+                            </relationship-data>\r
+                        </relationship>\r
+                    </relationship-list>\r
+                </model-element>\r
+            </model-elements>\r
+        </model-ver>\r
+    </model-vers>\r
diff --git a/src/test/resources/models/l3-network-widget.json b/src/test/resources/models/l3-network-widget.json
new file mode 100644 (file)
index 0000000..22304ac
--- /dev/null
@@ -0,0 +1,14 @@
+{
+  "model":
+  {
+       "model-invariant-id" : "3d560d81-57d0-438b-a2a1-5334dba0651a",
+       "model-type" : "widget",
+       "model-vers" : {
+               "model-ver" : [ {
+                       "model-version-id" : "9111f20f-e680-4001-b83f-19a2fc23bfc1",
+                       "model-version" : "1.0",
+                       "model-name" : "l3-network"
+               } ]
+       }
+  }
+}
@@ -1,29 +1,31 @@
-<!--
+<!--\r
   ============LICENSE_START=======================================================
   MODEL LOADER SERVICE
   ================================================================================
   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
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
   limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<beans xmlns="http://www.springframework.org/schema/beans"
-    xmlns:context="http://www.springframework.org/schema/context"
-    xmlns:mvc="http://www.springframework.org/schema/mvc"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
-    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
-    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
-
-</beans>
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<model xmlns="http://org.openecomp.aai.inventory/v9">\r
+   <model-invariant-id>3d560d81-57d0-438b-a2a1-5334dba0651a</model-invariant-id>\r
+       <model-type>widget</model-type>\r
+       <model-vers>\r
+               <model-ver>\r
+                       <model-version-id>9111f20f-e680-4001-b83f-19a2fc23bfc1</model-version-id>\r
+                       <model-version>1.0</model-version>\r
+                       <model-name>l3-network</model-name>\r
+               </model-ver>\r
+       </model-vers>\r
+</model>\r
index 5606cf8..51047df 100644 (file)
@@ -1,90 +1,90 @@
-<!--
+<!--\r
   ============LICENSE_START=======================================================
   MODEL LOADER SERVICE
   ================================================================================
   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
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
   limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<named-query xmlns="http://org.openecomp.aai.inventory/v8">
-       <named-query-uuid>94cac189-8d88-4d63-a194-f44214e080ff
-       </named-query-uuid>
-       <named-query-name>wan-connector</named-query-name>
-       <named-query-version>v1.0</named-query-version>
-       <description>Named Query - Wan Connector</description>
-       <named-query-elements>
-               <named-query-element>
-                       <relationship-list>
-                               <relationship>
-                                       <related-to>model</related-to>
-                                       <relationship-data>
-                                               <!-- connector -->
-                                               <relationship-key>model.model-name-version-id</relationship-key>
-                                               <relationship-value>d09dd9da-0148-46cd-a947-591afc844d24
-                                               </relationship-value>
-                                       </relationship-data>
-                               </relationship>
-                       </relationship-list>
-                       <named-query-elements>
-                               <named-query-element>
-                                       <relationship-list>
-                                               <relationship>
-                                                       <related-to>model</related-to>
-                                                       <relationship-data>
-                                                               <!-- vdc -->
-                                                               <relationship-key>model.model-name-version-id</relationship-key>
-                                                               <relationship-value>997fc7-fca1-451f-b953-9a1e6197b4d6
-                                                               </relationship-value>
-                                                       </relationship-data>
-                                               </relationship>
-                                       </relationship-list>
-                                       <named-query-elements>
-                                               <named-query-element>
-                                                       <relationship-list>
-                                                               <relationship>
-                                                                       <related-to>model</related-to>
-                                                                       <relationship-data>
-                                                                               <!-- logical-link -->
-                                                                               <relationship-key>model.model-name-version-id
-                                                                               </relationship-key>
-                                                                               <relationship-value>897df7ea-8938-42b0-bc57-46e913a4d93b
-                                                                               </relationship-value>
-                                                                       </relationship-data>
-                                                               </relationship>
-                                                       </relationship-list>
-                                                       <named-query-elements>
-                                                               <named-query-element>
-                                                                       <relationship-list>
-                                                                               <relationship>
-                                                                                       <related-to>model</related-to>
-                                                                                       <relationship-data>
-                                                                                               <!-- pserver -->
-                                                                                               <relationship-key>model.model-name-version-id
-                                                                                               </relationship-key>
-                                                                                               <relationship-value>f2b24d95-c582-48d5-b2d6-c5b3a94ce812
-                                                                                               </relationship-value>
-                                                                                       </relationship-data>
-                                                                               </relationship>
-                                                                       </relationship-list>
-                                                               </named-query-element>
-                                                       </named-query-elements>
-                                               </named-query-element>
-                                       </named-query-elements>
-                               </named-query-element>
-                       </named-query-elements>
-               </named-query-element>
-       </named-query-elements>
-</named-query>
-
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<named-query xmlns="http://org.openecomp.aai.inventory/v7">\r
+       <named-query-uuid>94cac189-8d88-4d63-a194-f44214e080ff\r
+       </named-query-uuid>\r
+       <named-query-name>wan-connector</named-query-name>\r
+       <named-query-version>v1.0</named-query-version>\r
+       <description>Named Query - Wan Connector</description>\r
+       <named-query-elements>\r
+               <named-query-element>\r
+                       <relationship-list>\r
+                               <relationship>\r
+                                       <related-to>model</related-to>\r
+                                       <relationship-data>\r
+                                               <!-- connector -->\r
+                                               <relationship-key>model.model-invariant-id</relationship-key>\r
+                                               <relationship-value>d09dd9da-0148-46cd-a947-591afc844d24\r
+                                               </relationship-value>\r
+                                       </relationship-data>\r
+                               </relationship>\r
+                       </relationship-list>\r
+                       <named-query-elements>\r
+                               <named-query-element>\r
+                                       <relationship-list>\r
+                                               <relationship>\r
+                                                       <related-to>model</related-to>\r
+                                                       <relationship-data>\r
+                                                               <!-- vdc -->\r
+                                                               <relationship-key>model.model-invariant-id</relationship-key>\r
+                                                               <relationship-value>997fc7-fca1-451f-b953-9a1e6197b4d6\r
+                                                               </relationship-value>\r
+                                                       </relationship-data>\r
+                                               </relationship>\r
+                                       </relationship-list>\r
+                                       <named-query-elements>\r
+                                               <named-query-element>\r
+                                                       <relationship-list>\r
+                                                               <relationship>\r
+                                                                       <related-to>model</related-to>\r
+                                                                       <relationship-data>\r
+                                                                               <!-- logical-link -->\r
+                                                                               <relationship-key>model.model-invariant-id\r
+                                                                               </relationship-key>\r
+                                                                               <relationship-value>897df7ea-8938-42b0-bc57-46e913a4d93b\r
+                                                                               </relationship-value>\r
+                                                                       </relationship-data>\r
+                                                               </relationship>\r
+                                                       </relationship-list>\r
+                                                       <named-query-elements>\r
+                                                               <named-query-element>\r
+                                                                       <relationship-list>\r
+                                                                               <relationship>\r
+                                                                                       <related-to>model</related-to>\r
+                                                                                       <relationship-data>\r
+                                                                                               <!-- pserver -->\r
+                                                                                               <relationship-key>model.model-invariant-id\r
+                                                                                               </relationship-key>\r
+                                                                                               <relationship-value>f2b24d95-c582-48d5-b2d6-c5b3a94ce812\r
+                                                                                               </relationship-value>\r
+                                                                                       </relationship-data>\r
+                                                                               </relationship>\r
+                                                                       </relationship-list>\r
+                                                               </named-query-element>\r
+                                                       </named-query-elements>\r
+                                               </named-query-element>\r
+                                       </named-query-elements>\r
+                               </named-query-element>\r
+                       </named-query-elements>\r
+               </named-query-element>\r
+       </named-query-elements>\r
+</named-query>\r
+\r
diff --git a/src/test/resources/models/vnf-model.json b/src/test/resources/models/vnf-model.json
deleted file mode 100644 (file)
index 5bebe59..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "model": 
-  {
-    "model-name-version-id":"model-vid",
-    "model-type":"widget",
-    "model-version":"v1.0",
-    "model-id":"model-id",
-    "model-name":"generic-vnf"
-  }
-}
diff --git a/src/test/resources/models/wan-connector-model.xml b/src/test/resources/models/wan-connector-model.xml
deleted file mode 100644 (file)
index c8a434b..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-<!--
-  ============LICENSE_START=======================================================
-  MODEL LOADER SERVICE
-  ================================================================================
-  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=========================================================
-  -->
-
-<model xmlns="http://org.openecomp.aai.inventory/v8">
-       <model-id>e4a9901b-6c94-4e07-b8d8-b877d3df554c</model-id>
-       <model-type>service</model-type>
-       <model-name>test-model</model-name>
-       <model-version>v1.0</model-version>
-       <model-name-version-id>93d9d45d-7eec-4371-9083-675e4c353de3
-       </model-name-version-id>
-       <model-description>desc</model-description>
-       <metadata>
-               <metadatum>
-                       <metaname>a</metaname>
-                       <metaval>vpn-id</metaval>
-               </metadatum>
-               <metadatum>
-                       <metaname>b</metaname>
-                       <metaval>product</metaval>
-               </metadatum>
-       </metadata>
-       <model-elements>
-               <model-element>
-                       <new-data-del-flag>true</new-data-del-flag>
-                       <cardinality>unbounded</cardinality>
-                       <relationship-list>
-                               <relationship>
-                                       <related-to>model</related-to>
-                                       <relationship-data>
-                                               <!-- connector -->
-                                               <relationship-key>model.model-name-version-id</relationship-key>
-                                               <relationship-value>d09dd9da-0148-46cd-a947-591afc844d24
-                                               </relationship-value>
-                                       </relationship-data>
-                               </relationship>
-                       </relationship-list>
-                       <model-elements>
-                               <model-element>
-                                       <new-data-del-flag>true</new-data-del-flag>
-                                       <cardinality>unbounded</cardinality>
-                                       <relationship-list>
-                                               <relationship>
-                                                       <related-to>model</related-to>
-                                                       <relationship-data>
-                                                               <!-- vdc -->
-                                                               <relationship-key>model.model-name-version-id</relationship-key>
-                                                               <relationship-value>997fc7-fca1-451f-b953-9a1e6197b4d6
-                                                               </relationship-value>
-                                                       </relationship-data>
-                                               </relationship>
-                                       </relationship-list>
-                                       <model-elements>
-                                               <model-element>
-                                                       <new-data-del-flag>true</new-data-del-flag>
-                                                       <cardinality>unbounded</cardinality>
-                                                       <relationship-list>
-                                                               <relationship>
-                                                                       <related-to>model</related-to>
-                                                                       <relationship-data>
-                                                                               <!-- l2-bridge-for-wan-connector -->
-                                                                               <relationship-key>model.model-name-version-id
-                                                                               </relationship-key>
-                                                                               <relationship-value>ae16244f-4d29-4801-a559-e25f2db2a4c3
-                                                                               </relationship-value>
-                                                                       </relationship-data>
-                                                               </relationship>
-                                                       </relationship-list>
-                                                       <model-constraint>
-                                                               <constrained-element-sets>
-                                                                       <constrained-element-set>
-                                                                               <path>logical-link</path>
-                                                                               <constrained-element-set-uuid>999
-                                                                               </constrained-element-set-uuid>
-                                                                               <constraint-type>combination</constraint-type>
-                                                                               <check-type>AND</check-type>
-                                                                               <element-choice-sets>
-                                                                                       <element-choice-set>
-                                                                                               <element-choice-set-name>A</element-choice-set-name>
-                                                                                               <cardinality>1</cardinality>
-                                                                                               <model-elements>
-                                                                                                       <model-element>
-                                                                                                               <cardinality>unbounded</cardinality>
-                                                                                                               <new-data-del-flag>false</new-data-del-flag>
-                                                                                                               <relationship-list>
-                                                                                                                       <relationship>
-                                                                                                                               <related-to>model</related-to>
-                                                                                                                               <relationship-data>
-                                                                                                                                       <!-- ipe -->
-                                                                                                                                       <relationship-key>model.model-name-version-id
-                                                                                                                                       </relationship-key>
-                                                                                                                                       <relationship-value>759dbd4a-2473-46f3-a932-48d987c9b4a1
-                                                                                                                                       </relationship-value>
-                                                                                                                               </relationship-data>
-                                                                                                                       </relationship>
-                                                                                                               </relationship-list>
-                                                                                                               <linkage-points>
-                                                                                                                       <linkage-point>l-interface|p-interface|pserver
-                                                                                                                       </linkage-point>
-                                                                                                               </linkage-points>
-                                                                                                       </model-element>
-                                                                                               </model-elements>
-                                                                                       </element-choice-set>
-                                                                                       <element-choice-set>
-                                                                                               <element-choice-set-name>B</element-choice-set-name>
-                                                                                               <cardinality>1</cardinality>
-                                                                                               <model-elements>
-                                                                                                       <model-element>
-                                                                                                               <cardinality>unbounded</cardinality>
-                                                                                                               <new-data-del-flag>false</new-data-del-flag>
-                                                                                                               <relationship-list>
-                                                                                                                       <relationship>
-                                                                                                                               <related-to>model</related-to>
-                                                                                                                               <relationship-data>
-                                                                                                                                       <!-- vDbe -->
-                                                                                                                                       <relationship-key>model.model-name-version-id
-                                                                                                                                       </relationship-key>
-                                                                                                                                       <relationship-value>8da97b81-e0e9-4157-a4cd-af3ba52871d6
-                                                                                                                                       </relationship-value>
-                                                                                                                               </relationship-data>
-                                                                                                                       </relationship>
-                                                                                                               </relationship-list>
-                                                                                                       </model-element>
-                                                                                                       <model-element>
-                                                                                                               <cardinality>unbounded</cardinality>
-                                                                                                               <new-data-del-flag>false</new-data-del-flag>
-                                                                                                               <relationship-list>
-                                                                                                                       <relationship>
-                                                                                                                               <related-to>model</related-to>
-                                                                                                                               <relationship-data>
-                                                                                                                                       <!-- vSbg -->
-                                                                                                                                       <relationship-key>model.model-name-version-id
-                                                                                                                                       </relationship-key>
-                                                                                                                                       <relationship-value>a6d9de88-4046-4b78-a59e-5691243d292a
-                                                                                                                                       </relationship-value>
-                                                                                                                               </relationship-data>
-                                                                                                                       </relationship>
-                                                                                                               </relationship-list>
-                                                                                                       </model-element>
-                                                                                                       <model-element>
-                                                                                                               <cardinality>unbounded</cardinality>
-                                                                                                               <new-data-del-flag>false</new-data-del-flag>
-                                                                                                               <relationship-list>
-                                                                                                                       <relationship>
-                                                                                                                               <related-to>model</related-to>
-                                                                                                                               <relationship-data>
-                                                                                                                                       <!-- pBgf -->
-                                                                                                                                       <relationship-key>model.model-name-version-id
-                                                                                                                                       </relationship-key>
-                                                                                                                                       <relationship-value>35be1acf-1298-48c6-a128-66850083b8bd
-                                                                                                                                       </relationship-value>
-                                                                                                                               </relationship-data>
-                                                                                                                       </relationship>
-                                                                                                               </relationship-list>
-                                                                                                       </model-element>
-                                                                                               </model-elements>
-                                                                                       </element-choice-set>
-                                                                               </element-choice-sets>
-                                                                       </constrained-element-set>
-                                                               </constrained-element-sets>
-                                                       </model-constraint>
-                                               </model-element>
-                                       </model-elements>
-                               </model-element>
-                       </model-elements>
-               </model-element>
-       </model-elements>
-</model>
-
index c7ba530..0348f71 100644 (file)
-<!--
+<!--\r
   ============LICENSE_START=======================================================
   MODEL LOADER SERVICE
   ================================================================================
   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
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  You may obtain a copy of the License at\r
+  \r
+       http://www.apache.org/licenses/LICENSE-2.0\r
+  \r
+  Unless required by applicable law or agreed to in writing, software\r
+  distributed under the License is distributed on an "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+  See the License for the specific language governing permissions and\r
   limitations under the License.
-  ============LICENSE_END=========================================================
-  -->
-
-<vnf-catalog>
-       <part-number-list>
-               <att-part-number>FortiGate-VM00</att-part-number>
-               <vnf-type>FW</vnf-type>
-               <vendor-info>
-                       <vendor-name>FORTINET</vendor-name>
-                       <vendor-part-number>FortiGate-VM00</vendor-part-number>
-                       <vendor-model>VM00</vendor-model>
-               </vendor-info>
-               <vcpu>
-                       <vcpu-default>1</vcpu-default>
-                       <vcpu-min>1</vcpu-min>
-                       <vcpu-max>1</vcpu-max>
-               </vcpu>
-               <vmemory>
-                       <vmemory-default>1</vmemory-default>
-                       <vmemory-units>GB</vmemory-units>
-                       <vmemory-min>1</vmemory-min>
-                       <vmemory-max>1</vmemory-max>
-               </vmemory>
-               <vdisk>
-                       <vdisk-default>2</vdisk-default>
-                       <vdisk-units>GB</vdisk-units>
-                       <vdisk-min>2</vdisk-min>
-                       <vdisk-max>32</vdisk-max>
-               </vdisk>
-               <software-version-list>
-                       <software-version>5.2.7</software-version>
-                       <software-version-state>0</software-version-state>
-                       <software-filetype>IMAGE</software-filetype>
-                       <file-md5-value>1c59a521885c465004456f74d003726c</file-md5-value>
-                       <software-filename>test3</software-filename>
-               </software-version-list>
-               <software-version-list>
-                       <software-version>5.2.5</software-version>
-                       <software-version-state>1</software-version-state>
-                       <software-filetype>IMAGE</software-filetype>
-                       <file-md5-value>C4D2CBE51669796E48623E006782F7DC</file-md5-value>
-                       <software-filename>test2</software-filename>
-               </software-version-list>
-               <software-version-list>
-                       <software-version>5.2.4</software-version>
-                       <software-version-state>2</software-version-state>
-                       <software-filetype>IMAGE</software-filetype>
-                       <file-md5-value>4987E1E743FD641C879E1D3C5D50BCE0</file-md5-value>
-                       <software-filename>test1</software-filename>
-               </software-version-list>
-               <vnf-features-list>
-                       <vnf-feature>APPID</vnf-feature>
-               </vnf-features-list>
-               <vnf-features-list>
-                       <vnf-feature>IPS-IDS</vnf-feature>
-               </vnf-features-list>
-               <vnf-features-list>
-                       <vnf-feature>URLF</vnf-feature>
-               </vnf-features-list>
-               <vnf-features-list>
-                       <vnf-feature>Anti-Virus</vnf-feature>
-               </vnf-features-list>
-               <license-list>
-                       <license-assignment-group>FortiGate-VM00</license-assignment-group>
-                       <license-required>FALSE</license-required>
-               </license-list>
-       </part-number-list>
-       <part-number-list>
-               <att-part-number>FortiGate-VM01</att-part-number>
-               <vnf-type>FW</vnf-type>
-               <vendor-info>
-                       <vendor-name>FORTINET</vendor-name>
-                       <vendor-part-number>FortiGate-VM01</vendor-part-number>
-                       <vendor-model>VM01</vendor-model>
-               </vendor-info>
-               <vcpu>
-                       <vcpu-default>1</vcpu-default>
-                       <vcpu-min>1</vcpu-min>
-                       <vcpu-max>1</vcpu-max>
-               </vcpu>
-               <vmemory>
-                       <vmemory-default>2</vmemory-default>
-                       <vmemory-units>GB</vmemory-units>
-                       <vmemory-min>1</vmemory-min>
-                       <vmemory-max>2</vmemory-max>
-               </vmemory>
-               <vdisk>
-                       <vdisk-default>2</vdisk-default>
-                       <vdisk-units>GB</vdisk-units>
-                       <vdisk-min>2</vdisk-min>
-                       <vdisk-max>32</vdisk-max>
-               </vdisk>
-               <software-version-list>
-                       <software-version>5.2.7</software-version>
-                       <software-version-state>0</software-version-state>
-                       <software-filetype>IMAGE</software-filetype>
-                       <file-md5-value>1c59a521885c465004456f74d003726c</file-md5-value>
-                       <software-filename>software file name 3</software-filename>
-               </software-version-list>
-               <software-version-list>
-                       <software-version>5.2.5</software-version>
-                       <software-version-state>1</software-version-state>
-                       <software-filetype>IMAGE</software-filetype>
-                       <file-md5-value>C4D2CBE51669796E48623E006782F7DC</file-md5-value>
-                       <software-filename>software file name 2</software-filename>
-               </software-version-list>
-               <software-version-list>
-                       <software-version>5.2.4</software-version>
-                       <software-version-state>2</software-version-state>
-                       <software-filetype>IMAGE</software-filetype>
-                       <file-md5-value>4987E1E743FD641C879E1D3C5D50BCE0</file-md5-value>
-                       <software-filename>software file name</software-filename>
-               </software-version-list>
-               <vnf-features-list>
-                       <vnf-feature>APPID</vnf-feature>
-               </vnf-features-list>
-               <vnf-features-list>
-                       <vnf-feature>IPS-IDS</vnf-feature>
-               </vnf-features-list>
-               <vnf-features-list>
-                       <vnf-feature>URLF</vnf-feature>
-               </vnf-features-list>
-               <vnf-features-list>
-                       <vnf-feature>Anti-Virus</vnf-feature>
-               </vnf-features-list>
-               <license-list>
-                       <license-assignment-group>license group</license-assignment-group>
-                       <license-required>FALSE</license-required>
-               </license-list>
-       </part-number-list>
-
-</vnf-catalog>
+  ============LICENSE_END=========================================================\r
+  -->\r
+\r
+<vnf-catalog>\r
+       <part-number-list>\r
+               <part-number>FortiGate-VM00</part-number>\r
+               <vnf-type>FW</vnf-type>\r
+               <vendor-info>\r
+                       <vendor-name>FORTINET</vendor-name>\r
+                       <vendor-part-number>FortiGate-VM00</vendor-part-number>\r
+                       <vendor-model>VM00</vendor-model>\r
+               </vendor-info>\r
+               <vcpu>\r
+                       <vcpu-default>1</vcpu-default>\r
+                       <vcpu-min>1</vcpu-min>\r
+                       <vcpu-max>1</vcpu-max>\r
+               </vcpu>\r
+               <vmemory>\r
+                       <vmemory-default>1</vmemory-default>\r
+                       <vmemory-units>GB</vmemory-units>\r
+                       <vmemory-min>1</vmemory-min>\r
+                       <vmemory-max>1</vmemory-max>\r
+               </vmemory>\r
+               <vdisk>\r
+                       <vdisk-default>2</vdisk-default>\r
+                       <vdisk-units>GB</vdisk-units>\r
+                       <vdisk-min>2</vdisk-min>\r
+                       <vdisk-max>32</vdisk-max>\r
+               </vdisk>\r
+               <software-version-list>\r
+                       <software-version>5.2.7</software-version>\r
+                       <software-version-state>0</software-version-state>\r
+                       <software-filetype>IMAGE</software-filetype>\r
+                       <file-md5-value>1c59a521885c465004456f74d003726c</file-md5-value>\r
+                       <software-filename>test3</software-filename>\r
+               </software-version-list>\r
+               <software-version-list>\r
+                       <software-version>5.2.5</software-version>\r
+                       <software-version-state>1</software-version-state>\r
+                       <software-filetype>IMAGE</software-filetype>\r
+                       <file-md5-value>C4D2CBE51669796E48623E006782F7DC</file-md5-value>\r
+                       <software-filename>test2</software-filename>\r
+               </software-version-list>\r
+               <software-version-list>\r
+                       <software-version>5.2.4</software-version>\r
+                       <software-version-state>2</software-version-state>\r
+                       <software-filetype>IMAGE</software-filetype>\r
+                       <file-md5-value>4987E1E743FD641C879E1D3C5D50BCE0</file-md5-value>\r
+                       <software-filename>test1</software-filename>\r
+               </software-version-list>\r
+               <vnf-features-list>\r
+                       <vnf-feature>APPID</vnf-feature>\r
+               </vnf-features-list>\r
+               <vnf-features-list>\r
+                       <vnf-feature>IPS-IDS</vnf-feature>\r
+               </vnf-features-list>\r
+               <vnf-features-list>\r
+                       <vnf-feature>URLF</vnf-feature>\r
+               </vnf-features-list>\r
+               <vnf-features-list>\r
+                       <vnf-feature>Anti-Virus</vnf-feature>\r
+               </vnf-features-list>\r
+               <license-list>\r
+                       <license-assignment-group>FortiGate-VM00</license-assignment-group>\r
+                       <license-required>FALSE</license-required>\r
+               </license-list>\r
+       </part-number-list>\r
+       <part-number-list>\r
+               <part-number>FortiGate-VM01</part-number>\r
+               <vnf-type>FW</vnf-type>\r
+               <vendor-info>\r
+                       <vendor-name>FORTINET</vendor-name>\r
+                       <vendor-part-number>FortiGate-VM01</vendor-part-number>\r
+                       <vendor-model>VM01</vendor-model>\r
+               </vendor-info>\r
+               <vcpu>\r
+                       <vcpu-default>1</vcpu-default>\r
+                       <vcpu-min>1</vcpu-min>\r
+                       <vcpu-max>1</vcpu-max>\r
+               </vcpu>\r
+               <vmemory>\r
+                       <vmemory-default>2</vmemory-default>\r
+                       <vmemory-units>GB</vmemory-units>\r
+                       <vmemory-min>1</vmemory-min>\r
+                       <vmemory-max>2</vmemory-max>\r
+               </vmemory>\r
+               <vdisk>\r
+                       <vdisk-default>2</vdisk-default>\r
+                       <vdisk-units>GB</vdisk-units>\r
+                       <vdisk-min>2</vdisk-min>\r
+                       <vdisk-max>32</vdisk-max>\r
+               </vdisk>\r
+               <software-version-list>\r
+                       <software-version>5.2.7</software-version>\r
+                       <software-version-state>0</software-version-state>\r
+                       <software-filetype>IMAGE</software-filetype>\r
+                       <file-md5-value>1c59a521885c465004456f74d003726c</file-md5-value>\r
+                       <software-filename>software file name 3</software-filename>\r
+               </software-version-list>\r
+               <software-version-list>\r
+                       <software-version>5.2.5</software-version>\r
+                       <software-version-state>1</software-version-state>\r
+                       <software-filetype>IMAGE</software-filetype>\r
+                       <file-md5-value>C4D2CBE51669796E48623E006782F7DC</file-md5-value>\r
+                       <software-filename>software file name 2</software-filename>\r
+               </software-version-list>\r
+               <software-version-list>\r
+                       <software-version>5.2.4</software-version>\r
+                       <software-version-state>2</software-version-state>\r
+                       <software-filetype>IMAGE</software-filetype>\r
+                       <file-md5-value>4987E1E743FD641C879E1D3C5D50BCE0</file-md5-value>\r
+                       <software-filename>software file name</software-filename>\r
+               </software-version-list>\r
+               <vnf-features-list>\r
+                       <vnf-feature>APPID</vnf-feature>\r
+               </vnf-features-list>\r
+               <vnf-features-list>\r
+                       <vnf-feature>IPS-IDS</vnf-feature>\r
+               </vnf-features-list>\r
+               <vnf-features-list>\r
+                       <vnf-feature>URLF</vnf-feature>\r
+               </vnf-features-list>\r
+               <vnf-features-list>\r
+                       <vnf-feature>Anti-Virus</vnf-feature>\r
+               </vnf-features-list>\r
+               <license-list>\r
+                       <license-assignment-group>license group</license-assignment-group>\r
+                       <license-required>FALSE</license-required>\r
+               </license-list>\r
+       </part-number-list>\r
+\r
+</vnf-catalog>\r
index a80dc76..b0a402c 100644 (file)
@@ -1,33 +1,33 @@
-###
+###\r
 # ============LICENSE_START=======================================================
 # MODEL LOADER SERVICE
 # ================================================================================
 # 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
+# Licensed under the Apache License, Version 2.0 (the "License");\r
+# you may not use this file except in compliance with the License.\r
+# You may obtain a copy of the License at\r
+# \r
+#      http://www.apache.org/licenses/LICENSE-2.0\r
+# \r
+# Unless required by applicable law or agreed to in writing, software\r
+# distributed under the License is distributed on an "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+# See the License for the specific language governing permissions and\r
 # limitations under the License.
-# ============LICENSE_END=========================================================
-###
-
-# Versioning variables
-# Note that these variables cannot be structured (e.g. : version.release or version.snapshot etc... )
-# because they are used in Jenkins, whose plug-in doesn't support
-
-major=1
-minor=1
-patch=0
-
-base_version=${major}.${minor}.${patch}
-
-# Release must be completed with git revision # in Jenkins
-release_version=${base_version}
-snapshot_version=${base_version}-SNAPSHOT
+# ============LICENSE_END=========================================================\r
+###\r
+\r
+# Versioning variables\r
+# Note that these variables cannot be structured (e.g. : version.release or version.snapshot etc... )\r
+# because they are used in Jenkins, whose plug-in doesn't support\r
+\r
+major=1\r
+minor=1\r
+patch=0\r
+\r
+base_version=${major}.${minor}.${patch}\r
+\r
+# Release must be completed with git revision # in Jenkins\r
+release_version=${base_version}\r
+snapshot_version=${base_version}-SNAPSHOT\r