summaryrefslogtreecommitdiffstats
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/ajsc/model-loader_v1/model-loader/v1/conf/modelLoaderBeans.groovy31
-rw-r--r--src/main/ajsc/model-loader_v1/model-loader/v1/docs/README.txt21
-rw-r--r--src/main/ajsc/model-loader_v1/model-loader/v1/lib/README.txt21
-rw-r--r--src/main/ajsc/model-loader_v1/model-loader/v1/props/module.props (renamed from src/main/docker/startup.sh)36
-rw-r--r--src/main/ajsc/model-loader_v1/model-loader/v1/routes/modelLoader.route (renamed from src/main/webapp/WEB-INF/applicationContext.xml)41
-rw-r--r--src/main/assemble/ajsc_module_assembly.xml86
-rw-r--r--src/main/assemble/ajsc_props_assembly.xml (renamed from src/main/webapp/WEB-INF/rest-servlet.xml)63
-rw-r--r--src/main/assemble/ajsc_runtime_assembly.xml64
-rw-r--r--src/main/bin/start.sh (renamed from src/main/resources/model-loader.properties)76
-rw-r--r--src/main/config/ajsc-chef.jksbin0 -> 5256 bytes
-rw-r--r--src/main/config/ajsc-jetty.xml90
-rw-r--r--src/main/config/ajsc-override-web.xml73
-rw-r--r--src/main/config/ajscJetty.jksbin0 -> 3736 bytes
-rw-r--r--src/main/config/cadi.properties56
-rw-r--r--src/main/config/jul-redirect.properties32
-rw-r--r--src/main/config/keyfile27
-rw-r--r--src/main/config/runner-web.xml117
-rw-r--r--src/main/docker/.dockerignore2
-rw-r--r--src/main/docker/Dockerfile61
-rw-r--r--src/main/docker/update_config.sh151
-rw-r--r--src/main/java/org/openecomp/modelloader/config/ModelLoaderConfig.java467
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/Artifact.java90
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java76
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/ArtifactType.java52
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java64
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java376
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java194
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java361
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java462
-rw-r--r--src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java468
-rw-r--r--src/main/java/org/openecomp/modelloader/notification/DistributionStatusMsg.java152
-rw-r--r--src/main/java/org/openecomp/modelloader/notification/EventCallback.java580
-rw-r--r--src/main/java/org/openecomp/modelloader/restclient/AaiRestClient.java802
-rw-r--r--src/main/java/org/openecomp/modelloader/service/ModelLoaderInterface.java108
-rw-r--r--src/main/java/org/openecomp/modelloader/service/ModelLoaderMsgs.java212
-rw-r--r--src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java362
-rw-r--r--src/main/java/org/openecomp/modelloader/util/JsonXmlConverter.java160
-rw-r--r--src/main/resources/aai-os-cert.p12bin4357 -> 0 bytes
-rw-r--r--src/main/resources/logback.xml195
-rw-r--r--src/main/resources/org/openecomp/modelloader/filemonitor/FileMonitorMsgs.properties81
-rw-r--r--src/main/resources/org/openecomp/modelloader/service/ModelLoaderMsgs.properties218
-rw-r--r--src/main/resources/schema/aai_schema_v8.xsd4912
-rw-r--r--src/main/resources/schema/vnfcatalog.xsd242
-rw-r--r--src/main/runtime/context/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.context1
-rw-r--r--src/main/runtime/context/default#0.context1
-rw-r--r--src/main/runtime/deploymentPackage/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.json1
-rw-r--r--src/main/runtime/shiroRole/ajscadmin.json1
-rw-r--r--src/main/runtime/shiroRole/contextadmin#__module.ajsc.namespace.name__.json1
-rw-r--r--src/main/runtime/shiroRole/contextadmin#default.json1
-rw-r--r--src/main/runtime/shiroUser/ajsc.json1
-rw-r--r--src/main/runtime/shiroUserRole/ajsc#ajscadmin.json1
-rw-r--r--src/main/runtime/shiroUserRole/ajsc#contextadmin#__module.ajsc.namespace.name__.json1
-rw-r--r--src/main/runtime/shiroUserRole/ajsc#contextadmin#default.json1
-rw-r--r--src/main/webapp/WEB-INF/web.xml40
54 files changed, 6080 insertions, 5652 deletions
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
index 0000000..2162213
--- /dev/null
+++ b/src/main/ajsc/model-loader_v1/model-loader/v1/conf/modelLoaderBeans.groovy
@@ -0,0 +1,31 @@
+/*-
+ * ============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=========================================================
+ */
+
+beans{
+ xmlns cxf: "http://camel.apache.org/schema/cxf"
+ xmlns jaxrs: "http://cxf.apache.org/jaxrs"
+ xmlns util: "http://www.springframework.org/schema/util"
+
+ modelLoader(org.openecomp.modelloader.service.ModelLoaderService)
+
+ util.list(id: 'modelLoaderServices') {
+ ref(bean:'modelLoader')
+ }
+}
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
index 0000000..508361d
--- /dev/null
+++ b/src/main/ajsc/model-loader_v1/model-loader/v1/docs/README.txt
@@ -0,0 +1,21 @@
+/*-
+ * ============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=========================================================
+ */
+
+Place any docs here that you want to access within the ajsc upon deployment of your service.
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
index 0000000..f80be9b
--- /dev/null
+++ b/src/main/ajsc/model-loader_v1/model-loader/v1/lib/README.txt
@@ -0,0 +1,21 @@
+/*-
+ * ============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=========================================================
+ */
+
+3rd party JAR's needed by your jars (if any) for a ajsc deployment package go here...
diff --git a/src/main/docker/startup.sh b/src/main/ajsc/model-loader_v1/model-loader/v1/props/module.props
index c4a4d5f..aab4afa 100644
--- a/src/main/docker/startup.sh
+++ b/src/main/ajsc/model-loader_v1/model-loader/v1/props/module.props
@@ -1,27 +1,21 @@
-###
+###
# ============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");
+# 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=========================================================
-###
-
-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=========================================================
+###
+
+EXAMPLE.PROPERTY=EXAMLE_VALUE
diff --git a/src/main/webapp/WEB-INF/applicationContext.xml b/src/main/ajsc/model-loader_v1/model-loader/v1/routes/modelLoader.route
index 08a88e6..170c466 100644
--- a/src/main/webapp/WEB-INF/applicationContext.xml
+++ b/src/main/ajsc/model-loader_v1/model-loader/v1/routes/modelLoader.route
@@ -1,29 +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
+ 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=========================================================
- -->
-
-<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=========================================================
+ -->
+
+<route xmlns="http://camel.apache.org/schema/spring" trace="true">
+ <from uri="att-dme2-servlet:///__module_ajsc_namespace_name__/__module_ajsc_namespace_version__/model-service?matchOnUriPrefix=true" />
+ <to uri="cxfbean:modelLoaderServices" />
+</route>
diff --git a/src/main/assemble/ajsc_module_assembly.xml b/src/main/assemble/ajsc_module_assembly.xml
new file mode 100644
index 0000000..520870f
--- /dev/null
+++ b/src/main/assemble/ajsc_module_assembly.xml
@@ -0,0 +1,86 @@
+<!--
+ ============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=========================================================
+ -->
+
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+ <id>${version}</id>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <formats>
+ <format>zip</format>
+ </formats>
+ <fileSets>
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-ajsc/routes/</directory>
+ <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/routes/</outputDirectory>
+ <includes>
+ <include>*.route</include>
+ </includes>
+
+ </fileSet>
+
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-ajsc/docs/</directory>
+ <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/docs/</outputDirectory>
+ <includes>
+ <include>*.*</include>
+ <!-- <include>*.vm</include> -->
+ </includes>
+
+ </fileSet>
+
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-ajsc/lib/</directory>
+ <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/lib/</outputDirectory>
+ <includes>
+ <include>*.jar</include>
+ </includes>
+
+ </fileSet>
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-ajsc/extJars/</directory>
+ <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/extJars/</outputDirectory>
+ <includes>
+ <include>*.jar</include>
+ </includes>
+ </fileSet>
+
+ <!-- also try to grab outputs from the "jar" plugin's package phase -->
+ <fileSet>
+ <directory>${project.basedir}/target/</directory>
+ <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/lib/</outputDirectory>
+ <includes>
+ <include>*.jar</include>
+ </includes>
+ </fileSet>
+
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-ajsc/conf/</directory>
+ <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/conf/</outputDirectory>
+ <includes>
+ <include>*.*</include>
+ </includes>
+
+ </fileSet>
+ </fileSets>
+
+</assembly>
+
diff --git a/src/main/webapp/WEB-INF/rest-servlet.xml b/src/main/assemble/ajsc_props_assembly.xml
index 6a23c2b..e26497b 100644
--- a/src/main/webapp/WEB-INF/rest-servlet.xml
+++ b/src/main/assemble/ajsc_props_assembly.xml
@@ -1,32 +1,43 @@
-<!--
+<!--
============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");
+ 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=========================================================
- -->
-
-<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=========================================================
+ -->
+
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+ <id>${version}_properties</id>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <formats>
+ <format>zip</format>
+ </formats>
+ <fileSets>
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-ajsc/props</directory>
+ <outputDirectory>${module.ajsc.namespace.name}/${module.ajsc.namespace.version}/props/</outputDirectory>
+ <includes>
+ <include>*.props</include>
+ </includes>
+
+ </fileSet>
+
+ </fileSets>
+
+</assembly>
+
diff --git a/src/main/assemble/ajsc_runtime_assembly.xml b/src/main/assemble/ajsc_runtime_assembly.xml
new file mode 100644
index 0000000..c5c515a
--- /dev/null
+++ b/src/main/assemble/ajsc_runtime_assembly.xml
@@ -0,0 +1,64 @@
+<!--
+ ============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=========================================================
+ -->
+
+<assembly
+ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+ <id>runtimeEnvironment</id>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <formats>
+ <format>zip</format>
+ </formats>
+ <fileSets>
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-runtime/context/</directory>
+ <outputDirectory>runtime/context/</outputDirectory>
+ <includes>
+ <include>*.context</include>
+ </includes>
+ </fileSet>
+ <fileSet>
+ <directory>${project.basedir}/target/versioned-runtime/serviceProperties/</directory>
+ <outputDirectory>runtime/serviceProperties/</outputDirectory>
+ <includes>
+ <include>*.props</include>
+ </includes>
+ </fileSet><fileSet>
+ <directory>${project.basedir}/target/versioned-runtime/shiroRole</directory>
+ <outputDirectory>runtime/shiroRole/</outputDirectory>
+ <includes>
+ <include>*.json</include>
+ </includes>
+ </fileSet><fileSet>
+ <directory>${project.basedir}/target/versioned-runtime/shiroUser</directory>
+ <outputDirectory>runtime/shiroUser/</outputDirectory>
+ <includes>
+ <include>*.json</include>
+ </includes>
+ </fileSet><fileSet>
+ <directory>${project.basedir}/target/versioned-runtime/shiroUserRole</directory>
+ <outputDirectory>runtime/shiroUserRole</outputDirectory>
+ <includes>
+ <include>*.json</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+</assembly>
diff --git a/src/main/resources/model-loader.properties b/src/main/bin/start.sh
index 7b8f63d..07f707e 100644
--- a/src/main/resources/model-loader.properties
+++ b/src/main/bin/start.sh
@@ -1,43 +1,45 @@
-###
+###
# ============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");
+# 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 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=========================================================
+###
+
+#!/bin/sh
+
+BASEDIR="/opt/app/model-loader/"
+AJSC_HOME="$BASEDIR"
+
+if [ -z "$CONFIG_HOME" ]; then
+ echo "CONFIG_HOME must be set in order to start up process"
+ exit 1
+fi
+
+CLASSPATH="$AJSC_HOME/lib/*"
+CLASSPATH="$CLASSPATH:$AJSC_HOME/extJars/"
+CLASSPATH="$CLASSPATH:$AJSC_HOME/etc/"
+PROPS="-DAJSC_HOME=$AJSC_HOME"
+PROPS="$PROPS -DAJSC_CONF_HOME=$BASEDIR/bundleconfig/"
+PROPS="$PROPS -Dlogback.configurationFile=$BASEDIR/bundleconfig/etc/logback.xml"
+PROPS="$PROPS -DAJSC_SHARED_CONFIG=$AJSC_CONF_HOME"
+PROPS="$PROPS -DAJSC_SERVICE_NAMESPACE=model-loader"
+PROPS="$PROPS -DAJSC_SERVICE_VERSION=v1"
+PROPS="$PROPS -Dserver.port=8080"
+PROPS="$PROPS -DCONFIG_HOME=$CONFIG_HOME"
+
+echo $CLASSPATH
+
+java -Xms1024m -Xmx4096m -XX:PermSize=2024m $PROPS -classpath $CLASSPATH com.att.ajsc.runner.Runner context=// sslport=8081
diff --git a/src/main/config/ajsc-chef.jks b/src/main/config/ajsc-chef.jks
new file mode 100644
index 0000000..aeca770
--- /dev/null
+++ b/src/main/config/ajsc-chef.jks
Binary files differ
diff --git a/src/main/config/ajsc-jetty.xml b/src/main/config/ajsc-jetty.xml
new file mode 100644
index 0000000..43741bd
--- /dev/null
+++ b/src/main/config/ajsc-jetty.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-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=========================================================
+ -->
+
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
+<Configure id="ajsc-server" class="org.eclipse.jetty.server.Server">
+ <!-- DO NOT REMOVE!!!! This is setting up the AJSC Context -->
+ <New id="ajscContext" class="org.eclipse.jetty.webapp.WebAppContext">
+ <Set name="contextPath"><SystemProperty name="AJSC_CONTEXT_PATH" /></Set>
+ <Set name="extractWAR">true</Set>
+ <Set name="tempDirectory"><SystemProperty name="AJSC_TEMP_DIR" /></Set>
+ <Set name="war"><SystemProperty name="AJSC_WAR_PATH" /></Set>
+ <Set name="descriptor"><SystemProperty name="AJSC_HOME" />/etc/runner-web.xml</Set>
+ <Set name="overrideDescriptor"><SystemProperty name="AJSC_HOME" />/etc/ajsc-override-web.xml</Set>
+ <Set name="throwUnavailableOnStartupException">true</Set>
+ <Set name="servletHandler">
+ <New class="org.eclipse.jetty.servlet.ServletHandler">
+ <Set name="startWithUnavailable">false</Set>
+ </New>
+ </Set>
+ <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>
+ </New>
+
+ <Set name="handler">
+ <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection">
+ <Set name="Handlers">
+ <Array type="org.eclipse.jetty.webapp.WebAppContext">
+ <Item>
+ <Ref refid="ajscContext" />
+ </Item>
+ </Array>
+ </Set>
+ </New>
+ </Set>
+
+ <Call name="addBean">
+ <Arg>
+ <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager">
+ <Set name="contexts">
+ <Ref refid="Contexts" />
+ </Set>
+ <Call id="extAppHotDeployProvider" name="addAppProvider">
+ <Arg>
+ <New class="org.eclipse.jetty.deploy.providers.WebAppProvider">
+ <Set name="monitoredDirName"><SystemProperty name="AJSC_HOME" />/extApps</Set>
+ <Set name="scanInterval">10</Set>
+ <Set name="extractWars">true</Set>
+ </New>
+ </Arg>
+ </Call>
+ </New>
+ </Arg>
+ </Call>
+
+ <Call name="addConnector">
+ <Arg>
+ <New class="org.eclipse.jetty.server.ServerConnector">
+ <Arg name="server">
+ <Ref refid="ajsc-server" />
+ </Arg>
+ <Set name="port"><SystemProperty name="AJSC_HTTP_PORT" default="80" /></Set>
+ </New>
+ </Arg>
+ </Call>
+
+ <Get name="ThreadPool">
+ <Set name="minThreads"><SystemProperty name="AJSC_JETTY_ThreadCount_MIN" /></Set>
+ <Set name="maxThreads"><SystemProperty name="AJSC_JETTY_ThreadCount_MAX" /></Set>
+ <Set name="idleTimeout"><SystemProperty name="AJSC_JETTY_IDLETIME_MAX" /></Set>
+ <Set name="detailedDump">false</Set>
+ </Get>
+
+</Configure>
diff --git a/src/main/config/ajsc-override-web.xml b/src/main/config/ajsc-override-web.xml
new file mode 100644
index 0000000..b0d44f3
--- /dev/null
+++ b/src/main/config/ajsc-override-web.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ ============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=========================================================
+ -->
+
+<!--
+ Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
+-->
+<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+ metadata-complete="false" version="3.0">
+
+ <filter-mapping>
+ <filter-name>InterceptorFilter</filter-name>
+ <url-pattern>/services/*</url-pattern>
+ </filter-mapping>
+ <filter-mapping>
+ <filter-name>InterceptorFilter</filter-name>
+ <url-pattern>/rest/*</url-pattern>
+ </filter-mapping>
+
+ <filter-mapping>
+ <filter-name>springSecurityFilterChain</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <servlet-mapping>
+ <servlet-name>ManagementServlet</servlet-name>
+ <url-pattern>/mgmt</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>RestletServlet</servlet-name>
+ <url-pattern>/rest/*</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>CamelServlet</servlet-name>
+ <url-pattern>/services/*</url-pattern>
+ </servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>jsp</servlet-name>
+ <url-pattern>*.jsp</url-pattern>
+ <url-pattern>*.jspf</url-pattern>
+ <url-pattern>*.jspx</url-pattern>
+ <url-pattern>*.xsp</url-pattern>
+ <url-pattern>*.JSP</url-pattern>
+ <url-pattern>*.JSPF</url-pattern>
+ <url-pattern>*.JSPX</url-pattern>
+ <url-pattern>*.XSP</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>default</servlet-name>
+ <url-pattern>/*</url-pattern>
+ </servlet-mapping>
+</web-app>
diff --git a/src/main/config/ajscJetty.jks b/src/main/config/ajscJetty.jks
new file mode 100644
index 0000000..48cdbff
--- /dev/null
+++ b/src/main/config/ajscJetty.jks
Binary files differ
diff --git a/src/main/config/cadi.properties b/src/main/config/cadi.properties
new file mode 100644
index 0000000..c3b8b14
--- /dev/null
+++ b/src/main/config/cadi.properties
@@ -0,0 +1,56 @@
+###
+# ============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 properties file is used for defining AAF properties related to the CADI framework. This file is used for running AAF framework
+
+#In order to test functionality of cadi-ajsc-plugin locally cross domain cookie. Cadi "should" find your hostname for you.
+#However, we have seen some situations where this fails. A Local testing
+#modification can include modifying your hosts file so that you can use "mywebserver.att.com" for your localhost in order
+#to test/verify GLO functionality locally. If you are on a Windows machine, you will already have a machine name associated with
+#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
+#upon your particular machine domain. This property is commented out as cadi SHOULD find your machine name. With version 1.2.1 of cadi,
+#it appears to resolve Mac machine names as well, now. But, this can be somewhat inconsistent depending on your specific working envrironment.
+hostname=mywebserver.att.com
+
+#Setting csp_domain to PROD will allow for testing using your attuid and password through GLO.
+csp_domain=PROD
+csp_devl_localhost=true
+
+basic_realm=csp.att.com
+#basic_realm=aaf.att.com
+basic_warn=TRUE
+
+cadi_loglevel=WARN
+cadi_keyfile=target/swm/package/nix/dist_files/appl/model-loader/etc/keyfile
+
+# Configure AAF
+#These are dummy values add appropriate values required
+aaf_url=url
+
+#AJSC - MECHID
+#These are dummy values add appropriate values required
+aaf_id=dummyid@ajsc.att.com
+aaf_password=enc:277edqJCjT0RlUI3BtbDQa-3Ha-CQGd
+aaf_timeout=5000
+aaf_clean_interval=30000
+aaf_user_expires=5000
+aaf_high_count=1000
+
+
diff --git a/src/main/config/jul-redirect.properties b/src/main/config/jul-redirect.properties
new file mode 100644
index 0000000..b94397e
--- /dev/null
+++ b/src/main/config/jul-redirect.properties
@@ -0,0 +1,32 @@
+###
+# ============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=========================================================
+###
+
+# Bridge JUL->slf4j Logging Configuration File
+#
+# This file bridges the JUL logging infrastructure into
+# SLF4J so JUL logs go to logback implementation provided
+# in this project. SLF4J also captures log4j and has
+# other framework options as well providing a common
+# logging infrastructure for capturing all logs from different
+# libraries using different frameworks in one place.
+
+# Global properties
+handlers=org.slf4j.bridge.SLF4JBridgeHandler
+.level= ALL
diff --git a/src/main/config/keyfile b/src/main/config/keyfile
new file mode 100644
index 0000000..882e86a
--- /dev/null
+++ b/src/main/config/keyfile
@@ -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
index 0000000..99d9191
--- /dev/null
+++ b/src/main/config/runner-web.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ ============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=========================================================
+ -->
+
+<!--
+ Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
+-->
+<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+ metadata-complete="false" version="3.0">
+
+ <context-param>
+ <param-name>contextConfigLocation</param-name>
+ <param-value>/WEB-INF/spring-servlet.xml,
+ classpath:applicationContext.xml
+ </param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>spring.profiles.default</param-name>
+ <param-value>nooauth</param-value>
+ </context-param>
+
+ <listener>
+ <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+ </listener>
+
+ <servlet>
+ <servlet-name>ManagementServlet</servlet-name>
+ <servlet-class>ajsc.ManagementServlet</servlet-class>
+ </servlet>
+
+
+ <filter>
+ <filter-name>InterceptorFilter</filter-name>
+ <filter-class>ajsc.filters.InterceptorFilter</filter-class>
+ <init-param>
+ <param-name>preProcessor_interceptor_config_file</param-name>
+ <param-value>/etc/PreProcessorInterceptors.properties</param-value>
+ </init-param>
+ <init-param>
+ <param-name>postProcessor_interceptor_config_file</param-name>
+ <param-value>/etc/PostProcessorInterceptors.properties</param-value>
+ </init-param>
+
+ </filter>
+
+ <servlet>
+ <servlet-name>RestletServlet</servlet-name>
+ <servlet-class>ajsc.restlet.RestletSpringServlet</servlet-class>
+ <init-param>
+ <param-name>org.restlet.component</param-name>
+ <param-value>restletComponent</param-value>
+ </init-param>
+ </servlet>
+
+ <servlet>
+ <servlet-name>CamelServlet</servlet-name>
+ <servlet-class>ajsc.servlet.AjscCamelServlet</servlet-class>
+ </servlet>
+
+
+ <filter>
+ <filter-name>springSecurityFilterChain</filter-name>
+ <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
+ </filter>
+
+ <servlet>
+ <servlet-name>spring</servlet-name>
+ <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+
+<!-- <servlet-mapping>
+ <servlet-name>spring</servlet-name>
+ <url-pattern>/</url-pattern>
+ </servlet-mapping>-->
+
+<!-- BEGIN jsp -->
+
+ <servlet id="jsp">
+ <servlet-name>jsp</servlet-name>
+ <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
+ </servlet>
+
+
+
+
+
+ <!-- BEGIN static content -->
+ <servlet>
+ <servlet-name>default</servlet-name>
+ <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
+ <init-param>
+ <param-name>dirAllowed</param-name>
+ <param-value>true</param-value>
+ </init-param>
+ </servlet>
+ <!-- END static content -->
+</web-app>
diff --git a/src/main/docker/.dockerignore b/src/main/docker/.dockerignore
deleted file mode 100644
index 1128374..0000000
--- a/src/main/docker/.dockerignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*.war
-*.jsonld \ No newline at end of file
diff --git a/src/main/docker/Dockerfile b/src/main/docker/Dockerfile
index 99c34fd..6f187d5 100644
--- a/src/main/docker/Dockerfile
+++ b/src/main/docker/Dockerfile
@@ -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
index 77916ed..0000000
--- a/src/main/docker/update_config.sh
+++ /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;
diff --git a/src/main/java/org/openecomp/modelloader/config/ModelLoaderConfig.java b/src/main/java/org/openecomp/modelloader/config/ModelLoaderConfig.java
index 26f13ad..407b015 100644
--- a/src/main/java/org/openecomp/modelloader/config/ModelLoaderConfig.java
+++ b/src/main/java/org/openecomp/modelloader/config/ModelLoaderConfig.java
@@ -1,235 +1,232 @@
-/*-
- * ============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;
- }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.config;
+
+import org.eclipse.jetty.util.security.Password;
+import org.openecomp.sdc.api.consumer.IConfiguration;
+
+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, String certLocation) {
+ this.modelLoaderProperties = modelLoaderProperties;
+ this.certLocation = certLocation;
+
+ // 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;
+ }
+
+ public boolean isFilterInEmptyResources() {
+ return false;
+ }
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/Artifact.java b/src/main/java/org/openecomp/modelloader/entity/Artifact.java
index fb0ec9f..30709ae 100644
--- a/src/main/java/org/openecomp/modelloader/entity/Artifact.java
+++ b/src/main/java/org/openecomp/modelloader/entity/Artifact.java
@@ -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;
- }
-
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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;
+ }
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java b/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java
index 16f2c87..bd6a861 100644
--- a/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java
+++ b/src/main/java/org/openecomp/modelloader/entity/ArtifactHandler.java
@@ -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);
-
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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);
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java b/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java
index 8977e3c..ae556bc 100644
--- a/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java
+++ b/src/main/java/org/openecomp/modelloader/entity/ArtifactType.java
@@ -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;
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.entity;
+
+public enum ArtifactType {
+ MODEL, NAMED_QUERY, VNF_CATALOG;
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java b/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java
index b2e1fdb..a15ed3c 100644
--- a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java
+++ b/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifact.java
@@ -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);
- }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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);
+ }
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java b/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java
index 189b069..5c526a6 100644
--- a/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java
+++ b/src/main/java/org/openecomp/modelloader/entity/catalog/VnfCatalogArtifactHandler.java
@@ -1,184 +1,192 @@
-/*-
- * ============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
- }
- }
-
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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 org.springframework.web.util.UriUtils;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
+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 queryURI = "application-vendor=" + applicationVendor + "&application=" + application + "&application-version=" + applicationVersion;
+
+ String getUrl = config.getAaiBaseUrl() + config.getAaiVnfImageUrl() + "?" + UriUtils.encodePath(queryURI, "UTF-8");
+
+ 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;
+ } catch (UnsupportedEncodingException 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
+ }
+ }
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java
index 904dba9..14749e5 100644
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java
+++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifact.java
@@ -1,60 +1,134 @@
-/*-
- * ============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();
- }
-
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+package org.openecomp.modelloader.entity.model;
+
+import org.openecomp.modelloader.entity.Artifact;
+import org.w3c.dom.Node;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class ModelArtifact extends Artifact {
+
+ String modelVerId;
+ String modelInvariantId;
+ String nameVersionId;
+ String modelModelVerCombinedKey;
+ String modelVerModelVersionId;
+ String modelModelInvariantId;
+ String modelNamespace;
+ Set<String> referencedModelIds = new HashSet<String>();
+ Node modelVer;
+ boolean isV9Artifact = true;
+
+ public boolean isV9Artifact() {
+ return isV9Artifact;
+ }
+
+ public void setV9Artifact(boolean isV9Artifact) {
+ this.isV9Artifact = isV9Artifact;
+ }
+
+ public String getModelVerModelVersionId() {
+ return modelVerModelVersionId;
+ }
+
+ public void setModelVerModelVersionId(String modelVerModelVersionId) {
+ this.modelVerModelVersionId = modelVerModelVersionId;
+ }
+
+ public String getModelModelInvariantId() {
+ return modelModelInvariantId;
+ }
+
+ public void setModelModelInvariantId(String modelModelInvariantId) {
+ this.modelModelInvariantId = modelModelInvariantId;
+ }
+
+ public String getNameVersionId() {
+ return nameVersionId;
+ }
+
+ public void setNameVersionId(String nameVersionId) {
+ this.nameVersionId = nameVersionId;
+ }
+
+ public String getModelNamespace() {
+ return modelNamespace;
+ }
+
+ public void setModelNamespace(String modelNamespace) {
+ this.modelNamespace = modelNamespace;
+ }
+
+ 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("ModelInvariantId=" + modelInvariantId + "(" + getType().toString() + ") ==> ");
+ for (String dep : referencedModelIds) {
+ sb.append(dep + " ");
+ }
+
+ return sb.toString();
+ }
+
+ public String getModelVerId() {
+ return modelVerId;
+ }
+
+ public void setModelVerId(String modelVerId) {
+ this.modelVerId = modelVerId;
+ }
+
+ public String getModelInvariantId() {
+ return modelInvariantId;
+ }
+
+ public void setModelInvariantId(String modelInvariantId) {
+ this.modelInvariantId = modelInvariantId;
+ }
+
+ public Node getModelVer() {
+ return modelVer;
+ }
+
+ public void setModelVer(Node modelVer) {
+ this.modelVer = modelVer;
+ }
+
+ public String getModelModelVerCombinedKey() {
+ return getModelInvariantId() + "|" + getModelVerId();
+ }
+
+ public void setModelModelVerCombinedKey(String modelModelVerCombinedKey) {
+ this.modelModelVerCombinedKey = getModelInvariantId() + "|" + getModelVerId();
+ }
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java
index fb269b1..ce6d986 100644
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java
+++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactHandler.java
@@ -1,133 +1,228 @@
-/*-
- * ============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");
- }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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 org.w3c.dom.Node;
+
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.ws.rs.core.Response;
+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 ModelArtifactHandler extends ArtifactHandler {
+
+ private static final String AAI_MODEL_VER = "/model-vers/model-ver";
+ 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;
+
+ boolean version = model.isV9Artifact();
+ //Non - V9 version for models
+ if(version == false){
+ ClientResponse getResponse = aaiClient.getResource(getModelVerURL(model), distributionID, AaiRestClient.MimeType.XML);
+ if ( (getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode()) ) {
+ logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, " Artifact format not valid for " +
+ model.getType().toString() + "- model-invariant-id[model-id]: " +
+ model.getModelInvariantId() + " and model-version-id[model-name-version-id]: "+
+ model.getModelVerId()+ " . Rolling back distribution.");
+ return false;
+ }
+ else{
+ completedModels.add(model);
+ logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() +
+ " " + model.getModelInvariantId() + " successfully ingested.");
+ }
+ }
+ else
+ {
+ 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.getModelInvariantId() + " successfully ingested.");
+ }
+ else {
+ logger.error(ModelLoaderMsgs.DISTRIBUTION_EVENT_ERROR, "Ingestion failed for " +
+ model.getType().toString() + " " + model.getModelInvariantId() + ". 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.getModelInvariantId() +
+ " already exists. Skipping ingestion.");
+ getResponse = aaiClient.getResource(getModelVerURL(model), distributionID, AaiRestClient.MimeType.XML);
+ if ( (getResponse == null) || (getResponse.getStatus() != Response.Status.OK.getStatusCode()) ) {
+ // Only attempt the PUT if the model-ver doesn't already exist
+ ClientResponse putResponse = null;
+
+ try {
+ putResponse = aaiClient.putResource(getModelVerURL(model), nodeToString(model.getModelVer()), distributionID, AaiRestClient.MimeType.XML);
+ } catch (TransformerException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ 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(getModelVerURL(modelToDelete), distributionID);
+ }
+
+ return false;
+ }
+ }
+ else {
+ logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, model.getType().toString() + " " +
+ model.getModelInvariantId() + " already exists. Skipping ingestion.");
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+
+ private String nodeToString(Node node) throws TransformerException {
+ StringWriter sw = new StringWriter();
+ Transformer t = TransformerFactory.newInstance().newTransformer();
+ t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+ t.transform(new DOMSource(node), new StreamResult(sw));
+ System.out.println(sw.toString());
+ return sw.toString();
+ }
+
+ 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.getModelInvariantId();
+ return url;
+ }
+
+ private String getModelVerURL(ModelArtifact model) {
+ String baseURL = config.getAaiBaseUrl().trim();
+ String subURL = null;
+ if (model.getType().equals(ArtifactType.MODEL)) {
+ subURL = config.getAaiModelUrl().trim() + model.getModelInvariantId() + AAI_MODEL_VER;
+ }
+ 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.getModelVerId();
+ System.out.println(url);
+ return url;
+ }
+
+ // This method is used for the test REST interface to load models without an ASDC
+ 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");
+ }
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java
index 625145f..de27924 100644
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java
+++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelArtifactParser.java
@@ -1,197 +1,265 @@
-/*-
- * ============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();
- }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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.Element;
+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.XMLConstants;
+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 MODEL_VER = "model-ver";
+ private static String MODEL_VERSION_ID = "model-version-id";
+ private static String MODEL_INVARIANT_ID = "model-invariant-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-invariant-id";
+ private static String MODEL_VER_ELEMENT_RELATIONSHIP_KEY = "model-ver.model-version-id";
+
+ private static Logger logger = LoggerFactory.getInstance().getLogger(ModelArtifactParser.class.getName());
+
+ 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) {
+ if ( ArtifactType.MODEL.equals(model.getType())) {
+ logger.info( ModelLoaderMsgs.DISTRIBUTION_EVENT, "Model parsed =====>>>> "
+ + "Model-invariant-Id: "+ model.getModelInvariantId()
+ + " Model-Version-Id: "+ model.getModelVerId());
+ }
+ modelList.add(model);
+ }
+ else {
+ logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName);
+ return null;
+ }
+ }
+ 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 {
+ logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName);
+ modelList.clear();
+ break;
+ }
+ }
+ }
+ }
+ }
+ catch (Exception ex) {
+ logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName + ": " + ex.getLocalizedMessage());
+ }
+
+ return modelList;
+ }
+
+ private void printDetails(Node modelVer) throws TransformerException {
+ logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, nodeToString(modelVer));
+ }
+
+ private ModelArtifact parseModel(Node modelNode, String payload) {
+ ModelArtifact model = new ModelArtifact();
+ model.setPayload(payload);
+
+ if (modelNode.getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) {
+ //compare with Model-ver
+ model.setType(ArtifactType.MODEL);
+ }
+ else {
+ model.setType(ArtifactType.NAMED_QUERY);
+ }
+
+ Element e = (Element)modelNode;
+ model.setModelNamespace(e.getAttribute("xmlns"));
+
+ parseNode(modelNode, model);
+
+ if (model.getModelInvariantId() == null && model.getNameVersionId() == null) {
+ return null;
+ }
+
+ return model;
+ }
+
+ private void parseNode(Node node, ModelArtifact model) {
+
+ if(node.getNodeName().equalsIgnoreCase(MODEL_NAME_VERSION_ID)){
+ model.setModelVerId(node.getTextContent().trim());
+ model.setV9Artifact(false);
+ }
+ else if(node.getNodeName().equalsIgnoreCase("model-id")){
+ model.setModelInvariantId(node.getTextContent().trim());
+ model.setV9Artifact(false);
+ }
+
+ else if (node.getNodeName().equalsIgnoreCase(MODEL_INVARIANT_ID)) {
+ model.setModelInvariantId(node.getTextContent().trim());
+ }
+ else if (node.getNodeName().equalsIgnoreCase(MODEL_VERSION_ID)) {
+ model.setModelVerId(node.getTextContent().trim());
+ //Change to Model Invariant Id
+ }
+ else if (node.getNodeName().equalsIgnoreCase(NAMED_QUERY_VERSION_ID)) {
+ model.setNameVersionId(node.getTextContent().trim());
+ }
+ else if (node.getNodeName().equalsIgnoreCase(RELATIONSHIP_DATA)) {
+ parseRelationshipNode(node, model);
+ if(model.getModelModelInvariantId()!=null && model.getModelVerModelVersionId()!=null && !model.getModelModelInvariantId().isEmpty() && !model.getModelVerModelVersionId().isEmpty()){
+ model.addDependentModelId(model.getModelModelInvariantId() + "|" + model.getModelVerModelVersionId());
+ model.setModelModelInvariantId("");
+ model.setModelVerModelVersionId("");
+ }
+ }
+ else {
+
+ if (node.getNodeName().equalsIgnoreCase(MODEL_VER)) {
+ model.setModelVer(node);
+ if ( (model.getModelNamespace() != null) && (!model.getModelNamespace().isEmpty()) ) {
+ Element e = (Element) node;
+ e.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "xmlns", model.getModelNamespace());
+ System.out.println("Setting NS: " + e.getAttribute("xmlns"));
+ }
+ }
+
+ 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) {
+
+ //invariant-id comes before model-version-id .. create a list of values
+ String key = null;
+ String value = null;
+ String modelVersionIdKey=null;
+ String modelInvariantIdIdKey=null;
+ String modelVersionIdValue=null;
+ String modelInvariantIdIdValue=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();
+ if(key.equalsIgnoreCase(MODEL_VER_ELEMENT_RELATIONSHIP_KEY)){
+ modelVersionIdKey = key;
+ }
+ else if(key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY)){
+ modelInvariantIdIdKey = key;
+ }
+ }
+ else if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_VALUE)) {
+ value = childNode.getTextContent().trim();
+ if(modelVersionIdKey!=null){
+ modelVersionIdValue = value;
+ model.setModelVerModelVersionId(modelVersionIdValue);
+ }
+ else if(modelInvariantIdIdKey!=null){
+ modelInvariantIdIdValue = value;
+ model.setModelModelInvariantId(modelInvariantIdIdValue);
+ }
+
+ }
+ }
+
+ if ( (key != null) && (key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY )) &&
+ (model.isV9Artifact == false ||ArtifactType.NAMED_QUERY.equals(model.getType())) ) {
+ if (value != null) {
+ model.addDependentModelId(value);
+ }
+ }
+ }
+
+ private String nodeToString(Node node) throws TransformerException {
+ StringWriter sw = new StringWriter();
+ Transformer t = TransformerFactory.newInstance().newTransformer();
+ t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+ t.transform(new DOMSource(node), new StreamResult(sw));
+ return sw.toString();
+ }
+}
diff --git a/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java b/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java
index 4dcda71..79f1c29 100644
--- a/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java
+++ b/src/main/java/org/openecomp/modelloader/entity/model/ModelSorter.java
@@ -1,233 +1,235 @@
-/*-
- * ============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;
- }
-
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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.getModelInvariantId();
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ ModelArtifact otherModel = ((Node) other).model;
+ return this.model.getModelInvariantId().equals(otherModel.getModelInvariantId());
+ }
+
+ @Override
+ public int hashCode() {
+ return this.model.getModelInvariantId().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.getModelModelVerCombinedKey(), 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.getModelModelVerCombinedKey());
+
+ if (null == node) {
+ node = new Node(model);
+ nodes.put(model.getModelModelVerCombinedKey(), 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;
+ }
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/notification/DistributionStatusMsg.java b/src/main/java/org/openecomp/modelloader/notification/DistributionStatusMsg.java
index 6079d5d..0ef2a42 100644
--- a/src/main/java/org/openecomp/modelloader/notification/DistributionStatusMsg.java
+++ b/src/main/java/org/openecomp/modelloader/notification/DistributionStatusMsg.java
@@ -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;
- }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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;
+ }
+}
diff --git a/src/main/java/org/openecomp/modelloader/notification/EventCallback.java b/src/main/java/org/openecomp/modelloader/notification/EventCallback.java
index 3b32315..8634741 100644
--- a/src/main/java/org/openecomp/modelloader/notification/EventCallback.java
+++ b/src/main/java/org/openecomp/modelloader/notification/EventCallback.java
@@ -1,286 +1,294 @@
-/*-
- * ============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;
- }
-
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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.info(ModelLoaderMsgs.DISTRIBUTION_EVENT,
+ "Downloaded 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)) {
+ List<Artifact> parsedArtifacts = modelArtParser.parse(downloadResult.getArtifactPayload(), downloadResult.getArtifactName());
+ if (parsedArtifacts != null && !parsedArtifacts.isEmpty()) {
+ modelArtifacts.addAll(parsedArtifacts);
+ } else {
+ success = false;
+ publishDeployFailure(data, artifact);
+ break;
+ }
+ } 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";
+ }
+ }
+ }
+ } else {
+ 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());
+
+ 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;
+ }
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/restclient/AaiRestClient.java b/src/main/java/org/openecomp/modelloader/restclient/AaiRestClient.java
index e13bdbd..d4ee738 100644
--- a/src/main/java/org/openecomp/modelloader/restclient/AaiRestClient.java
+++ b/src/main/java/org/openecomp/modelloader/restclient/AaiRestClient.java
@@ -1,400 +1,402 @@
-/*-
- * ============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);
- }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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);
+ }
+}
diff --git a/src/main/java/org/openecomp/modelloader/service/ModelLoaderInterface.java b/src/main/java/org/openecomp/modelloader/service/ModelLoaderInterface.java
index 689115e..99c5735 100644
--- a/src/main/java/org/openecomp/modelloader/service/ModelLoaderInterface.java
+++ b/src/main/java/org/openecomp/modelloader/service/ModelLoaderInterface.java
@@ -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;
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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;
+}
diff --git a/src/main/java/org/openecomp/modelloader/service/ModelLoaderMsgs.java b/src/main/java/org/openecomp/modelloader/service/ModelLoaderMsgs.java
index b81c541..2d3137b 100644
--- a/src/main/java/org/openecomp/modelloader/service/ModelLoaderMsgs.java
+++ b/src/main/java/org/openecomp/modelloader/service/ModelLoaderMsgs.java
@@ -1,102 +1,110 @@
-/*-
- * ============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");
- }
-
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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
+ */
+ ARTIFACT_PARSE_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");
+ }
+
+}
diff --git a/src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java b/src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java
index 16aba7e..118cd18 100644
--- a/src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java
+++ b/src/main/java/org/openecomp/modelloader/service/ModelLoaderService.java
@@ -1,174 +1,188 @@
-/*-
- * ============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;
- }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+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 final String FILESEP = (System.getProperty("file.separator") == null) ? "/"
+ : System.getProperty("file.separator");
+
+ protected static final String CONFIG_DIR = System.getProperty("CONFIG_HOME") + FILESEP;
+ protected static final String CONFIG_AUTH_LOCATION = CONFIG_DIR + "auth" + FILESEP;
+ protected static final String CONFIG_FILE = CONFIG_DIR + "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.
+ */
+ public ModelLoaderService() {
+ start();
+ }
+
+ protected void start() {
+ // Load model loader system configuration
+ logger.info(ModelLoaderMsgs.LOADING_CONFIGURATION);
+ Properties configProperties = new Properties();
+ try {
+ configProperties.load(new FileInputStream(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, CONFIG_AUTH_LOCATION);
+ init();
+ }
+
+ @Override
+ public void finalize() {
+ preShutdownOperations();
+ }
+
+ /**
+ * Responsible for stopping the connection to the distribution client before
+ * the resource is destroyed.
+ */
+ 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;
+ }
+}
diff --git a/src/main/java/org/openecomp/modelloader/util/JsonXmlConverter.java b/src/main/java/org/openecomp/modelloader/util/JsonXmlConverter.java
index ca63b23..621f704 100644
--- a/src/main/java/org/openecomp/modelloader/util/JsonXmlConverter.java
+++ b/src/main/java/org/openecomp/modelloader/util/JsonXmlConverter.java
@@ -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();
- }
-}
+/**
+ * ============LICENSE_START=======================================================
+ * Model Loader
+ * ================================================================================
+ * Copyright © 2017 AT&T Intellectual Property.
+ * Copyright © 2017 Amdocs
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ *
+ * ECOMP and OpenECOMP are trademarks
+ * and service marks of AT&T Intellectual Property.
+ */
+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();
+ }
+}
diff --git a/src/main/resources/aai-os-cert.p12 b/src/main/resources/aai-os-cert.p12
deleted file mode 100644
index ee57120..0000000
--- a/src/main/resources/aai-os-cert.p12
+++ /dev/null
Binary files differ
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
deleted file mode 100644
index 48233fe..0000000
--- a/src/main/resources/logback.xml
+++ /dev/null
@@ -1,195 +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=========================================================
- -->
-
-<configuration scan="true" scanPeriod="3 seconds" debug="false">
- <!--<jmxConfigurator /> -->
- <!-- directory path for all other type logs -->
-
- <property name="logDir" value="logs" />
-
-
- <!-- specify the component name <ECOMP-component-name>::= "MSO" | "DCAE"
- | "ASDC " | "AAI" |"Policy" | "SDNC" | "AC" -->
- <property name="componentName" value="AAI-ML"></property>
-
- <!-- default eelf log file names -->
- <property name="generalLogName" value="error" />
- <property name="metricsLogName" value="metrics" />
- <property name="auditLogName" value="audit" />
- <property name="debugLogName" value="debug" />
-
- <property name="errorLogPattern"
- value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%mdc{RequestId}|%thread|ModelLoader|%mdc{PartnerName}|%logger||%.-5level|%msg%n" />
- <property name="auditMetricPattern" value="%m%n" />
-
- <property name="logDirectory" value="${logDir}/${componentName}" />
-
- <!-- Example evaluator filter applied against console appender -->
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <encoder>
- <pattern>${defaultPattern}</pattern>
- </encoder>
- </appender>
-
- <!-- ============================================================================ -->
- <!-- EELF Appenders -->
- <!-- ============================================================================ -->
-
- <!-- The EELFAppender is used to record events to the general application
- log -->
-
- <appender name="EELF"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>${logDirectory}/${generalLogName}.log</file>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${logDirectory}/${generalLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
- <maxHistory>60</maxHistory>
- </rollingPolicy>
- <encoder>
- <pattern>${errorLogPattern}</pattern>
- </encoder>
- </appender>
- <appender name="asyncEELF" class="ch.qos.logback.classic.AsyncAppender">
- <!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>INFO</level>
- </filter>
- <queueSize>256</queueSize>
- <appender-ref ref="EELF" />
- </appender>
-
-
- <appender name="EELFAudit"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>${logDirectory}/${auditLogName}.log</file>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${logDirectory}/${auditLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
- <maxHistory>60</maxHistory>
- </rollingPolicy>
- <encoder>
- <pattern>${auditMetricPattern}</pattern>
- </encoder>
- </appender>
- <appender name="asyncEELFAudit" class="ch.qos.logback.classic.AsyncAppender">
- <queueSize>256</queueSize>
- <appender-ref ref="EELFAudit" />
- </appender>
-
-
- <appender name="EELFMetrics"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>${logDirectory}/${metricsLogName}.log</file>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${logDirectory}/${metricsLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
- <maxHistory>60</maxHistory>
- </rollingPolicy>
- <encoder>
- <pattern>${auditMetricPattern}</pattern>
- </encoder>
- </appender>
- <appender name="asyncEELFMetrics" class="ch.qos.logback.classic.AsyncAppender">
- <queueSize>256</queueSize>
- <appender-ref ref="EELFMetrics" />
- </appender>
-
-
- <appender name="EELFDebug"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <file>${logDirectory}/${debugLogName}.log</file>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${logDirectory}/${debugLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern>
- <maxHistory>60</maxHistory>
- </rollingPolicy>
- <encoder>
- <pattern>${errorLogPattern}</pattern>
- </encoder>
- </appender>
- <appender name="asyncEELFDebug" class="ch.qos.logback.classic.AsyncAppender">
- <queueSize>256</queueSize>
- <appender-ref ref="EELFDebug" />
- <includeCallerData>true</includeCallerData>
- </appender>
-
-
- <!-- ============================================================================ -->
- <!-- EELF loggers -->
- <!-- ============================================================================ -->
- <logger name="com.att.eelf" level="info" additivity="false">
- <appender-ref ref="asyncEELF" />
- <appender-ref ref="asyncEELFDebug" />
- </logger>
-
- <logger name="com.att.eelf.security" level="info" additivity="false">
- <appender-ref ref="asyncEELFSecurity" />
- </logger>
- <logger name="com.att.eelf.perf" level="info" additivity="false">
- <appender-ref ref="asyncEELFPerformance" />
- </logger>
- <logger name="com.att.eelf.server" level="info" additivity="false">
- <appender-ref ref="asyncEELFServer" />
- </logger>
- <logger name="com.att.eelf.policy" level="info" additivity="false">
- <appender-ref ref="asyncEELFPolicy" />
- </logger>
- <logger name="com.att.eelf.audit" level="info" additivity="false">
- <appender-ref ref="asyncEELFAudit" />
- </logger>
- <logger name="com.att.eelf.metrics" level="info" additivity="false">
- <appender-ref ref="asyncEELFMetrics" />
- </logger>
-
- <!-- Spring related loggers -->
- <logger name="org.springframework" level="WARN" />
- <logger name="org.springframework.beans" level="WARN" />
- <logger name="org.springframework.web" level="WARN" />
- <logger name="com.blog.spring.jms" level="WARN" />
-
- <logger name="com.att" level="INFO" />
-
- <!-- Model Loader loggers -->
- <logger name="org.openecomp.modelloader" level="INFO" />
-
- <!-- Other Loggers that may help troubleshoot -->
- <logger name="net.sf" level="WARN" />
- <logger name="org.apache.commons.httpclient" level="WARN" />
- <logger name="org.apache.commons" level="WARN" />
- <logger name="org.apache.coyote" level="WARN" />
- <logger name="org.apache.jasper" level="WARN" />
-
- <!-- Camel Related Loggers (including restlet/servlet/jaxrs/cxf logging.
- May aid in troubleshooting) -->
- <logger name="org.apache.camel" level="WARN" />
- <logger name="org.apache.cxf" level="WARN" />
- <logger name="org.apache.camel.processor.interceptor" level="WARN" />
- <logger name="org.apache.cxf.jaxrs.interceptor" level="WARN" />
- <logger name="org.apache.cxf.service" level="WARN" />
- <logger name="org.restlet" level="WARN" />
- <logger name="org.apache.camel.component.restlet" level="WARN" />
-
- <!-- logback internals logging -->
- <logger name="ch.qos.logback.classic" level="WARN" />
- <logger name="ch.qos.logback.core" level="WARN" />
-
- <root>
- <appender-ref ref="asyncEELF" />
- <!-- <appender-ref ref="asyncEELFDebug" /> -->
- </root>
-
-</configuration>
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
index 9abd55c..0000000
--- a/src/main/resources/org/openecomp/modelloader/filemonitor/FileMonitorMsgs.properties
+++ /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
diff --git a/src/main/resources/org/openecomp/modelloader/service/ModelLoaderMsgs.properties b/src/main/resources/org/openecomp/modelloader/service/ModelLoaderMsgs.properties
index 53c96dc..8e2d043 100644
--- a/src/main/resources/org/openecomp/modelloader/service/ModelLoaderMsgs.properties
+++ b/src/main/resources/org/openecomp/modelloader/service/ModelLoaderMsgs.properties
@@ -1,112 +1,118 @@
-###
+###
# ============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");
+# 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 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=========================================================
+###
+
+#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
+
+ARTIFACT_PARSE_ERROR=\
+ MDLSVC2004E|\
+ Failed to parse artifact: {0}|\
+ Check artifact. |\
+ A failure occurred attempting to parse artifact from SDC
+
+# DEBUG Level Logs
+INITIALIZING=\
+ MDLSVC0001D|\
+ init(): {0}|\
+ None. Initializing service|\
+ Debug information during model loader initialization
+
+
diff --git a/src/main/resources/schema/aai_schema_v8.xsd b/src/main/resources/schema/aai_schema_v8.xsd
index 66bc3db..14f2610 100644
--- a/src/main/resources/schema/aai_schema_v8.xsd
+++ b/src/main/resources/schema/aai_schema_v8.xsd
@@ -1,2462 +1,2462 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
============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");
+ 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=========================================================
- -->
-
-<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=========================================================
+ -->
+
+<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>
diff --git a/src/main/resources/schema/vnfcatalog.xsd b/src/main/resources/schema/vnfcatalog.xsd
index 9789124..1b18ef1 100644
--- a/src/main/resources/schema/vnfcatalog.xsd
+++ b/src/main/resources/schema/vnfcatalog.xsd
@@ -1,127 +1,127 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<?xml version="1.0" encoding="UTF-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
+ 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=========================================================
- -->
-
-<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=========================================================
+ -->
+
+<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>
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
index 0000000..8514196
--- /dev/null
+++ b/src/main/runtime/context/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.context
@@ -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
index 0000000..d1b5ab4
--- /dev/null
+++ b/src/main/runtime/context/default#0.context
@@ -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
index 0000000..d0954cf
--- /dev/null
+++ b/src/main/runtime/deploymentPackage/__module.ajsc.namespace.name__#__module.ajsc.namespace.version__.json
@@ -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
index 0000000..f5e981e
--- /dev/null
+++ b/src/main/runtime/shiroRole/ajscadmin.json
@@ -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
index 0000000..2dae9f5
--- /dev/null
+++ b/src/main/runtime/shiroRole/contextadmin#__module.ajsc.namespace.name__.json
@@ -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
index 0000000..5de814e
--- /dev/null
+++ b/src/main/runtime/shiroRole/contextadmin#default.json
@@ -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
index 0000000..f4c7855
--- /dev/null
+++ b/src/main/runtime/shiroUser/ajsc.json
@@ -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
index 0000000..cb8d483
--- /dev/null
+++ b/src/main/runtime/shiroUserRole/ajsc#ajscadmin.json
@@ -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
index 0000000..95d2361
--- /dev/null
+++ b/src/main/runtime/shiroUserRole/ajsc#contextadmin#__module.ajsc.namespace.name__.json
@@ -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
index 0000000..2bd5063
--- /dev/null
+++ b/src/main/runtime/shiroUserRole/ajsc#contextadmin#default.json
@@ -0,0 +1 @@
+{"shiroUserRoleClass":"ajsc.auth.ShiroUserRole","shiroUserRoleId":"ajsc:contextadmin:default","roleId":"contextadmin:default","userId":"ajsc"} \ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index c256b26..0000000
--- a/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-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=========================================================
- -->
-
-<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>