aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configbackuprestore/pom.xml102
-rw-r--r--configbackuprestore/vnfconfigbackupservice/pom.xml137
-rw-r--r--configbackuprestore/vnfconfigbackupservice/read.md13
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/config/ApplicationConfiguration.java49
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/config/ServletInitializer.java32
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/controller/VnfBackupServiceController.java74
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/dao/VnfBackupServiceRepo.java68
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigDetailsDB.java137
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigSchedulerTimeStamp.java55
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfDisplayParams.java39
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfServiceResponse.java36
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfConfigBackupScheduler.java82
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfRestClient.java58
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/service/VnfbackupService.java31
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/service/VnfbackupServiceImpl.java234
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/resource/application.properties72
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/resource/log4j2.xml38
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/WEB-INF/lib/jsp-api-2.0.jarbin0 -> 50493 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/WEB-INF/lib/jstl-1.2.jarbin0 -> 414240 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/WEB-INF/views/index.jsp73
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/app.js68
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-applyConfig-controller.js93
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-backupConfig-controller.js314
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-compareConfig-controller.js690
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-validationTest-controller.js222
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-viewreport-controller.js519
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-services/sdnc-compareConfig-service.js166
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-services/sdnc-validationTest-service.js66
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-services/sdnc-viewReport-service.js101
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.css88
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.js419
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.min.css7
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.min.js6
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl.min.css7
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl.min.js6
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.editorconfig18
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.gitattributes17
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.jscsrc52
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.jshintignore6
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.jshintrc19
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.npmignore4
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/LICENSE22
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/README.md121
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/angular-object-diff.js344
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/angular-object-diff.less42
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/bower.json50
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/demo.js68
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/gulpfile.js169
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/index.html95
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/package.json84
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/screenshot.pngbin0 -> 19779 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-route.min.js15
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-sanitize.min.js16
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-utils-pagination/dirPagination.js639
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular.min.js250
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angularjs-datetime-picker/angularjs-datetime-picker.css74
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angularjs-datetime-picker/angularjs-datetime-picker.js332
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angularjs-datetime-picker/angularjs-datetime-picker.min.js1
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/bootstrap-3.3.7/package.json89
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/jquery.min.js2
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-csv/build/ng-csv.js319
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-csv/build/ng-csv.min.js2
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-ip-address/ngIpAddress.min.js1
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-ip-address/ngIpAddress.vanilla.min.js1
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-ip-address/package.json67
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/tether.min.js1
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/package.json32
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/Apply.jpgbin0 -> 30161 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/FailImage.pngbin0 -> 2950 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/backup.jpgbin0 -> 4509 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/backupConfig.pngbin0 -> 4889 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/compare.jpgbin0 -> 7732 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/compare.pngbin0 -> 1648 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/download.pngbin0 -> 1066 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/downloadImage.pngbin0 -> 3524 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/error.pngbin0 -> 5610 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/fail.pngbin0 -> 1850 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/images.pngbin0 -> 3716 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/networklayer.pngbin0 -> 4580 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/protocaol.pngbin0 -> 2625 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/protocol.pngbin0 -> 10646 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/reachable.pngbin0 -> 1219 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/router.jpgbin0 -> 3142 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/router.pngbin0 -> 5693 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/search.pngbin0 -> 3284 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/success.pngbin0 -> 4416 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/validation.pngbin0 -> 5110 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/waning.pngbin0 -> 6481 bytes
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllConfigForVNF.json199
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllDevices.json17
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllReports.json75
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllTest.json17
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllVNF.json33
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllVersion.json133
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getTestResult.json42
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/style/sdnc-style.css543
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/style/w3.css231
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/footer.html3
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-applyConfig.jsp48
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-backupConfig.html39
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-compareConfig.html85
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-deviceConfig.html332
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-deviceConfigView.html154
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-validationTest.html135
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-versionCompare.html59
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-viewReport.html90
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-viewReportById.html122
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/header.html3
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/tabs.html25
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigDetailsDBTest.java62
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigSchedulerTimeStampTest.java39
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfConfigBackupSchedulerTest.java85
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfRestClientTest.java62
-rw-r--r--configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/service/VnfbackupServiceImplTest.java150
-rw-r--r--installation/ansible-server/pom.xml68
-rw-r--r--installation/ansible-server/src/main/docker/Dockerfile2
-rwxr-xr-xinstallation/ansible-server/src/main/scripts/AnsibleModule.py170
-rwxr-xr-xinstallation/ansible-server/src/main/scripts/AnsibleSql.py322
-rwxr-xr-xinstallation/ansible-server/src/main/scripts/LoadAnsibleMySql.py207
-rw-r--r--installation/ansible-server/src/main/scripts/README103
-rwxr-xr-xinstallation/ansible-server/src/main/scripts/RestServer.py948
-rw-r--r--installation/ansible-server/src/main/scripts/RestServer_config55
-rw-r--r--installation/ansible-server/src/main/scripts/startAnsibleServer.sh20
-rw-r--r--installation/sdnc/src/main/resources/vf_model.data.dump3
-rw-r--r--installation/sdnc/src/main/resources/vf_module_model.data.dump2
-rw-r--r--installation/src/main/properties/generic-resource-api-dg.properties5
-rw-r--r--installation/src/main/properties/lcm-dg.properties3
-rw-r--r--platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_network-topology-operation.json1155
-rw-r--r--platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sdwan-get-site-param.json591
-rw-r--r--platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_self-serve-generate-name.json2062
-rw-r--r--platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-activate.json2006
-rw-r--r--platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-create.json922
-rw-r--r--platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sotn-network-topology-operation-reoptimize.json377
-rw-r--r--platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_network-topology-operation.xml833
-rw-r--r--platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sdwan-get-site-param.xml255
-rw-r--r--platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_self-serve-generate-name.xml78
-rw-r--r--platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-activate.xml17
-rw-r--r--platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-create.xml5
-rw-r--r--platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sotn-network-topology-operation-reoptimize.xml89
-rwxr-xr-xplatform-logic/lcm/src/main/json/LCM_distribute-traffic.json656
-rw-r--r--platform-logic/lcm/src/main/json/LCM_lock.json358
-rw-r--r--platform-logic/lcm/src/main/json/LCM_quiesce-traffic.json656
-rw-r--r--platform-logic/lcm/src/main/json/LCM_resume-traffic.json656
-rw-r--r--platform-logic/lcm/src/main/json/LCM_snapshot.json358
-rw-r--r--platform-logic/lcm/src/main/json/LCM_unlock.json358
-rw-r--r--platform-logic/lcm/src/main/json/LCM_upgrade-backup.json358
-rw-r--r--platform-logic/lcm/src/main/json/LCM_upgrade-post-check.json656
-rw-r--r--platform-logic/lcm/src/main/json/LCM_upgrade-pre-check.json656
-rw-r--r--platform-logic/lcm/src/main/json/LCM_upgrade-software.json656
-rwxr-xr-xplatform-logic/lcm/src/main/xml/LCM_distribute-traffic.xml75
-rw-r--r--platform-logic/lcm/src/main/xml/LCM_quiesce-traffic.xml75
-rw-r--r--platform-logic/lcm/src/main/xml/LCM_resume-traffic.xml75
-rw-r--r--platform-logic/lcm/src/main/xml/LCM_snapshot.xml2
-rw-r--r--platform-logic/lcm/src/main/xml/LCM_unlock.xml6
-rw-r--r--platform-logic/lcm/src/main/xml/LCM_upgrade-backup.xml6
-rw-r--r--platform-logic/lcm/src/main/xml/LCM_upgrade-post-check.xml75
-rw-r--r--platform-logic/lcm/src/main/xml/LCM_upgrade-pre-check.xml75
-rw-r--r--platform-logic/lcm/src/main/xml/LCM_upgrade-software.xml75
-rw-r--r--platform-logic/restapi-templates/src/main/json/naming-ms-post-gen-name.json13
159 files changed, 18157 insertions, 7823 deletions
diff --git a/configbackuprestore/pom.xml b/configbackuprestore/pom.xml
index c925197c..8f492edc 100644
--- a/configbackuprestore/pom.xml
+++ b/configbackuprestore/pom.xml
@@ -1,6 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
<modelVersion>4.0.0</modelVersion>
+
<groupId>org.onap.ccsdk.parent</groupId>
<artifactId>configbackuprestore</artifactId>
<version>1.0-SNAPSHOT</version>
@@ -8,10 +11,10 @@
<packaging>pom</packaging>
<parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>1.5.4.RELEASE</version>
- </parent>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-parent</artifactId>
+ <version>1.5.4.RELEASE</version>
+ </parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -26,58 +29,45 @@
</dependency>
</dependencies>
+ <modules>
+ <module>getBackupVnfDetailService</module>
+ <module>vnfconfigreportsservice</module>
+ <module>vnfconfigbackupservice</module>
+ </modules>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.jacoco</groupId>
+ <artifactId>jacoco-maven-plugin</artifactId>
+ <version>0.7.5.201505241946</version>
+ <executions>
- <modules>
- <module>getBackupVnfDetailService</module>
- <module>vnfconfigreportsservice</module>
- </modules>
+ <execution>
+ <id>pre-unit-test</id>
+ <goals>
+ <goal>prepare-agent</goal>
+ </goals>
+ <configuration>
+ <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
+ <propertyName>surefireArgLine</propertyName>
+ </configuration>
+ </execution>
+
+ <execution>
+ <id>post-unit-test</id>
+ <phase>test</phase>
+ <goals>
+ <goal>report</goal>
+ </goals>
+ <configuration>
+ <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
+ <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
- <build>
-<plugins>
- <plugin>
- <groupId>org.jacoco</groupId>
- <artifactId>jacoco-maven-plugin</artifactId>
- <version>0.7.5.201505241946</version>
- <executions>
- <!--
- Prepares the property pointing to the JaCoCo runtime agent which
- is passed as VM argument when Maven the Surefire plugin is executed.
- -->
- <execution>
- <id>pre-unit-test</id>
- <goals>
- <goal>prepare-agent</goal>
- </goals>
- <configuration>
- <!-- Sets the path to the file which contains the execution data. -->
- <destFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</destFile>
- <!--
- Sets the name of the property containing the settings
- for JaCoCo runtime agent.
- -->
- <propertyName>surefireArgLine</propertyName>
- </configuration>
- </execution>
- <!--
- Ensures that the code coverage report for unit tests is created after
- unit tests have been run.
- -->
- <execution>
- <id>post-unit-test</id>
- <phase>test</phase>
- <goals>
- <goal>report</goal>
- </goals>
- <configuration>
- <!-- Sets the path to the file which contains the execution data. -->
- <dataFile>${project.build.directory}/coverage-reports/jacoco-ut.exec</dataFile>
- <!-- Sets the output directory for the code coverage report. -->
- <outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
- </configuration>
- </execution>
- </executions>
- </plugin>
-</plugins>
-</build>
</project>
diff --git a/configbackuprestore/vnfconfigbackupservice/pom.xml b/configbackuprestore/vnfconfigbackupservice/pom.xml
new file mode 100644
index 00000000..bf6fdf0e
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/pom.xml
@@ -0,0 +1,137 @@
+<?xml version="1.0"?>
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onap.ccsdk.parent</groupId>
+ <artifactId>configbackuprestore</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>com.onap.sdnc.vnfbackupservice</groupId>
+ <artifactId>vnfconfigbackupservice</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <name>vnfconfigbackupservice</name>
+ <url>http://maven.apache.org</url>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.jmockit</groupId>
+ <artifactId>jmockit</artifactId>
+ <version>1.19</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jmockit</groupId>
+ <artifactId>jmockit-coverage</artifactId>
+ <version>1.19</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.9</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>jstl</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mariadb.jdbc</groupId>
+ <artifactId>mariadb-java-client</artifactId>
+ <version>1.1.9</version>
+ </dependency>
+
+ <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.9</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
+ <version>1.5.4.RELEASE</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ <version>4.3.9.RELEASE</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-tomcat</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tomcat.embed</groupId>
+ <artifactId>tomcat-embed-jasper</artifactId>
+ <scope>provided</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-devtools</artifactId>
+ <optional>true</optional>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <scope>test</scope>
+ <version>1.5.3.RELEASE</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-data-jpa</artifactId>
+ </dependency>
+
+ <!-- Add Log4j2 Dependency -->
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-log4j2</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.json</groupId>
+ <artifactId>json</artifactId>
+ <version>20180130</version>
+ </dependency>
+
+ <!-- https://mvnrepository.com/artifact/com.fasterxml/jackson-xml-databind -->
+ <dependency>
+ <groupId>com.fasterxml</groupId>
+ <artifactId>jackson-xml-databind</artifactId>
+ <version>0.6.2</version>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.21.0</version>
+ <configuration>
+ <argLine>-XX:+StartAttachListener</argLine>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/configbackuprestore/vnfconfigbackupservice/read.md b/configbackuprestore/vnfconfigbackupservice/read.md
new file mode 100644
index 00000000..1ac32802
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/read.md
@@ -0,0 +1,13 @@
+vnfconfigbackupservice
+
+---------------------
+
+Need to change in application.properties:
+ - Update properties file based on the Database.
+ e.g-spring.datasource.url=jdbc:mariadb://localhost:3306/DBNAME
+ - Need to change Rest-conf values:
+ eg.sdnc.rest.vnf.api.host=10.53.172.121
+ sdnc.rest.vnf.api.port=8282
+ sdnc.rest.vnf.api.basepath=/restconf
+ sdnc.rest.vnf.api.username=xxxx
+ sdnc.rest.vnf.api.password=xxxx \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/config/ApplicationConfiguration.java b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/config/ApplicationConfiguration.java
new file mode 100644
index 00000000..03d65a68
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/config/ApplicationConfiguration.java
@@ -0,0 +1,49 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.config;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.springframework.web.client.RestTemplate;
+
+@SpringBootApplication
+@EnableJpaRepositories("com.onap.sdnc.*")
+@EntityScan("com.onap.sdnc.*")
+@ComponentScan({"com.onap.sdnc.*"})
+@EnableAutoConfiguration
+public class ApplicationConfiguration {
+ private static final Logger logger = LogManager.getLogger(ApplicationConfiguration.class);
+ public static void main(String[] args) {
+
+ SpringApplication.run(ApplicationConfiguration.class, args);
+ logger.info("SDNC REPORTS API Has Started..");
+ }
+ @Bean
+ public RestTemplate template() {
+ return new RestTemplate();
+ }
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/config/ServletInitializer.java b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/config/ServletInitializer.java
new file mode 100644
index 00000000..5267262f
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/config/ServletInitializer.java
@@ -0,0 +1,32 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.config;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.support.SpringBootServletInitializer;
+
+public class ServletInitializer extends SpringBootServletInitializer {
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+ return application.sources(ApplicationConfiguration.class);
+ }
+
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/controller/VnfBackupServiceController.java b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/controller/VnfBackupServiceController.java
new file mode 100644
index 00000000..a04aac7f
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/controller/VnfBackupServiceController.java
@@ -0,0 +1,74 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.onap.sdnc.vnfbackupservice.model.VnfServiceResponse;
+import com.onap.sdnc.vnfbackupservice.scheduler.VnfConfigBackupScheduler;
+import com.onap.sdnc.vnfbackupservice.service.VnfbackupService;
+
+@RestController
+public class VnfBackupServiceController {
+
+ @Autowired
+ VnfbackupService vnfbackupService;
+
+ @Autowired
+ VnfConfigBackupScheduler vnfConfigBackupScheduler;
+
+ @RequestMapping("/")
+ ModelAndView home(ModelAndView modelAndView) {
+ modelAndView.setViewName("index");
+ return modelAndView;
+ }
+
+ @RequestMapping(value="/getAllVnfIds", method=RequestMethod.GET,produces="application/json")
+ public VnfServiceResponse getAllVnfIds() {
+ return vnfbackupService.getAllVnfDetails();
+ }
+
+ @RequestMapping(value="/backupVnfconfigById/{vnfId}", method=RequestMethod.GET)
+ public String getAllVnfIds(@PathVariable("vnfId") String vnfId) {
+ return vnfbackupService.backupVnfconfig(vnfId);
+ }
+
+ @RequestMapping(value="/vnf-list/{vnf-Id}", method=RequestMethod.PUT)
+ public String putOneVnfconfig(@RequestBody String configfile, @PathVariable("vnf-Id") String vnfId) {
+ String vnfconfigupdated = vnfbackupService.putVnfconfig(configfile,vnfId);
+ return vnfconfigupdated;
+ }
+
+ @RequestMapping(value="/backup", method=RequestMethod.GET, produces="application/text")
+ public String backupVnfConfigs() {
+ return "current time: " + vnfConfigBackupScheduler.initiateBackupService() ;
+ }
+
+ @RequestMapping(value="/backuptime", method=RequestMethod.GET, produces="application/text")
+ public String lastUpdatedBackuptime() {
+ return vnfbackupService.updatedBackuptime();
+ }
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/dao/VnfBackupServiceRepo.java b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/dao/VnfBackupServiceRepo.java
new file mode 100644
index 00000000..7a132338
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/dao/VnfBackupServiceRepo.java
@@ -0,0 +1,68 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.dao;
+
+import java.sql.Timestamp;
+import java.util.List;
+
+import javax.transaction.Transactional;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+
+import com.onap.sdnc.vnfbackupservice.model.VnfConfigDetailsDB;
+
+@Repository
+public interface VnfBackupServiceRepo extends JpaRepository<VnfConfigDetailsDB, Long> {
+
+ @Query(value = "Select * from vnfconfigdetails where vnfid = :vnfid", nativeQuery = true)
+ List<VnfConfigDetailsDB> getVnfDetails(@Param("vnfid") String vnfid);
+
+ @Query(value = "Select * from vnfconfigdetails where vnfid = :vnfid ORDER BY vnfversion DESC LIMIT 1", nativeQuery = true)
+ VnfConfigDetailsDB getVnfDetail(@Param("vnfid") String vnfid);
+
+ @Modifying
+ @Query(value = "insert into vnfconfigdetails (configinfo,creationdate,lastupdated,status,vnfid,vnfname,vnfversion) VALUES (:configinfo,:creationdate,:lastupdated,:status,:vnfid,:vnfname,:vnfversion)", nativeQuery = true)
+ @Transactional
+ void saveVnfDetails(@Param("configinfo") String configinfo, @Param("creationdate") Timestamp creationDate,
+ @Param("lastupdated") Timestamp lastupdated, @Param("status") int status, @Param("vnfid") String vnfid,
+ @Param("vnfname") String vnfname,@Param("vnfversion") String vnfversion);
+
+ @Query(value = "Select configinfo && vnfversion from vnfconfigdetails where vnfid = :vnfid", nativeQuery = true)
+ List<VnfConfigDetailsDB> getVnfDetailhavingAllVersion(@Param("vnfid") String vnfid);
+
+ @Query(value = "Select backuptime from vnfschedulertime where id=1", nativeQuery = true)
+ String getvnfschedulertime();
+
+ @Modifying
+ @Query(value = "insert into vnfschedulertime(id, backuptime) VALUES (:id, :backuptime)", nativeQuery = true)
+ @Transactional
+ void insertSchedulerTime(@Param("id") int id, @Param("backuptime") String backuptime);
+
+ @Modifying
+ @Query(value = "UPDATE vnfschedulertime SET backuptime =:formatDateTime WHERE id = 1", nativeQuery = true)
+ @Transactional
+ void updateSchedulerTime(@Param("formatDateTime") String formatDateTime);
+
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigDetailsDB.java b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigDetailsDB.java
new file mode 100644
index 00000000..5ac86b3d
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigDetailsDB.java
@@ -0,0 +1,137 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.model;
+
+import java.io.Serializable;
+import java.sql.Timestamp;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.Table;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedDate;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+
+@Entity
+@Table(name = "vnfconfigdetails", schema = "testreports")
+@JsonIgnoreProperties(value = {"createdAt", "updatedAt"},
+ allowGetters = true)
+public class VnfConfigDetailsDB implements Serializable{
+
+ private static final long serialVersionUID = 1L;
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+
+ @Column(name = "vnfid")
+ private String vnfid;
+
+ @Column(name = "vnfversion")
+ private String vnfversion;
+
+ @Column(name = "vnfname")
+ private String vnfname;
+
+ @Column(name = "configinfo")
+ @Lob
+ private String configinfo;
+
+ @Column(nullable = false, updatable = false,columnDefinition="DATETIME")
+ @CreatedDate
+ private Timestamp creationdate;
+
+ @Column(nullable = false,columnDefinition="DATETIME")
+ @LastModifiedDate
+ private Timestamp lastupdated;
+
+ @Column(name = "status")
+ private int status;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getVnfid() {
+ return vnfid;
+ }
+
+ public void setVnfid(String vnfid) {
+ this.vnfid = vnfid;
+ }
+
+ public String getVnfversion() {
+ return vnfversion;
+ }
+
+ public void setVnfversion(String vnfversion) {
+ this.vnfversion = vnfversion;
+ }
+
+ public String getVnfname() {
+ return vnfname;
+ }
+
+ public void setVnfname(String vnfname) {
+ this.vnfname = vnfname;
+ }
+
+ public String getConfiginfo() {
+ return configinfo;
+ }
+
+ public void setConfiginfo(String configinfo) {
+ this.configinfo = configinfo;
+ }
+
+ public Timestamp getCreationdate() {
+ return creationdate;
+ }
+
+ public void setCreationdate(Timestamp creationdate) {
+ this.creationdate = creationdate;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public void setStatus(int status) {
+ this.status = status;
+ }
+
+ public Timestamp getLastupdated() {
+ return lastupdated;
+ }
+
+ public void setLastupdated(Timestamp lastupdated) {
+ this.lastupdated = lastupdated;
+ }
+
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigSchedulerTimeStamp.java b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigSchedulerTimeStamp.java
new file mode 100644
index 00000000..a5293265
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigSchedulerTimeStamp.java
@@ -0,0 +1,55 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "vnfschedulertime", schema = "testreports")
+public class VnfConfigSchedulerTimeStamp {
+
+ @Id
+ @GeneratedValue
+ private int id;
+
+ @Column(name = "backuptime")
+ private String backuptime;
+
+ public String getBackuptime() {
+ return backuptime;
+ }
+
+ public void setBackuptime(String backuptime) {
+ this.backuptime = backuptime;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfDisplayParams.java b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfDisplayParams.java
new file mode 100644
index 00000000..9f0753bf
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfDisplayParams.java
@@ -0,0 +1,39 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.model;
+
+public class VnfDisplayParams {
+
+ private String vnfName;
+ private String vnfId;
+
+ public String getVnfName() {
+ return vnfName;
+ }
+ public void setVnfName(String vnfName) {
+ this.vnfName = vnfName;
+ }
+ public String getVnfId() {
+ return vnfId;
+ }
+ public void setVnfId(String vnfId) {
+ this.vnfId = vnfId;
+ }
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfServiceResponse.java b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfServiceResponse.java
new file mode 100644
index 00000000..e9c311fb
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/model/VnfServiceResponse.java
@@ -0,0 +1,36 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class VnfServiceResponse {
+
+ private List<VnfDisplayParams> vnfDisplayList = new ArrayList<VnfDisplayParams>();
+
+ public List<VnfDisplayParams> getVnfDisplayList() {
+ return vnfDisplayList;
+ }
+
+ public void setVnfDisplayList(List<VnfDisplayParams> vnfDisplayList) {
+ this.vnfDisplayList = vnfDisplayList;
+ }
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfConfigBackupScheduler.java b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfConfigBackupScheduler.java
new file mode 100644
index 00000000..13363300
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfConfigBackupScheduler.java
@@ -0,0 +1,82 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.scheduler;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import com.onap.sdnc.vnfbackupservice.dao.VnfBackupServiceRepo;
+import com.onap.sdnc.vnfbackupservice.model.VnfDisplayParams;
+import com.onap.sdnc.vnfbackupservice.model.VnfServiceResponse;
+import com.onap.sdnc.vnfbackupservice.service.VnfbackupService;
+import com.onap.sdnc.vnfbackupservice.service.VnfbackupServiceImpl;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+@Component
+@EnableScheduling
+public class VnfConfigBackupScheduler {
+
+ @Autowired
+ VnfbackupService vnfConfigBackService;
+
+ @Autowired
+ VnfBackupServiceRepo vnfBackupServiceDao;
+
+ private static final Logger logger = Logger.getLogger(VnfbackupServiceImpl.class);
+
+ @Scheduled(cron = "0 0 * * * *")
+ public String initiateBackupService() {
+
+ String lastupdatedtime = null;
+ VnfServiceResponse s = vnfConfigBackService.getAllVnfDetails();
+ List<VnfDisplayParams> displayParams = s.getVnfDisplayList();
+ for (VnfDisplayParams params : displayParams) {
+ lastupdatedtime = invokeDetails(params.getVnfId());
+ }
+ return lastupdatedtime;
+ }
+
+ public String invokeDetails(String vnfId) {
+ String formatDateTime = null;
+ try {
+ LocalDateTime now = LocalDateTime.now();
+ DateTimeFormatter format = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
+ formatDateTime = now.format(format);
+ String dbschedulertime = vnfBackupServiceDao.getvnfschedulertime();
+ if (dbschedulertime == null) {
+ int id = 1;
+ vnfBackupServiceDao.insertSchedulerTime(id, formatDateTime);
+ }
+ vnfBackupServiceDao.updateSchedulerTime(formatDateTime);
+ } catch (Exception e) {
+ logger.error(":::::::::exception is at vackupVnfconfig():::: " + e);
+ }
+ vnfConfigBackService.backupVnfconfig(vnfId);
+ return formatDateTime;
+ }
+
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfRestClient.java b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfRestClient.java
new file mode 100644
index 00000000..2af4e084
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfRestClient.java
@@ -0,0 +1,58 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.scheduler;
+
+
+import java.util.Arrays;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+
+@Service
+public class VnfRestClient {
+
+ @Autowired
+ private RestTemplate restTemplate;
+
+ public String vnfRestClient(String url, String userName, String password) {
+ restTemplate = new RestTemplate();
+ HttpHeaders headers = new HttpHeaders();
+ HttpEntity<String> entity = new HttpEntity<String>(generateHeaders(headers, userName, password));
+ ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
+ String result = response.getBody();
+ return result;
+ }
+
+ public HttpHeaders generateHeaders(HttpHeaders headers, String userName, String password) {
+ headers.setAccept(Arrays.asList(new MediaType[] { MediaType.APPLICATION_JSON }));
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ String base64Username = userName + ":" + password;
+ byte[] message = base64Username.getBytes();
+ headers.set("Authorization", "Basic " + java.util.Base64.getEncoder().encodeToString(message));
+ return headers;
+ }
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/service/VnfbackupService.java b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/service/VnfbackupService.java
new file mode 100644
index 00000000..d7cb1f51
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/service/VnfbackupService.java
@@ -0,0 +1,31 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.service;
+
+import com.onap.sdnc.vnfbackupservice.model.VnfServiceResponse;
+
+public interface VnfbackupService {
+
+ public VnfServiceResponse getAllVnfDetails();
+ public String backupVnfconfig(String vnfId);
+ public String putVnfconfig(String configfile, String vnfId);
+ public String updatedBackuptime();
+
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/service/VnfbackupServiceImpl.java b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/service/VnfbackupServiceImpl.java
new file mode 100644
index 00000000..c3c86df7
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/java/com/onap/sdnc/vnfbackupservice/service/VnfbackupServiceImpl.java
@@ -0,0 +1,234 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.service;
+
+import java.io.IOException;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.onap.sdnc.vnfbackupservice.dao.VnfBackupServiceRepo;
+import com.onap.sdnc.vnfbackupservice.model.VnfConfigDetailsDB;
+import com.onap.sdnc.vnfbackupservice.model.VnfDisplayParams;
+import com.onap.sdnc.vnfbackupservice.model.VnfServiceResponse;
+
+import com.onap.sdnc.vnfbackupservice.scheduler.VnfConfigBackupScheduler;
+import com.onap.sdnc.vnfbackupservice.scheduler.VnfRestClient;
+
+@Service
+public class VnfbackupServiceImpl implements VnfbackupService {
+
+ @Autowired
+ private RestTemplate restTemplate;
+
+ @Autowired
+ VnfBackupServiceRepo vnfBackupServiceDao;
+
+ @Autowired
+ VnfConfigBackupScheduler vnfConfigBackupScheduler;
+
+ @Value("${sdnc.rest.vnf.api.host}")
+ private String host;
+
+ @Value("${sdnc.rest.vnf.api.port}")
+ private String port;
+
+ @Value("${sdnc.rest.vnf.api.basepath}")
+ private String basePath;
+
+ @Value("${sdnc.rest.vnf.api.username}")
+ private String username;
+
+ @Value("${sdnc.rest.vnf.api.password}")
+ private String password;
+
+ @Autowired
+ VnfRestClient vnfRestClientlocal;
+
+ private static final Logger logger = Logger.getLogger(VnfbackupServiceImpl.class);
+
+ @Override
+ public VnfServiceResponse getAllVnfDetails() {
+ VnfServiceResponse vnfServiceResponse = new VnfServiceResponse();
+ String finalURL = "http://" + host + ":" + port + basePath + "/config/VNF-API:vnfs";
+ String response = vnfRestClientlocal.vnfRestClient(finalURL, username, password);
+ List<VnfDisplayParams> displayParams = parseVnfConfigDetails(response);
+ vnfServiceResponse.setVnfDisplayList(displayParams);
+ return vnfServiceResponse;
+ }
+
+ public List<VnfDisplayParams> parseVnfConfigDetails(String jsonInput) {
+ List<VnfDisplayParams> displayParams = new ArrayList<VnfDisplayParams>();
+
+ try {
+ JSONObject vnf = new JSONObject(jsonInput);
+ JSONArray vnfList = vnf.getJSONObject("vnfs").getJSONArray("vnf-list");
+
+ for (int i = 0; i < vnfList.length(); i++) {
+ VnfDisplayParams vnfDisplayParams = new VnfDisplayParams();
+ String responseStatus = vnfList.getJSONObject(i).getJSONObject("service-status").get("response-code")
+ .toString();
+ if ("200".equalsIgnoreCase(responseStatus)) {
+ String vnfId = vnfList.getJSONObject(i).get("vnf-id").toString();
+ String vnfName = vnfList.getJSONObject(i).getJSONObject("service-data")
+ .getJSONObject("vnf-request-information").get("vnf-name").toString();
+ vnfDisplayParams.setVnfId(vnfId);
+ vnfDisplayParams.setVnfName(vnfName);
+ displayParams.add(vnfDisplayParams);
+ }
+ }
+ } catch (JSONException e) {
+ logger.error("Exception is at parseVnfConfigDetails() : " + e);
+ }
+ return displayParams;
+ }
+
+ @Override
+ public String backupVnfconfig(String vnfId) {
+ long millis = System.currentTimeMillis();
+ Timestamp date = new java.sql.Timestamp(millis);
+ String finalURL = "http://" + host + ":" + port + basePath + "/config/VNF-API:vnfs/vnf-list/" + vnfId;
+ logger.debug("connecting to restconf device:::" + finalURL);
+ String response = vnfRestClientlocal.vnfRestClient(finalURL, username, password);
+ String configInfo = response;
+ Timestamp creationDate = date;
+ Timestamp lastupdated = date;
+ int status = 1;
+ String vnfid = vnfId;
+ String vnfname = "";
+ VnfConfigDetailsDB getVnfDetails = null;
+ String vnfversion = "Version-1";
+ try {
+ getVnfDetails = vnfBackupServiceDao.getVnfDetail(vnfId);
+ } catch (Exception e) {
+ logger.error("exception is at getVnfdetails() : " + e);
+ }
+ if (getVnfDetails == null) {
+ JSONObject vnf;
+ try {
+ vnf = new JSONObject(response);
+ vnfname = vnf.getJSONArray("vnf-list").getJSONObject(0).getJSONObject("service-data")
+ .getJSONObject("vnf-request-information").get("vnf-name").toString();
+
+ } catch (JSONException e) {
+ logger.error("exception is at getVnfdetails() : " + e);
+ }
+ vnfBackupServiceDao.saveVnfDetails(configInfo, creationDate, lastupdated, status, vnfid, vnfname,
+ vnfversion);
+ } else {
+ try {
+ String[] vnfvesionsplit = getVnfDetails.getVnfversion().split("-");
+ int tmpVnfversion = Integer.parseInt(vnfvesionsplit[1]) + 1;
+ vnfversion = vnfvesionsplit[0] + "-" + String.valueOf(tmpVnfversion);
+
+ ObjectMapper om = new ObjectMapper();
+ try {
+ Map<String, Object> m1 = (Map<String, Object>) (om.readValue(getVnfDetails.getConfiginfo(),
+ Map.class));
+ Map<String, Object> m2 = (Map<String, Object>) (om.readValue(response, Map.class));
+
+ JSONObject vnf;
+ vnf = new JSONObject(response);
+ vnfname = vnf.getJSONArray("vnf-list").getJSONObject(0).getJSONObject("service-data")
+ .getJSONObject("vnf-request-information").get("vnf-name").toString();
+
+ if (!m1.equals(m2)) {
+ vnfBackupServiceDao.saveVnfDetails(configInfo, creationDate, lastupdated, status, vnfid,
+ vnfname, vnfversion);
+ }
+ } catch (Exception e) {
+ logger.error("exception is at getVnfdetails() : " + e);
+ }
+ } catch (Exception e) {
+ logger.error("exception is at getVnfdetails() : " + e);
+ }
+ }
+ return "success";
+ }
+
+ @Override
+ public String putVnfconfig(String configfile, String vnfId) {
+
+ String indented = null;
+
+ if (configfile != null) {
+ restTemplate = new RestTemplate();
+ String finalURL = "http://" + host + ":" + port + basePath + "/config/VNF-API:vnfs/vnf-list/" + vnfId;
+
+ HttpHeaders headers = new HttpHeaders();
+
+ logger.info("connecting to restconf device:::" + finalURL);
+ String response = vnfRestClientlocal.vnfRestClient(finalURL, username, password);
+ logger.info(response);
+ ObjectMapper mapper = new ObjectMapper();
+ try {
+ Object json = mapper.readValue(response, Object.class);
+ indented = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(json);
+ logger.info(indented);
+ } catch (JsonParseException e) {
+ logger.error("exception occer" + e);
+ } catch (JsonMappingException e) {
+ logger.error("exception occer" + e);
+ } catch (IOException e) {
+ logger.error("exception occer" + e);
+ }
+
+ if (!(configfile.equals(indented))) {
+ HttpEntity<String> requestEntity = new HttpEntity<String>(configfile,
+ vnfRestClientlocal.generateHeaders(headers, username, password));
+
+ ResponseEntity<String> uri = restTemplate.exchange(finalURL, HttpMethod.PUT, requestEntity,
+ String.class);
+ logger.info(uri.getStatusCode());
+ if (uri.getStatusCodeValue() == 200) {
+ vnfConfigBackupScheduler.initiateBackupService();
+ }
+ return "ok";
+ } else {
+ throw new RuntimeException("Both configurations are same");
+ }
+ }
+ return "ok";
+ }
+
+ @Override
+ public String updatedBackuptime() {
+ String sdtime = vnfBackupServiceDao.getvnfschedulertime();
+ return sdtime;
+ }
+
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/resource/application.properties b/configbackuprestore/vnfconfigbackupservice/src/main/resource/application.properties
new file mode 100644
index 00000000..4c2287b2
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/resource/application.properties
@@ -0,0 +1,72 @@
+server.port = 9003
+#server.error.whitelabel.enabled=false
+spring.mvc.view.prefix = /WEB-INF/views/
+spring.mvc.view.suffix = .jsp
+#
+#spring.datasource.url=jdbc:mariadb://localhost:3306/testreports?useSSL=false
+##spring.datasource.url=jdbc:mysql://localhost:3306/mysql?useSSL=false
+##spring.datasource.driver-class-name=com.mysql.jdbc.Driver
+#spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
+#spring.datasource.name=mysql
+#spring.jpa.database=testreports
+#spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
+##org.hibernate.dialect.MySQLDialect
+#
+#
+#spring.datasource.username=root
+#spring.datasource.password=12345
+#spring.jpa.generate-ddl=true
+#spring.datasource.tomcat.max-wait=20000
+#spring.datasource.tomcat.max-active=50
+#spring.datasource.tomcat.max-idle=20
+#spring.datasource.tomcat.min-idle=15
+#
+spring.jpa.hibernate.ddl-auto=update
+#
+#spring.jpa.properties.hibernate.dialect =org.hibernate.dialect.MySQL5InnoDBDialect
+## org.hibernate.dialect.MySQLDialect
+#
+#spring.jpa.properties.hibernate.id.new_generator_mappings = false
+#spring.jpa.properties.hibernate.format_sql = true
+#
+#logging.level.org.hibernate.SQL=DEBUG
+#logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
+sdnc.rest.vnf.api.host=10.53.172.121
+sdnc.rest.vnf.api.port=8282
+sdnc.rest.vnf.api.basepath=/restconf
+sdnc.rest.vnf.api.username=admin
+sdnc.rest.vnf.api.password=Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
+
+spring.jackson.serialization.fail-on-empty-beans=false
+
+server.tomcat.uri-encoding=utf-8
+
+#server.error.whitelabel.enabled=false
+#spring.mvc.view.prefix = /WEB-INF/views/
+#spring.mvc.view.suffix = .jsp
+
+logging.level.org.springframework=TRACE
+logging.level.com=TRACE
+
+# ===============================
+# Set here configurations for the database connection
+spring.datasource.url=jdbc:mariadb://localhost:3306/configtest
+spring.datasource.username=root
+spring.datasource.password=root
+spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
+# Keep the connection alive if idle for a long time (needed in production)
+spring.datasource.testWhileIdle=true
+spring.datasource.validationQuery=SELECT 1
+# ===============================
+# = JPA / HIBERNATE
+# ===============================
+# Show or not log for each sql query
+spring.jpa.show-sql=true
+# Hibernate ddl auto (create, create-drop, update): with "create-drop" the database
+# schema will be automatically created afresh for every start of application
+#spring.jpa.hibernate.ddl-auto=validate
+# Naming strategy
+spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
+spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
+# Allows Hibernate to generate SQL optimized for a particular DBMS
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/resource/log4j2.xml b/configbackuprestore/vnfconfigbackupservice/src/main/resource/log4j2.xml
new file mode 100644
index 00000000..e443b529
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/resource/log4j2.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="WARN" monitorInterval="30">
+ <Properties>
+ <Property name="LOG_PATTERN">
+ %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${hostName} --- [%15.15t] %-40.40c{1.} : %m%n%ex
+ </Property>
+ </Properties>
+ <Appenders>
+
+ <!-- <Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
+ <PatternLayout pattern="${LOG_PATTERN}"/>
+ </Console> -->
+
+ <!-- Rolling File Appender -->
+ <RollingFile name="FileAppender" fileName="logs/sdnc_report_api.log"
+ filePattern="logs/sdnc_report_api-%d{yyyy-MM-dd}-%i.log">
+ <PatternLayout>
+ <Pattern>${LOG_PATTERN}</Pattern>
+ </PatternLayout>
+ <Policies>
+ <SizeBasedTriggeringPolicy size="10MB" />
+ </Policies>
+ <DefaultRolloverStrategy max="10"/>
+ </RollingFile>
+
+ </Appenders>
+
+ <Loggers>
+ <Logger name="com.onap.sdnc.reports" level="debug" additivity="false">
+ <AppenderRef ref="FileAppender" />
+ </Logger>
+
+ <Root level="debug">
+ <!-- <AppenderRef ref="ConsoleAppender" /> -->
+ <AppenderRef ref="FileAppender"/>
+ </Root>
+ </Loggers>
+</Configuration> \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/WEB-INF/lib/jsp-api-2.0.jar b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/WEB-INF/lib/jsp-api-2.0.jar
new file mode 100644
index 00000000..3d0c81fe
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/WEB-INF/lib/jsp-api-2.0.jar
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/WEB-INF/lib/jstl-1.2.jar b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/WEB-INF/lib/jstl-1.2.jar
new file mode 100644
index 00000000..0fd275e9
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/WEB-INF/lib/jstl-1.2.jar
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/WEB-INF/views/index.jsp b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/WEB-INF/views/index.jsp
new file mode 100644
index 00000000..b6a3e552
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/WEB-INF/views/index.jsp
@@ -0,0 +1,73 @@
+<!-- /*
+ * ============LICENSE_START=======================================================
+ * ONAP : SDNC-FEATURES
+ * ================================================================================
+ * Copyright 2018 TechMahindra
+ *=================================================================================
+ * 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=========================================================
+ */
+ -->
+<!-- index.html -->
+<!DOCTYPE html>
+<html ng-app="myApp">
+ <head>
+ <meta charset="utf-8">
+ <!-- CSS -->
+ <script src="./node_modules/jquery.min.js"></script>
+ <script src="./node_modules/tether.min.js" ></script>
+ <link rel="stylesheet" href="./node_modules/bootstrap-3.3.7/dist/css/bootstrap.min.css">
+ <script src="./node_modules/bootstrap-3.3.7/dist/js/bootstrap.min.js"></script>
+ <link rel="stylesheet" href="/static/style/sdnc-style.css">
+ <!-- JS -->
+ <!-- load angular,date-time picker,pagination,growl and ui-router -->
+ <script src = "./node_modules/angular.min.js"></script>
+ <script src = "./node_modules/angular-route.min.js"></script>
+ <script src="./node_modules/angular-utils-pagination/dirPagination.js"></script>
+ <script src="./node_modules/ng-csv/build/ng-csv.min.js"></script>
+ <script src="./node_modules/angular-sanitize.min.js"></script>
+ <link rel="stylesheet" href="./node_modules/angularjs-datetime-picker/angularjs-datetime-picker.css" />
+ <script src="./node_modules/angularjs-datetime-picker/angularjs-datetime-picker.js"></script>
+ <script data-require="jquery@*" data-semver="2.1.4" src="https://code.jquery.com/jquery-2.1.4.js"></script>
+ <script src="./node_modules/angular-utils-pagination/dirPagination.js"></script>
+ <script src="./js/app.js"></script>
+ <script src="./js/sdnc-controller/sdnc-viewreport-controller.js"></script>
+ <script src="./js/sdnc-controller/sdnc-validationTest-controller.js"></script>
+ <script src="./js/sdnc-services/sdnc-viewReport-service.js"></script>
+ <script src="./js/sdnc-services/sdnc-validationTest-service.js"></script>
+ <script src="./js/sdnc-controller/sdnc-backupConfig-controller.js"></script>
+ <script src="./js/sdnc-controller/sdnc-applyConfig-controller.js"></script>
+ <script src="./js/sdnc-controller/sdnc-compareConfig-controller.js"></script>
+ <script src="./js/sdnc-services/sdnc-compareConfig-service.js"></script>
+ <script src="./node_modules/angular-growl-v2/build/angular-growl.min.js" ></script>
+ <script src="./node_modules/ng-ip-address/ngIpAddress.min.js" ></script>
+ <link rel="stylesheet" type="text/css" href="./node_modules/angular-growl-v2/build/angular-growl.css">
+ <link rel="stylesheet" href="/static/style/w3.css">
+ <link type="text/css" href="./node_modules/angular-object-diff/dist/angular-object-diff.css" rel='stylesheet'>
+ <script type="text/javascript" src="/node_modules/angular-object-diff/dist/angular-object-diff.js"></script>
+ </head>
+ <!-- apply our angular app -->
+ <body>
+ <div class="container">
+ <!-- header page -->
+ <div ng-include="'static/views/header.html'"></div>
+ <div style="border-style:ridge;height:auto;">
+ <div ng-include="'static/views/tabs.html'" ></div>
+ <!-- views will be injected here -->
+ <div ng-view></div>
+ </div>
+ <!-- footer page -->
+ <div ng-include="'static/views/footer.html'" ></div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/app.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/app.js
new file mode 100644
index 00000000..109baec5
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/app.js
@@ -0,0 +1,68 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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=========================================================
+*/
+
+// app.js This is first entry point for the application
+// =============================================================================
+var myApp = angular.module('myApp', ['ngRoute', 'ngSanitize', 'ngCsv', 'angularUtils.directives.dirPagination', 'angular-growl','ng-ip-address','ds.objectDiff']);
+
+myApp.config(['growlProvider',function(growlProvider) {
+ growlProvider.globalDisableCloseButton(false);
+}]);
+
+
+// configuring our routes
+// =============================================================================
+myApp.config(['$routeProvider', function($routeProvider) {
+
+ //Called when user select pre validation test from the UI
+ $routeProvider.
+ when('/testReportsById', {
+ templateUrl: 'static/views/form-viewReportById.html',
+ controller: 'ReportController'
+ }).
+ when('/', {
+ templateUrl: 'static/views/form-viewReport.html',
+ controller: 'ReportController'
+ }).
+ //Called when user select view test report from the UI
+ when('/testReports', {
+ templateUrl: 'static/views/form-viewReport.html',
+ controller: 'ReportController'
+ }).
+ when('/deviceConfig', {
+ templateUrl: 'static/views/form-backupConfig.html',
+ controller: 'BackupConfigCtrl'
+ }).
+ when('/applyConfig', {
+ templateUrl: 'static/views/form-applyConfig.jsp',
+ controller: 'ApplyConfigCtrl'
+ }).
+ when('/compareConfig', {
+ templateUrl: 'static/views/form-compareConfig.html',
+ controller: 'CompareConfigCtrl'
+ }).
+ otherwise({
+ redirectTo: 'static/views/form-viewReport.html'
+ });
+}]);
+
+
+myApp.constant('CERTIFICATION_API_BASE', 'http://myapp.production.com/');
+myApp.constant('VNF_API_BASE', 'http://myapp.production.com/'); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-applyConfig-controller.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-applyConfig-controller.js
new file mode 100644
index 00000000..faff3633
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-applyConfig-controller.js
@@ -0,0 +1,93 @@
+myApp.controller('ApplyConfigCtrl', ['$scope','$window', '$http', 'growl', 'deviceConfigService', 'ObjectDiff', function($scope, $http,$window, growl, deviceConfigService, ObjectDiff) {
+
+ $scope.showResult = false;
+
+ //THIS FUNCTION WILL BE CALLED ON PAGE LOAD
+ $scope.getAllVNFFromRc = function() {
+
+ deviceConfigService.getAllVNFFromRc().then(function(data) {
+ if (data != null) {
+ console.log(data);
+ $scope.objvnfList = data;
+ console.log("CompareConfigCtrl:getAllVNFFromRc called" + $scope.objvnfList);
+ } else {
+ $scope.warningMessage = "No VNF is eligible for configuration!!!";
+ growl.error($scope.warningMessage, {
+ title: 'Warning!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }
+ });
+ };
+ $scope.getAllVNFFromRc();
+
+
+
+ $scope.selectVnf = function(selectedValueVnf) {
+
+ var vnfId = selectedValueVnf;
+
+ $scope.fileContent = '';
+ $scope.fileSize = 0;
+ $scope.fileName = '';
+
+ $scope.submit = function () {
+ var file = document.getElementById("myFileInput").files[0];
+ $scope.result1={};
+
+ if (file) {
+ var aReader = new FileReader();
+ aReader.readAsText(file, "UTF-8");
+ aReader.onload = function (evt) {
+ // $scope.fileContent = aReader.result;
+ $scope.fileName = document.getElementById("myFileInput").files[0].name;
+ $scope.fileSize = document.getElementById("myFileInput").files[0].size;
+ var id= vnfId;
+ result1=JSON.parse(aReader.result);
+ /*var item = JSON.parse(result1);*/
+ $scope.fileContent = aReader.result.search(id);
+ $scope.successMessagebool = false;
+ if( $scope.fileContent == -1){
+ $scope.errorMessage = "VNF Id is different!!! Select different file and try again";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }
+ else{
+
+ $scope.apply();
+
+ }
+ }
+ aReader.onerror = function (evt) {
+ $scope.fileContent = "error";
+ }
+ }
+ $scope.successMessagebool1 = false;
+ $scope.apply = function() {
+ if (file) {
+ deviceConfigService.runApplyconfig(vnfId,result1);
+ $scope.successMessage = "File uploaded successfully";
+ growl.success($scope.successMessage, {
+ title: 'Success!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ $scope.successMessagebool1 = true;
+
+
+ } };
+
+ }
+
+ }
+
+
+}]);
+
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-backupConfig-controller.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-backupConfig-controller.js
new file mode 100644
index 00000000..3ea9c755
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-backupConfig-controller.js
@@ -0,0 +1,314 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : SDNC-FEATURES
+ * ================================================================================
+ * Copyright 2018 TechMahindra
+ *=================================================================================
+ * 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=========================================================
+ */
+myApp.controller('BackupConfigCtrl', ['$scope', '$http','$window', 'growl', 'deviceConfigService', 'ObjectDiff', '$timeout' , function($scope, $http, $window, growl, deviceConfigService, ObjectDiff, $timeout) {
+
+ $scope.showResult = false;
+ $scope.showCompare = false;
+
+ //THIS FUNCTION WILL BE CALLED ON PAGE LOAD
+ $scope.getAllVNF = function() {
+
+ deviceConfigService.getAllVNF().then(function(data) {
+ if (data != null) {
+ console.log(data);
+ $scope.objvnfList = data;
+ console.log("CompareConfigCtrl:getAllVNF called" + $scope.objvnfList);
+ } else {
+ $scope.warningMessage = "No VNF is eligible for configuration!!!";
+ growl.error($scope.warningMessage, {
+ title: 'Warning!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }
+ });
+ };
+ $scope.getAllVNF();
+
+ $scope.selectVnf = function(selectedValueVnf) {
+
+ if (selectedValueVnf != null && selectedValueVnf != "") {
+ console.log("selectedvnf Value", selectedValueVnf);
+ //selectedItem = selectedValueVnf.split("%");
+// var vnfName = selectedItem[0];
+// var vnfType = selectedItem[1];
+ var vnfId = selectedValueVnf;
+ $scope.getVersionList(vnfId);
+ } else {
+ $scope.ShowResult = false;
+ $scope.showCompare = false;
+ $scope.showResult = false;
+ $scope.errorMessage = "Please select a VNF!!!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }
+
+ }
+
+ //THIS FUNCTION WILL BE CALLED ON SELECTION OF VNF
+ $scope.getVersionList = function(vnfId) {
+
+ $scope.ShowResult = false;
+
+ //service call to fetch the version list
+ deviceConfigService.getVersions(vnfId).then(function(result) {
+ console.log("--CompareConfigCtrl::getVersionList called from controler--", JSON.stringify(result));
+ var status = result.status;
+ var result = result.data;
+ if (status == 200) {
+ if (result.length >= 1) {
+ //in case of success, build the model object to store the service output here
+ $scope.createVersionModel(result);
+ } else {
+ $scope.ShowResult = false;
+ $scope.warningMessage = "No configruation found for the selected VNF !!";
+ growl.warning($scope.warningMessage, {
+ title: 'Warning!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }
+ } else {
+ $scope.ShowResult = false;
+ $scope.warningMessage = "No configruation found for the selected VNF !!";
+ growl.warning($scope.warningMessage, {
+ title: 'Warning!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }
+ },
+ function(response) {
+ $scope.errorMessage = "Something went wrong, Please try again !!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ console.log("--CompareConfigCtrl::getVersionList::Error--", response);
+ });
+ }
+
+ //Function to build the UI model to be shown
+ $scope.createVersionModel = function(result) {
+
+ $scope.objVersionModel = result;
+ $scope.objVersion = [];
+
+ console.log("--CompareConfigCtrl::createVersionModel::--", JSON.stringify($scope.objVersionModel));
+ if ($scope.objVersionModel.length >= 1) {
+ $scope.ShowResult = true;
+ $scope.showCompare = true;
+ for (var i = 0; i < $scope.objVersionModel.length; i++) {
+ var objVersionDetail = {};
+ objVersionDetail.vnfname = $scope.objVersionModel[i].vnfname;
+ objVersionDetail.vnfid = $scope.objVersionModel[i].vnfid;
+ objVersionDetail.versionNo = $scope.objVersionModel[i].vnfversion;
+ objVersionDetail.createdAt = $scope.objVersionModel[i].creationdate;
+ objVersionDetail.configinfo = $scope.objVersionModel[i].configinfo;
+ objVersionDetail.selected = false;
+
+ $scope.objVersion.push(objVersionDetail);
+ }
+ }
+ console.log("--CompareConfigCtrl::createVersionModel::final VersionModel--" + JSON.stringify($scope.objVersion));
+
+ }
+
+ $scope.CompareConfig = function(objVersion) {
+ var count = 0;
+ angular.forEach(objVersion, function(item) {
+ if (item.selected == true)
+ count++;
+ });
+ if (count > 2) {
+ $scope.errorMessage = "Only two config files can be selected for the comparison!!!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ } else if (count === 1){
+ $scope.errorMessage = "At least two config files can be selected for the comparison!!!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }else
+ $scope.createCompareModelNew(objVersion);
+ };
+
+ $scope.createCompareModelNew = function(objVersion) {
+
+ $scope.objCompareModel1 = {};
+ $scope.objCompareModel2 = {};
+
+ $scope.versionsSelected = [];
+ angular.forEach(objVersion, function(item) {
+ angular.forEach($scope.objVersionModel, function(val, index) {
+ if (item.versionNo == val['versionNo'] && item.selected == false) {
+ $scope.objVersionModel.splice(index, 1);
+ }
+ if (item.selected) {
+ if ($scope.versionsSelected.indexOf(item) == -1)
+ $scope.versionsSelected.push(item);
+ }
+ })
+ });
+ console.log("--CompareConfigCtrl::createCompareModel::$scope.objVersionModel", JSON.stringify($scope.objVersionModel));
+ angular.forEach($scope.objVersionModel, function(item) {
+ var versionObj = {};
+ var versionDetails = {};
+ versionDetails.versionNo = item['vnfversion'];
+ /*versionDetails.vnfName = item['vnfname'];
+ versionDetails.vnfid = item['vnfid'];*/
+ versionDetails.timeStamp = item.creationdate;
+ versionObj.versionDetails = versionDetails;
+
+ //fetch all the other topology/network,opertaion status for the vnf
+ // versionObj.topologyInfo = $scope.fetchConfigDetails(item);
+ versionObj.topologyInfo = $scope.fetchTopologyInfo(item);
+
+ versionObj.networkTopologyInfo = $scope.fetchNetworkTopologyInfo(item);
+ versionObj.operationStatus = $scope.operationStatus(item);
+ versionObj.vnfTopologyIdentifier = $scope.vnfTopologyIdentifier(item);
+
+ if ((versionObj.versionDetails.versionNo == $scope.versionsSelected[0].versionNo)) {
+ $scope.objCompareModel1 = versionObj;
+ } else
+ $scope.objCompareModel2 = versionObj;
+
+ });
+ $scope.showResult = true;
+ console.log("CompareConfigCtrl::createCompareModel::objCompareModel1", JSON.stringify($scope.objCompareModel1));
+ console.log("CompareConfigCtrl::createCompareModel::objCompareModel2", JSON.stringify($scope.objCompareModel2));
+ }
+
+
+
+ $scope.fetchTopologyInfo = function(item) {
+ var topologyInfo = {};
+ item = JSON.parse(item.configinfo);
+ if (angular.isDefined(item['preload-data']) && angular.isDefined(item['preload-data']['vnf-topology-information'])) {
+ var vnfTopologyInfo = item['preload-data']['vnf-topology-information'];
+ if (angular.isDefined(vnfTopologyInfo['vnf-parameters'] && vnfTopologyInfo['vnf-parameters'] != null)) {
+ var vnfParameters = vnfTopologyInfo['vnf-parameters'];
+ for (var i = 0; i < vnfParameters.length; i++) {
+
+ var key = vnfParameters[i]['vnf-parameter-name'];
+ var value = vnfParameters[i]['vnf-parameter-value'];
+ console.log("CompareConfigCtrl::fetchTopologyInfo::key", key);
+ console.log("CompareConfigCtrl::fetchTopologyInfo::value", value);
+ topologyInfo[key] = value;
+
+ }
+ console.log("CompareConfigCtrl::fetchTopologyInfo::", JSON.stringify(topologyInfo));
+ return topologyInfo;
+ }
+ }
+ }
+
+ $scope.fetchNetworkTopologyInfo = function(item) {
+ var networkTopology = {};
+ item = JSON.parse(item.configinfo);
+ if (angular.isDefined(item['preload-data']) && angular.isDefined(item['preload-data']['network-topology-information'])) {
+ var netwrokTopologyInfo = item['preload-data']['network-topology-information'];
+ if (angular.isDefined(netwrokTopologyInfo) && netwrokTopologyInfo != null) {
+ for (var i = 0; i < netwrokTopologyInfo.length; i++) {
+
+ var key = netwrokTopologyInfo[i]['vnf-parameter-name'];
+ var value = netwrokTopologyInfo[i]['vnf-parameter-value'];
+ console.log("CompareConfigCtrl::fetchTopologyInfo::key", key);
+ console.log("CompareConfigCtrl::fetchTopologyInfo::value", value);
+ networkTopology[key] = value;
+ }
+ }
+ }
+ console.log("CompareConfigCtrl::fetchNetworkTopologyInfo::", JSON.stringify(networkTopology));
+ return networkTopology;
+ }
+
+ $scope.operationStatus = function(item) {
+ var operationStatus = {};
+ item = JSON.parse(item.configinfo);
+ if (angular.isDefined(item['preload-data']) && angular.isDefined(item['preload-data']['oper-status'])) {
+ var operStatus = item['preload-data']['oper-status'];
+ if (angular.isDefined(operStatus) && operStatus != null) {
+
+ var value = operStatus['order-status'];
+ operationStatus['order-status'] = value;
+
+ }
+ }
+ console.log("CompareConfigCtrl::operationStatus::", JSON.stringify(operationStatus));
+ return operationStatus;
+ }
+
+ $scope.vnfTopologyIdentifier = function(item) {
+ var topologyIdnetifier = {};
+ item = JSON.parse(item.configinfo);
+ if (angular.isDefined(item['preload-data']) && angular.isDefined(item['preload-data']['vnf-topology-information']['vnf-topology-identifier'])) {
+ var topologyInfoidentifier = item['preload-data']['vnf-topology-information']['vnf-topology-identifier'];
+ if (angular.isDefined(topologyInfoidentifier)) {
+ angular.forEach(topologyInfoidentifier, function(value, key) {
+
+ console.log("CompareConfigCtrl::fetchTopologyInfo::key", key);
+ console.log("CompareConfigCtrl::fetchTopologyInfo::value", value);
+ topologyIdnetifier[key] = value;
+ });
+ }
+ }
+
+ console.log("CompareConfigCtrl::vnfTopologyIdentifier::", JSON.stringify(topologyIdnetifier));
+ return topologyIdnetifier;
+ }
+
+ $scope.invokeBackup = function(){
+ deviceConfigService.invokeBackup().then(function(data) {
+ console.log("response -- data -- "+data)
+ $window.location.reload();
+ });
+ }
+
+ $scope.getLastModifiedTime=function(){
+// $timeout(function(result){
+// console.log("response-data-"+ result);
+// $scope.lastModifiedTime="Testcode Dushyant"
+// }
+// ,5000);
+
+ deviceConfigService.getlastupdated().then(function(result) {
+ $scope.lastModifiedTime= result.data;
+ console.log("response -- getlastupdated -- "+JSON.stringify(result))
+ });
+ }
+ $scope.getLastModifiedTime()
+}]); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-compareConfig-controller.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-compareConfig-controller.js
new file mode 100644
index 00000000..91584b00
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-compareConfig-controller.js
@@ -0,0 +1,690 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : SDNC-FEATURES
+ * ================================================================================
+ * Copyright 2018 TechMahindra
+ *=================================================================================
+ * 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=========================================================
+ */
+myApp.controller('CompareConfigCtrl', ['$scope','$filter', '$http','$window', 'growl', 'deviceConfigService', 'ObjectDiff', function($scope,$filter, $http,$window, growl, deviceConfigService, ObjectDiff) {
+
+ $scope.showResult = false;
+ $scope.showCompare = false;
+ $scope.showView=false;
+ $scope.pagination = false;
+ $scope.gap = 2;
+ $scope.filteredItems = [];
+ $scope.groupedItems = [];
+ $scope.itemsPerPage = 5;
+ $scope.pagedItems = [];
+ $scope.currentPage = 0;
+ //THIS FUNCTION WILL BE CALLED ON PAGE LOAD
+ $scope.getAllVNF = function() {
+
+ deviceConfigService.getAllVNF().then(function(data) {
+ if (data != null) {
+ console.log(data);
+ $scope.objvnfList = data;
+ console.log("CompareConfigCtrl:getAllVNF called" + $scope.objvnfList);
+ } else {
+ $scope.warningMessage = "No VNF is eligible for configuration!!!";
+ growl.error($scope.warningMessage, {
+ title: 'Warning!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }
+ });
+ };
+ $scope.getAllVNF();
+
+ $scope.selectVnf = function(selectedValueVnf) {
+
+ if (selectedValueVnf != null && selectedValueVnf != "") {
+ console.log("selectedvnf Value", selectedValueVnf);
+ //selectedItem = selectedValueVnf.split("%");
+// var vnfName = selectedItem[0];
+// var vnfType = selectedItem[1];
+ var vnfId = selectedValueVnf;
+ $scope.getVersionList(vnfId);
+ } else {
+ $scope.ShowResult = false;
+ $scope.showCompare = false;
+ $scope.showResult = false;
+ $scope.errorMessage = "Please select a VNF!!!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }
+
+ }
+
+ //THIS FUNCTION WILL BE CALLED ON SELECTION OF VNF
+ $scope.getVersionList = function(vnfId) {
+
+ $scope.ShowResult = false;
+
+ //service call to fetch the version list
+ deviceConfigService.getVersions(vnfId).then(function(result) {
+ console.log("-----CompareConfigCtrl::getVersionList called from controler--", JSON.stringify(result));
+ var status = result.status;
+ var result = result.data;
+ if (status == 200) {
+ if (result.length >= 1) {
+ //in case of success, build the model object to store the service output here
+ $scope.createVersionModel(result);
+
+ } else {
+ $scope.ShowResult = false;
+ $scope.warningMessage = "No configruation found for the selected VNF !!";
+ growl.warning($scope.warningMessage, {
+ title: 'Warning!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }
+ } else {
+ $scope.ShowResult = false;
+ $scope.warningMessage = "No configruation found for the selected VNF !!";
+ growl.warning($scope.warningMessage, {
+ title: 'Warning!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }
+ },
+ function(response) {
+ $scope.errorMessage = "Something went wrong, Please try again !!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ console.log("--CompareConfigCtrl::getVersionList::Error--", response);
+ });
+ }
+
+ //Function to build the UI model to be shown
+ $scope.createVersionModel = function(result) {
+
+ $scope.objVersionModel = result;
+ $scope.objVersion = [];
+
+ console.log("-----CompareConfigCtrl::createVersionModel::--", JSON.stringify($scope.objVersionModel));
+ if ($scope.objVersionModel.length >= 1) {
+ $scope.ShowResult = true;
+ $scope.showCompare = true;
+ $scope.showView =true;
+ for (var i = 0; i < $scope.objVersionModel.length; i++) {
+ var objVersionDetail = {};
+ objVersionDetail.vnfname = $scope.objVersionModel[i].vnfname;
+ objVersionDetail.vnfid = $scope.objVersionModel[i].vnfid;
+ objVersionDetail.vnfversion = $scope.objVersionModel[i].vnfversion;
+ objVersionDetail.createdAt = $scope.objVersionModel[i].creationdate;
+ objVersionDetail.updatedAt = $scope.objVersionModel[i].lastupdated;
+ objVersionDetail.configinfo = $scope.objVersionModel[i].configinfo;
+ objVersionDetail.selected = false;
+ $scope.objVersion.push(objVersionDetail);
+
+ }
+ }
+ console.log("-----CompareConfigCtrl::createVersionModel::final VersionModel--" + JSON.stringify($scope.objVersion));
+
+ // init
+ $scope.sort = {
+ sortingOrder : 'vnfversion',
+ reverse : true
+ };
+
+ var searchMatch = function(haystack, needle) {
+ if (!needle) {
+ return true;
+ }
+ return haystack.toLowerCase().indexOf(
+ needle.toLowerCase()) !== -1;
+ };
+
+ // init the filtered items
+ $scope.search = function() {
+ $scope.filteredItems = $filter('filter')(
+ $scope.objVersion,
+ function(item) {
+ for ( var attr in item) {
+ if (searchMatch(item[attr],
+ $scope.query))
+ return true;
+ }
+ return false;
+ });
+ // take care of the sorting order
+ if ($scope.sort.sortingOrder !== '') {
+ $scope.filteredItems = $filter(
+ 'orderBy')(
+ $scope.filteredItems,
+ $scope.sort.sortingOrder,
+ $scope.sort.reverse);
+ }
+ $scope.currentPage = 0;
+ // now group by pages
+ $scope.groupToPages();
+ };
+
+ // calculate page in place
+ $scope.groupToPages = function() {
+ $scope.pagedItems = [];
+
+ for (var i = 0; i < $scope.filteredItems.length; i++) {
+ if (i % $scope.itemsPerPage === 0) {
+ $scope.pagedItems[Math.floor(i
+ / $scope.itemsPerPage)] = [ $scope.filteredItems[i] ];
+ } else {
+ $scope.pagedItems[Math.floor(i
+ / $scope.itemsPerPage)]
+ .push($scope.filteredItems[i]);
+ }
+ }
+ };
+
+ $scope.range = function(size, start, end) {
+ var ret = [];
+ //console.log(size, start, end);
+
+ if (size < end) {
+ end = size;
+ start = size - $scope.gap;
+ }
+ for (var i = start; i < end; i++) {
+ ret.push(i);
+ }
+ //console.log(ret);
+ return ret;
+ };
+
+ $scope.prevPage = function() {
+ if ($scope.currentPage > 0) {
+ $scope.currentPage--;
+ }
+ };
+
+ $scope.nextPage = function() {
+ if ($scope.currentPage < $scope.pagedItems.length - 1) {
+ $scope.currentPage++;
+ }
+ };
+
+ $scope.setPage = function() {
+ $scope.currentPage = this.n;
+ };
+
+ // functions have been describe process the data
+ // for display
+ $scope.search();
+
+ }
+
+
+
+ //For apply version
+
+ $scope.ApplyConfig = function(objVersion){
+ var count = 0;
+ angular.forEach(objVersion, function(item) {
+ if (item.selected == true)
+ count++;
+ });
+ if (count < 1) {
+ $scope.errorMessage = "Select a config file to apply !!!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }else if (count > 1) {
+ $scope.errorMessage = "Only one config file can be applyed at a time !!!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }else
+ $scope.applyModelNew(objVersion);
+ };
+
+
+ $scope.applyModelNew = function(objVersion){
+
+ $scope.objCompareModel1 = {};
+
+ $scope.versionsSelected = [];
+ angular.forEach(objVersion, function(item) {
+ angular.forEach($scope.objVersionModel, function(val, index) {
+ /* if (item.vnfversion == val['vnfversion'] && item.selected == false) {
+ $scope.objVersionModel.splice(index, 1);
+ }*/
+ if (item.selected) {
+ if ($scope.versionsSelected.indexOf(item) == -1)
+ $scope.versionsSelected.push(item);
+ }
+ })
+ });
+ console.log("--CompareConfigCtrl::createCompareModel::$scope.objVersionModel", JSON.stringify($scope.objVersionModel));
+
+ angular.forEach($scope.versionsSelected, function(item) {
+ var versionObj = {};
+ var versionDetails = {};
+ versionDetails.vnfversion = item['vnfversion'];
+ versionDetails.vnfName = item['vnfname'];
+ var vnfid = item['vnfid'];
+ // var config = JSON.parse(item['configinfo']);
+ var config = item['configinfo'];
+ var config1=JSON.parse(config);
+ console.log("CompareConfigCtrl::createCompareModel::objCompareModel1", config1);
+ deviceConfigService.runApplyconfig(vnfid,config1);
+ $scope.successMessage = "File uploaded successfully";
+ growl.success($scope.successMessage, {
+ title: 'Success!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ });
+ }
+
+//View Configuration
+
+ $scope.ViewConfig = function(objVersion){
+ var elmnt1 = document.getElementById("view");
+
+ elmnt1.style.display = "block";
+ var count = 0;
+ angular.forEach(objVersion, function(item) {
+ if (item.selected == true)
+ count++;
+ });
+ if (count < 1) {
+ $scope.showResult = false;
+ $scope.errorMessage = "Select a config file to view !!!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }else if (count > 1) {
+ $scope.showResult = false;
+ $scope.errorMessage = "Only one config file can be viewed at a time !!!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }else
+ $scope.ViewCompareModelNew(objVersion);
+ };
+
+ $scope.ViewCompareModelNew = function(objVersion) {
+ $scope.objCompareModel1 = {};
+
+ $scope.versionsSelected = [];
+ angular.forEach(objVersion, function(item) {
+ angular.forEach($scope.objVersionModel, function(val, index) {
+ /*if (item.vnfversion == val['vnfversion'] && item.selected == false) {
+ $scope.objVersionModel.splice(index, 1);
+ }*/
+ if (item.selected) {
+ if ($scope.versionsSelected.indexOf(item) == -1)
+ $scope.versionsSelected.push(item);
+ }
+ })
+ });
+ console.log("--CompareConfigCtrl::createCompareModel::$scope.objVersionModel", JSON.stringify($scope.objVersionModel));
+
+ angular.forEach($scope.versionsSelected, function(item) {
+ var versionObj = {};
+ var versionDetails = {};
+ versionDetails.vnfversion = item['vnfversion'];
+ versionDetails.vnfName = item['vnfname'];
+ var vnfid = item['vnfid'];
+
+
+ versionDetails.timeStamp = item.createdAt;
+ versionObj.versionDetails = versionDetails;
+
+ //fetch all the other topology/network,opertaion status for the vnf
+ // versionObj.topologyInfo = $scope.fetchConfigDetails(item);
+ versionObj.topologyInfo = $scope.fetchTopologyInfo(item);
+ versionObj.vnfIdInfo = $scope.fetchVnfId(item);
+ versionObj.serviceStatusInfo= $scope.fetchServiceStatus(item);
+ versionObj.vnfTopologyIdentifier = $scope.vnfTopologyIdentifier(item);
+ versionObj.operationStatus = $scope.operationStatus(item);
+ versionObj.vnfRequestInfo=$scope.fetchVnfRequestInfo(item);
+ versionObj.serviceInfo= $scope.fetchServiceInfo(item);
+ versionObj.requestHeader= $scope.serviceRequestHeader(item);
+ versionObj.requestInfo=$scope.fetchRequestInfo(item);
+
+ if ((versionObj.versionDetails.vnfversion == $scope.versionsSelected[0].vnfversion)) {
+ $scope.objCompareModel1 = versionObj;
+ } else
+ {console.log("CompareConfigCtrl::createCompareModel::objCompareModel1");
+
+ }
+ document.getElementById("compare").style.display = "none";
+ } );
+ $scope.showView=true;
+ $scope.showResult = true;
+ var elmnt1 = document.getElementById("view");
+ elmnt1.scrollIntoView();
+ console.log("CompareConfigCtrl::createCompareModel::objCompareModel1", JSON.stringify($scope.objCompareModel1));
+ }
+
+
+ //compare
+
+
+ $scope.CompareConfig = function(objVersion) {
+ var elmnt = document.getElementById("compare");
+ elmnt.style.display = "block";
+ var count = 0;
+ angular.forEach(objVersion, function(item) {
+ if (item.selected == true)
+ count++;
+ });
+ if (count > 4) {
+ $scope.showResult = false;
+ $scope.errorMessage = "Four or lessthan four and gretterthan two config files can be selected for the comparison!!!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ } else if (count < 2){
+ $scope.showResult = false;
+ $scope.errorMessage = "At least two config files can be selected for the comparison!!!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton: false,
+ ttl: 7000,
+ disableCountDown: true
+ });
+ }else
+ $scope.createCompareModelNew(objVersion);
+ };
+
+ $scope.createCompareModelNew = function(objVersion) {
+
+ $scope.objCompareModel1 = {};
+ $scope.objCompareModel2 = {};
+
+ $scope.versionsSelected = [];
+ angular.forEach(objVersion, function(item) {
+ angular.forEach($scope.objVersionModel, function(val, index) {
+ /*if ((item.vnfversion == val['vnfversion']) && item.selected == false) {
+ // $scope.objVersionModel.splice(index, 1);
+ }*/
+ if (item.selected) {
+ if ($scope.versionsSelected.indexOf(item) == -1)
+ $scope.versionsSelected.push(item);
+ }
+ })
+ });
+ console.log("--CompareConfigCtrl::createCompareModel::$scope.objVersionModel", JSON.stringify($scope.objVersionModel));
+ console.log("--CompareConfigCtrl::createCompareModel::$scope.objVersionModel", JSON.stringify($scope.versionsSelected));
+
+ angular.forEach($scope.versionsSelected, function(item) {
+ var versionObj = {};
+ var versionDetails = {};
+ versionDetails.vnfversion = item.vnfversion;
+ /*versionDetails.vnfName = item['vnfname'];
+ versionDetails.vnfid = item['vnfid'];*/
+ versionDetails.timeStamp = item.createdAt;
+ versionObj.versionDetails = versionDetails;
+
+ //fetch all the other topology/network,opertaion status for the vnf
+ // versionObj.topologyInfo = $scope.fetchConfigDetails(item);
+ versionObj.topologyInfo = $scope.fetchTopologyInfo(item);
+ versionObj.vnfIdInfo = $scope.fetchVnfId(item);
+ versionObj.serviceStatusInfo= $scope.fetchServiceStatus(item);
+ versionObj.vnfTopologyIdentifier = $scope.vnfTopologyIdentifier(item);
+ versionObj.operationStatus = $scope.operationStatus(item);
+ versionObj.vnfRequestInfo=$scope.fetchVnfRequestInfo(item);
+ versionObj.serviceInfo= $scope.fetchServiceInfo(item);
+ versionObj.requestHeader= $scope.serviceRequestHeader(item);
+ versionObj.requestInfo=$scope.fetchRequestInfo(item);
+
+ if ((versionObj.versionDetails.vnfversion == $scope.versionsSelected[0].vnfversion)) {
+ $scope.objCompareModel1 = versionObj;
+ } else if ((versionObj.versionDetails.vnfversion == $scope.versionsSelected[1].vnfversion))
+ {$scope.objCompareModel2 = versionObj;
+ }
+ document.getElementById("view").style.display = "none";
+ } );
+ $scope.showResult = true;
+ var elmnt = document.getElementById("compare");
+ elmnt.scrollIntoView();
+ console.log("CompareConfigCtrl::createCompareModel::objCompareModel1", JSON.stringify($scope.objCompareModel1));
+ console.log("CompareConfigCtrl::createCompareModel::objCompareModel2", JSON.stringify($scope.objCompareModel2));
+
+ }
+
+ //1'st comparison for vnf topology info vnf-parameters
+ $scope.fetchTopologyInfo = function(item) {
+ var topologyInfo = {};
+ item = JSON.parse(item.configinfo);
+ var item= item['vnf-list'][0];
+ if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['vnf-topology-information'])) {
+ var vnfTopologyInfo = item['service-data']['vnf-topology-information'];
+ if (angular.isDefined(vnfTopologyInfo['vnf-parameters'] && vnfTopologyInfo['vnf-parameters'] != null)) {
+ var vnfParameters = vnfTopologyInfo['vnf-parameters'];
+ for (var i = 0; i < vnfParameters.length; i++) {
+
+ var key = vnfParameters[i]['vnf-parameter-name'];
+ var value = vnfParameters[i]['vnf-parameter-value'];
+ console.log("CompareConfigCtrl::fetchTopologyInfo::key", key);
+ console.log("CompareConfigCtrl::fetchTopologyInfo::value", value);
+ topologyInfo[key] = value;
+
+ }
+ console.log("CompareConfigCtrl::fetchTopologyInfo::", JSON.stringify(topologyInfo));
+ return topologyInfo;
+ }
+ }
+ }
+
+
+
+ //2nd comparison for vnf id
+
+ $scope.fetchVnfId = function(item){
+ var vnfIdInfo = {};
+ item = JSON.parse(item.configinfo);
+ var item= item['vnf-list'][0];
+ if (angular.isDefined(item['vnf-id'])) {
+ var key=item['vnf-id'];
+ vnfIdInfo['vnf-id']=key;
+ }
+ console.log("CompareConfigCtrl::fetchVnfId::", JSON.stringify( vnfIdInfo));
+ return vnfIdInfo;
+ }
+
+
+ //3rd comparison for service status
+
+ $scope.fetchServiceStatus = function(item) {
+ var serviceStatusInfo = {};
+
+ item = JSON.parse(item.configinfo);
+ var item= item['vnf-list'][0];
+
+ if (angular.isDefined(item['service-status'])) {
+ var serviceStatus = item['service-status'];
+ if (angular.isDefined(serviceStatus)) {
+ angular.forEach(serviceStatus, function(value, key) {
+
+ console.log("CompareConfigCtrl::fetchServiceStatus::key", key);
+ console.log("CompareConfigCtrl::fetchServiceStatus::value", value);
+ serviceStatusInfo[key] = value;
+ });
+ }
+ }
+
+ console.log("CompareConfigCtrl::fetchServiceStatus::", JSON.stringify(serviceStatusInfo));
+ return serviceStatusInfo;
+ }
+
+ // 4th comparison for vnf topology identifire
+
+ $scope.vnfTopologyIdentifier = function(item) {
+ var topologyIdnetifier = {};
+ item = JSON.parse(item.configinfo);
+ var item= item['vnf-list'][0];
+ if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['vnf-topology-information']['vnf-topology-identifier'])) {
+ var topologyInfoidentifier = item['service-data']['vnf-topology-information']['vnf-topology-identifier'];
+ if (angular.isDefined(topologyInfoidentifier)) {
+ angular.forEach(topologyInfoidentifier, function(value, key) {
+
+ console.log("CompareConfigCtrl::fetchTopologyInfo::key", key);
+ console.log("CompareConfigCtrl::fetchTopologyInfo::value", value);
+ topologyIdnetifier[key] = value;
+ });
+ }
+ }
+
+ console.log("CompareConfigCtrl::vnfTopologyIdentifier::", JSON.stringify(topologyIdnetifier));
+ return topologyIdnetifier;
+ }
+
+ // 5th comparison for vnf request information
+
+ $scope.fetchVnfRequestInfo = function(item) {
+ var vnfRequestInfo = {};
+ item = JSON.parse(item.configinfo);
+ var item= item['vnf-list'][0];
+ if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['vnf-request-information'])) {
+ var vnfRequest = item['service-data']['vnf-request-information'];
+ if (angular.isDefined(vnfRequest) && vnfRequest != null) {
+
+ angular.forEach(vnfRequest, function(value, key) {
+
+ console.log("CompareConfigCtrl::fetchVnfRequestInfo::key", key);
+ console.log("CompareConfigCtrl::fetchVnfRequestInfo::value", value);
+ vnfRequestInfo[key] = value;
+ });
+ }
+ }
+console.log("CompareConfigCtrl::fetchVnfRequestInfo::", JSON.stringify(vnfRequestInfo));
+ return vnfRequestInfo;
+ }
+
+ // 6th comparison for service info
+
+
+ $scope.fetchServiceInfo = function(item) {
+ var serviceInfo = {};
+ item = JSON.parse(item.configinfo);
+ var item= item['vnf-list'][0];
+ if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['service-information'])) {
+ var service= item['service-data']['service-information'];
+ if (angular.isDefined(service) && service != null) {
+
+ angular.forEach(service, function(value, key) {
+
+ console.log("CompareConfigCtrl::fetchServiceInfo::key", key);
+ console.log("CompareConfigCtrl::fetchServiceInfo::value", value);
+ serviceInfo[key] = value;
+ });
+ }
+ }
+ console.log("CompareConfigCtrl::fetchServiceInfo::", JSON.stringify(serviceInfo));
+ return serviceInfo;
+ }
+
+ // 7th comparison for sdnc request header
+
+ $scope.serviceRequestHeader = function(item) {
+ var requestHeader = {};
+ item = JSON.parse(item.configinfo);
+ var item= item['vnf-list'][0];
+ if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['sdnc-request-header'])) {
+ var requestHeaderInfo = item['service-data']['sdnc-request-header'];
+ if (angular.isDefined(requestHeaderInfo) && requestHeaderInfo != null) {
+
+ angular.forEach(requestHeaderInfo, function(value, key) {
+
+ console.log("CompareConfigCtrl::serviceRequestHeader::key", key);
+ console.log("CompareConfigCtrl::serviceRequestHeader::value", value);
+ requestHeader[key] = value;
+ });
+
+ }
+ }
+ console.log("CompareConfigCtrl::serviceRequestHeader::", JSON.stringify(requestHeader));
+ return requestHeader;
+ }
+
+ // 8th comparison for oper status
+ $scope.operationStatus = function(item) {
+ var operationStatus = {};
+ item = JSON.parse(item.configinfo);
+ var item= item['vnf-list'][0];
+ if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['oper-status'])) {
+ var operStatus = item['service-data']['oper-status'];
+ if (angular.isDefined(operStatus) && operStatus != null) {
+
+ angular.forEach(operStatus, function(value, key) {
+
+ console.log("CompareConfigCtrl::operationStatus::key", key);
+ console.log("CompareConfigCtrl::operationStatus::value", value);
+ operationStatus[key] = value;
+ });
+
+ }
+ }
+ console.log("CompareConfigCtrl::operationStatus::", JSON.stringify(operationStatus));
+ return operationStatus;
+ }
+ // 9th comparison for request info
+
+ $scope.fetchRequestInfo = function(item) {
+ var requestInfo = {};
+ item = JSON.parse(item.configinfo);
+ var item= item['vnf-list'][0];
+ if (angular.isDefined(item['service-data']) && angular.isDefined(item['service-data']['request-information'])) {
+ var request = item['service-data']['request-information'];
+ if (angular.isDefined(request) && request != null) {
+
+ angular.forEach(request, function(value, key) {
+
+ console.log("CompareConfigCtrl::fetchRequestInfo::key", key);
+ console.log("CompareConfigCtrl::fetchRequestInfo::value", value);
+ requestInfo[key] = value;
+ });
+
+ }
+ }
+ console.log("CompareConfigCtrl::fetchRequestInfo::", JSON.stringify(requestInfo));
+ return requestInfo;
+ }
+
+}]); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-validationTest-controller.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-validationTest-controller.js
new file mode 100644
index 00000000..0e80836f
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-validationTest-controller.js
@@ -0,0 +1,222 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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=========================================================
+*/
+
+
+myApp.controller('TestController', ['$scope', '$http', 'growl', 'viewReportService', 'validationTestService','CERTIFICATION_API_BASE', function($scope, $http, growl, viewReportService, validationTestService,CERTIFICATION_API_BASE) {
+
+ $scope.showTestReport = false;
+
+ //Input data for validation test dropdown
+ var validationTestList = [{
+ "typeId": 1,
+ "validationType": "Network Layer",
+ "Selected": false
+ },
+ {
+ "typeId": 2,
+ "validationType": "Protocol Layer",
+ "Selected": false
+ }
+ ];
+
+ $scope.validationTestList = validationTestList;
+
+
+ $scope.getselectval = function() {
+ $scope.selectedvalues = 'Name: ' + $scope.selitem.validationType + ' Id: ' + $scope.selitem.typeId;
+ }
+
+ $scope.showError = false;
+ $scope.errorMessage = "";
+ $scope.showSuccess = false;
+ $scope.successMessage = "";
+ $scope.showWarning = false;
+ $scope.warningMessage = "";
+ $scope.showInfo = false;
+ $scope.infoMessage = "";
+ $scope.ShowResult = false;
+ $scope.allowTestSelection = false;
+ $scope.hostNamePattern = /([a-z0-9](.[a-z0-9-]*[a-z0-9]))/;
+
+ //Called when user clicks on runtest button
+ $scope.runTest = function() {
+
+ $scope.showError = false;
+ $scope.vnfSelected = [];
+ $scope.testSelected = [];
+
+ var message = "";
+ for (var i = 0; i < $scope.validationTestList.length; i++) {
+ if ($scope.validationTestList[i].Selected) {
+ var typeId = $scope.validationTestList[i].typeId;
+ var validationType = $scope.validationTestList[i].validationType;
+ message += "typeId: " + typeId + " validationType: " + validationType + "\n";
+ console.log("--TestController::Runtest--", message);
+ var testDetails = {};
+ testDetails.typeId = typeId;
+ testDetails.validationType = validationType;
+ $scope.testSelected.push(testDetails);
+ }
+ }
+ console.log("--TestController::Runtest--", JSON.stringify($scope.testSelected));
+
+ var vnfDetails = {};
+ if ($scope.IPAddress != null && $scope.HostName != null && $scope.testSelected.length >= 1) {
+ vnfDetails.IpAddress = $scope.IPAddress;
+ vnfDetails.HostName = $scope.HostName;
+ $scope.vnfSelected.push(vnfDetails);
+ console.log("--TestController::Runtest--", JSON.stringify($scope.vnfSelected));
+
+ //Call the validation test service with vnfselected and testType as the parameter
+
+ validationTestService.runPretest($scope.vnfSelected, $scope.testSelected).then(function(response) {
+ console.log("--TestController::runTest--", JSON.stringify(response));
+
+ //in case of success, build the model object to store the service output here
+ if (response.status === 200) {
+ if (response.preTestResponse != null && response.preTestResponse.length >= 1) {
+ $scope.ShowResult = true;
+ $scope.createTestModel(response.preTestResponse);
+ $scope.showMessage(response.preTestResponse);
+
+ } else {
+ console.log(response);
+ $scope.showError = true;
+ $scope.errorMessage = "Something went wrong!!!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton:false
+ });
+ }
+ } else {
+ console.log(response);
+ $scope.showError = true;
+ $scope.errorMessage = "Something went wrong!!! Please try again later";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton:false
+ });
+ }
+ },
+ function(response) {
+ console.log("--TestController--", response);
+ });
+ } else {
+ $scope.showError = true;
+ $scope.errorMessage = "Please provide the inputs for VNF and test to be performed!!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton:false
+ });
+ }
+
+ };
+
+$scope.showMessage=function(data){
+
+ var iterate = true;
+ if(angular.isDefined(data) && data.length>=1){
+
+ iterate=true;
+ angular.forEach(data, function(value, key){
+
+ if(iterate=true){
+ if(value.status == "unreachable"){
+ console.log("--TestController::showMessage--",value.status);
+ $scope.showError = true;
+ $scope.errorMessage = "PreTest validation Failed, Please check logs for further details!!!";
+ growl.error($scope.errorMessage, {
+ title: 'Error!',
+ globalDisableCloseButton:false
+ });
+ iterate=false;
+ }
+ }
+ else
+ {
+ $scope.showSuccess = true;
+ $scope.successMessage = "Pre test validation completed!!";
+ growl.success($scope.successMessage, {
+ title: 'Success!',
+ globalDisableCloseButton:false
+ });
+ }
+
+ });
+
+ }
+ }
+
+ //Function to build the UI model to be shown
+ $scope.createTestModel = function(result) {
+
+ $scope.showError = false;
+ $scope.showWarning = false;
+ $scope.objPreTestModel = result;
+ $scope.objPreTest = [];
+
+
+ if ($scope.objPreTestModel.length >= 1) {
+ for (var i = 0; i < $scope.objPreTestModel.length; i++) {
+ var objTestReport = {};
+ objTestReport.ipaddress = $scope.objPreTestModel[i].ipaddress;
+ objTestReport.status = $scope.objPreTestModel[i].status;
+ objTestReport.testtype = $scope.objPreTestModel[i].testtype;
+ objTestReport.statistics = $scope.objPreTestModel[i].statistics;
+ objTestReport.avgTime = $scope.objPreTestModel[i].avgTime;
+
+
+ if ($scope.objPreTestModel[i].testtype === "Network Layer") {
+ if (objTestReport.statistics != null) {
+ //fetching the statistics to show in progress bar
+
+ var statistics = objTestReport.statistics;
+ statistics = statistics.split("%");
+ objTestReport.statistics = statistics[0];
+ if (objTestReport.statistics == 0) {
+ objTestReport.statisticPer = parseInt(objTestReport.statistics) + 50;
+ } else
+ objTestReport.statisticPer = objTestReport.statistics;
+ }
+
+ //fetching the avg time to show in progress bar
+
+ if (objTestReport.avgTime != null) {
+ var avgTime = objTestReport.avgTime;
+ avgTime = avgTime.split("=");
+ var Testtime = avgTime[1];
+ objTestReport.avgTime = Testtime.slice(0, -2).trim();
+ console.log("--TestController::createTestModel--", objTestReport.avgTime);
+ if (objTestReport.avgTime < 50) {
+ objTestReport.avgTimePer = parseInt(objTestReport.avgTime) + 10;
+ } else
+ objTestReport.avgTimePer = objTestReport.avgTime;
+
+ }
+ }
+ $scope.objPreTest.push(objTestReport);
+ console.log("--TestController::createTestModel--", JSON.stringify($scope.objPreTest));
+ }
+ }
+ console.log("--TestController::createTestModel::final PreTestModel--" + JSON.stringify($scope.objPreTest));
+
+ }
+
+}]); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-viewreport-controller.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-viewreport-controller.js
new file mode 100644
index 00000000..951ac5d5
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-controller/sdnc-viewreport-controller.js
@@ -0,0 +1,519 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : SDNC-FEATURES
+ * ================================================================================
+ * Copyright 2018 TechMahindra
+ *=================================================================================
+ * 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=========================================================
+ */
+
+myApp.controller(
+ 'ReportController',
+ [
+ '$scope',
+ '$http',
+ '$filter',
+ 'viewReportService',
+ 'growl',
+ function($scope, $http, $filter, viewReportService,
+ growl) {
+ $scope.isDisabled = true;
+ $scope.pagination = false;
+ $scope.selectedDevice;
+ $scope.ShowResult = false;
+ $scope.dateValidation = false;
+ $scope.NoSearchResult = false;
+ $scope.showError = false;
+ $scope.errorMessage = "";
+ $scope.showSuccess = false;
+ $scope.successMessage = "";
+ $scope.showWarning = false;
+ $scope.warningMessage = "";
+ $scope.showExecutionDetails = true;
+ $scope.showData = false;
+
+ $scope.gap = 2;
+ $scope.filteredItems = [];
+ $scope.groupedItems = [];
+ $scope.itemsPerPage = 5;
+ $scope.pagedItems = [];
+ $scope.currentPage = 0;
+
+ // THIS FUNCTION WILL BE CALLED ON PAGE LOAD
+ $scope.getAllVNF = function() {
+
+ viewReportService
+ .getAllVNF()
+ .then(
+ function(data) {
+ if (data != null) {
+ console.log(data);
+ $scope.objvnfList = data;
+ console
+ .log("ViewConfigCtrl:getAllVNF called"
+ + $scope.objvnfList);
+ } else {
+ $scope.warningMessage = "No VNF is eligible for configuration!!!";
+ growl
+ .error(
+ $scope.warningMessage,
+ {
+ title : 'Warning!',
+ globalDisableCloseButton : false,
+ ttl : 7000,
+ disableCountDown : true
+ });
+ }
+ });
+ };
+ $scope.getAllVNF();
+
+ $scope.selectVnf = function(selectedValueVnf) {
+
+ if (selectedValueVnf != null
+ && selectedValueVnf != "") {
+ console.log("selectedvnf Value",
+ selectedValueVnf);
+ var vnfId = selectedValueVnf;
+ $scope.ShowResult = true;
+
+ } else {
+ $scope.ShowResult = false;
+ $scope.showCompare = false;
+ $scope.showResult = false;
+ $scope.errorMessage = "Please select a VNF!!!";
+ growl.error($scope.errorMessage, {
+ title : 'Error!',
+ globalDisableCloseButton : false,
+ ttl : 7000,
+ disableCountDown : true
+ });
+ }
+ }
+
+ // THIS FUNCTION WILL BE CALLED WHEN USER CLICK
+ // SUBMIT FROM UI
+ $scope.getReportsById = function(selectedValueVnf,
+ startdate, enddate) {
+
+ $scope.ShowResult = true;
+ if (new Date(startdate) > new Date(enddate)) {
+ $scope.dateValidation = true;
+ $scope.showError = true;
+ $scope.errorMessage = "Start date cannot be greated than End date";
+ growl.error($scope.errorMessage, {
+ title : 'Error!',
+ globalDisableCloseButton : false,
+ ttl : 7000,
+ disableCountDown : true
+ });
+ return false;
+ }
+ var date = new Date(startdate);
+ if (angular.isDefined(startdate)) {
+ $scope.startDate = startdate;
+ }
+ if (angular.isDefined(enddate)) {
+ $scope.endDate = enddate;
+ }
+
+ $scope.startdate1 = $filter('date')(
+ $scope.startDate, 'dd-MM-yyyy');
+ $scope.enddate1 = $filter('date')(
+ $scope.endDate, 'dd-MM-yyyy');
+ if (startdate != null && enddate != null) {
+
+ // service call to fetch the reports start
+ // date,end date,test name
+ viewReportService
+ .getDataById(selectedValueVnf,
+ $scope.startdate1,
+ $scope.enddate1)
+ .then(
+ function(result) {
+ console
+ .log(
+ "-----------------------------------ReportController::getdata called from controler--",
+ JSON
+ .stringify(result.data));
+ if (result.status == 200) {
+ if (result.data != null
+ && result.data.length >= 1) {
+
+ // in case of
+ // success,
+ // build the
+ // model object
+ // to store the
+ // service
+ // output here
+ $scope
+ .createTestReportModel(result.data);// result.data.data
+ } else {
+ $scope.ShowResult = false;
+ $scope.showWarning = true;
+ $scope.warningMessage = "No result found for specified Date !!";
+ growl
+ .warning(
+ $scope.warningMessage,
+ {
+ title : 'Warning!',
+ globalDisableCloseButton : false,
+ ttl : 7000,
+ disableCountDown : true
+ });
+ }
+ } else {
+ $scope.ShowResult = false;
+ $scope.showWarning = true;
+ $scope.warningMessage = "No result found for specified Date !!";
+ growl
+ .warning(
+ $scope.warningMessage,
+ {
+ title : 'Warning!',
+ globalDisableCloseButton : false,
+ ttl : 7000,
+ disableCountDown : true
+ });
+ }
+ },
+ function(response) {
+ $scope.ShowError = true;
+ $scope.errorMessage = "Something went wrong, Please try again !!";
+ growl
+ .error(
+ $scope.errorMessage,
+ {
+ title : 'Error!',
+ globalDisableCloseButton : false,
+ ttl : 7000,
+ disableCountDown : true
+ });
+ console
+ .log(
+ "--ReportController::getdata::Error--",
+ response);
+ });
+ }
+ }
+
+ // FUNCTION WILL BE CALLED WHEN USER CLICK DOWNLOAD
+ // FROM UI
+ $scope.exportToExcel = function(tableId) { // ex:
+ // '#my-table'
+ var exportHref = Excel.tableToExcel(tableId,
+ 'export');
+ $timeout(function() {
+ location.href = exportHref;
+ }, 100); // trigger download
+
+ console
+ .log("--ReportController::exportToexcel--");
+ }
+
+ $scope.createTestReportModel = function(result) {
+
+ $scope.showError = false;
+ $scope.showWarning = false;
+ $scope.objTestReportModel = result;
+ $scope.objTestModel = [];
+
+ if ($scope.objTestReportModel.length >= 1) {
+ for (var i = 0; i < $scope.objTestReportModel.length; i++) {
+ var objTestReport = {};
+ objTestReport.vnfname = $scope.objTestReportModel[i].vnfname;
+ objTestReport.vnfid = $scope.objTestReportModel[i].vnfid;
+ objTestReport.versionNo = $scope.objTestReportModel[i].vnfversion;
+ objTestReport.createdAt = $scope.objTestReportModel[i].creationdate;
+ objTestReport.updatedAt = $scope.objTestReportModel[i].lastupdated;
+ objTestReport.status = $scope.objTestReportModel[i].status;
+ objTestReport.Id = $scope.objTestReportModel[i].id;
+ // objTestReport.configinfo =
+ // $scope.objVersionModel[i].configinfo;
+ $scope.objTestModel.push(objTestReport);
+ console
+ .log(
+ "--ReportController::CreateTestReportModel--",
+ JSON
+ .stringify($scope.objTestModel));
+
+ }
+ $scope.showresult = true;
+ $scope.pagination = true;
+ }
+ console
+ .log("--ReportController::createTestReportModel::final TestReportModel--"
+ + JSON
+ .stringify($scope.objTestModel));
+ $scope.csvOrder = [ 'testname', 'timeStamp',
+ 'status', 'statistics', 'avgTime',
+ 'result' ];
+
+ }
+
+ // THIS FUNCTION WILL BE CALLED WHEN USER CLICK
+ // SUBMIT FROM UI
+ $scope.getReports = function(startdate, enddate) {
+
+ $scope.ShowResult = false;
+ if (new Date(startdate) > new Date(enddate)) {
+ $scope.dateValidation = true;
+ $scope.showError = true;
+ $scope.errorMessage = "Start date cannot be greated than End date";
+ growl.error($scope.errorMessage, {
+ title : 'Error!',
+ globalDisableCloseButton : false,
+ ttl : 7000,
+ disableCountDown : true
+ });
+ return false;
+ }
+ var date = new Date(startdate);
+ /*
+ * if (angular.isDefined(deviceName)) {
+ * $scope.DeviceName = deviceName; }
+ */
+ if (angular.isDefined(startdate)) {
+ $scope.startDate = startdate;
+ }
+ if (angular.isDefined(enddate)) {
+ $scope.endDate = enddate;
+ }
+
+ $scope.startdate1 = $filter('date')(
+ $scope.startDate, 'dd-MM-yyyy');
+ $scope.enddate1 = $filter('date')(
+ $scope.endDate, 'dd-MM-yyyy');
+ if (startdate != null && enddate != null) {
+
+ // service call to fetch the reports start
+ // date,end date,test name
+ viewReportService
+ .getData($scope.startdate1,
+ $scope.enddate1)
+ .then(
+ function(result) {
+ console
+ .log(
+ "-----------------------------------ReportController::getdata called from controler--",
+ JSON
+ .stringify(result.data));
+ if (result.status == 200) {
+ if (result.data != null
+ && result.data.length >= 1) {
+
+ // in case of
+ // success,
+ // build the
+ // model object
+ // to store the
+ // service
+ // output here
+ $scope
+ .createTestReportModel(result.data);// result.data.data
+ } else {
+ $scope.ShowResult = false;
+ $scope.showWarning = true;
+ $scope.warningMessage = "No result found for specified Date !!";
+ growl
+ .warning(
+ $scope.warningMessage,
+ {
+ title : 'Warning!',
+ globalDisableCloseButton : false,
+ ttl : 7000,
+ disableCountDown : true
+ });
+ }
+ } else {
+ $scope.ShowResult = false;
+ $scope.showWarning = true;
+ $scope.warningMessage = "No result found for specified Date !!";
+ growl
+ .warning(
+ $scope.warningMessage,
+ {
+ title : 'Warning!',
+ globalDisableCloseButton : false,
+ ttl : 7000,
+ disableCountDown : true
+ });
+ }
+ },
+ function(response) {
+ $scope.ShowError = true;
+ $scope.errorMessage = "Something went wrong, Please try again !!";
+ growl
+ .error(
+ $scope.errorMessage,
+ {
+ title : 'Error!',
+ globalDisableCloseButton : false,
+ ttl : 7000,
+ disableCountDown : true
+ });
+ console
+ .log(
+ "--ReportController::getdata::Error--",
+ response);
+ });
+ }
+ }
+
+ // FUNCTION WILL BE CALLED WHEN USER CLICK DOWNLOAD
+ // FROM UI
+ $scope.exportToExcel = function(tableId) { // ex:
+ // '#my-table'
+ var exportHref = Excel.tableToExcel(tableId,
+ 'export');
+ $timeout(function() {
+ location.href = exportHref;
+ }, 100); // trigger download
+
+ console
+ .log("--ReportController::exportToexcel--");
+ }
+
+ $scope.createTestReportModel = function(result) {
+
+ $scope.showError = false;
+ $scope.showWarning = false;
+ $scope.objTestReportModel = result;
+ $scope.objTestModel = [];
+
+ if ($scope.objTestReportModel.length >= 1) {
+ for (var i = 0; i < $scope.objTestReportModel.length; i++) {
+ var objTestReport = {};
+ objTestReport.vnfname = $scope.objTestReportModel[i].vnfname;
+ objTestReport.vnfid = $scope.objTestReportModel[i].vnfid;
+ objTestReport.versionNo = $scope.objTestReportModel[i].vnfversion;
+ objTestReport.createdAt = $scope.objTestReportModel[i].creationdate;
+ objTestReport.updatedAt = $scope.objTestReportModel[i].lastupdated;
+ objTestReport.status = $scope.objTestReportModel[i].status;
+ objTestReport.Id = $scope.objTestReportModel[i].id;
+ // objTestReport.configinfo =
+ // $scope.objVersionModel[i].configinfo;
+ $scope.objTestModel.push(objTestReport);
+ console
+ .log(
+ "--ReportController::CreateTestReportModel--",
+ JSON
+ .stringify($scope.objTestModel));
+
+ }
+ $scope.showresult = true;
+ $scope.pagination = true;
+ }
+ console
+ .log("--ReportController::createTestReportModel::final TestReportModel--"
+ + JSON
+ .stringify($scope.objTestModel));
+ $scope.csvOrder = [ 'testname', 'timeStamp',
+ 'status', 'statistics', 'avgTime',
+ 'result' ];
+
+ // init
+ $scope.sort = {
+ sortingOrder : 'createdAt',
+ reverse : false
+ };
+
+ var searchMatch = function(haystack, needle) {
+ if (!needle) {
+ return true;
+ }
+ return haystack.toLowerCase().indexOf(
+ needle.toLowerCase()) !== -1;
+ };
+
+ // init the filtered items
+ $scope.search = function() {
+ $scope.filteredItems = $filter('filter')(
+ $scope.objTestModel,
+ function(item) {
+ for ( var attr in item) {
+ if (searchMatch(item[attr],
+ $scope.query))
+ return true;
+ }
+ return false;
+ });
+ // take care of the sorting order
+ if ($scope.sort.sortingOrder !== '') {
+ $scope.filteredItems = $filter(
+ 'orderBy')(
+ $scope.filteredItems,
+ $scope.sort.sortingOrder,
+ $scope.sort.reverse);
+ }
+ $scope.currentPage = 0;
+ // now group by pages
+ $scope.groupToPages();
+ };
+
+ // calculate page in place
+ $scope.groupToPages = function() {
+ $scope.pagedItems = [];
+
+ for (var i = 0; i < $scope.filteredItems.length; i++) {
+ if (i % $scope.itemsPerPage === 0) {
+ $scope.pagedItems[Math.floor(i
+ / $scope.itemsPerPage)] = [ $scope.filteredItems[i] ];
+ } else {
+ $scope.pagedItems[Math.floor(i
+ / $scope.itemsPerPage)]
+ .push($scope.filteredItems[i]);
+ }
+ }
+ };
+
+ $scope.range = function(size, start, end) {
+ var ret = [];
+ console.log(size, start, end);
+
+ if (size < end) {
+ end = size;
+ start = size - $scope.gap;
+ }
+ for (var i = start; i < end; i++) {
+ ret.push(i);
+ }
+ console.log(ret);
+ return ret;
+ };
+
+ $scope.prevPage = function() {
+ if ($scope.currentPage > 0) {
+ $scope.currentPage--;
+ }
+ };
+
+ $scope.nextPage = function() {
+ if ($scope.currentPage < $scope.pagedItems.length - 1) {
+ $scope.currentPage++;
+ }
+ };
+
+ $scope.setPage = function() {
+ $scope.currentPage = this.n;
+ };
+
+ // functions have been describe process the data
+ // for display
+ $scope.search();
+
+ }
+
+ } ]); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-services/sdnc-compareConfig-service.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-services/sdnc-compareConfig-service.js
new file mode 100644
index 00000000..7b5c688e
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-services/sdnc-compareConfig-service.js
@@ -0,0 +1,166 @@
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP : SDNC-FEATURES
+ * ================================================================================
+ * Copyright 2018 TechMahindra
+ *=================================================================================
+ * 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=========================================================
+ */
+myApp.service('deviceConfigService', ['$http','VNF_API_BASE', function($http, VNF_API_BASE) {
+
+
+ this.getAllVNFFromRc = function() {
+ var rctestlist = {};
+ return $http.get('/getAllBackupVnfIds')
+ .then(function(response) {
+ console.log("---validationTestService::getAllVNF From Restconf::TestResponse---" + JSON.stringify(response));
+ vnflist = response.data;
+ return vnflist;
+ },
+ function(response) {
+ console.log("validationTestService::getAllVNF From Restconf::Status Code", response.status);
+ return response;
+ });
+
+ };
+
+
+ this.getAllVNF = function() {
+ var testlist = {};
+ return $http.get('/getAllBackupVnfIds')
+ .then(function(response) {
+ console.log("---validationTestService::getAllVNF::TestResponse---" + JSON.stringify(response));
+ vnflist = response.data;
+ return vnflist;
+ },
+ function(response) {
+ console.log("validationTestService::getAllVNF::Status Code", response.status);
+ return response;
+ });
+
+ };
+
+ this.getVersions = function(vnfId) {
+
+ var data = {};
+// data.selectedVnfName = vnfName;
+// data.selectedVnfType = vnfType;
+ data.vnfId = vnfId;
+ var config = {
+ params: data,
+ headers: {
+ 'Accept': 'application/json'
+ }
+ };
+
+ console.log("deviceConfigService::getVersions::config", JSON.stringify(config));
+
+ var baseUrl = VNF_API_BASE;
+ // var baseApi='runtest';
+ // var apiUrl= baseUrl + baseApi;
+
+ // Call the pre validation service
+ var request = {
+ method: 'GET',
+ url: '/configDetailsById/'+vnfId,
+ //url: 'sdnc-stubs/getAllConfigForVNF.json',
+ //data: data,
+
+ headers: {
+ 'Content-Type': 'application/json',
+ }
+ };
+
+ return $http(request)
+ .then(function(response) {
+ console.log("---deviceConfigService::getVersions::Response---" + JSON.stringify(response));
+ return response;
+ },
+ function(response) {
+ console.log("--deviceConfigService::getVersions::Status Code--", response.status);
+ return response;
+ });
+
+
+ }
+
+ this.invokeBackup = function() {
+ var testlist = {};
+ return $http.get('/backup')
+ .then(function(response) {
+ console.log("---validationTestService::getAllVNF::TestResponse---" + response);
+ vnflist = response;
+ return vnflist;
+ },
+ function(response) {
+ console.log("validationTestService::getAllVNF::Status Code", response);
+ return response;
+ });
+
+ };
+
+ this.getlastupdated = function() {
+ var testlist = {};
+ return $http.get('/backuptime')
+ .then(function(response) {
+ console.log("---validationTestService::getBackuptime::---" + response);
+ return response;
+ })
+
+ };
+
+ this.runApplyconfig = function(vnfid, newConfig) {
+
+
+
+ var url='/vnf-list/'+vnfid;
+
+
+
+ var config = {
+ headers : {
+ 'Content-Type': 'application/json'
+ }
+ }
+
+ $http.put(url, newConfig, config)
+ .success(function(newConfig) {
+ console.log("---validationTestService::getAllVNF::TestResponse---" ,response);
+
+ return newConfig;
+ },
+ function(newConfig) {
+ console.log("validationTestService::getAllVNF::Status Code", response);
+ return newConfig;
+ });
+ /*.then(function (response) {
+ if (response.data)
+ { $scope.successMessage1 = "Put Data Method Executed Successfully!";
+ return response;
+ }
+ var status= response.status;
+ if (status == 200){
+ $window.alert("applyed successfully ");
+ }
+ var successMessage1 = "Put Data Method Executed Successfully!";
+ },
+ function (response) {
+ var successMessage1 = "Service not Exists";
+ });
+
+ */
+ };
+
+
+}]); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-services/sdnc-validationTest-service.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-services/sdnc-validationTest-service.js
new file mode 100644
index 00000000..36c916c5
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-services/sdnc-validationTest-service.js
@@ -0,0 +1,66 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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=========================================================
+*/
+myApp.service('validationTestService', ['$http','CERTIFICATION_API_BASE', function($http,CERTIFICATION_API_BASE) {
+
+ this.runPretest = function(vnfList, validationTestType) {
+
+
+ var data = {};
+ data.vnfList = vnfList;
+ data.validationTestType = validationTestType;
+
+ var config = {
+ params: data,
+ headers: {
+ 'Accept': 'application/json'
+ }
+ };
+
+ console.log("validationTestService::runPretest::config", JSON.stringify(config));
+
+ var baseUrl = CERTIFICATION_API_BASE;
+ var baseApi='runtest';
+ var apiUrl= baseUrl + baseApi;
+
+ // Call the pre validation service
+ var request = {
+ method: 'POST',
+ url: apiUrl,
+ data: data,
+ headers: {
+ 'Content-Type': undefined
+ }
+ };
+
+ // // SEND VNF FOR VALIDATION
+ return $http(request)
+ .then(function(response) {
+ console.log("---validationTestService::runPretest::Response---" + JSON.stringify(response));
+ return response.data;
+ },
+ function(response) {
+ console.log("--validationTestService::Status Code--", response.status);
+ return response;
+ });
+
+
+ }
+
+}]); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-services/sdnc-viewReport-service.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-services/sdnc-viewReport-service.js
new file mode 100644
index 00000000..82ab83aa
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/js/sdnc-services/sdnc-viewReport-service.js
@@ -0,0 +1,101 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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=========================================================
+*/
+
+myApp.service('viewReportService', ['$http', function($http) {
+
+this.getAllVNF = function() {
+ var testlist = {};
+ return $http.get('/getAllBackupVnfIds')
+ .then(function(response) {
+ console.log("---validationTestService::getAllVNF::TestResponse---" + JSON.stringify(response));
+ vnflist = response.data;
+ return vnflist;
+ },
+ function(response) {
+ console.log("validationTestService::getAllVNF::Status Code", response.status);
+ return response;
+ });
+
+ };
+
+ this.getData = function(startDate, endDate) {
+
+ var data = {};
+ if (startDate != null && endDate != null) {
+
+ data.startdate = startDate;
+ data.enddate = endDate;
+
+ }
+ var request = {
+ method: 'GET',
+ url: '/getVnfDetBetDates/'+startDate+'/'+endDate+'/',
+
+ headers: {
+ 'Content-Type': 'application/json',
+ }
+ };
+
+ return $http(request)
+ .then(function(response) {
+ console.log("---deviceConfigService::getVersions::Response---" + JSON.stringify(response));
+ return response;
+ },
+ function(response) {
+ console.log("--deviceConfigService::getVersions::Status Code--", response.status);
+ return response;
+ });
+
+ }
+
+
+ this.getDataById = function(selectedValueVnf,startDate, endDate) {
+
+ var data = {};
+ if (startDate != null && endDate != null) {
+
+ data.startdate = startDate;
+ data.enddate = endDate;
+
+ }
+ var request = {
+ method: 'GET',
+ url: '/getVnfDetByVnfidBetDates/'+selectedValueVnf+'/'+startDate+'/'+endDate+'/',
+
+ headers: {
+ 'Content-Type': 'application/json',
+ }
+ };
+
+ return $http(request)
+ .then(function(response) {
+ console.log("---deviceConfigService::getVersions::Response---" + JSON.stringify(response));
+ return response;
+ },
+ function(response) {
+ console.log("--deviceConfigService::getVersions::Status Code--", response.status);
+ return response;
+ });
+
+ }
+
+
+
+}]); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.css b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.css
new file mode 100644
index 00000000..3fcd12db
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.css
@@ -0,0 +1,88 @@
+/**
+ * angular-growl-v2 - v0.7.5 - 2015-06-17
+ * http://janstevens.github.io/angular-growl-2
+ * Copyright (c) 2015 Marco Rinck,Jan Stevens; Licensed MIT
+ */
+/*
+ * growl-container styles
+ */
+/*
+ * growl-item styles
+ */
+.growl-container > .growl-item {
+ padding: 10px;
+ padding-right: 35px;
+ margin-bottom: 10px;
+ cursor: pointer;
+}
+
+.growl-container > button {
+ border: none;
+ outline:none;
+}
+.growl-container > .growl-item.ng-enter,
+.growl-container > .growl-item.ng-leave {
+ -webkit-transition:0.5s linear all;
+ -moz-transition:0.5s linear all;
+ -o-transition:0.5s linear all;
+ transition:0.5s linear all;
+}
+
+.growl-container > .growl-item.ng-enter,
+.growl-container > .growl-item.ng-leave.ng-leave-active {
+ opacity:0;
+}
+.growl-container > .growl-item.ng-leave,
+.growl-container > .growl-item.ng-enter.ng-enter-active {
+ opacity:1;
+}
+
+.growl-container > div.growl-item {
+ background-position: 12px center;
+ background-repeat: no-repeat;
+}
+
+/*
+ * growl-title styles
+ */
+.growl-title {
+ font-size: 16px;
+}
+.growl-item.icon > .growl-title {
+ margin: 0 0 0 40px;
+}
+
+/*
+ * growl-message styles
+ */
+.growl-item.icon > .growl-message {
+ margin: 0 0 0 40px;
+}
+
+/*
+ * growl background images
+ */
+.growl-container > .alert-info.icon {
+ /* for the white images
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=");
+ */
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAt9JREFUeNpi/P//PwMDAwMDIyMjAzbQsXpv2ePXH5Kevfsk9/3nL1YGBgYGAR6ub7Ii/JckBPmmFAc5rMSmD24uLgsmbzqsdv7e0wPn7z6VZMADLDTk72jLSbjk+No8JNqC1pV7GvddvF3z7vM3JgYigAgf918HPZXW6nCXeoIWtK/aU7Pq8MVmbAZxsrH+52Rn/Y/L4iAr3d7aSLcSZAtQFE7ZfET84OW79bhcGmilG+9hrJGAS37PhduFkzcdVkMWQ7HgzrM3219++MLCQCb49O0H08X7z/Yii8GDaOLGQ85L9p/b8/ffP5wG8HCy/+dmZ/1LyBERdoaFZSGOE1B88Pzd50p8hjMwMDB8+f6TkRgfPnr9PgPGhit++u6jIT5NxioyT1SlRHtZmJke7Dh7Y82bT1+Zcal98PKdEkYcvPn4hQ+fBWfvPJF58+lLcHGQwwZmJsb/+NQ+e/eJFWskEwJffvySIDXi4RawsrD8Y6AS4OPi+IdhgTAv13tqWSDEy/UTwwJ5McGd1LJAQUzwCoYFInzcrTyc7P+JMQBfcDIzMTEoiAsVYViQ62d7y0FXeQW+cJUS4tvIwMDAoCMvsZ+NFXt2MFGVuZ/vb3cEIyfDCruoriXvrz9+KYCuUVlC+CsbK8tvBgYGBn5ujjdP3nyUe/LmAxuyGnEBnj8+ZtoqOb42D2HmYjjDTE02+vGbD1u+fP+JUkHcffGWG4krgM2HzgZqmej1Atb6YOLGQ6anbz/ecfXhCyFi4kRGROCXs76KV0GA/V6iazQGBgaG6oXb1u+5eDvg1+8/eC0wV5e7PyMnVImkKhO5jnj7+WvD+8/fzX/++cPLysz8jZeT/d6fv/94D1+95/T9129GBgYGhhhH4wjk+ploC/CBiRsP2Zy982T95QfPRTRlxT8sK4sRRLeA4f///wgOmaBh6c45tmVT/nWs3luGbMH///+pYwGsFVI+b8sedAsAAwBDyFfm+mD7RwAAAABJRU5ErkJggg==");
+}
+.growl-container > .alert-error.icon {
+ /* for the white images
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=");
+ */
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAwBJREFUeNqsll1IU2EYx5+zj7Ozdo477sOPuZiJ+Nlm2CRZ6yJKJcGICDRvEjY2+rg0EIkuxLzRC+lGEUZGRJd1EQahoikUiBVZF64hzAYqhlvbztzZOdvpavNsunOm9b96X97nfX7P877ned6DcBwHCIKAkNY8HlMkEHge9vutusbGSUyrfXS2ry8OIuI4DpB8gDWPx8RQVHd8b69rZ3X1IkNRGSOUIFKaurqfp0pK3spx/F2T2z0nCFgaHPzBJZNokqZVSZpWJsJhFbW9LYcCJVepOFV5eUSmVFJShYJi9/eJFMMork5MFMsAAP5sbNTs7+7KxBzJMIxj4/FD6TIUhYR8viIAKMpdkwAAKNTqmJBjRCqFM52dkzdnZiR1PT2XNPX1vwvNTgIAIJHJWCGjIpMp2tLffxcAwOJyLWtqa0fFHEtR9AAgx/E9wShyA0CQhBgAVatZfgYx+M9CCSKeAcgwbFfIOB4M4scG4HgoA0DV6gUh4xTDSPjzJE1XiQGUOt3XAwCOvxAypkOhLECKZXUF1MbnDMDscPjxioq4WLvgZWAQBRDEywwAAAA3GjcEj4llG9NjNhYrE7Ilq6vDFqfTmwVQarVzQpsSkUhXZhyNakUAbzLVz7uUxwqSvJ973mkFvd7eldFReZKmjZvz8zqhqsc0mieZOb+bfhwamv21sHDlX75/vcUSuDw+fjrdTbOiVRkM99IlfhJJURS0DQ23D/WitCxOp7fUav1y1ObimpqQqb39lcFm+yLDMO4om/LW1mWLy7WcFwAAoK6svKbU69ncyMpaWs5dGBjotQ8PNxtstve5+zCNJkkYjbeO7KZ8mZ3OnQq7/WFW5SYSwFBUNwDA9+lpMrq1dZ6/riDJlKmt7brZ6dw5dOn5nsxPIyOvN2dnb2SVv17PMpGIlP/oKEgyVdnR0dXkds8c603OB8mNPJ/zggAAACtjY08Di4sP+I++XKXiSq3WD4TReMfscPhP9FfB17epKXvQ53sWXF+vKmluXhJzzAf8HQAC8i1VVpW6ogAAAABJRU5ErkJggg==");
+}
+.growl-container > .alert-success.icon {
+ /* for the white images
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==");
+ */
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAASZJREFUeNrs1bFKA0EQgOF/LyksrkgXi8wbpLTIFEICgnkACxGsbCzdzs5CxCZwvoGFhYUgNmJlJ2wgD6DIlSm0T382d3IkBnOX3S4DW9wsfMssszcmyzJCRkTgCH6A8Ymp1S3gFDgBxsBV0yPeBO6AgzzVBVrGI35fwouYRQFxgCcTEP8CdqOA+MAlLjUB8Y9abVoFBzBqtQWcAfvAM3DjEjfzgRcv+SJfPeAScGq14wMvDtiby3WBiVrdWRcHaIhKG+jP5WPgSFTeRSWtixcVjIC3P/Zi4AGY1MV/uyj/Sd0Chys200r4Qpuq1Wvg3BcO0Ch/TMfTV1H5BoZLZkUlfOlDU6vD/P7jdfCFCkqVpKLyAmwDHeAROHaJ+6w80TZD/7/4GQBAp3eJ4awpVwAAAABJRU5ErkJggg==");
+}
+.growl-container > .alert-warning.icon {
+ /* for the white images
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=");
+ */
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAdhJREFUeNrUlr9LI0EUxz9RixRXWObQwsKAdhJksAjYWlpaeBgYAyciKCh3BzrCgMRf4Fml8Abs9OD+geu0k1GInQcpziLCFXtgkWKLQCx8QtjLHqtG0AfDsu/tzJvv9/vezKaazSYvaV28JjNajRqtJl8SwR6wY7RKdzyB0WoKyAODwGLSeamEi6eBKlCTMQFkrfN/OoXgM5ABisAC0ABKSSZ2J9j9AHAEbFvnv59Wburjub6/gBnP9f08rdzUnougBFwDGw8O6/w34EREfzpFRqs8MAXMWefDSHgOGDFaTT9JZKNVD3AOXFjni/J+IOEV63xgtFoF5kXw+mMRFETYFaGlIb4C8E6+2QQC4NOjKDJa9Qr3S9b525ZQvfUpSYvAshRDYgQl4Jd1/jjiD2ThoEXwM+AHUE6UwGg1BsxKvUetISNqX4C8dHt8ghYhD63zl20WugDOok7rfA3YAvaE3lgEy0A/sBZD3RLwISa2C4TRDu+KdOw6sNHujJGdVYHfRqvBNihCoeqj0PwPgrIcZF9jdhgCt1JBYbsPpChOgAOh+z6BiDMhZdmImRwCWeC9cM5/aBwSukkJ9CsgDex36PKbkSYd7hFRMhJY7/AtW069+b+KuwEAfk2f1A5JePkAAAAASUVORK5CYII=");
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.js
new file mode 100644
index 00000000..2bc3e956
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.js
@@ -0,0 +1,419 @@
+/**
+ * angular-growl-v2 - v0.7.5 - 2015-06-17
+ * http://janstevens.github.io/angular-growl-2
+ * Copyright (c) 2015 Marco Rinck,Jan Stevens; Licensed MIT
+ */
+angular.module('angular-growl', []);
+angular.module('angular-growl').directive('growl', [function () {
+ 'use strict';
+ return {
+ restrict: 'A',
+ templateUrl: 'templates/growl/growl.html',
+ replace: false,
+ scope: {
+ reference: '@',
+ inline: '=',
+ limitMessages: '='
+ },
+ controller: [
+ '$scope',
+ '$timeout',
+ 'growl',
+ 'growlMessages',
+ function ($scope, $timeout, growl, growlMessages) {
+ $scope.referenceId = $scope.reference || 0;
+ growlMessages.initDirective($scope.referenceId, $scope.limitMessages);
+ $scope.growlMessages = growlMessages;
+ $scope.inlineMessage = angular.isDefined($scope.inline) ? $scope.inline : growl.inlineMessages();
+ $scope.$watch('limitMessages', function (limitMessages) {
+ var directive = growlMessages.directives[$scope.referenceId];
+ if (!angular.isUndefined(limitMessages) && !angular.isUndefined(directive)) {
+ directive.limitMessages = limitMessages;
+ }
+ });
+ $scope.stopTimeoutClose = function (message) {
+ if (!message.clickToClose) {
+ angular.forEach(message.promises, function (promise) {
+ $timeout.cancel(promise);
+ });
+ if (message.close) {
+ growlMessages.deleteMessage(message);
+ } else {
+ message.close = true;
+ }
+ }
+ };
+ $scope.alertClasses = function (message) {
+ return {
+ 'alert-success': message.severity === 'success',
+ 'alert-error': message.severity === 'error',
+ 'alert-danger': message.severity === 'error',
+ 'alert-info': message.severity === 'info',
+ 'alert-warning': message.severity === 'warning',
+ 'icon': message.disableIcons === false,
+ 'alert-dismissable': !message.disableCloseButton
+ };
+ };
+ $scope.showCountDown = function (message) {
+ return !message.disableCountDown && message.ttl > 0;
+ };
+ $scope.wrapperClasses = function () {
+ var classes = {};
+ classes['growl-fixed'] = !$scope.inlineMessage;
+ classes[growl.position()] = true;
+ return classes;
+ };
+ $scope.computeTitle = function (message) {
+ var ret = {
+ 'success': 'Success',
+ 'error': 'Error',
+ 'info': 'Information',
+ 'warn': 'Warning'
+ };
+ return ret[message.severity];
+ };
+ }
+ ]
+ };
+ }]);
+angular.module('angular-growl').run([
+ '$templateCache',
+ function ($templateCache) {
+ 'use strict';
+ if ($templateCache.get('templates/growl/growl.html') === undefined) {
+ $templateCache.put('templates/growl/growl.html', '<div class="growl-container" ng-class="wrapperClasses()">' + '<div class="growl-item alert" ng-repeat="message in growlMessages.directives[referenceId].messages" ng-class="alertClasses(message)" ng-click="stopTimeoutClose(message)">' + '<button type="button" class="close" data-dismiss="alert" aria-hidden="true" ng-click="growlMessages.deleteMessage(message)" ng-show="!message.disableCloseButton">&times;</button>' + '<button type="button" class="close" aria-hidden="true" ng-show="showCountDown(message)">{{message.countdown}}</button>' + '<h4 class="growl-title" ng-show="message.title" ng-bind="message.title"></h4>' + '<div class="growl-message" ng-bind-html="message.text"></div>' + '</div>' + '</div>');
+ }
+ }
+]);
+angular.module('angular-growl').provider('growl', function () {
+ 'use strict';
+ var _ttl = {
+ success: null,
+ error: null,
+ warning: null,
+ info: null
+ }, _messagesKey = 'messages', _messageTextKey = 'text', _messageTitleKey = 'title', _messageSeverityKey = 'severity', _onlyUniqueMessages = true, _messageVariableKey = 'variables', _referenceId = 0, _inline = false, _position = 'top-right', _disableCloseButton = false, _disableIcons = false, _reverseOrder = false, _disableCountDown = false, _translateMessages = true;
+ this.globalTimeToLive = function (ttl) {
+ if (typeof ttl === 'object') {
+ for (var k in ttl) {
+ if (ttl.hasOwnProperty(k)) {
+ _ttl[k] = ttl[k];
+ }
+ }
+ } else {
+ for (var severity in _ttl) {
+ if (_ttl.hasOwnProperty(severity)) {
+ _ttl[severity] = ttl;
+ }
+ }
+ }
+ return this;
+ };
+ this.globalTranslateMessages = function (translateMessages) {
+ _translateMessages = translateMessages;
+ return this;
+ };
+ this.globalDisableCloseButton = function (disableCloseButton) {
+ _disableCloseButton = disableCloseButton;
+ return this;
+ };
+ this.globalDisableIcons = function (disableIcons) {
+ _disableIcons = disableIcons;
+ return this;
+ };
+ this.globalReversedOrder = function (reverseOrder) {
+ _reverseOrder = reverseOrder;
+ return this;
+ };
+ this.globalDisableCountDown = function (countDown) {
+ _disableCountDown = countDown;
+ return this;
+ };
+ this.messageVariableKey = function (messageVariableKey) {
+ _messageVariableKey = messageVariableKey;
+ return this;
+ };
+ this.globalInlineMessages = function (inline) {
+ _inline = inline;
+ return this;
+ };
+ this.globalPosition = function (position) {
+ _position = position;
+ return this;
+ };
+ this.messagesKey = function (messagesKey) {
+ _messagesKey = messagesKey;
+ return this;
+ };
+ this.messageTextKey = function (messageTextKey) {
+ _messageTextKey = messageTextKey;
+ return this;
+ };
+ this.messageTitleKey = function (messageTitleKey) {
+ _messageTitleKey = messageTitleKey;
+ return this;
+ };
+ this.messageSeverityKey = function (messageSeverityKey) {
+ _messageSeverityKey = messageSeverityKey;
+ return this;
+ };
+ this.onlyUniqueMessages = function (onlyUniqueMessages) {
+ _onlyUniqueMessages = onlyUniqueMessages;
+ return this;
+ };
+ this.serverMessagesInterceptor = [
+ '$q',
+ 'growl',
+ function ($q, growl) {
+ function checkResponse(response) {
+ if (response !== undefined && response.data && response.data[_messagesKey] && response.data[_messagesKey].length > 0) {
+ growl.addServerMessages(response.data[_messagesKey]);
+ }
+ }
+ return {
+ 'response': function (response) {
+ checkResponse(response);
+ return response;
+ },
+ 'responseError': function (rejection) {
+ checkResponse(rejection);
+ return $q.reject(rejection);
+ }
+ };
+ }
+ ];
+ this.$get = [
+ '$rootScope',
+ '$interpolate',
+ '$sce',
+ '$filter',
+ '$timeout',
+ 'growlMessages',
+ function ($rootScope, $interpolate, $sce, $filter, $timeout, growlMessages) {
+ var translate;
+ growlMessages.onlyUnique = _onlyUniqueMessages;
+ growlMessages.reverseOrder = _reverseOrder;
+ try {
+ translate = $filter('translate');
+ } catch (e) {
+ }
+ function broadcastMessage(message) {
+ if (translate && message.translateMessage) {
+ message.text = translate(message.text, message.variables) || message.text;
+ message.title = translate(message.title) || message.title;
+ } else {
+ var polation = $interpolate(message.text);
+ message.text = polation(message.variables);
+ }
+ var addedMessage = growlMessages.addMessage(message);
+ $rootScope.$broadcast('growlMessage', message);
+ $timeout(function () {
+ }, 0);
+ return addedMessage;
+ }
+ function sendMessage(text, config, severity) {
+ var _config = config || {}, message;
+ message = {
+ text: text,
+ title: _config.title,
+ severity: severity,
+ ttl: _config.ttl || _ttl[severity],
+ variables: _config.variables || {},
+ disableCloseButton: _config.disableCloseButton === undefined ? _disableCloseButton : _config.disableCloseButton,
+ disableIcons: _config.disableIcons === undefined ? _disableIcons : _config.disableIcons,
+ disableCountDown: _config.disableCountDown === undefined ? _disableCountDown : _config.disableCountDown,
+ position: _config.position || _position,
+ referenceId: _config.referenceId || _referenceId,
+ translateMessage: _config.translateMessage === undefined ? _translateMessages : _config.translateMessage,
+ destroy: function () {
+ growlMessages.deleteMessage(message);
+ },
+ setText: function (newText) {
+ message.text = $sce.trustAsHtml(String(newText));
+ },
+ onclose: _config.onclose,
+ onopen: _config.onopen
+ };
+ return broadcastMessage(message);
+ }
+ function warning(text, config) {
+ return sendMessage(text, config, 'warning');
+ }
+ function error(text, config) {
+ return sendMessage(text, config, 'error');
+ }
+ function info(text, config) {
+ return sendMessage(text, config, 'info');
+ }
+ function success(text, config) {
+ return sendMessage(text, config, 'success');
+ }
+ function general(text, config, severity) {
+ severity = (severity || 'error').toLowerCase();
+ return sendMessage(text, config, severity);
+ }
+ function addServerMessages(messages) {
+ if (!messages || !messages.length) {
+ return;
+ }
+ var i, message, severity, length;
+ length = messages.length;
+ for (i = 0; i < length; i++) {
+ message = messages[i];
+ if (message[_messageTextKey]) {
+ severity = (message[_messageSeverityKey] || 'error').toLowerCase();
+ var config = {};
+ config.variables = message[_messageVariableKey] || {};
+ config.title = message[_messageTitleKey];
+ sendMessage(message[_messageTextKey], config, severity);
+ }
+ }
+ }
+ function onlyUnique() {
+ return _onlyUniqueMessages;
+ }
+ function reverseOrder() {
+ return _reverseOrder;
+ }
+ function inlineMessages() {
+ return _inline;
+ }
+ function position() {
+ return _position;
+ }
+ return {
+ warning: warning,
+ error: error,
+ info: info,
+ success: success,
+ general: general,
+ addServerMessages: addServerMessages,
+ onlyUnique: onlyUnique,
+ reverseOrder: reverseOrder,
+ inlineMessages: inlineMessages,
+ position: position
+ };
+ }
+ ];
+});
+angular.module('angular-growl').service('growlMessages', [
+ '$sce',
+ '$timeout',
+ function ($sce, $timeout) {
+ 'use strict';
+ var self = this;
+ this.directives = {};
+ var preloadDirectives = {};
+ function preLoad(referenceId) {
+ var directive;
+ if (preloadDirectives[referenceId]) {
+ directive = preloadDirectives[referenceId];
+ } else {
+ directive = preloadDirectives[referenceId] = { messages: [] };
+ }
+ return directive;
+ }
+ function directiveForRefId(referenceId) {
+ var refId = referenceId || 0;
+ return self.directives[refId] || preloadDirectives[refId];
+ }
+ this.initDirective = function (referenceId, limitMessages) {
+ if (preloadDirectives[referenceId]) {
+ this.directives[referenceId] = preloadDirectives[referenceId];
+ this.directives[referenceId].limitMessages = limitMessages;
+ } else {
+ this.directives[referenceId] = {
+ messages: [],
+ limitMessages: limitMessages
+ };
+ }
+ return this.directives[referenceId];
+ };
+ this.getAllMessages = function (referenceId) {
+ referenceId = referenceId || 0;
+ var messages;
+ if (directiveForRefId(referenceId)) {
+ messages = directiveForRefId(referenceId).messages;
+ } else {
+ messages = [];
+ }
+ return messages;
+ };
+ this.destroyAllMessages = function (referenceId) {
+ var messages = this.getAllMessages(referenceId);
+ for (var i = messages.length - 1; i >= 0; i--) {
+ messages[i].destroy();
+ }
+ var directive = directiveForRefId(referenceId);
+ if (directive) {
+ directive.messages = [];
+ }
+ };
+ this.addMessage = function (message) {
+ var directive, messages, found, msgText;
+ if (this.directives[message.referenceId]) {
+ directive = this.directives[message.referenceId];
+ } else {
+ directive = preLoad(message.referenceId);
+ }
+ messages = directive.messages;
+ if (this.onlyUnique) {
+ angular.forEach(messages, function (msg) {
+ msgText = $sce.getTrustedHtml(msg.text);
+ if (message.text === msgText && message.severity === msg.severity && message.title === msg.title) {
+ found = true;
+ }
+ });
+ if (found) {
+ return;
+ }
+ }
+ message.text = $sce.trustAsHtml(String(message.text));
+ if (message.ttl && message.ttl !== -1) {
+ message.countdown = message.ttl / 1000;
+ message.promises = [];
+ message.close = false;
+ message.countdownFunction = function () {
+ if (message.countdown > 1) {
+ message.countdown--;
+ message.promises.push($timeout(message.countdownFunction, 1000));
+ } else {
+ message.countdown--;
+ }
+ };
+ }
+ if (angular.isDefined(directive.limitMessages)) {
+ var diff = messages.length - (directive.limitMessages - 1);
+ if (diff > 0) {
+ messages.splice(directive.limitMessages - 1, diff);
+ }
+ }
+ if (this.reverseOrder) {
+ messages.unshift(message);
+ } else {
+ messages.push(message);
+ }
+ if (typeof message.onopen === 'function') {
+ message.onopen();
+ }
+ if (message.ttl && message.ttl !== -1) {
+ var self = this;
+ message.promises.push($timeout(angular.bind(this, function () {
+ self.deleteMessage(message);
+ }), message.ttl));
+ message.promises.push($timeout(message.countdownFunction, 1000));
+ }
+ return message;
+ };
+ this.deleteMessage = function (message) {
+ var messages = this.getAllMessages(message.referenceId), index = messages.indexOf(message);
+ if (index > -1) {
+ messages[index].close = true;
+ messages.splice(index, 1);
+ }
+ if (typeof message.onclose === 'function') {
+ message.onclose();
+ }
+ };
+ }
+]); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.min.css b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.min.css
new file mode 100644
index 00000000..0de520b3
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.min.css
@@ -0,0 +1,7 @@
+/**
+ * angular-growl-v2 - v0.7.5 - 2015-06-17
+ * http://janstevens.github.io/angular-growl-2
+ * Copyright (c) 2015 Marco Rinck,Jan Stevens; Licensed MIT
+ */
+
+.growl-container.growl-fixed{position:fixed;float:right;width:90%;max-width:400px;z-index:9999}.growl-container.growl-fixed.top-right{top:10px;right:15px}.growl-container.growl-fixed.bottom-right{bottom:10px;right:15px}.growl-container.growl-fixed.middle-right{top:49%;right:15px}.growl-container.growl-fixed.top-left{top:10px;left:15px}.growl-container.growl-fixed.bottom-left{bottom:10px;left:15px}.growl-container.growl-fixed.middle-left{top:49%;left:15px}.growl-container.growl-fixed.top-center{top:10px;left:50%;margin-left:-200px}.growl-container.growl-fixed.bottom-center{bottom:10px;left:50%;margin-left:-200px}.growl-container.growl-fixed.middle-center{top:49%;left:50%;margin-left:-200px}.growl-container>.growl-item{padding:10px;padding-right:35px;margin-bottom:10px;cursor:pointer}.growl-container>button{border:0;outline:0}.growl-container>.growl-item.ng-enter,.growl-container>.growl-item.ng-leave{-webkit-transition:.5s linear all;-moz-transition:.5s linear all;-o-transition:.5s linear all;transition:.5s linear all}.growl-container>.growl-item.ng-enter,.growl-container>.growl-item.ng-leave.ng-leave-active{opacity:0}.growl-container>.growl-item.ng-leave,.growl-container>.growl-item.ng-enter.ng-enter-active{opacity:1}.growl-container>div.growl-item{background-position:12px center;background-repeat:no-repeat}.growl-title{font-size:16px}.growl-item.icon>.growl-title{margin:0 0 0 40px}.growl-item.icon>.growl-message{margin:0 0 0 40px}.growl-container>.alert-info.icon{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAt9JREFUeNpi/P//PwMDAwMDIyMjAzbQsXpv2ePXH5Kevfsk9/3nL1YGBgYGAR6ub7Ii/JckBPmmFAc5rMSmD24uLgsmbzqsdv7e0wPn7z6VZMADLDTk72jLSbjk+No8JNqC1pV7GvddvF3z7vM3JgYigAgf918HPZXW6nCXeoIWtK/aU7Pq8MVmbAZxsrH+52Rn/Y/L4iAr3d7aSLcSZAtQFE7ZfET84OW79bhcGmilG+9hrJGAS37PhduFkzcdVkMWQ7HgzrM3219++MLCQCb49O0H08X7z/Yii8GDaOLGQ85L9p/b8/ffP5wG8HCy/+dmZ/1LyBERdoaFZSGOE1B88Pzd50p8hjMwMDB8+f6TkRgfPnr9PgPGhit++u6jIT5NxioyT1SlRHtZmJke7Dh7Y82bT1+Zcal98PKdEkYcvPn4hQ+fBWfvPJF58+lLcHGQwwZmJsb/+NQ+e/eJFWskEwJffvySIDXi4RawsrD8Y6AS4OPi+IdhgTAv13tqWSDEy/UTwwJ5McGd1LJAQUzwCoYFInzcrTyc7P+JMQBfcDIzMTEoiAsVYViQ62d7y0FXeQW+cJUS4tvIwMDAoCMvsZ+NFXt2MFGVuZ/vb3cEIyfDCruoriXvrz9+KYCuUVlC+CsbK8tvBgYGBn5ujjdP3nyUe/LmAxuyGnEBnj8+ZtoqOb42D2HmYjjDTE02+vGbD1u+fP+JUkHcffGWG4krgM2HzgZqmej1Atb6YOLGQ6anbz/ecfXhCyFi4kRGROCXs76KV0GA/V6iazQGBgaG6oXb1u+5eDvg1+8/eC0wV5e7PyMnVImkKhO5jnj7+WvD+8/fzX/++cPLysz8jZeT/d6fv/94D1+95/T9129GBgYGhhhH4wjk+ploC/CBiRsP2Zy982T95QfPRTRlxT8sK4sRRLeA4f///wgOmaBh6c45tmVT/nWs3luGbMH///+pYwGsFVI+b8sedAsAAwBDyFfm+mD7RwAAAABJRU5ErkJggg==")}.growl-container>.alert-error.icon{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAwBJREFUeNqsll1IU2EYx5+zj7Ozdo477sOPuZiJ+Nlm2CRZ6yJKJcGICDRvEjY2+rg0EIkuxLzRC+lGEUZGRJd1EQahoikUiBVZF64hzAYqhlvbztzZOdvpavNsunOm9b96X97nfX7P877ned6DcBwHCIKAkNY8HlMkEHge9vutusbGSUyrfXS2ry8OIuI4DpB8gDWPx8RQVHd8b69rZ3X1IkNRGSOUIFKaurqfp0pK3spx/F2T2z0nCFgaHPzBJZNokqZVSZpWJsJhFbW9LYcCJVepOFV5eUSmVFJShYJi9/eJFMMork5MFMsAAP5sbNTs7+7KxBzJMIxj4/FD6TIUhYR8viIAKMpdkwAAKNTqmJBjRCqFM52dkzdnZiR1PT2XNPX1vwvNTgIAIJHJWCGjIpMp2tLffxcAwOJyLWtqa0fFHEtR9AAgx/E9wShyA0CQhBgAVatZfgYx+M9CCSKeAcgwbFfIOB4M4scG4HgoA0DV6gUh4xTDSPjzJE1XiQGUOt3XAwCOvxAypkOhLECKZXUF1MbnDMDscPjxioq4WLvgZWAQBRDEywwAAAA3GjcEj4llG9NjNhYrE7Ilq6vDFqfTmwVQarVzQpsSkUhXZhyNakUAbzLVz7uUxwqSvJ973mkFvd7eldFReZKmjZvz8zqhqsc0mieZOb+bfhwamv21sHDlX75/vcUSuDw+fjrdTbOiVRkM99IlfhJJURS0DQ23D/WitCxOp7fUav1y1ObimpqQqb39lcFm+yLDMO4om/LW1mWLy7WcFwAAoK6svKbU69ncyMpaWs5dGBjotQ8PNxtstve5+zCNJkkYjbeO7KZ8mZ3OnQq7/WFW5SYSwFBUNwDA9+lpMrq1dZ6/riDJlKmt7brZ6dw5dOn5nsxPIyOvN2dnb2SVv17PMpGIlP/oKEgyVdnR0dXkds8c603OB8mNPJ/zggAAACtjY08Di4sP+I++XKXiSq3WD4TReMfscPhP9FfB17epKXvQ53sWXF+vKmluXhJzzAf8HQAC8i1VVpW6ogAAAABJRU5ErkJggg==")}.growl-container>.alert-success.icon{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAASZJREFUeNrs1bFKA0EQgOF/LyksrkgXi8wbpLTIFEICgnkACxGsbCzdzs5CxCZwvoGFhYUgNmJlJ2wgD6DIlSm0T382d3IkBnOX3S4DW9wsfMssszcmyzJCRkTgCH6A8Ymp1S3gFDgBxsBV0yPeBO6AgzzVBVrGI35fwouYRQFxgCcTEP8CdqOA+MAlLjUB8Y9abVoFBzBqtQWcAfvAM3DjEjfzgRcv+SJfPeAScGq14wMvDtiby3WBiVrdWRcHaIhKG+jP5WPgSFTeRSWtixcVjIC3P/Zi4AGY1MV/uyj/Sd0Chys200r4Qpuq1Wvg3BcO0Ch/TMfTV1H5BoZLZkUlfOlDU6vD/P7jdfCFCkqVpKLyAmwDHeAROHaJ+6w80TZD/7/4GQBAp3eJ4awpVwAAAABJRU5ErkJggg==")}.growl-container>.alert-warning.icon{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAdhJREFUeNrUlr9LI0EUxz9RixRXWObQwsKAdhJksAjYWlpaeBgYAyciKCh3BzrCgMRf4Fml8Abs9OD+geu0k1GInQcpziLCFXtgkWKLQCx8QtjLHqtG0AfDsu/tzJvv9/vezKaazSYvaV28JjNajRqtJl8SwR6wY7RKdzyB0WoKyAODwGLSeamEi6eBKlCTMQFkrfN/OoXgM5ABisAC0ABKSSZ2J9j9AHAEbFvnv59Wburjub6/gBnP9f08rdzUnougBFwDGw8O6/w34EREfzpFRqs8MAXMWefDSHgOGDFaTT9JZKNVD3AOXFjni/J+IOEV63xgtFoF5kXw+mMRFETYFaGlIb4C8E6+2QQC4NOjKDJa9Qr3S9b525ZQvfUpSYvAshRDYgQl4Jd1/jjiD2ThoEXwM+AHUE6UwGg1BsxKvUetISNqX4C8dHt8ghYhD63zl20WugDOok7rfA3YAvaE3lgEy0A/sBZD3RLwISa2C4TRDu+KdOw6sNHujJGdVYHfRqvBNihCoeqj0PwPgrIcZF9jdhgCt1JBYbsPpChOgAOh+z6BiDMhZdmImRwCWeC9cM5/aBwSukkJ9CsgDex36PKbkSYd7hFRMhJY7/AtW069+b+KuwEAfk2f1A5JePkAAAAASUVORK5CYII=")} \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.min.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.min.js
new file mode 100644
index 00000000..f2cad7ff
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl-v2/build/angular-growl.min.js
@@ -0,0 +1,6 @@
+/**
+ * angular-growl-v2 - v0.7.5 - 2015-06-17
+ * http://janstevens.github.io/angular-growl-2
+ * Copyright (c) 2015 Marco Rinck,Jan Stevens; Licensed MIT
+ */
+angular.module("angular-growl",[]),angular.module("angular-growl").directive("growl",[function(){"use strict";return{restrict:"A",templateUrl:"templates/growl/growl.html",replace:!1,scope:{reference:"@",inline:"=",limitMessages:"="},controller:["$scope","$timeout","growl","growlMessages",function(a,b,c,d){a.referenceId=a.reference||0,d.initDirective(a.referenceId,a.limitMessages),a.growlMessages=d,a.inlineMessage=angular.isDefined(a.inline)?a.inline:c.inlineMessages(),a.$watch("limitMessages",function(b){var c=d.directives[a.referenceId];angular.isUndefined(b)||angular.isUndefined(c)||(c.limitMessages=b)}),a.stopTimeoutClose=function(a){a.clickToClose||(angular.forEach(a.promises,function(a){b.cancel(a)}),a.close?d.deleteMessage(a):a.close=!0)},a.alertClasses=function(a){return{"alert-success":"success"===a.severity,"alert-error":"error"===a.severity,"alert-danger":"error"===a.severity,"alert-info":"info"===a.severity,"alert-warning":"warning"===a.severity,icon:a.disableIcons===!1,"alert-dismissable":!a.disableCloseButton}},a.showCountDown=function(a){return!a.disableCountDown&&a.ttl>0},a.wrapperClasses=function(){var b={};return b["growl-fixed"]=!a.inlineMessage,b[c.position()]=!0,b},a.computeTitle=function(a){var b={success:"Success",error:"Error",info:"Information",warn:"Warning"};return b[a.severity]}}]}}]),angular.module("angular-growl").run(["$templateCache",function(a){"use strict";void 0===a.get("templates/growl/growl.html")&&a.put("templates/growl/growl.html",'<div class="growl-container" ng-class="wrapperClasses()"><div class="growl-item alert" ng-repeat="message in growlMessages.directives[referenceId].messages" ng-class="alertClasses(message)" ng-click="stopTimeoutClose(message)"><button type="button" class="close" data-dismiss="alert" aria-hidden="true" ng-click="growlMessages.deleteMessage(message)" ng-show="!message.disableCloseButton">&times;</button><button type="button" class="close" aria-hidden="true" ng-show="showCountDown(message)">{{message.countdown}}</button><h4 class="growl-title" ng-show="message.title" ng-bind="message.title"></h4><div class="growl-message" ng-bind-html="message.text"></div></div></div>')}]),angular.module("angular-growl").provider("growl",function(){"use strict";var a={success:null,error:null,warning:null,info:null},b="messages",c="text",d="title",e="severity",f=!0,g="variables",h=0,i=!1,j="top-right",k=!1,l=!1,m=!1,n=!1,o=!0;this.globalTimeToLive=function(b){if("object"==typeof b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);else for(var d in a)a.hasOwnProperty(d)&&(a[d]=b);return this},this.globalTranslateMessages=function(a){return o=a,this},this.globalDisableCloseButton=function(a){return k=a,this},this.globalDisableIcons=function(a){return l=a,this},this.globalReversedOrder=function(a){return m=a,this},this.globalDisableCountDown=function(a){return n=a,this},this.messageVariableKey=function(a){return g=a,this},this.globalInlineMessages=function(a){return i=a,this},this.globalPosition=function(a){return j=a,this},this.messagesKey=function(a){return b=a,this},this.messageTextKey=function(a){return c=a,this},this.messageTitleKey=function(a){return d=a,this},this.messageSeverityKey=function(a){return e=a,this},this.onlyUniqueMessages=function(a){return f=a,this},this.serverMessagesInterceptor=["$q","growl",function(a,c){function d(a){void 0!==a&&a.data&&a.data[b]&&a.data[b].length>0&&c.addServerMessages(a.data[b])}return{response:function(a){return d(a),a},responseError:function(b){return d(b),a.reject(b)}}}],this.$get=["$rootScope","$interpolate","$sce","$filter","$timeout","growlMessages",function(b,p,q,r,s,t){function u(a){if(G&&a.translateMessage)a.text=G(a.text,a.variables)||a.text,a.title=G(a.title)||a.title;else{var c=p(a.text);a.text=c(a.variables)}var d=t.addMessage(a);return b.$broadcast("growlMessage",a),s(function(){},0),d}function v(b,c,d){var e,f=c||{};return e={text:b,title:f.title,severity:d,ttl:f.ttl||a[d],variables:f.variables||{},disableCloseButton:void 0===f.disableCloseButton?k:f.disableCloseButton,disableIcons:void 0===f.disableIcons?l:f.disableIcons,disableCountDown:void 0===f.disableCountDown?n:f.disableCountDown,position:f.position||j,referenceId:f.referenceId||h,translateMessage:void 0===f.translateMessage?o:f.translateMessage,destroy:function(){t.deleteMessage(e)},setText:function(a){e.text=q.trustAsHtml(String(a))},onclose:f.onclose,onopen:f.onopen},u(e)}function w(a,b){return v(a,b,"warning")}function x(a,b){return v(a,b,"error")}function y(a,b){return v(a,b,"info")}function z(a,b){return v(a,b,"success")}function A(a,b,c){return c=(c||"error").toLowerCase(),v(a,b,c)}function B(a){if(a&&a.length){var b,f,h,i;for(i=a.length,b=0;i>b;b++)if(f=a[b],f[c]){h=(f[e]||"error").toLowerCase();var j={};j.variables=f[g]||{},j.title=f[d],v(f[c],j,h)}}}function C(){return f}function D(){return m}function E(){return i}function F(){return j}var G;t.onlyUnique=f,t.reverseOrder=m;try{G=r("translate")}catch(H){}return{warning:w,error:x,info:y,success:z,general:A,addServerMessages:B,onlyUnique:C,reverseOrder:D,inlineMessages:E,position:F}}]}),angular.module("angular-growl").service("growlMessages",["$sce","$timeout",function(a,b){"use strict";function c(a){var b;return b=f[a]?f[a]:f[a]={messages:[]}}function d(a){var b=a||0;return e.directives[b]||f[b]}var e=this;this.directives={};var f={};this.initDirective=function(a,b){return f[a]?(this.directives[a]=f[a],this.directives[a].limitMessages=b):this.directives[a]={messages:[],limitMessages:b},this.directives[a]},this.getAllMessages=function(a){a=a||0;var b;return b=d(a)?d(a).messages:[]},this.destroyAllMessages=function(a){for(var b=this.getAllMessages(a),c=b.length-1;c>=0;c--)b[c].destroy();var e=d(a);e&&(e.messages=[])},this.addMessage=function(d){var e,f,g,h;if(e=this.directives[d.referenceId]?this.directives[d.referenceId]:c(d.referenceId),f=e.messages,!this.onlyUnique||(angular.forEach(f,function(b){h=a.getTrustedHtml(b.text),d.text===h&&d.severity===b.severity&&d.title===b.title&&(g=!0)}),!g)){if(d.text=a.trustAsHtml(String(d.text)),d.ttl&&-1!==d.ttl&&(d.countdown=d.ttl/1e3,d.promises=[],d.close=!1,d.countdownFunction=function(){d.countdown>1?(d.countdown--,d.promises.push(b(d.countdownFunction,1e3))):d.countdown--}),angular.isDefined(e.limitMessages)){var i=f.length-(e.limitMessages-1);i>0&&f.splice(e.limitMessages-1,i)}if(this.reverseOrder?f.unshift(d):f.push(d),"function"==typeof d.onopen&&d.onopen(),d.ttl&&-1!==d.ttl){var j=this;d.promises.push(b(angular.bind(this,function(){j.deleteMessage(d)}),d.ttl)),d.promises.push(b(d.countdownFunction,1e3))}return d}},this.deleteMessage=function(a){var b=this.getAllMessages(a.referenceId),c=b.indexOf(a);c>-1&&(b[c].close=!0,b.splice(c,1)),"function"==typeof a.onclose&&a.onclose()}}]); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl.min.css b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl.min.css
new file mode 100644
index 00000000..4b326d1e
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl.min.css
@@ -0,0 +1,7 @@
+/**
+ * angular-growl - v0.4.0 - 2013-11-19
+ * https://github.com/marcorinck/angular-growl
+ * Copyright (c) 2013 Marco Rinck; Licensed MIT
+ */
+
+.growl{position:fixed;top:10px;right:10px;float:right;width:250px}.growl-item.ng-enter,.growl-item.ng-leave{-webkit-transition:.5s linear all;-moz-transition:.5s linear all;-o-transition:.5s linear all;transition:.5s linear all}.growl-item.ng-enter,.growl-item.ng-leave.ng-leave-active{opacity:0}.growl-item.ng-leave,.growl-item.ng-enter.ng-enter-active{opacity:1}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl.min.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl.min.js
new file mode 100644
index 00000000..e07b22bc
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-growl.min.js
@@ -0,0 +1,6 @@
+/**
+ * angular-growl - v0.4.0 - 2013-11-19
+ * https://github.com/marcorinck/angular-growl
+ * Copyright (c) 2013 Marco Rinck; Licensed MIT
+ */
+angular.module("angular-growl",[]),angular.module("angular-growl").directive("growl",["$rootScope",function(a){"use strict";return{restrict:"A",template:'<div class="growl"> <div class="growl-item alert" ng-repeat="message in messages" ng-class="computeClasses(message)"> <button type="button" class="close" ng-click="deleteMessage(message)">&times;</button> <div ng-switch="message.enableHtml"> <div ng-switch-when="true" ng-bind-html="message.text"></div> <div ng-switch-default ng-bind="message.text"></div> </div> </div></div>',replace:!1,scope:!0,controller:["$scope","$timeout","growl",function(b,c,d){function e(a){b.messages.push(a),a.ttl&&-1!==a.ttl&&c(function(){b.deleteMessage(a)},a.ttl)}var f=d.onlyUnique();b.messages=[],a.$on("growlMessage",function(a,c){var d;f?(angular.forEach(b.messages,function(a){c.text===a.text&&c.severity===a.severity&&(d=!0)}),d||e(c)):e(c)}),b.deleteMessage=function(a){var c=b.messages.indexOf(a);c>-1&&b.messages.splice(c,1)},b.computeClasses=function(a){return{"alert-success":"success"===a.severity,"alert-error":"error"===a.severity,"alert-danger":"error"===a.severity,"alert-info":"info"===a.severity,"alert-warning":"warn"===a.severity}}}]}}]),angular.module("angular-growl").provider("growl",function(){"use strict";var a=null,b=!1,c="messages",d="text",e="severity",f=!0;this.globalTimeToLive=function(b){a=b},this.globalEnableHtml=function(a){b=a},this.messagesKey=function(a){c=a},this.messageTextKey=function(a){d=a},this.messageSeverityKey=function(a){e=a},this.onlyUniqueMessages=function(a){f=a},this.serverMessagesInterceptor=["$q","growl",function(a,b){function d(a){a.data[c]&&a.data[c].length>0&&b.addServerMessages(a.data[c])}function e(a){return d(a),a}function f(b){return d(b),a.reject(b)}return function(a){return a.then(e,f)}}],this.$get=["$rootScope","$filter",function(c,g){function h(a){p&&(a.text=p(a.text)),c.$broadcast("growlMessage",a)}function i(c,d,e){var f,g=d||{};f={text:c,severity:e,ttl:g.ttl||a,enableHtml:g.enableHtml||b},h(f)}function j(a,b){i(a,b,"warn")}function k(a,b){i(a,b,"error")}function l(a,b){i(a,b,"info")}function m(a,b){i(a,b,"success")}function n(a){var b,c,f,g;for(g=a.length,b=0;g>b;b++)if(c=a[b],c[d]&&c[e]){switch(c[e]){case"warn":f="warn";break;case"success":f="success";break;case"info":f="info";break;case"error":f="error"}i(c[d],void 0,f)}}function o(){return f}var p;try{p=g("translate")}catch(q){}return{addWarnMessage:j,addErrorMessage:k,addInfoMessage:l,addSuccessMessage:m,addServerMessages:n,onlyUnique:o}}]});
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.editorconfig b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.editorconfig
new file mode 100644
index 00000000..85653605
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.editorconfig
@@ -0,0 +1,18 @@
+# This file is for unifying the coding style for different editors and IDEs
+# editorconfig.org
+
+root = true
+
+[*]
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+# Tabs in JS unless otherwise specified
+[**.js]
+indent_style = space
+indent_size = 2
+
+[*.md]
+trim_trailing_whitespace = false \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.gitattributes b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.gitattributes
new file mode 100644
index 00000000..bdb0cabc
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.gitattributes
@@ -0,0 +1,17 @@
+# Auto detect text files and perform LF normalization
+* text=auto
+
+# Custom for Visual Studio
+*.cs diff=csharp
+
+# Standard to msysgit
+*.doc diff=astextplain
+*.DOC diff=astextplain
+*.docx diff=astextplain
+*.DOCX diff=astextplain
+*.dot diff=astextplain
+*.DOT diff=astextplain
+*.pdf diff=astextplain
+*.PDF diff=astextplain
+*.rtf diff=astextplain
+*.RTF diff=astextplain
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.jscsrc b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.jscsrc
new file mode 100644
index 00000000..e91fa415
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.jscsrc
@@ -0,0 +1,52 @@
+{
+ "requireCurlyBraces": [
+ "try",
+ "catch",
+ "do"
+ ],
+ "requireCamelCaseOrUpperCaseIdentifiers": "ignoreProperties",
+ "requireCapitalizedConstructors": true,
+ "validateIndentation": 2,
+ "validateQuoteMarks": "'",
+
+ "disallowQuotedKeysInObjects": true,
+ "disallowSpaceAfterObjectKeys": true,
+
+ "requireSpaceBeforeBinaryOperators": [
+ "=", "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=",
+ "&=", "|=", "^=", "+=",
+
+ "+", "-", "*", "/", "%", "<<", ">>", ">>>", "&",
+ "|", "^", "&&", "||", "===", "==", ">=",
+ "<=", "<", ">", "!=", "!=="
+ ],
+ "requireSpaceAfterBinaryOperators": true,
+ "requireSpacesInConditionalExpression": true,
+ "requireSpaceBeforeBlockStatements": true,
+ "requireSpacesInForStatement": true,
+ "requireLineFeedAtFileEnd": true,
+ "requireSpacesInFunctionExpression": {
+ "beforeOpeningCurlyBrace": true
+ },
+ "requireDotNotation": true,
+ "disallowSpacesInsideArrayBrackets": "all",
+ "disallowSpacesInsideParentheses": true,
+
+
+ "validateJSDoc": {
+ "checkParamNames": true,
+ "requireParamTypes": true
+ },
+
+ "disallowMultipleLineBreaks": true,
+ "disallowNewlineBeforeBlockStatements": true,
+ "disallowKeywords": [ "with" ],
+
+ "excludeFiles": [
+ "bower_components/**",
+ "node_modules/**",
+ "dist/**",
+ "test/coverage/**",
+ "examples/smoothscroll.min.js"
+ ]
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.jshintignore b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.jshintignore
new file mode 100644
index 00000000..997cf2dc
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.jshintignore
@@ -0,0 +1,6 @@
+bower_components/
+node_modules/
+dist/
+tmp/
+examples/
+
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.jshintrc b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.jshintrc
new file mode 100644
index 00000000..c569ff2f
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.jshintrc
@@ -0,0 +1,19 @@
+{
+ "strict" : true, // true: Requires all functions run in ES5 Strict Mode
+ "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks)
+ "unused" : true, // true: Require all defined variables be used
+ "noempty" : true, // Prohibit use of empty blocks
+ "trailing" : true, // Prohibit trailing whitespaces.
+ "white" : false, // Check against strict whitespace and indentation rules.
+ "indent" : 2, // {int} Number of spaces to use for indentation
+ "newcap" : true, // true: Require capitalization of all constructor functions e.g. `new F()`
+ "quotmark" : "single", // Quotation mark consistency
+ "-W058" : true, // Missing '()' invoking a constructor
+ "browser" : true, // Standard browser globals e.g. `window`, `document`.
+ "predef" : [ // Custom globals.
+ "angular",
+ "G_vmlCanvasManager",
+ "require",
+ "console"
+ ]
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.npmignore b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.npmignore
new file mode 100644
index 00000000..aeb776de
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/.npmignore
@@ -0,0 +1,4 @@
+.idea/
+node_modules/
+test/fixtures/shots/
+bower_components/
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/LICENSE b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/LICENSE
new file mode 100644
index 00000000..0f2fefcf
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Deepu k Sasidharan
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/README.md b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/README.md
new file mode 100644
index 00000000..bc3190d1
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/README.md
@@ -0,0 +1,121 @@
+# angular-diff
+An Angular JS plugin to compare and show object differences in JSON format. [Demo](http://hipster-labs.github.io/angular-object-diff/)
+
+![Screenshot](/screenshot.png)
+# Installation
+
+with bower
+```
+bower install angular-object-diff --save
+```
+
+```
+<link type="text/css" href="bower_components/dist/angular-object-diff.css" rel='stylesheet'>
+<script type="text/javascript" src="bower_components/dist/angular-object-diff.js"></script>
+```
+
+or with npm
+```
+npm i angular-object-diff
+```
+
+# Available methods on `ObjectDiff` service
+
+
+`setOpenChar`: set the opening character for the view, default is `{`
+
+`setCloseChar`: set the closing character for the view, default is `}`
+
+`diff`: compare and build all the difference of two objects including prototype properties
+
+`diffOwnProperties`: compare and build the difference of two objects taking only its own properties into account
+
+`toJsonView`: format a diff object to a full JSON formatted object view
+
+`toJsonDiffView`: format a diff object to a JSON formatted view with only changes
+
+`objToJsonView`: format any javascript object to a JSON formatted view
+
+
+# Available filters
+
+`toJsonView`: format a diff object to a full JSON formatted object view
+
+`toJsonDiffView`: format a diff object to a JSON formatted view with only changes
+
+`objToJsonView`: format any javascript object to a JSON formatted view
+
+
+# Usage
+
+Declare the dependency
+```
+angular.module('myModule', ['ds.objectDiff']);
+
+```
+
+Inject the service
+
+```javascript
+angular.module('myModule')
+ .controller('MyController', ['$scope', 'ObjectDiff', function($scope, ObjectDiff){
+ $scope.yourObjectOne = {//all your object attributes and values here};
+ $scope.yourObjectTwo = {//all your object attributes and values here};
+
+ // This is required only if you want to show a JSON formatted view of your object without using a filter
+ $scope.yourObjectOneJsonView = ObjectDiff.objToJsonView($scope.yourObjectOne);
+ $scope.yourObjectTwoJsonView = ObjectDiff.objToJsonView($scope.yourObjectTwo);
+
+ // you can directly diff your objects js now or parse a Json to object and diff
+ var diff = ObjectDiff.diffOwnProperties($scope.yourObjectOne, $scope.yourObjectTwo);
+
+ // you can directly diff your objects including prototype properties and inherited properties using `diff` method
+ var diffAll = ObjectDiff.diff($scope.yourObjectOne, $scope.yourObjectTwo);
+
+ // gives a full object view with Diff highlighted
+ $scope.diffValue = ObjectDiff.toJsonView(diff);
+
+ // gives object view with onlys Diff highlighted
+ $scope.diffValueChanges = ObjectDiff.toJsonDiffView(diff);
+
+ }]);
+```
+
+Bind the variables directly in your html using the `ng-bind-html` angular directive.
+Use a `<pre>` element for better results
+
+```html
+<pre ng-bind-html="diffValue"></pre>
+<pre ng-bind-html="diffValueChanges"></pre>
+<pre ng-bind-html="yourObjectOneJsonView"></pre>
+<pre ng-bind-html="yourObjectTwoJsonView"></pre>
+```
+
+The same can be done with filters as well
+
+```javascript
+angular.module('myModule')
+ .controller('MyController', ['$scope', 'ObjectDiff', function($scope, ObjectDiff){
+ $scope.yourObjectOne = {//all your object attributes and values here};
+ $scope.yourObjectTwo = {//all your object attributes and values here};
+
+ // you can directly diff your objects js now or parse a Json to object and diff
+ var diff = ObjectDiff.diffOwnProperties($scope.yourObjectOne, $scope.yourObjectTwo);
+
+ // you can directly diff your objects including prototype properties and inherited properties using `diff` method
+ var diffAll = ObjectDiff.diff($scope.yourObjectOne, $scope.yourObjectTwo);
+
+ }]);
+```
+
+Bind the variables directly in your html using the `ng-bind-html` angular directive.
+Use a `<pre>` element for better results
+
+```html
+<pre ng-bind-html="diffValue | toJsonView"></pre>
+<pre ng-bind-html="diffValueChanges | toJsonDiffView"></pre>
+<pre ng-bind-html="yourObjectOneJsonView | objToJsonView"></pre>
+<pre ng-bind-html="yourObjectTwoJsonView | objToJsonView"></pre>
+```
+
+Inspired from https://github.com/NV/objectDiff.js
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/angular-object-diff.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/angular-object-diff.js
new file mode 100644
index 00000000..08b124fc
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/angular-object-diff.js
@@ -0,0 +1,344 @@
+(function () {
+ 'use strict';
+
+ angular
+ .module('ds.objectDiff', [])
+ .factory('ObjectDiff', objectDiff)
+ .filter('toJsonView', toJsonViewFilter)
+ .filter('toJsonDiffView', toJsonDiffViewFilter)
+ .filter('objToJsonView', objToJsonViewFilter);
+
+ objectDiff.$inject = ['$sce'];
+ toJsonViewFilter.$inject = ['ObjectDiff'];
+ toJsonDiffViewFilter.$inject = ['ObjectDiff'];
+ objToJsonViewFilter.$inject = ['ObjectDiff'];
+
+ /* service implementation */
+ function objectDiff($sce) {
+
+ var openChar = '{',
+ closeChar = '}',
+ service = {
+ setOpenChar: setOpenChar,
+ setCloseChar: setCloseChar,
+ diff: diff,
+ diffOwnProperties: diffOwnProperties,
+ toJsonView: formatToJsonXMLString,
+ objToJsonView: formatObjToJsonXMLString,
+ toJsonDiffView: formatChangesToXMLString
+ };
+
+ return service;
+
+
+ /* service methods */
+
+ /**
+ * @param char
+ */
+ function setOpenChar(char) {
+ openChar = char;
+ }
+
+ /**
+ * @param char
+ */
+ function setCloseChar(char) {
+ closeChar = char;
+ }
+
+ /**
+ * diff between object a and b
+ * @param {Object} a
+ * @param {Object} b
+ * @param shallow
+ * @param isOwn
+ * @return {Object}
+ */
+ function diff(a, b, shallow, isOwn) {
+
+ if (a === b) {
+ return equalObj(a);
+ }
+
+ var diffValue = {};
+ var equal = true;
+
+ for (var key in a) {
+ if ((!isOwn && key in b) || (isOwn && typeof b != 'undefined' && b.hasOwnProperty(key))) {
+ if (a[key] === b[key]) {
+ diffValue[key] = equalObj(a[key]);
+ } else {
+ if (!shallow && isValidAttr(a[key], b[key])) {
+ var valueDiff = diff(a[key], b[key], shallow, isOwn);
+ if (valueDiff.changed == 'equal') {
+ diffValue[key] = equalObj(a[key]);
+ } else {
+ equal = false;
+ diffValue[key] = valueDiff;
+ }
+ } else {
+ equal = false;
+ diffValue[key] = {
+ changed: 'primitive change',
+ removed: a[key],
+ added: b[key]
+ }
+ }
+ }
+ } else {
+ equal = false;
+ diffValue[key] = {
+ changed: 'removed',
+ value: a[key]
+ }
+ }
+ }
+
+ for (key in b) {
+ if ((!isOwn && !(key in a)) || (isOwn && typeof a != 'undefined' && !a.hasOwnProperty(key))) {
+ equal = false;
+ diffValue[key] = {
+ changed: 'added',
+ value: b[key]
+ }
+ }
+ }
+
+ if (equal) {
+ return equalObj(a);
+ } else {
+ return {
+ changed: 'object change',
+ value: diffValue
+ }
+ }
+ }
+
+
+ /**
+ * diff between object a and b own properties only
+ * @param {Object} a
+ * @param {Object} b
+ * @return {Object}
+ * @param deep
+ */
+ function diffOwnProperties(a, b, shallow) {
+ return diff(a, b, shallow, true);
+ }
+
+ /**
+ * Convert to a readable xml/html Json structure
+ * @param {Object} changes
+ * @return {string}
+ * @param shallow
+ */
+ function formatToJsonXMLString(changes, shallow) {
+ var properties = [];
+
+ var diff = changes.value;
+ if (changes.changed == 'equal') {
+ return $sce.trustAsHtml(inspect(diff, shallow));
+ }
+
+ for (var key in diff) {
+ properties.push(formatChange(key, diff[key], shallow));
+ }
+
+ return $sce.trustAsHtml('<span>' + openChar + '</span>\n<div class="diff-level">' + properties.join('<span>,</span>\n') + '\n</div><span>' + closeChar + '</span>');
+
+ }
+
+ /**
+ * Convert to a readable xml/html Json structure
+ * @return {string}
+ * @param obj
+ * @param shallow
+ */
+ function formatObjToJsonXMLString(obj, shallow) {
+ return $sce.trustAsHtml(inspect(obj, shallow));
+ }
+
+ /**
+ * Convert to a readable xml/html Json structure
+ * @param {Object} changes
+ * @return {string}
+ * @param shallow
+ */
+ function formatChangesToXMLString(changes, shallow) {
+ var properties = [];
+
+ if (changes.changed == 'equal') {
+ return '';
+ }
+
+ var diff = changes.value;
+
+ for (var key in diff) {
+ var changed = diff[key].changed;
+ if (changed !== 'equal')
+ properties.push(formatChange(key, diff[key], shallow, true));
+ }
+
+ return $sce.trustAsHtml('<span>' + openChar + '</span>\n<div class="diff-level">' + properties.join('<span>,</span>\n') + '\n</div><span>' + closeChar + '</span>');
+
+ }
+
+ /**
+ * @param obj
+ * @returns {{changed: string, value: *}}
+ */
+ function equalObj(obj) {
+ return {
+ changed: 'equal',
+ value: obj
+ }
+ }
+
+ /**
+ * @param a
+ * @param b
+ * @returns {*|boolean}
+ */
+ function isValidAttr(a, b) {
+ var typeA = typeof a;
+ var typeB = typeof b;
+ return (a && b && (typeA == 'object' || typeA == 'function') && (typeB == 'object' || typeB == 'function'));
+ }
+
+ /**
+ * @param key
+ * @param diffItem
+ * @returns {*}
+ * @param shallow
+ * @param diffOnly
+ */
+ function formatChange(key, diffItem, shallow, diffOnly) {
+ var changed = diffItem.changed;
+ var property;
+ switch (changed) {
+ case 'equal':
+ property = (stringifyObjectKey(escapeHTML(key)) + '<span>: </span>' + inspect(diffItem.value));
+ break;
+
+ case 'removed':
+ property = ('<del class="diff">' + stringifyObjectKey(escapeHTML(key)) + '<span>: </span>' + inspect(diffItem.value) + '</del>');
+ break;
+
+ case 'added':
+ property = ('<ins class="diff">' + stringifyObjectKey(escapeHTML(key)) + '<span>: </span>' + inspect(diffItem.value) + '</ins>');
+ break;
+
+ case 'primitive change':
+ var prefix = stringifyObjectKey(escapeHTML(key)) + '<span>: </span>';
+ property = (
+ '<del class="diff diff-key">' + prefix + inspect(diffItem.removed) + '</del><span>,</span>\n' +
+ '<ins class="diff diff-key">' + prefix + inspect(diffItem.added) + '</ins>');
+ break;
+
+ case 'object change':
+ property = shallow ? '' : (stringifyObjectKey(key) + '<span>: </span>' + ( diffOnly ? formatChangesToXMLString(diffItem) : formatToJsonXMLString(diffItem)));
+ break;
+ }
+
+ return property;
+ }
+
+ /**
+ * @param {string} key
+ * @return {string}
+ */
+ function stringifyObjectKey(key) {
+ return /^[a-z0-9_$]*$/i.test(key) ?
+ key :
+ JSON.stringify(key);
+ }
+
+ /**
+ * @param {string} string
+ * @return {string}
+ */
+ function escapeHTML(string) {
+ return string.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
+ }
+
+ /**
+ * @param {Object} obj
+ * @return {string}
+ * @param shallow
+ */
+ function inspect(obj, shallow) {
+
+ return _inspect('', obj, shallow);
+
+ /**
+ * @param {string} accumulator
+ * @param {object} obj
+ * @see http://jsperf.com/continuation-passing-style/3
+ * @return {string}
+ * @param shallow
+ */
+ function _inspect(accumulator, obj, shallow) {
+ switch (typeof obj) {
+ case 'object':
+ if (!obj) {
+ accumulator += 'null';
+ break;
+ }
+ if (shallow) {
+ accumulator += '[object]';
+ break;
+ }
+ var keys = Object.keys(obj);
+ var length = keys.length;
+ if (length === 0) {
+ accumulator += '<span>' + openChar + closeChar + '</span>';
+ } else {
+ accumulator += '<span>' + openChar + '</span>\n<div class="diff-level">';
+ for (var i = 0; i < length; i++) {
+ var key = keys[i];
+ accumulator = _inspect(accumulator + stringifyObjectKey(escapeHTML(key)) + '<span>: </span>', obj[key]);
+ if (i < length - 1) {
+ accumulator += '<span>,</span>\n';
+ }
+ }
+ accumulator += '\n</div><span>' + closeChar + '</span>'
+ }
+ break;
+
+ case 'string':
+ accumulator += JSON.stringify(escapeHTML(obj));
+ break;
+
+ case 'undefined':
+ accumulator += 'undefined';
+ break;
+
+ default:
+ accumulator += escapeHTML(String(obj));
+ break;
+ }
+ return accumulator;
+ }
+ }
+ }
+
+ /* filter implementation */
+ function toJsonViewFilter(ObjectDiff) {
+ return function (value) {
+ return ObjectDiff.toJsonView(value);
+ };
+ }
+
+ function toJsonDiffViewFilter(ObjectDiff) {
+ return function (value) {
+ return ObjectDiff.toJsonDiffView(value);
+ };
+ }
+
+ function objToJsonViewFilter(ObjectDiff) {
+ return function (value) {
+ return ObjectDiff.objToJsonView(value);
+ };
+ }
+})();
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/angular-object-diff.less b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/angular-object-diff.less
new file mode 100644
index 00000000..08115548
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/angular-object-diff.less
@@ -0,0 +1,42 @@
+.diff {
+ display: inline-block;
+}
+.diff-level {
+ margin-left: 1.6em;
+}
+.diff-holder {
+ color: #666;
+ margin: 0;
+}
+.diff-holder span {
+ color: #AAA;
+}
+del.diff {
+ text-decoration: none;
+ color: #b30000;
+ background: #fadad7;
+}
+ins.diff {
+ background: #eaf2c2;
+ color: #406619;
+ text-decoration: none;
+}
+del.diff-key {
+ border: 1px solid #f8a4a4;
+}
+ins.diff-key {
+ border: 1px solid #a3ce4c;
+ margin-top: -1px;
+ position: relative;
+}
+ins.diff span {
+ color: #AABF40;
+}
+del.diff span {
+ color: #EE8177;
+}
+.audit-obj {
+ max-height: 300px;
+ max-width: 300px;
+ overflow: auto;
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/bower.json b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/bower.json
new file mode 100644
index 00000000..7602502a
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/bower.json
@@ -0,0 +1,50 @@
+{
+ "name": "angular-object-diff",
+ "version": "1.0.3",
+ "main": [
+ "./dist/angular-object-diff.js",
+ "./dist/angular-object-diff.css"
+ ],
+ "authors": [
+ "Deepu K Sasidharan <d4udts@gmail.com>"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/hipster-labs/angular-object-diff.git"
+ },
+ "description": "An Angular JS plugin to compare and show object differences.",
+ "moduleType": [
+ "globals"
+ ],
+ "keywords": [
+ "angular",
+ "angular.js",
+ "object",
+ "diff",
+ "json",
+ "json-diff",
+ "object-diff",
+ "compare"
+ ],
+ "license": "MIT",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ],
+ "dependencies": {
+ "angular": "1.x"
+ },
+ "devDependencies": {
+ "angular-bootstrap": "~0.11.0",
+ "font-awesome": "~4.1.0",
+ "rainbow": "~1.1.9",
+ "angular-mocks": "~1.3.10"
+ },
+ "resolutions": {
+ "angular": "1.x",
+ "angular-mocks": "1.3.10"
+ }
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/demo.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/demo.js
new file mode 100644
index 00000000..3613fcca
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/demo.js
@@ -0,0 +1,68 @@
+// Angular JS code
+(function () {
+ 'use-strict';
+
+ angular.module('demoApp', ['ds.objectDiff'])
+ .config([
+ '$interpolateProvider',
+ function ($interpolateProvider) {
+ return $interpolateProvider.startSymbol('{(').endSymbol(')}');
+ }
+ ])
+ .controller('DemoController', DemoController);
+
+ DemoController.$inject = ['$scope', 'ObjectDiff'];
+
+ function DemoController($scope, ObjectDiff) {
+ $scope.objectOne = "{\n" +
+ " a: {\n" +
+ " b: 1,\n" +
+ " c: [1, 2]\n" +
+ " },\n" +
+ " \"2b\": {\n" +
+ " foo: 'bar'\n" +
+ " }\n" +
+ " }";
+ $scope.objectTwo = "{\n" +
+ " a: { \n" +
+ " b: 2,\n" +
+ " c: [1, 2, 3]\n" +
+ " },\n" +
+ " x: 1\n" +
+ " }";
+
+
+ function makeDiff() {
+ var objectOne, objectTwo, diff;
+ try {
+ $scope.errorA = false;
+ objectOne = eval('(' + $scope.objectOne + ')'); //JSON.parse($scope.objectOne);
+ } catch (err) {
+ $scope.errorA = true;
+ }
+ try {
+ $scope.errorB = false;
+ objectTwo = eval('(' + $scope.objectTwo + ')'); //JSON.parse($scope.objectTwo);
+ } catch (err) {
+ $scope.errorB = true;
+ }
+
+ // you can directly diff your objects if they are not string
+ diff = ObjectDiff.diffOwnProperties(objectOne, objectTwo);
+
+ $scope.diffValue = ObjectDiff.toJsonView(diff);
+ $scope.diffValueChanges = ObjectDiff.toJsonDiffView(diff);
+
+ $scope.yourObjectOne = objectOne;
+ $scope.yourObjectTwo = objectTwo;
+ }
+
+ $scope.$watch('objectOne', function (newValue, oldValue) {
+ makeDiff();
+ });
+ $scope.$watch('objectTwo', function (newValue, oldValue) {
+ makeDiff();
+ });
+ }
+
+})();
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/gulpfile.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/gulpfile.js
new file mode 100644
index 00000000..78fdc574
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/gulpfile.js
@@ -0,0 +1,169 @@
+(function () {
+ 'use strict';
+
+ var gulp = require('gulp');
+ var less = require('gulp-less');
+ var sourcemaps = require('gulp-sourcemaps');
+ var uglify = require('gulp-uglify');
+ var csso = require('gulp-csso');
+ var jshint = require('gulp-jshint');
+ var stylish = require('jshint-stylish');
+ var jscs = require('gulp-jscs');
+ var mocha = require('gulp-spawn-mocha');
+ var mochaPhantomJS = require('gulp-mocha-phantomjs');
+ var tar = require('gulp-tar');
+ var gzip = require('gulp-gzip');
+ var bumper = require('gulp-bump');
+ var git = require('gulp-git');
+ var shell = require('gulp-shell');
+ var rename = require('gulp-rename');
+ var fs = require('fs');
+ var sequence = require('gulp-sequence');
+
+ gulp.task('less', function () {
+ return gulp.src('./*.less')
+ .pipe(sourcemaps.init())
+ .pipe(less())
+ .pipe(csso())
+ .pipe(sourcemaps.write('./'))
+ .pipe(gulp.dest('./dist'));
+ });
+
+ gulp.task('lint', function () {
+ return gulp.src('**/*.js')
+ .pipe(jshint())
+ .pipe(jshint.reporter(stylish));
+ });
+
+ /* gulp.task('style', function() {
+ return gulp.src('**/
+ /*.js')
+ .pipe(jscs());
+ });*/
+
+ gulp.task('unit', function () {
+ return gulp
+ .src('test/index.html')
+ .pipe(mochaPhantomJS());
+ });
+
+ gulp.task('bump-patch', bump('patch'));
+ gulp.task('bump-minor', bump('minor'));
+ gulp.task('bump-major', bump('major'));
+
+ gulp.task('bower', function () {
+ return gulp.src('./angular-object-diff.js')
+ .pipe(gulp.dest('./dist'));
+ });
+
+ gulp.task('js', ['lint' /*, 'style'*/ , 'bower'], function () {
+ return gulp.src('./angular-object-diff.js')
+ .pipe(rename('angular-object-diff.min.js'))
+ .pipe(sourcemaps.init())
+ .pipe(uglify())
+ .pipe(sourcemaps.write('./'))
+ .pipe(gulp.dest('./dist'));
+ });
+
+ gulp.task('build', function () {
+ return gulp.src(['dist/*', '!./dist/*.tar.gz'])
+ .pipe(tar('angular-object-diff.js.tar'))
+ .pipe(gzip({
+ gzipOptions: {
+ level: 9
+ }
+ }))
+ .pipe(gulp.dest('dist/'));
+ });
+
+ gulp.task('update', function (cb) {
+ fs.readFile('./examples/index.template.html', 'utf8', function (err, file) {
+ if (err) return cb(err);
+ file = file.replace('<!-- version -->', version());
+ fs.writeFile('./examples/index.html', file, cb);
+ });
+ });
+
+ gulp.task('git-commit', function () {
+ var v = 'update to version ' + version();
+ gulp.src(['./dist/*', './examples/*', './test/*', './package.json', './bower.json', './angular-object-diff.js', './angular-object-diff.less'])
+ .pipe(git.add())
+ .pipe(git.commit(v));
+ });
+
+ gulp.task('git-push', function (cb) {
+ var v = 'v' + version();
+ git.push('origin', 'master', function (err) {
+ if (err) return cb(err);
+ git.tag(v, v, function (err) {
+ if (err) return cb(err);
+ git.push('origin', 'master', {
+ args: '--tags'
+ }, function(err){
+ if (err) return cb(err);
+ git.checkout('gh-pages', function (err) {
+ if (err) return cb(err);
+ git.reset('master', {
+ args: '--hard'
+ }, function (err) {
+ if (err) return cb(err);
+ git.push('origin', 'gh-pages', function (err) {
+ if (err) return cb(err);
+ git.checkout('master', cb);
+ });
+ });
+ });
+ });
+ });
+ });
+ });
+
+ gulp.task('git-demo', function (cb) {
+ var v = 'v' + version();
+ git.checkout('gh-pages', function (err) {
+ if (err) return cb(err);
+ git.reset('master', {
+ args: '--hard'
+ }, function (err) {
+ if (err) return cb(err);
+ git.push('origin', 'gh-pages', function (err) {
+ if (err) return cb(err);
+ git.checkout('master', cb);
+ });
+ });
+ });
+ });
+
+ gulp.task('npm', shell.task([
+ 'npm publish'
+ ]));
+
+ gulp.task('watch', function () {
+ gulp.watch('./*.js', ['js']);
+ gulp.watch('./*.less', ['less']);
+ return true;
+ });
+
+ function bump(level) {
+ return function () {
+ return gulp.src(['./package.json', './bower.json'])
+ .pipe(bumper({
+ type: level
+ }))
+ .pipe(gulp.dest('./'));
+ };
+ }
+
+ function version() {
+ return JSON.parse(fs.readFileSync('package.json', 'utf8')).version;
+ }
+
+ gulp.task('default', sequence('check', ['less', 'js'], 'build'));
+ gulp.task('test', sequence('unit' /*, 'integration'*/ ));
+ gulp.task('check', sequence(['lint' /*, 'style'*/ ], 'test'));
+ gulp.task('publish', sequence(['git-commit', 'git-push', 'npm']));
+ gulp.task('deploy-patch', sequence('default', 'bump-patch', /*'update',*/ 'publish'));
+ gulp.task('deploy-minor', sequence('default', 'bump-minor', /*'update',*/ 'publish'));
+ gulp.task('deploy-major', sequence('default', 'bump-major', /*'update',*/ 'publish'));
+
+})();
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/index.html b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/index.html
new file mode 100644
index 00000000..986a8b23
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/index.html
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<html lang="en-US">
+
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="A Demo page for angular-object-diff plugin.">
+ <meta name="author" content="Deepu KS (deepu.js.org)">
+ <meta name="twitter:site" content="@deepu105" />
+ <meta name="twitter:title" content="A Demo page for angular-object-diff plugin" />
+ <meta name="twitter:description" content="A Demo page for angular-object-diff plugin." />
+ <meta name="twitter:url" content="http://hipster-labs.js.org/angular-object-diff/" />
+ <title>Angular Object Diff Demo</title>
+ <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" />
+ <link rel="stylesheet" href="http://netdna.bootstrapcdn.com/font-awesome/4.0.0/css/font-awesome.css" />
+ <link rel="stylesheet" href="dist/angular-object-diff.css" />
+ <style>
+ .error {
+ background-color: red;
+ }
+ </style>
+</head>
+
+<body>
+
+ <!-- Static navbar -->
+ <div class="navbar navbar-default navbar-static-top" role="navigation">
+ <div class="container">
+ <div class="navbar-header">
+ <a class="navbar-brand" href="#">Angular Object Diff</a>
+ </div>
+ <div class="navbar-collapse collapse">
+ <ul class="nav navbar-nav">
+ <li class="active"><a href="#">Home</a></li>
+ <li><a href="https://github.com/hipster-labs/angular-object-diff">Github</a></li>
+ </ul>
+ </div>
+ <!--/.nav-collapse -->
+ </div>
+ </div>
+
+
+ <div class="container-fluid" ng-app="demoApp">
+
+ <!-- content is injected here -->
+ <div ng-controller="DemoController">
+ <div class="row">
+ <div class="col-md-4 col-xs-12">
+ <label>Object A</label>
+ <textarea class="form-control" ng-class="[{'error': errorA}]" rows="15" ng-model="objectOne"></textarea>
+ </div>
+ <div class="col-md-4 col-xs-12">
+ <label>Object B</label>
+ <textarea class="form-control" ng-class="[{'error': errorB}]" rows="15" ng-model="objectTwo"></textarea>
+ </div>
+ <div class="col-md-4 col-xs-12">
+ <label>Full Diff</label>
+ <pre ng-bind-html="diffValue"></pre>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-md-4 col-xs-12">
+ <label>Object A JSON View</label>
+ <pre ng-bind-html="yourObjectOne | objToJsonView"></pre>
+ </div>
+ <div class="col-md-4 col-xs-12">
+ <label>Object B JSON View</label>
+ <pre ng-bind-html="yourObjectTwo | objToJsonView"></pre>
+ </div>
+ <div class="col-md-4 col-xs-12">
+ <label>Diff Changes only</label>
+ <pre ng-bind-html="diffValueChanges"></pre>
+ </div>
+ </div>
+ </div>
+
+ </div>
+ <!-- /container -->
+
+ <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
+ <script src="angular-object-diff.js"></script>
+ <script src="demo.js"></script>
+ <script>
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-74370272-3', 'auto');
+ ga('send', 'pageview');
+
+ </script>
+</body>
+
+</html>
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/package.json b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/package.json
new file mode 100644
index 00000000..ea694e00
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/package.json
@@ -0,0 +1,84 @@
+{
+ "_from": "angular-object-diff",
+ "_id": "angular-object-diff@1.0.3",
+ "_inBundle": false,
+ "_integrity": "sha1-zUu3X+n/Extw08NCzUxhBFFtXF8=",
+ "_location": "/angular-object-diff",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "angular-object-diff",
+ "name": "angular-object-diff",
+ "escapedName": "angular-object-diff",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/angular-object-diff/-/angular-object-diff-1.0.3.tgz",
+ "_shasum": "cd4bb75fe9ff131b70d3c342cd4c6104516d5c5f",
+ "_spec": "angular-object-diff",
+ "_where": "D:\\SDNC_UI\\app\\node_modules",
+ "author": {
+ "name": "Deepu K Sasidharan",
+ "email": "d4udts@gmail.com"
+ },
+ "bugs": {
+ "url": "https://github.com/hipster-labs/angular-object-diff/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "An Angular JS plugin to compare and show object differences.",
+ "devDependencies": {
+ "chai": "^1.10.0",
+ "chai-string": "^1.1.1",
+ "cp": "^0.2.0",
+ "gm": "^1.17.0",
+ "gulp": "^3.8.6",
+ "gulp-bump": "^0.1.11",
+ "gulp-csso": "^0.2.9",
+ "gulp-git": "^0.5.6",
+ "gulp-gzip": "0.0.8",
+ "gulp-jscs": "^1.4.0",
+ "gulp-jshint": "^1.9.2",
+ "gulp-less": "^1.3.1",
+ "gulp-mocha-phantomjs": "^0.6.1",
+ "gulp-rename": "^1.2.0",
+ "gulp-sequence": "^0.3.1",
+ "gulp-shell": "^0.2.11",
+ "gulp-sourcemaps": "^1.0.0",
+ "gulp-spawn-mocha": "^2.0.1",
+ "gulp-tar": "^0.5.0",
+ "gulp-uglify": "^0.3.1",
+ "imgur-node-api": "^0.1.0",
+ "jshint-stylish": "^1.0.0",
+ "less": "^1.7.3",
+ "mkdirp": "^0.5.0",
+ "mocha": "^2.1.0",
+ "mocha-phantomjs": "^3.5.3",
+ "sinon": "^1.12.2",
+ "sinon-chai": "^2.7.0",
+ "testatic": "^0.1.0",
+ "tmp-sync": "github:jtblin/node-tmp-sync",
+ "webshot": "^0.15.3"
+ },
+ "directories": {
+ "example": "examples"
+ },
+ "homepage": "https://github.com/hipster-labs/angular-object-diff#readme",
+ "license": "MIT",
+ "main": "angular-object-diff.js",
+ "name": "angular-object-diff",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/hipster-labs/angular-object-diff.git"
+ },
+ "scripts": {
+ "test": "gulp check"
+ },
+ "version": "1.0.3"
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/screenshot.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/screenshot.png
new file mode 100644
index 00000000..938110db
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-object-diff/screenshot.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-route.min.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-route.min.js
new file mode 100644
index 00000000..a30b8ab9
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-route.min.js
@@ -0,0 +1,15 @@
+/*
+ AngularJS v1.3.14
+ (c) 2010-2014 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(q,d,C){'use strict';function v(r,k,h){return{restrict:"ECA",terminal:!0,priority:400,transclude:"element",link:function(a,f,b,c,y){function z(){l&&(h.cancel(l),l=null);m&&(m.$destroy(),m=null);n&&(l=h.leave(n),l.then(function(){l=null}),n=null)}function x(){var b=r.current&&r.current.locals;if(d.isDefined(b&&b.$template)){var b=a.$new(),c=r.current;n=y(b,function(b){h.enter(b,null,n||f).then(function(){!d.isDefined(t)||t&&!a.$eval(t)||k()});z()});m=c.scope=b;m.$emit("$viewContentLoaded");
+m.$eval(w)}else z()}var m,n,l,t=b.autoscroll,w=b.onload||"";a.$on("$routeChangeSuccess",x);x()}}}function A(d,k,h){return{restrict:"ECA",priority:-400,link:function(a,f){var b=h.current,c=b.locals;f.html(c.$template);var y=d(f.contents());b.controller&&(c.$scope=a,c=k(b.controller,c),b.controllerAs&&(a[b.controllerAs]=c),f.data("$ngControllerController",c),f.children().data("$ngControllerController",c));y(a)}}}q=d.module("ngRoute",["ng"]).provider("$route",function(){function r(a,f){return d.extend(Object.create(a),
+f)}function k(a,d){var b=d.caseInsensitiveMatch,c={originalPath:a,regexp:a},h=c.keys=[];a=a.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)([\?\*])?/g,function(a,d,b,c){a="?"===c?c:null;c="*"===c?c:null;h.push({name:b,optional:!!a});d=d||"";return""+(a?"":d)+"(?:"+(a?d:"")+(c&&"(.+?)"||"([^/]+)")+(a||"")+")"+(a||"")}).replace(/([\/$\*])/g,"\\$1");c.regexp=new RegExp("^"+a+"$",b?"i":"");return c}var h={};this.when=function(a,f){var b=d.copy(f);d.isUndefined(b.reloadOnSearch)&&(b.reloadOnSearch=!0);
+d.isUndefined(b.caseInsensitiveMatch)&&(b.caseInsensitiveMatch=this.caseInsensitiveMatch);h[a]=d.extend(b,a&&k(a,b));if(a){var c="/"==a[a.length-1]?a.substr(0,a.length-1):a+"/";h[c]=d.extend({redirectTo:a},k(c,b))}return this};this.caseInsensitiveMatch=!1;this.otherwise=function(a){"string"===typeof a&&(a={redirectTo:a});this.when(null,a);return this};this.$get=["$rootScope","$location","$routeParams","$q","$injector","$templateRequest","$sce",function(a,f,b,c,k,q,x){function m(b){var e=s.current;
+(v=(p=l())&&e&&p.$$route===e.$$route&&d.equals(p.pathParams,e.pathParams)&&!p.reloadOnSearch&&!w)||!e&&!p||a.$broadcast("$routeChangeStart",p,e).defaultPrevented&&b&&b.preventDefault()}function n(){var u=s.current,e=p;if(v)u.params=e.params,d.copy(u.params,b),a.$broadcast("$routeUpdate",u);else if(e||u)w=!1,(s.current=e)&&e.redirectTo&&(d.isString(e.redirectTo)?f.path(t(e.redirectTo,e.params)).search(e.params).replace():f.url(e.redirectTo(e.pathParams,f.path(),f.search())).replace()),c.when(e).then(function(){if(e){var a=
+d.extend({},e.resolve),b,g;d.forEach(a,function(b,e){a[e]=d.isString(b)?k.get(b):k.invoke(b,null,null,e)});d.isDefined(b=e.template)?d.isFunction(b)&&(b=b(e.params)):d.isDefined(g=e.templateUrl)&&(d.isFunction(g)&&(g=g(e.params)),g=x.getTrustedResourceUrl(g),d.isDefined(g)&&(e.loadedTemplateUrl=g,b=q(g)));d.isDefined(b)&&(a.$template=b);return c.all(a)}}).then(function(c){e==s.current&&(e&&(e.locals=c,d.copy(e.params,b)),a.$broadcast("$routeChangeSuccess",e,u))},function(b){e==s.current&&a.$broadcast("$routeChangeError",
+e,u,b)})}function l(){var a,b;d.forEach(h,function(c,h){var g;if(g=!b){var k=f.path();g=c.keys;var m={};if(c.regexp)if(k=c.regexp.exec(k)){for(var l=1,n=k.length;l<n;++l){var p=g[l-1],q=k[l];p&&q&&(m[p.name]=q)}g=m}else g=null;else g=null;g=a=g}g&&(b=r(c,{params:d.extend({},f.search(),a),pathParams:a}),b.$$route=c)});return b||h[null]&&r(h[null],{params:{},pathParams:{}})}function t(a,b){var c=[];d.forEach((a||"").split(":"),function(a,d){if(0===d)c.push(a);else{var f=a.match(/(\w+)(?:[?*])?(.*)/),
+h=f[1];c.push(b[h]);c.push(f[2]||"");delete b[h]}});return c.join("")}var w=!1,p,v,s={routes:h,reload:function(){w=!0;a.$evalAsync(function(){m();n()})},updateParams:function(a){if(this.current&&this.current.$$route)a=d.extend({},this.current.params,a),f.path(t(this.current.$$route.originalPath,a)),f.search(a);else throw B("norout");}};a.$on("$locationChangeStart",m);a.$on("$locationChangeSuccess",n);return s}]});var B=d.$$minErr("ngRoute");q.provider("$routeParams",function(){this.$get=function(){return{}}});
+q.directive("ngView",v);q.directive("ngView",A);v.$inject=["$route","$anchorScroll","$animate"];A.$inject=["$compile","$controller","$route"]})(window,window.angular);
+//# sourceMappingURL=angular-route.min.js.map \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-sanitize.min.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-sanitize.min.js
new file mode 100644
index 00000000..65fc5a4e
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-sanitize.min.js
@@ -0,0 +1,16 @@
+/*
+ AngularJS v1.3.14
+ (c) 2010-2014 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(n,h,p){'use strict';function E(a){var e=[];r(e,h.noop).chars(a);return e.join("")}function g(a){var e={};a=a.split(",");var d;for(d=0;d<a.length;d++)e[a[d]]=!0;return e}function F(a,e){function d(a,b,d,l){b=h.lowercase(b);if(s[b])for(;f.last()&&t[f.last()];)c("",f.last());u[b]&&f.last()==b&&c("",b);(l=v[b]||!!l)||f.push(b);var m={};d.replace(G,function(a,b,e,c,d){m[b]=q(e||c||d||"")});e.start&&e.start(b,m,l)}function c(a,b){var c=0,d;if(b=h.lowercase(b))for(c=f.length-1;0<=c&&f[c]!=b;c--);
+if(0<=c){for(d=f.length-1;d>=c;d--)e.end&&e.end(f[d]);f.length=c}}"string"!==typeof a&&(a=null===a||"undefined"===typeof a?"":""+a);var b,k,f=[],m=a,l;for(f.last=function(){return f[f.length-1]};a;){l="";k=!0;if(f.last()&&w[f.last()])a=a.replace(new RegExp("([\\W\\w]*)<\\s*\\/\\s*"+f.last()+"[^>]*>","i"),function(a,b){b=b.replace(H,"$1").replace(I,"$1");e.chars&&e.chars(q(b));return""}),c("",f.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--",4),0<=b&&a.lastIndexOf("--\x3e",b)===b&&(e.comment&&
+e.comment(a.substring(4,b)),a=a.substring(b+3),k=!1);else if(x.test(a)){if(b=a.match(x))a=a.replace(b[0],""),k=!1}else if(J.test(a)){if(b=a.match(y))a=a.substring(b[0].length),b[0].replace(y,c),k=!1}else K.test(a)&&((b=a.match(z))?(b[4]&&(a=a.substring(b[0].length),b[0].replace(z,d)),k=!1):(l+="<",a=a.substring(1)));k&&(b=a.indexOf("<"),l+=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),e.chars&&e.chars(q(l)))}if(a==m)throw L("badparse",a);m=a}c()}function q(a){if(!a)return"";A.innerHTML=a.replace(/</g,
+"&lt;");return A.textContent}function B(a){return a.replace(/&/g,"&amp;").replace(M,function(a){var d=a.charCodeAt(0);a=a.charCodeAt(1);return"&#"+(1024*(d-55296)+(a-56320)+65536)+";"}).replace(N,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function r(a,e){var d=!1,c=h.bind(a,a.push);return{start:function(a,k,f){a=h.lowercase(a);!d&&w[a]&&(d=a);d||!0!==C[a]||(c("<"),c(a),h.forEach(k,function(d,f){var k=h.lowercase(f),g="img"===a&&"src"===k||"background"===
+k;!0!==O[k]||!0===D[k]&&!e(d,g)||(c(" "),c(f),c('="'),c(B(d)),c('"'))}),c(f?"/>":">"))},end:function(a){a=h.lowercase(a);d||!0!==C[a]||(c("</"),c(a),c(">"));a==d&&(d=!1)},chars:function(a){d||c(B(a))}}}var L=h.$$minErr("$sanitize"),z=/^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,y=/^<\/\s*([\w:-]+)[^>]*>/,G=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,K=/^</,J=/^<\//,H=/\x3c!--(.*?)--\x3e/g,x=/<!DOCTYPE([^>]*?)>/i,
+I=/<!\[CDATA\[(.*?)]]\x3e/g,M=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,N=/([^\#-~| |!])/g,v=g("area,br,col,hr,img,wbr");n=g("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr");p=g("rp,rt");var u=h.extend({},p,n),s=h.extend({},n,g("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),t=h.extend({},p,g("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var"));
+n=g("animate,animateColor,animateMotion,animateTransform,circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,set,stop,svg,switch,text,title,tspan,use");var w=g("script,style"),C=h.extend({},v,s,t,u,n),D=g("background,cite,href,longdesc,src,usemap,xlink:href");n=g("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,target,title,type,valign,value,vspace,width");
+p=g("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,attributeName,attributeType,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan");
+var O=h.extend({},D,p,n),A=document.createElement("pre");h.module("ngSanitize",[]).provider("$sanitize",function(){this.$get=["$$sanitizeUri",function(a){return function(e){var d=[];F(e,r(d,function(c,b){return!/^unsafe/.test(a(c,b))}));return d.join("")}}]});h.module("ngSanitize").filter("linky",["$sanitize",function(a){var e=/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/,d=/^mailto:/;return function(c,b){function k(a){a&&g.push(E(a))}function f(a,c){g.push("<a ");
+h.isDefined(b)&&g.push('target="',b,'" ');g.push('href="',a.replace(/"/g,"&quot;"),'">');k(c);g.push("</a>")}if(!c)return c;for(var m,l=c,g=[],n,p;m=l.match(e);)n=m[0],m[2]||m[4]||(n=(m[3]?"http://":"mailto:")+n),p=m.index,k(l.substr(0,p)),f(n,m[0].replace(d,"")),l=l.substring(p+m[0].length);k(l);return a(g.join(""))}}])})(window,window.angular);
+//# sourceMappingURL=angular-sanitize.min.js.map \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-utils-pagination/dirPagination.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-utils-pagination/dirPagination.js
new file mode 100644
index 00000000..a1a72652
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular-utils-pagination/dirPagination.js
@@ -0,0 +1,639 @@
+/**
+ * dirPagination - AngularJS module for paginating (almost) anything.
+ *
+ *
+ * Credits
+ * =======
+ *
+ * Daniel Tabuenca: https://groups.google.com/d/msg/angular/an9QpzqIYiM/r8v-3W1X5vcJ
+ * for the idea on how to dynamically invoke the ng-repeat directive.
+ *
+ * I borrowed a couple of lines and a few attribute names from the AngularUI Bootstrap project:
+ * https://github.com/angular-ui/bootstrap/blob/master/src/pagination/pagination.js
+ *
+ * Copyright 2014 Michael Bromley <michael@michaelbromley.co.uk>
+ */
+
+(function() {
+
+ /**
+ * Config
+ */
+ var moduleName = 'angularUtils.directives.dirPagination';
+ var DEFAULT_ID = '__default';
+
+ /**
+ * Module
+ */
+ angular.module(moduleName, [])
+ .directive('dirPaginate', ['$compile', '$parse', 'paginationService', dirPaginateDirective])
+ .directive('dirPaginateNoCompile', noCompileDirective)
+ .directive('dirPaginationControls', ['paginationService', 'paginationTemplate', dirPaginationControlsDirective])
+ .filter('itemsPerPage', ['paginationService', itemsPerPageFilter])
+ .service('paginationService', paginationService)
+ .provider('paginationTemplate', paginationTemplateProvider)
+ .run(['$templateCache',dirPaginationControlsTemplateInstaller]);
+
+ function dirPaginateDirective($compile, $parse, paginationService) {
+
+ return {
+ terminal: true,
+ multiElement: true,
+ priority: 100,
+ compile: dirPaginationCompileFn
+ };
+
+ function dirPaginationCompileFn(tElement, tAttrs){
+
+ var expression = tAttrs.dirPaginate;
+ // regex taken directly from https://github.com/angular/angular.js/blob/v1.4.x/src/ng/directive/ngRepeat.js#L339
+ var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
+
+ var filterPattern = /\|\s*itemsPerPage\s*:\s*(.*\(\s*\w*\)|([^\)]*?(?=\s+as\s+))|[^\)]*)/;
+ if (match[2].match(filterPattern) === null) {
+ throw 'pagination directive: the \'itemsPerPage\' filter must be set.';
+ }
+ var itemsPerPageFilterRemoved = match[2].replace(filterPattern, '');
+ var collectionGetter = $parse(itemsPerPageFilterRemoved);
+
+ addNoCompileAttributes(tElement);
+
+ // If any value is specified for paginationId, we register the un-evaluated expression at this stage for the benefit of any
+ // dir-pagination-controls directives that may be looking for this ID.
+ var rawId = tAttrs.paginationId || DEFAULT_ID;
+ paginationService.registerInstance(rawId);
+
+ return function dirPaginationLinkFn(scope, element, attrs){
+
+ // Now that we have access to the `scope` we can interpolate any expression given in the paginationId attribute and
+ // potentially register a new ID if it evaluates to a different value than the rawId.
+ var paginationId = $parse(attrs.paginationId)(scope) || attrs.paginationId || DEFAULT_ID;
+
+ // (TODO: this seems sound, but I'm reverting as many bug reports followed it's introduction in 0.11.0.
+ // Needs more investigation.)
+ // In case rawId != paginationId we deregister using rawId for the sake of general cleanliness
+ // before registering using paginationId
+ // paginationService.deregisterInstance(rawId);
+ paginationService.registerInstance(paginationId);
+
+ var repeatExpression = getRepeatExpression(expression, paginationId);
+ addNgRepeatToElement(element, attrs, repeatExpression);
+
+ removeTemporaryAttributes(element);
+ var compiled = $compile(element);
+
+ var currentPageGetter = makeCurrentPageGetterFn(scope, attrs, paginationId);
+ paginationService.setCurrentPageParser(paginationId, currentPageGetter, scope);
+
+ if (typeof attrs.totalItems !== 'undefined') {
+ paginationService.setAsyncModeTrue(paginationId);
+ scope.$watch(function() {
+ return $parse(attrs.totalItems)(scope);
+ }, function (result) {
+ if (0 <= result) {
+ paginationService.setCollectionLength(paginationId, result);
+ }
+ });
+ } else {
+ paginationService.setAsyncModeFalse(paginationId);
+ scope.$watchCollection(function() {
+ return collectionGetter(scope);
+ }, function(collection) {
+ if (collection) {
+ var collectionLength = (collection instanceof Array) ? collection.length : Object.keys(collection).length;
+ paginationService.setCollectionLength(paginationId, collectionLength);
+ }
+ });
+ }
+
+ // Delegate to the link function returned by the new compilation of the ng-repeat
+ compiled(scope);
+
+ // (TODO: Reverting this due to many bug reports in v 0.11.0. Needs investigation as the
+ // principle is sound)
+ // When the scope is destroyed, we make sure to remove the reference to it in paginationService
+ // so that it can be properly garbage collected
+ // scope.$on('$destroy', function destroyDirPagination() {
+ // paginationService.deregisterInstance(paginationId);
+ // });
+ };
+ }
+
+ /**
+ * If a pagination id has been specified, we need to check that it is present as the second argument passed to
+ * the itemsPerPage filter. If it is not there, we add it and return the modified expression.
+ *
+ * @param expression
+ * @param paginationId
+ * @returns {*}
+ */
+ function getRepeatExpression(expression, paginationId) {
+ var repeatExpression,
+ idDefinedInFilter = !!expression.match(/(\|\s*itemsPerPage\s*:[^|]*:[^|]*)/);
+
+ if (paginationId !== DEFAULT_ID && !idDefinedInFilter) {
+ repeatExpression = expression.replace(/(\|\s*itemsPerPage\s*:\s*[^|\s]*)/, "$1 : '" + paginationId + "'");
+ } else {
+ repeatExpression = expression;
+ }
+
+ return repeatExpression;
+ }
+
+ /**
+ * Adds the ng-repeat directive to the element. In the case of multi-element (-start, -end) it adds the
+ * appropriate multi-element ng-repeat to the first and last element in the range.
+ * @param element
+ * @param attrs
+ * @param repeatExpression
+ */
+ function addNgRepeatToElement(element, attrs, repeatExpression) {
+ if (element[0].hasAttribute('dir-paginate-start') || element[0].hasAttribute('data-dir-paginate-start')) {
+ // using multiElement mode (dir-paginate-start, dir-paginate-end)
+ attrs.$set('ngRepeatStart', repeatExpression);
+ element.eq(element.length - 1).attr('ng-repeat-end', true);
+ } else {
+ attrs.$set('ngRepeat', repeatExpression);
+ }
+ }
+
+ /**
+ * Adds the dir-paginate-no-compile directive to each element in the tElement range.
+ * @param tElement
+ */
+ function addNoCompileAttributes(tElement) {
+ angular.forEach(tElement, function(el) {
+ if (el.nodeType === 1) {
+ angular.element(el).attr('dir-paginate-no-compile', true);
+ }
+ });
+ }
+
+ /**
+ * Removes the variations on dir-paginate (data-, -start, -end) and the dir-paginate-no-compile directives.
+ * @param element
+ */
+ function removeTemporaryAttributes(element) {
+ angular.forEach(element, function(el) {
+ if (el.nodeType === 1) {
+ angular.element(el).removeAttr('dir-paginate-no-compile');
+ }
+ });
+ element.eq(0).removeAttr('dir-paginate-start').removeAttr('dir-paginate').removeAttr('data-dir-paginate-start').removeAttr('data-dir-paginate');
+ element.eq(element.length - 1).removeAttr('dir-paginate-end').removeAttr('data-dir-paginate-end');
+ }
+
+ /**
+ * Creates a getter function for the current-page attribute, using the expression provided or a default value if
+ * no current-page expression was specified.
+ *
+ * @param scope
+ * @param attrs
+ * @param paginationId
+ * @returns {*}
+ */
+ function makeCurrentPageGetterFn(scope, attrs, paginationId) {
+ var currentPageGetter;
+ if (attrs.currentPage) {
+ currentPageGetter = $parse(attrs.currentPage);
+ } else {
+ // If the current-page attribute was not set, we'll make our own.
+ // Replace any non-alphanumeric characters which might confuse
+ // the $parse service and give unexpected results.
+ // See https://github.com/michaelbromley/angularUtils/issues/233
+ var defaultCurrentPage = (paginationId + '__currentPage').replace(/\W/g, '_');
+ scope[defaultCurrentPage] = 1;
+ currentPageGetter = $parse(defaultCurrentPage);
+ }
+ return currentPageGetter;
+ }
+ }
+
+ /**
+ * This is a helper directive that allows correct compilation when in multi-element mode (ie dir-paginate-start, dir-paginate-end).
+ * It is dynamically added to all elements in the dir-paginate compile function, and it prevents further compilation of
+ * any inner directives. It is then removed in the link function, and all inner directives are then manually compiled.
+ */
+ function noCompileDirective() {
+ return {
+ priority: 5000,
+ terminal: true
+ };
+ }
+
+ function dirPaginationControlsTemplateInstaller($templateCache) {
+ $templateCache.put('angularUtils.directives.dirPagination.template', '<ul class="pagination" ng-if="1 < pages.length || !autoHide"><li ng-if="boundaryLinks" ng-class="{ disabled : pagination.current == 1 }"><a href="" ng-click="setCurrent(1)">&laquo;</a></li><li ng-if="directionLinks" ng-class="{ disabled : pagination.current == 1 }"><a href="" ng-click="setCurrent(pagination.current - 1)">&lsaquo;</a></li><li ng-repeat="pageNumber in pages track by tracker(pageNumber, $index)" ng-class="{ active : pagination.current == pageNumber, disabled : pageNumber == \'...\' || ( ! autoHide && pages.length === 1 ) }"><a href="" ng-click="setCurrent(pageNumber)">{{ pageNumber }}</a></li><li ng-if="directionLinks" ng-class="{ disabled : pagination.current == pagination.last }"><a href="" ng-click="setCurrent(pagination.current + 1)">&rsaquo;</a></li><li ng-if="boundaryLinks" ng-class="{ disabled : pagination.current == pagination.last }"><a href="" ng-click="setCurrent(pagination.last)">&raquo;</a></li></ul>');
+ }
+
+ function dirPaginationControlsDirective(paginationService, paginationTemplate) {
+
+ var numberRegex = /^\d+$/;
+
+ var DDO = {
+ restrict: 'AE',
+ scope: {
+ maxSize: '=?',
+ onPageChange: '&?',
+ paginationId: '=?',
+ autoHide: '=?'
+ },
+ link: dirPaginationControlsLinkFn
+ };
+
+ // We need to check the paginationTemplate service to see whether a template path or
+ // string has been specified, and add the `template` or `templateUrl` property to
+ // the DDO as appropriate. The order of priority to decide which template to use is
+ // (highest priority first):
+ // 1. paginationTemplate.getString()
+ // 2. attrs.templateUrl
+ // 3. paginationTemplate.getPath()
+ var templateString = paginationTemplate.getString();
+ if (templateString !== undefined) {
+ DDO.template = templateString;
+ } else {
+ DDO.templateUrl = function(elem, attrs) {
+ return attrs.templateUrl || paginationTemplate.getPath();
+ };
+ }
+ return DDO;
+
+ function dirPaginationControlsLinkFn(scope, element, attrs) {
+
+ // rawId is the un-interpolated value of the pagination-id attribute. This is only important when the corresponding dir-paginate directive has
+ // not yet been linked (e.g. if it is inside an ng-if block), and in that case it prevents this controls directive from assuming that there is
+ // no corresponding dir-paginate directive and wrongly throwing an exception.
+ var rawId = attrs.paginationId || DEFAULT_ID;
+ var paginationId = scope.paginationId || attrs.paginationId || DEFAULT_ID;
+
+ if (!paginationService.isRegistered(paginationId) && !paginationService.isRegistered(rawId)) {
+ var idMessage = (paginationId !== DEFAULT_ID) ? ' (id: ' + paginationId + ') ' : ' ';
+ if (window.console) {
+ console.warn('Pagination directive: the pagination controls' + idMessage + 'cannot be used without the corresponding pagination directive, which was not found at link time.');
+ }
+ }
+
+ if (!scope.maxSize) { scope.maxSize = 9; }
+ scope.autoHide = scope.autoHide === undefined ? true : scope.autoHide;
+ scope.directionLinks = angular.isDefined(attrs.directionLinks) ? scope.$parent.$eval(attrs.directionLinks) : true;
+ scope.boundaryLinks = angular.isDefined(attrs.boundaryLinks) ? scope.$parent.$eval(attrs.boundaryLinks) : false;
+
+ var paginationRange = Math.max(scope.maxSize, 5);
+ scope.pages = [];
+ scope.pagination = {
+ last: 1,
+ current: 1
+ };
+ scope.range = {
+ lower: 1,
+ upper: 1,
+ total: 1
+ };
+
+ scope.$watch('maxSize', function(val) {
+ if (val) {
+ paginationRange = Math.max(scope.maxSize, 5);
+ generatePagination();
+ }
+ });
+
+ scope.$watch(function() {
+ if (paginationService.isRegistered(paginationId)) {
+ return (paginationService.getCollectionLength(paginationId) + 1) * paginationService.getItemsPerPage(paginationId);
+ }
+ }, function(length) {
+ if (0 < length) {
+ generatePagination();
+ }
+ });
+
+ scope.$watch(function() {
+ if (paginationService.isRegistered(paginationId)) {
+ return (paginationService.getItemsPerPage(paginationId));
+ }
+ }, function(current, previous) {
+ if (current != previous && typeof previous !== 'undefined') {
+ goToPage(scope.pagination.current);
+ }
+ });
+
+ scope.$watch(function() {
+ if (paginationService.isRegistered(paginationId)) {
+ return paginationService.getCurrentPage(paginationId);
+ }
+ }, function(currentPage, previousPage) {
+ if (currentPage != previousPage) {
+ goToPage(currentPage);
+ }
+ });
+
+ scope.setCurrent = function(num) {
+ if (paginationService.isRegistered(paginationId) && isValidPageNumber(num)) {
+ num = parseInt(num, 10);
+ paginationService.setCurrentPage(paginationId, num);
+ }
+ };
+
+ /**
+ * Custom "track by" function which allows for duplicate "..." entries on long lists,
+ * yet fixes the problem of wrongly-highlighted links which happens when using
+ * "track by $index" - see https://github.com/michaelbromley/angularUtils/issues/153
+ * @param id
+ * @param index
+ * @returns {string}
+ */
+ scope.tracker = function(id, index) {
+ return id + '_' + index;
+ };
+
+ function goToPage(num) {
+ if (paginationService.isRegistered(paginationId) && isValidPageNumber(num)) {
+ var oldPageNumber = scope.pagination.current;
+
+ scope.pages = generatePagesArray(num, paginationService.getCollectionLength(paginationId), paginationService.getItemsPerPage(paginationId), paginationRange);
+ scope.pagination.current = num;
+ updateRangeValues();
+
+ // if a callback has been set, then call it with the page number as the first argument
+ // and the previous page number as a second argument
+ if (scope.onPageChange) {
+ scope.onPageChange({
+ newPageNumber : num,
+ oldPageNumber : oldPageNumber
+ });
+ }
+ }
+ }
+
+ function generatePagination() {
+ if (paginationService.isRegistered(paginationId)) {
+ var page = parseInt(paginationService.getCurrentPage(paginationId)) || 1;
+ scope.pages = generatePagesArray(page, paginationService.getCollectionLength(paginationId), paginationService.getItemsPerPage(paginationId), paginationRange);
+ scope.pagination.current = page;
+ scope.pagination.last = scope.pages[scope.pages.length - 1];
+ if (scope.pagination.last < scope.pagination.current) {
+ scope.setCurrent(scope.pagination.last);
+ } else {
+ updateRangeValues();
+ }
+ }
+ }
+
+ /**
+ * This function updates the values (lower, upper, total) of the `scope.range` object, which can be used in the pagination
+ * template to display the current page range, e.g. "showing 21 - 40 of 144 results";
+ */
+ function updateRangeValues() {
+ if (paginationService.isRegistered(paginationId)) {
+ var currentPage = paginationService.getCurrentPage(paginationId),
+ itemsPerPage = paginationService.getItemsPerPage(paginationId),
+ totalItems = paginationService.getCollectionLength(paginationId);
+
+ scope.range.lower = (currentPage - 1) * itemsPerPage + 1;
+ scope.range.upper = Math.min(currentPage * itemsPerPage, totalItems);
+ scope.range.total = totalItems;
+ }
+ }
+ function isValidPageNumber(num) {
+ return (numberRegex.test(num) && (0 < num && num <= scope.pagination.last));
+ }
+ }
+
+ /**
+ * Generate an array of page numbers (or the '...' string) which is used in an ng-repeat to generate the
+ * links used in pagination
+ *
+ * @param currentPage
+ * @param rowsPerPage
+ * @param paginationRange
+ * @param collectionLength
+ * @returns {Array}
+ */
+ function generatePagesArray(currentPage, collectionLength, rowsPerPage, paginationRange) {
+ var pages = [];
+ var totalPages = Math.ceil(collectionLength / rowsPerPage);
+ var halfWay = Math.ceil(paginationRange / 2);
+ var position;
+
+ if (currentPage <= halfWay) {
+ position = 'start';
+ } else if (totalPages - halfWay < currentPage) {
+ position = 'end';
+ } else {
+ position = 'middle';
+ }
+
+ var ellipsesNeeded = paginationRange < totalPages;
+ var i = 1;
+ while (i <= totalPages && i <= paginationRange) {
+ var pageNumber = calculatePageNumber(i, currentPage, paginationRange, totalPages);
+
+ var openingEllipsesNeeded = (i === 2 && (position === 'middle' || position === 'end'));
+ var closingEllipsesNeeded = (i === paginationRange - 1 && (position === 'middle' || position === 'start'));
+ if (ellipsesNeeded && (openingEllipsesNeeded || closingEllipsesNeeded)) {
+ pages.push('...');
+ } else {
+ pages.push(pageNumber);
+ }
+ i ++;
+ }
+ return pages;
+ }
+
+ /**
+ * Given the position in the sequence of pagination links [i], figure out what page number corresponds to that position.
+ *
+ * @param i
+ * @param currentPage
+ * @param paginationRange
+ * @param totalPages
+ * @returns {*}
+ */
+ function calculatePageNumber(i, currentPage, paginationRange, totalPages) {
+ var halfWay = Math.ceil(paginationRange/2);
+ if (i === paginationRange) {
+ return totalPages;
+ } else if (i === 1) {
+ return i;
+ } else if (paginationRange < totalPages) {
+ if (totalPages - halfWay < currentPage) {
+ return totalPages - paginationRange + i;
+ } else if (halfWay < currentPage) {
+ return currentPage - halfWay + i;
+ } else {
+ return i;
+ }
+ } else {
+ return i;
+ }
+ }
+ }
+
+ /**
+ * This filter slices the collection into pages based on the current page number and number of items per page.
+ * @param paginationService
+ * @returns {Function}
+ */
+ function itemsPerPageFilter(paginationService) {
+
+ return function(collection, itemsPerPage, paginationId) {
+ if (typeof (paginationId) === 'undefined') {
+ paginationId = DEFAULT_ID;
+ }
+ if (!paginationService.isRegistered(paginationId)) {
+ throw 'pagination directive: the itemsPerPage id argument (id: ' + paginationId + ') does not match a registered pagination-id.';
+ }
+ var end;
+ var start;
+ if (angular.isObject(collection)) {
+ itemsPerPage = parseInt(itemsPerPage) || 9999999999;
+ if (paginationService.isAsyncMode(paginationId)) {
+ start = 0;
+ } else {
+ start = (paginationService.getCurrentPage(paginationId) - 1) * itemsPerPage;
+ }
+ end = start + itemsPerPage;
+ paginationService.setItemsPerPage(paginationId, itemsPerPage);
+
+ if (collection instanceof Array) {
+ // the array just needs to be sliced
+ return collection.slice(start, end);
+ } else {
+ // in the case of an object, we need to get an array of keys, slice that, then map back to
+ // the original object.
+ var slicedObject = {};
+ angular.forEach(keys(collection).slice(start, end), function(key) {
+ slicedObject[key] = collection[key];
+ });
+ return slicedObject;
+ }
+ } else {
+ return collection;
+ }
+ };
+ }
+
+ /**
+ * Shim for the Object.keys() method which does not exist in IE < 9
+ * @param obj
+ * @returns {Array}
+ */
+ function keys(obj) {
+ if (!Object.keys) {
+ var objKeys = [];
+ for (var i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ objKeys.push(i);
+ }
+ }
+ return objKeys;
+ } else {
+ return Object.keys(obj);
+ }
+ }
+
+ /**
+ * This service allows the various parts of the module to communicate and stay in sync.
+ */
+ function paginationService() {
+
+ var instances = {};
+ var lastRegisteredInstance;
+
+ this.registerInstance = function(instanceId) {
+ if (typeof instances[instanceId] === 'undefined') {
+ instances[instanceId] = {
+ asyncMode: false
+ };
+ lastRegisteredInstance = instanceId;
+ }
+ };
+
+ this.deregisterInstance = function(instanceId) {
+ delete instances[instanceId];
+ };
+
+ this.isRegistered = function(instanceId) {
+ return (typeof instances[instanceId] !== 'undefined');
+ };
+
+ this.getLastInstanceId = function() {
+ return lastRegisteredInstance;
+ };
+
+ this.setCurrentPageParser = function(instanceId, val, scope) {
+ instances[instanceId].currentPageParser = val;
+ instances[instanceId].context = scope;
+ };
+ this.setCurrentPage = function(instanceId, val) {
+ instances[instanceId].currentPageParser.assign(instances[instanceId].context, val);
+ };
+ this.getCurrentPage = function(instanceId) {
+ var parser = instances[instanceId].currentPageParser;
+ return parser ? parser(instances[instanceId].context) : 1;
+ };
+
+ this.setItemsPerPage = function(instanceId, val) {
+ instances[instanceId].itemsPerPage = val;
+ };
+ this.getItemsPerPage = function(instanceId) {
+ return instances[instanceId].itemsPerPage;
+ };
+
+ this.setCollectionLength = function(instanceId, val) {
+ instances[instanceId].collectionLength = val;
+ };
+ this.getCollectionLength = function(instanceId) {
+ return instances[instanceId].collectionLength;
+ };
+
+ this.setAsyncModeTrue = function(instanceId) {
+ instances[instanceId].asyncMode = true;
+ };
+
+ this.setAsyncModeFalse = function(instanceId) {
+ instances[instanceId].asyncMode = false;
+ };
+
+ this.isAsyncMode = function(instanceId) {
+ return instances[instanceId].asyncMode;
+ };
+ }
+
+ /**
+ * This provider allows global configuration of the template path used by the dir-pagination-controls directive.
+ */
+ function paginationTemplateProvider() {
+
+ var templatePath = 'angularUtils.directives.dirPagination.template';
+ var templateString;
+
+ /**
+ * Set a templateUrl to be used by all instances of <dir-pagination-controls>
+ * @param {String} path
+ */
+ this.setPath = function(path) {
+ templatePath = path;
+ };
+
+ /**
+ * Set a string of HTML to be used as a template by all instances
+ * of <dir-pagination-controls>. If both a path *and* a string have been set,
+ * the string takes precedence.
+ * @param {String} str
+ */
+ this.setString = function(str) {
+ templateString = str;
+ };
+
+ this.$get = function() {
+ return {
+ getPath: function() {
+ return templatePath;
+ },
+ getString: function() {
+ return templateString;
+ }
+ };
+ };
+ }
+})();
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular.min.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular.min.js
new file mode 100644
index 00000000..7f3704c9
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angular.min.js
@@ -0,0 +1,250 @@
+/*
+ AngularJS v1.3.14
+ (c) 2010-2014 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(P,X,u){'use strict';function M(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.3.14/"+(b?b+"/":"")+a;for(a=1;a<arguments.length;a++){c=c+(1==a?"?":"&")+"p"+(a-1)+"=";var d=encodeURIComponent,e;e=arguments[a];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=d(e)}return Error(c)}}function Ta(b){if(null==b||Ua(b))return!1;var a=b.length;return b.nodeType===
+na&&a?!0:x(b)||E(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function s(b,a,c){var d,e;if(b)if(G(b))for(d in b)"prototype"==d||"length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d)||a.call(c,b[d],d,b);else if(E(b)||Ta(b)){var f="object"!==typeof b;d=0;for(e=b.length;d<e;d++)(f||d in b)&&a.call(c,b[d],d,b)}else if(b.forEach&&b.forEach!==s)b.forEach(a,c,b);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d,b);return b}function Ed(b,a,c){for(var d=Object.keys(b).sort(),e=0;e<d.length;e++)a.call(c,
+b[d[e]],d[e]);return d}function lc(b){return function(a,c){b(c,a)}}function Fd(){return++ob}function mc(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function w(b){for(var a=b.$$hashKey,c=1,d=arguments.length;c<d;c++){var e=arguments[c];if(e)for(var f=Object.keys(e),g=0,h=f.length;g<h;g++){var l=f[g];b[l]=e[l]}}mc(b,a);return b}function $(b){return parseInt(b,10)}function Pb(b,a){return w(Object.create(b),a)}function B(){}function oa(b){return b}function da(b){return function(){return b}}function z(b){return"undefined"===
+typeof b}function y(b){return"undefined"!==typeof b}function J(b){return null!==b&&"object"===typeof b}function x(b){return"string"===typeof b}function V(b){return"number"===typeof b}function pa(b){return"[object Date]"===Da.call(b)}function G(b){return"function"===typeof b}function pb(b){return"[object RegExp]"===Da.call(b)}function Ua(b){return b&&b.window===b}function Va(b){return b&&b.$evalAsync&&b.$watch}function Wa(b){return"boolean"===typeof b}function nc(b){return!(!b||!(b.nodeName||b.prop&&
+b.attr&&b.find))}function Gd(b){var a={};b=b.split(",");var c;for(c=0;c<b.length;c++)a[b[c]]=!0;return a}function ta(b){return R(b.nodeName||b[0]&&b[0].nodeName)}function Xa(b,a){var c=b.indexOf(a);0<=c&&b.splice(c,1);return a}function Ea(b,a,c,d){if(Ua(b)||Va(b))throw Ka("cpws");if(a){if(b===a)throw Ka("cpi");c=c||[];d=d||[];if(J(b)){var e=c.indexOf(b);if(-1!==e)return d[e];c.push(b);d.push(a)}if(E(b))for(var f=a.length=0;f<b.length;f++)e=Ea(b[f],null,c,d),J(b[f])&&(c.push(b[f]),d.push(e)),a.push(e);
+else{var g=a.$$hashKey;E(a)?a.length=0:s(a,function(b,c){delete a[c]});for(f in b)b.hasOwnProperty(f)&&(e=Ea(b[f],null,c,d),J(b[f])&&(c.push(b[f]),d.push(e)),a[f]=e);mc(a,g)}}else if(a=b)E(b)?a=Ea(b,[],c,d):pa(b)?a=new Date(b.getTime()):pb(b)?(a=new RegExp(b.source,b.toString().match(/[^\/]*$/)[0]),a.lastIndex=b.lastIndex):J(b)&&(e=Object.create(Object.getPrototypeOf(b)),a=Ea(b,e,c,d));return a}function qa(b,a){if(E(b)){a=a||[];for(var c=0,d=b.length;c<d;c++)a[c]=b[c]}else if(J(b))for(c in a=a||{},
+b)if("$"!==c.charAt(0)||"$"!==c.charAt(1))a[c]=b[c];return a||b}function ea(b,a){if(b===a)return!0;if(null===b||null===a)return!1;if(b!==b&&a!==a)return!0;var c=typeof b,d;if(c==typeof a&&"object"==c)if(E(b)){if(!E(a))return!1;if((c=b.length)==a.length){for(d=0;d<c;d++)if(!ea(b[d],a[d]))return!1;return!0}}else{if(pa(b))return pa(a)?ea(b.getTime(),a.getTime()):!1;if(pb(b)&&pb(a))return b.toString()==a.toString();if(Va(b)||Va(a)||Ua(b)||Ua(a)||E(a))return!1;c={};for(d in b)if("$"!==d.charAt(0)&&!G(b[d])){if(!ea(b[d],
+a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&&"$"!==d.charAt(0)&&a[d]!==u&&!G(a[d]))return!1;return!0}return!1}function Ya(b,a,c){return b.concat(Za.call(a,c))}function oc(b,a){var c=2<arguments.length?Za.call(arguments,2):[];return!G(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?a.apply(b,Ya(c,arguments,0)):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Hd(b,a){var c=a;"string"===typeof b&&"$"===b.charAt(0)&&"$"===b.charAt(1)?
+c=u:Ua(a)?c="$WINDOW":a&&X===a?c="$DOCUMENT":Va(a)&&(c="$SCOPE");return c}function $a(b,a){if("undefined"===typeof b)return u;V(a)||(a=a?2:null);return JSON.stringify(b,Hd,a)}function pc(b){return x(b)?JSON.parse(b):b}function ua(b){b=C(b).clone();try{b.empty()}catch(a){}var c=C("<div>").append(b).html();try{return b[0].nodeType===qb?R(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+R(b)})}catch(d){return R(c)}}function qc(b){try{return decodeURIComponent(b)}catch(a){}}function rc(b){var a=
+{},c,d;s((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g,"%20").split("="),d=qc(c[0]),y(d)&&(b=y(c[1])?qc(c[1]):!0,sc.call(a,d)?E(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Qb(b){var a=[];s(b,function(b,d){E(b)?s(b,function(b){a.push(Fa(d,!0)+(!0===b?"":"="+Fa(b,!0)))}):a.push(Fa(d,!0)+(!0===b?"":"="+Fa(b,!0)))});return a.length?a.join("&"):""}function rb(b){return Fa(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Fa(b,a){return encodeURIComponent(b).replace(/%40/gi,
+"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Id(b,a){var c,d,e=sb.length;b=C(b);for(d=0;d<e;++d)if(c=sb[d]+a,x(c=b.attr(c)))return c;return null}function Jd(b,a){var c,d,e={};s(sb,function(a){a+="app";!c&&b.hasAttribute&&b.hasAttribute(a)&&(c=b,d=b.getAttribute(a))});s(sb,function(a){a+="app";var e;!c&&(e=b.querySelector("["+a.replace(":","\\:")+"]"))&&(c=e,d=e.getAttribute(a))});c&&(e.strictDi=null!==Id(c,"strict-di"),
+a(c,d?[d]:[],e))}function tc(b,a,c){J(c)||(c={});c=w({strictDi:!1},c);var d=function(){b=C(b);if(b.injector()){var d=b[0]===X?"document":ua(b);throw Ka("btstrpd",d.replace(/</,"&lt;").replace(/>/,"&gt;"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=ab(a,c.strictDi);d.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",
+d);c(b)(a)})}]);return d},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;P&&e.test(P.name)&&(c.debugInfoEnabled=!0,P.name=P.name.replace(e,""));if(P&&!f.test(P.name))return d();P.name=P.name.replace(f,"");aa.resumeBootstrap=function(b){s(b,function(b){a.push(b)});return d()};G(aa.resumeDeferredBootstrap)&&aa.resumeDeferredBootstrap()}function Kd(){P.name="NG_ENABLE_DEBUG_INFO!"+P.name;P.location.reload()}function Ld(b){b=aa.element(b).injector();if(!b)throw Ka("test");return b.get("$$testability")}
+function uc(b,a){a=a||"_";return b.replace(Md,function(b,d){return(d?a:"")+b.toLowerCase()})}function Nd(){var b;vc||((ra=P.jQuery)&&ra.fn.on?(C=ra,w(ra.fn,{scope:La.scope,isolateScope:La.isolateScope,controller:La.controller,injector:La.injector,inheritedData:La.inheritedData}),b=ra.cleanData,ra.cleanData=function(a){var c;if(Rb)Rb=!1;else for(var d=0,e;null!=(e=a[d]);d++)(c=ra._data(e,"events"))&&c.$destroy&&ra(e).triggerHandler("$destroy");b(a)}):C=Q,aa.element=C,vc=!0)}function Sb(b,a,c){if(!b)throw Ka("areq",
+a||"?",c||"required");return b}function tb(b,a,c){c&&E(b)&&(b=b[b.length-1]);Sb(G(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Ma(b,a){if("hasOwnProperty"===b)throw Ka("badname",a);}function wc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g<f;g++)d=a[g],b&&(b=(e=b)[d]);return!c&&G(b)?oc(e,b):b}function ub(b){var a=b[0];b=b[b.length-1];var c=[a];do{a=a.nextSibling;if(!a)break;c.push(a)}while(a!==b);return C(c)}function fa(){return Object.create(null)}
+function Od(b){function a(a,b,c){return a[b]||(a[b]=c())}var c=M("$injector"),d=M("ng");b=a(b,"angular",Object);b.$$minErr=b.$$minErr||M;return a(b,"module",function(){var b={};return function(f,g,h){if("hasOwnProperty"===f)throw d("badname","module");g&&b.hasOwnProperty(f)&&(b[f]=null);return a(b,f,function(){function a(c,d,e,f){f||(f=b);return function(){f[e||"push"]([c,d,arguments]);return t}}if(!g)throw c("nomod",f);var b=[],d=[],e=[],q=a("$injector","invoke","push",d),t={_invokeQueue:b,_configBlocks:d,
+_runBlocks:e,requires:g,name:f,provider:a("$provide","provider"),factory:a("$provide","factory"),service:a("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),animation:a("$animateProvider","register"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:q,run:function(a){e.push(a);return this}};h&&q(h);return t})}})}function Pd(b){w(b,{bootstrap:tc,copy:Ea,extend:w,equals:ea,
+element:C,forEach:s,injector:ab,noop:B,bind:oc,toJson:$a,fromJson:pc,identity:oa,isUndefined:z,isDefined:y,isString:x,isFunction:G,isObject:J,isNumber:V,isElement:nc,isArray:E,version:Qd,isDate:pa,lowercase:R,uppercase:vb,callbacks:{counter:0},getTestability:Ld,$$minErr:M,$$csp:bb,reloadWithDebugInfo:Kd});cb=Od(P);try{cb("ngLocale")}catch(a){cb("ngLocale",[]).provider("$locale",Rd)}cb("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Sd});a.provider("$compile",xc).directive({a:Td,
+input:yc,textarea:yc,form:Ud,script:Vd,select:Wd,style:Xd,option:Yd,ngBind:Zd,ngBindHtml:$d,ngBindTemplate:ae,ngClass:be,ngClassEven:ce,ngClassOdd:de,ngCloak:ee,ngController:fe,ngForm:ge,ngHide:he,ngIf:ie,ngInclude:je,ngInit:ke,ngNonBindable:le,ngPluralize:me,ngRepeat:ne,ngShow:oe,ngStyle:pe,ngSwitch:qe,ngSwitchWhen:re,ngSwitchDefault:se,ngOptions:te,ngTransclude:ue,ngModel:ve,ngList:we,ngChange:xe,pattern:zc,ngPattern:zc,required:Ac,ngRequired:Ac,minlength:Bc,ngMinlength:Bc,maxlength:Cc,ngMaxlength:Cc,
+ngValue:ye,ngModelOptions:ze}).directive({ngInclude:Ae}).directive(wb).directive(Dc);a.provider({$anchorScroll:Be,$animate:Ce,$browser:De,$cacheFactory:Ee,$controller:Fe,$document:Ge,$exceptionHandler:He,$filter:Ec,$interpolate:Ie,$interval:Je,$http:Ke,$httpBackend:Le,$location:Me,$log:Ne,$parse:Oe,$rootScope:Pe,$q:Qe,$$q:Re,$sce:Se,$sceDelegate:Te,$sniffer:Ue,$templateCache:Ve,$templateRequest:We,$$testability:Xe,$timeout:Ye,$window:Ze,$$rAF:$e,$$asyncCallback:af,$$jqLite:bf})}])}function db(b){return b.replace(cf,
+function(a,b,d,e){return e?d.toUpperCase():d}).replace(df,"Moz$1")}function Fc(b){b=b.nodeType;return b===na||!b||9===b}function Gc(b,a){var c,d,e=a.createDocumentFragment(),f=[];if(Tb.test(b)){c=c||e.appendChild(a.createElement("div"));d=(ef.exec(b)||["",""])[1].toLowerCase();d=ga[d]||ga._default;c.innerHTML=d[1]+b.replace(ff,"<$1></$2>")+d[2];for(d=d[0];d--;)c=c.lastChild;f=Ya(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";s(f,function(a){e.appendChild(a)});
+return e}function Q(b){if(b instanceof Q)return b;var a;x(b)&&(b=T(b),a=!0);if(!(this instanceof Q)){if(a&&"<"!=b.charAt(0))throw Ub("nosel");return new Q(b)}if(a){a=X;var c;b=(c=gf.exec(b))?[a.createElement(c[1])]:(c=Gc(b,a))?c.childNodes:[]}Hc(this,b)}function Vb(b){return b.cloneNode(!0)}function xb(b,a){a||yb(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;d<e;d++)yb(c[d])}function Ic(b,a,c,d){if(y(d))throw Ub("offargs");var e=(d=zb(b))&&d.events,f=d&&d.handle;if(f)if(a)s(a.split(" "),
+function(a){if(y(c)){var d=e[a];Xa(d||[],c);if(d&&0<d.length)return}b.removeEventListener(a,f,!1);delete e[a]});else for(a in e)"$destroy"!==a&&b.removeEventListener(a,f,!1),delete e[a]}function yb(b,a){var c=b.ng339,d=c&&Ab[c];d&&(a?delete d.data[a]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),Ic(b)),delete Ab[c],b.ng339=u))}function zb(b,a){var c=b.ng339,c=c&&Ab[c];a&&!c&&(b.ng339=c=++hf,c=Ab[c]={events:{},data:{},handle:u});return c}function Wb(b,a,c){if(Fc(b)){var d=y(c),e=!d&&a&&!J(a),
+f=!a;b=(b=zb(b,!e))&&b.data;if(d)b[a]=c;else{if(f)return b;if(e)return b&&b[a];w(b,a)}}}function Bb(b,a){return b.getAttribute?-1<(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" "):!1}function Cb(b,a){a&&b.setAttribute&&s(a.split(" "),function(a){b.setAttribute("class",T((" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+T(a)+" "," ")))})}function Db(b,a){if(a&&b.setAttribute){var c=(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");
+s(a.split(" "),function(a){a=T(a);-1===c.indexOf(" "+a+" ")&&(c+=a+" ")});b.setAttribute("class",T(c))}}function Hc(b,a){if(a)if(a.nodeType)b[b.length++]=a;else{var c=a.length;if("number"===typeof c&&a.window!==a){if(c)for(var d=0;d<c;d++)b[b.length++]=a[d]}else b[b.length++]=a}}function Jc(b,a){return Eb(b,"$"+(a||"ngController")+"Controller")}function Eb(b,a,c){9==b.nodeType&&(b=b.documentElement);for(a=E(a)?a:[a];b;){for(var d=0,e=a.length;d<e;d++)if((c=C.data(b,a[d]))!==u)return c;b=b.parentNode||
+11===b.nodeType&&b.host}}function Kc(b){for(xb(b,!0);b.firstChild;)b.removeChild(b.firstChild)}function Lc(b,a){a||xb(b);var c=b.parentNode;c&&c.removeChild(b)}function jf(b,a){a=a||P;if("complete"===a.document.readyState)a.setTimeout(b);else C(a).on("load",b)}function Mc(b,a){var c=Fb[a.toLowerCase()];return c&&Nc[ta(b)]&&c}function kf(b,a){var c=b.nodeName;return("INPUT"===c||"TEXTAREA"===c)&&Oc[a]}function lf(b,a){var c=function(c,e){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=
+a[e||c.type],g=f?f.length:0;if(g){if(z(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};1<g&&(f=qa(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||f[l].call(b,c)}};c.elem=b;return c}function bf(){this.$get=function(){return w(Q,{hasClass:function(b,a){b.attr&&(b=b[0]);
+return Bb(b,a)},addClass:function(b,a){b.attr&&(b=b[0]);return Db(b,a)},removeClass:function(b,a){b.attr&&(b=b[0]);return Cb(b,a)}})}}function Na(b,a){var c=b&&b.$$hashKey;if(c)return"function"===typeof c&&(c=b.$$hashKey()),c;c=typeof b;return c="function"==c||"object"==c&&null!==b?b.$$hashKey=c+":"+(a||Fd)():c+":"+b}function eb(b,a){if(a){var c=0;this.nextUid=function(){return++c}}s(b,this.put,this)}function mf(b){return(b=b.toString().replace(Pc,"").match(Qc))?"function("+(b[1]||"").replace(/[\s\r\n]+/,
+" ")+")":"fn"}function ab(b,a){function c(a){return function(b,c){if(J(b))s(b,lc(a));else return a(b,c)}}function d(a,b){Ma(a,"service");if(G(b)||E(b))b=q.instantiate(b);if(!b.$get)throw Ga("pget",a);return p[a+"Provider"]=b}function e(a,b){return function(){var c=r.invoke(b,this);if(z(c))throw Ga("undef",a);return c}}function f(a,b,c){return d(a,{$get:!1!==c?e(a,b):b})}function g(a){var b=[],c;s(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=q.get(e[0]);f[e[1]].apply(f,
+e[2])}}if(!m.get(a)){m.put(a,!0);try{x(a)?(c=cb(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):G(a)?b.push(q.invoke(a)):E(a)?b.push(q.invoke(a)):tb(a,"module")}catch(e){throw E(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ga("modulerr",a,e.stack||e.message||e);}}});return b}function h(b,c){function d(a,e){if(b.hasOwnProperty(a)){if(b[a]===l)throw Ga("cdep",a+" <- "+k.join(" <- "));return b[a]}try{return k.unshift(a),
+b[a]=l,b[a]=c(a,e)}catch(f){throw b[a]===l&&delete b[a],f;}finally{k.shift()}}function e(b,c,f,g){"string"===typeof f&&(g=f,f=null);var h=[],k=ab.$$annotate(b,a,g),l,q,p;q=0;for(l=k.length;q<l;q++){p=k[q];if("string"!==typeof p)throw Ga("itkn",p);h.push(f&&f.hasOwnProperty(p)?f[p]:d(p,g))}E(b)&&(b=b[l]);return b.apply(c,h)}return{invoke:e,instantiate:function(a,b,c){var d=Object.create((E(a)?a[a.length-1]:a).prototype||null);a=e(a,d,b,c);return J(a)||G(a)?a:d},get:d,annotate:ab.$$annotate,has:function(a){return p.hasOwnProperty(a+
+"Provider")||b.hasOwnProperty(a)}}}a=!0===a;var l={},k=[],m=new eb([],!0),p={$provide:{provider:c(d),factory:c(f),service:c(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:c(function(a,b){return f(a,da(b),!1)}),constant:c(function(a,b){Ma(a,"constant");p[a]=b;t[a]=b}),decorator:function(a,b){var c=q.get(a+"Provider"),d=c.$get;c.$get=function(){var a=r.invoke(d,c);return r.invoke(b,null,{$delegate:a})}}}},q=p.$injector=h(p,function(a,b){aa.isString(b)&&k.push(b);
+throw Ga("unpr",k.join(" <- "));}),t={},r=t.$injector=h(t,function(a,b){var c=q.get(a+"Provider",b);return r.invoke(c.$get,c,u,a)});s(g(b),function(a){r.invoke(a||B)});return r}function Be(){var b=!0;this.disableAutoScrolling=function(){b=!1};this.$get=["$window","$location","$rootScope",function(a,c,d){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===ta(a))return b=a,!0});return b}function f(b){if(b){b.scrollIntoView();var c;c=g.yOffset;G(c)?c=c():nc(c)?(c=c[0],c="fixed"!==
+a.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):V(c)||(c=0);c&&(b=b.getBoundingClientRect().top,a.scrollBy(0,b-c))}else a.scrollTo(0,0)}function g(){var a=c.hash(),b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=a.document;b&&d.$watch(function(){return c.hash()},function(a,b){a===b&&""===a||jf(function(){d.$evalAsync(g)})});return g}]}function af(){this.$get=["$$rAF","$timeout",function(b,a){return b.supported?function(a){return b(a)}:
+function(b){return a(b,0,!1)}}]}function nf(b,a,c,d){function e(a){try{a.apply(null,Za.call(arguments,1))}finally{if(n--,0===n)for(;D.length;)try{D.pop()()}catch(b){c.error(b)}}}function f(a,b){(function ca(){s(H,function(a){a()});v=b(ca,a)})()}function g(){h();l()}function h(){A=b.history.state;A=z(A)?null:A;ea(A,O)&&(A=O);O=A}function l(){if(F!==m.url()||N!==A)F=m.url(),N=A,s(W,function(a){a(m.url(),A)})}function k(a){try{return decodeURIComponent(a)}catch(b){return a}}var m=this,p=a[0],q=b.location,
+t=b.history,r=b.setTimeout,S=b.clearTimeout,K={};m.isMock=!1;var n=0,D=[];m.$$completeOutstandingRequest=e;m.$$incOutstandingRequestCount=function(){n++};m.notifyWhenNoOutstandingRequests=function(a){s(H,function(a){a()});0===n?a():D.push(a)};var H=[],v;m.addPollFn=function(a){z(v)&&f(100,r);H.push(a);return a};var A,N,F=q.href,ba=a.find("base"),I=null;h();N=A;m.url=function(a,c,e){z(e)&&(e=null);q!==b.location&&(q=b.location);t!==b.history&&(t=b.history);if(a){var f=N===e;if(F===a&&(!d.history||
+f))return m;var g=F&&Ha(F)===Ha(a);F=a;N=e;!d.history||g&&f?(g||(I=a),c?q.replace(a):g?(c=q,e=a.indexOf("#"),a=-1===e?"":a.substr(e+1),c.hash=a):q.href=a):(t[c?"replaceState":"pushState"](e,"",a),h(),N=A);return m}return I||q.href.replace(/%27/g,"'")};m.state=function(){return A};var W=[],va=!1,O=null;m.onUrlChange=function(a){if(!va){if(d.history)C(b).on("popstate",g);C(b).on("hashchange",g);va=!0}W.push(a);return a};m.$$checkUrlChange=l;m.baseHref=function(){var a=ba.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,
+""):""};var wa={},y="",ha=m.baseHref();m.cookies=function(a,b){var d,e,f,g;if(a)b===u?p.cookie=encodeURIComponent(a)+"=;path="+ha+";expires=Thu, 01 Jan 1970 00:00:00 GMT":x(b)&&(d=(p.cookie=encodeURIComponent(a)+"="+encodeURIComponent(b)+";path="+ha).length+1,4096<d&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"));else{if(p.cookie!==y)for(y=p.cookie,d=y.split("; "),wa={},f=0;f<d.length;f++)e=d[f],g=e.indexOf("="),0<g&&(a=k(e.substring(0,g)),
+wa[a]===u&&(wa[a]=k(e.substring(g+1))));return wa}};m.defer=function(a,b){var c;n++;c=r(function(){delete K[c];e(a)},b||0);K[c]=!0;return c};m.defer.cancel=function(a){return K[a]?(delete K[a],S(a),e(B),!0):!1}}function De(){this.$get=["$window","$log","$sniffer","$document",function(b,a,c,d){return new nf(b,d,a,c)}]}function Ee(){this.$get=function(){function b(b,d){function e(a){a!=p&&(q?q==a&&(q=a.n):q=a,f(a.n,a.p),f(a,p),p=a,p.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(b in a)throw M("$cacheFactory")("iid",
+b);var g=0,h=w({},d,{id:b}),l={},k=d&&d.capacity||Number.MAX_VALUE,m={},p=null,q=null;return a[b]={put:function(a,b){if(k<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}if(!z(b))return a in l||g++,l[a]=b,g>k&&this.remove(q.key),b},get:function(a){if(k<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return l[a]},remove:function(a){if(k<Number.MAX_VALUE){var b=m[a];if(!b)return;b==p&&(p=b.p);b==q&&(q=b.n);f(b.n,b.p);delete m[a]}delete l[a];g--},removeAll:function(){l={};g=0;m={};p=q=null},destroy:function(){m=
+h=l=null;delete a[b]},info:function(){return w({},h,{size:g})}}}var a={};b.info=function(){var b={};s(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function Ve(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function xc(b,a){function c(a,b){var c=/^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,d={};s(a,function(a,e){var f=a.match(c);if(!f)throw ia("iscp",b,e,a);d[e]={mode:f[1][0],collection:"*"===f[2],optional:"?"===f[3],attrName:f[4]||e}});return d}var d=
+{},e=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,f=/(([\w\-]+)(?:\:([^;]+))?;?)/,g=Gd("ngSrc,ngSrcset,src,srcset"),h=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,l=/^(on[a-z]+|formaction)$/;this.directive=function p(a,e){Ma(a,"directive");x(a)?(Sb(e,"directiveFactory"),d.hasOwnProperty(a)||(d[a]=[],b.factory(a+"Directive",["$injector","$exceptionHandler",function(b,e){var f=[];s(d[a],function(d,g){try{var h=b.invoke(d);G(h)?h={compile:da(h)}:!h.compile&&h.link&&(h.compile=da(h.link));h.priority=h.priority||0;h.index=
+g;h.name=h.name||a;h.require=h.require||h.controller&&h.name;h.restrict=h.restrict||"EA";J(h.scope)&&(h.$$isolateBindings=c(h.scope,h.name));f.push(h)}catch(l){e(l)}});return f}])),d[a].push(e)):s(a,lc(p));return this};this.aHrefSanitizationWhitelist=function(b){return y(b)?(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};var k=!0;this.debugInfoEnabled=
+function(a){return y(a)?(k=a,this):k};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,c,r,S,K,n,D,H,v,A){function N(a,b){try{a.addClass(b)}catch(c){}}function F(a,b,c,d,e){a instanceof C||(a=C(a));s(a,function(b,c){b.nodeType==qb&&b.nodeValue.match(/\S+/)&&(a[c]=C(b).wrap("<span></span>").parent()[0])});var f=ba(a,b,a,c,d,e);F.$$addScopeClass(a);var g=null;return function(b,
+c,d){Sb(b,"scope");d=d||{};var e=d.parentBoundTranscludeFn,h=d.transcludeControllers;d=d.futureParentElement;e&&e.$$boundTransclude&&(e=e.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ta(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?C(Xb(g,C("<div>").append(a).html())):c?La.clone.call(a):a;if(h)for(var l in h)d.data("$"+l+"Controller",h[l].instance);F.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,e);return d}}function ba(a,b,c,d,e,f){function g(a,c,d,e){var f,l,k,q,p,r,D;if(n)for(D=
+Array(c.length),q=0;q<h.length;q+=3)f=h[q],D[f]=c[f];else D=c;q=0;for(p=h.length;q<p;)l=D[h[q++]],c=h[q++],f=h[q++],c?(c.scope?(k=a.$new(),F.$$addScopeInfo(C(l),k)):k=a,r=c.transcludeOnThisElement?I(a,c.transclude,e,c.elementTranscludeOnThisElement):!c.templateOnThisElement&&e?e:!e&&b?I(a,b):null,c(f,k,l,d,r)):f&&f(a,l.childNodes,u,e)}for(var h=[],l,k,q,p,n,r=0;r<a.length;r++){l=new Yb;k=W(a[r],[],l,0===r?d:u,e);(f=k.length?y(k,a[r],l,b,c,null,[],[],f):null)&&f.scope&&F.$$addScopeClass(l.$$element);
+l=f&&f.terminal||!(q=a[r].childNodes)||!q.length?null:ba(q,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||l)h.push(r,f,l),p=!0,n=n||f;f=null}return p?g:null}function I(a,b,c,d){return function(d,e,f,g,h){d||(d=a.$new(!1,h),d.$$transcluded=!0);return b(d,e,{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:g})}}function W(a,b,c,d,g){var h=c.$attr,l;switch(a.nodeType){case na:ha(b,ya(ta(a)),"E",d,g);for(var k,q,p,n=a.attributes,r=0,D=n&&n.length;r<
+D;r++){var S=!1,t=!1;k=n[r];l=k.name;q=T(k.value);k=ya(l);if(p=Pa.test(k))l=l.replace(Sc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()});var A=k.replace(/(Start|End)$/,"");fb(A)&&k===A+"Start"&&(S=l,t=l.substr(0,l.length-5)+"end",l=l.substr(0,l.length-6));k=ya(l.toLowerCase());h[k]=l;if(p||!c.hasOwnProperty(k))c[k]=q,Mc(a,k)&&(c[k]=!0);Aa(a,b,q,k,p);ha(b,k,"A",d,g,S,t)}a=a.className;J(a)&&(a=a.animVal);if(x(a)&&""!==a)for(;l=f.exec(a);)k=ya(l[2]),ha(b,k,"C",d,g)&&(c[k]=T(l[3])),
+a=a.substr(l.index+l[0].length);break;case qb:P(b,a.nodeValue);break;case 8:try{if(l=e.exec(a.nodeValue))k=ya(l[1]),ha(b,k,"M",d,g)&&(c[k]=T(l[2]))}catch(v){}}b.sort(ca);return b}function va(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ia("uterdir",b,c);a.nodeType==na&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return C(d)}function O(a,b,c){return function(d,e,f,g,h){e=va(e[0],b,c);return a(d,e,f,g,h)}}function y(a,
+d,e,f,g,l,k,p,n){function r(a,b,c,d){if(a){c&&(a=O(a,c,d));a.require=L.require;a.directiveName=ca;if(I===L||L.$$isolateScope)a=Y(a,{isolateScope:!0});k.push(a)}if(b){c&&(b=O(b,c,d));b.require=L.require;b.directiveName=ca;if(I===L||L.$$isolateScope)b=Y(b,{isolateScope:!0});p.push(b)}}function D(a,b,c,d){var e,f="data",g=!1,l=c,k;if(x(b)){k=b.match(h);b=b.substring(k[0].length);k[3]&&(k[1]?k[3]=null:k[1]=k[3]);"^"===k[1]?f="inheritedData":"^^"===k[1]&&(f="inheritedData",l=c.parent());"?"===k[2]&&(g=
+!0);e=null;d&&"data"===f&&(e=d[b])&&(e=e.instance);e=e||l[f]("$"+b+"Controller");if(!e&&!g)throw ia("ctreq",b,a);return e||null}E(b)&&(e=[],s(b,function(b){e.push(D(a,b,c,d))}));return e}function A(a,c,f,g,h){function l(a,b,c){var d;Va(a)||(c=b,b=a,a=u);B&&(d=N);c||(c=B?W.parent():W);return h(a,b,d,c,va)}var n,r,t,v,N,gb,W,O;d===f?(O=e,W=e.$$element):(W=C(f),O=new Yb(W,e));I&&(v=c.$new(!0));h&&(gb=l,gb.$$boundTransclude=h);H&&(ba={},N={},s(H,function(a){var b={$scope:a===I||a.$$isolateScope?v:c,$element:W,
+$attrs:O,$transclude:gb};t=a.controller;"@"==t&&(t=O[a.name]);b=K(t,b,!0,a.controllerAs);N[a.name]=b;B||W.data("$"+a.name+"Controller",b.instance);ba[a.name]=b}));if(I){F.$$addScopeInfo(W,v,!0,!(ja&&(ja===I||ja===I.$$originalDirective)));F.$$addScopeClass(W,!0);g=ba&&ba[I.name];var xa=v;g&&g.identifier&&!0===I.bindToController&&(xa=g.instance);s(v.$$isolateBindings=I.$$isolateBindings,function(a,d){var e=a.attrName,f=a.optional,g,h,l,k;switch(a.mode){case "@":O.$observe(e,function(a){xa[d]=a});O.$$observers[e].$$scope=
+c;O[e]&&(xa[d]=b(O[e])(c));break;case "=":if(f&&!O[e])break;h=S(O[e]);k=h.literal?ea:function(a,b){return a===b||a!==a&&b!==b};l=h.assign||function(){g=xa[d]=h(c);throw ia("nonassign",O[e],I.name);};g=xa[d]=h(c);f=function(a){k(a,xa[d])||(k(a,g)?l(c,a=xa[d]):xa[d]=a);return g=a};f.$stateful=!0;f=a.collection?c.$watchCollection(O[e],f):c.$watch(S(O[e],f),null,h.literal);v.$on("$destroy",f);break;case "&":h=S(O[e]),xa[d]=function(a){return h(c,a)}}})}ba&&(s(ba,function(a){a()}),ba=null);g=0;for(n=k.length;g<
+n;g++)r=k[g],Z(r,r.isolateScope?v:c,W,O,r.require&&D(r.directiveName,r.require,W,N),gb);var va=c;I&&(I.template||null===I.templateUrl)&&(va=v);a&&a(va,f.childNodes,u,h);for(g=p.length-1;0<=g;g--)r=p[g],Z(r,r.isolateScope?v:c,W,O,r.require&&D(r.directiveName,r.require,W,N),gb)}n=n||{};for(var v=-Number.MAX_VALUE,N,H=n.controllerDirectives,ba,I=n.newIsolateScopeDirective,ja=n.templateDirective,wa=n.nonTlbTranscludeDirective,ha=!1,fb=!1,B=n.hasElementTranscludeDirective,w=e.$$element=C(d),L,ca,U,R=f,
+P,Q=0,Aa=a.length;Q<Aa;Q++){L=a[Q];var Pa=L.$$start,$=L.$$end;Pa&&(w=va(d,Pa,$));U=u;if(v>L.priority)break;if(U=L.scope)L.templateUrl||(J(U)?(Oa("new/isolated scope",I||N,L,w),I=L):Oa("new/isolated scope",I,L,w)),N=N||L;ca=L.name;!L.templateUrl&&L.controller&&(U=L.controller,H=H||{},Oa("'"+ca+"' controller",H[ca],L,w),H[ca]=L);if(U=L.transclude)ha=!0,L.$$tlb||(Oa("transclusion",wa,L,w),wa=L),"element"==U?(B=!0,v=L.priority,U=w,w=e.$$element=C(X.createComment(" "+ca+": "+e[ca]+" ")),d=w[0],V(g,Za.call(U,
+0),d),R=F(U,f,v,l&&l.name,{nonTlbTranscludeDirective:wa})):(U=C(Vb(d)).contents(),w.empty(),R=F(U,f));if(L.template)if(fb=!0,Oa("template",ja,L,w),ja=L,U=G(L.template)?L.template(w,e):L.template,U=Tc(U),L.replace){l=L;U=Tb.test(U)?Uc(Xb(L.templateNamespace,T(U))):[];d=U[0];if(1!=U.length||d.nodeType!==na)throw ia("tplrt",ca,"");V(g,w,d);Aa={$attr:{}};U=W(d,[],Aa);var of=a.splice(Q+1,a.length-(Q+1));I&&z(U);a=a.concat(U).concat(of);Rc(e,Aa);Aa=a.length}else w.html(U);if(L.templateUrl)fb=!0,Oa("template",
+ja,L,w),ja=L,L.replace&&(l=L),A=M(a.splice(Q,a.length-Q),w,e,g,ha&&R,k,p,{controllerDirectives:H,newIsolateScopeDirective:I,templateDirective:ja,nonTlbTranscludeDirective:wa}),Aa=a.length;else if(L.compile)try{P=L.compile(w,e,R),G(P)?r(null,P,Pa,$):P&&r(P.pre,P.post,Pa,$)}catch(aa){c(aa,ua(w))}L.terminal&&(A.terminal=!0,v=Math.max(v,L.priority))}A.scope=N&&!0===N.scope;A.transcludeOnThisElement=ha;A.elementTranscludeOnThisElement=B;A.templateOnThisElement=fb;A.transclude=R;n.hasElementTranscludeDirective=
+B;return A}function z(a){for(var b=0,c=a.length;b<c;b++)a[b]=Pb(a[b],{$$isolateScope:!0})}function ha(b,e,f,g,h,l,k){if(e===h)return null;h=null;if(d.hasOwnProperty(e)){var q;e=a.get(e+"Directive");for(var n=0,r=e.length;n<r;n++)try{q=e[n],(g===u||g>q.priority)&&-1!=q.restrict.indexOf(f)&&(l&&(q=Pb(q,{$$start:l,$$end:k})),b.push(q),h=q)}catch(D){c(D)}}return h}function fb(b){if(d.hasOwnProperty(b))for(var c=a.get(b+"Directive"),e=0,f=c.length;e<f;e++)if(b=c[e],b.multiElement)return!0;return!1}function Rc(a,
+b){var c=b.$attr,d=a.$attr,e=a.$$element;s(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});s(b,function(b,f){"class"==f?(N(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function M(a,b,c,d,e,f,g,h){var l=[],k,q,p=b[0],n=a.shift(),D=Pb(n,{templateUrl:null,transclude:null,replace:null,$$originalDirective:n}),
+S=G(n.templateUrl)?n.templateUrl(b,c):n.templateUrl,t=n.templateNamespace;b.empty();r(H.getTrustedResourceUrl(S)).then(function(r){var A,v;r=Tc(r);if(n.replace){r=Tb.test(r)?Uc(Xb(t,T(r))):[];A=r[0];if(1!=r.length||A.nodeType!==na)throw ia("tplrt",n.name,S);r={$attr:{}};V(d,b,A);var H=W(A,[],r);J(n.scope)&&z(H);a=H.concat(a);Rc(c,r)}else A=p,b.html(r);a.unshift(D);k=y(a,A,c,e,b,n,f,g,h);s(d,function(a,c){a==A&&(d[c]=b[0])});for(q=ba(b[0].childNodes,e);l.length;){r=l.shift();v=l.shift();var F=l.shift(),
+K=l.shift(),H=b[0];if(!r.$$destroyed){if(v!==p){var O=v.className;h.hasElementTranscludeDirective&&n.replace||(H=Vb(A));V(F,C(v),H);N(C(H),O)}v=k.transcludeOnThisElement?I(r,k.transclude,K):K;k(q,r,H,d,v)}}l=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(l?l.push(b,c,d,a):(k.transcludeOnThisElement&&(a=I(b,k.transclude,e)),k(q,b,c,d,a)))}}function ca(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function Oa(a,b,c,d){if(b)throw ia("multidir",
+b.name,c.name,a,ua(d));}function P(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&F.$$addBindingClass(a);return function(a,c){var e=c.parent();b||F.$$addBindingClass(e);F.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function Xb(a,b){a=R(a||"html");switch(a){case "svg":case "math":var c=X.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function Q(a,b){if("srcdoc"==
+b)return H.HTML;var c=ta(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return H.RESOURCE_URL}function Aa(a,c,d,e,f){var h=Q(a,e);f=g[e]||f;var k=b(d,!0,h,f);if(k){if("multiple"===e&&"select"===ta(a))throw ia("selmulti",ua(a));c.push({priority:100,compile:function(){return{pre:function(a,c,g){c=g.$$observers||(g.$$observers={});if(l.test(e))throw ia("nodomevents");var n=g[e];n!==d&&(k=n&&b(n,!0,h,f),d=n);k&&(g[e]=k(a),(c[e]||(c[e]=[])).$$inter=!0,(g.$$observers&&g.$$observers[e].$$scope||
+a).$watch(k,function(a,b){"class"===e&&a!=b?g.$updateClass(a,b):g.$set(e,a)}))}}}})}}function V(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var l=a.length;g<l;g++,h++)h<l?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=c);break}f&&f.replaceChild(c,d);a=X.createDocumentFragment();a.appendChild(d);C(c).data(C(d).data());ra?(Rb=!0,ra.cleanData([d])):delete C.cache[d[C.expando]];d=1;for(e=b.length;d<e;d++)f=b[d],C(f).remove(),
+a.appendChild(f),delete b[d];b[0]=c;b.length=1}function Y(a,b){return w(function(){return a.apply(null,arguments)},a,b)}function Z(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,ua(d))}}var Yb=function(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a};Yb.prototype={$normalize:ya,$addClass:function(a){a&&0<a.length&&v.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&v.removeClass(this.$$element,a)},$updateClass:function(a,
+b){var c=Vc(a,b);c&&c.length&&v.addClass(this.$$element,c);(c=Vc(b,a))&&c.length&&v.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=this.$$element[0],g=Mc(f,a),h=kf(f,a),f=a;g?(this.$$element.prop(a,b),e=g):h&&(this[h]=b,f=h);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=uc(a,"-"));g=ta(this.$$element);if("a"===g&&"href"===a||"img"===g&&"src"===a)this[a]=b=A(b,"src"===a);else if("img"===g&&"srcset"===a){for(var g="",h=T(b),l=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,l=/\s/.test(h)?
+l:/(,)/,h=h.split(l),l=Math.floor(h.length/2),k=0;k<l;k++)var q=2*k,g=g+A(T(h[q]),!0),g=g+(" "+T(h[q+1]));h=T(h[2*k]).split(/\s/);g+=A(T(h[0]),!0);2===h.length&&(g+=" "+T(h[1]));this[a]=b=g}!1!==d&&(null===b||b===u?this.$$element.removeAttr(e):this.$$element.attr(e,b));(a=this.$$observers)&&s(a[f],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=fa()),e=d[a]||(d[a]=[]);e.push(b);n.$evalAsync(function(){!e.$$inter&&c.hasOwnProperty(a)&&b(c[a])});
+return function(){Xa(e,b)}}};var U=b.startSymbol(),ja=b.endSymbol(),Tc="{{"==U||"}}"==ja?oa:function(a){return a.replace(/\{\{/g,U).replace(/}}/g,ja)},Pa=/^ngAttr[A-Z]/;F.$$addBindingInfo=k?function(a,b){var c=a.data("$binding")||[];E(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:B;F.$$addBindingClass=k?function(a){N(a,"ng-binding")}:B;F.$$addScopeInfo=k?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:B;F.$$addScopeClass=k?function(a,b){N(a,b?"ng-isolate-scope":
+"ng-scope")}:B;return F}]}function ya(b){return db(b.replace(Sc,""))}function Vc(b,a){var c="",d=b.split(/\s+/),e=a.split(/\s+/),f=0;a:for(;f<d.length;f++){for(var g=d[f],h=0;h<e.length;h++)if(g==e[h])continue a;c+=(0<c.length?" ":"")+g}return c}function Uc(b){b=C(b);var a=b.length;if(1>=a)return b;for(;a--;)8===b[a].nodeType&&pf.call(b,a,1);return b}function Fe(){var b={},a=!1,c=/^(\S+)(\s+as\s+(\w+))?$/;this.register=function(a,c){Ma(a,"controller");J(a)?w(b,a):b[a]=c};this.allowGlobals=function(){a=
+!0};this.$get=["$injector","$window",function(d,e){function f(a,b,c,d){if(!a||!J(a.$scope))throw M("$controller")("noscp",d,b);a.$scope[b]=c}return function(g,h,l,k){var m,p,q;l=!0===l;k&&x(k)&&(q=k);if(x(g)){k=g.match(c);if(!k)throw qf("ctrlfmt",g);p=k[1];q=q||k[3];g=b.hasOwnProperty(p)?b[p]:wc(h.$scope,p,!0)||(a?wc(e,p,!0):u);tb(g,p,!0)}if(l)return l=(E(g)?g[g.length-1]:g).prototype,m=Object.create(l||null),q&&f(h,q,m,p||g.name),w(function(){d.invoke(g,m,h,p);return m},{instance:m,identifier:q});
+m=d.instantiate(g,h,p);q&&f(h,q,m,p||g.name);return m}}]}function Ge(){this.$get=["$window",function(b){return C(b.document)}]}function He(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function Zb(b,a){if(x(b)){var c=b.replace(rf,"").trim();if(c){var d=a("Content-Type");(d=d&&0===d.indexOf(Wc))||(d=(d=c.match(sf))&&tf[d[0]].test(c));d&&(b=pc(c))}}return b}function Xc(b){var a=fa(),c,d,e;if(!b)return a;s(b.split("\n"),function(b){e=b.indexOf(":");c=R(T(b.substr(0,
+e)));d=T(b.substr(e+1));c&&(a[c]=a[c]?a[c]+", "+d:d)});return a}function Yc(b){var a=J(b)?b:u;return function(c){a||(a=Xc(b));return c?(c=a[R(c)],void 0===c&&(c=null),c):a}}function Zc(b,a,c,d){if(G(d))return d(b,a,c);s(d,function(d){b=d(b,a,c)});return b}function Ke(){var b=this.defaults={transformResponse:[Zb],transformRequest:[function(a){return J(a)&&"[object File]"!==Da.call(a)&&"[object Blob]"!==Da.call(a)&&"[object FormData]"!==Da.call(a)?$a(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},
+post:qa($b),put:qa($b),patch:qa($b)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"},a=!1;this.useApplyAsync=function(b){return y(b)?(a=!!b,this):a};var c=this.interceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(d,e,f,g,h,l){function k(a){function c(a){var b=w({},a);b.data=a.data?Zc(a.data,a.headers,a.status,e.transformResponse):a.data;a=a.status;return 200<=a&&300>a?b:h.reject(b)}function d(a){var b,c={};s(a,function(a,d){G(a)?(b=
+a(),null!=b&&(c[d]=b)):c[d]=a});return c}if(!aa.isObject(a))throw M("$http")("badreq",a);var e=w({method:"get",transformRequest:b.transformRequest,transformResponse:b.transformResponse},a);e.headers=function(a){var c=b.headers,e=w({},a.headers),f,g,c=w({},c.common,c[R(a.method)]);a:for(f in c){a=R(f);for(g in e)if(R(g)===a)continue a;e[f]=c[f]}return d(e)}(a);e.method=vb(e.method);var f=[function(a){var d=a.headers,e=Zc(a.data,Yc(d),u,a.transformRequest);z(e)&&s(d,function(a,b){"content-type"===R(b)&&
+delete d[b]});z(a.withCredentials)&&!z(b.withCredentials)&&(a.withCredentials=b.withCredentials);return m(a,e).then(c,c)},u],g=h.when(e);for(s(t,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var l=f.shift(),g=g.then(a,l)}g.success=function(a){g.then(function(b){a(b.data,b.status,b.headers,e)});return g};g.error=function(a){g.then(null,function(b){a(b.data,b.status,b.headers,e)});
+return g};return g}function m(c,f){function l(b,c,d,e){function f(){n(c,b,d,e)}N&&(200<=b&&300>b?N.put(I,[b,c,Xc(d),e]):N.remove(I));a?g.$applyAsync(f):(f(),g.$$phase||g.$apply())}function n(a,b,d,e){b=Math.max(b,0);(200<=b&&300>b?v.resolve:v.reject)({data:a,status:b,headers:Yc(d),config:c,statusText:e})}function m(a){n(a.data,a.status,qa(a.headers()),a.statusText)}function t(){var a=k.pendingRequests.indexOf(c);-1!==a&&k.pendingRequests.splice(a,1)}var v=h.defer(),A=v.promise,N,F,s=c.headers,I=p(c.url,
+c.params);k.pendingRequests.push(c);A.then(t,t);!c.cache&&!b.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(N=J(c.cache)?c.cache:J(b.cache)?b.cache:q);N&&(F=N.get(I),y(F)?F&&G(F.then)?F.then(m,m):E(F)?n(F[1],F[0],qa(F[2]),F[3]):n(F,200,{},"OK"):N.put(I,A));z(F)&&((F=$c(c.url)?e.cookies()[c.xsrfCookieName||b.xsrfCookieName]:u)&&(s[c.xsrfHeaderName||b.xsrfHeaderName]=F),d(c.method,I,f,l,s,c.timeout,c.withCredentials,c.responseType));return A}function p(a,b){if(!b)return a;var c=[];Ed(b,
+function(a,b){null===a||z(a)||(E(a)||(a=[a]),s(a,function(a){J(a)&&(a=pa(a)?a.toISOString():$a(a));c.push(Fa(b)+"="+Fa(a))}))});0<c.length&&(a+=(-1==a.indexOf("?")?"?":"&")+c.join("&"));return a}var q=f("$http"),t=[];s(c,function(a){t.unshift(x(a)?l.get(a):l.invoke(a))});k.pendingRequests=[];(function(a){s(arguments,function(a){k[a]=function(b,c){return k(w(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){s(arguments,function(a){k[a]=function(b,c,d){return k(w(d||{},{method:a,
+url:b,data:c}))}})})("post","put","patch");k.defaults=b;return k}]}function uf(){return new P.XMLHttpRequest}function Le(){this.$get=["$browser","$window","$document",function(b,a,c){return vf(b,uf,b.defer,a.angular.callbacks,c[0])}]}function vf(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",m,!1);f.removeEventListener("error",m,!1);e.body.removeChild(f);f=null;var g=-1,t="unknown";a&&("load"!==
+a.type||d[b].called||(a={type:"error"}),t=a.type,g="error"===a.type?404:200);c&&c(g,t)};f.addEventListener("load",m,!1);f.addEventListener("error",m,!1);e.body.appendChild(f);return m}return function(e,h,l,k,m,p,q,t){function r(){n&&n();D&&D.abort()}function S(a,d,e,f,g){v!==u&&c.cancel(v);n=D=null;a(d,e,f,g);b.$$completeOutstandingRequest(B)}b.$$incOutstandingRequestCount();h=h||b.url();if("jsonp"==R(e)){var K="_"+(d.counter++).toString(36);d[K]=function(a){d[K].data=a;d[K].called=!0};var n=f(h.replace("JSON_CALLBACK",
+"angular.callbacks."+K),K,function(a,b){S(k,a,d[K].data,"",b);d[K]=B})}else{var D=a();D.open(e,h,!0);s(m,function(a,b){y(a)&&D.setRequestHeader(b,a)});D.onload=function(){var a=D.statusText||"",b="response"in D?D.response:D.responseText,c=1223===D.status?204:D.status;0===c&&(c=b?200:"file"==Ba(h).protocol?404:0);S(k,c,b,D.getAllResponseHeaders(),a)};e=function(){S(k,-1,null,null,"")};D.onerror=e;D.onabort=e;q&&(D.withCredentials=!0);if(t)try{D.responseType=t}catch(H){if("json"!==t)throw H;}D.send(l||
+null)}if(0<p)var v=c(r,p);else p&&G(p.then)&&p.then(r)}}function Ie(){var b="{{",a="}}";this.startSymbol=function(a){return a?(b=a,this):b};this.endSymbol=function(b){return b?(a=b,this):a};this.$get=["$parse","$exceptionHandler","$sce",function(c,d,e){function f(a){return"\\\\\\"+a}function g(f,g,t,r){function S(c){return c.replace(k,b).replace(m,a)}function K(a){try{var b=a;a=t?e.getTrusted(t,b):e.valueOf(b);var c;if(r&&!y(a))c=a;else if(null==a)c="";else{switch(typeof a){case "string":break;case "number":a=
+""+a;break;default:a=$a(a)}c=a}return c}catch(g){c=ac("interr",f,g.toString()),d(c)}}r=!!r;for(var n,D,H=0,v=[],A=[],N=f.length,F=[],s=[];H<N;)if(-1!=(n=f.indexOf(b,H))&&-1!=(D=f.indexOf(a,n+h)))H!==n&&F.push(S(f.substring(H,n))),H=f.substring(n+h,D),v.push(H),A.push(c(H,K)),H=D+l,s.push(F.length),F.push("");else{H!==N&&F.push(S(f.substring(H)));break}if(t&&1<F.length)throw ac("noconcat",f);if(!g||v.length){var I=function(a){for(var b=0,c=v.length;b<c;b++){if(r&&z(a[b]))return;F[s[b]]=a[b]}return F.join("")};
+return w(function(a){var b=0,c=v.length,e=Array(c);try{for(;b<c;b++)e[b]=A[b](a);return I(e)}catch(g){a=ac("interr",f,g.toString()),d(a)}},{exp:f,expressions:v,$$watchDelegate:function(a,b,c){var d;return a.$watchGroup(A,function(c,e){var f=I(c);G(b)&&b.call(this,f,c!==e?d:f,a);d=f},c)}})}}var h=b.length,l=a.length,k=new RegExp(b.replace(/./g,f),"g"),m=new RegExp(a.replace(/./g,f),"g");g.startSymbol=function(){return b};g.endSymbol=function(){return a};return g}]}function Je(){this.$get=["$rootScope",
+"$window","$q","$$q",function(b,a,c,d){function e(e,h,l,k){var m=a.setInterval,p=a.clearInterval,q=0,t=y(k)&&!k,r=(t?d:c).defer(),S=r.promise;l=y(l)?l:0;S.then(null,null,e);S.$$intervalId=m(function(){r.notify(q++);0<l&&q>=l&&(r.resolve(q),p(S.$$intervalId),delete f[S.$$intervalId]);t||b.$apply()},h);f[S.$$intervalId]=r;return S}var f={};e.cancel=function(b){return b&&b.$$intervalId in f?(f[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete f[b.$$intervalId],!0):!1};return e}]}
+function Rd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),
+DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function bc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=rb(b[a]);return b.join("/")}function ad(b,a){var c=Ba(b);a.$$protocol=
+c.protocol;a.$$host=c.hostname;a.$$port=$(c.port)||wf[c.protocol]||null}function bd(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=Ba(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname);a.$$search=rc(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function za(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ha(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Gb(b){return b.replace(/(#.+)|#$/,
+"$1")}function cc(b){return b.substr(0,Ha(b).lastIndexOf("/")+1)}function dc(b,a){this.$$html5=!0;a=a||"";var c=cc(b);ad(b,this);this.$$parse=function(a){var b=za(c,a);if(!x(b))throw Hb("ipthprfx",a,c);bd(b,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Qb(this.$$search),b=this.$$hash?"#"+rb(this.$$hash):"";this.$$url=bc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),
+!0;var f,g;(f=za(b,d))!==u?(g=f,g=(f=za(a,f))!==u?c+(za("/",f)||f):b+g):(f=za(c,d))!==u?g=c+f:c==d+"/"&&(g=c);g&&this.$$parse(g);return!!g}}function ec(b,a){var c=cc(b);ad(b,this);this.$$parse=function(d){d=za(b,d)||za(c,d);var e;"#"===d.charAt(0)?(e=za(a,d),z(e)&&(e=d)):e=this.$$html5?d:"";bd(e,this);d=this.$$path;var f=/^\/[A-Z]:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Qb(this.$$search),e=this.$$hash?
+"#"+rb(this.$$hash):"";this.$$url=bc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$parseLinkUrl=function(a,c){return Ha(b)==Ha(a)?(this.$$parse(a),!0):!1}}function cd(b,a){this.$$html5=!0;ec.apply(this,arguments);var c=cc(b);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;b==Ha(d)?f=d:(g=za(c,d))?f=b+a+g:c===d+"/"&&(f=c);f&&this.$$parse(f);return!!f};this.$$compose=function(){var c=Qb(this.$$search),e=this.$$hash?"#"+rb(this.$$hash):
+"";this.$$url=bc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function Ib(b){return function(){return this[b]}}function dd(b,a){return function(c){if(z(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Me(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return y(a)?(b=a,this):b};this.html5Mode=function(b){return Wa(b)?(a.enabled=b,this):J(b)?(Wa(b.enabled)&&(a.enabled=b.enabled),Wa(b.requireBase)&&(a.requireBase=b.requireBase),Wa(b.rewriteLinks)&&
+(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(c,d,e,f,g){function h(a,b,c){var e=k.url(),f=k.$$state;try{d.url(a,b,c),k.$$state=d.state()}catch(g){throw k.url(e),k.$$state=f,g;}}function l(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,m;m=d.baseHref();var p=d.url(),q;if(a.enabled){if(!m&&a.requireBase)throw Hb("nobase");q=p.substring(0,p.indexOf("/",p.indexOf("//")+2))+(m||"/");m=e.history?dc:cd}else q=
+Ha(p),m=ec;k=new m(q,"#"+b);k.$$parseLinkUrl(p,p);k.$$state=d.state();var t=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&&!b.metaKey&&!b.shiftKey&&2!=b.which&&2!=b.button){for(var e=C(b.target);"a"!==ta(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),l=e.attr("href")||e.attr("xlink:href");J(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=Ba(h.animVal).href);t.test(h)||!h||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(h,
+l)||(b.preventDefault(),k.absUrl()!=d.url()&&(c.$apply(),g.angular["ff-684208-preventDefault"]=!0))}});Gb(k.absUrl())!=Gb(p)&&d.url(k.absUrl(),!0);var r=!0;d.onUrlChange(function(a,b){c.$evalAsync(function(){var d=k.absUrl(),e=k.$$state,f;k.$$parse(a);k.$$state=b;f=c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented;k.absUrl()===a&&(f?(k.$$parse(d),k.$$state=e,h(d,!1,e)):(r=!1,l(d,e)))});c.$$phase||c.$digest()});c.$watch(function(){var a=Gb(d.url()),b=Gb(k.absUrl()),f=d.state(),g=k.$$replace,
+q=a!==b||k.$$html5&&e.history&&f!==k.$$state;if(r||q)r=!1,c.$evalAsync(function(){var b=k.absUrl(),d=c.$broadcast("$locationChangeStart",b,a,k.$$state,f).defaultPrevented;k.absUrl()===b&&(d?(k.$$parse(a),k.$$state=f):(q&&h(b,g,f===k.$$state?null:k.$$state),l(a,f)))});k.$$replace=!1});return k}]}function Ne(){var b=!0,a=this;this.debugEnabled=function(a){return y(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?
+"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||B;a=!1;try{a=!!e.apply}catch(l){}return a?function(){var a=[];s(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function sa(b,a){if("__defineGetter__"===
+b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"===b||"__proto__"===b)throw ka("isecfld",a);return b}function la(b,a){if(b){if(b.constructor===b)throw ka("isecfn",a);if(b.window===b)throw ka("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw ka("isecdom",a);if(b===Object)throw ka("isecobj",a);}return b}function fc(b){return b.constant}function hb(b,a,c,d,e){la(b,e);la(a,e);c=c.split(".");for(var f,g=0;1<c.length;g++){f=sa(c.shift(),e);var h=0===g&&a&&a[f]||
+b[f];h||(h={},b[f]=h);b=la(h,e)}f=sa(c.shift(),e);la(b[f],e);return b[f]=d}function Qa(b){return"constructor"==b}function ed(b,a,c,d,e,f,g){sa(b,f);sa(a,f);sa(c,f);sa(d,f);sa(e,f);var h=function(a){return la(a,f)},l=g||Qa(b)?h:oa,k=g||Qa(a)?h:oa,m=g||Qa(c)?h:oa,p=g||Qa(d)?h:oa,q=g||Qa(e)?h:oa;return function(f,g){var h=g&&g.hasOwnProperty(b)?g:f;if(null==h)return h;h=l(h[b]);if(!a)return h;if(null==h)return u;h=k(h[a]);if(!c)return h;if(null==h)return u;h=m(h[c]);if(!d)return h;if(null==h)return u;
+h=p(h[d]);return e?null==h?u:h=q(h[e]):h}}function xf(b,a){return function(c,d){return b(c,d,la,a)}}function yf(b,a,c){var d=a.expensiveChecks,e=d?zf:Af,f=e[b];if(f)return f;var g=b.split("."),h=g.length;if(a.csp)f=6>h?ed(g[0],g[1],g[2],g[3],g[4],c,d):function(a,b){var e=0,f;do f=ed(g[e++],g[e++],g[e++],g[e++],g[e++],c,d)(a,b),b=u,a=f;while(e<h);return f};else{var l="";d&&(l+="s = eso(s, fe);\nl = eso(l, fe);\n");var k=d;s(g,function(a,b){sa(a,c);var e=(b?"s":'((l&&l.hasOwnProperty("'+a+'"))?l:s)')+
+"."+a;if(d||Qa(a))e="eso("+e+", fe)",k=!0;l+="if(s == null) return undefined;\ns="+e+";\n"});l+="return s;";a=new Function("s","l","eso","fe",l);a.toString=da(l);k&&(a=xf(a,c));f=a}f.sharedGetter=!0;f.assign=function(a,c,d){return hb(a,d,b,c,b)};return e[b]=f}function gc(b){return G(b.valueOf)?b.valueOf():Bf.call(b)}function Oe(){var b=fa(),a=fa();this.$get=["$filter","$sniffer",function(c,d){function e(a){var b=a;a.sharedGetter&&(b=function(b,c){return a(b,c)},b.literal=a.literal,b.constant=a.constant,
+b.assign=a.assign);return b}function f(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];e.constant||(e.inputs?f(e.inputs,b):-1===b.indexOf(e)&&b.push(e))}return b}function g(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=gc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function h(a,b,c,d){var e=d.$$inputs||(d.$$inputs=f(d.inputs,[])),h;if(1===e.length){var l=g,e=e[0];return a.$watch(function(a){var b=e(a);g(b,l)||(h=d(a),l=b&&gc(b));return h},b,c)}for(var k=[],q=0,p=e.length;q<p;q++)k[q]=
+g;return a.$watch(function(a){for(var b=!1,c=0,f=e.length;c<f;c++){var l=e[c](a);if(b||(b=!g(l,k[c])))k[c]=l&&gc(l)}b&&(h=d(a));return h},b,c)}function l(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;G(b)&&b.apply(this,arguments);y(a)&&d.$$postDigest(function(){y(f)&&e()})},c)}function k(a,b,c,d){function e(a){var b=!0;s(a,function(a){y(a)||(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,c,d){g=a;G(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&
+f()})},c)}function m(a,b,c,d){var e;return e=a.$watch(function(a){return d(a)},function(a,c,d){G(b)&&b.apply(this,arguments);e()},c)}function p(a,b){if(!b)return a;var c=a.$$watchDelegate,c=c!==k&&c!==l?function(c,d){var e=a(c,d);return b(e,c,d)}:function(c,d){var e=a(c,d),f=b(e,c,d);return y(e)?f:e};a.$$watchDelegate&&a.$$watchDelegate!==h?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=h,c.inputs=[a]);return c}var q={csp:d.csp,expensiveChecks:!1},t={csp:d.csp,expensiveChecks:!0};
+return function(d,f,g){var n,D,H;switch(typeof d){case "string":H=d=d.trim();var v=g?a:b;n=v[H];n||(":"===d.charAt(0)&&":"===d.charAt(1)&&(D=!0,d=d.substring(2)),g=g?t:q,n=new hc(g),n=(new ib(n,c,g)).parse(d),n.constant?n.$$watchDelegate=m:D?(n=e(n),n.$$watchDelegate=n.literal?k:l):n.inputs&&(n.$$watchDelegate=h),v[H]=n);return p(n,f);case "function":return p(d,f);default:return p(B,f)}}}]}function Qe(){this.$get=["$rootScope","$exceptionHandler",function(b,a){return fd(function(a){b.$evalAsync(a)},
+a)}]}function Re(){this.$get=["$browser","$exceptionHandler",function(b,a){return fd(function(a){b.defer(a)},a)}]}function fd(b,a){function c(a,b,c){function d(b){return function(c){e||(e=!0,b.call(a,c))}}var e=!1;return[d(b),d(c)]}function d(){this.$$state={status:0}}function e(a,b){return function(c){b.call(a,c)}}function f(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,b(function(){var b,d,e;e=c.pending;c.processScheduled=!1;c.pending=u;for(var f=0,g=e.length;f<g;++f){d=e[f][0];b=e[f][c.status];
+try{G(b)?d.resolve(b(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),a(h)}}}))}function g(){this.promise=new d;this.resolve=e(this,this.resolve);this.reject=e(this,this.reject);this.notify=e(this,this.notify)}var h=M("$q",TypeError);d.prototype={then:function(a,b,c){var d=new g;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&f(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,
+b){return this.then(function(b){return k(b,!0,a)},function(b){return k(b,!1,a)},b)}};g.prototype={resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(h("qcycle",a)):this.$$resolve(a))},$$resolve:function(b){var d,e;e=c(this,this.$$resolve,this.$$reject);try{if(J(b)||G(b))d=b&&b.then;G(d)?(this.promise.$$state.status=-1,d.call(b,e[0],e[1],this.notify)):(this.promise.$$state.value=b,this.promise.$$state.status=1,f(this.promise.$$state))}catch(g){e[1](g),a(g)}},reject:function(a){this.promise.$$state.status||
+this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=a;this.promise.$$state.status=2;f(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&d&&d.length&&b(function(){for(var b,e,f=0,g=d.length;f<g;f++){e=d[f][0];b=d[f][3];try{e.notify(G(b)?b(c):c)}catch(h){a(h)}}})}};var l=function(a,b){var c=new g;b?c.resolve(a):c.reject(a);return c.promise},k=function(a,b,c){var d=null;try{G(c)&&(d=c())}catch(e){return l(e,!1)}return d&&G(d.then)?
+d.then(function(){return l(a,b)},function(a){return l(a,!1)}):l(a,b)},m=function(a,b,c,d){var e=new g;e.resolve(a);return e.promise.then(b,c,d)},p=function t(a){if(!G(a))throw h("norslvr",a);if(!(this instanceof t))return new t(a);var b=new g;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};p.defer=function(){return new g};p.reject=function(a){var b=new g;b.reject(a);return b.promise};p.when=m;p.all=function(a){var b=new g,c=0,d=E(a)?[]:{};s(a,function(a,e){c++;m(a).then(function(a){d.hasOwnProperty(e)||
+(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise};return p}function $e(){this.$get=["$window","$timeout",function(b,a){var c=b.requestAnimationFrame||b.webkitRequestAnimationFrame,d=b.cancelAnimationFrame||b.webkitCancelAnimationFrame||b.webkitCancelRequestAnimationFrame,e=!!c,f=e?function(a){var b=c(a);return function(){d(b)}}:function(b){var c=a(b,16.66,!1);return function(){a.cancel(c)}};f.supported=e;return f}]}function Pe(){var b=
+10,a=M("$rootScope"),c=null,d=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$injector","$exceptionHandler","$parse","$browser",function(e,f,g,h){function l(){this.$id=++ob;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$isolateBindings=null}function k(b){if(r.$$phase)throw a("inprog",r.$$phase);r.$$phase=b}function m(a,
+b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function p(){}function q(){for(;n.length;)try{n.shift()()}catch(a){f(a)}d=null}function t(){null===d&&(d=h.defer(function(){r.$apply(q)}))}l.prototype={constructor:l,$new:function(a,b){function c(){d.$$destroyed=!0}var d;b=b||this;a?(d=new l,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=function(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners=
+{};this.$$listenerCount={};this.$id=++ob;this.$$ChildScope=null},this.$$ChildScope.prototype=this),d=new this.$$ChildScope);d.$parent=b;d.$$prevSibling=b.$$childTail;b.$$childHead?(b.$$childTail.$$nextSibling=d,b.$$childTail=d):b.$$childHead=b.$$childTail=d;(a||b!=this)&&d.$on("$destroy",c);return d},$watch:function(a,b,d){var e=g(a);if(e.$$watchDelegate)return e.$$watchDelegate(this,b,d,e);var f=this.$$watchers,h={fn:b,last:p,get:e,exp:a,eq:!!d};c=null;G(b)||(h.fn=B);f||(f=this.$$watchers=[]);f.unshift(h);
+return function(){Xa(f,h);c=null}},$watchGroup:function(a,b){function c(){h=!1;l?(l=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,l=!0;if(!a.length){var k=!0;g.$evalAsync(function(){k&&b(e,e,g)});return function(){k=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});s(a,function(a,b){var l=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(l)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,
+b){function c(a){e=a;var b,d,g,h;if(!z(e)){if(J(e))if(Ta(e))for(f!==q&&(f=q,t=f.length=0,k++),a=e.length,t!==a&&(k++,f.length=t=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(k++,f[b]=g);else{f!==m&&(f=m={},t=0,k++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(k++,f[b]=g)):(t++,f[b]=g,k++));if(t>a)for(b in k++,f)e.hasOwnProperty(b)||(t--,delete f[b])}else f!==e&&(f=e,k++);return k}}c.$stateful=!0;var d=this,e,f,h,l=1<b.length,k=0,p=g(a,c),q=[],m=
+{},n=!0,t=0;return this.$watch(p,function(){n?(n=!1,b(e,e,d)):b(e,h,d);if(l)if(J(e))if(Ta(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)sc.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var e,g,l,m,n,t,s=b,I,W=[],y,O;k("$digest");h.$$checkUrlChange();this===r&&null!==d&&(h.defer.cancel(d),q());c=null;do{t=!1;for(I=this;S.length;){try{O=S.shift(),O.scope.$eval(O.expression,O.locals)}catch(w){f(w)}c=null}a:do{if(m=I.$$watchers)for(n=m.length;n--;)try{if(e=m[n])if((g=
+e.get(I))!==(l=e.last)&&!(e.eq?ea(g,l):"number"===typeof g&&"number"===typeof l&&isNaN(g)&&isNaN(l)))t=!0,c=e,e.last=e.eq?Ea(g,null):g,e.fn(g,l===p?g:l,I),5>s&&(y=4-s,W[y]||(W[y]=[]),W[y].push({msg:G(e.exp)?"fn: "+(e.exp.name||e.exp.toString()):e.exp,newVal:g,oldVal:l}));else if(e===c){t=!1;break a}}catch(C){f(C)}if(!(m=I.$$childHead||I!==this&&I.$$nextSibling))for(;I!==this&&!(m=I.$$nextSibling);)I=I.$parent}while(I=m);if((t||S.length)&&!s--)throw r.$$phase=null,a("infdig",b,W);}while(t||S.length);
+for(r.$$phase=null;u.length;)try{u.shift()()}catch(B){f(B)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;if(this!==r){for(var b in this.$$listenerCount)m(this,this.$$listenerCount[b],b);a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);
+this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=B;this.$on=this.$watch=this.$watchGroup=function(){return B};this.$$listeners={};this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=this.$$watchers=null}}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){r.$$phase||S.length||h.defer(function(){S.length&&r.$digest()});S.push({scope:this,expression:a,locals:b})},$$postDigest:function(a){u.push(a)},$apply:function(a){try{return k("$apply"),
+this.$eval(a)}catch(b){f(b)}finally{r.$$phase=null;try{r.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&n.push(b);t()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,m(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,
+stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},l=Ya([h],arguments,1),k,m;do{d=e.$$listeners[a]||c;h.currentScope=e;k=0;for(m=d.length;k<m;k++)if(d[k])try{d[k].apply(null,l)}catch(p){f(p)}else d.splice(k,1),k--,m--;if(g)return h.currentScope=null,h;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;
+for(var g=Ya([e],arguments,1),h,l;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(l=d.length;h<l;h++)if(d[h])try{d[h].apply(null,g)}catch(k){f(k)}else d.splice(h,1),h--,l--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var r=new l,S=r.$$asyncQueue=[],u=r.$$postDigestQueue=[],n=r.$$applyAsyncQueue=[];return r}]}function Sd(){var b=/^\s*(https?|ftp|mailto|tel|file):/,a=/^\s*((https?|ftp|file|blob):|data:image\/)/;
+this.aHrefSanitizationWhitelist=function(a){return y(a)?(b=a,this):b};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a=b,this):a};this.$get=function(){return function(c,d){var e=d?a:b,f;f=Ba(c).href;return""===f||f.match(e)?c:"unsafe:"+f}}}function Cf(b){if("self"===b)return b;if(x(b)){if(-1<b.indexOf("***"))throw Ca("iwcard",b);b=gd(b).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+b+"$")}if(pb(b))return new RegExp("^"+b.source+"$");throw Ca("imatcher");}function hd(b){var a=
+[];y(b)&&s(b,function(b){a.push(Cf(b))});return a}function Te(){this.SCE_CONTEXTS=ma;var b=["self"],a=[];this.resourceUrlWhitelist=function(a){arguments.length&&(b=hd(a));return b};this.resourceUrlBlacklist=function(b){arguments.length&&(a=hd(b));return a};this.$get=["$injector",function(c){function d(a,b){return"self"===a?$c(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};
+b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw Ca("unsafe");};c.has("$sanitize")&&(f=c.get("$sanitize"));var g=e(),h={};h[ma.HTML]=e(g);h[ma.CSS]=e(g);h[ma.URL]=e(g);h[ma.JS]=e(g);h[ma.RESOURCE_URL]=e(h[ma.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Ca("icontext",a,b);if(null===b||b===u||""===b)return b;if("string"!==typeof b)throw Ca("itype",a);return new c(b)},getTrusted:function(c,e){if(null===
+e||e===u||""===e)return e;var g=h.hasOwnProperty(c)?h[c]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(c===ma.RESOURCE_URL){var g=Ba(e.toString()),p,q,t=!1;p=0;for(q=b.length;p<q;p++)if(d(b[p],g)){t=!0;break}if(t)for(p=0,q=a.length;p<q;p++)if(d(a[p],g)){t=!1;break}if(t)return e;throw Ca("insecurl",e.toString());}if(c===ma.HTML)return f(e);throw Ca("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function Se(){var b=!0;this.enabled=function(a){arguments.length&&
+(b=!!a);return b};this.$get=["$parse","$sceDelegate",function(a,c){if(b&&8>Ra)throw Ca("iequirks");var d=qa(ma);d.isEnabled=function(){return b};d.trustAs=c.trustAs;d.getTrusted=c.getTrusted;d.valueOf=c.valueOf;b||(d.trustAs=d.getTrusted=function(a,b){return b},d.valueOf=oa);d.parseAs=function(b,c){var e=a(c);return e.literal&&e.constant?e:a(c,function(a){return d.getTrusted(b,a)})};var e=d.parseAs,f=d.getTrusted,g=d.trustAs;s(ma,function(a,b){var c=R(b);d[db("parse_as_"+c)]=function(b){return e(a,
+b)};d[db("get_trusted_"+c)]=function(b){return f(a,b)};d[db("trust_as_"+c)]=function(b){return g(a,b)}});return d}]}function Ue(){this.$get=["$window","$document",function(b,a){var c={},d=$((/android (\d+)/.exec(R((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,l=f.body&&f.body.style,k=!1,m=!1;if(l){for(var p in l)if(k=h.exec(p)){g=k[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in l&&"webkit");
+k=!!("transition"in l||g+"Transition"in l);m=!!("animation"in l||g+"Animation"in l);!d||k&&m||(k=x(f.body.style.webkitTransition),m=x(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hasEvent:function(a){if("input"===a&&11>=Ra)return!1;if(z(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:bb(),vendorPrefix:g,transitions:k,animations:m,android:d}}]}function We(){this.$get=["$templateCache","$http","$q",function(b,a,c){function d(e,f){d.totalPendingRequests++;
+var g=a.defaults&&a.defaults.transformResponse;E(g)?g=g.filter(function(a){return a!==Zb}):g===Zb&&(g=null);return a.get(e,{cache:b,transformResponse:g}).finally(function(){d.totalPendingRequests--}).then(function(a){return a.data},function(a){if(!f)throw ia("tpload",e);return c.reject(a)})}d.totalPendingRequests=0;return d}]}function Xe(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var g=[];s(a,function(a){var d=
+aa.element(a).data("$binding");d&&s(d,function(d){c?(new RegExp("(^|\\s)"+gd(b)+"(\\s|\\||$)")).test(d)&&g.push(a):-1!=d.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,c){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var l=a.querySelectorAll("["+g[h]+"model"+(c?"=":"*=")+'"'+b+'"]');if(l.length)return l}},getLocation:function(){return c.url()},setLocation:function(a){a!==c.url()&&(c.url(a),b.$digest())},whenStable:function(b){a.notifyWhenNoOutstandingRequests(b)}}}]}function Ye(){this.$get=
+["$rootScope","$browser","$q","$$q","$exceptionHandler",function(b,a,c,d,e){function f(f,l,k){var m=y(k)&&!k,p=(m?d:c).defer(),q=p.promise;l=a.defer(function(){try{p.resolve(f())}catch(a){p.reject(a),e(a)}finally{delete g[q.$$timeoutId]}m||b.$apply()},l);q.$$timeoutId=l;g[l]=p;return q}var g={};f.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"),delete g[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return f}]}function Ba(b){Ra&&(Y.setAttribute("href",b),b=Y.href);
+Y.setAttribute("href",b);return{href:Y.href,protocol:Y.protocol?Y.protocol.replace(/:$/,""):"",host:Y.host,search:Y.search?Y.search.replace(/^\?/,""):"",hash:Y.hash?Y.hash.replace(/^#/,""):"",hostname:Y.hostname,port:Y.port,pathname:"/"===Y.pathname.charAt(0)?Y.pathname:"/"+Y.pathname}}function $c(b){b=x(b)?Ba(b):b;return b.protocol===id.protocol&&b.host===id.host}function Ze(){this.$get=da(P)}function Ec(b){function a(c,d){if(J(c)){var e={};s(c,function(b,c){e[c]=a(c,b)});return e}return b.factory(c+
+"Filter",d)}this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];a("currency",jd);a("date",kd);a("filter",Df);a("json",Ef);a("limitTo",Ff);a("lowercase",Gf);a("number",ld);a("orderBy",md);a("uppercase",Hf)}function Df(){return function(b,a,c){if(!E(b))return b;var d;switch(typeof a){case "function":break;case "boolean":case "number":case "string":d=!0;case "object":a=If(a,c,d);break;default:return b}return b.filter(a)}}function If(b,a,c){var d=J(b)&&"$"in
+b;!0===a?a=ea:G(a)||(a=function(a,b){if(J(a)||J(b))return!1;a=R(""+a);b=R(""+b);return-1!==a.indexOf(b)});return function(e){return d&&!J(e)?Ia(e,b.$,a,!1):Ia(e,b,a,c)}}function Ia(b,a,c,d,e){var f=typeof b,g=typeof a;if("string"===g&&"!"===a.charAt(0))return!Ia(b,a.substring(1),c,d);if(E(b))return b.some(function(b){return Ia(b,a,c,d)});switch(f){case "object":var h;if(d){for(h in b)if("$"!==h.charAt(0)&&Ia(b[h],a,c,!0))return!0;return e?!1:Ia(b,a,c,!1)}if("object"===g){for(h in a)if(e=a[h],!G(e)&&
+(f="$"===h,!Ia(f?b:b[h],e,c,f,f)))return!1;return!0}return c(b,a);case "function":return!1;default:return c(b,a)}}function jd(b){var a=b.NUMBER_FORMATS;return function(b,d,e){z(d)&&(d=a.CURRENCY_SYM);z(e)&&(e=a.PATTERNS[1].maxFrac);return null==b?b:nd(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,e).replace(/\u00A4/g,d)}}function ld(b){var a=b.NUMBER_FORMATS;return function(b,d){return null==b?b:nd(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function nd(b,a,c,d,e){if(!isFinite(b)||J(b))return"";var f=
+0>b;b=Math.abs(b);var g=b+"",h="",l=[],k=!1;if(-1!==g.indexOf("e")){var m=g.match(/([\d\.]+)e(-?)(\d+)/);m&&"-"==m[2]&&m[3]>e+1?b=0:(h=g,k=!0)}if(k)0<e&&1>b&&(h=b.toFixed(e),b=parseFloat(h));else{g=(g.split(od)[1]||"").length;z(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);var g=(""+b).split(od),k=g[0],g=g[1]||"",p=0,q=a.lgSize,t=a.gSize;if(k.length>=q+t)for(p=k.length-q,m=0;m<p;m++)0===(p-m)%t&&0!==m&&(h+=c),h+=k.charAt(m);for(m=p;m<k.length;m++)0===
+(k.length-m)%q&&0!==m&&(h+=c),h+=k.charAt(m);for(;g.length<e;)g+="0";e&&"0"!==e&&(h+=d+g.substr(0,e))}0===b&&(f=!1);l.push(f?a.negPre:a.posPre,h,f?a.negSuf:a.posSuf);return l.join("")}function Jb(b,a,c){var d="";0>b&&(d="-",b=-b);for(b=""+b;b.length<a;)b="0"+b;c&&(b=b.substr(b.length-a));return d+b}function Z(b,a,c,d){c=c||0;return function(e){e=e["get"+b]();if(0<c||e>-c)e+=c;0===e&&-12==c&&(e=12);return Jb(e,a,d)}}function Kb(b,a){return function(c,d){var e=c["get"+b](),f=vb(a?"SHORT"+b:b);return d[f][e]}}
+function pd(b){var a=(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function qd(b){return function(a){var c=pd(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Jb(a,b)}}function kd(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=$(b[9]+b[10]),g=$(b[9]+b[11]));h.call(a,$(b[1]),$(b[2])-1,$(b[3]));f=$(b[4]||0)-f;g=$(b[5]||
+0)-g;h=$(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,f,g,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e,f){var g="",h=[],l,k;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;x(c)&&(c=Jf.test(c)?$(c):a(c));V(c)&&(c=new Date(c));if(!pa(c))return c;for(;e;)(k=Kf.exec(e))?(h=Ya(h,k,1),e=h.pop()):(h.push(e),e=null);f&&"UTC"===f&&(c=new Date(c.getTime()),c.setMinutes(c.getMinutes()+c.getTimezoneOffset()));
+s(h,function(a){l=Lf[a];g+=l?l(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Ef(){return function(b,a){z(a)&&(a=2);return $a(b,a)}}function Ff(){return function(b,a){V(b)&&(b=b.toString());return E(b)||x(b)?(a=Infinity===Math.abs(Number(a))?Number(a):$(a))?0<a?b.slice(0,a):b.slice(a):x(b)?"":[]:b}}function md(b){return function(a,c,d){function e(a,b){return b?function(b,c){return a(c,b)}:a}function f(a){switch(typeof a){case "number":case "boolean":case "string":return!0;
+default:return!1}}function g(a){return null===a?"null":"function"===typeof a.valueOf&&(a=a.valueOf(),f(a))||"function"===typeof a.toString&&(a=a.toString(),f(a))?a:""}function h(a,b){var c=typeof a,d=typeof b;c===d&&"object"===c&&(a=g(a),b=g(b));return c===d?("string"===c&&(a=a.toLowerCase(),b=b.toLowerCase()),a===b?0:a<b?-1:1):c<d?-1:1}if(!Ta(a))return a;c=E(c)?c:[c];0===c.length&&(c=["+"]);c=c.map(function(a){var c=!1,d=a||oa;if(x(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))c="-"==a.charAt(0),a=a.substring(1);
+if(""===a)return e(h,c);d=b(a);if(d.constant){var f=d();return e(function(a,b){return h(a[f],b[f])},c)}}return e(function(a,b){return h(d(a),d(b))},c)});return Za.call(a).sort(e(function(a,b){for(var d=0;d<c.length;d++){var e=c[d](a,b);if(0!==e)return e}return 0},d))}}function Ja(b){G(b)&&(b={link:b});b.restrict=b.restrict||"AC";return da(b)}function rd(b,a,c,d,e){var f=this,g=[],h=f.$$parentForm=b.parent().controller("form")||Lb;f.$error={};f.$$success={};f.$pending=u;f.$name=e(a.name||a.ngForm||
+"")(c);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=!1;f.$submitted=!1;h.$addControl(f);f.$rollbackViewValue=function(){s(g,function(a){a.$rollbackViewValue()})};f.$commitViewValue=function(){s(g,function(a){a.$commitViewValue()})};f.$addControl=function(a){Ma(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a)};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];f[b]=a;a.$name=b};f.$removeControl=function(a){a.$name&&f[a.$name]===a&&delete f[a.$name];s(f.$pending,function(b,c){f.$setValidity(c,
+null,a)});s(f.$error,function(b,c){f.$setValidity(c,null,a)});s(f.$$success,function(b,c){f.$setValidity(c,null,a)});Xa(g,a)};sd({ctrl:this,$element:b,set:function(a,b,c){var d=a[b];d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(Xa(d,c),0===d.length&&delete a[b])},parentForm:h,$animate:d});f.$setDirty=function(){d.removeClass(b,Sa);d.addClass(b,Mb);f.$dirty=!0;f.$pristine=!1;h.$setDirty()};f.$setPristine=function(){d.setClass(b,Sa,Mb+" ng-submitted");f.$dirty=!1;f.$pristine=
+!0;f.$submitted=!1;s(g,function(a){a.$setPristine()})};f.$setUntouched=function(){s(g,function(a){a.$setUntouched()})};f.$setSubmitted=function(){d.addClass(b,"ng-submitted");f.$submitted=!0;h.$setSubmitted()}}function ic(b){b.$formatters.push(function(a){return b.$isEmpty(a)?a:a.toString()})}function jb(b,a,c,d,e,f){var g=R(a[0].type);if(!e.android){var h=!1;a.on("compositionstart",function(a){h=!0});a.on("compositionend",function(){h=!1;l()})}var l=function(b){k&&(f.defer.cancel(k),k=null);if(!h){var e=
+a.val();b=b&&b.type;"password"===g||c.ngTrim&&"false"===c.ngTrim||(e=T(e));(d.$viewValue!==e||""===e&&d.$$hasNativeValidators)&&d.$setViewValue(e,b)}};if(e.hasEvent("input"))a.on("input",l);else{var k,m=function(a,b,c){k||(k=f.defer(function(){k=null;b&&b.value===c||l(a)}))};a.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||m(a,this,this.value)});if(e.hasEvent("paste"))a.on("paste cut",m)}a.on("change",l);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)}}
+function Nb(b,a){return function(c,d){var e,f;if(pa(c))return c;if(x(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1));if(Mf.test(c))return new Date(c);b.lastIndex=0;if(e=b.exec(c))return e.shift(),f=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},s(e,function(b,c){c<a.length&&(f[a[c]]=+b)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,
+1E3*f.sss||0)}return NaN}}function kb(b,a,c,d){return function(e,f,g,h,l,k,m){function p(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function q(a){return y(a)?pa(a)?a:c(a):u}td(e,f,g,h);jb(e,f,g,h,l,k);var t=h&&h.$options&&h.$options.timezone,r;h.$$parserName=b;h.$parsers.push(function(b){return h.$isEmpty(b)?null:a.test(b)?(b=c(b,r),"UTC"===t&&b.setMinutes(b.getMinutes()-b.getTimezoneOffset()),b):u});h.$formatters.push(function(a){if(a&&!pa(a))throw Ob("datefmt",a);if(p(a)){if((r=a)&&"UTC"===
+t){var b=6E4*r.getTimezoneOffset();r=new Date(r.getTime()+b)}return m("date")(a,d,t)}r=null;return""});if(y(g.min)||g.ngMin){var s;h.$validators.min=function(a){return!p(a)||z(s)||c(a)>=s};g.$observe("min",function(a){s=q(a);h.$validate()})}if(y(g.max)||g.ngMax){var K;h.$validators.max=function(a){return!p(a)||z(K)||c(a)<=K};g.$observe("max",function(a){K=q(a);h.$validate()})}}}function td(b,a,c,d){(d.$$hasNativeValidators=J(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||{};
+return c.badInput&&!c.typeMismatch?u:b})}function ud(b,a,c,d,e){if(y(d)){b=b(d);if(!b.constant)throw M("ngModel")("constexpr",c,d);return b(a)}return e}function jc(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],m=0;m<b.length;m++)if(e==b[m])continue a;c.push(e)}return c}function e(a){if(!E(a)){if(x(a))return a.split(" ");if(J(a)){var b=[];s(a,function(a,c){a&&(b=b.concat(c.split(" ")))});return b}}return a}return{restrict:"AC",link:function(f,
+g,h){function l(a,b){var c=g.data("$classCounts")||{},d=[];s(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",c);return d.join(" ")}function k(b){if(!0===a||f.$index%2===a){var k=e(b||[]);if(!m){var t=l(k,1);h.$addClass(t)}else if(!ea(b,m)){var r=e(m),t=d(k,r),k=d(r,k),t=l(t,1),k=l(k,-1);t&&t.length&&c.addClass(g,t);k&&k.length&&c.removeClass(g,k)}}m=qa(b)}var m;f.$watch(h[b],k,!0);h.$observe("class",function(a){k(f.$eval(h[b]))});"ngClass"!==b&&f.$watch("$index",
+function(c,d){var g=c&1;if(g!==(d&1)){var k=e(f.$eval(h[b]));g===a?(g=l(k,1),h.$addClass(g)):(g=l(k,-1),h.$removeClass(g))}})}}}]}function sd(b){function a(a,b){b&&!f[a]?(k.addClass(e,a),f[a]=!0):!b&&f[a]&&(k.removeClass(e,a),f[a]=!1)}function c(b,c){b=b?"-"+uc(b,"-"):"";a(lb+b,!0===c);a(vd+b,!1===c)}var d=b.ctrl,e=b.$element,f={},g=b.set,h=b.unset,l=b.parentForm,k=b.$animate;f[vd]=!(f[lb]=e.hasClass(lb));d.$setValidity=function(b,e,f){e===u?(d.$pending||(d.$pending={}),g(d.$pending,b,f)):(d.$pending&&
+h(d.$pending,b,f),wd(d.$pending)&&(d.$pending=u));Wa(e)?e?(h(d.$error,b,f),g(d.$$success,b,f)):(g(d.$error,b,f),h(d.$$success,b,f)):(h(d.$error,b,f),h(d.$$success,b,f));d.$pending?(a(xd,!0),d.$valid=d.$invalid=u,c("",null)):(a(xd,!1),d.$valid=wd(d.$error),d.$invalid=!d.$valid,c("",d.$valid));e=d.$pending&&d.$pending[b]?u:d.$error[b]?!1:d.$$success[b]?!0:null;c(b,e);l.$setValidity(b,e,d)}}function wd(b){if(b)for(var a in b)return!1;return!0}var Nf=/^\/(.+)\/([a-z]*)$/,R=function(b){return x(b)?b.toLowerCase():
+b},sc=Object.prototype.hasOwnProperty,vb=function(b){return x(b)?b.toUpperCase():b},Ra,C,ra,Za=[].slice,pf=[].splice,Of=[].push,Da=Object.prototype.toString,Ka=M("ng"),aa=P.angular||(P.angular={}),cb,ob=0;Ra=X.documentMode;B.$inject=[];oa.$inject=[];var E=Array.isArray,T=function(b){return x(b)?b.trim():b},gd=function(b){return b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},bb=function(){if(y(bb.isActive_))return bb.isActive_;var b=!(!X.querySelector("[ng-csp]")&&!X.querySelector("[data-ng-csp]"));
+if(!b)try{new Function("")}catch(a){b=!0}return bb.isActive_=b},sb=["ng-","data-ng-","ng:","x-ng-"],Md=/[A-Z]/g,vc=!1,Rb,na=1,qb=3,Qd={full:"1.3.14",major:1,minor:3,dot:14,codeName:"instantaneous-browserification"};Q.expando="ng339";var Ab=Q.cache={},hf=1;Q._data=function(b){return this.cache[b[this.expando]]||{}};var cf=/([\:\-\_]+(.))/g,df=/^moz([A-Z])/,Pf={mouseleave:"mouseout",mouseenter:"mouseover"},Ub=M("jqLite"),gf=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Tb=/<|&#?\w+;/,ef=/<([\w:]+)/,ff=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+ga={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ga.optgroup=ga.option;ga.tbody=ga.tfoot=ga.colgroup=ga.caption=ga.thead;ga.th=ga.td;var La=Q.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===X.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),Q(P).on("load",a))},
+toString:function(){var b=[];s(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?C(this[b]):C(this[this.length+b])},length:0,push:Of,sort:[].sort,splice:[].splice},Fb={};s("multiple selected checked disabled readOnly required open".split(" "),function(b){Fb[R(b)]=b});var Nc={};s("input select option textarea button form details".split(" "),function(b){Nc[b]=!0});var Oc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};
+s({data:Wb,removeData:yb},function(b,a){Q[a]=b});s({data:Wb,inheritedData:Eb,scope:function(b){return C.data(b,"$scope")||Eb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return C.data(b,"$isolateScope")||C.data(b,"$isolateScopeNoTemplate")},controller:Jc,injector:function(b){return Eb(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Bb,css:function(b,a,c){a=db(a);if(y(c))b.style[a]=c;else return b.style[a]},attr:function(b,a,c){var d=R(a);if(Fb[d])if(y(c))c?
+(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||B).specified?d:u;else if(y(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?u:b},prop:function(b,a,c){if(y(c))b[a]=c;else return b[a]},text:function(){function b(a,b){if(z(b)){var d=a.nodeType;return d===na||d===qb?a.textContent:""}a.textContent=b}b.$dv="";return b}(),val:function(b,a){if(z(a)){if(b.multiple&&"select"===ta(b)){var c=[];s(b.options,function(a){a.selected&&
+c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(z(a))return b.innerHTML;xb(b,!0);b.innerHTML=a},empty:Kc},function(b,a){Q.prototype[a]=function(a,d){var e,f,g=this.length;if(b!==Kc&&(2==b.length&&b!==Bb&&b!==Jc?a:d)===u){if(J(a)){for(e=0;e<g;e++)if(b===Wb)b(this[e],a);else for(f in a)b(this[e],f,a[f]);return this}e=b.$dv;g=e===u?Math.min(g,1):g;for(f=0;f<g;f++){var h=b(this[f],a,d);e=e?e+h:h}return e}for(e=0;e<g;e++)b(this[e],a,d);return this}});
+s({removeData:yb,on:function a(c,d,e,f){if(y(f))throw Ub("onargs");if(Fc(c)){var g=zb(c,!0);f=g.events;var h=g.handle;h||(h=g.handle=lf(c,f));for(var g=0<=d.indexOf(" ")?d.split(" "):[d],l=g.length;l--;){d=g[l];var k=f[d];k||(f[d]=[],"mouseenter"===d||"mouseleave"===d?a(c,Pf[d],function(a){var c=a.relatedTarget;c&&(c===this||this.contains(c))||h(a,d)}):"$destroy"!==d&&c.addEventListener(d,h,!1),k=f[d]);k.push(e)}}},off:Ic,one:function(a,c,d){a=C(a);a.on(c,function f(){a.off(c,d);a.off(c,f)});a.on(c,
+d)},replaceWith:function(a,c){var d,e=a.parentNode;xb(a);s(new Q(c),function(c){d?e.insertBefore(c,d.nextSibling):e.replaceChild(c,a);d=c})},children:function(a){var c=[];s(a.childNodes,function(a){a.nodeType===na&&c.push(a)});return c},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,c){var d=a.nodeType;if(d===na||11===d){c=new Q(c);for(var d=0,e=c.length;d<e;d++)a.appendChild(c[d])}},prepend:function(a,c){if(a.nodeType===na){var d=a.firstChild;s(new Q(c),function(c){a.insertBefore(c,
+d)})}},wrap:function(a,c){c=C(c).eq(0).clone()[0];var d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)},remove:Lc,detach:function(a){Lc(a,!0)},after:function(a,c){var d=a,e=a.parentNode;c=new Q(c);for(var f=0,g=c.length;f<g;f++){var h=c[f];e.insertBefore(h,d.nextSibling);d=h}},addClass:Db,removeClass:Cb,toggleClass:function(a,c,d){c&&s(c.split(" "),function(c){var f=d;z(f)&&(f=!Bb(a,c));(f?Db:Cb)(a,c)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},
+find:function(a,c){return a.getElementsByTagName?a.getElementsByTagName(c):[]},clone:Vb,triggerHandler:function(a,c,d){var e,f,g=c.type||c,h=zb(a);if(h=(h=h&&h.events)&&h[g])e={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:B,type:g,target:a},c.type&&(e=w(e,
+c)),c=qa(h),f=d?[e].concat(d):[e],s(c,function(c){e.isImmediatePropagationStopped()||c.apply(a,f)})}},function(a,c){Q.prototype[c]=function(c,e,f){for(var g,h=0,l=this.length;h<l;h++)z(g)?(g=a(this[h],c,e,f),y(g)&&(g=C(g))):Hc(g,a(this[h],c,e,f));return y(g)?g:this};Q.prototype.bind=Q.prototype.on;Q.prototype.unbind=Q.prototype.off});eb.prototype={put:function(a,c){this[Na(a,this.nextUid)]=c},get:function(a){return this[Na(a,this.nextUid)]},remove:function(a){var c=this[a=Na(a,this.nextUid)];delete this[a];
+return c}};var Qc=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,Qf=/,/,Rf=/^\s*(_?)(\S+?)\1\s*$/,Pc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ga=M("$injector");ab.$$annotate=function(a,c,d){var e;if("function"===typeof a){if(!(e=a.$inject)){e=[];if(a.length){if(c)throw x(d)&&d||(d=a.name||mf(a)),Ga("strictdi",d);c=a.toString().replace(Pc,"");c=c.match(Qc);s(c[1].split(Qf),function(a){a.replace(Rf,function(a,c,d){e.push(d)})})}a.$inject=e}}else E(a)?(c=a.length-1,tb(a[c],"fn"),e=a.slice(0,c)):tb(a,"fn",!0);return e};
+var Sf=M("$animate"),Ce=["$provide",function(a){this.$$selectors={};this.register=function(c,d){var e=c+"-animation";if(c&&"."!=c.charAt(0))throw Sf("notcsel",c);this.$$selectors[c.substr(1)]=e;a.factory(e,d)};this.classNameFilter=function(a){1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null);return this.$$classNameFilter};this.$get=["$$q","$$asyncCallback","$rootScope",function(a,d,e){function f(d){var f,g=a.defer();g.promise.$$cancelFn=function(){f&&f()};e.$$postDigest(function(){f=
+d(function(){g.resolve()})});return g.promise}function g(a,c){var d=[],e=[],f=fa();s((a.attr("class")||"").split(/\s+/),function(a){f[a]=!0});s(c,function(a,c){var g=f[c];!1===a&&g?e.push(c):!0!==a||g||d.push(c)});return 0<d.length+e.length&&[d.length?d:null,e.length?e:null]}function h(a,c,d){for(var e=0,f=c.length;e<f;++e)a[c[e]]=d}function l(){m||(m=a.defer(),d(function(){m.resolve();m=null}));return m.promise}function k(a,c){if(aa.isObject(c)){var d=w(c.from||{},c.to||{});a.css(d)}}var m;return{animate:function(a,
+c,d){k(a,{from:c,to:d});return l()},enter:function(a,c,d,e){k(a,e);d?d.after(a):c.prepend(a);return l()},leave:function(a,c){a.remove();return l()},move:function(a,c,d,e){return this.enter(a,c,d,e)},addClass:function(a,c,d){return this.setClass(a,c,[],d)},$$addClassImmediately:function(a,c,d){a=C(a);c=x(c)?c:E(c)?c.join(" "):"";s(a,function(a){Db(a,c)});k(a,d);return l()},removeClass:function(a,c,d){return this.setClass(a,[],c,d)},$$removeClassImmediately:function(a,c,d){a=C(a);c=x(c)?c:E(c)?c.join(" "):
+"";s(a,function(a){Cb(a,c)});k(a,d);return l()},setClass:function(a,c,d,e){var k=this,l=!1;a=C(a);var m=a.data("$$animateClasses");m?e&&m.options&&(m.options=aa.extend(m.options||{},e)):(m={classes:{},options:e},l=!0);e=m.classes;c=E(c)?c:c.split(" ");d=E(d)?d:d.split(" ");h(e,c,!0);h(e,d,!1);l&&(m.promise=f(function(c){var d=a.data("$$animateClasses");a.removeData("$$animateClasses");if(d){var e=g(a,d.classes);e&&k.$$setClassImmediately(a,e[0],e[1],d.options)}c()}),a.data("$$animateClasses",m));
+return m.promise},$$setClassImmediately:function(a,c,d,e){c&&this.$$addClassImmediately(a,c);d&&this.$$removeClassImmediately(a,d);k(a,e);return l()},enabled:B,cancel:B}}]}],ia=M("$compile");xc.$inject=["$provide","$$sanitizeUriProvider"];var Sc=/^((?:x|data)[\:\-_])/i,qf=M("$controller"),Wc="application/json",$b={"Content-Type":Wc+";charset=utf-8"},sf=/^\[|^\{(?!\{)/,tf={"[":/]$/,"{":/}$/},rf=/^\)\]\}',?\n/,ac=M("$interpolate"),Tf=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,wf={http:80,https:443,ftp:21},Hb=
+M("$location"),Uf={$$html5:!1,$$replace:!1,absUrl:Ib("$$absUrl"),url:function(a){if(z(a))return this.$$url;var c=Tf.exec(a);(c[1]||""===a)&&this.path(decodeURIComponent(c[1]));(c[2]||c[1]||""===a)&&this.search(c[3]||"");this.hash(c[5]||"");return this},protocol:Ib("$$protocol"),host:Ib("$$host"),port:Ib("$$port"),path:dd("$$path",function(a){a=null!==a?a.toString():"";return"/"==a.charAt(0)?a:"/"+a}),search:function(a,c){switch(arguments.length){case 0:return this.$$search;case 1:if(x(a)||V(a))a=
+a.toString(),this.$$search=rc(a);else if(J(a))a=Ea(a,{}),s(a,function(c,e){null==c&&delete a[e]}),this.$$search=a;else throw Hb("isrcharg");break;default:z(c)||null===c?delete this.$$search[a]:this.$$search[a]=c}this.$$compose();return this},hash:dd("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};s([cd,ec,dc],function(a){a.prototype=Object.create(Uf);a.prototype.state=function(c){if(!arguments.length)return this.$$state;if(a!==dc||!this.$$html5)throw Hb("nostate");
+this.$$state=z(c)?null:c;return this}});var ka=M("$parse"),Vf=Function.prototype.call,Wf=Function.prototype.apply,Xf=Function.prototype.bind,mb=fa();s({"null":function(){return null},"true":function(){return!0},"false":function(){return!1},undefined:function(){}},function(a,c){a.constant=a.literal=a.sharedGetter=!0;mb[c]=a});mb["this"]=function(a){return a};mb["this"].sharedGetter=!0;var nb=w(fa(),{"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return y(d)?y(e)?d+e:d:y(e)?e:u},"-":function(a,c,d,e){d=d(a,
+c);e=e(a,c);return(y(d)?d:0)-(y(e)?e:0)},"*":function(a,c,d,e){return d(a,c)*e(a,c)},"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"===":function(a,c,d,e){return d(a,c)===e(a,c)},"!==":function(a,c,d,e){return d(a,c)!==e(a,c)},"==":function(a,c,d,e){return d(a,c)==e(a,c)},"!=":function(a,c,d,e){return d(a,c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,
+c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"!":function(a,c,d){return!d(a,c)},"=":!0,"|":!0}),Yf={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},hc=function(a){this.options=a};hc.prototype={constructor:hc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();
+else if(this.isIdent(a))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;else{var c=a+this.peek(),d=c+this.peek(2),e=nb[c],f=nb[d];nb[a]||e||f?(a=f?d:e?c:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,c){return-1!==c.indexOf(a)},peek:function(a){a=a||1;return this.index+
+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=y(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw ka("lexerr",a,c,this.text);
+},readNumber:function(){for(var a="",c=this.index;this.index<this.text.length;){var d=R(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var e=this.peek();if("e"==d&&this.isExpOperator(e))a+=d;else if(this.isExpOperator(d)&&e&&this.isNumber(e)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||e&&this.isNumber(e)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:c,text:a,constant:!0,value:Number(a)})},readIdent:function(){for(var a=
+this.index;this.index<this.text.length;){var c=this.text.charAt(this.index);if(!this.isIdent(c)&&!this.isNumber(c))break;this.index++}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var c=this.index;this.index++;for(var d="",e=a,f=!1;this.index<this.text.length;){var g=this.text.charAt(this.index),e=e+g;if(f)"u"===g?(f=this.text.substring(this.index+1,this.index+5),f.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+f+"]"),this.index+=
+4,d+=String.fromCharCode(parseInt(f,16))):d+=Yf[g]||g,f=!1;else if("\\"===g)f=!0;else{if(g===a){this.index++;this.tokens.push({index:c,text:e,constant:!0,value:d});return}d+=g}this.index++}this.throwError("Unterminated quote",c)}};var ib=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d};ib.ZERO=w(function(){return 0},{sharedGetter:!0,constant:!0});ib.prototype={constructor:ib,parse:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.statements();0!==this.tokens.length&&this.throwError("is an unexpected token",
+this.tokens[0]);a.literal=!!a.literal;a.constant=!!a.constant;return a},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.peek().identifier&&this.peek().text in mb?a=mb[this.consume().text]:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var c,d;c=this.expect("(","[",".");)"("===c.text?(a=this.functionCall(a,
+d),d=null):"["===c.text?(d=a,a=this.objectIndex(a)):"."===c.text?(d=a,a=this.fieldAccess(a)):this.throwError("IMPOSSIBLE");return a},throwError:function(a,c){throw ka("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},peekToken:function(){if(0===this.tokens.length)throw ka("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){return this.peekAhead(0,a,c,d,e)},peekAhead:function(a,c,d,e,f){if(this.tokens.length>a){a=this.tokens[a];var g=a.text;if(g===c||g===d||g===e||g===
+f||!(c||d||e||f))return a}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},consume:function(a){if(0===this.tokens.length)throw ka("ueoe",this.text);var c=this.expect(a);c||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return c},unaryFn:function(a,c){var d=nb[a];return w(function(a,f){return d(a,f,c)},{constant:c.constant,inputs:[c]})},binaryFn:function(a,c,d,e){var f=nb[c];return w(function(c,e){return f(c,e,a,d)},{constant:a.constant&&
+d.constant,inputs:!e&&[a,d]})},identifier:function(){for(var a=this.consume().text;this.peek(".")&&this.peekAhead(1).identifier&&!this.peekAhead(2,"(");)a+=this.consume().text+this.consume().text;return yf(a,this.options,this.text)},constant:function(){var a=this.consume().value;return w(function(){return a},{constant:!0,literal:!0})},statements:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.filterChain()),!this.expect(";"))return 1===a.length?a[0]:function(c,
+d){for(var e,f=0,g=a.length;f<g;f++)e=a[f](c,d);return e}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},filter:function(a){var c=this.$filter(this.consume().text),d,e;if(this.peek(":"))for(d=[],e=[];this.expect(":");)d.push(this.expression());var f=[a].concat(d||[]);return w(function(f,h){var l=a(f,h);if(e){e[0]=l;for(l=d.length;l--;)e[l+1]=d[l](f,h);return c.apply(u,e)}return c(l)},{constant:!c.$stateful&&f.every(fc),inputs:!c.$stateful&&f})},expression:function(){return this.assignment()},
+assignment:function(){var a=this.ternary(),c,d;return(d=this.expect("="))?(a.assign||this.throwError("implies assignment but ["+this.text.substring(0,d.index)+"] can not be assigned to",d),c=this.ternary(),w(function(d,f){return a.assign(d,c(d,f),f)},{inputs:[a,c]})):a},ternary:function(){var a=this.logicalOR(),c;if(this.expect("?")&&(c=this.assignment(),this.consume(":"))){var d=this.assignment();return w(function(e,f){return a(e,f)?c(e,f):d(e,f)},{constant:a.constant&&c.constant&&d.constant})}return a},
+logicalOR:function(){for(var a=this.logicalAND(),c;c=this.expect("||");)a=this.binaryFn(a,c.text,this.logicalAND(),!0);return a},logicalAND:function(){for(var a=this.equality(),c;c=this.expect("&&");)a=this.binaryFn(a,c.text,this.equality(),!0);return a},equality:function(){for(var a=this.relational(),c;c=this.expect("==","!=","===","!==");)a=this.binaryFn(a,c.text,this.relational());return a},relational:function(){for(var a=this.additive(),c;c=this.expect("<",">","<=",">=");)a=this.binaryFn(a,c.text,
+this.additive());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.text,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.text,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(ib.ZERO,a.text,this.unary()):(a=this.expect("!"))?this.unaryFn(a.text,this.unary()):this.primary()},fieldAccess:function(a){var c=
+this.identifier();return w(function(d,e,f){d=f||a(d,e);return null==d?u:c(d)},{assign:function(d,e,f){var g=a(d,f);g||a.assign(d,g={},f);return c.assign(g,e)}})},objectIndex:function(a){var c=this.text,d=this.expression();this.consume("]");return w(function(e,f){var g=a(e,f),h=d(e,f);sa(h,c);return g?la(g[h],c):u},{assign:function(e,f,g){var h=sa(d(e,g),c),l=la(a(e,g),c);l||a.assign(e,l={},g);return l[h]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());
+while(this.expect(","))}this.consume(")");var e=this.text,f=d.length?[]:null;return function(g,h){var l=c?c(g,h):y(c)?u:g,k=a(g,h,l)||B;if(f)for(var m=d.length;m--;)f[m]=la(d[m](g,h),e);la(l,e);if(k){if(k.constructor===k)throw ka("isecfn",e);if(k===Vf||k===Wf||k===Xf)throw ka("isecff",e);}l=k.apply?k.apply(l,f):k(f[0],f[1],f[2],f[3],f[4]);f&&(f.length=0);return la(l,e)}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))
+}this.consume("]");return w(function(c,d){for(var e=[],f=0,g=a.length;f<g;f++)e.push(a[f](c,d));return e},{literal:!0,constant:a.every(fc),inputs:a})},object:function(){var a=[],c=[];if("}"!==this.peekToken().text){do{if(this.peek("}"))break;var d=this.consume();d.constant?a.push(d.value):d.identifier?a.push(d.text):this.throwError("invalid key",d);this.consume(":");c.push(this.expression())}while(this.expect(","))}this.consume("}");return w(function(d,f){for(var g={},h=0,l=c.length;h<l;h++)g[a[h]]=
+c[h](d,f);return g},{literal:!0,constant:c.every(fc),inputs:c})}};var Af=fa(),zf=fa(),Bf=Object.prototype.valueOf,Ca=M("$sce"),ma={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},ia=M("$compile"),Y=X.createElement("a"),id=Ba(P.location.href);Ec.$inject=["$provide"];jd.$inject=["$locale"];ld.$inject=["$locale"];var od=".",Lf={yyyy:Z("FullYear",4),yy:Z("FullYear",2,0,!0),y:Z("FullYear",1),MMMM:Kb("Month"),MMM:Kb("Month",!0),MM:Z("Month",2,1),M:Z("Month",1,1),dd:Z("Date",2),d:Z("Date",
+1),HH:Z("Hours",2),H:Z("Hours",1),hh:Z("Hours",2,-12),h:Z("Hours",1,-12),mm:Z("Minutes",2),m:Z("Minutes",1),ss:Z("Seconds",2),s:Z("Seconds",1),sss:Z("Milliseconds",3),EEEE:Kb("Day"),EEE:Kb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Jb(Math[0<a?"floor":"ceil"](a/60),2)+Jb(Math.abs(a%60),2))},ww:qd(2),w:qd(1)},Kf=/((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/,Jf=/^\-?\d+$/;
+kd.$inject=["$locale"];var Gf=da(R),Hf=da(vb);md.$inject=["$parse"];var Td=da({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){if("a"===c[0].nodeName.toLowerCase()){var f="[object SVGAnimatedString]"===Da.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}}),wb={};s(Fb,function(a,c){if("multiple"!=a){var d=ya("ng-"+c);wb[d]=function(){return{restrict:"A",priority:100,link:function(a,f,g){a.$watch(g[d],function(a){g.$set(c,
+!!a)})}}}}});s(Oc,function(a,c){wb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(Nf))){f.$set("ngPattern",new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,a)})}}}});s(["src","srcset","href"],function(a){var c=ya("ng-"+a);wb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,h=a;"href"===a&&"[object SVGAnimatedString]"===Da.call(e.prop("href"))&&(h="xlinkHref",f.$attr[h]="xlink:href",g=null);f.$observe(c,
+function(c){c?(f.$set(h,c),Ra&&g&&e.prop(g,f[h])):"href"===a&&f.$set(h,null)})}}}});var Lb={$addControl:B,$$renameControl:function(a,c){a.$name=c},$removeControl:B,$setValidity:B,$setDirty:B,$setPristine:B,$setSubmitted:B};rd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var yd=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:rd,compile:function(a){a.addClass(Sa).addClass(lb);return{pre:function(a,d,g,h){if(!("action"in g)){var l=function(c){a.$apply(function(){h.$commitViewValue();
+h.$setSubmitted()});c.preventDefault()};d[0].addEventListener("submit",l,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",l,!1)},0,!1)})}var k=h.$$parentForm,m=h.$name;m&&(hb(a,null,m,h,m),g.$observe(g.name?"name":"ngForm",function(c){m!==c&&(hb(a,null,m,u,m),m=c,hb(a,null,m,h,m),k.$$renameControl(h,m))}));d.on("$destroy",function(){k.$removeControl(h);m&&hb(a,null,m,u,m);w(h,Lb)})}}}}}]},Ud=yd(),ge=yd(!0),Mf=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,
+Zf=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,$f=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,ag=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,zd=/^(\d{4})-(\d{2})-(\d{2})$/,Ad=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,kc=/^(\d{4})-W(\d\d)$/,Bd=/^(\d{4})-(\d\d)$/,Cd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Dd={text:function(a,c,d,e,f,g){jb(a,c,d,e,f,g);ic(e)},date:kb("date",zd,Nb(zd,["yyyy",
+"MM","dd"]),"yyyy-MM-dd"),"datetime-local":kb("datetimelocal",Ad,Nb(Ad,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:kb("time",Cd,Nb(Cd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:kb("week",kc,function(a,c){if(pa(a))return a;if(x(a)){kc.lastIndex=0;var d=kc.exec(a);if(d){var e=+d[1],f=+d[2],g=d=0,h=0,l=0,k=pd(e),f=7*(f-1);c&&(d=c.getHours(),g=c.getMinutes(),h=c.getSeconds(),l=c.getMilliseconds());return new Date(e,0,k.getDate()+f,d,g,h,l)}}return NaN},"yyyy-Www"),month:kb("month",
+Bd,Nb(Bd,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,g){td(a,c,d,e);jb(a,c,d,e,f,g);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:ag.test(a)?parseFloat(a):u});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!V(a))throw Ob("numfmt",a);a=a.toString()}return a});if(y(d.min)||d.ngMin){var h;e.$validators.min=function(a){return e.$isEmpty(a)||z(h)||a>=h};d.$observe("min",function(a){y(a)&&!V(a)&&(a=parseFloat(a,10));h=V(a)&&!isNaN(a)?a:u;e.$validate()})}if(y(d.max)||
+d.ngMax){var l;e.$validators.max=function(a){return e.$isEmpty(a)||z(l)||a<=l};d.$observe("max",function(a){y(a)&&!V(a)&&(a=parseFloat(a,10));l=V(a)&&!isNaN(a)?a:u;e.$validate()})}},url:function(a,c,d,e,f,g){jb(a,c,d,e,f,g);ic(e);e.$$parserName="url";e.$validators.url=function(a,c){var d=a||c;return e.$isEmpty(d)||Zf.test(d)}},email:function(a,c,d,e,f,g){jb(a,c,d,e,f,g);ic(e);e.$$parserName="email";e.$validators.email=function(a,c){var d=a||c;return e.$isEmpty(d)||$f.test(d)}},radio:function(a,c,
+d,e){z(d.name)&&c.attr("name",++ob);c.on("click",function(a){c[0].checked&&e.$setViewValue(d.value,a&&a.type)});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e,f,g,h,l){var k=ud(l,a,"ngTrueValue",d.ngTrueValue,!0),m=ud(l,a,"ngFalseValue",d.ngFalseValue,!1);c.on("click",function(a){e.$setViewValue(c[0].checked,a&&a.type)});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return!1===a};e.$formatters.push(function(a){return ea(a,
+k)});e.$parsers.push(function(a){return a?k:m})},hidden:B,button:B,submit:B,reset:B,file:B},yc=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,g,h,l){l[0]&&(Dd[R(h.type)]||Dd.text)(f,g,h,l[0],c,a,d,e)}}}}],bg=/^(true|false|\d+)$/,ye=function(){return{restrict:"A",priority:100,compile:function(a,c){return bg.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",
+a)})}}}},Zd=["$compile",function(a){return{restrict:"AC",compile:function(c){a.$$addBindingClass(c);return function(c,e,f){a.$$addBindingInfo(e,f.ngBind);e=e[0];c.$watch(f.ngBind,function(a){e.textContent=a===u?"":a})}}}}],ae=["$interpolate","$compile",function(a,c){return{compile:function(d){c.$$addBindingClass(d);return function(d,f,g){d=a(f.attr(g.$attr.ngBindTemplate));c.$$addBindingInfo(f,d.expressions);f=f[0];g.$observe("ngBindTemplate",function(a){f.textContent=a===u?"":a})}}}}],$d=["$sce",
+"$parse","$compile",function(a,c,d){return{restrict:"A",compile:function(e,f){var g=c(f.ngBindHtml),h=c(f.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(e);return function(c,e,f){d.$$addBindingInfo(e,f.ngBindHtml);c.$watch(h,function(){e.html(a.getTrustedHtml(g(c))||"")})}}}}],xe=da({restrict:"A",require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),be=jc("",!0),de=jc("Odd",0),ce=jc("Even",1),ee=Ja({compile:function(a,c){c.$set("ngCloak",
+u);a.removeClass("ng-cloak")}}),fe=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Dc={},cg={blur:!0,focus:!0};s("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=ya("ng-"+a);Dc[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f,g){var h=d(g[c],null,!0);return function(c,d){d.on(a,function(d){var f=function(){h(c,{$event:d})};
+cg[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var ie=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var h,l,k;c.$watch(e.ngIf,function(c){c?l||g(function(c,f){l=f;c[c.length++]=X.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)}):(k&&(k.remove(),k=null),l&&(l.$destroy(),l=null),h&&(k=ub(h.clone),a.leave(k).then(function(){k=null}),h=null))})}}}],je=["$templateRequest","$anchorScroll",
+"$animate","$sce",function(a,c,d,e){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:aa.noop,compile:function(f,g){var h=g.ngInclude||g.src,l=g.onload||"",k=g.autoscroll;return function(f,g,q,s,r){var u=0,w,n,D,H=function(){n&&(n.remove(),n=null);w&&(w.$destroy(),w=null);D&&(d.leave(D).then(function(){n=null}),n=D,D=null)};f.$watch(e.parseAsResourceUrl(h),function(e){var h=function(){!y(k)||k&&!f.$eval(k)||c()},n=++u;e?(a(e,!0).then(function(a){if(n===u){var c=f.$new();
+s.template=a;a=r(c,function(a){H();d.enter(a,null,g).then(h)});w=c;D=a;w.$emit("$includeContentLoaded",e);f.$eval(l)}},function(){n===u&&(H(),f.$emit("$includeContentError",e))}),f.$emit("$includeContentRequested",e)):(H(),s.template=null)})}}}}],Ae=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a(Gc(f.template,X).childNodes)(c,function(a){d.append(a)},{futureParentElement:d})):(d.html(f.template),a(d.contents())(c))}}}],
+ke=Ja({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),we=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,c,d,e){var f=c.attr(d.$attr.ngList)||", ",g="false"!==d.ngTrim,h=g?T(f):f;e.$parsers.push(function(a){if(!z(a)){var c=[];a&&s(a.split(h),function(a){a&&c.push(g?T(a):a)});return c}});e.$formatters.push(function(a){return E(a)?a.join(f):u});e.$isEmpty=function(a){return!a||!a.length}}}},lb="ng-valid",vd="ng-invalid",Sa="ng-pristine",
+Mb="ng-dirty",xd="ng-pending",Ob=new M("ngModel"),dg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,g,h,l,k,m){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=u;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success=
+{};this.$pending=u;this.$name=m(d.name||"",!1)(a);var p=f(d.ngModel),q=p.assign,t=p,r=q,w=null,C,n=this;this.$$setOptions=function(a){if((n.$options=a)&&a.getterSetter){var c=f(d.ngModel+"()"),g=f(d.ngModel+"($$$p)");t=function(a){var d=p(a);G(d)&&(d=c(a));return d};r=function(a,c){G(p(a))?g(a,{$$$p:n.$modelValue}):q(a,n.$modelValue)}}else if(!p.assign)throw Ob("nonassign",d.ngModel,ua(e));};this.$render=B;this.$isEmpty=function(a){return z(a)||""===a||null===a||a!==a};var D=e.inheritedData("$formController")||
+Lb,H=0;sd({ctrl:this,$element:e,set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},parentForm:D,$animate:g});this.$setPristine=function(){n.$dirty=!1;n.$pristine=!0;g.removeClass(e,Mb);g.addClass(e,Sa)};this.$setDirty=function(){n.$dirty=!0;n.$pristine=!1;g.removeClass(e,Sa);g.addClass(e,Mb);D.$setDirty()};this.$setUntouched=function(){n.$touched=!1;n.$untouched=!0;g.setClass(e,"ng-untouched","ng-touched")};this.$setTouched=function(){n.$touched=!0;n.$untouched=!1;g.setClass(e,"ng-touched",
+"ng-untouched")};this.$rollbackViewValue=function(){h.cancel(w);n.$viewValue=n.$$lastCommittedViewValue;n.$render()};this.$validate=function(){if(!V(n.$modelValue)||!isNaN(n.$modelValue)){var a=n.$$rawModelValue,c=n.$valid,d=n.$modelValue,e=n.$options&&n.$options.allowInvalid;n.$$runValidators(a,n.$$lastCommittedViewValue,function(f){e||c===f||(n.$modelValue=f?a:u,n.$modelValue!==d&&n.$$writeModelToScope())})}};this.$$runValidators=function(a,c,d){function e(){var d=!0;s(n.$validators,function(e,
+f){var h=e(a,c);d=d&&h;g(f,h)});return d?!0:(s(n.$asyncValidators,function(a,c){g(c,null)}),!1)}function f(){var d=[],e=!0;s(n.$asyncValidators,function(f,h){var k=f(a,c);if(!k||!G(k.then))throw Ob("$asyncValidators",k);g(h,u);d.push(k.then(function(){g(h,!0)},function(a){e=!1;g(h,!1)}))});d.length?k.all(d).then(function(){h(e)},B):h(!0)}function g(a,c){l===H&&n.$setValidity(a,c)}function h(a){l===H&&d(a)}H++;var l=H;(function(){var a=n.$$parserName||"parse";if(C===u)g(a,null);else return C||(s(n.$validators,
+function(a,c){g(c,null)}),s(n.$asyncValidators,function(a,c){g(c,null)})),g(a,C),C;return!0})()?e()?f():h(!1):h(!1)};this.$commitViewValue=function(){var a=n.$viewValue;h.cancel(w);if(n.$$lastCommittedViewValue!==a||""===a&&n.$$hasNativeValidators)n.$$lastCommittedViewValue=a,n.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var c=n.$$lastCommittedViewValue;if(C=z(c)?u:!0)for(var d=0;d<n.$parsers.length;d++)if(c=n.$parsers[d](c),z(c)){C=!1;break}V(n.$modelValue)&&
+isNaN(n.$modelValue)&&(n.$modelValue=t(a));var e=n.$modelValue,f=n.$options&&n.$options.allowInvalid;n.$$rawModelValue=c;f&&(n.$modelValue=c,n.$modelValue!==e&&n.$$writeModelToScope());n.$$runValidators(c,n.$$lastCommittedViewValue,function(a){f||(n.$modelValue=a?c:u,n.$modelValue!==e&&n.$$writeModelToScope())})};this.$$writeModelToScope=function(){r(a,n.$modelValue);s(n.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}})};this.$setViewValue=function(a,c){n.$viewValue=a;n.$options&&!n.$options.updateOnDefault||
+n.$$debounceViewValueCommit(c)};this.$$debounceViewValueCommit=function(c){var d=0,e=n.$options;e&&y(e.debounce)&&(e=e.debounce,V(e)?d=e:V(e[c])?d=e[c]:V(e["default"])&&(d=e["default"]));h.cancel(w);d?w=h(function(){n.$commitViewValue()},d):l.$$phase?n.$commitViewValue():a.$apply(function(){n.$commitViewValue()})};a.$watch(function(){var c=t(a);if(c!==n.$modelValue){n.$modelValue=n.$$rawModelValue=c;C=u;for(var d=n.$formatters,e=d.length,f=c;e--;)f=d[e](f);n.$viewValue!==f&&(n.$viewValue=n.$$lastCommittedViewValue=
+f,n.$render(),n.$$runValidators(c,f,B))}return c})}],ve=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:dg,priority:1,compile:function(c){c.addClass(Sa).addClass("ng-untouched").addClass(lb);return{pre:function(a,c,f,g){var h=g[0],l=g[1]||Lb;h.$$setOptions(g[2]&&g[2].$options);l.$addControl(h);f.$observe("name",function(a){h.$name!==a&&l.$$renameControl(h,a)});a.$on("$destroy",function(){l.$removeControl(h)})},post:function(c,e,f,g){var h=g[0];
+if(h.$options&&h.$options.updateOn)e.on(h.$options.updateOn,function(a){h.$$debounceViewValueCommit(a&&a.type)});e.on("blur",function(e){h.$touched||(a.$$phase?c.$evalAsync(h.$setTouched):c.$apply(h.$setTouched))})}}}}}],eg=/(\s+|^)default(\s+|$)/,ze=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,c){var d=this;this.$options=a.$eval(c.ngModelOptions);this.$options.updateOn!==u?(this.$options.updateOnDefault=!1,this.$options.updateOn=T(this.$options.updateOn.replace(eg,function(){d.$options.updateOnDefault=
+!0;return" "}))):this.$options.updateOnDefault=!0}]}},le=Ja({terminal:!0,priority:1E3}),me=["$locale","$interpolate",function(a,c){var d=/{}/g,e=/^when(Minus)?(.+)$/;return{restrict:"EA",link:function(f,g,h){function l(a){g.text(a||"")}var k=h.count,m=h.$attr.when&&g.attr(h.$attr.when),p=h.offset||0,q=f.$eval(m)||{},t={},m=c.startSymbol(),r=c.endSymbol(),u=m+k+"-"+p+r,w=aa.noop,n;s(h,function(a,c){var d=e.exec(c);d&&(d=(d[1]?"-":"")+R(d[2]),q[d]=g.attr(h.$attr[c]))});s(q,function(a,e){t[e]=c(a.replace(d,
+u))});f.$watch(k,function(c){c=parseFloat(c);var d=isNaN(c);d||c in q||(c=a.pluralCat(c-p));c===n||d&&isNaN(n)||(w(),w=f.$watch(t[c],l),n=c)})}}}],ne=["$parse","$animate",function(a,c){var d=M("ngRepeat"),e=function(a,c,d,e,k,m,p){a[d]=e;k&&(a[k]=m);a.$index=c;a.$first=0===c;a.$last=c===p-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(c&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(f,g){var h=g.ngRepeat,l=X.createComment(" end ngRepeat: "+
+h+" "),k=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!k)throw d("iexp",h);var m=k[1],p=k[2],q=k[3],t=k[4],k=m.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);if(!k)throw d("iidexp",m);var r=k[3]||k[1],w=k[2];if(q&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(q)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(q)))throw d("badident",q);var y,n,D,H,v={$id:Na};t?y=a(t):(D=function(a,c){return Na(c)},
+H=function(a){return a});return function(a,f,g,k,m){y&&(n=function(c,d,e){w&&(v[w]=c);v[r]=d;v.$index=e;return y(a,v)});var t=fa();a.$watchCollection(p,function(g){var k,p,y=f[0],F,v=fa(),B,z,G,E,J,x,K;q&&(a[q]=g);if(Ta(g))J=g,p=n||D;else{p=n||H;J=[];for(K in g)g.hasOwnProperty(K)&&"$"!=K.charAt(0)&&J.push(K);J.sort()}B=J.length;K=Array(B);for(k=0;k<B;k++)if(z=g===J?k:J[k],G=g[z],E=p(z,G,k),t[E])x=t[E],delete t[E],v[E]=x,K[k]=x;else{if(v[E])throw s(K,function(a){a&&a.scope&&(t[a.id]=a)}),d("dupes",
+h,E,G);K[k]={id:E,scope:u,clone:u};v[E]=!0}for(F in t){x=t[F];E=ub(x.clone);c.leave(E);if(E[0].parentNode)for(k=0,p=E.length;k<p;k++)E[k].$$NG_REMOVED=!0;x.scope.$destroy()}for(k=0;k<B;k++)if(z=g===J?k:J[k],G=g[z],x=K[k],x.scope){F=y;do F=F.nextSibling;while(F&&F.$$NG_REMOVED);x.clone[0]!=F&&c.move(ub(x.clone),null,C(y));y=x.clone[x.clone.length-1];e(x.scope,k,r,G,w,z,B)}else m(function(a,d){x.scope=d;var f=l.cloneNode(!1);a[a.length++]=f;c.enter(a,null,C(y));y=f;x.clone=a;v[x.id]=x;e(x.scope,k,r,
+G,w,z,B)});t=v})}}}}],oe=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngShow,function(c){a[c?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],he=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngHide,function(c){a[c?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],pe=Ja(function(a,c,d){a.$watchCollection(d.ngStyle,function(a,d){d&&a!==d&&s(d,function(a,
+d){c.css(d,"")});a&&c.css(a)})}),qe=["$animate",function(a){return{restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,f){var g=[],h=[],l=[],k=[],m=function(a,c){return function(){a.splice(c,1)}};c.$watch(e.ngSwitch||e.on,function(c){var d,e;d=0;for(e=l.length;d<e;++d)a.cancel(l[d]);d=l.length=0;for(e=k.length;d<e;++d){var r=ub(h[d].clone);k[d].$destroy();(l[d]=a.leave(r)).then(m(l,d))}h.length=0;k.length=0;(g=f.cases["!"+c]||f.cases["?"])&&s(g,function(c){c.transclude(function(d,
+e){k.push(e);var f=c.element;d[d.length++]=X.createComment(" end ngSwitchWhen: ");h.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],re=Ja({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,c,d,e,f){e.cases["!"+d.ngSwitchWhen]=e.cases["!"+d.ngSwitchWhen]||[];e.cases["!"+d.ngSwitchWhen].push({transclude:f,element:c})}}),se=Ja({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,c,d,e,f){e.cases["?"]=e.cases["?"]||[];e.cases["?"].push({transclude:f,
+element:c})}}),ue=Ja({restrict:"EAC",link:function(a,c,d,e,f){if(!f)throw M("ngTransclude")("orphan",ua(c));f(function(a){c.empty();c.append(a)})}}),Vd=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(c,d){"text/ng-template"==d.type&&a.put(d.id,c[0].text)}}}],fg=M("ngOptions"),te=da({restrict:"A",terminal:!0}),Wd=["$compile","$parse",function(a,c){var d=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
+e={$setViewValue:B};return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope","$attrs",function(a,c,d){var l=this,k={},m=e,p;l.databound=d.ngModel;l.init=function(a,c,d){m=a;p=d};l.addOption=function(c,d){Ma(c,'"option value"');k[c]=!0;m.$viewValue==c&&(a.val(c),p.parent()&&p.remove());d&&d[0].hasAttribute("selected")&&(d[0].selected=!0)};l.removeOption=function(a){this.hasOption(a)&&(delete k[a],m.$viewValue===a&&this.renderUnknownOption(a))};l.renderUnknownOption=function(c){c=
+"? "+Na(c)+" ?";p.val(c);a.prepend(p);a.val(c);p.prop("selected",!0)};l.hasOption=function(a){return k.hasOwnProperty(a)};c.$on("$destroy",function(){l.renderUnknownOption=B})}],link:function(e,g,h,l){function k(a,c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(v.parent()&&v.remove(),c.val(a),""===a&&B.prop("selected",!0)):z(a)&&B?c.val(""):e.renderUnknownOption(a)};c.on("change",function(){a.$apply(function(){v.parent()&&v.remove();d.$setViewValue(c.val())})})}function m(a,c,d){var e;
+d.$render=function(){var a=new eb(d.$viewValue);s(c.find("option"),function(c){c.selected=y(a.get(c.value))})};a.$watch(function(){ea(e,d.$viewValue)||(e=qa(d.$viewValue),d.$render())});c.on("change",function(){a.$apply(function(){var a=[];s(c.find("option"),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function p(e,f,g){function h(a,c,d){R[B]=d;G&&(R[G]=c);return a(e,R)}function k(a){var c;if(t)if(K&&E(a)){c=new eb([]);for(var d=0;d<a.length;d++)c.put(h(K,null,a[d]),!0)}else c=
+new eb(a);else K&&(a=h(K,null,a));return function(d,e){var f;f=K?K:z?z:A;return t?y(c.remove(h(f,d,e))):a===h(f,d,e)}}function l(){n||(e.$$postDigest(p),n=!0)}function m(a,c,d){a[c]=a[c]||0;a[c]+=d?1:-1}function p(){n=!1;var a={"":[]},c=[""],d,l,r,u,v;r=g.$viewValue;u=N(e)||[];var B=G?Object.keys(u).sort():u,x,z,E,A,O={};v=k(r);var M=!1,T,V;Q={};for(A=0;E=B.length,A<E;A++){x=A;if(G&&(x=B[A],"$"===x.charAt(0)))continue;z=u[x];d=h(J,x,z)||"";(l=a[d])||(l=a[d]=[],c.push(d));d=v(x,z);M=M||d;z=h(C,x,z);
+z=y(z)?z:"";V=K?K(e,R):G?B[A]:A;K&&(Q[V]=x);l.push({id:V,label:z,selected:d})}t||(w||null===r?a[""].unshift({id:"",label:"",selected:!M}):M||a[""].unshift({id:"?",label:"",selected:!0}));x=0;for(B=c.length;x<B;x++){d=c[x];l=a[d];P.length<=x?(r={element:H.clone().attr("label",d),label:l.label},u=[r],P.push(u),f.append(r.element)):(u=P[x],r=u[0],r.label!=d&&r.element.attr("label",r.label=d));M=null;A=0;for(E=l.length;A<E;A++)d=l[A],(v=u[A+1])?(M=v.element,v.label!==d.label&&(m(O,v.label,!1),m(O,d.label,
+!0),M.text(v.label=d.label),M.prop("label",v.label)),v.id!==d.id&&M.val(v.id=d.id),M[0].selected!==d.selected&&(M.prop("selected",v.selected=d.selected),Ra&&M.prop("selected",v.selected))):(""===d.id&&w?T=w:(T=D.clone()).val(d.id).prop("selected",d.selected).attr("selected",d.selected).prop("label",d.label).text(d.label),u.push(v={element:T,label:d.label,id:d.id,selected:d.selected}),m(O,d.label,!0),M?M.after(T):r.element.append(T),M=T);for(A++;u.length>A;)d=u.pop(),m(O,d.label,!1),d.element.remove()}for(;P.length>
+x;){l=P.pop();for(A=1;A<l.length;++A)m(O,l[A].label,!1);l[0].element.remove()}s(O,function(a,c){0<a?q.addOption(c):0>a&&q.removeOption(c)})}var v;if(!(v=r.match(d)))throw fg("iexp",r,ua(f));var C=c(v[2]||v[1]),B=v[4]||v[6],x=/ as /.test(v[0])&&v[1],z=x?c(x):null,G=v[5],J=c(v[3]||""),A=c(v[2]?v[1]:B),N=c(v[7]),K=v[8]?c(v[8]):null,Q={},P=[[{element:f,label:""}]],R={};w&&(a(w)(e),w.removeClass("ng-scope"),w.remove());f.empty();f.on("change",function(){e.$apply(function(){var a=N(e)||[],c;if(t)c=[],s(f.val(),
+function(d){d=K?Q[d]:d;c.push("?"===d?u:""===d?null:h(z?z:A,d,a[d]))});else{var d=K?Q[f.val()]:f.val();c="?"===d?u:""===d?null:h(z?z:A,d,a[d])}g.$setViewValue(c);p()})});g.$render=p;e.$watchCollection(N,l);e.$watchCollection(function(){var a=N(e),c;if(a&&E(a)){c=Array(a.length);for(var d=0,f=a.length;d<f;d++)c[d]=h(C,d,a[d])}else if(a)for(d in c={},a)a.hasOwnProperty(d)&&(c[d]=h(C,d,a[d]));return c},l);t&&e.$watchCollection(function(){return g.$modelValue},l)}if(l[1]){var q=l[0];l=l[1];var t=h.multiple,
+r=h.ngOptions,w=!1,B,n=!1,D=C(X.createElement("option")),H=C(X.createElement("optgroup")),v=D.clone();h=0;for(var x=g.children(),G=x.length;h<G;h++)if(""===x[h].value){B=w=x.eq(h);break}q.init(l,w,v);t&&(l.$isEmpty=function(a){return!a||0===a.length});r?p(e,g,l):t?m(e,g,l):k(e,g,l,q)}}}}],Yd=["$interpolate",function(a){var c={addOption:B,removeOption:B};return{restrict:"E",priority:100,compile:function(d,e){if(z(e.value)){var f=a(d.text(),!0);f||e.$set("value",d.text())}return function(a,d,e){var k=
+d.parent(),m=k.data("$selectController")||k.parent().data("$selectController");m&&m.databound||(m=c);f?a.$watch(f,function(a,c){e.$set("value",a);c!==a&&m.removeOption(c);m.addOption(a,d)}):m.addOption(e.value,d);d.on("$destroy",function(){m.removeOption(e.value)})}}}}],Xd=da({restrict:"E",terminal:!1}),Ac=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){e&&(d.required=!0,e.$validators.required=function(a,c){return!d.required||!e.$isEmpty(c)},d.$observe("required",function(){e.$validate()}))}}},
+zc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f,g=d.ngPattern||d.pattern;d.$observe("pattern",function(a){x(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw M("ngPattern")("noregexp",g,a,ua(c));f=a||u;e.$validate()});e.$validators.pattern=function(a){return e.$isEmpty(a)||z(f)||f.test(a)}}}}},Cc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=-1;d.$observe("maxlength",function(a){a=$(a);f=isNaN(a)?-1:a;e.$validate()});
+e.$validators.maxlength=function(a,c){return 0>f||e.$isEmpty(c)||c.length<=f}}}}},Bc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("minlength",function(a){f=$(a)||0;e.$validate()});e.$validators.minlength=function(a,c){return e.$isEmpty(c)||c.length>=f}}}}};P.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(Nd(),Pd(aa),C(X).ready(function(){Jd(X,tc)}))})(window,document);!window.angular.$$csp()&&window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>');
+//# sourceMappingURL=angular.min.js.map \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angularjs-datetime-picker/angularjs-datetime-picker.css b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angularjs-datetime-picker/angularjs-datetime-picker.css
new file mode 100644
index 00000000..240be45b
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angularjs-datetime-picker/angularjs-datetime-picker.css
@@ -0,0 +1,74 @@
+.angularjs-datetime-picker {
+ color: #333;
+ font: normal 14px sans-serif;
+ border: 1px solid #ddd;
+ display: inline-block;
+ background: #fff;
+}
+.angularjs-datetime-picker > .adp-month {
+ text-align: center;
+ line-height: 22px;
+ padding: 10px;
+ background: #fcfcfc;
+ text-transform: uppercase;
+ font-weight: bold;
+ border-bottom: 1px solid #ddd;
+ position: relative;
+}
+.angularjs-datetime-picker > .adp-month > button {
+ color: #555;
+ font: normal 14px sans-serif;
+ outline: none;
+ position: absolute;
+ background: transparent;
+ border: none;
+ cursor: pointer;
+}
+.angularjs-datetime-picker > .adp-month > button:hover {
+ color: #333;
+}
+.angularjs-datetime-picker > .adp-month > button.adp-prev {
+ left: 10px;
+}
+.angularjs-datetime-picker > .adp-month > button.adp-next {
+ right: 10px;
+}
+.angularjs-datetime-picker > .adp-days {
+ width: 210px; /* 30 x 7 */
+ margin: 10px;
+ text-align: center;
+}
+.angularjs-datetime-picker > .adp-days > .adp-day-of-week, .angularjs-datetime-picker > .adp-days > .adp-day {
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ border: 1px solid transparent;
+ width: 30px;
+ line-height: 28px;
+ float: left;
+}
+.angularjs-datetime-picker > .adp-days > .adp-day-of-week {
+ font-weight: bold;
+}
+.angularjs-datetime-picker > .adp-days > .adp-day:not(.selectable) {
+ opacity: 0.15;
+ cursor: default;
+}
+.angularjs-datetime-picker > .adp-days > .adp-day.selectable {
+ cursor: pointer;
+}
+.angularjs-datetime-picker > .adp-days > .adp-day.selected {
+ background: #e0e0e0;
+}
+.angularjs-datetime-picker > .adp-days > .adp-day.selectable:hover {
+ background: #eee;
+}
+.angularjs-datetime-picker > .adp-days:after {
+ content: '';
+ display: block;
+ clear: left;
+ height: 0;
+}
+
+.angularjs-datetime-picker input[type=range] {
+ width: 150px;
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angularjs-datetime-picker/angularjs-datetime-picker.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angularjs-datetime-picker/angularjs-datetime-picker.js
new file mode 100644
index 00000000..946f12e8
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angularjs-datetime-picker/angularjs-datetime-picker.js
@@ -0,0 +1,332 @@
+(function() {
+ 'use strict';
+
+ angular.module('angularjs-datetime-picker', []);
+
+ var getTimezoneOffset = function(date) {
+ (typeof date == 'string') && (date = new Date(date));
+ var jan = new Date(date.getFullYear(), 0, 1);
+ var jul = new Date(date.getFullYear(), 6, 1);
+ var stdTimezoneOffset = Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
+ var isDST = date.getTimezoneOffset() < stdTimezoneOffset;
+ var offset = isDST ? stdTimezoneOffset - 60 : stdTimezoneOffset;
+ var diff = offset >=0 ? '-' : '+';
+ return diff +
+ ("0"+ (offset / 60)).slice(-2) + ':' +
+ ("0"+ (offset % 60)).slice(-2);
+ };
+
+ var DatetimePicker = function($compile, $document, $controller){
+ var datetimePickerCtrl = $controller('DatetimePickerCtrl'); //directive controller
+ return {
+ open: function(options) {
+ datetimePickerCtrl.openDatetimePicker(options);
+ },
+ close: function() {
+ datetimePickerCtrl.closeDatetimePicker();
+ }
+ };
+ };
+ DatetimePicker.$inject = ['$compile', '$document', '$controller'];
+ angular.module('angularjs-datetime-picker').factory('DatetimePicker', DatetimePicker);
+
+ var DatetimePickerCtrl = function($compile, $document) {
+ var datetimePickerEl;
+ var _this = this;
+ var removeEl = function(el) {
+ el && el.remove();
+ $document[0].body.removeEventListener('click', _this.closeDatetimePicker);
+ };
+
+ this.openDatetimePicker = function(options) {
+ this.closeDatetimePicker();
+ var div = angular.element('<div datetime-picker-popup ng-cloak></div>');
+ options.dateFormat && div.attr('date-format', options.dateFormat);
+ options.ngModel && div.attr('ng-model', options.ngModel);
+ options.year && div.attr('year', parseInt(options.year));
+ options.month && div.attr('month', parseInt(options.month));
+ options.day && div.attr('day', parseInt(options.day));
+ options.hour && div.attr('hour', parseInt(options.hour));
+ options.minute && div.attr('minute', parseInt(options.minute));
+ if (options.dateOnly === '' || options.dateOnly === true) {
+ div.attr('date-only', 'true');
+ }
+ if (options.closeOnSelect === 'false') {
+ div.attr('close-on-select', 'false');
+ }
+
+ var triggerEl = options.triggerEl;
+ options.scope = options.scope || angular.element(triggerEl).scope();
+ datetimePickerEl = $compile(div)(options.scope)[0];
+ datetimePickerEl.triggerEl = options.triggerEl;
+
+ $document[0].body.appendChild(datetimePickerEl);
+
+ //show datetimePicker below triggerEl
+ var bcr = triggerEl.getBoundingClientRect();
+ datetimePickerEl.style.position='absolute';
+ datetimePickerEl.style.left= (bcr.left + window.scrollX) + 'px';
+
+ options.scope.$apply();
+
+ var datePickerElBcr = datetimePickerEl.getBoundingClientRect();
+
+ if (bcr.top < 300 || window.innerHeight - bcr.bottom > 300) {
+ datetimePickerEl.style.top = (bcr.bottom + window.scrollY) + 'px';
+ } else {
+ datetimePickerEl.style.top = (bcr.top - datePickerElBcr.height + window.scrollY) + 'px';
+ }
+
+ $document[0].body.addEventListener('click', this.closeDatetimePicker);
+ };
+
+ this.closeDatetimePicker = function(evt) {
+ var target = evt && evt.target;
+ var popupEl = $document[0].querySelector('div[datetime-picker-popup]');
+ if (evt && target) {
+ if (target.hasAttribute('datetime-picker')) { // element with datetimePicker behaviour
+ // do nothing
+ } else if (popupEl && popupEl.contains(target)) { // datetimePicker itself
+ // do nothing
+ } else {
+ removeEl(popupEl);
+ }
+ } else {
+ removeEl(popupEl);
+ }
+ }
+ };
+ DatetimePickerCtrl.$inject = ['$compile', '$document'];
+ angular.module('angularjs-datetime-picker').controller('DatetimePickerCtrl', DatetimePickerCtrl);
+
+ var tmpl = [
+ '<div class="angularjs-datetime-picker">' ,
+ ' <div class="adp-month">',
+ ' <button type="button" class="adp-prev" ng-click="addMonth(-1)">&laquo;</button>',
+ ' <span title="{{months[mv.month].fullName}}">{{months[mv.month].shortName}}</span> {{mv.year}}',
+ ' <button type="button" class="adp-next" ng-click="addMonth(1)">&raquo;</button>',
+ ' </div>',
+ ' <div class="adp-days" ng-click="setDate($event)">',
+ ' <div class="adp-day-of-week" ng-repeat="dayOfWeek in ::daysOfWeek" title="{{dayOfWeek.fullName}}">{{::dayOfWeek.firstLetter}}</div>',
+ ' <div class="adp-day" ng-repeat="day in mv.leadingDays">{{::day}}</div>',
+ ' <div class="adp-day selectable" ng-repeat="day in mv.days" ',
+ ' ng-class="{selected: (day == selectedDay)}">{{::day}}</div>',
+ ' <div class="adp-day" ng-repeat="day in mv.trailingDays">{{::day}}</div>',
+ ' </div>',
+ ' <div class="adp-days" id="adp-time"> ',
+ ' Time : {{("0"+inputHour).slice(-2)}} : {{("0"+inputMinute).slice(-2)}} <br/>',
+ ' <label>Hour:</label> <input type="range" min="0" max="23" ng-model="inputHour" ng-change="updateNgModel()" />',
+ ' <label>Min.:</label> <input type="range" min="0" max="59" ng-model="inputMinute" ng-change="updateNgModel()"/> ',
+ ' </div> ',
+ '</div>'].join("\n");
+
+ var datetimePickerPopup = function($locale, dateFilter){
+ var days, months, daysOfWeek, firstDayOfWeek;
+
+ var initVars = function() {
+ days =[], months=[]; daysOfWeek=[], firstDayOfWeek=0;
+ for (var i = 1; i <= 31; i++) {
+ days.push(i);
+ }
+
+ for (var i = 0; i < 12; i++) { //jshint ignore:line
+ months.push({
+ fullName: $locale.DATETIME_FORMATS.MONTH[i],
+ shortName: $locale.DATETIME_FORMATS.SHORTMONTH[i]
+ });
+ }
+
+ for (var i = 0; i < 7; i++) { //jshint ignore:line
+ var day = $locale.DATETIME_FORMATS.DAY[(i + firstDayOfWeek) % 7];
+
+ daysOfWeek.push({
+ fullName: day,
+ firstLetter: day.substr(0, 2)
+ });
+ }
+ firstDayOfWeek = $locale.DATETIME_FORMATS.FIRSTDAYOFWEEK || 0;
+ };
+
+ var getMonthView = function(year, month) {
+ if (month>11) {
+ year++;
+ } else if (month < 0) {
+ year--;
+ }
+ month = (month + 12) % 12;
+ var firstDayOfMonth = new Date(year, month, 1),
+ lastDayOfMonth = new Date(year, month + 1, 0),
+ lastDayOfPreviousMonth = new Date(year, month, 0),
+ daysInMonth = lastDayOfMonth.getDate(),
+ daysInLastMonth = lastDayOfPreviousMonth.getDate(),
+ dayOfWeek = firstDayOfMonth.getDay(),
+ leadingDays = (dayOfWeek - firstDayOfWeek + 7) % 7 || 7, // Ensure there are always leading days to give context
+ trailingDays = days.slice(0, 6 * 7 - (leadingDays + daysInMonth));
+ if (trailingDays.length > 7) {
+ trailingDays = trailingDays.slice(0, trailingDays.length-7);
+ }
+
+ return {
+ year: year,
+ month: month,
+ days: days.slice(0, daysInMonth),
+ leadingDays: days.slice(- leadingDays - (31 - daysInLastMonth), daysInLastMonth),
+ trailingDays: trailingDays
+ };
+ };
+
+ var linkFunc = function(scope, element, attrs, ctrl) { //jshint ignore:line
+ initVars(); //initialize days, months, daysOfWeek, and firstDayOfWeek;
+ var dateFormat = attrs.dateFormat || 'short';
+ scope.months = months;
+ scope.daysOfWeek = daysOfWeek;
+ scope.inputHour;
+ scope.inputMinute;
+
+ if (scope.dateOnly === true){
+ element[0].querySelector('#adp-time').style.display = 'none';
+ }
+
+ scope.$applyAsync( function() {
+ ctrl.triggerEl = angular.element(element[0].triggerEl);
+ if (attrs.ngModel) { // need to parse date string
+ var dateStr = ''+ctrl.triggerEl.scope().$eval(attrs.ngModel);
+ if (dateStr) {
+ if (!dateStr.match(/[0-9]{2}:/)) { // if no time is given, add 00:00:00 at the end
+ dateStr += " 00:00:00";
+ }
+ dateStr = dateStr.replace(/([0-9]{2}-[0-9]{2})-([0-9]{4})/,'$2-$1'); //mm-dd-yyyy to yyyy-mm-dd
+ dateStr = dateStr.replace(/([\/-][0-9]{2,4})\ ([0-9]{2}\:[0-9]{2}\:)/,'$1T$2'); //reformat for FF
+ dateStr = dateStr.replace(/EDT|EST|CDT|CST|MDT|PDT|PST|UT|GMT/g,''); //remove timezone
+ dateStr = dateStr.replace(/\s*\(\)\s*/,''); //remove timezone
+ dateStr = dateStr.replace(/[\-\+][0-9]{2}:?[0-9]{2}$/,''); //remove timezone
+ dateStr += getTimezoneOffset(dateStr);
+ var d = new Date(dateStr);
+ scope.selectedDate = new Date(
+ d.getFullYear(),
+ d.getMonth(),
+ d.getDate(),
+ d.getHours(),
+ d.getMinutes(),
+ d.getSeconds()
+ );
+ }
+ }
+
+ if (!scope.selectedDate || isNaN(scope.selectedDate.getTime())) { // no predefined date
+ var today = new Date();
+ var year = scope.year || today.getFullYear();
+ var month = scope.month ? (scope.month-1) : today.getMonth();
+ var day = scope.day || today.getDate();
+ var hour = scope.hour || today.getHours();
+ var minute = scope.minute || today.getMinutes();
+ scope.selectedDate = new Date(year, month, day, hour, minute, 0);
+ }
+ scope.inputHour = scope.selectedDate.getHours();
+ scope.inputMinute = scope.selectedDate.getMinutes();
+
+ // Default to current year and month
+ scope.mv = getMonthView(scope.selectedDate.getFullYear(), scope.selectedDate.getMonth());
+ if (scope.mv.year == scope.selectedDate.getFullYear() && scope.mv.month == scope.selectedDate.getMonth()) {
+ scope.selectedDay = scope.selectedDate.getDate();
+ } else {
+ scope.selectedDay = null;
+ }
+ });
+
+ scope.addMonth = function (amount) {
+ scope.mv = getMonthView(scope.mv.year, scope.mv.month + amount);
+ };
+
+ scope.setDate = function (evt) {
+ var target = angular.element(evt.target)[0];
+ if (target.className.indexOf('selectable')) {
+ scope.updateNgModel(parseInt(target.innerHTML));
+ if (scope.closeOnSelect !== false) {
+ ctrl.closeDatetimePicker();
+ }
+ }
+ };
+
+ scope.updateNgModel = function(day) {
+ day = day ? day : scope.selectedDate.getDate();
+ scope.selectedDate = new Date(
+ scope.mv.year, scope.mv.month, day, scope.inputHour, scope.inputMinute, 0
+ );
+ scope.selectedDay = scope.selectedDate.getDate();
+ if (attrs.ngModel) {
+ //console.log('attrs.ngModel',attrs.ngModel);
+ var elScope = ctrl.triggerEl.scope(), dateValue;
+ if (elScope.$eval(attrs.ngModel) && elScope.$eval(attrs.ngModel).constructor.name === 'Date') {
+ dateValue = new Date(dateFilter(scope.selectedDate, dateFormat));
+ } else {
+ dateValue = dateFilter(scope.selectedDate, dateFormat);
+ }
+ elScope.$eval(attrs.ngModel + '= date', {date: dateValue});
+ }
+ };
+
+ scope.$on('$destroy', ctrl.closeDatetimePicker);
+ };
+
+ return {
+ restrict: 'A',
+ template: tmpl,
+ controller: 'DatetimePickerCtrl',
+ replace: true,
+ scope: {
+ year: '=',
+ month: '=',
+ day: '=',
+ hour: '=',
+ minute: '=',
+ dateOnly: '=',
+ closeOnSelect: '='
+ },
+ link: linkFunc
+ };
+ };
+ datetimePickerPopup.$inject = ['$locale', 'dateFilter'];
+ angular.module('angularjs-datetime-picker').directive('datetimePickerPopup', datetimePickerPopup);
+
+ var datetimePicker = function($parse, DatetimePicker) {
+ return {
+ // An ngModel is required to get the controller argument
+ require: 'ngModel',
+ link: function(scope, element, attrs, ctrl) {
+ // Attach validation watcher
+ scope.$watch(attrs.ngModel, function(value) {
+ if( !value || value == '' ){
+ return;
+ }
+ // The value has already been cleaned by the above code
+ var date = new Date(value);
+ ctrl.$setValidity('date', !date? false : true);
+ var now = new Date();
+ if( attrs.hasOwnProperty('futureOnly') ){
+ ctrl.$setValidity('future-only', date < now? false : true);
+ }
+ });
+
+ element[0].addEventListener('click', function() {
+ DatetimePicker.open({
+ triggerEl: element[0],
+ dateFormat: attrs.dateFormat,
+ ngModel: attrs.ngModel,
+ year: attrs.year,
+ month: attrs.month,
+ day: attrs.day,
+ hour: attrs.hour,
+ minute: attrs.minute,
+ dateOnly: attrs.dateOnly,
+ futureOnly: attrs.futureOnly,
+ closeOnSelect: attrs.closeOnSelect
+ });
+ });
+ }
+ };
+ };
+ datetimePicker.$inject=['$parse', 'DatetimePicker'];
+ angular.module('angularjs-datetime-picker').directive('datetimePicker', datetimePicker);
+
+})();
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angularjs-datetime-picker/angularjs-datetime-picker.min.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angularjs-datetime-picker/angularjs-datetime-picker.min.js
new file mode 100644
index 00000000..bc6c19ac
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/angularjs-datetime-picker/angularjs-datetime-picker.min.js
@@ -0,0 +1 @@
+!function(){"use strict";angular.module("angularjs-datetime-picker",[]);var e=function(e){"string"==typeof e&&(e=new Date(e));var t=new Date(e.getFullYear(),0,1),a=new Date(e.getFullYear(),6,1),n=Math.max(t.getTimezoneOffset(),a.getTimezoneOffset()),l=e.getTimezoneOffset()<n,r=l?n-60:n,i=r>=0?"-":"+";return i+("0"+r/60).slice(-2)+":"+("0"+r%60).slice(-2)},t=function(e,t,a){var n=a("DatetimePickerCtrl");return{open:function(e){n.openDatetimePicker(e)},close:function(){n.closeDatetimePicker()}}};t.$inject=["$compile","$document","$controller"],angular.module("angularjs-datetime-picker").factory("DatetimePicker",t);var a=function(e,t){var a,n=this,l=function(e){e&&e.remove(),t[0].body.removeEventListener("click",n.closeDatetimePicker)};this.openDatetimePicker=function(n){this.closeDatetimePicker();var l=angular.element("<div datetime-picker-popup ng-cloak></div>");n.dateFormat&&l.attr("date-format",n.dateFormat),n.ngModel&&l.attr("ng-model",n.ngModel),n.year&&l.attr("year",parseInt(n.year)),n.month&&l.attr("month",parseInt(n.month)),n.day&&l.attr("day",parseInt(n.day)),n.hour&&l.attr("hour",parseInt(n.hour)),n.minute&&l.attr("minute",parseInt(n.minute)),(""===n.dateOnly||n.dateOnly===!0)&&l.attr("date-only","true"),"false"===n.closeOnSelect&&l.attr("close-on-select","false");var r=n.triggerEl;n.scope=n.scope||angular.element(r).scope(),a=e(l)(n.scope)[0],a.triggerEl=n.triggerEl,t[0].body.appendChild(a);var i=r.getBoundingClientRect();a.style.position="absolute",a.style.left=i.left+window.scrollX+"px",n.scope.$apply();var o=a.getBoundingClientRect();a.style.top=i.top<300||window.innerHeight-i.bottom>300?i.bottom+window.scrollY+"px":i.top-o.height+window.scrollY+"px",t[0].body.addEventListener("click",this.closeDatetimePicker)},this.closeDatetimePicker=function(e){var a=e&&e.target,n=t[0].querySelector("div[datetime-picker-popup]");e&&a?a.hasAttribute("datetime-picker")||n&&n.contains(a)||l(n):l(n)}};a.$inject=["$compile","$document"],angular.module("angularjs-datetime-picker").controller("DatetimePickerCtrl",a);var n=['<div class="angularjs-datetime-picker">',' <div class="adp-month">',' <button type="button" class="adp-prev" ng-click="addMonth(-1)">&laquo;</button>',' <span title="{{months[mv.month].fullName}}">{{months[mv.month].shortName}}</span> {{mv.year}}',' <button type="button" class="adp-next" ng-click="addMonth(1)">&raquo;</button>'," </div>",' <div class="adp-days" ng-click="setDate($event)">',' <div class="adp-day-of-week" ng-repeat="dayOfWeek in ::daysOfWeek" title="{{dayOfWeek.fullName}}">{{::dayOfWeek.firstLetter}}</div>',' <div class="adp-day" ng-repeat="day in mv.leadingDays">{{::day}}</div>',' <div class="adp-day selectable" ng-repeat="day in mv.days" ',' ng-class="{selected: (day == selectedDay)}">{{::day}}</div>',' <div class="adp-day" ng-repeat="day in mv.trailingDays">{{::day}}</div>'," </div>",' <div class="adp-days" id="adp-time"> ',' Time : {{("0"+inputHour).slice(-2)}} : {{("0"+inputMinute).slice(-2)}} <br/>',' <label>Hour:</label> <input type="range" min="0" max="23" ng-model="inputHour" ng-change="updateNgModel()" />',' <label>Min.:</label> <input type="range" min="0" max="59" ng-model="inputMinute" ng-change="updateNgModel()"/> '," </div> ","</div>"].join("\n"),l=function(t,a){var l,r,i,o,c=function(){l=[],r=[],i=[],o=0;for(var e=1;31>=e;e++)l.push(e);for(var e=0;12>e;e++)r.push({fullName:t.DATETIME_FORMATS.MONTH[e],shortName:t.DATETIME_FORMATS.SHORTMONTH[e]});for(var e=0;7>e;e++){var a=t.DATETIME_FORMATS.DAY[(e+o)%7];i.push({fullName:a,firstLetter:a.substr(0,2)})}o=t.DATETIME_FORMATS.FIRSTDAYOFWEEK||0},d=function(e,t){t>11?e++:0>t&&e--,t=(t+12)%12;var a=new Date(e,t,1),n=new Date(e,t+1,0),r=new Date(e,t,0),i=n.getDate(),c=r.getDate(),d=a.getDay(),s=(d-o+7)%7||7,u=l.slice(0,42-(s+i));return u.length>7&&(u=u.slice(0,u.length-7)),{year:e,month:t,days:l.slice(0,i),leadingDays:l.slice(-s-(31-c),c),trailingDays:u}},s=function(t,n,l,o){c();var s=l.dateFormat||"short";t.months=r,t.daysOfWeek=i,t.inputHour,t.inputMinute,t.dateOnly===!0&&(n[0].querySelector("#adp-time").style.display="none"),t.$applyAsync(function(){if(o.triggerEl=angular.element(n[0].triggerEl),l.ngModel){var a=""+o.triggerEl.scope().$eval(l.ngModel);if(a){a.match(/[0-9]{2}:/)||(a+=" 00:00:00"),a=a.replace(/([0-9]{2}-[0-9]{2})-([0-9]{4})/,"$2-$1"),a=a.replace(/([\/-][0-9]{2,4})\ ([0-9]{2}\:[0-9]{2}\:)/,"$1T$2"),a=a.replace(/EDT|EST|CDT|CST|MDT|PDT|PST|UT|GMT/g,""),a=a.replace(/\s*\(\)\s*/,""),a=a.replace(/[\-\+][0-9]{2}:?[0-9]{2}$/,""),a+=e(a);var r=new Date(a);t.selectedDate=new Date(r.getFullYear(),r.getMonth(),r.getDate(),r.getHours(),r.getMinutes(),r.getSeconds())}}if(!t.selectedDate||isNaN(t.selectedDate.getTime())){var i=new Date,c=t.year||i.getFullYear(),s=t.month?t.month-1:i.getMonth(),u=t.day||i.getDate(),m=t.hour||i.getHours(),g=t.minute||i.getMinutes();t.selectedDate=new Date(c,s,u,m,g,0)}t.inputHour=t.selectedDate.getHours(),t.inputMinute=t.selectedDate.getMinutes(),t.mv=d(t.selectedDate.getFullYear(),t.selectedDate.getMonth()),t.selectedDay=t.mv.year==t.selectedDate.getFullYear()&&t.mv.month==t.selectedDate.getMonth()?t.selectedDate.getDate():null}),t.addMonth=function(e){t.mv=d(t.mv.year,t.mv.month+e)},t.setDate=function(e){var a=angular.element(e.target)[0];a.className.indexOf("selectable")&&(t.updateNgModel(parseInt(a.innerHTML)),t.closeOnSelect!==!1&&o.closeDatetimePicker())},t.updateNgModel=function(e){if(e=e?e:t.selectedDate.getDate(),t.selectedDate=new Date(t.mv.year,t.mv.month,e,t.inputHour,t.inputMinute,0),t.selectedDay=t.selectedDate.getDate(),l.ngModel){var n,r=o.triggerEl.scope();n=r.$eval(l.ngModel)&&"Date"===r.$eval(l.ngModel).constructor.name?new Date(a(t.selectedDate,s)):a(t.selectedDate,s),r.$eval(l.ngModel+"= date",{date:n})}},t.$on("$destroy",o.closeDatetimePicker)};return{restrict:"A",template:n,controller:"DatetimePickerCtrl",replace:!0,scope:{year:"=",month:"=",day:"=",hour:"=",minute:"=",dateOnly:"=",closeOnSelect:"="},link:s}};l.$inject=["$locale","dateFilter"],angular.module("angularjs-datetime-picker").directive("datetimePickerPopup",l);var r=function(e,t){return{require:"ngModel",link:function(e,a,n,l){e.$watch(n.ngModel,function(e){if(e&&""!=e){var t=new Date(e);l.$setValidity("date",t?!0:!1);var a=new Date;n.hasOwnProperty("futureOnly")&&l.$setValidity("future-only",a>t?!1:!0)}}),a[0].addEventListener("click",function(){t.open({triggerEl:a[0],dateFormat:n.dateFormat,ngModel:n.ngModel,year:n.year,month:n.month,day:n.day,hour:n.hour,minute:n.minute,dateOnly:n.dateOnly,futureOnly:n.futureOnly,closeOnSelect:n.closeOnSelect})})}}};r.$inject=["$parse","DatetimePicker"],angular.module("angularjs-datetime-picker").directive("datetimePicker",r)}(); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/bootstrap-3.3.7/package.json b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/bootstrap-3.3.7/package.json
new file mode 100644
index 00000000..fe4b31de
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/bootstrap-3.3.7/package.json
@@ -0,0 +1,89 @@
+{
+ "name": "bootstrap",
+ "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
+ "version": "3.3.7",
+ "keywords": [
+ "css",
+ "less",
+ "mobile-first",
+ "responsive",
+ "front-end",
+ "framework",
+ "web"
+ ],
+ "homepage": "http://getbootstrap.com",
+ "author": "Twitter, Inc.",
+ "scripts": {
+ "change-version": "node grunt/change-version.js",
+ "update-shrinkwrap": "npm shrinkwrap --dev && shx mv ./npm-shrinkwrap.json ./grunt/npm-shrinkwrap.json",
+ "test": "grunt test"
+ },
+ "style": "dist/css/bootstrap.css",
+ "less": "less/bootstrap.less",
+ "main": "./dist/js/npm",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/twbs/bootstrap.git"
+ },
+ "bugs": {
+ "url": "https://github.com/twbs/bootstrap/issues"
+ },
+ "license": "MIT",
+ "devDependencies": {
+ "btoa": "~1.1.2",
+ "glob": "~7.0.3",
+ "grunt": "~1.0.1",
+ "grunt-autoprefixer": "~3.0.4",
+ "grunt-contrib-clean": "~1.0.0",
+ "grunt-contrib-compress": "~1.3.0",
+ "grunt-contrib-concat": "~1.0.0",
+ "grunt-contrib-connect": "~1.0.0",
+ "grunt-contrib-copy": "~1.0.0",
+ "grunt-contrib-csslint": "~1.0.0",
+ "grunt-contrib-cssmin": "~1.0.0",
+ "grunt-contrib-htmlmin": "~1.5.0",
+ "grunt-contrib-jshint": "~1.0.0",
+ "grunt-contrib-less": "~1.3.0",
+ "grunt-contrib-pug": "~1.0.0",
+ "grunt-contrib-qunit": "~0.7.0",
+ "grunt-contrib-uglify": "~1.0.0",
+ "grunt-contrib-watch": "~1.0.0",
+ "grunt-csscomb": "~3.1.0",
+ "grunt-exec": "~1.0.0",
+ "grunt-html": "~8.0.1",
+ "grunt-jekyll": "~0.4.4",
+ "grunt-jscs": "~3.0.1",
+ "grunt-saucelabs": "~9.0.0",
+ "load-grunt-tasks": "~3.5.0",
+ "markdown-it": "^7.0.0",
+ "shelljs": "^0.7.0",
+ "shx": "^0.1.2",
+ "time-grunt": "^1.3.0"
+ },
+ "engines": {
+ "node": ">=0.10.1"
+ },
+ "files": [
+ "dist",
+ "fonts",
+ "grunt",
+ "js/*.js",
+ "less/**/*.less",
+ "Gruntfile.js",
+ "LICENSE"
+ ],
+ "jspm": {
+ "main": "js/bootstrap",
+ "shim": {
+ "js/bootstrap": {
+ "deps": "jquery",
+ "exports": "$"
+ }
+ },
+ "files": [
+ "css",
+ "fonts",
+ "js"
+ ]
+ }
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/jquery.min.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/jquery.min.js
new file mode 100644
index 00000000..4d9b3a25
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/jquery.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";var n=[],r=e.document,i=Object.getPrototypeOf,o=n.slice,a=n.concat,s=n.push,u=n.indexOf,l={},c=l.toString,f=l.hasOwnProperty,p=f.toString,d=p.call(Object),h={},g=function e(t){return"function"==typeof t&&"number"!=typeof t.nodeType},y=function e(t){return null!=t&&t===t.window},v={type:!0,src:!0,noModule:!0};function m(e,t,n){var i,o=(t=t||r).createElement("script");if(o.text=e,n)for(i in v)n[i]&&(o[i]=n[i]);t.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[c.call(e)]||"object":typeof e}var b="3.3.1",w=function(e,t){return new w.fn.init(e,t)},T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;w.fn=w.prototype={jquery:"3.3.1",constructor:w,length:0,toArray:function(){return o.call(this)},get:function(e){return null==e?o.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(o.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:n.sort,splice:n.splice},w.extend=w.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||g(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],a!==(r=e[t])&&(l&&r&&(w.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&w.isPlainObject(n)?n:{},a[t]=w.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},w.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==c.call(e))&&(!(t=i(e))||"function"==typeof(n=f.call(t,"constructor")&&t.constructor)&&p.call(n)===d)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){m(e)},each:function(e,t){var n,r=0;if(C(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(C(Object(e))?w.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:u.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r,i=[],o=0,a=e.length,s=!n;o<a;o++)(r=!t(e[o],o))!==s&&i.push(e[o]);return i},map:function(e,t,n){var r,i,o=0,s=[];if(C(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&s.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&s.push(i);return a.apply([],s)},guid:1,support:h}),"function"==typeof Symbol&&(w.fn[Symbol.iterator]=n[Symbol.iterator]),w.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function C(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!g(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}var E=function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,y,v,m,x,b="sizzle"+1*new Date,w=e.document,T=0,C=0,E=ae(),k=ae(),S=ae(),D=function(e,t){return e===t&&(f=!0),0},N={}.hasOwnProperty,A=[],j=A.pop,q=A.push,L=A.push,H=A.slice,O=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",I="\\["+M+"*("+R+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+R+"))|)"+M+"*\\]",W=":("+R+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+I+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),F=new RegExp("^"+M+"*,"+M+"*"),_=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),z=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),X=new RegExp(W),U=new RegExp("^"+R+"$"),V={ID:new RegExp("^#("+R+")"),CLASS:new RegExp("^\\.("+R+")"),TAG:new RegExp("^("+R+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},G=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/[+~]/,Z=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ee=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},te=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ne=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},re=function(){p()},ie=me(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{L.apply(A=H.call(w.childNodes),w.childNodes),A[w.childNodes.length].nodeType}catch(e){L={apply:A.length?function(e,t){q.apply(e,H.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function oe(e,t,r,i){var o,s,l,c,f,h,v,m=t&&t.ownerDocument,T=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==T&&9!==T&&11!==T)return r;if(!i&&((t?t.ownerDocument||t:w)!==d&&p(t),t=t||d,g)){if(11!==T&&(f=J.exec(e)))if(o=f[1]){if(9===T){if(!(l=t.getElementById(o)))return r;if(l.id===o)return r.push(l),r}else if(m&&(l=m.getElementById(o))&&x(t,l)&&l.id===o)return r.push(l),r}else{if(f[2])return L.apply(r,t.getElementsByTagName(e)),r;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))){if(1!==T)m=t,v=e;else if("object"!==t.nodeName.toLowerCase()){(c=t.getAttribute("id"))?c=c.replace(te,ne):t.setAttribute("id",c=b),s=(h=a(e)).length;while(s--)h[s]="#"+c+" "+ve(h[s]);v=h.join(","),m=K.test(e)&&ge(t.parentNode)||t}if(v)try{return L.apply(r,m.querySelectorAll(v)),r}catch(e){}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(B,"$1"),t,r,i)}function ae(){var e=[];function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}return t}function se(e){return e[b]=!0,e}function ue(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function le(e,t){var n=e.split("|"),i=n.length;while(i--)r.attrHandle[n[i]]=t}function ce(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function fe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function de(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ie(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function he(e){return se(function(t){return t=+t,se(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function ge(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}n=oe.support={},o=oe.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},p=oe.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!==d&&9===a.nodeType&&a.documentElement?(d=a,h=d.documentElement,g=!o(d),w!==d&&(i=d.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",re,!1):i.attachEvent&&i.attachEvent("onunload",re)),n.attributes=ue(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ue(function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(d.getElementsByClassName),n.getById=ue(function(e){return h.appendChild(e).id=b,!d.getElementsByName||!d.getElementsByName(b).length}),n.getById?(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(Z,ee);return function(e){var n="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&g){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],y=[],(n.qsa=Q.test(d.querySelectorAll))&&(ue(function(e){h.appendChild(e).innerHTML="<a id='"+b+"'></a><select id='"+b+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||y.push("~="),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||y.push(".#.+[+~]")}),ue(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(n.matchesSelector=Q.test(m=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue(function(e){n.disconnectedMatch=m.call(e,"*"),m.call(e,"[s!='']:x"),v.push("!=",W)}),y=y.length&&new RegExp(y.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),x=t||Q.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===d||e.ownerDocument===w&&x(w,e)?-1:t===d||t.ownerDocument===w&&x(w,t)?1:c?O(c,e)-O(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===d?-1:t===d?1:i?-1:o?1:c?O(c,e)-O(c,t):0;if(i===o)return ce(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?ce(a[r],s[r]):a[r]===w?-1:s[r]===w?1:0},d):d},oe.matches=function(e,t){return oe(e,null,null,t)},oe.matchesSelector=function(e,t){if((e.ownerDocument||e)!==d&&p(e),t=t.replace(z,"='$1']"),n.matchesSelector&&g&&!S[t+" "]&&(!v||!v.test(t))&&(!y||!y.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return oe(t,d,null,[e]).length>0},oe.contains=function(e,t){return(e.ownerDocument||e)!==d&&p(e),x(e,t)},oe.attr=function(e,t){(e.ownerDocument||e)!==d&&p(e);var i=r.attrHandle[t.toLowerCase()],o=i&&N.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},oe.escape=function(e){return(e+"").replace(te,ne)},oe.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},oe.uniqueSort=function(e){var t,r=[],i=0,o=0;if(f=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(D),f){while(t=e[o++])t===e[o]&&(i=r.push(o));while(i--)e.splice(r[i],1)}return c=null,e},i=oe.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else while(t=e[r++])n+=i(t);return n},(r=oe.selectors={cacheLength:50,createPseudo:se,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(Z,ee),e[3]=(e[3]||e[4]||e[5]||"").replace(Z,ee),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||oe.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&oe.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(Z,ee).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&E(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=oe.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace($," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",y=t.parentNode,v=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(y){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===v:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&m){x=(d=(l=(c=(f=(p=y)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1])&&l[2],p=d&&y.childNodes[d];while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if(1===p.nodeType&&++x&&p===t){c[e]=[T,d,x];break}}else if(m&&(x=d=(l=(c=(f=(p=t)[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]||[])[0]===T&&l[1]),!1===x)while(p=++d&&p&&p[g]||(x=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===v:1===p.nodeType)&&++x&&(m&&((c=(f=p[b]||(p[b]={}))[p.uniqueID]||(f[p.uniqueID]={}))[e]=[T,x]),p===t))break;return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||oe.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?se(function(e,n){var r,o=i(e,t),a=o.length;while(a--)e[r=O(e,o[a])]=!(n[r]=o[a])}):function(e){return i(e,0,n)}):i}},pseudos:{not:se(function(e){var t=[],n=[],r=s(e.replace(B,"$1"));return r[b]?se(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}}),has:se(function(e){return function(t){return oe(e,t).length>0}}),contains:se(function(e){return e=e.replace(Z,ee),function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:se(function(e){return U.test(e||"")||oe.error("unsupported lang: "+e),e=e.replace(Z,ee).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:de(!1),disabled:de(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Y.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:he(function(){return[0]}),last:he(function(e,t){return[t-1]}),eq:he(function(e,t,n){return[n<0?n+t:n]}),even:he(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:he(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:he(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:he(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=r.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=fe(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=pe(t);function ye(){}ye.prototype=r.filters=r.pseudos,r.setFilters=new ye,a=oe.tokenize=function(e,t){var n,i,o,a,s,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=r.preFilter;while(s){n&&!(i=F.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),n=!1,(i=_.exec(s))&&(n=i.shift(),o.push({value:n,type:i[0].replace(B," ")}),s=s.slice(n.length));for(a in r.filter)!(i=V[a].exec(s))||l[a]&&!(i=l[a](i))||(n=i.shift(),o.push({value:n,type:a,matches:i}),s=s.slice(n.length));if(!n)break}return t?s.length:s?oe.error(e):k(e,u).slice(0)};function ve(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function me(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&"parentNode"===o,s=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[T,s];if(u){while(t=t[r])if((1===t.nodeType||a)&&e(t,n,u))return!0}else while(t=t[r])if(1===t.nodeType||a)if(f=t[b]||(t[b]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===T&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function be(e,t,n){for(var r=0,i=t.length;r<i;r++)oe(e,t[r],n);return n}function we(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Te(e,t,n,r,i,o){return r&&!r[b]&&(r=Te(r)),i&&!i[b]&&(i=Te(i,o)),se(function(o,a,s,u){var l,c,f,p=[],d=[],h=a.length,g=o||be(t||"*",s.nodeType?[s]:s,[]),y=!e||!o&&t?g:we(g,p,e,s,u),v=n?i||(o?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r){l=we(v,d),r(l,[],s,u),c=l.length;while(c--)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f))}if(o){if(i||e){if(i){l=[],c=v.length;while(c--)(f=v[c])&&l.push(y[c]=f);i(null,v=[],l,u)}c=v.length;while(c--)(f=v[c])&&(l=i?O(o,f):p[c])>-1&&(o[l]=!(a[l]=f))}}else v=we(v===a?v.splice(h,v.length):v),i?i(null,a,v,u):L.apply(a,v)})}function Ce(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],u=a?1:0,c=me(function(e){return e===t},s,!0),f=me(function(e){return O(t,e)>-1},s,!0),p=[function(e,n,r){var i=!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):f(e,n,r));return t=null,i}];u<o;u++)if(n=r.relative[e[u].type])p=[me(xe(p),n)];else{if((n=r.filter[e[u].type].apply(null,e[u].matches))[b]){for(i=++u;i<o;i++)if(r.relative[e[i].type])break;return Te(u>1&&xe(p),u>1&&ve(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(B,"$1"),n,u<i&&Ce(e.slice(u,i)),i<o&&Ce(e=e.slice(i)),i<o&&ve(e))}p.push(n)}return xe(p)}function Ee(e,t){var n=t.length>0,i=e.length>0,o=function(o,a,s,u,c){var f,h,y,v=0,m="0",x=o&&[],b=[],w=l,C=o||i&&r.find.TAG("*",c),E=T+=null==w?1:Math.random()||.1,k=C.length;for(c&&(l=a===d||a||c);m!==k&&null!=(f=C[m]);m++){if(i&&f){h=0,a||f.ownerDocument===d||(p(f),s=!g);while(y=e[h++])if(y(f,a||d,s)){u.push(f);break}c&&(T=E)}n&&((f=!y&&f)&&v--,o&&x.push(f))}if(v+=m,n&&m!==v){h=0;while(y=t[h++])y(x,b,a,s);if(o){if(v>0)while(m--)x[m]||b[m]||(b[m]=j.call(u));b=we(b)}L.apply(u,b),c&&!o&&b.length>0&&v+t.length>1&&oe.uniqueSort(u)}return c&&(T=E,l=w),x};return n?se(o):o}return s=oe.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=a(e)),n=t.length;while(n--)(o=Ce(t[n]))[b]?r.push(o):i.push(o);(o=S(e,Ee(i,r))).selector=e}return o},u=oe.select=function(e,t,n,i){var o,u,l,c,f,p="function"==typeof e&&e,d=!i&&a(e=p.selector||e);if(n=n||[],1===d.length){if((u=d[0]=d[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&g&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(Z,ee),t)||[])[0]))return n;p&&(t=t.parentNode),e=e.slice(u.shift().value.length)}o=V.needsContext.test(e)?0:u.length;while(o--){if(l=u[o],r.relative[c=l.type])break;if((f=r.find[c])&&(i=f(l.matches[0].replace(Z,ee),K.test(u[0].type)&&ge(t.parentNode)||t))){if(u.splice(o,1),!(e=i.length&&ve(u)))return L.apply(n,i),n;break}}}return(p||s(e,d))(i,t,!g,n,!t||K.test(e)&&ge(t.parentNode)||t),n},n.sortStable=b.split("").sort(D).join("")===b,n.detectDuplicates=!!f,p(),n.sortDetached=ue(function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))}),ue(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||le("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),n.attributes&&ue(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||le("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ue(function(e){return null==e.getAttribute("disabled")})||le(P,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),oe}(e);w.find=E,w.expr=E.selectors,w.expr[":"]=w.expr.pseudos,w.uniqueSort=w.unique=E.uniqueSort,w.text=E.getText,w.isXMLDoc=E.isXML,w.contains=E.contains,w.escapeSelector=E.escape;var k=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&w(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},D=w.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var A=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,t,n){return g(t)?w.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?w.grep(e,function(e){return e===t!==n}):"string"!=typeof t?w.grep(e,function(e){return u.call(t,e)>-1!==n}):w.filter(t,e,n)}w.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,function(e){return 1===e.nodeType}))},w.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(w(e).filter(function(){for(t=0;t<r;t++)if(w.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)w.find(e,i[t],n);return r>1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&D.test(e)?w(e):e||[],!1).length}});var q,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,o;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:r,!0)),A.test(i[1])&&w.isPlainObject(t))for(i in t)g(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(o=r.getElementById(i[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):g(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,q=w(r);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(w.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&w(e);if(!D.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(w(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return k(e,"parentNode")},parentsUntil:function(e,t,n){return k(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return k(e,"nextSibling")},prevAll:function(e){return k(e,"previousSibling")},nextUntil:function(e,t,n){return k(e,"nextSibling",n)},prevUntil:function(e,t,n){return k(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return N(e,"iframe")?e.contentDocument:(N(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},function(e,t){w.fn[e]=function(n,r){var i=w.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=w.filter(r,i)),this.length>1&&(O[e]||w.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}});var M=/[^\x20\t\r\n\f]+/g;function R(e){var t={};return w.each(e.match(M)||[],function(e,n){t[n]=!0}),t}w.Callbacks=function(e){e="string"==typeof e?R(e):w.extend({},e);var t,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;a.length;s=-1){n=a.shift();while(++s<o.length)!1===o[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=o.length,n=!1)}e.memory||(n=!1),t=!1,i&&(o=n?[]:"")},l={add:function(){return o&&(n&&!t&&(s=o.length-1,a.push(n)),function t(n){w.each(n,function(n,r){g(r)?e.unique&&l.has(r)||o.push(r):r&&r.length&&"string"!==x(r)&&t(r)})}(arguments),n&&!t&&u()),this},remove:function(){return w.each(arguments,function(e,t){var n;while((n=w.inArray(t,o,n))>-1)o.splice(n,1),n<=s&&s--}),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l};function I(e){return e}function W(e){throw e}function $(e,t,n,r){var i;try{e&&g(i=e.promise)?i.call(e).done(t).fail(n):e&&g(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},"catch":function(e){return i.then(null,e)},pipe:function(){var e=arguments;return w.Deferred(function(t){w.each(n,function(n,r){var i=g(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&g(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){var o=0;function a(t,n,r,i){return function(){var s=this,u=arguments,l=function(){var e,l;if(!(t<o)){if((e=r.apply(s,u))===n.promise())throw new TypeError("Thenable self-resolution");l=e&&("object"==typeof e||"function"==typeof e)&&e.then,g(l)?i?l.call(e,a(o,n,I,i),a(o,n,W,i)):(o++,l.call(e,a(o,n,I,i),a(o,n,W,i),a(o,n,I,n.notifyWith))):(r!==I&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},c=i?l:function(){try{l()}catch(e){w.Deferred.exceptionHook&&w.Deferred.exceptionHook(e,c.stackTrace),t+1>=o&&(r!==W&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook&&(c.stackTrace=w.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred(function(e){n[0][3].add(a(0,e,g(i)?i:I,e.notifyWith)),n[1][3].add(a(0,e,g(t)?t:I)),n[2][3].add(a(0,e,g(r)?r:W))}).promise()},promise:function(e){return null!=e?w.extend(e,i):i}},o={};return w.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=o.call(arguments),a=w.Deferred(),s=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?o.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&($(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||g(i[n]&&i[n].then)))return a.then();while(n--)$(i[n],s(n),a.reject);return a.promise()}});var B=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&B.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout(function(){throw t})};var F=w.Deferred();w.fn.ready=function(e){return F.then(e)["catch"](function(e){w.readyException(e)}),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||F.resolveWith(r,[w]))}}),w.ready.then=F.then;function _(){r.removeEventListener("DOMContentLoaded",_),e.removeEventListener("load",_),w.ready()}"complete"===r.readyState||"loading"!==r.readyState&&!r.documentElement.doScroll?e.setTimeout(w.ready):(r.addEventListener("DOMContentLoaded",_),e.addEventListener("load",_));var z=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n)){i=!0;for(s in n)z(e,t,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,g(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(w(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},X=/^-ms-/,U=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(X,"ms-").replace(U,V)}var Y=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=w.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Y(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[G(t)]=n;else for(r in t)i[G(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;while(n--)delete r[t[n]]}(void 0===t||w.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!w.isEmptyObject(t)}};var J=new Q,K=new Q,Z=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ee=/[A-Z]/g;function te(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Z.test(e)?JSON.parse(e):e)}function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(ee,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=te(n)}catch(e){}K.set(e,t,n)}else n=void 0;return n}w.extend({hasData:function(e){return K.hasData(e)||J.hasData(e)},data:function(e,t,n){return K.access(e,t,n)},removeData:function(e,t){K.remove(e,t)},_data:function(e,t,n){return J.access(e,t,n)},_removeData:function(e,t){J.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=K.get(o),1===o.nodeType&&!J.get(o,"hasDataAttrs"))){n=a.length;while(n--)a[n]&&0===(r=a[n].name).indexOf("data-")&&(r=G(r.slice(5)),ne(o,r,i[r]));J.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof e?this.each(function(){K.set(this,e)}):z(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=K.get(o,e)))return n;if(void 0!==(n=ne(o,e)))return n}else this.each(function(){K.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){K.remove(this,e)})}}),w.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=J.get(e,t),n&&(!r||Array.isArray(n)?r=J.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=w.queue(e,t),r=n.length,i=n.shift(),o=w._queueHooks(e,t),a=function(){w.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return J.get(e,n)||J.access(e,n,{empty:w.Callbacks("once memory").add(function(){J.remove(e,[t+"queue",n])})})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?w.queue(this[0],e):void 0===t?this:this.each(function(){var n=w.queue(this,e,t);w._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&w.dequeue(this,e)})},dequeue:function(e){return this.each(function(){w.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=w.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=J.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var re=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ie=new RegExp("^(?:([+-])=|)("+re+")([a-z%]*)$","i"),oe=["Top","Right","Bottom","Left"],ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&w.contains(e.ownerDocument,e)&&"none"===w.css(e,"display")},se=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i};function ue(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return w.css(e,t,"")},u=s(),l=n&&n[3]||(w.cssNumber[t]?"":"px"),c=(w.cssNumber[t]||"px"!==l&&+u)&&ie.exec(w.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)w.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,w.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var le={};function ce(e){var t,n=e.ownerDocument,r=e.nodeName,i=le[r];return i||(t=n.body.appendChild(n.createElement(r)),i=w.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),le[r]=i,i)}function fe(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)(r=e[o]).style&&(n=r.style.display,t?("none"===n&&(i[o]=J.get(r,"display")||null,i[o]||(r.style.display="")),""===r.style.display&&ae(r)&&(i[o]=ce(r))):"none"!==n&&(i[o]="none",J.set(r,"display",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}w.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?w(this).show():w(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?w.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)J.set(e[n],"globalEval",!t||J.get(t[n],"globalEval"))}var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))w.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+w.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;w.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&w.inArray(o,r)>-1)i&&i.push(o);else if(l=w.contains(o.ownerDocument,o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}!function(){var e=r.createDocumentFragment().appendChild(r.createElement("div")),t=r.createElement("input");t.setAttribute("type","radio"),t.setAttribute("checked","checked"),t.setAttribute("name","t"),e.appendChild(t),h.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML="<textarea>x</textarea>",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n<arguments.length;n++)u[n]=arguments[n];if(t.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,t)){s=w.event.handlers.call(this,t,l),n=0;while((o=s[n++])&&!t.isPropagationStopped()){t.currentTarget=o.elem,r=0;while((a=o.handlers[r++])&&!t.isImmediatePropagationStopped())t.rnamespace&&!t.rnamespace.test(a.namespace)||(t.handleObj=a,t.data=a.data,void 0!==(i=((w.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u))&&!1===(t.result=i)&&(t.preventDefault(),t.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?w(i,this).index(l)>-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:g(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==Se()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===Se()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&N(this,"input"))return this.click(),!1},_default:function(e){return N(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},w.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},w.Event=function(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:ke,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&w.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[w.expando]=!0},w.Event.prototype={constructor:w.Event,isDefaultPrevented:ke,isPropagationStopped:ke,isImmediatePropagationStopped:ke,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&we.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Te.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},w.event.addProp),w.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){w.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||w.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),w.fn.extend({on:function(e,t,n,r){return De(this,e,t,n,r)},one:function(e,t,n,r){return De(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=ke),this.each(function(){w.event.remove(this,e,n,t)})}});var Ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/<script|<style|<link/i,je=/checked\s*(?:[^=]|=\s*.checked.)/i,qe=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)w.event.add(t,i,l[i][n])}K.hasData(e)&&(s=K.access(e),u=w.extend({},s),K.set(t,u))}}function Me(e,t){var n=t.nodeName.toLowerCase();"input"===n&&pe.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function Re(e,t,n,r){t=a.apply([],t);var i,o,s,u,l,c,f=0,p=e.length,d=p-1,y=t[0],v=g(y);if(v||p>1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f<p;f++)l=i,f!==d&&(l=w.clone(l,!0,!0),u&&w.merge(s,ye(l,"script"))),n.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,w.map(s,Oe),f=0;f<u;f++)l=s[f],he.test(l.type||"")&&!J.access(l,"globalEval")&&w.contains(c,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?w._evalUrl&&w._evalUrl(l.src):m(l.textContent.replace(qe,""),c,l))}return e}function Ie(e,t,n){for(var r,i=t?w.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||w.cleanData(ye(r)),r.parentNode&&(n&&w.contains(r.ownerDocument,r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e.replace(Ne,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r<i;r++)Me(o[r],a[r]);if(t)if(n)for(o=o||ye(e),a=a||ye(s),r=0,i=o.length;r<i;r++)Pe(o[r],a[r]);else Pe(e,s);return(a=ye(s,"script")).length>0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(w.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return Re(this,arguments,function(t){var n=this.parentNode;w.inArray(this,e)<0&&(w.cleanData(ye(this)),n&&n.replaceChild(t,this))},e)}}),w.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){w.fn[e]=function(e){for(var n,r=[],i=w(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),w(i[a])[t](n),s.apply(r,n.get());return this.pushStack(r)}});var We=new RegExp("^("+re+")(?!px)[a-z%]+$","i"),$e=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},Be=new RegExp(oe.join("|"),"i");!function(){function t(){if(c){l.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",c.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",be.appendChild(l).appendChild(c);var t=e.getComputedStyle(c);i="1%"!==t.top,u=12===n(t.marginLeft),c.style.right="60%",s=36===n(t.right),o=36===n(t.width),c.style.position="absolute",a=36===c.offsetWidth||"absolute",be.removeChild(l),c=null}}function n(e){return Math.round(parseFloat(e))}var i,o,a,s,u,l=r.createElement("div"),c=r.createElement("div");c.style&&(c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",h.clearCloneStyle="content-box"===c.style.backgroundClip,w.extend(h,{boxSizingReliable:function(){return t(),o},pixelBoxStyles:function(){return t(),s},pixelPosition:function(){return t(),i},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),a}}))}();function Fe(e,t,n){var r,i,o,a,s=e.style;return(n=n||$e(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||w.contains(e.ownerDocument,e)||(a=w.style(e,t)),!h.pixelBoxStyles()&&We.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}var ze=/^(none|table(?!-c[ea]).+)/,Xe=/^--/,Ue={position:"absolute",visibility:"hidden",display:"block"},Ve={letterSpacing:"0",fontWeight:"400"},Ge=["Webkit","Moz","ms"],Ye=r.createElement("div").style;function Qe(e){if(e in Ye)return e;var t=e[0].toUpperCase()+e.slice(1),n=Ge.length;while(n--)if((e=Ge[n]+t)in Ye)return e}function Je(e){var t=w.cssProps[e];return t||(t=w.cssProps[e]=Qe(e)||e),t}function Ke(e,t,n){var r=ie.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ze(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=w.css(e,n+oe[a],!0,i)),r?("content"===n&&(u-=w.css(e,"padding"+oe[a],!0,i)),"margin"!==n&&(u-=w.css(e,"border"+oe[a]+"Width",!0,i))):(u+=w.css(e,"padding"+oe[a],!0,i),"padding"!==n?u+=w.css(e,"border"+oe[a]+"Width",!0,i):s+=w.css(e,"border"+oe[a]+"Width",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a<i;a++)o[t[a]]=w.css(e,t[a],!1,r);return o}return void 0!==n?w.style(e,t,n):w.css(e,t)},e,t,arguments.length>1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ct(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=J.get(e,"fxshow");n.queue||(null==(a=w._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,w.queue(e,"fx").length||a.empty.fire()})}));for(r in t)if(i=t[r],it.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||w.style(e,r)}if((u=!w.isEmptyObject(t))||!w.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=J.get(e,"display")),"none"===(c=w.css(e,"display"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=w.css(e,"display"),fe([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===w.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(y?"hidden"in y&&(g=y.hidden):y=J.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&fe([e],!0),p.done(function(){g||fe([e]),J.remove(e,"fxshow");for(r in d)w.style(e,r,d[r])})),u=lt(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}}function ft(e,t){var n,r,i,o,a;for(n in e)if(r=G(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=w.cssHooks[r])&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function pt(e,t,n){var r,i,o=0,a=pt.prefilters.length,s=w.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=nt||st(),n=Math.max(0,l.startTime+l.duration-t),r=1-(n/l.duration||0),o=0,a=l.tweens.length;o<a;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r<1&&a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:nt||st(),duration:n.duration,tweens:[],createTween:function(t,n){var r=w.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(ft(c,l.opts.specialEasing);o<a;o++)if(r=pt.prefilters[o].call(l,e,c,l.opts))return g(r.stop)&&(w._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return w.map(c,lt,l),g(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation=w.extend(pt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return ue(n.elem,e,ie.exec(t),n),n}]},tweener:function(e,t){g(e)?(t=e,e=["*"]):e=e.match(M);for(var n,r=0,i=e.length;r<i;r++)n=e[r],pt.tweeners[n]=pt.tweeners[n]||[],pt.tweeners[n].unshift(t)},prefilters:[ct],prefilter:function(e,t){t?pt.prefilters.unshift(e):pt.prefilters.push(e)}}),w.speed=function(e,t,n){var r=e&&"object"==typeof e?w.extend({},e):{complete:n||!n&&t||g(e)&&e,duration:e,easing:n&&t||t&&!g(t)&&t};return w.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in w.fx.speeds?r.duration=w.fx.speeds[r.duration]:r.duration=w.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){g(r.old)&&r.old.call(this),r.queue&&w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=w.isEmptyObject(e),o=w.speed(t,n,r),a=function(){var t=pt(this,w.extend({},e),o);(i||J.get(this,"finish"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=w.timers,a=J.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ot.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||w.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){var t,n=J.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=w.timers,a=r?r.length:0;for(n.finish=!0,w.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),w.each(["toggle","show","hide"],function(e,t){var n=w.fn[t];w.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ut(t,!0),e,r,i)}}),w.each({slideDown:ut("show"),slideUp:ut("hide"),slideToggle:ut("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){w.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),w.timers=[],w.fx.tick=function(){var e,t=0,n=w.timers;for(nt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||w.fx.stop(),nt=void 0},w.fx.timer=function(e){w.timers.push(e),w.fx.start()},w.fx.interval=13,w.fx.start=function(){rt||(rt=!0,at())},w.fx.stop=function(){rt=null},w.fx.speeds={slow:600,fast:200,_default:400},w.fn.delay=function(t,n){return t=w.fx?w.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=r.createElement("input"),t=r.createElement("select").appendChild(r.createElement("option"));e.type="checkbox",h.checkOn=""!==e.value,h.optSelected=t.selected,(e=r.createElement("input")).value="t",e.type="radio",h.radioValue="t"===e.value}();var dt,ht=w.expr.attrHandle;w.fn.extend({attr:function(e,t){return z(this,w.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!N(n.parentNode,"optgroup"))){if(t=w(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=w.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=w.inArray(w.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),r.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Yt=[],Qt=/(=)\?(?=&|$)|\?\?/;w.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Yt.pop()||w.expando+"_"+Et++;return this[e]=!0,e}}),w.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Qt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Qt.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=g(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Qt,"$1"+i):!1!==t.jsonp&&(t.url+=(kt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return a||w.error(i+" was not called"),a[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?w(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Yt.push(i)),a&&g(o)&&o(a[0]),a=o=void 0}),"script"}),h.createHTMLDocument=function(){var e=r.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),w.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var i,o,a;return t||(h.createHTMLDocument?((i=(t=r.implementation.createHTMLDocument("")).createElement("base")).href=r.location.href,t.head.appendChild(i)):t=r),o=A.exec(e),a=!n&&[],o?[t.createElement(o[1])]:(o=xe([e],t,a),a&&a.length&&w(a).remove(),w.merge([],o.childNodes))},w.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return s>-1&&(r=vt(e.slice(s)),e=e.slice(0,s)),g(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),a.length>0&&w.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?w("<div>").append(w.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},w.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){w.fn[t]=function(e){return this.on(t,e)}}),w.expr.pseudos.animated=function(e){return w.grep(w.timers,function(t){return e===t.elem}).length},w.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=w.css(e,"position"),f=w(e),p={};"static"===c&&(e.style.position="relative"),s=f.offset(),o=w.css(e,"top"),u=w.css(e,"left"),(l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1)?(a=(r=f.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),g(t)&&(t=t.call(e,n,w.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),"using"in t?t.using.call(e,p):f.css(p)}},w.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){w.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===w.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===w.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=w(e).offset()).top+=w.css(e,"borderTopWidth",!0),i.left+=w.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-w.css(r,"marginTop",!0),left:t.left-i.left-w.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===w.css(e,"position"))e=e.offsetParent;return e||be})}}),w.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;w.fn[e]=function(r){return z(this,function(e,r,i){var o;if(y(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),w.each(["top","left"],function(e,t){w.cssHooks[t]=_e(h.pixelPosition,function(e,n){if(n)return n=Fe(e,t),We.test(n)?w(e).position()[t]+"px":n})}),w.each({Height:"height",Width:"width"},function(e,t){w.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){w.fn[r]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(!0===i||!0===o?"margin":"border");return z(this,function(t,n,i){var o;return y(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?w.css(t,n,s):w.style(t,n,i,s)},t,a?i:void 0,a)}})}),w.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){w.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),w.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),w.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),g(e))return r=o.call(arguments,2),i=function(){return e.apply(t||this,r.concat(o.call(arguments)))},i.guid=e.guid=e.guid||w.guid++,i},w.holdReady=function(e){e?w.readyWait++:w.ready(!0)},w.isArray=Array.isArray,w.parseJSON=JSON.parse,w.nodeName=N,w.isFunction=g,w.isWindow=y,w.camelCase=G,w.type=x,w.now=Date.now,w.isNumeric=function(e){var t=w.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return w});var Jt=e.jQuery,Kt=e.$;return w.noConflict=function(t){return e.$===w&&(e.$=Kt),t&&e.jQuery===w&&(e.jQuery=Jt),w},t||(e.jQuery=e.$=w),w});
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-csv/build/ng-csv.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-csv/build/ng-csv.js
new file mode 100644
index 00000000..80432ecf
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-csv/build/ng-csv.js
@@ -0,0 +1,319 @@
+(function(window, document) {
+
+// Create all modules and define dependencies to make sure they exist
+// and are loaded in the correct order to satisfy dependency injection
+// before all nested files are concatenated by Grunt
+
+// Config
+angular.module('ngCsv.config', []).
+ value('ngCsv.config', {
+ debug: true
+ }).
+ config(['$compileProvider', function($compileProvider){
+ if (angular.isDefined($compileProvider.urlSanitizationWhitelist)) {
+ $compileProvider.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|data):/);
+ } else {
+ $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|data):/);
+ }
+ }]);
+
+// Modules
+angular.module('ngCsv.directives', ['ngCsv.services']);
+angular.module('ngCsv.services', []);
+angular.module('ngCsv',
+ [
+ 'ngCsv.config',
+ 'ngCsv.services',
+ 'ngCsv.directives',
+ 'ngSanitize'
+ ]);
+
+// Common.js package manager support (e.g. ComponentJS, WebPack)
+if (typeof module !== 'undefined' && typeof exports !== 'undefined' && module.exports === exports) {
+ module.exports = 'ngCsv';
+}
+/**
+ * Created by asafdav on 15/05/14.
+ */
+angular.module('ngCsv.services').
+ service('CSV', ['$q', function ($q) {
+
+ var EOL = '\r\n';
+ var BOM = "\ufeff";
+
+ var specialChars = {
+ '\\t': '\t',
+ '\\b': '\b',
+ '\\v': '\v',
+ '\\f': '\f',
+ '\\r': '\r'
+ };
+
+ /**
+ * Stringify one field
+ * @param data
+ * @param options
+ * @returns {*}
+ */
+ this.stringifyField = function (data, options) {
+ if (options.decimalSep === 'locale' && this.isFloat(data)) {
+ return data.toLocaleString();
+ }
+
+ if (options.decimalSep !== '.' && this.isFloat(data)) {
+ return data.toString().replace('.', options.decimalSep);
+ }
+
+ if (typeof data === 'string') {
+ data = data.replace(/"/g, '""'); // Escape double qoutes
+
+ if (options.quoteStrings || data.indexOf(',') > -1 || data.indexOf('\n') > -1 || data.indexOf('\r') > -1) {
+ data = options.txtDelim + data + options.txtDelim;
+ }
+
+ return data;
+ }
+
+ if (typeof data === 'boolean') {
+ return data ? 'TRUE' : 'FALSE';
+ }
+
+ return data;
+ };
+
+ /**
+ * Helper function to check if input is float
+ * @param input
+ * @returns {boolean}
+ */
+ this.isFloat = function (input) {
+ return +input === input && (!isFinite(input) || Boolean(input % 1));
+ };
+
+ /**
+ * Creates a csv from a data array
+ * @param data
+ * @param options
+ * * header - Provide the first row (optional)
+ * * fieldSep - Field separator, default: ',',
+ * * addByteOrderMarker - Add Byte order mark, default(false)
+ * @param callback
+ */
+ this.stringify = function (data, options) {
+ var def = $q.defer();
+
+ var that = this;
+ var csv = "";
+ var csvContent = "";
+
+ var dataPromise = $q.when(data).then(function (responseData) {
+ //responseData = angular.copy(responseData);//moved to row creation
+ // Check if there's a provided header array
+ if (angular.isDefined(options.header) && options.header) {
+ var encodingArray, headerString;
+
+ encodingArray = [];
+ angular.forEach(options.header, function (title, key) {
+ this.push(that.stringifyField(title, options));
+ }, encodingArray);
+
+ headerString = encodingArray.join(options.fieldSep ? options.fieldSep : ",");
+ csvContent += headerString + EOL;
+ }
+
+ var arrData = [];
+
+ if (angular.isArray(responseData)) {
+ arrData = responseData;
+ }
+ else if (angular.isFunction(responseData)) {
+ arrData = responseData();
+ }
+
+ // Check if using keys as labels
+ if (angular.isDefined(options.label) && options.label && typeof options.label === 'boolean') {
+ var labelArray, labelString;
+
+ labelArray = [];
+ angular.forEach(arrData[0], function(value, label) {
+ this.push(that.stringifyField(label, options));
+ }, labelArray);
+ labelString = labelArray.join(options.fieldSep ? options.fieldSep : ",");
+ csvContent += labelString + EOL;
+ }
+
+ angular.forEach(arrData, function (oldRow, index) {
+ var row = angular.copy(arrData[index]);
+ var dataString, infoArray;
+
+ infoArray = [];
+
+ var iterator = !!options.columnOrder ? options.columnOrder : row;
+ angular.forEach(iterator, function (field, key) {
+ var val = !!options.columnOrder ? row[field] : field;
+ this.push(that.stringifyField(val, options));
+ }, infoArray);
+
+ dataString = infoArray.join(options.fieldSep ? options.fieldSep : ",");
+ csvContent += index < arrData.length ? dataString + EOL : dataString;
+ });
+
+ // Add BOM if needed
+ if (options.addByteOrderMarker) {
+ csv += BOM;
+ }
+
+ // Append the content and resolve.
+ csv += csvContent;
+ def.resolve(csv);
+ });
+
+ if (typeof dataPromise['catch'] === 'function') {
+ dataPromise['catch'](function (err) {
+ def.reject(err);
+ });
+ }
+
+ return def.promise;
+ };
+
+ /**
+ * Helper function to check if input is really a special character
+ * @param input
+ * @returns {boolean}
+ */
+ this.isSpecialChar = function(input){
+ return specialChars[input] !== undefined;
+ };
+
+ /**
+ * Helper function to get what the special character was supposed to be
+ * since Angular escapes the first backslash
+ * @param input
+ * @returns {special character string}
+ */
+ this.getSpecialChar = function (input) {
+ return specialChars[input];
+ };
+
+
+ }]);
+/**
+ * ng-csv module
+ * Export Javascript's arrays to csv files from the browser
+ *
+ * Author: asafdav - https://github.com/asafdav
+ */
+angular.module('ngCsv.directives').
+ directive('ngCsv', ['$parse', '$q', 'CSV', '$document', '$timeout', function ($parse, $q, CSV, $document, $timeout) {
+ return {
+ restrict: 'AC',
+ scope: {
+ data: '&ngCsv',
+ filename: '@filename',
+ header: '&csvHeader',
+ columnOrder: '&csvColumnOrder',
+ txtDelim: '@textDelimiter',
+ decimalSep: '@decimalSeparator',
+ quoteStrings: '@quoteStrings',
+ fieldSep: '@fieldSeparator',
+ lazyLoad: '@lazyLoad',
+ addByteOrderMarker: "@addBom",
+ ngClick: '&',
+ charset: '@charset',
+ label: '&csvLabel'
+ },
+ controller: [
+ '$scope',
+ '$element',
+ '$attrs',
+ '$transclude',
+ function ($scope, $element, $attrs, $transclude) {
+ $scope.csv = '';
+
+ if (!angular.isDefined($scope.lazyLoad) || $scope.lazyLoad != "true") {
+ if (angular.isArray($scope.data)) {
+ $scope.$watch("data", function (newValue) {
+ $scope.buildCSV();
+ }, true);
+ }
+ }
+
+ $scope.getFilename = function () {
+ return $scope.filename || 'download.csv';
+ };
+
+ function getBuildCsvOptions() {
+ var options = {
+ txtDelim: $scope.txtDelim ? $scope.txtDelim : '"',
+ decimalSep: $scope.decimalSep ? $scope.decimalSep : '.',
+ quoteStrings: $scope.quoteStrings,
+ addByteOrderMarker: $scope.addByteOrderMarker
+ };
+ if (angular.isDefined($attrs.csvHeader)) options.header = $scope.$eval($scope.header);
+ if (angular.isDefined($attrs.csvColumnOrder)) options.columnOrder = $scope.$eval($scope.columnOrder);
+ if (angular.isDefined($attrs.csvLabel)) options.label = $scope.$eval($scope.label);
+
+ options.fieldSep = $scope.fieldSep ? $scope.fieldSep : ",";
+
+ // Replaces any badly formatted special character string with correct special character
+ options.fieldSep = CSV.isSpecialChar(options.fieldSep) ? CSV.getSpecialChar(options.fieldSep) : options.fieldSep;
+
+ return options;
+ }
+
+ /**
+ * Creates the CSV and updates the scope
+ * @returns {*}
+ */
+ $scope.buildCSV = function () {
+ var deferred = $q.defer();
+
+ $element.addClass($attrs.ngCsvLoadingClass || 'ng-csv-loading');
+
+ CSV.stringify($scope.data(), getBuildCsvOptions()).then(function (csv) {
+ $scope.csv = csv;
+ $element.removeClass($attrs.ngCsvLoadingClass || 'ng-csv-loading');
+ deferred.resolve(csv);
+ });
+ $scope.$apply(); // Old angular support
+
+ return deferred.promise;
+ };
+ }
+ ],
+ link: function (scope, element, attrs) {
+ function doClick() {
+ var charset = scope.charset || "utf-8";
+ var blob = new Blob([scope.csv], {
+ type: "text/csv;charset="+ charset + ";"
+ });
+
+ if (window.navigator.msSaveOrOpenBlob) {
+ navigator.msSaveBlob(blob, scope.getFilename());
+ } else {
+
+ var downloadContainer = angular.element('<div data-tap-disabled="true"><a></a></div>');
+ var downloadLink = angular.element(downloadContainer.children()[0]);
+ downloadLink.attr('href', window.URL.createObjectURL(blob));
+ downloadLink.attr('download', scope.getFilename());
+ downloadLink.attr('target', '_blank');
+
+ $document.find('body').append(downloadContainer);
+ $timeout(function () {
+ downloadLink[0].click();
+ downloadLink.remove();
+ }, null);
+ }
+ }
+
+ element.bind('click', function (e) {
+ scope.buildCSV().then(function (csv) {
+ doClick();
+ });
+ scope.$apply();
+ });
+ }
+ };
+ }]);
+})(window, document); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-csv/build/ng-csv.min.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-csv/build/ng-csv.min.js
new file mode 100644
index 00000000..94dcd7f5
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-csv/build/ng-csv.min.js
@@ -0,0 +1,2 @@
+/*! ng-csv 10-10-2015 */
+!function(a){angular.module("ngCsv.config",[]).value("ngCsv.config",{debug:!0}).config(["$compileProvider",function(a){angular.isDefined(a.urlSanitizationWhitelist)?a.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|data):/):a.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|data):/)}]),angular.module("ngCsv.directives",["ngCsv.services"]),angular.module("ngCsv.services",[]),angular.module("ngCsv",["ngCsv.config","ngCsv.services","ngCsv.directives","ngSanitize"]),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ngCsv"),angular.module("ngCsv.services").service("CSV",["$q",function(a){var b="\r\n",c="",d={"\\t":" ","\\b":"\b","\\v":" ","\\f":"\f","\\r":"\r"};this.stringifyField=function(a,b){return"locale"===b.decimalSep&&this.isFloat(a)?a.toLocaleString():"."!==b.decimalSep&&this.isFloat(a)?a.toString().replace(".",b.decimalSep):"string"==typeof a?(a=a.replace(/"/g,'""'),(b.quoteStrings||a.indexOf(",")>-1||a.indexOf("\n")>-1||a.indexOf("\r")>-1)&&(a=b.txtDelim+a+b.txtDelim),a):"boolean"==typeof a?a?"TRUE":"FALSE":a},this.isFloat=function(a){return+a===a&&(!isFinite(a)||Boolean(a%1))},this.stringify=function(d,e){var f=a.defer(),g=this,h="",i="",j=a.when(d).then(function(a){if(angular.isDefined(e.header)&&e.header){var d,j;d=[],angular.forEach(e.header,function(a){this.push(g.stringifyField(a,e))},d),j=d.join(e.fieldSep?e.fieldSep:","),i+=j+b}var k=[];if(angular.isArray(a)?k=a:angular.isFunction(a)&&(k=a()),angular.isDefined(e.label)&&e.label&&"boolean"==typeof e.label){var l,m;l=[],angular.forEach(k[0],function(a,b){this.push(g.stringifyField(b,e))},l),m=l.join(e.fieldSep?e.fieldSep:","),i+=m+b}angular.forEach(k,function(a,c){var d,f,h=angular.copy(k[c]);f=[];var j=e.columnOrder?e.columnOrder:h;angular.forEach(j,function(a){var b=e.columnOrder?h[a]:a;this.push(g.stringifyField(b,e))},f),d=f.join(e.fieldSep?e.fieldSep:","),i+=c<k.length?d+b:d}),e.addByteOrderMarker&&(h+=c),h+=i,f.resolve(h)});return"function"==typeof j["catch"]&&j["catch"](function(a){f.reject(a)}),f.promise},this.isSpecialChar=function(a){return void 0!==d[a]},this.getSpecialChar=function(a){return d[a]}}]),angular.module("ngCsv.directives").directive("ngCsv",["$parse","$q","CSV","$document","$timeout",function(b,c,d,e,f){return{restrict:"AC",scope:{data:"&ngCsv",filename:"@filename",header:"&csvHeader",columnOrder:"&csvColumnOrder",txtDelim:"@textDelimiter",decimalSep:"@decimalSeparator",quoteStrings:"@quoteStrings",fieldSep:"@fieldSeparator",lazyLoad:"@lazyLoad",addByteOrderMarker:"@addBom",ngClick:"&",charset:"@charset",label:"&csvLabel"},controller:["$scope","$element","$attrs","$transclude",function(a,b,e){function f(){var b={txtDelim:a.txtDelim?a.txtDelim:'"',decimalSep:a.decimalSep?a.decimalSep:".",quoteStrings:a.quoteStrings,addByteOrderMarker:a.addByteOrderMarker};return angular.isDefined(e.csvHeader)&&(b.header=a.$eval(a.header)),angular.isDefined(e.csvColumnOrder)&&(b.columnOrder=a.$eval(a.columnOrder)),angular.isDefined(e.csvLabel)&&(b.label=a.$eval(a.label)),b.fieldSep=a.fieldSep?a.fieldSep:",",b.fieldSep=d.isSpecialChar(b.fieldSep)?d.getSpecialChar(b.fieldSep):b.fieldSep,b}a.csv="",angular.isDefined(a.lazyLoad)&&"true"==a.lazyLoad||angular.isArray(a.data)&&a.$watch("data",function(){a.buildCSV()},!0),a.getFilename=function(){return a.filename||"download.csv"},a.buildCSV=function(){var g=c.defer();return b.addClass(e.ngCsvLoadingClass||"ng-csv-loading"),d.stringify(a.data(),f()).then(function(c){a.csv=c,b.removeClass(e.ngCsvLoadingClass||"ng-csv-loading"),g.resolve(c)}),a.$apply(),g.promise}}],link:function(b,c){function d(){var c=b.charset||"utf-8",d=new Blob([b.csv],{type:"text/csv;charset="+c+";"});if(a.navigator.msSaveOrOpenBlob)navigator.msSaveBlob(d,b.getFilename());else{var g=angular.element('<div data-tap-disabled="true"><a></a></div>'),h=angular.element(g.children()[0]);h.attr("href",a.URL.createObjectURL(d)),h.attr("download",b.getFilename()),h.attr("target","_blank"),e.find("body").append(g),f(function(){h[0].click(),h.remove()},null)}}c.bind("click",function(){b.buildCSV().then(function(){d()}),b.$apply()})}}}])}(window,document); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-ip-address/ngIpAddress.min.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-ip-address/ngIpAddress.min.js
new file mode 100644
index 00000000..fa1a0208
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-ip-address/ngIpAddress.min.js
@@ -0,0 +1 @@
+!function(){"use strict";angular.module("ng-ip-address",[]).directive("ngIpAddress",function(){return{restrict:"A",require:"?ngModel",scope:{config:"=?ngIpConfig"},link:function(e,i,n,r){function t(e){return!isNaN(parseFloat(e))&&isFinite(e)}if(r){var l=!1,c=!1,s=new RegExp("^0","g"),a=new RegExp("^\\.","g"),o=new RegExp("\\.\\.+","g"),h=new RegExp(":","g"),u=new RegExp("^:","g"),p=0,w=!1;e.$watchCollection("config",function(e){e?(c="boolean"==typeof e.requirePort&&e.requirePort,l=c||"boolean"==typeof e.allowPort&&e.allowPort):(l=!1,c=!1),l||!r.$viewValue?r.$parsers[0](r.$viewValue):r.$setViewValue(r.$viewValue.replace(h,""))}),i.bind("keydown",function(e){17!==e.which&&91!==e.which||(w=!0)}),i.bind("keyup",function(e){17!==e.which&&91!==e.which||(w=!1)}),i.bind("keypress",function(e){(e.which<46&&0!==e.which&&8!==e.which&&13!==e.which||47===e.which||58===e.which&&!l||e.which>58&&(!w||99!==e.which&&118!==e.which&&120!==e.which))&&e.preventDefault()}),r.$parsers.push(function(e){if(!e)return r.$setValidity("ipAddress",!0),e;p=i[0].selectionStart;var n=!0,w=null,g=(e=(e=e.replace(a,"")).replace(o,".")).split("."),f=g.length;f<4?n=!1:f>4&&(g.length=4,f=4);for(var d=0;d<f;d++){var $=g[d];if(l)if(d<3)$=$.replace(h,"");else if(-1!==($=$.replace(u,"")).indexOf(":")){var v=$.split(":");$=v[0],(!(w=v[1].replace(s,"").substring(0,5))||!t($)||w>65535)&&(n=!1)}else c&&(n=!1);$.length>1?(!t($=$.replace(s,"").substring(0,3))||$>255)&&(n=!1):$||(n=!1),g[d]=$}return e=g.join("."),null!==w&&(e+=":"+w),r.$setValidity("ipAddress",n),r.$setViewValue(e),r.$render(),i[0].setSelectionRange(p,p),e})}}}})}(); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-ip-address/ngIpAddress.vanilla.min.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-ip-address/ngIpAddress.vanilla.min.js
new file mode 100644
index 00000000..5c1f0dd2
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-ip-address/ngIpAddress.vanilla.min.js
@@ -0,0 +1 @@
+!function(){"use strict";angular.module("ng-ip-address",[]).directive("ngIpAddress",function(){return{restrict:"A",require:"?ngModel",link:function(e,i,n,r){function t(e){return!isNaN(parseFloat(e))&&isFinite(e)}if(r){var h=new RegExp("^0","g"),c=new RegExp("^\\.","g"),s=new RegExp("\\.\\.+","g"),u=0,a=!1;i.bind("keydown",function(e){17!==e.which&&91!==e.which||(a=!0)}),i.bind("keyup",function(e){17!==e.which&&91!==e.which||(a=!1)}),i.bind("keypress",function(e){(e.which<46&&0!==e.which&&8!==e.which&&13!==e.which||47===e.which||e.which>57&&(!a||99!==e.which&&118!==e.which&&120!==e.which))&&e.preventDefault()}),r.$parsers.push(function(e){if(!e)return r.$setValidity("ipAddress",!0),e;u=i[0].selectionStart;var n=!0,a=(e=(e=e.replace(c,"")).replace(s,".")).split("."),d=a.length;d<4?n=!1:d>4&&(a.length=4,d=4);for(var l=0;l<d;l++){var w=a[l];w.length>1?(!t(w=w.replace(h,"").substring(0,3))||w>255)&&(n=!1):w||(n=!1),a[l]=w}return e=a.join("."),r.$setValidity("ipAddress",n),r.$setViewValue(e),r.$render(),i[0].setSelectionRange(u,u),e})}}}})}(); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-ip-address/package.json b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-ip-address/package.json
new file mode 100644
index 00000000..87f59cb5
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/ng-ip-address/package.json
@@ -0,0 +1,67 @@
+{
+ "_from": "ng-ip-address",
+ "_id": "ng-ip-address@1.1.12",
+ "_inBundle": false,
+ "_integrity": "sha1-reynz2xY/ZSD8FLv30DF+2UMYrg=",
+ "_location": "/ng-ip-address",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "ng-ip-address",
+ "name": "ng-ip-address",
+ "escapedName": "ng-ip-address",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "https://registry.npmjs.org/ng-ip-address/-/ng-ip-address-1.1.12.tgz",
+ "_shasum": "adeca7cf6c58fd9483f052efdf40c5fb650c62b8",
+ "_spec": "ng-ip-address",
+ "_where": "D:\\routing",
+ "author": {
+ "name": "Scott Gullen"
+ },
+ "bugs": {
+ "url": "https://github.com/CautemocSg/ng-ip-address/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "AngularJS directive that will validate an IP address and impose relevant character and structure limits",
+ "devDependencies": {
+ "gulp": "^3.9.1",
+ "gulp-rename": "^1.2.2",
+ "gulp-uglify": "^3.0.0",
+ "jasmine-core": "^2.6.4",
+ "karma": "^1.7.0",
+ "karma-jasmine": "^1.1.0",
+ "karma-phantomjs-launcher": "^1.0.4",
+ "phantomjs-prebuilt": "^2.1.14"
+ },
+ "homepage": "https://github.com/CautemocSg/ng-ip-address#readme",
+ "keywords": [
+ "angular",
+ "angularjs",
+ "directive",
+ "ip address",
+ "form",
+ "input",
+ "validation"
+ ],
+ "license": "MIT",
+ "main": "index.js",
+ "name": "ng-ip-address",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/CautemocSg/ng-ip-address.git"
+ },
+ "scripts": {
+ "build": "gulp default",
+ "test": "gulp test"
+ },
+ "version": "1.1.12"
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/tether.min.js b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/tether.min.js
new file mode 100644
index 00000000..bd608c07
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/node_modules/tether.min.js
@@ -0,0 +1 @@
+!function(t,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e(require,exports,module):t.Tether=e()}(this,function(t,e,o){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function n(t){var e=t.getBoundingClientRect(),o={};for(var i in e)o[i]=e[i];if(t.ownerDocument!==document){var r=t.ownerDocument.defaultView.frameElement;if(r){var s=n(r);o.top+=s.top,o.bottom+=s.top,o.left+=s.left,o.right+=s.left}}return o}function r(t){var e=getComputedStyle(t)||{},o=e.position,i=[];if("fixed"===o)return[t];for(var n=t;(n=n.parentNode)&&n&&1===n.nodeType;){var r=void 0;try{r=getComputedStyle(n)}catch(s){}if("undefined"==typeof r||null===r)return i.push(n),i;var a=r,f=a.overflow,l=a.overflowX,h=a.overflowY;/(auto|scroll|overlay)/.test(f+h+l)&&("absolute"!==o||["relative","absolute","fixed"].indexOf(r.position)>=0)&&i.push(n)}return i.push(t.ownerDocument.body),t.ownerDocument!==document&&i.push(t.ownerDocument.defaultView),i}function s(){A&&document.body.removeChild(A),A=null}function a(t){var e=void 0;t===document?(e=document,t=document.documentElement):e=t.ownerDocument;var o=e.documentElement,i=n(t),r=P();return i.top-=r.top,i.left-=r.left,"undefined"==typeof i.width&&(i.width=document.body.scrollWidth-i.left-i.right),"undefined"==typeof i.height&&(i.height=document.body.scrollHeight-i.top-i.bottom),i.top=i.top-o.clientTop,i.left=i.left-o.clientLeft,i.right=e.body.clientWidth-i.width-i.left,i.bottom=e.body.clientHeight-i.height-i.top,i}function f(t){return t.offsetParent||document.documentElement}function l(){if(M)return M;var t=document.createElement("div");t.style.width="100%",t.style.height="200px";var e=document.createElement("div");h(e.style,{position:"absolute",top:0,left:0,pointerEvents:"none",visibility:"hidden",width:"200px",height:"150px",overflow:"hidden"}),e.appendChild(t),document.body.appendChild(e);var o=t.offsetWidth;e.style.overflow="scroll";var i=t.offsetWidth;o===i&&(i=e.clientWidth),document.body.removeChild(e);var n=o-i;return M={width:n,height:n}}function h(){var t=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],e=[];return Array.prototype.push.apply(e,arguments),e.slice(1).forEach(function(e){if(e)for(var o in e)({}).hasOwnProperty.call(e,o)&&(t[o]=e[o])}),t}function d(t,e){if("undefined"!=typeof t.classList)e.split(" ").forEach(function(e){e.trim()&&t.classList.remove(e)});else{var o=new RegExp("(^| )"+e.split(" ").join("|")+"( |$)","gi"),i=c(t).replace(o," ");g(t,i)}}function p(t,e){if("undefined"!=typeof t.classList)e.split(" ").forEach(function(e){e.trim()&&t.classList.add(e)});else{d(t,e);var o=c(t)+(" "+e);g(t,o)}}function u(t,e){if("undefined"!=typeof t.classList)return t.classList.contains(e);var o=c(t);return new RegExp("(^| )"+e+"( |$)","gi").test(o)}function c(t){return t.className instanceof t.ownerDocument.defaultView.SVGAnimatedString?t.className.baseVal:t.className}function g(t,e){t.setAttribute("class",e)}function m(t,e,o){o.forEach(function(o){e.indexOf(o)===-1&&u(t,o)&&d(t,o)}),e.forEach(function(e){u(t,e)||p(t,e)})}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function v(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function y(t,e){var o=arguments.length<=2||void 0===arguments[2]?1:arguments[2];return t+o>=e&&e>=t-o}function b(){return"object"==typeof performance&&"function"==typeof performance.now?performance.now():+new Date}function w(){for(var t={top:0,left:0},e=arguments.length,o=Array(e),i=0;i<e;i++)o[i]=arguments[i];return o.forEach(function(e){var o=e.top,i=e.left;"string"==typeof o&&(o=parseFloat(o,10)),"string"==typeof i&&(i=parseFloat(i,10)),t.top+=o,t.left+=i}),t}function C(t,e){return"string"==typeof t.left&&t.left.indexOf("%")!==-1&&(t.left=parseFloat(t.left,10)/100*e.width),"string"==typeof t.top&&t.top.indexOf("%")!==-1&&(t.top=parseFloat(t.top,10)/100*e.height),t}function O(t,e){return"scrollParent"===e?e=t.scrollParents[0]:"window"===e&&(e=[pageXOffset,pageYOffset,innerWidth+pageXOffset,innerHeight+pageYOffset]),e===document&&(e=e.documentElement),"undefined"!=typeof e.nodeType&&!function(){var t=e,o=a(e),i=o,n=getComputedStyle(e);if(e=[i.left,i.top,o.width+i.left,o.height+i.top],t.ownerDocument!==document){var r=t.ownerDocument.defaultView;e[0]+=r.pageXOffset,e[1]+=r.pageYOffset,e[2]+=r.pageXOffset,e[3]+=r.pageYOffset}G.forEach(function(t,o){t=t[0].toUpperCase()+t.substr(1),"Top"===t||"Left"===t?e[o]+=parseFloat(n["border"+t+"Width"]):e[o]-=parseFloat(n["border"+t+"Width"])})}(),e}var E=function(){function t(t,e){for(var o=0;o<e.length;o++){var i=e[o];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,o,i){return o&&t(e.prototype,o),i&&t(e,i),e}}(),x=void 0;"undefined"==typeof x&&(x={modules:[]});var A=null,T=function(){var t=0;return function(){return++t}}(),S={},P=function(){var t=A;t&&document.body.contains(t)||(t=document.createElement("div"),t.setAttribute("data-tether-id",T()),h(t.style,{top:0,left:0,position:"absolute"}),document.body.appendChild(t),A=t);var e=t.getAttribute("data-tether-id");return"undefined"==typeof S[e]&&(S[e]=n(t),k(function(){delete S[e]})),S[e]},M=null,W=[],k=function(t){W.push(t)},_=function(){for(var t=void 0;t=W.pop();)t()},B=function(){function t(){i(this,t)}return E(t,[{key:"on",value:function(t,e,o){var i=!(arguments.length<=3||void 0===arguments[3])&&arguments[3];"undefined"==typeof this.bindings&&(this.bindings={}),"undefined"==typeof this.bindings[t]&&(this.bindings[t]=[]),this.bindings[t].push({handler:e,ctx:o,once:i})}},{key:"once",value:function(t,e,o){this.on(t,e,o,!0)}},{key:"off",value:function(t,e){if("undefined"!=typeof this.bindings&&"undefined"!=typeof this.bindings[t])if("undefined"==typeof e)delete this.bindings[t];else for(var o=0;o<this.bindings[t].length;)this.bindings[t][o].handler===e?this.bindings[t].splice(o,1):++o}},{key:"trigger",value:function(t){if("undefined"!=typeof this.bindings&&this.bindings[t]){for(var e=0,o=arguments.length,i=Array(o>1?o-1:0),n=1;n<o;n++)i[n-1]=arguments[n];for(;e<this.bindings[t].length;){var r=this.bindings[t][e],s=r.handler,a=r.ctx,f=r.once,l=a;"undefined"==typeof l&&(l=this),s.apply(l,i),f?this.bindings[t].splice(e,1):++e}}}}]),t}();x.Utils={getActualBoundingClientRect:n,getScrollParents:r,getBounds:a,getOffsetParent:f,extend:h,addClass:p,removeClass:d,hasClass:u,updateClasses:m,defer:k,flush:_,uniqueId:T,Evented:B,getScrollBarSize:l,removeUtilElements:s};var j=function(){function t(t,e){var o=[],i=!0,n=!1,r=void 0;try{for(var s,a=t[Symbol.iterator]();!(i=(s=a.next()).done)&&(o.push(s.value),!e||o.length!==e);i=!0);}catch(f){n=!0,r=f}finally{try{!i&&a["return"]&&a["return"]()}finally{if(n)throw r}}return o}return function(e,o){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,o);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),E=function(){function t(t,e){for(var o=0;o<e.length;o++){var i=e[o];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,o,i){return o&&t(e.prototype,o),i&&t(e,i),e}}(),z=function(t,e,o){for(var i=!0;i;){var n=t,r=e,s=o;i=!1,null===n&&(n=Function.prototype);var a=Object.getOwnPropertyDescriptor(n,r);if(void 0!==a){if("value"in a)return a.value;var f=a.get;if(void 0===f)return;return f.call(s)}var l=Object.getPrototypeOf(n);if(null===l)return;t=l,e=r,o=s,i=!0,a=l=void 0}};if("undefined"==typeof x)throw new Error("You must include the utils.js file before tether.js");var Y=x.Utils,r=Y.getScrollParents,a=Y.getBounds,f=Y.getOffsetParent,h=Y.extend,p=Y.addClass,d=Y.removeClass,m=Y.updateClasses,k=Y.defer,_=Y.flush,l=Y.getScrollBarSize,s=Y.removeUtilElements,L=function(){if("undefined"==typeof document)return"";for(var t=document.createElement("div"),e=["transform","WebkitTransform","OTransform","MozTransform","msTransform"],o=0;o<e.length;++o){var i=e[o];if(void 0!==t.style[i])return i}}(),D=[],X=function(){D.forEach(function(t){t.position(!1)}),_()};!function(){var t=null,e=null,o=null,i=function n(){return"undefined"!=typeof e&&e>16?(e=Math.min(e-16,250),void(o=setTimeout(n,250))):void("undefined"!=typeof t&&b()-t<10||(null!=o&&(clearTimeout(o),o=null),t=b(),X(),e=b()-t))};"undefined"!=typeof window&&"undefined"!=typeof window.addEventListener&&["resize","scroll","touchmove"].forEach(function(t){window.addEventListener(t,i)})}();var F={center:"center",left:"right",right:"left"},H={middle:"middle",top:"bottom",bottom:"top"},N={top:0,left:0,middle:"50%",center:"50%",bottom:"100%",right:"100%"},U=function(t,e){var o=t.left,i=t.top;return"auto"===o&&(o=F[e.left]),"auto"===i&&(i=H[e.top]),{left:o,top:i}},V=function(t){var e=t.left,o=t.top;return"undefined"!=typeof N[t.left]&&(e=N[t.left]),"undefined"!=typeof N[t.top]&&(o=N[t.top]),{left:e,top:o}},R=function(t){var e=t.split(" "),o=j(e,2),i=o[0],n=o[1];return{top:i,left:n}},q=R,I=function(t){function e(t){var o=this;i(this,e),z(Object.getPrototypeOf(e.prototype),"constructor",this).call(this),this.position=this.position.bind(this),D.push(this),this.history=[],this.setOptions(t,!1),x.modules.forEach(function(t){"undefined"!=typeof t.initialize&&t.initialize.call(o)}),this.position()}return v(e,t),E(e,[{key:"getClass",value:function(){var t=arguments.length<=0||void 0===arguments[0]?"":arguments[0],e=this.options.classes;return"undefined"!=typeof e&&e[t]?this.options.classes[t]:this.options.classPrefix?this.options.classPrefix+"-"+t:t}},{key:"setOptions",value:function(t){var e=this,o=arguments.length<=1||void 0===arguments[1]||arguments[1],i={offset:"0 0",targetOffset:"0 0",targetAttachment:"auto auto",classPrefix:"tether"};this.options=h(i,t);var n=this.options,s=n.element,a=n.target,f=n.targetModifier;if(this.element=s,this.target=a,this.targetModifier=f,"viewport"===this.target?(this.target=document.body,this.targetModifier="visible"):"scroll-handle"===this.target&&(this.target=document.body,this.targetModifier="scroll-handle"),["element","target"].forEach(function(t){if("undefined"==typeof e[t])throw new Error("Tether Error: Both element and target must be defined");"undefined"!=typeof e[t].jquery?e[t]=e[t][0]:"string"==typeof e[t]&&(e[t]=document.querySelector(e[t]))}),p(this.element,this.getClass("element")),this.options.addTargetClasses!==!1&&p(this.target,this.getClass("target")),!this.options.attachment)throw new Error("Tether Error: You must provide an attachment");this.targetAttachment=q(this.options.targetAttachment),this.attachment=q(this.options.attachment),this.offset=R(this.options.offset),this.targetOffset=R(this.options.targetOffset),"undefined"!=typeof this.scrollParents&&this.disable(),"scroll-handle"===this.targetModifier?this.scrollParents=[this.target]:this.scrollParents=r(this.target),this.options.enabled!==!1&&this.enable(o)}},{key:"getTargetBounds",value:function(){if("undefined"==typeof this.targetModifier)return a(this.target);if("visible"===this.targetModifier){if(this.target===document.body)return{top:pageYOffset,left:pageXOffset,height:innerHeight,width:innerWidth};var t=a(this.target),e={height:t.height,width:t.width,top:t.top,left:t.left};return e.height=Math.min(e.height,t.height-(pageYOffset-t.top)),e.height=Math.min(e.height,t.height-(t.top+t.height-(pageYOffset+innerHeight))),e.height=Math.min(innerHeight,e.height),e.height-=2,e.width=Math.min(e.width,t.width-(pageXOffset-t.left)),e.width=Math.min(e.width,t.width-(t.left+t.width-(pageXOffset+innerWidth))),e.width=Math.min(innerWidth,e.width),e.width-=2,e.top<pageYOffset&&(e.top=pageYOffset),e.left<pageXOffset&&(e.left=pageXOffset),e}if("scroll-handle"===this.targetModifier){var t=void 0,o=this.target;o===document.body?(o=document.documentElement,t={left:pageXOffset,top:pageYOffset,height:innerHeight,width:innerWidth}):t=a(o);var i=getComputedStyle(o),n=o.scrollWidth>o.clientWidth||[i.overflow,i.overflowX].indexOf("scroll")>=0||this.target!==document.body,r=0;n&&(r=15);var s=t.height-parseFloat(i.borderTopWidth)-parseFloat(i.borderBottomWidth)-r,e={width:15,height:.975*s*(s/o.scrollHeight),left:t.left+t.width-parseFloat(i.borderLeftWidth)-15},f=0;s<408&&this.target===document.body&&(f=-11e-5*Math.pow(s,2)-.00727*s+22.58),this.target!==document.body&&(e.height=Math.max(e.height,24));var l=this.target.scrollTop/(o.scrollHeight-s);return e.top=l*(s-e.height-f)+t.top+parseFloat(i.borderTopWidth),this.target===document.body&&(e.height=Math.max(e.height,24)),e}}},{key:"clearCache",value:function(){this._cache={}}},{key:"cache",value:function(t,e){return"undefined"==typeof this._cache&&(this._cache={}),"undefined"==typeof this._cache[t]&&(this._cache[t]=e.call(this)),this._cache[t]}},{key:"enable",value:function(){var t=this,e=arguments.length<=0||void 0===arguments[0]||arguments[0];this.options.addTargetClasses!==!1&&p(this.target,this.getClass("enabled")),p(this.element,this.getClass("enabled")),this.enabled=!0,this.scrollParents.forEach(function(e){e!==t.target.ownerDocument&&e.addEventListener("scroll",t.position)}),e&&this.position()}},{key:"disable",value:function(){var t=this;d(this.target,this.getClass("enabled")),d(this.element,this.getClass("enabled")),this.enabled=!1,"undefined"!=typeof this.scrollParents&&this.scrollParents.forEach(function(e){e.removeEventListener("scroll",t.position)})}},{key:"destroy",value:function(){var t=this;this.disable(),D.forEach(function(e,o){e===t&&D.splice(o,1)}),0===D.length&&s()}},{key:"updateAttachClasses",value:function(t,e){var o=this;t=t||this.attachment,e=e||this.targetAttachment;var i=["left","top","bottom","right","middle","center"];"undefined"!=typeof this._addAttachClasses&&this._addAttachClasses.length&&this._addAttachClasses.splice(0,this._addAttachClasses.length),"undefined"==typeof this._addAttachClasses&&(this._addAttachClasses=[]);var n=this._addAttachClasses;t.top&&n.push(this.getClass("element-attached")+"-"+t.top),t.left&&n.push(this.getClass("element-attached")+"-"+t.left),e.top&&n.push(this.getClass("target-attached")+"-"+e.top),e.left&&n.push(this.getClass("target-attached")+"-"+e.left);var r=[];i.forEach(function(t){r.push(o.getClass("element-attached")+"-"+t),r.push(o.getClass("target-attached")+"-"+t)}),k(function(){"undefined"!=typeof o._addAttachClasses&&(m(o.element,o._addAttachClasses,r),o.options.addTargetClasses!==!1&&m(o.target,o._addAttachClasses,r),delete o._addAttachClasses)})}},{key:"position",value:function(){var t=this,e=arguments.length<=0||void 0===arguments[0]||arguments[0];if(this.enabled){this.clearCache();var o=U(this.targetAttachment,this.attachment);this.updateAttachClasses(this.attachment,o);var i=this.cache("element-bounds",function(){return a(t.element)}),n=i.width,r=i.height;if(0===n&&0===r&&"undefined"!=typeof this.lastSize){var s=this.lastSize;n=s.width,r=s.height}else this.lastSize={width:n,height:r};var h=this.cache("target-bounds",function(){return t.getTargetBounds()}),d=h,p=C(V(this.attachment),{width:n,height:r}),u=C(V(o),d),c=C(this.offset,{width:n,height:r}),g=C(this.targetOffset,d);p=w(p,c),u=w(u,g);for(var m=h.left+u.left-p.left,v=h.top+u.top-p.top,y=0;y<x.modules.length;++y){var b=x.modules[y],O=b.position.call(this,{left:m,top:v,targetAttachment:o,targetPos:h,elementPos:i,offset:p,targetOffset:u,manualOffset:c,manualTargetOffset:g,scrollbarSize:S,attachment:this.attachment});if(O===!1)return!1;"undefined"!=typeof O&&"object"==typeof O&&(v=O.top,m=O.left)}var E={page:{top:v,left:m},viewport:{top:v-pageYOffset,bottom:pageYOffset-v-r+innerHeight,left:m-pageXOffset,right:pageXOffset-m-n+innerWidth}},A=this.target.ownerDocument,T=A.defaultView,S=void 0;return T.innerHeight>A.documentElement.clientHeight&&(S=this.cache("scrollbar-size",l),E.viewport.bottom-=S.height),T.innerWidth>A.documentElement.clientWidth&&(S=this.cache("scrollbar-size",l),E.viewport.right-=S.width),["","static"].indexOf(A.body.style.position)!==-1&&["","static"].indexOf(A.body.parentElement.style.position)!==-1||(E.page.bottom=A.body.scrollHeight-v-r,E.page.right=A.body.scrollWidth-m-n),"undefined"!=typeof this.options.optimizations&&this.options.optimizations.moveElement!==!1&&"undefined"==typeof this.targetModifier&&!function(){var e=t.cache("target-offsetparent",function(){return f(t.target)}),o=t.cache("target-offsetparent-bounds",function(){return a(e)}),i=getComputedStyle(e),n=o,r={};if(["Top","Left","Bottom","Right"].forEach(function(t){r[t.toLowerCase()]=parseFloat(i["border"+t+"Width"])}),o.right=A.body.scrollWidth-o.left-n.width+r.right,o.bottom=A.body.scrollHeight-o.top-n.height+r.bottom,E.page.top>=o.top+r.top&&E.page.bottom>=o.bottom&&E.page.left>=o.left+r.left&&E.page.right>=o.right){var s=e.scrollTop,l=e.scrollLeft;E.offset={top:E.page.top-o.top+s-r.top,left:E.page.left-o.left+l-r.left}}}(),this.move(E),this.history.unshift(E),this.history.length>3&&this.history.pop(),e&&_(),!0}}},{key:"move",value:function(t){var e=this;if("undefined"!=typeof this.element.parentNode){var o={};for(var i in t){o[i]={};for(var n in t[i]){for(var r=!1,s=0;s<this.history.length;++s){var a=this.history[s];if("undefined"!=typeof a[i]&&!y(a[i][n],t[i][n])){r=!0;break}}r||(o[i][n]=!0)}}var l={top:"",left:"",right:"",bottom:""},d=function(t,o){var i="undefined"!=typeof e.options.optimizations,n=i?e.options.optimizations.gpu:null;if(n!==!1){var r=void 0,s=void 0;if(t.top?(l.top=0,r=o.top):(l.bottom=0,r=-o.bottom),t.left?(l.left=0,s=o.left):(l.right=0,s=-o.right),window.matchMedia){var a=window.matchMedia("only screen and (min-resolution: 1.3dppx)").matches||window.matchMedia("only screen and (-webkit-min-device-pixel-ratio: 1.3)").matches;a||(s=Math.round(s),r=Math.round(r))}l[L]="translateX("+s+"px) translateY("+r+"px)","msTransform"!==L&&(l[L]+=" translateZ(0)")}else t.top?l.top=o.top+"px":l.bottom=o.bottom+"px",t.left?l.left=o.left+"px":l.right=o.right+"px"},p=!1;if((o.page.top||o.page.bottom)&&(o.page.left||o.page.right)?(l.position="absolute",d(o.page,t.page)):(o.viewport.top||o.viewport.bottom)&&(o.viewport.left||o.viewport.right)?(l.position="fixed",d(o.viewport,t.viewport)):"undefined"!=typeof o.offset&&o.offset.top&&o.offset.left?!function(){l.position="absolute";var i=e.cache("target-offsetparent",function(){return f(e.target)});f(e.element)!==i&&k(function(){e.element.parentNode.removeChild(e.element),i.appendChild(e.element)}),d(o.offset,t.offset),p=!0}():(l.position="absolute",d({top:!0,left:!0},t.page)),!p)if(this.options.bodyElement)this.element.parentNode!==this.options.bodyElement&&this.options.bodyElement.appendChild(this.element);else{for(var u=!0,c=this.element.parentNode;c&&1===c.nodeType&&"BODY"!==c.tagName;){if("static"!==getComputedStyle(c).position){u=!1;break}c=c.parentNode}u||(this.element.parentNode.removeChild(this.element),this.element.ownerDocument.body.appendChild(this.element))}var g={},m=!1;for(var n in l){var v=l[n],b=this.element.style[n];b!==v&&(m=!0,g[n]=v)}m&&k(function(){h(e.element.style,g),e.trigger("repositioned")})}}}]),e}(B);I.modules=[],x.position=X;var $=h(I,x),j=function(){function t(t,e){var o=[],i=!0,n=!1,r=void 0;try{for(var s,a=t[Symbol.iterator]();!(i=(s=a.next()).done)&&(o.push(s.value),!e||o.length!==e);i=!0);}catch(f){n=!0,r=f}finally{try{!i&&a["return"]&&a["return"]()}finally{if(n)throw r}}return o}return function(e,o){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,o);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Y=x.Utils,a=Y.getBounds,h=Y.extend,m=Y.updateClasses,k=Y.defer,G=["left","top","right","bottom"];x.modules.push({position:function(t){var e=this,o=t.top,i=t.left,n=t.targetAttachment;if(!this.options.constraints)return!0;var r=this.cache("element-bounds",function(){return a(e.element)}),s=r.height,f=r.width;if(0===f&&0===s&&"undefined"!=typeof this.lastSize){var l=this.lastSize;f=l.width,s=l.height}var d=this.cache("target-bounds",function(){return e.getTargetBounds()}),p=d.height,u=d.width,c=[this.getClass("pinned"),this.getClass("out-of-bounds")];this.options.constraints.forEach(function(t){var e=t.outOfBoundsClass,o=t.pinnedClass;e&&c.push(e),o&&c.push(o)}),c.forEach(function(t){["left","top","right","bottom"].forEach(function(e){c.push(t+"-"+e)})});var g=[],v=h({},n),y=h({},this.attachment);return this.options.constraints.forEach(function(t){var r=t.to,a=t.attachment,l=t.pin;"undefined"==typeof a&&(a="");var h=void 0,d=void 0;if(a.indexOf(" ")>=0){var c=a.split(" "),m=j(c,2);d=m[0],h=m[1]}else h=d=a;var b=O(e,r);"target"!==d&&"both"!==d||(o<b[1]&&"top"===v.top&&(o+=p,v.top="bottom"),o+s>b[3]&&"bottom"===v.top&&(o-=p,v.top="top")),"together"===d&&("top"===v.top&&("bottom"===y.top&&o<b[1]?(o+=p,v.top="bottom",o+=s,y.top="top"):"top"===y.top&&o+s>b[3]&&o-(s-p)>=b[1]&&(o-=s-p,v.top="bottom",y.top="bottom")),"bottom"===v.top&&("top"===y.top&&o+s>b[3]?(o-=p,v.top="top",o-=s,y.top="bottom"):"bottom"===y.top&&o<b[1]&&o+(2*s-p)<=b[3]&&(o+=s-p,v.top="top",y.top="top")),"middle"===v.top&&(o+s>b[3]&&"top"===y.top?(o-=s,y.top="bottom"):o<b[1]&&"bottom"===y.top&&(o+=s,y.top="top"))),"target"!==h&&"both"!==h||(i<b[0]&&"left"===v.left&&(i+=u,v.left="right"),i+f>b[2]&&"right"===v.left&&(i-=u,v.left="left")),"together"===h&&(i<b[0]&&"left"===v.left?"right"===y.left?(i+=u,v.left="right",i+=f,y.left="left"):"left"===y.left&&(i+=u,v.left="right",i-=f,y.left="right"):i+f>b[2]&&"right"===v.left?"left"===y.left?(i-=u,v.left="left",i-=f,y.left="right"):"right"===y.left&&(i-=u,v.left="left",i+=f,y.left="left"):"center"===v.left&&(i+f>b[2]&&"left"===y.left?(i-=f,y.left="right"):i<b[0]&&"right"===y.left&&(i+=f,y.left="left"))),"element"!==d&&"both"!==d||(o<b[1]&&"bottom"===y.top&&(o+=s,y.top="top"),o+s>b[3]&&"top"===y.top&&(o-=s,y.top="bottom")),"element"!==h&&"both"!==h||(i<b[0]&&("right"===y.left?(i+=f,y.left="left"):"center"===y.left&&(i+=f/2,y.left="left")),i+f>b[2]&&("left"===y.left?(i-=f,y.left="right"):"center"===y.left&&(i-=f/2,y.left="right"))),"string"==typeof l?l=l.split(",").map(function(t){return t.trim()}):l===!0&&(l=["top","left","right","bottom"]),l=l||[];var w=[],C=[];o<b[1]&&(l.indexOf("top")>=0?(o=b[1],w.push("top")):C.push("top")),o+s>b[3]&&(l.indexOf("bottom")>=0?(o=b[3]-s,w.push("bottom")):C.push("bottom")),i<b[0]&&(l.indexOf("left")>=0?(i=b[0],w.push("left")):C.push("left")),i+f>b[2]&&(l.indexOf("right")>=0?(i=b[2]-f,w.push("right")):C.push("right")),w.length&&!function(){var t=void 0;t="undefined"!=typeof e.options.pinnedClass?e.options.pinnedClass:e.getClass("pinned"),g.push(t),w.forEach(function(e){g.push(t+"-"+e)})}(),C.length&&!function(){var t=void 0;t="undefined"!=typeof e.options.outOfBoundsClass?e.options.outOfBoundsClass:e.getClass("out-of-bounds"),g.push(t),C.forEach(function(e){g.push(t+"-"+e)})}(),(w.indexOf("left")>=0||w.indexOf("right")>=0)&&(y.left=v.left=!1),(w.indexOf("top")>=0||w.indexOf("bottom")>=0)&&(y.top=v.top=!1),v.top===n.top&&v.left===n.left&&y.top===e.attachment.top&&y.left===e.attachment.left||(e.updateAttachClasses(y,v),e.trigger("update",{attachment:y,targetAttachment:v}))}),k(function(){e.options.addTargetClasses!==!1&&m(e.target,g,c),m(e.element,g,c)}),{top:o,left:i}}});var Y=x.Utils,a=Y.getBounds,m=Y.updateClasses,k=Y.defer;x.modules.push({position:function(t){var e=this,o=t.top,i=t.left,n=this.cache("element-bounds",function(){return a(e.element)}),r=n.height,s=n.width,f=this.getTargetBounds(),l=o+r,h=i+s,d=[];o<=f.bottom&&l>=f.top&&["left","right"].forEach(function(t){var e=f[t];e!==i&&e!==h||d.push(t)}),i<=f.right&&h>=f.left&&["top","bottom"].forEach(function(t){var e=f[t];e!==o&&e!==l||d.push(t)});var p=[],u=[],c=["left","top","right","bottom"];return p.push(this.getClass("abutted")),c.forEach(function(t){p.push(e.getClass("abutted")+"-"+t)}),d.length&&u.push(this.getClass("abutted")),d.forEach(function(t){u.push(e.getClass("abutted")+"-"+t)}),k(function(){e.options.addTargetClasses!==!1&&m(e.target,u,p),m(e.element,u,p)}),!0}});var j=function(){function t(t,e){var o=[],i=!0,n=!1,r=void 0;try{for(var s,a=t[Symbol.iterator]();!(i=(s=a.next()).done)&&(o.push(s.value),!e||o.length!==e);i=!0);}catch(f){n=!0,r=f}finally{try{!i&&a["return"]&&a["return"]()}finally{if(n)throw r}}return o}return function(e,o){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,o);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();return x.modules.push({position:function(t){var e=t.top,o=t.left;if(this.options.shift){var i=this.options.shift;"function"==typeof this.options.shift&&(i=this.options.shift.call(this,{top:e,left:o}));var n=void 0,r=void 0;if("string"==typeof i){i=i.split(" "),i[1]=i[1]||i[0];var s=i,a=j(s,2);n=a[0],r=a[1],n=parseFloat(n,10),r=parseFloat(r,10)}else n=i.top,r=i.left;return e+=n,o+=r,{top:e,left:o}}}}),$}); \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/package.json b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/package.json
new file mode 100644
index 00000000..ffb97151
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "myapp",
+ "version": "1.0.0",
+ "description": "list of node modules for myapp",
+ "main": "app.js",
+ "scripts": {
+ "test": "standard"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/NMSVishal/SDNCReports.git"
+ },
+ "author": "",
+ "license": "ISC",
+ "bugs": {
+ "url": "https://github.com/NMSVishal/SDNCReports/issues"
+ },
+ "homepage": "https://github.com/NMSVishal/SDNCReports#readme",
+ "dependencies": {
+ "angular": "^1.6.9",
+ "angular-growl": "^0.1.0",
+ "angular-mocks": "^1.6.9",
+ "angular-route": "^1.6.9",
+ "angular-sanitize": "^1.6.9",
+ "angular-utils-pagination": "^0.11.1",
+ "angularjs-datetime-picker": "^0.1.16",
+ "bootstrap": "^4.0.0",
+ "jquery": "^3.3.1",
+ "ng-csv": "^0.3.6",
+ "ng-ip-address": "^1.1.12"
+ }
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/Apply.jpg b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/Apply.jpg
new file mode 100644
index 00000000..f7ea085b
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/Apply.jpg
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/FailImage.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/FailImage.png
new file mode 100644
index 00000000..22c44f7c
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/FailImage.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/backup.jpg b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/backup.jpg
new file mode 100644
index 00000000..a38acc79
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/backup.jpg
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/backupConfig.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/backupConfig.png
new file mode 100644
index 00000000..33347d22
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/backupConfig.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/compare.jpg b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/compare.jpg
new file mode 100644
index 00000000..e463494c
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/compare.jpg
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/compare.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/compare.png
new file mode 100644
index 00000000..f7611478
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/compare.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/download.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/download.png
new file mode 100644
index 00000000..0b1f9492
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/download.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/downloadImage.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/downloadImage.png
new file mode 100644
index 00000000..e72e1285
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/downloadImage.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/error.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/error.png
new file mode 100644
index 00000000..3f44964b
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/error.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/fail.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/fail.png
new file mode 100644
index 00000000..898fa264
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/fail.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/images.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/images.png
new file mode 100644
index 00000000..3bce5731
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/images.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/networklayer.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/networklayer.png
new file mode 100644
index 00000000..c8e8008f
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/networklayer.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/protocaol.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/protocaol.png
new file mode 100644
index 00000000..2c6f8fa0
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/protocaol.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/protocol.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/protocol.png
new file mode 100644
index 00000000..aea9c7c3
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/protocol.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/reachable.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/reachable.png
new file mode 100644
index 00000000..bb771b32
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/reachable.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/router.jpg b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/router.jpg
new file mode 100644
index 00000000..cb4c50ec
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/router.jpg
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/router.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/router.png
new file mode 100644
index 00000000..94de9f5a
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/router.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/search.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/search.png
new file mode 100644
index 00000000..a8b4b35d
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/search.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/success.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/success.png
new file mode 100644
index 00000000..76689fef
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/success.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/validation.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/validation.png
new file mode 100644
index 00000000..77c53ffa
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/validation.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/waning.png b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/waning.png
new file mode 100644
index 00000000..2ae29877
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/images/waning.png
Binary files differ
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllConfigForVNF.json b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllConfigForVNF.json
new file mode 100644
index 00000000..040d2ee7
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllConfigForVNF.json
@@ -0,0 +1,199 @@
+{
+ "preload-vnfs": {
+ "vnf-preload-list": [
+ {
+ "vnf-name": "vDNS-vIMS",
+ "vnf-type": "VimsClearwaterVsp..sproutScaling..module-1",
+ "vnf-version":"1.0",
+ "timeStamp":"2018-03-16",
+ "preload-data": {
+ "vnf-topology-information": {
+ "vnf-parameters": [
+ {
+ "vnf-parameter-name": "dn_range_length",
+ "vnf-parameter-value": "10000"
+ },
+ {
+ "vnf-parameter-name": "public_net_id",
+ "vnf-parameter-value": "d05b5f2a-37ce-4d75-810a-c7592a123ca3"
+ },
+ {
+ "vnf-parameter-name": "dn_range_start",
+ "vnf-parameter-value": "2425550000"
+ },
+ {
+ "vnf-parameter-name": "etcd_ip",
+ "vnf-parameter-value": "30.30.30.20"
+ },
+ {
+ "vnf-parameter-name": "zone",
+ "vnf-parameter-value": "me.cw-ngv.com"
+ },
+ {
+ "vnf-parameter-name": "dnssec_key",
+ "vnf-parameter-value": "9FPdYTWhk5+LbhrqtTPQKw=="
+ },
+ {
+ "vnf-parameter-name": "dns_ip",
+ "vnf-parameter-value": "30.30.30.9"
+ },
+ {
+ "vnf-parameter-name": "key_name",
+ "vnf-parameter-value": "sprout_scale_key1"
+ },
+ {
+ "vnf-parameter-name": "repo_url",
+ "vnf-parameter-value": "http://repo.cw-ngv.com/stable"
+ }
+ ],
+ "vnf-topology-identifier": {
+ "service-type": "dcdae039-b762-4f25-a4aa-92e6034cf3bd",
+ "vnf-type": "VimsClearwaterVsp..sproutScaling..module-1",
+ "generic-vnf-name": "vIMS-vnf-inst-1",
+ "generic-vnf-type": "vIMS-ClearWater-VSP 0",
+ "vnf-name": "vDNS-vIMS"
+ }
+ },
+ "oper-status": {
+ "order-status": "PendingAssignment"
+ },
+ "network-topology-information": {}
+ }
+ },
+ {
+ "vnf-name": "vDNS-vIMS",
+ "vnf-type": "VimsClearwaterVsp..sproutScaling..module-1",
+ "vnf-version":"2.0",
+ "timeStamp":"2018-03-17",
+ "preload-data": {
+ "vnf-topology-information": {
+ "vnf-parameters": [
+ {
+ "vnf-parameter-name": "dn_range_length",
+ "vnf-parameter-value": "20000"
+ },
+ {
+ "vnf-parameter-name": "public_net_id",
+ "vnf-parameter-value": "60dc8a1c-86b8-4cc4-b5c8-9b0272113c1f"
+ },
+ {
+ "vnf-parameter-name": "dn_range_start",
+ "vnf-parameter-value": "2425550111"
+ },
+ {
+ "vnf-parameter-name": "etcd_ip",
+ "vnf-parameter-value": "10.53.172.155"
+ },
+ {
+ "vnf-parameter-name": "zone",
+ "vnf-parameter-value": "me.cw-ngv.com"
+ },
+ {
+ "vnf-parameter-name": "dnssec_key",
+ "vnf-parameter-value": "9FPdYTWhk5+LbhrqtTPQKw=="
+ },
+ {
+ "vnf-parameter-name": "dns_ip",
+ "vnf-parameter-value": "10.53.172.152"
+ },
+ {
+ "vnf-parameter-name": "key_name",
+ "vnf-parameter-value": "vm1-key-vims"
+ },
+ {
+ "vnf-parameter-name": "repo_url",
+ "vnf-parameter-value": "http://repo.cw-ngv.com/stable"
+ }
+ ],
+ "vnf-topology-identifier": {
+ "service-type": "dcdae039-b762-4f25-a4aa-92e6034cf3bd",
+ "vnf-type": "VimsClearwaterVsp..base_clearwater..module-0",
+ "generic-vnf-name": "vIMS-vnf-inst-1",
+ "generic-vnf-type": "vIMS-ClearWater-VSP 0",
+ "vnf-name": "Vfmodule-vIMS"
+ }
+ },
+ "oper-status": {
+ "order-status": "PendingAssignment"
+ },
+ "network-topology-information": {}
+ }
+ },
+ {
+ "vnf-name": "vDNS-vIMS",
+ "vnf-type": "VimsClearwaterVsp..sproutScaling..module-1",
+ "vnf-version":"3.0",
+ "timeStamp":"2018-03-16",
+ "preload-data": {
+ "vnf-topology-information": {
+ "vnf-parameters": [
+ {
+ "vnf-parameter-name": "dn_range_length",
+ "vnf-parameter-value": "10000"
+ },
+ {
+ "vnf-parameter-name": "public_net_id",
+ "vnf-parameter-value": "d05b5f2a-37ce-4d75-810a-c7592a123ca3"
+ },
+ {
+ "vnf-parameter-name": "dn_range_start",
+ "vnf-parameter-value": "2425550000"
+ },
+ {
+ "vnf-parameter-name": "etcd_ip",
+ "vnf-parameter-value": "30.30.30.20"
+ },
+ {
+ "vnf-parameter-name": "zone",
+ "vnf-parameter-value": "me.cw-ngv.com"
+ },
+ {
+ "vnf-parameter-name": "dnssec_key",
+ "vnf-parameter-value": "9FPdYTWhk5+LbhrqtTPQKw=="
+ },
+ {
+ "vnf-parameter-name": "dns_ip",
+ "vnf-parameter-value": "30.30.30.9"
+ },
+ {
+ "vnf-parameter-name": "key_name",
+ "vnf-parameter-value": "sprout_scale_key1"
+ },
+ {
+ "vnf-parameter-name": "repo_url",
+ "vnf-parameter-value": "http://repo.cw-ngv.com/stable"
+ }
+ ],
+ "vnf-topology-identifier": {
+ "service-type": "dcdae039-b762-4f25-a4aa-92e6034cf3bd",
+ "vnf-type": "VimsClearwaterVsp..sproutScaling..module-1",
+ "generic-vnf-name": "vIMS-vnf-inst-1",
+ "generic-vnf-type": "vIMS-ClearWater-VSP 0",
+ "vnf-name": "vDNS-vIMS"
+ }
+ },
+ "oper-status": {
+ "order-status": "PendingAssignment"
+ },
+ "network-topology-information": {}
+ }
+ }
+ ]
+},
+ "status":200,
+ "config":{
+ "method":"GET",
+ "transformRequest":[
+ null
+ ],
+ "transformResponse":[
+ null
+ ],
+ "params":"",
+ "headers":{
+ "Accept":"application/json"
+ },
+ "url":"/getAllConfigForVNF/Thu Mar 15 2018 00:00:00 GMT+0530 (India Standard Time)/Fri Mar 16 2018 00:00:00 GMT+0530 (India Standard Time)/Router"
+ },
+ "statusText":""
+ } \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllDevices.json b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllDevices.json
new file mode 100644
index 00000000..d7faef5a
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllDevices.json
@@ -0,0 +1,17 @@
+
+{
+ "deviceList":[
+ {
+ "deviceId":"1",
+ "deviceName":"Device1"
+ },
+ {
+ "deviceId":"2",
+ "deviceName":"Device2"
+ },
+ {
+ "deviceId":"3",
+ "deviceName":"Device3"
+ }
+ ]
+} \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllReports.json b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllReports.json
new file mode 100644
index 00000000..cd0723f1
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllReports.json
@@ -0,0 +1,75 @@
+
+{
+ "data":[
+ {
+ "testid":1,
+ "deviceid":1,
+ "testName":"Network Layer",
+ "deviceName":"Router",
+ "execuationDetails":{"output": {"hostname": "google.com","testresult": "pass", "status": "reachable","statistics": "0% loss","ipaddress": "10.53.122.44","avgTime": "Minimum = 70ms"}},
+ "result":"Pass",
+ "timeStamp":"2018-03-16"
+ },
+ {
+ "testid":2,
+ "deviceid":1,
+ "testName":"Network Layer",
+ "deviceName":"Router",
+ "execuationDetails":{"output": {"hostname": "google.com","testresult": "fail", "status": "unreachable","statistics": "100% loss","ipaddress": "10.53.122.44","avgTime": "Minimum = 33ms"}},
+ "result":"Pass",
+ "timeStamp":"2018-03-16"
+ },
+ {
+ "testid":4,
+ "deviceid":1,
+ "testName":"Protocol Layer",
+ "deviceName":"Router",
+ "execuationDetails":{"output": {"status": "unreachable"}},
+ "result":"Fail",
+ "timeStamp":"2018-03-08"
+ },
+ {
+ "testid":5,
+ "deviceid":1,
+ "testName":"Protocol Layer",
+ "deviceName":"Router",
+ "execuationDetails":{"output": {"status": "reachable"}},
+ "result":"Pass",
+ "timeStamp":"2018-03-15"
+ },
+ {
+ "testid":6,
+ "deviceid":1,
+ "testName":"Network Layer",
+ "deviceName":"Router",
+ "execuationDetails":{"output": {"hostname": "google.com","testresult": "fail", "status": "unreachable","statistics": "100% loss","ipaddress": "10.53.122.44","avgTime": "Minimum = 33ms"}},
+ "result":"Fail",
+ "timeStamp":"2018-03-15"
+ },
+ {
+ "testid":7,
+ "deviceid":1,
+ "testName":"Network Layer",
+ "deviceName":"Router",
+ "execuationDetails":{"output": {"hostname": "google.com","testresult": "fail", "status": "unreachable","statistics": "100% loss","ipaddress": "10.53.122.44","avgTime": "Minimum = 50ms"}},
+ "result":"Fail",
+ "timeStamp":"2018-03-15"
+ }
+ ],
+ "status":200,
+ "config":{
+ "method":"GET",
+ "transformRequest":[
+ null
+ ],
+ "transformResponse":[
+ null
+ ],
+ "params":"",
+ "headers":{
+ "Accept":"application/json"
+ },
+ "url":"/findReportByDeviceName/Thu Mar 15 2018 00:00:00 GMT+0530 (India Standard Time)/Fri Mar 16 2018 00:00:00 GMT+0530 (India Standard Time)/Router"
+ },
+ "statusText":""
+} \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllTest.json b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllTest.json
new file mode 100644
index 00000000..fc9b2901
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllTest.json
@@ -0,0 +1,17 @@
+
+{
+ "testList":[
+ {
+ "testId":"1",
+ "testName":"Test1"
+ },
+ {
+ "testId":"2",
+ "testName":"Test2"
+ },
+ {
+ "testId":"3",
+ "testName":"Test3"
+ }
+ ]
+} \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllVNF.json b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllVNF.json
new file mode 100644
index 00000000..49b91a4a
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllVNF.json
@@ -0,0 +1,33 @@
+
+{
+ "vnfList":[
+ {
+ "IpAddress":"1.160.10.240",
+ "HostName":"Vfmodule-vIMS",
+ "Selected":false,
+ "PortNo":"8282",
+ "vnfType": "VimsClearwaterVsp..sproutScaling..module-1"
+ },
+ {
+ "IpAddress":"1.160.10.241",
+ "HostName":"vDNS-vIMS",
+ "Selected":false,
+ "PortNo":"8080",
+ "vnfType": "VimsClearwaterVsp..sproutScaling..module-1"
+ },
+ {
+ "IpAddress":"1.160.10.242",
+ "HostName":"Vfmodule-F5",
+ "Selected":false,
+ "PortNo":"8285",
+ "vnfType": "VimsClearwaterVsp..sproutScaling..module-1"
+ },
+ {
+ "IpAddress":"1.160.10.243",
+ "HostName":"Vfmodule-F6",
+ "Selected":false,
+ "PortNo":"8286",
+ "vnfType": "VimsClearwaterVsp..sproutScaling..module-1"
+ }
+ ]
+} \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllVersion.json b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllVersion.json
new file mode 100644
index 00000000..7d0172e0
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getAllVersion.json
@@ -0,0 +1,133 @@
+{
+ "versionlist":[
+ {
+ "model":"CSR1000V",
+ "vendor":"CISCO",
+ "versionNo":"1.0",
+ "timestamp":"2017/09/01",
+ "router":{
+ "ospf":{
+ "process-id":"1",
+ "networks":{
+ "subnet-ip":"10.10.1.0/24",
+ "area-id":"20"
+ }
+ },
+ "bgp":{
+ "as-number":"2000",
+ "router-id":"10.10.1.2",
+ "neighbors":{
+ "as-number":"1000",
+ "peer-ip":"10.10.2.1"
+ }
+ },
+ "ipsla":[
+ {
+ "cos-entry-number":"40102",
+ "destination-address":"13.13.13.13",
+ "source-address":"10.10.1.1",
+ "customer-name":"Hello Inc"
+ },
+ {
+ "cos-entry-number":"40103",
+ "destination-address":"10.11.12.12",
+ "source-address":"10.10.1.2",
+ "customer-name":"ABC Inc"
+ },
+ {
+ "cos-entry-number":"40105",
+ "destination-address":"12.5.12.12",
+ "source-address":"10.10.1.3",
+ "customer-name":"test Inc"
+ }
+ ]
+ }
+ },
+ {
+ "model":"CSR1000V",
+ "vendor":"CISCO",
+ "versionNo":"2.0",
+ "timestamp":"2017/10/01",
+ "router":{
+ "ospf":{
+ "process-id":"1",
+ "networks":{
+ "subnet-ip":"10.10.1.0/25",
+ "area-id":"20"
+ }
+ },
+ "bgp":{
+ "as-number":"2000",
+ "router-id":"10.10.1.2",
+ "neighbors":{
+ "as-number":"1000",
+ "peer-ip":"10.10.2.1"
+ }
+ },
+ "ipsla":[
+ {
+ "cos-entry-number":"40102",
+ "destination-address":"12.12.12.12",
+ "source-address":"10.10.1.1",
+ "customer-name":"Hello Inc"
+ },
+ {
+ "cos-entry-number":"40103",
+ "destination-address":"10.11.12.12",
+ "source-address":"10.10.1.1",
+ "customer-name":"ABC Inc"
+ },
+ {
+ "cos-entry-number":"40105",
+ "destination-address":"12.5.12.12",
+ "source-address":"10.10.1.2",
+ "customer-name":"test Inc"
+ }
+ ]
+ }
+ },
+ {
+ "model":"CSR1000V",
+ "vendor":"CISCO",
+ "versionNo":"3.0",
+ "timestamp":"2017/10/01",
+ "router":{
+ "ospf":{
+ "process-id":"1",
+ "networks":{
+ "subnet-ip":"10.10.1.0/25",
+ "area-id":"20"
+ }
+ },
+ "bgp":{
+ "as-number":"2000",
+ "router-id":"10.10.1.2",
+ "neighbors":{
+ "as-number":"1000",
+ "peer-ip":"10.10.2.1"
+ }
+ },
+ "ipsla":[
+ {
+ "cos-entry-number":"40102",
+ "destination-address":"12.12.12.12",
+ "source-address":"10.10.1.1",
+ "customer-name":"Hello Inc"
+ },
+ {
+ "cos-entry-number":"40103",
+ "destination-address":"10.11.12.12",
+ "source-address":"10.10.1.1",
+ "customer-name":"ABC Inc"
+ },
+ {
+ "cos-entry-number":"40105",
+ "destination-address":"12.5.12.12",
+ "source-address":"10.10.1.2",
+ "customer-name":"test Inc"
+ }
+ ]
+ }
+ }
+ ]
+} \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getTestResult.json b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getTestResult.json
new file mode 100644
index 00000000..581c8b08
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/sdnc-stubs/getTestResult.json
@@ -0,0 +1,42 @@
+
+{
+ "preTestResponse":[
+ {
+ "ipaddress":"1.160.10.240",
+ "status":"unreachable",
+ "testtype":"Network Layer",
+ "statistics":null,
+ "avgTime":null
+ },
+ {
+ "ipaddress":"1.160.10.240",
+ "status":"unreachable",
+ "testtype":"Protocol Layer",
+ "statistics":null,
+ "avgTime":null
+ },
+ {
+ "ipaddress":"1.160.10.240",
+ "status":"reachable",
+ "testtype":"Network Layer",
+ "statistics":"0% loss",
+ "avgTime":"Minimum = 70ms"
+ }
+ ],
+ "status":200,
+ "config":{
+ "method":"GET",
+ "transformRequest":[
+ null
+ ],
+ "transformResponse":[
+ null
+ ],
+ "params":"",
+ "headers":{
+ "Accept":"application/json"
+ },
+ "url":"/findReportByDeviceName/Thu Mar 15 2018 00:00:00 GMT+0530 (India Standard Time)/Fri Mar 16 2018 00:00:00 GMT+0530 (India Standard Time)/Router"
+ },
+ "statusText":""
+} \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/style/sdnc-style.css b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/style/sdnc-style.css
new file mode 100644
index 00000000..5f192049
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/style/sdnc-style.css
@@ -0,0 +1,543 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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=========================================================
+*/
+
+ body{
+ padding-top:10px;
+ overflow-y:scroll;
+ padding-bottom:10px;
+ }
+
+/* form styling */
+#form-container{
+ margin-bottom:20px;
+ border-radius:5px;
+}
+#form-container .page-header{
+ margin:0; padding:30px;
+ border-top-left-radius:5px; border-top-right-radius:5px;
+ }
+
+ table.tableDisplay{
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+ border-collapse: collapse;
+ width: 100%;
+ table-layout: auto;
+}
+ table.tableDisplay tr:nth-child(even){
+ background-color: #E1E0DA;
+}
+ table.tableDisplay th{
+ padding-top: 12px;
+ padding-bottom: 12px;
+ text-align: left;
+ background: linear-gradient(to top, #f8f8f8 0%, #cce5ff 83%);
+ color: black;
+}
+ table.tableDisplay td,table.tableDisplay th {
+ border: 1px solid #ABABAB;
+ padding: 8px;
+ width:30px;
+ height:10%;
+
+}
+ table.tableDisplay tr:{
+ text-align: left;
+ height:105;;
+}
+ table.tableDisplay tr:hover {
+ background-color:#cce5ff;
+}
+ .first_row{
+ background-color: #cce5ff;
+ color: black;
+ text-align:left;
+}
+ .column {
+ float: left;
+ width: 32.2%;
+ padding: 10px;
+ margin-left:20px;
+ height: 60px;
+ /* Should be removed. Only for demonstration */
+}
+.columnComp{
+ float: left;
+ width: 22%;
+ padding: 10px;
+ margin-left:20px;
+ height: 60px;
+}
+/* Clear floats after the columns */
+ .row:after {
+ content: "";
+ display: table;
+ clear: both;
+}
+ #btnSubmit{
+ background-color: #AED6F1;
+ margin-top:20px;
+ margin-left:20px;
+ margin-bottom:10px;
+ width:75px;
+ height:28px;
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+ border-collapse: collapse;
+ border: 1px solid #5DADE2;
+ font-weight:700;
+}
+ .btndownload{
+ background-color: #AED6F1;
+ margin-top:20px;
+ margin-bottom:10px;
+ margin-left:20px;
+ width:130px;
+ height:30px;
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+ border-collapse: collapse;
+ border: 1px solid #5DADE2;
+ font-weight:700;
+}
+ #exampleInput{
+ margin-left:25px;
+ width:160px;
+}
+ #exampleEndInput{
+ margin-left:10px;
+}
+ .error{
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+ color:Red;
+ font-size: 14px;
+ margin-bottom:10px;
+}
+ .labeltext{
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+}
+ .sort-icon {
+ font-size: 9px;
+ margin-left: 5px;
+}
+ th {
+ cursor:pointer;
+}
+ .heading{
+ margin-top:10px;
+ width:100%;
+ height:45px;
+ margin-bottom:20px;
+ font-family:Trebuchet MS, Arial, Helvetica, sans-serif;
+ margin-top: 15px;
+ margin-right: auto;
+ margin-left: auto;
+ font-size: 20px;
+ background: linear-gradient(to top, #f8f8f8 0%, #cce5ff 83%);
+ padding-top: 15px;
+ padding-bottom: 50px;
+
+}
+form_validationBody{
+ width:900px;
+ margin-left:15px;
+ margin-top:60px;
+ margin-bottom:20px;
+}
+button:hover {
+ position: relative;
+}
+button[title]:hover:after {
+ padding: 4px 8px;
+ position: absolute;
+ left: 0;
+ top: 100%;
+ white-space: nowrap;
+ z-index: 20px;
+ background:red;
+}
+.pagination{
+display: inline-block;
+ padding-left: 0;
+ margin: 5px 0;
+ border-radius: 4px;
+ border: 1px solid #ABABAB;
+ font-size: 13px;
+}
+.pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ line-height: 1.42857143;
+ text-decoration: none;
+ color: #337ab7;
+ background-color: #fff;
+ border: 1px solid #ABABAB;
+ margin-left: -1px;
+}
+.pagination > .active >a{
+ z-index: 3;
+ color: #fff;
+ background-color: #337ab7;
+ border-color: #337ab7;
+ cursor: default;
+}
+.arrowRed {
+font-size: 30px;
+color: red;
+}
+.arrowGreen {
+font-size: 30px;
+color: green;
+}
+.ng-invalid { border: 1px ridge #ddd; }
+.testMain{
+ width:100%;
+ margin-bottom:20px;
+ min-height:400px;
+ margin-top:10px;
+}
+.testNotification{
+ padding:0px;
+}
+.testImgIcon{
+ margin-left:5px;
+ margin-right:10px;
+ padding-right:10px;
+}
+.testCol{
+ background-color:#f2f2f2;
+ width:25%;
+ margin-left:35px;
+}
+.check{
+ margin-left:10px;
+ margin-right:10px;
+}
+.btnRunTest{
+ background-color:#f2f2f2;
+ width:75%;
+ height:75px;
+ margin-left:35px;
+ margin-bottom:35px;
+}
+.ReportMain{
+ width:100%;
+ min-height:400px;
+ margin-top:10px;
+}
+.ReportNotification{
+ padding:0px;
+ margin-right:10px;
+ text-align:center;
+}
+.ReportImgIcon{
+ margin-left:5px;
+ margin-right:10px;
+}
+input[type=checkbox] {
+ padding-right: 3px;
+ !important;
+ }
+
+.header{
+ margin-top:20px;
+ width:1145px;
+ height:45px;
+ margin-bottom:5px;
+ font-family:Trebuchet MS, Arial, Helvetica, sans-serif;
+ font-size: 20px;
+ background: linear-gradient(to top, #f8f8f8 0%, #8F8484 83%);
+ padding-top:15px;
+
+}
+.footer{
+ margin-top:10px;
+ width:1145px;
+ height:30px;
+ margin-bottom:5px;
+ font-family:Trebuchet MS, Arial, Helvetica, sans-serif;
+ font-size: 15px;
+ background: linear-gradient(to top, #f8f8f8 0%, #8F8484 83%);
+ padding-top:15px;
+
+}
+.btn-danger{
+ background-color: #ffb3b3;
+ width: 1090px;
+ text-align: left;
+ color:black;
+ height:45px;
+}
+.btn-success{
+ width: 1090px;
+ text-align: left;
+ color:black;
+ background-color: #66cc66;
+ height:45px;
+
+}
+.btn-warning{
+ width: 1090px;
+ text-align: left;
+ color:black;
+ height:45px;
+ background-color: #ffff99;
+}
+/* Dropdown Button */
+.dropbtn {
+ background-color: #ffe0b3;
+ font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
+ color: #333333;
+ padding: 15px;
+ font-size: 17px;
+ border: none;
+ padding-right:20px;
+ padding-left: 30px;
+}
+
+/* The container <div> - needed to position the dropdown content */
+.dropdown {
+ position: relative;
+ display: inline-block;
+}
+
+/* Dropdown Content (Hidden by Default) */
+.dropdown-content {
+ display: none;
+ position: absolute;
+ background-color: #f1f1f1;
+ min-width: 240px;
+ box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
+ z-index: 1;
+}
+
+/* Links inside the dropdown */
+.dropdown-content a {
+ color: black;
+ padding: 12px 16px;
+ text-decoration: none;
+ display: block;
+ font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
+}
+
+/* Change color of dropdown links on hover */
+.dropdown-content a:hover {background-color: #ddd}
+
+/* Show the dropdown menu on hover */
+.dropdown:hover .dropdown-content {
+ display: block;
+ color: black;
+}
+
+
+.navbar-default .navbar-nav>li> a:hover {background-color: #ddd}
+.btnapply{
+ background-color:#AED6F1 ;
+ margin-top:10px;
+ margin-bottom:10px;
+ margin-right:20px;
+ width:150px;
+ height:30px;
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+ border-collapse: collapse;
+ border: 1px solid #5DADE2;
+ font-weight:700;
+}
+
+
+.btnview{
+ background-color: #AED6F1;
+ margin-top:8px;
+ margin-bottom:10px;
+ margin-right:20px;
+ width:150px;
+ height:30px;
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+ border-collapse: collapse;
+ border: 1px solid #5DADE2;
+ font-weight:700;
+}
+.btnview:hover {background-color: #85C1E9}
+
+.btnview:active {
+ background-color: #85C1E9;
+ box-shadow: 0 5px #85C1E9;
+ transform: translateY(4px);
+}
+
+.btnapplycfg{
+ background-color: #AED6F1;
+ margin-top:8px;
+ margin-bottom:10px;
+ margin-right:20px;
+ width:150px;
+ height:30px;
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+ border-collapse: collapse;
+ border: 1px solid #5DADE2;
+ font-weight:700;
+}
+.btnapplycfg:hover {background-color: #85C1E9}
+
+.btnapplycfg:active {
+ background-color: #85C1E9;
+ box-shadow: 0 5px #85C1E9;
+ transform: translateY(4px);
+}
+
+.navbar-default .navbar-nav>li> a:hover {background-color: #FFFF00}
+
+ .btnCompareVersion{
+ background-color: #AED6F1;
+ margin-top:8px;
+ margin-bottom:10px;
+ margin-right:20px;
+ width:150px;
+ height:30px;
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+ border-collapse: collapse;
+ border: 1px solid #5DADE2;
+ font-weight:700;
+}
+
+.btnCompareVersion:hover {background-color: #85C1E9}
+
+.btnCompareVersion:active {
+ background-color: #85C1E9;
+ box-shadow: 0 5px #85C1E9;
+ transform: translateY(4px);
+ border-collapse: collapse;
+ border: 2px solid #5DADE2;
+}
+
+.btnapply{
+ background-color: #AED6F1;
+ margin-top:8px;
+ margin-bottom:10px;
+ margin-right:20px;
+ width:150px;
+ height:30px;
+ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
+ border-collapse: collapse;
+ border: 1px solid #5DADE2;
+ font-weight:700;
+}
+
+.btnapply:hover {background-color: #85C1E9}
+
+.btnapply:active {
+ background-color: #85C1E9;
+ box-shadow: 0 5px #85C1E9;
+ transform: translateY(4px);
+ border-collapse: collapse;
+ border: 2px solid #5DADE2;
+}
+
+.Formclass{
+ width:100%;
+ margin-top:30px;
+ min-height:10000;
+}
+
+.VersionMain{
+ width:100%;
+ margin-top:60px;
+ min-height:2200px;
+ border: 0.5px solid lightgrey;
+}
+
+.versionHeading{
+ width:100%;
+ height:35px;
+ margin-bottom:20px;
+ background-color: #cce5ff;
+ font-family:Trebuchet MS, Arial, Helvetica, sans-serif;
+ margin-right: -15px;
+ font-size: 15px;
+ padding-top:5px;
+ color:black;
+
+}
+{
+ box-sizing: border-box;
+
+}
+
+.columnsVersion {
+ float: left;
+ width: 33.3%;
+ padding: 8px;
+ border-radius: 15px;
+}
+
+.columnsVersionview{
+ float: left;
+ width: 50%;
+ padding: 8px;
+ border-radius: 15px;
+}
+
+.price {
+ list-style-type: none;
+ border: 1px solid grey;
+ border-radius: 25px;
+ margin: 0;
+ padding: 0;
+ -webkit-transition: 0.3s;
+ transition: 0.3s;
+}
+
+.price:hover {
+ box-shadow: 0 8px 12px 0 rgba(0,0,0,0.2)
+}
+
+.price .headerVersion {
+ background-color:#484848;
+ color: white;
+ font-size: 15px;
+ border-radius: 50px;
+ height:40px;
+}
+
+.price li {
+ border-bottom: 1px solid #eee;
+ padding: 5px;
+ text-align: center;
+ font-size: 12px;
+ word-wrap: break-word;
+}
+
+.price .grey {
+ background-color: #FFCCCC;
+ font-size: 12px;
+ margin-left:20px;
+ margin-right:20px;
+}
+
+@media only screen and (max-width: 600px) {
+ .columnsVersion {
+ width: 100%;
+ }
+}
+.separator{
+ border-color:darkgrey;
+ min-height:2px;
+}
+.listHeading{
+ background-color: #ffcccc;
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/style/w3.css b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/style/w3.css
new file mode 100644
index 00000000..e73d2696
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/style/w3.css
@@ -0,0 +1,231 @@
+/* W3.CSS 4.10 February 2018 by Jan Egil and Borge Refsnes */
+html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}
+/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */
+html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}
+article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}
+audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline}
+audio:not([controls]){display:none;height:0}[hidden],template{display:none}
+a{background-color:transparent;-webkit-text-decoration-skip:objects}
+a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}
+dfn{font-style:italic}mark{background:#ff0;color:#000}
+small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
+sub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}img{border-style:none}svg:not(:root){overflow:hidden}
+code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible}
+button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:bold}
+button,input{overflow:visible}button,select{text-transform:none}
+button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}
+button::-moz-focus-inner, [type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner{border-style:none;padding:0}
+button:-moz-focusring, [type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring{outline:1px dotted ButtonText}
+fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}
+legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}
+[type=checkbox],[type=radio]{padding:0}
+[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}
+[type=search]{-webkit-appearance:textfield;outline-offset:-2px}
+[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}
+::-webkit-input-placeholder{color:inherit;opacity:0.54}
+::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}
+/* End extract */
+html,body{font-family:Verdana,sans-serif;font-size:15px;line-height:1.5}html{overflow-x:hidden}
+h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}.w3-serif{font-family:serif}
+h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin:10px 0}.w3-wide{letter-spacing:4px}
+hr{border:0;border-top:1px solid #eee;margin:20px 0}
+.w3-image{max-width:100%;height:auto}img{vertical-align:middle}a{color:inherit}
+.w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.w3-table-all{border:1px solid #ccc}
+.w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1}
+.w3-table-all tr:nth-child(odd){background-color:#fff}.w3-table-all tr:nth-child(even){background-color:#f1f1f1}
+.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}.w3-centered tr th,.w3-centered tr td{text-align:center}
+.w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top}
+.w3-table th:first-child,.w3-table td:first-child,.w3-table-all th:first-child,.w3-table-all td:first-child{padding-left:16px}
+.w3-btn,.w3-button{border:none;display:inline-block;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap}
+.w3-btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}
+.w3-btn,.w3-button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
+.w3-disabled,.w3-btn:disabled,.w3-button:disabled{cursor:not-allowed;opacity:0.3}.w3-disabled *,:disabled *{pointer-events:none}
+.w3-btn.w3-disabled:hover,.w3-btn:disabled:hover{box-shadow:none}
+.w3-badge,.w3-tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.w3-badge{border-radius:50%}
+.w3-ul{list-style-type:none;padding:0;margin:0}.w3-ul li{padding:8px 16px;border-bottom:1px solid #ddd}.w3-ul li:last-child{border-bottom:none}
+.w3-tooltip,.w3-display-container{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block}
+.w3-ripple:active{opacity:0.5}.w3-ripple{transition:opacity 0s}
+.w3-input{padding:8px;display:block;border:none;border-bottom:1px solid #ccc;width:100%}
+.w3-select{padding:9px 0;width:100%;border:none;border-bottom:1px solid #ccc}
+.w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer}
+.w3-dropdown-hover:hover .w3-dropdown-content{display:block}
+.w3-dropdown-hover:first-child,.w3-dropdown-click:hover{background-color:#ccc;color:#000}
+.w3-dropdown-hover:hover > .w3-button:first-child,.w3-dropdown-click:hover > .w3-button:first-child{background-color:#ccc;color:#000}
+.w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1}
+.w3-check,.w3-radio{width:24px;height:24px;position:relative;top:6px}
+.w3-sidebar{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto}
+.w3-bar-block .w3-dropdown-hover,.w3-bar-block .w3-dropdown-click{width:100%}
+.w3-bar-block .w3-dropdown-hover .w3-dropdown-content,.w3-bar-block .w3-dropdown-click .w3-dropdown-content{min-width:100%}
+.w3-bar-block .w3-dropdown-hover .w3-button,.w3-bar-block .w3-dropdown-click .w3-button{width:100%;text-align:left;padding:8px 16px}
+.w3-main,#main{transition:margin-left .4s}
+.w3-modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)}
+.w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px}
+.w3-bar{width:100%;overflow:hidden}.w3-center .w3-bar{display:inline-block;width:auto}
+.w3-bar .w3-bar-item{padding:8px 16px;float:left;width:auto;border:none;display:block;outline:0}
+.w3-bar .w3-dropdown-hover,.w3-bar .w3-dropdown-click{position:static;float:left}
+.w3-bar .w3-button{white-space:normal}
+.w3-bar-block .w3-bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0}
+.w3-bar-block.w3-center .w3-bar-item{text-align:center}.w3-block{display:block;width:100%}
+.w3-responsive{display:block;overflow-x:auto}
+.w3-container:after,.w3-container:before,.w3-panel:after,.w3-panel:before,.w3-row:after,.w3-row:before,.w3-row-padding:after,.w3-row-padding:before,
+.w3-cell-row:before,.w3-cell-row:after,.w3-clear:after,.w3-clear:before,.w3-bar:before,.w3-bar:after{content:"";display:table;clear:both}
+.w3-col,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{float:left;width:100%}
+.w3-col.s1{width:8.33333%}.w3-col.s2{width:16.66666%}.w3-col.s3{width:24.99999%}.w3-col.s4{width:33.33333%}
+.w3-col.s5{width:41.66666%}.w3-col.s6{width:49.99999%}.w3-col.s7{width:58.33333%}.w3-col.s8{width:66.66666%}
+.w3-col.s9{width:74.99999%}.w3-col.s10{width:83.33333%}.w3-col.s11{width:91.66666%}.w3-col.s12{width:99.99999%}
+@media (min-width:601px){.w3-col.m1{width:8.33333%}.w3-col.m2{width:16.66666%}.w3-col.m3,.w3-quarter{width:24.99999%}.w3-col.m4,.w3-third{width:33.33333%}
+.w3-col.m5{width:41.66666%}.w3-col.m6,.w3-half{width:49.99999%}.w3-col.m7{width:58.33333%}.w3-col.m8,.w3-twothird{width:66.66666%}
+.w3-col.m9,.w3-threequarter{width:74.99999%}.w3-col.m10{width:83.33333%}.w3-col.m11{width:91.66666%}.w3-col.m12{width:99.99999%}}
+@media (min-width:993px){.w3-col.l1{width:8.33333%}.w3-col.l2{width:16.66666%}.w3-col.l3{width:24.99999%}.w3-col.l4{width:33.33333%}
+.w3-col.l5{width:41.66666%}.w3-col.l6{width:49.99999%}.w3-col.l7{width:58.33333%}.w3-col.l8{width:66.66666%}
+.w3-col.l9{width:74.99999%}.w3-col.l10{width:83.33333%}.w3-col.l11{width:91.66666%}.w3-col.l12{width:99.99999%}}
+.w3-content{max-width:980px;margin:auto}.w3-rest{overflow:hidden}
+.w3-cell-row{display:table;width:100%}.w3-cell{display:table-cell}
+.w3-cell-top{vertical-align:top}.w3-cell-middle{vertical-align:middle}.w3-cell-bottom{vertical-align:bottom}
+.w3-hide{display:none!important}.w3-show-block,.w3-show{display:block!important}.w3-show-inline-block{display:inline-block!important}
+@media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px}
+.w3-dropdown-hover.w3-mobile .w3-dropdown-content,.w3-dropdown-click.w3-mobile .w3-dropdown-content{position:relative}
+.w3-hide-small{display:none!important}.w3-mobile{display:block;width:100%!important}.w3-bar-item.w3-mobile,.w3-dropdown-hover.w3-mobile,.w3-dropdown-click.w3-mobile{text-align:center}
+.w3-dropdown-hover.w3-mobile,.w3-dropdown-hover.w3-mobile .w3-btn,.w3-dropdown-hover.w3-mobile .w3-button,.w3-dropdown-click.w3-mobile,.w3-dropdown-click.w3-mobile .w3-btn,.w3-dropdown-click.w3-mobile .w3-button{width:100%}}
+@media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}}
+@media (min-width:993px){.w3-modal-content{width:900px}.w3-hide-large{display:none!important}.w3-sidebar.w3-collapse{display:block!important}}
+@media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}}
+@media (max-width:992px){.w3-sidebar.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}}
+.w3-top,.w3-bottom{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0}
+.w3-overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2}
+.w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0}
+.w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0}
+.w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)}
+.w3-display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)}
+.w3-display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)}
+.w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}
+.w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}
+.w3-display-container:hover .w3-display-hover{display:block}.w3-display-container:hover span.w3-display-hover{display:inline-block}.w3-display-hover{display:none}
+.w3-display-position{position:absolute}
+.w3-circle{border-radius:50%}
+.w3-round-small{border-radius:2px}.w3-round,.w3-round-medium{border-radius:4px}.w3-round-large{border-radius:8px}.w3-round-xlarge{border-radius:16px}.w3-round-xxlarge{border-radius:32px}
+.w3-row-padding,.w3-row-padding>.w3-half,.w3-row-padding>.w3-third,.w3-row-padding>.w3-twothird,.w3-row-padding>.w3-threequarter,.w3-row-padding>.w3-quarter,.w3-row-padding>.w3-col{padding:0 8px}
+.w3-container,.w3-panel{padding:0.01em 16px}.w3-panel{margin-top:16px;margin-bottom:16px}
+.w3-code,.w3-codespan{font-family:Consolas,"courier new";font-size:16px}
+.w3-code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word}
+.w3-codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%}
+.w3-card,.w3-card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)}
+.w3-card-4,.w3-hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19)}
+.w3-spin{animation:w3-spin 2s infinite linear}@keyframes w3-spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}
+.w3-animate-fading{animation:fading 10s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}}
+.w3-animate-opacity{animation:opac 0.8s}@keyframes opac{from{opacity:0} to{opacity:1}}
+.w3-animate-top{position:relative;animation:animatetop 0.4s}@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}}
+.w3-animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}}
+.w3-animate-right{position:relative;animation:animateright 0.4s}@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}}
+.w3-animate-bottom{position:relative;animation:animatebottom 0.4s}@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}}
+.w3-animate-zoom {animation:animatezoom 0.6s}@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}}
+.w3-animate-input{transition:width 0.4s ease-in-out}.w3-animate-input:focus{width:100%!important}
+.w3-opacity,.w3-hover-opacity:hover{opacity:0.60}.w3-opacity-off,.w3-hover-opacity-off:hover{opacity:1}
+.w3-opacity-max{opacity:0.25}.w3-opacity-min{opacity:0.75}
+.w3-greyscale-max,.w3-grayscale-max,.w3-hover-greyscale:hover,.w3-hover-grayscale:hover{filter:grayscale(100%)}
+.w3-greyscale,.w3-grayscale{filter:grayscale(75%)}.w3-greyscale-min,.w3-grayscale-min{filter:grayscale(50%)}
+.w3-sepia{filter:sepia(75%)}.w3-sepia-max,.w3-hover-sepia:hover{filter:sepia(100%)}.w3-sepia-min{filter:sepia(50%)}
+.w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}.w3-medium{font-size:15px!important}.w3-large{font-size:18px!important}
+.w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important}
+.w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}.w3-justify{text-align:justify!important}.w3-center{text-align:center!important}
+.w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important}
+.w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important}
+.w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important}
+.w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important}
+.w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important}
+.w3-section,.w3-code{margin-top:16px!important;margin-bottom:16px!important}
+.w3-margin{margin:16px!important}.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important}
+.w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important}
+.w3-padding-small{padding:4px 8px!important}.w3-padding{padding:8px 16px!important}.w3-padding-large{padding:12px 24px!important}
+.w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important}
+.w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important}
+.w3-padding-64{padding-top:64px!important;padding-bottom:64px!important}
+.w3-left{float:left!important}.w3-right{float:right!important}
+.w3-button:hover{color:#000!important;background-color:#ccc!important}
+.w3-transparent,.w3-hover-none:hover{background-color:transparent!important}
+.w3-hover-none:hover{box-shadow:none!important}
+/* Colors */
+.w3-amber,.w3-hover-amber:hover{color:#000!important;background-color:#ffc107!important}
+.w3-aqua,.w3-hover-aqua:hover{color:#000!important;background-color:#00ffff!important}
+.w3-blue,.w3-hover-blue:hover{color:#fff!important;background-color:#2196F3!important}
+.w3-light-blue,.w3-hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important}
+.w3-brown,.w3-hover-brown:hover{color:#fff!important;background-color:#795548!important}
+.w3-cyan,.w3-hover-cyan:hover{color:#000!important;background-color:#00bcd4!important}
+.w3-blue-grey,.w3-hover-blue-grey:hover,.w3-blue-gray,.w3-hover-blue-gray:hover{color:#fff!important;background-color:#607d8b!important}
+.w3-green,.w3-hover-green:hover{color:#fff!important;background-color:#4CAF50!important}
+.w3-light-green,.w3-hover-light-green:hover{color:#000!important;background-color:#8bc34a!important}
+.w3-indigo,.w3-hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important}
+.w3-khaki,.w3-hover-khaki:hover{color:#000!important;background-color:#f0e68c!important}
+.w3-lime,.w3-hover-lime:hover{color:#000!important;background-color:#cddc39!important}
+.w3-orange,.w3-hover-orange:hover{color:#000!important;background-color:#ff9800!important}
+.w3-deep-orange,.w3-hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important}
+.w3-pink,.w3-hover-pink:hover{color:#fff!important;background-color:#e91e63!important}
+.w3-purple,.w3-hover-purple:hover{color:#fff!important;background-color:#9c27b0!important}
+.w3-deep-purple,.w3-hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important}
+.w3-red,.w3-hover-red:hover{color:#fff!important;background-color:#f44336!important}
+.w3-sand,.w3-hover-sand:hover{color:#000!important;background-color:#fdf5e6!important}
+.w3-teal,.w3-hover-teal:hover{color:#fff!important;background-color:#009688!important}
+.w3-yellow,.w3-hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important}
+.w3-white,.w3-hover-white:hover{color:#000!important;background-color:#fff!important}
+.w3-black,.w3-hover-black:hover{color:#fff!important;background-color:#000!important}
+.w3-grey,.w3-hover-grey:hover,.w3-gray,.w3-hover-gray:hover{color:#000!important;background-color:#9e9e9e!important}
+.w3-light-grey,.w3-hover-light-grey:hover,.w3-light-gray,.w3-hover-light-gray:hover{color:#000!important;background-color:#f1f1f1!important}
+.w3-dark-grey,.w3-hover-dark-grey:hover,.w3-dark-gray,.w3-hover-dark-gray:hover{color:#fff!important;background-color:#616161!important}
+.w3-pale-red,.w3-hover-pale-red:hover{color:#000!important;background-color:#ffdddd!important}
+.w3-pale-green,.w3-hover-pale-green:hover{color:#000!important;background-color:#ddffdd!important}
+.w3-pale-yellow,.w3-hover-pale-yellow:hover{color:#000!important;background-color:#ffffcc!important}
+.w3-pale-blue,.w3-hover-pale-blue:hover{color:#000!important;background-color:#ddffff!important}
+.w3-text-amber,.w3-hover-text-amber:hover{color:#ffc107!important}
+.w3-text-aqua,.w3-hover-text-aqua:hover{color:#00ffff!important}
+.w3-text-blue,.w3-hover-text-blue:hover{color:#2196F3!important}
+.w3-text-light-blue,.w3-hover-text-light-blue:hover{color:#87CEEB!important}
+.w3-text-brown,.w3-hover-text-brown:hover{color:#795548!important}
+.w3-text-cyan,.w3-hover-text-cyan:hover{color:#00bcd4!important}
+.w3-text-blue-grey,.w3-hover-text-blue-grey:hover,.w3-text-blue-gray,.w3-hover-text-blue-gray:hover{color:#607d8b!important}
+.w3-text-green,.w3-hover-text-green:hover{color:#4CAF50!important}
+.w3-text-light-green,.w3-hover-text-light-green:hover{color:#8bc34a!important}
+.w3-text-indigo,.w3-hover-text-indigo:hover{color:#3f51b5!important}
+.w3-text-khaki,.w3-hover-text-khaki:hover{color:#b4aa50!important}
+.w3-text-lime,.w3-hover-text-lime:hover{color:#cddc39!important}
+.w3-text-orange,.w3-hover-text-orange:hover{color:#ff9800!important}
+.w3-text-deep-orange,.w3-hover-text-deep-orange:hover{color:#ff5722!important}
+.w3-text-pink,.w3-hover-text-pink:hover{color:#e91e63!important}
+.w3-text-purple,.w3-hover-text-purple:hover{color:#9c27b0!important}
+.w3-text-deep-purple,.w3-hover-text-deep-purple:hover{color:#673ab7!important}
+.w3-text-red,.w3-hover-text-red:hover{color:#f44336!important}
+.w3-text-sand,.w3-hover-text-sand:hover{color:#fdf5e6!important}
+.w3-text-teal,.w3-hover-text-teal:hover{color:#009688!important}
+.w3-text-yellow,.w3-hover-text-yellow:hover{color:#d2be0e!important}
+.w3-text-white,.w3-hover-text-white:hover{color:#fff!important}
+.w3-text-black,.w3-hover-text-black:hover{color:#000!important}
+.w3-text-grey,.w3-hover-text-grey:hover,.w3-text-gray,.w3-hover-text-gray:hover{color:#757575!important}
+.w3-text-light-grey,.w3-hover-text-light-grey:hover,.w3-text-light-gray,.w3-hover-text-light-gray:hover{color:#f1f1f1!important}
+.w3-text-dark-grey,.w3-hover-text-dark-grey:hover,.w3-text-dark-gray,.w3-hover-text-dark-gray:hover{color:#3a3a3a!important}
+.w3-border-amber,.w3-hover-border-amber:hover{border-color:#ffc107!important}
+.w3-border-aqua,.w3-hover-border-aqua:hover{border-color:#00ffff!important}
+.w3-border-blue,.w3-hover-border-blue:hover{border-color:#2196F3!important}
+.w3-border-light-blue,.w3-hover-border-light-blue:hover{border-color:#87CEEB!important}
+.w3-border-brown,.w3-hover-border-brown:hover{border-color:#795548!important}
+.w3-border-cyan,.w3-hover-border-cyan:hover{border-color:#00bcd4!important}
+.w3-border-blue-grey,.w3-hover-border-blue-grey:hover,.w3-border-blue-gray,.w3-hover-border-blue-gray:hover{border-color:#607d8b!important}
+.w3-border-green,.w3-hover-border-green:hover{border-color:#4CAF50!important}
+.w3-border-light-green,.w3-hover-border-light-green:hover{border-color:#8bc34a!important}
+.w3-border-indigo,.w3-hover-border-indigo:hover{border-color:#3f51b5!important}
+.w3-border-khaki,.w3-hover-border-khaki:hover{border-color:#f0e68c!important}
+.w3-border-lime,.w3-hover-border-lime:hover{border-color:#cddc39!important}
+.w3-border-orange,.w3-hover-border-orange:hover{border-color:#ff9800!important}
+.w3-border-deep-orange,.w3-hover-border-deep-orange:hover{border-color:#ff5722!important}
+.w3-border-pink,.w3-hover-border-pink:hover{border-color:#e91e63!important}
+.w3-border-purple,.w3-hover-border-purple:hover{border-color:#9c27b0!important}
+.w3-border-deep-purple,.w3-hover-border-deep-purple:hover{border-color:#673ab7!important}
+.w3-border-red,.w3-hover-border-red:hover{border-color:#f44336!important}
+.w3-border-sand,.w3-hover-border-sand:hover{border-color:#fdf5e6!important}
+.w3-border-teal,.w3-hover-border-teal:hover{border-color:#009688!important}
+.w3-border-yellow,.w3-hover-border-yellow:hover{border-color:#ffeb3b!important}
+.w3-border-white,.w3-hover-border-white:hover{border-color:#fff!important}
+.w3-border-black,.w3-hover-border-black:hover{border-color:#000!important}
+.w3-border-grey,.w3-hover-border-grey:hover,.w3-border-gray,.w3-hover-border-gray:hover{border-color:#9e9e9e!important}
+.w3-border-light-grey,.w3-hover-border-light-grey:hover,.w3-border-light-gray,.w3-hover-border-light-gray:hover{border-color:#f1f1f1!important}
+.w3-border-dark-grey,.w3-hover-border-dark-grey:hover,.w3-border-dark-gray,.w3-hover-border-dark-gray:hover{border-color:#616161!important}
+.w3-border-pale-red,.w3-hover-border-pale-red:hover{border-color:#ffe7e7!important}.w3-border-pale-green,.w3-hover-border-pale-green:hover{border-color:#e7ffe7!important}
+.w3-border-pale-yellow,.w3-hover-border-pale-yellow:hover{border-color:#ffffcc!important}.w3-border-pale-blue,.w3-hover-border-pale-blue:hover{border-color:#e7ffff!important} \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/footer.html b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/footer.html
new file mode 100644
index 00000000..9d252bf0
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/footer.html
@@ -0,0 +1,3 @@
+<div class="footer">
+ <p style="margin-left:20px;text-align:center"> @Copyright 2018 All rights reserved</p>
+</div>
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-applyConfig.jsp b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-applyConfig.jsp
new file mode 100644
index 00000000..76293840
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-applyConfig.jsp
@@ -0,0 +1,48 @@
+<!-- /*
+ * ============LICENSE_START=======================================================
+ * ONAP : SDNC-FEATURES
+ * ================================================================================
+ * Copyright 2018 TechMahindra
+ *=================================================================================
+ * 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=========================================================
+ */
+ -->
+<div class="ReportMain" >
+ <div class="heading"><img src="static/images/Apply.jpg" width=70 height="40" style="margin-left:5px;">&nbsp;&nbsp;Apply Configruation</div>
+ <form name="myForm" style="background-color:#f2f2f2; border: 1px solid #ddd;">
+ <div growl></div>
+
+ <div class="row" style="background-color:#f2f2f2;width:100%;margin-left:1px;height:75px">
+ <div class="column" style="width:30%;background-color:#f2f2f2;height:55px;margin-left:40px;">
+ <label class="labeltext">Select Avaliable VNF</label>
+ </div>
+ <div class="column" style="background-color:#f2f2f2;width:60%;height:55px;margin-left:0px;">
+ <select class="form-control" style="width:100%;margin-top:0px;" ng-model="selectedValueVnf" ng-change="selectVnf(selectedValueVnf)">
+ <option ng-repeat="vnf in objvnfList" value="{{vnf.vnfid}}">VnfId- {{vnf.vnfid}}&nbsp;VnfName- {{vnf.vnfname}}</option>
+ <option value="">Select VNFId</option>
+ </select>
+ </div>
+ </div>
+ <div class="row" style="background-color:#f2f2f2;width:100%;margin-left:1px;height:100px">
+ <div class="column" style="width:30%;height:55px;margin-left:35px;">
+ <input type="file" style="width:300px" id="myFileInput" ng-model="file" accept=".json"/>
+ </div>
+ <div class="column" style="width:50%;height:55px;margin-left:10px;">
+ <button type="submit" class="btnapply" ng-click="submit()">Apply Config</button>
+ </div>
+ </div>
+ </form>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-backupConfig.html b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-backupConfig.html
new file mode 100644
index 00000000..15c1c4b0
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-backupConfig.html
@@ -0,0 +1,39 @@
+<!-- /*
+ * ============LICENSE_START=======================================================
+ * ONAP : SDNC-FEATURES
+ * ================================================================================
+ * Copyright 2018 TechMahindra
+ *=================================================================================
+ * 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=========================================================
+ */
+ -->
+<div class="ReportMain">
+ <div class="heading"><img src="static/images/backupConfig.png" width=50 height="40" style="margin-left:5px;">&nbsp;&nbsp;Backup Configruation
+ <label style="float: right; margin-right: 84px;"><font size='2'>Last Updated Time : <span style="color:red">{{lastModifiedTime}}</span></font></label>
+ </div>
+ <form name="myForm">
+ <div growl></div>
+ <div class="row">
+
+ </div>
+ <div class="row">
+ <div class="column" style="background-color:#f2f2f2;width:97%;border: 1px solid #ddd;">
+ <input type="button" class="btnapply" ng-click="invokeBackup()" value=" Config Backup" />
+ </div>
+ </div>
+ <div class="row">
+
+ </div>
+ </form>
+</div> \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-compareConfig.html b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-compareConfig.html
new file mode 100644
index 00000000..93ab7b64
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-compareConfig.html
@@ -0,0 +1,85 @@
+ <!-- /*
+ * ============LICENSE_START=======================================================
+ * ONAP : SDNC-FEATURES
+ * ================================================================================
+ * Copyright 2018 TechMahindra
+ *=================================================================================
+ * 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=========================================================
+ */
+ -->
+<div class="ReportMain">
+ <div class="heading"><img src="static/images/compare.png" width=45 height="40" style="margin-left:5px;">&nbsp;&nbsp;Compare Configruation</div>
+ <form name="myForm" class="Formclass">
+ <div growl></div>
+ <div class="row" style="background-color:#f2f2f2;width:100%;margin-left:1px; border: 1px solid #ddd;">
+ <div class="column" style="width:30%;background-color:#f2f2f2;height:55px;margin-left:40px;">
+ <label class="labeltext">Select Avaliable VNF</label>
+ </div>
+ <div class="column" style="background-color:#f2f2f2;width:60%;height:55px;margin-left:0px;">
+ <select class="form-control" style="width:100%;margin-top:0px;" ng-model="selectedValueVnf" ng-change="selectVnf(selectedValueVnf)">
+ <option ng-repeat="vnf in objvnfList" value="{{vnf.vnfid}}">VnfId- {{vnf.vnfid}}&nbsp;VnfName- {{vnf.vnfname}}</option>
+ <option value="">Select VNFId</option>
+ </select>
+ </div>
+ </div>
+ <table class="tableDisplay" ng-show="ShowResult" id="tableToExport" style="margin-top:15px;">
+ <tr class="first_row" style="background-color:#6D7B8D;">
+ <th>SNo.
+ </th>
+ <th>VersionNo
+ </th>
+ <th>Backup Date
+ </th>
+ <th>Updated Date
+ </th>
+ <th>Action</th>
+ </tr>
+ <tr ng-repeat="version in pagedItems[currentPage] | orderBy:sort.sortingOrder:sort.reverse">
+ <td>{{$index+1}}</td>
+ <td>{{version.vnfversion}}</td>
+ <td>{{version.createdAt}}</td>
+ <td>{{version.updatedAt}}</td>
+ <td><input type=checkbox ng-model="version.selected">
+ </td>
+ </tr>
+
+ <td colspan="5">
+ <!-- ng-show="pagedItems.length > 5" -->
+ <ul class="pagination pull-right">
+ <li ng-class="{disabled: currentPage == 0}"><a href
+ ng-click="prevPage()">&laquo;</a></li>
+ <li ng-repeat="n in range(pagedItems.length, currentPage, currentPage + gap) "
+ ng-class="{active: n == currentPage}" ng-click="setPage()"><a
+ href ng-bind="n + 1">1</a></li>
+ <li ng-class="{disabled: (currentPage) == pagedItems.length - 1}">
+ <a href ng-click="nextPage()">&raquo;</a>
+ </li>
+ </ul>
+ </td>
+
+ <tr>
+ <td colspan="5">
+ <div class="row pull-right">
+ <button type="button" class="btnview" ng-click="ViewConfig(objVersion)" ng-show="showView" ng-model="version.selected" >View Config</button>
+ <button type="button" class="btnapplycfg" ng-click="ApplyConfig(objVersion)" >Apply Config</button>
+ <button type="button" class="btnCompareVersion" ng-click="CompareConfig(objVersion)" ng-show="showCompare" ng-model="version.selected" >Compare Config</button>
+ </div>
+ </td>
+ </tr>
+ </table>
+ <div id="compare" ng-form = "compare" ng-include="" src="'static/views/form-deviceConfig.html'"></div>
+ <div id="view" ng-form = "view" ng-include="" src="'static/views/form-deviceConfigView.html'"></div>
+
+ </form>
+</div> \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-deviceConfig.html b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-deviceConfig.html
new file mode 100644
index 00000000..54b39b27
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-deviceConfig.html
@@ -0,0 +1,332 @@
+<!-- /*
+ * ============LICENSE_START=======================================================
+ * ONAP : SDNC-FEATURES
+ * ================================================================================
+ * Copyright 2018 TechMahindra
+ *=================================================================================
+ * 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=========================================================
+ */
+ -->
+<!-- <div class="VersionMain" ng-show="showResult">
+ <div class="versionHeading"><img src="static/images/compare.jpg" width=25 height="25" style="margin-left:5px;">&nbsp;&nbsp;Version Comparision Result</div>
+ <div class="columnsVersion">
+ <ul class="price">
+ <li class="headerVersion">Attributes</li>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Config Details</li>
+ <li ng-repeat="(key,value) in objCompareModel1.versionDetails">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology</li>
+ <li ng-repeat="(key,value) in objCompareModel1.topologyInfo">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;" ng-if="objCompareModel1.networkTopologyInfo.length>=1">
+ <li class="listHeading">Network Topology</li>
+ <li ng-repeat="(key,value) in objCompareModel1.networkTopologyInfo">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Operation Status</li>
+ <li ng-repeat="(key,value) in objCompareModel1.operationStatus">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology Identifer</li>
+ <li ng-repeat="(key,value) in objCompareModel1.vnfTopologyIdentifier">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ </ul>
+ </div>
+ <div class="columnsVersion">
+ <ul class="price">
+ <li class="headerVersion" style="background-color:#807C7C">Version {{objCompareModel1.versionDetails.vnfversion}}</li>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Config Details</li>
+ <li ng-repeat="(key,value) in objCompareModel1.versionDetails">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology</li>
+ <li ng-repeat="(key,value) in objCompareModel1.topologyInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;" ng-if="objCompareModel1.networkTopologyInfo.length>=1">
+ <li class="listHeading">Network Topology</li>
+ <li ng-repeat="(key,value) in objCompareModel1.networkTopologyInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Operation Status</li>
+ <li ng-repeat="(key,value) in objCompareModel1.operationStatus">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology Identifer</li>
+ <li ng-repeat="(key,value) in objCompareModel1.vnfTopologyIdentifier">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ </ul>
+ </div>
+ <div class="columnsVersion">
+ <ul class="price">
+ <li class="headerVersion"style="background-color:#807C7C">Version {{objCompareModel2.versionDetails.vnfversion}}</li>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Config Details</li>
+ <li ng-repeat="(key,value) in objCompareModel2.versionDetails">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology</li>
+ <li ng-repeat="(key,value) in objCompareModel2.topologyInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;" ng-if="objCompareModel1.networkTopologyInfo.length>=1">
+ <li class="listHeading">Network Topology</li>
+ <li ng-repeat="(key,value) in objCompareModel2.networkTopologyInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Operation Status</li>
+ <li ng-repeat="(key,value) in objCompareModel2.operationStatus">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology Identifer</li>
+ <li ng-repeat="(key,value) in objCompareModel2.vnfTopologyIdentifier">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ </ul>
+ </div>
+</div> -->
+
+
+
+<div id = "Div1" class="VersionMain" ng-show="showResult">
+ <div class="versionHeading"><img src="static/images/compare.jpg" width=25 height="25" style="margin-left:5px;">&nbsp;&nbsp;Version Comparision Result</div>
+ <div class="columnsVersion">
+ <ul class="price">
+ <li class="headerVersion">Attributes</li>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Config Details</li>
+ <li ng-repeat="(key,value) in objCompareModel1.versionDetails">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF ID</li>
+ <li ng-repeat="(key,value) in objCompareModel1.vnfIdInfo">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">SERVICE STATUS</li>
+ <li ng-repeat="(key,value) in objCompareModel1.serviceStatusInfo">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology Identifer</li>
+ <li ng-repeat="(key,value) in objCompareModel1.vnfTopologyIdentifier">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Operation Status</li>
+ <li ng-repeat="(key,value) in objCompareModel1.operationStatus">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Request Info</li>
+ <li ng-repeat="(key,value) in objCompareModel1.vnfRequestInfo">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Service Info</li>
+ <li ng-repeat="(key,value) in objCompareModel1.serviceInfo">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Service Request Header</li>
+ <li ng-repeat="(key,value) in objCompareModel1.requestHeader">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Request Information</li>
+ <li ng-repeat="(key,value) in objCompareModel1.requestInfo">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology</li>
+ <li ng-repeat="(key,value) in objCompareModel1.topologyInfo">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ </ul>
+ </div>
+
+ <div class="columnsVersion">
+ <ul class="price">
+ <li class="headerVersion" style="background-color:#807C7C">Version {{objCompareModel1.versionDetails.vnfversion}}</li>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Config Details</li>
+ <li ng-repeat="(key,value) in objCompareModel1.versionDetails">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;" >
+ <li class="listHeading">VNF ID</li>
+ <li ng-repeat="(key,value) in objCompareModel1.vnfIdInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">SERVICE STATUS</li>
+ <li ng-repeat="(key,value) in objCompareModel1.serviceStatusInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology Identifer</li>
+ <li ng-repeat="(key,value) in objCompareModel1.vnfTopologyIdentifier">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Operation Status</li>
+ <li ng-repeat="(key,value) in objCompareModel1.operationStatus">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Request Info</li>
+ <li ng-repeat="(key,value) in objCompareModel1.vnfRequestInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Service Info</li>
+ <li ng-repeat="(key,value) in objCompareModel1.serviceInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Service Request Header</li>
+ <li style="height:29px;overflow: auto;" ng-repeat="(key,value) in objCompareModel1.requestHeader">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Request Information</li>
+ <li ng-repeat="(key,value) in objCompareModel1.requestInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology</li>
+ <li style="height:29px;overflow: auto;" ng-repeat="(key,value) in objCompareModel1.topologyInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ </ul>
+ </div>
+
+ <div class="columnsVersion">
+ <ul class="price">
+ <li class="headerVersion"style="background-color:#807C7C">Version {{objCompareModel2.versionDetails.vnfversion}}</li>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Config Details</li>
+ <li ng-repeat="(key,value) in objCompareModel2.versionDetails">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF ID</li>
+ <li ng-repeat="(key,value) in objCompareModel2.vnfIdInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">SERVICE STATUS</li>
+ <li ng-repeat="(key,value) in objCompareModel2.serviceStatusInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology Identifer</li>
+ <li ng-repeat="(key,value) in objCompareModel2.vnfTopologyIdentifier">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Operation Status</li>
+ <li ng-repeat="(key,value) in objCompareModel2.operationStatus">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Request Info</li>
+ <li ng-repeat="(key,value) in objCompareModel2.vnfRequestInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Service Info</li>
+ <li ng-repeat="(key,value) in objCompareModel2.serviceInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Service Request Header</li>
+ <li style="height:29px;overflow: auto;" ng-repeat="(key,value) in objCompareModel2.requestHeader">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Request Information</li>
+ <li ng-repeat="(key,value) in objCompareModel2.requestInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology</li>
+ <li style="height:29px;overflow: auto;" ng-repeat="(key,value) in objCompareModel2.topologyInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ </ul>
+ </div>
+
+</div> \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-deviceConfigView.html b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-deviceConfigView.html
new file mode 100644
index 00000000..e9a19aa3
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-deviceConfigView.html
@@ -0,0 +1,154 @@
+<!-- /*
+ * ============LICENSE_START=======================================================
+ * ONAP : SDNC-FEATURES
+ * ================================================================================
+ * Copyright 2018 TechMahindra
+ *=================================================================================
+ * 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=========================================================
+ */
+ -->
+ <div class="VersionMain" ng-show="showResult">
+ <div class="versionHeading"><img src="static/images/compare.jpg" width=25 height="25" style="margin-left:5px;">&nbsp;&nbsp;Version Comparision Result</div>
+ <div class="columnsVersionview">
+ <ul class="price">
+ <li class="headerVersion">Attributes</li>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Config Details</li>
+ <li ng-repeat="(key,value) in objCompareModel1.versionDetails">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF ID</li>
+ <li ng-repeat="(key,value) in objCompareModel1.vnfIdInfo">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">SERVICE STATUS</li>
+ <li ng-repeat="(key,value) in objCompareModel1.serviceStatusInfo">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology Identifer</li>
+ <li ng-repeat="(key,value) in objCompareModel1.vnfTopologyIdentifier">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Operation Status</li>
+ <li ng-repeat="(key,value) in objCompareModel1.operationStatus">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Request Info</li>
+ <li ng-repeat="(key,value) in objCompareModel1.vnfRequestInfo">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Service Info</li>
+ <li ng-repeat="(key,value) in objCompareModel1.serviceInfo">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Service Request Header</li>
+ <li ng-repeat="(key,value) in objCompareModel1.requestHeader">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Request Information</li>
+ <li ng-repeat="(key,value) in objCompareModel1.requestInfo">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology</li>
+ <li ng-repeat="(key,value) in objCompareModel1.topologyInfo">{{key}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ </ul>
+ </div>
+ <div class="columnsVersionview">
+ <ul class="price">
+ <li class="headerVersion" style="background-color:#807C7C">Version {{objCompareModel1.versionDetails.vnfversion}}</li>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Config Details</li>
+ <li ng-repeat="(key,value) in objCompareModel1.versionDetails">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;" >
+ <li class="listHeading">VNF ID</li>
+ <li ng-repeat="(key,value) in objCompareModel1.vnfIdInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">SERVICE STATUS</li>
+ <li ng-repeat="(key,value) in objCompareModel1.serviceStatusInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology Identifer</li>
+ <li ng-repeat="(key,value) in objCompareModel1.vnfTopologyIdentifier">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Operation Status</li>
+ <li ng-repeat="(key,value) in objCompareModel1.operationStatus">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Request Info</li>
+ <li ng-repeat="(key,value) in objCompareModel1.vnfRequestInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Service Info</li>
+ <li ng-repeat="(key,value) in objCompareModel1.serviceInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Service Request Header</li>
+ <li style="height:29px;overflow: auto;" ng-repeat="(key,value) in objCompareModel1.requestHeader">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">Request Information</li>
+ <li ng-repeat="(key,value) in objCompareModel1.requestInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ <div style="background-color:#E1E0DA;">
+ <li class="listHeading">VNF Topology</li>
+ <li style="height:29px;overflow: auto;" ng-repeat="(key,value) in objCompareModel1.topologyInfo">{{value}}</li>
+ <hr class="separator">
+ </hr>
+ </div>
+ </ul>
+ </div>
+
+</div> \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-validationTest.html b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-validationTest.html
new file mode 100644
index 00000000..0bf39f66
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-validationTest.html
@@ -0,0 +1,135 @@
+<!-- /*
+ * ============LICENSE_START=======================================================
+ * ONAP : SDNC-FEATURES
+ * ================================================================================
+ * Copyright 2018 TechMahindra
+ *=================================================================================
+ * 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=========================================================
+ */
+ -->
+<div class="testMain">
+ <div class="heading"><img src="static/images/validation.png" width=30 height="30" style="margin-left:5px;">&nbsp;&nbsp;Pre-test/Certification</div>
+ <form name="reportForm">
+ <div growl></div>
+ <div class="row">
+ <div class="column testCol">
+ <label class="labeltext">Specify IP Address</label>
+ </div>
+ <div class="column" style="background-color:#f2f2f2;width:50%;margin-left:0px;">
+ <input type="text" ng-model="IPAddress" name="IPAddress" style="margin-left:5px;width:170px;" ng-ip-address placeholder='255.255.255.255' required></input>
+ <div role="alert">
+ <span class="error" ng-show="reportForm.IPAddress.$error.required">Required!</span>
+ </div>
+ <div role="alert">
+ <span class="error" ng-if="reportForm.IPAddress.$invalid">Not a valid IPAddress!</span>
+ </div>
+ <div role="alert">
+ <span class="error" ng-if="reportForm.IPAddress.pattern">Not a valid IPAddress!</span>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="column testCol">
+ <label class="labeltext">Specify Host Name</label>
+ </div>
+ <div class="column" style="background-color:#f2f2f2;width:50%;margin-left:0px;">
+ <input type="text" ng-model="HostName" name="HostName" style="margin-left:5px;width:170px;" required ng-pattern="hostNamePattern"></input>
+ <div role="alert">
+ <span class="error" ng-show="reportForm.HostName.$error.required">Required!</span>
+ </div>
+ <div role="alert">
+ <span class="error" ng-show="reportForm.HostName.$invalid">Not a valid HostName!</span>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="column" style="width:25%;background-color:#f2f2f2;height:45px;margin-left:35px;">
+ <label class="labeltext">Select Certification</label>
+ </div>
+ <div class="column" style="background-color:#f2f2f2;width:50%;height:45px;margin-left:0px;">
+ <label ng-repeat="val in validationTestList" class="labeltext" style="margin-right:35px;">
+ <input type="checkbox" ng-model="val.Selected" class="check" ng-change="updateSelection($index,validationTestList,val.validationType);">{{val.validationType}}</input>
+ </label>
+ </div>
+ </div>
+ <!--<hr style="border-color:darkGrey;">-->
+ <div class="row">
+ <div class="column btnRunTest">
+ <input type="submit" ng-click="runTest()" value="Run PreTest" id="btnSubmit" ng-disabled="showError" style="margin-left:0px;"/>
+ </div>
+ </div>
+
+ <table class="tableDisplay" ng-show="ShowResult" id="tableToExport" style="margin-left:10px;width:1000px;">
+ <tr class="first_row">
+ <th>SNo.
+ </th>
+ <th colspan="2" style="text-align:center;">TestName
+ </th>
+ <th>Device IP
+ </th>
+ <th>Status
+ </th>
+ <th style="width:20%;">Statistics (%Loss)</th>
+ <th style="width:20%;">Average Time (ms)</th>
+ <th>Result
+ </th>
+ </tr>
+ <tr ng-repeat="test in objPreTest">
+ <td>{{$index+1}}
+ </td>
+ <td><img src="{{(test.testtype=='Network Layer') ? 'static/images/images.png': 'static/images/protocol.png'}}" width=40 height=30 ></img></td>
+ <td>{{test.testtype}}
+ </td>
+ <td>{{test.ipaddress}}
+ </td>
+ <td>{{test.status | uppercase}}
+ </td>
+ <td>
+ <div ng-show="test.testtype =='Network Layer'" class="w3-light-grey">
+ <div ng-show=test.statistics!=null class="w3-container w3-red w3-center" style="width:{{test.statisticPer}}%">{{test.statistics}}% Loss
+ </div>
+ <div ng-show=test.statistics==null class="w3-orange w3-center" style="width:{{test.statisticPer}}%">No Statistics Recorded
+ </div>
+ </div>
+ <div ng-show="test.testtype =='Protocol Layer'">
+ <img src='static/images/router.png' width=30 height=30 style="margin-bottom:10px;"></img>
+ <span class="{{(test.status == 'unreachable') ? 'arrowRed':'arrowGreen'}}">&#8594;</span><span class="{{(test.status == 'unreachable') ? 'arrowRed':'arrowGreen'}}">&#8594;</span><span class="{{(test.status == 'unreachable') ? 'arrowRed':'arrowGreen'}}">&#8594;
+ <img src='static/images/router.png' width=30 height=30 ></img>
+ </div>
+ </td>
+ <td>
+ <div ng-show="test.testtype =='Network Layer'" class="w3-light-grey">
+ <div ng-show=test.avgTime!=null class="w3-container w3-green w3-center" style="width:{{test.avgTimePer}}%">{{test.avgTime}} ms</div>
+ <div ng-show=test.statistics==null class="w3-blue w3-center" style="width:{{test.statisticPer}}%">No AvgTime Recorded
+ </div>
+ </div>
+ </td>
+ <td><img src="{{(test.status=='reachable') ? 'static/images/success.png': 'static/images/FailImage.png'}}" width=30 height=25></img>
+ </td>
+ </tr>
+ </table>
+ <div class="row">
+ <div class="column" style="margin-top:10px;width:800px;" ng-show="ShowResult">
+ <span class='arrowRed'>&#8594;</span>
+ <label class="labeltext">UnReachable</label>&nbsp;&nbsp;
+ <span class='arrowGreen'>&#8594;</span>
+ <label class="labeltext">Reachable</label>&nbsp;&nbsp;
+ <span><img src='static/images/success.png' width=30 height=25></span>
+ <label class="labeltext">Pass</label>&nbsp;&nbsp;
+ <span><img src='static/images/FailImage.png' width=30 height=25></span>
+ <label class="labeltext">Fail</label>
+ </div>
+ </div>
+ </form>
+</div> \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-versionCompare.html b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-versionCompare.html
new file mode 100644
index 00000000..182c31fc
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-versionCompare.html
@@ -0,0 +1,59 @@
+<!-- /*
+ * ============LICENSE_START=======================================================
+ * ONAP : SDNC-FEATURES
+ * ================================================================================
+ * Copyright 2018 TechMahindra
+ *=================================================================================
+ * 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=========================================================
+ */
+ -->
+<div class="VersionMain">
+ <div class="versionHeading"><img src="images/compare.jpg" width=25 height="25" style="margin-left:5px;">&nbsp;&nbsp;Version Comparision Result</div>
+
+ <div class="columnsVersion">
+ <ul class="price">
+ <li class="headerVersion">Basic</li>
+ <li class="grey">$ 9.99 / year</li>
+ <li>10GB Storage</li>
+ <li>10 Emails</li>
+ <li>10 Domains</li>
+ <li>1GB Bandwidth</li>
+ <li class="grey"><a href="#" class="button">Sign Up</a></li>
+ </ul>
+</div>
+
+<div class="columnsVersion">
+ <ul class="price">
+ <li class="headerVersion" style="background-color:#4CAF50">Pro</li>
+ <li class="grey">$ 24.99 / year</li>
+ <li>25GB Storage</li>
+ <li>25 Emails</li>
+ <li>25 Domains</li>
+ <li>2GB Bandwidth</li>
+ <li class="grey"><a href="#" class="button">Sign Up</a></li>
+ </ul>
+</div>
+
+<div class="columnsVersion">
+ <ul class="price">
+ <li class="headerVersion">Premium</li>
+ <li class="grey">$ 49.99 / year</li>
+ <li>50GB Storage</li>
+ <li>50 Emails</li>
+ <li>50 Domains</li>
+ <li>5GB Bandwidth</li>
+ <li class="grey"><a href="#" class="button">Sign Up</a></li>
+ </ul>
+</div>
+ </div> \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-viewReport.html b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-viewReport.html
new file mode 100644
index 00000000..d4841ad5
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-viewReport.html
@@ -0,0 +1,90 @@
+<!-- /*
+ * ============LICENSE_START=======================================================
+ * ONAP : SDNC-FEATURES
+ * ================================================================================
+ * Copyright 2018 TechMahindra
+ *=================================================================================
+ * 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=========================================================
+ */
+ -->
+<div class="ReportMain">
+ <div class="heading">
+ <img src="static/images/search.png" width=50 height="40"
+ style="margin-left: 5px;">&nbsp;&nbsp;Search For Vnf Reports
+ </div>
+ <form name="myForm" style="background-color: #f2f2f2;">
+ <div growl></div>
+ <div class="row">
+ <div class="column" style="width: 40%;">
+ <label for="exampleInput" class="labeltext">Start Date</label> <input
+ type="date" id="exampleInput" name="input"
+ ng-model="startdate.value" placeholder="yyyy-MM-dd"
+ style="margin-left: 20px; width: 170px;" required />
+ <div role="alert">
+ <span class="error" ng-show="myForm.input.$error.required">Required!</span>
+ <span class="error" ng-show="myForm.input.$error.date">Not a
+ valid date!</span>
+ </div>
+ </div>
+ <div class="column" style="margin-left: 0px; width: 50%;">
+ <label for="exampleEndInput" class="labeltext">End Date</label> <input
+ type="date" id="exampleEndInput" name="input"
+ ng-model="enddate.value" placeholder="yyyy-MM-dd"
+ style="margin-left: 20px; width: 170px;" required />
+ <div role="alert">
+ <span class="error" ng-show="myForm.input.$error.required">
+ Required!</span> <span class="error" ng-show="myForm.input.$error.date">
+ Not a valid date!</span>
+ </div>
+ </div>
+ </div>
+ <br>
+ <div class="row">
+ <input type="submit" id="btnSubmit"
+ ng-click="getReports(startdate.value,enddate.value)"
+ style="width: 120px;">
+ </div>
+
+ <table class="tableDisplay"
+ style="text-align: center;" ng-show="showresult" id="tableToExport">
+ <tr class="first_row">
+ <th style="text-align: center;">SNo.</th>
+ <th style="text-align: center;">Time Period</th>
+ <th style="text-align: center;">Vnf Name</th>
+ <th style="text-align: center;">Vnf Id</th>
+ </tr>
+ <tr ng-repeat="version in pagedItems[currentPage] | orderBy:sort.sortingOrder:sort.reverse">
+ <td>{{ ($index + 1) + (currentPage - 1) * itemsPerPage + 5}}</td>
+ <td>{{version.createdAt}}</td>
+ <td>{{version.vnfname }}</td>
+ <td>{{version.vnfid}}</td>
+ </tr>
+ <td colspan="4">
+ <!-- ng-show="pagedItems.length > 5" -->
+ <ul class="pagination pull-right">
+ <li ng-class="{disabled: currentPage == 0}"><a href
+ ng-click="prevPage()">&laquo;</a></li>
+ <li ng-repeat="n in range(pagedItems.length, currentPage, currentPage + gap) "
+ ng-class="{active: n == currentPage}" ng-click="setPage()"><a
+ href ng-bind="n + 1">1</a></li>
+ <li ng-class="{disabled: (currentPage) == pagedItems.length - 1}">
+ <a href ng-click="nextPage()">&raquo;</a>
+ </li>
+ </ul>
+ </td>
+ </table>
+ </form>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-viewReportById.html b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-viewReportById.html
new file mode 100644
index 00000000..b4eec391
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/form-viewReportById.html
@@ -0,0 +1,122 @@
+<!-- /*
+ * ============LICENSE_START=======================================================
+ * ONAP : SDNC-FEATURES
+ * ================================================================================
+ * Copyright 2018 TechMahindra
+ *=================================================================================
+ * 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=========================================================
+ */
+ -->
+<div class="ReportMain">
+ <div class="heading">
+ <img src="static/images/search.png" width=50 height="40"
+ style="margin-left: 5px;">&nbsp;&nbsp;Search For Vnf Reports
+ </div>
+ <form name="myForm" style="background-color: #f2f2f2;padding:20px 15px;">
+ <div growl></div>
+
+ <div class="row">
+ <div class="column"
+ style="width: 20%; background-color: #f2f2f2; height: 35px; margin-left: 35px;">
+ <label class="labeltext">Select Avaliable VNF</label>
+ </div>
+ <div class="column"
+ style="background-color: #f2f2f2; width: 45%; height: 55px; margin-left: 0px;">
+ <select class="form-control" style="width: 100%; margin-top: 0px;"
+ name="select" ng-model="selectedValueVnf"
+ ng-change=selectVnf(selectedValueVnf) required>
+ <option ng-repeat="vnf in objvnfList" value="{{vnf.vnfid}}">VnfId-
+ {{vnf.vnfid}}&nbsp;VnfName- {{vnf.vnfname}}</option>
+ <option value="">Select VNF</option>
+ </select>
+ <div role="alert">
+ <span class="error" ng-show="myForm.select.$error.required">
+ Required!</span>
+ </div>
+ </div>
+ </div>
+
+ <div class="row" ng-show="ShowResult">
+ <div class="column" style="margin-left: 13px; width: 40%;">
+ <label for="exampleInput" class="labeltext">Start Date</label> <input
+ type="date" id="exampleInput" name="input"
+ ng-model="startdate.value" placeholder="yyyy-MM-dd"
+ style="margin-left: 20px; width: 170px;" required />
+ <div role="alert">
+ <span class="error" ng-show="myForm.input.$error.required">
+ Required!</span> <span class="error" ng-show="myForm.input.$error.date">
+ Not a valid date!</span>
+ </div>
+ </div>
+
+ <div class="column" style="margin-left: 0px; width: 50%;">
+ <label for="exampleEndInput" class="labeltext">End Date</label> <input
+ type="date" id="exampleEndInput" name="input"
+ ng-model="enddate.value" placeholder="yyyy-MM-dd"
+ style="margin-left: 20px; width: 170px;" required />
+ <div role="alert">
+ <span class="error" ng-show="myForm.input.$error.required">
+ Required!</span> <span class="error" ng-show="myForm.input.$error.date">
+ Not a valid date!</span>
+ </div>
+ </div>
+ <br>
+ <div class="column">
+ <input type="submit" id="btnSubmit"
+ ng-click="getReportsById(selectedValueVnf,startdate.value,enddate.value)"
+ style="width: 120px;">
+ </div>
+
+ </div>
+ <br>
+ <div class="row" ng-show="showresult">
+ <div class="column"
+ style="width: 80%; background-color: #f2f2f2; height: 35px; margin-left: 35px; font-size: 14px;font-weight:500;color:#1B4F72;">
+ Vnfid: {{selectedValueVnf}}
+ </div>
+ </div>
+ <br>
+ <div>
+ <table class="tableDisplay"
+ style="text-align: center;" ng-show="showresult" id="tableToExport">
+ <tr class="first_row">
+ <th style="text-align: center;">SNo.</th>
+ <th style="text-align: center;">Time Period</th>
+ <th style="text-align: center;">Vnf Name</th>
+ <th style="text-align: center;">Version No.</th>
+ </tr>
+ <tr ng-repeat="version in pagedItems[currentPage] | orderBy:sort.sortingOrder:sort.reverse">
+ <td>{{ ($index + 1) + (currentPage - 1) * itemsPerPage + 5}}</td>
+ <td>{{version.createdAt}}</td>
+ <td>{{version.vnfname }}</td>
+ <td>{{version.versionNo}}</td>
+ </tr>
+ <td colspan="4">
+ <ul class="pagination pull-right">
+ <li ng-class="{disabled: currentPage == 0}"><a href
+ ng-click="prevPage()">&laquo;</a></li>
+ <li ng-repeat="n in range(pagedItems.length, currentPage, currentPage + gap) "
+ ng-class="{active: n == currentPage}" ng-click="setPage()"><a
+ href ng-bind="n + 1">1</a></li>
+ <li ng-class="{disabled: (currentPage) == pagedItems.length - 1}">
+ <a href ng-click="nextPage()">&raquo;</a>
+ </li>
+ </ul>
+ </td>
+ </table>
+ </div>
+ </form>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/header.html b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/header.html
new file mode 100644
index 00000000..23851589
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/header.html
@@ -0,0 +1,3 @@
+<div class="header">
+ <p style="margin-left:20px;"> ONAP Certification Test Page </p>
+</div>
diff --git a/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/tabs.html b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/tabs.html
new file mode 100644
index 00000000..178a8180
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/main/webapp/static/views/tabs.html
@@ -0,0 +1,25 @@
+<div>
+<nav role="navigation" class="navbar navbar-default" style="margin-top:10px;">
+ <div class="navbar-header" style="background-color:#ffe0b3;font-size: 15px;font-weight: bold;color:black;">
+ <ul class="nav navbar-nav">
+ <li><div class="dropdown">
+ <button class="dropbtn" style="padding-right:40px;padding-left: 30px; ">VIEW ALL REPORTS</button>
+ <div class="dropdown-content">
+ <a ng-href="#testReports">Search Vnf Reports</a>
+ <a ng-href="#testReportsById">Search Vnf Reports By ID</a>
+ </div>
+ </div>
+ <li><div class="dropdown">
+ <button class="dropbtn">DEVICE CONFIGRUATION</button>
+ <div class="dropdown-content">
+ <a ng-href="#deviceConfig">Backup Config</a>
+ <a ng-href="#applyConfig">Apply Config</a>
+ <a ng-href="#compareConfig">Compare Config</a>
+ </div>
+ </div>
+ </li>
+
+ </ul>
+ </div>
+</nav>
+</div> \ No newline at end of file
diff --git a/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigDetailsDBTest.java b/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigDetailsDBTest.java
new file mode 100644
index 00000000..38973235
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigDetailsDBTest.java
@@ -0,0 +1,62 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.model;
+
+import static org.junit.Assert.assertEquals;
+
+import java.sql.Timestamp;
+
+import org.junit.Test;
+
+import com.onap.sdnc.vnfbackupservice.model.VnfConfigDetailsDB;
+
+public class VnfConfigDetailsDBTest {
+
+ @Test
+ public void configDetailsDbTest() {
+
+ long millis = System.currentTimeMillis();
+ Timestamp date = new java.sql.Timestamp(millis);
+ String configinfo = "configifo";
+ Timestamp creationDate = date;
+ Timestamp lastupdated = date;
+ int status = 1;
+ String vnfid = "vnfId";
+ String vnfname = "vnfname";
+ String vnfversion = "Version-1";
+
+ VnfConfigDetailsDB vnfConfigDetailsDB = new VnfConfigDetailsDB();
+ vnfConfigDetailsDB.setVnfid(vnfid);
+ vnfConfigDetailsDB.setConfiginfo(configinfo);
+ vnfConfigDetailsDB.setCreationdate(creationDate);
+ vnfConfigDetailsDB.setLastupdated(lastupdated);
+ vnfConfigDetailsDB.setStatus(status);
+ vnfConfigDetailsDB.setVnfname(vnfname);
+ vnfConfigDetailsDB.setVnfversion(vnfversion);
+
+ assertEquals(vnfid, vnfConfigDetailsDB.getVnfid());
+ assertEquals(configinfo, vnfConfigDetailsDB.getConfiginfo());
+ assertEquals(creationDate, vnfConfigDetailsDB.getCreationdate());
+ assertEquals(lastupdated, vnfConfigDetailsDB.getLastupdated());
+ assertEquals(status, vnfConfigDetailsDB.getStatus());
+ assertEquals(vnfname, vnfConfigDetailsDB.getVnfname());
+ assertEquals(vnfversion, vnfConfigDetailsDB.getVnfversion());
+ }
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigSchedulerTimeStampTest.java b/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigSchedulerTimeStampTest.java
new file mode 100644
index 00000000..ee6d5326
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/model/VnfConfigSchedulerTimeStampTest.java
@@ -0,0 +1,39 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.model;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+public class VnfConfigSchedulerTimeStampTest {
+
+ @Test
+ public void vnfConfSchedulerTimeTest() {
+ String time="12:00";
+ int id=1;
+
+ VnfConfigSchedulerTimeStamp vcst= new VnfConfigSchedulerTimeStamp();
+ vcst.setBackuptime(time);
+ vcst.setId(id);
+ assertEquals(time, vcst.getBackuptime());
+ assertEquals(id, vcst.getId());
+ }
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfConfigBackupSchedulerTest.java b/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfConfigBackupSchedulerTest.java
new file mode 100644
index 00000000..9308eeb8
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfConfigBackupSchedulerTest.java
@@ -0,0 +1,85 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.scheduler;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import com.onap.sdnc.vnfbackupservice.model.VnfDisplayParams;
+import com.onap.sdnc.vnfbackupservice.model.VnfServiceResponse;
+import com.onap.sdnc.vnfbackupservice.scheduler.VnfConfigBackupScheduler;
+import com.onap.sdnc.vnfbackupservice.service.VnfbackupServiceImpl;
+
+public class VnfConfigBackupSchedulerTest {
+
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+ }
+
+ @Mock
+ VnfbackupServiceImpl vnfbackupServiceImpl;
+
+ @InjectMocks
+ VnfConfigBackupScheduler vnfconfigBackScheduler;
+
+ @Test
+ public void initiateBackupServiceTest() {
+
+ String backuptime="timeee";
+ String vnfId = "vnfid";
+ String vnfName = "vnfname";
+ VnfDisplayParams vnfDisplayParams = new VnfDisplayParams();
+ vnfDisplayParams.setVnfId(vnfId);
+ vnfDisplayParams.setVnfName(vnfName);
+
+ VnfServiceResponse vnfServiceResponse = new VnfServiceResponse();
+
+ List<VnfDisplayParams> vnfdisplaylist = new ArrayList<VnfDisplayParams>();
+ vnfdisplaylist.add(vnfDisplayParams);
+ vnfServiceResponse.setVnfDisplayList(vnfdisplaylist);
+
+ when(vnfbackupServiceImpl.getAllVnfDetails()).thenReturn(vnfServiceResponse);
+ when(vnfconfigBackScheduler.initiateBackupService()).thenReturn(backuptime);
+
+ vnfconfigBackScheduler.initiateBackupService();
+ }
+
+ @Test
+ public void invokebackupTest() {
+
+ String vnfId="vnfid";
+ VnfConfigBackupScheduler vnfConBackSch= mock(VnfConfigBackupScheduler.class);
+ when(vnfConBackSch.invokeDetails(vnfId)).thenReturn(vnfId);
+ assertEquals(vnfId, vnfConBackSch.invokeDetails(vnfId));
+ vnfConBackSch.invokeDetails(vnfId);
+ }
+
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfRestClientTest.java b/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfRestClientTest.java
new file mode 100644
index 00000000..29b1c0f0
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/scheduler/VnfRestClientTest.java
@@ -0,0 +1,62 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.scheduler;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.junit.Test;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.client.RestClientException;
+import org.springframework.web.client.RestTemplate;
+
+import mockit.Mock;
+import mockit.MockUp;
+
+
+public class VnfRestClientTest {
+
+ String url = "/restconf/config/VNF-API:vnfs";
+ String userName = "abc";
+ String password = "abc";
+
+ @Test
+ public void restClientTest() {
+
+ new MockUp<RestTemplate>() {
+ @SuppressWarnings("unchecked")
+ @Mock
+ public <T> ResponseEntity<T> exchange(String url, HttpMethod method, HttpEntity<?> requestEntity,
+ Class<T> responseType, Object... uriVariables) throws RestClientException {
+ ResponseEntity<String> str = new ResponseEntity<String>(HttpStatus.ACCEPTED);
+ return (ResponseEntity<T>) str;
+ }
+ };
+ VnfRestClient vnfRestClientmock = mock(VnfRestClient.class);
+ when(vnfRestClientmock.vnfRestClient(url, userName, password)).thenReturn("successfully mocked");
+
+ VnfRestClient vnfRestClient =new VnfRestClient();
+ vnfRestClient.vnfRestClient(url, userName, password);
+
+ }
+}
diff --git a/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/service/VnfbackupServiceImplTest.java b/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/service/VnfbackupServiceImplTest.java
new file mode 100644
index 00000000..3428bce9
--- /dev/null
+++ b/configbackuprestore/vnfconfigbackupservice/src/test/java/com/onap/sdnc/vnfbackupservice/service/VnfbackupServiceImplTest.java
@@ -0,0 +1,150 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SDNC-FEATURES
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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 com.onap.sdnc.vnfbackupservice.service;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.when;
+
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.client.RestTemplate;
+
+import com.onap.sdnc.vnfbackupservice.dao.VnfBackupServiceRepo;
+import com.onap.sdnc.vnfbackupservice.model.VnfConfigDetailsDB;
+import com.onap.sdnc.vnfbackupservice.scheduler.VnfRestClient;
+import com.onap.sdnc.vnfbackupservice.service.VnfbackupServiceImpl;
+
+public class VnfbackupServiceImplTest {
+
+ @Mock
+ VnfBackupServiceRepo vrepo;
+
+ @Mock
+ private RestTemplate rTemplate;
+
+ @Mock
+ private VnfRestClient vnfclient;
+
+ @InjectMocks
+ VnfbackupServiceImpl vnfserviceimpl;
+
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+ }
+
+ String json = "{\r\n" + " \"vnfs\": {\r\n" + " \"vnf-list\": [\r\n" + " {\r\n"
+ + " \"vnf-id\": \"f24ae4f1-ed6b-4f8b-9ad6-4110a6fe26e7\",\r\n"
+ + " \"service-data\": {\r\n" + " \"vnf-request-information\": {\r\n"
+ + " \"vnf-name\": \"vDNS-Techm_vIMS_vnf_1\"\r\n" + " },\r\n"
+ + " \"service-status\": { \r\n" + " \"response-code\": \"200\"\r\n"
+ + " }},\r\n" + " \"service-status\": { \r\n"
+ + " \"response-code\": \"200\"\r\n" + " }\r\n" + " }\r\n" + " \r\n"
+ + " ]\r\n" + " }\r\n" + " }";
+
+ String url = "http://localhost:8023/test/api/foos";
+ String vnfId="vnfid";
+ String userName = "abc";
+ String password = "abc";
+ String configfile="config";
+ String vnfversion = "Version-1";
+ String jsonInput="jsoninput";
+ String vnfName = "vnfname";
+
+ long millis = System.currentTimeMillis();
+ Timestamp date = new java.sql.Timestamp(millis);
+ String configinfo =json;
+ Timestamp creationDate = date;
+ Timestamp lastupdated = date;
+ int status = 1;
+ String vnfname = "vnfname";
+
+ @Test
+ public void parseConfigTest() {
+ VnfbackupServiceImpl vnfbackupServiceImpl = new VnfbackupServiceImpl();
+ vnfbackupServiceImpl.parseVnfConfigDetails(json);
+ assertTrue(true);
+ }
+
+ @Test()
+ public void backupVnfconfigTest()
+ {
+ HttpHeaders headers = new HttpHeaders();
+ HttpHeaders headers1= new HttpHeaders();
+
+ headers1.setAccept(Arrays.asList(new MediaType[] { MediaType.APPLICATION_JSON }));
+ headers1.setContentType(MediaType.APPLICATION_JSON);
+ String base64Username = userName + ":" + password;
+ byte[] message = base64Username.getBytes();
+ headers1.set("Authorization", "Basic " + java.util.Base64.getEncoder().encodeToString(message));
+
+ when(vnfclient.generateHeaders(headers, userName, password)).thenReturn(headers1);
+
+ ResponseEntity<String> entity = new ResponseEntity<String>(HttpStatus.OK);
+
+ when(rTemplate.exchange(url, HttpMethod.GET, entity, String.class)).thenReturn(entity) ;
+
+ when(vnfclient.vnfRestClient(url, userName, password)).thenReturn(json);
+
+ VnfConfigDetailsDB vnfConfigDetailsDB = new VnfConfigDetailsDB();
+ vnfConfigDetailsDB.setVnfid(vnfId);
+ vnfConfigDetailsDB.setConfiginfo(configinfo);
+ vnfConfigDetailsDB.setCreationdate(date);
+ vnfConfigDetailsDB.setLastupdated(date);
+ vnfConfigDetailsDB.setStatus(status);
+ vnfConfigDetailsDB.setVnfname(vnfname);
+ vnfConfigDetailsDB.setVnfversion(vnfversion);
+
+ when(vrepo.getVnfDetail(vnfId)).thenReturn(vnfConfigDetailsDB);
+
+ List<VnfConfigDetailsDB> listvnfconfdb= new ArrayList<VnfConfigDetailsDB>();
+
+ when(vrepo.getVnfDetails(vnfId)).thenReturn(listvnfconfdb);
+
+ doNothing().when(vrepo).saveVnfDetails(configinfo, creationDate, lastupdated, status, vnfId, vnfname, vnfversion);
+
+ vnfserviceimpl.backupVnfconfig(vnfId);
+
+ assertEquals("success", vnfserviceimpl.backupVnfconfig(vnfId));
+ }
+
+ @Test
+ public void updatedBackuptimeTest() {
+ String sdtime="12:00";
+ when(vrepo.getvnfschedulertime()).thenReturn(sdtime);
+ vnfserviceimpl.updatedBackuptime();
+ }
+
+}
diff --git a/installation/ansible-server/pom.xml b/installation/ansible-server/pom.xml
index f244477c..e5e78019 100644
--- a/installation/ansible-server/pom.xml
+++ b/installation/ansible-server/pom.xml
@@ -82,26 +82,6 @@
</execution>
<execution>
- <id>copy-scripts</id>
- <goals>
- <goal>copy-resources</goal>
- </goals><!-- here the phase you need -->
- <phase>validate</phase>
- <configuration>
- <outputDirectory>${basedir}/target/docker-stage/opt/onap/sdnc</outputDirectory>
- <resources>
- <resource>
- <directory>src/main/scripts</directory>
- <includes>
- <include>*</include>
- </includes>
- <filtering>false</filtering>
- </resource>
- </resources>
- </configuration>
- </execution>
-
- <execution>
<id>copy-yml</id>
<goals>
<goal>copy-resources</goal>
@@ -122,54 +102,6 @@
</execution>
</executions>
</plugin>
-
- <plugin>
- <artifactId>exec-maven-plugin</artifactId>
- <groupId>org.codehaus.mojo</groupId>
- <version>1.5.0</version>
- <executions>
- <execution>
- <id>change python permissions</id>
- <phase>process-sources</phase>
- <goals>
- <goal>exec</goal>
- </goals>
- <configuration>
- <executable>/usr/bin/find</executable>
- <arguments>
- <argument>${basedir}/target/docker-stage/opt/onap/sdnc</argument>
- <argument>-name</argument>
- <argument>*.py</argument>
- <argument>-exec</argument>
- <argument>chmod</argument>
- <argument>+x</argument>
- <argument>{}</argument>
- <argument>;</argument>
- </arguments>
- </configuration>
- </execution>
- <execution>
- <id>change shell permissions</id>
- <phase>process-sources</phase>
- <goals>
- <goal>exec</goal>
- </goals>
- <configuration>
- <executable>/usr/bin/find</executable>
- <arguments>
- <argument>${basedir}/target/docker-stage/opt/onap/sdnc</argument>
- <argument>-name</argument>
- <argument>*.sh</argument>
- <argument>-exec</argument>
- <argument>chmod</argument>
- <argument>+x</argument>
- <argument>{}</argument>
- <argument>;</argument>
- </arguments>
- </configuration>
- </execution>
- </executions>
- </plugin>
</plugins>
</build>
diff --git a/installation/ansible-server/src/main/docker/Dockerfile b/installation/ansible-server/src/main/docker/Dockerfile
index 86b368c9..cc93f12a 100644
--- a/installation/ansible-server/src/main/docker/Dockerfile
+++ b/installation/ansible-server/src/main/docker/Dockerfile
@@ -1,5 +1,5 @@
# Base ubuntu with added packages needed for open ecomp
-FROM onap/ccsdk-ubuntu-image:${ccsdk.distribution.version}
+FROM onap/ccsdk-ansible-server-image:${ccsdk.distribution.version}
LABEL maintainer="SDN-C Team (sdnc@lists.openecomp.org)"
diff --git a/installation/ansible-server/src/main/scripts/AnsibleModule.py b/installation/ansible-server/src/main/scripts/AnsibleModule.py
deleted file mode 100755
index 3458c28b..00000000
--- a/installation/ansible-server/src/main/scripts/AnsibleModule.py
+++ /dev/null
@@ -1,170 +0,0 @@
-'''
-/*-
-* ============LICENSE_START=======================================================
-* ONAP : APPC
-* ================================================================================
-* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-* ================================================================================
-* Copyright (C) 2017 Amdocs
-* =============================================================================
-* 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.
-*
-* ECOMP is a trademark and service mark of AT&T Intellectual Property.
-* ============LICENSE_END=========================================================
-*/
-'''
-
-import os, subprocess
-import sys
-from collections import namedtuple
-import json
-
-import uuid
-
-def ansibleSysCall (inventory_path, playbook_path, nodelist, mandatory,
- envparameters, localparameters, lcm, timeout):
-
- print "***> in AnsibleModule.ansibleSysCall"
- print " EnvParameters: ", envparameters
- print " LocalParameters:", localparameters
- print " Inventory: ", inventory_path
- print " Playbook: ", playbook_path
- print " NodeList: ", nodelist
- print " Mandatory: ", mandatory
- print " Timeout: ", timeout
- log = []
-
- str_parameters = ''
-
- if not envparameters == {}:
- for key in envparameters:
- if str_parameters == '':
- str_parameters = '"' + str(key) + '=\'' + str(envparameters[key]) + '\''
- else:
- str_parameters += ' ' + str(key) + '=\'' + str(envparameters[key]) + '\''
- str_parameters += '"'
-
- if len(str_parameters) > 0:
- cmd = 'timeout --signal=KILL ' + str(timeout) + \
- ' ansible-playbook -v --extra-vars ' + str_parameters + ' -i ' + \
- inventory_path + ' ' + playbook_path
- else:
- cmd = 'timeout --signal=KILL ' + str(timeout) + \
- ' ansible-playbook -v -i ' + inventory_path + ' ' + playbook_path
-
- print " CMD: ", cmd
-
- print "\n =================ANSIBLE STDOUT BEGIN============================================\n"
- p = subprocess.Popen(cmd, shell=True,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT)
- # p.wait()
- (stdout_value, err) = p.communicate()
-
- stdout_value_cleanup = ''
- for line in stdout_value:
- stdout_value_cleanup += line.replace(' ', ' ')
- stdout_value = stdout_value_cleanup.splitlines()
-
- ParseFlag = False
- retval = {}
- returncode = p.returncode
-
- if returncode == 137:
-
- print " ansible-playbook system call timed out"
- # ansible-playbook system call timed out
- for line in stdout_value: # p.stdout.readlines():
- log.append (line)
-
-
- elif 'ping' in lcm:
-
- targetnode = envparameters['TargetNode'].split(' ')
- str_json = None
- for line in stdout_value: # p.stdout.readlines():
- print line # line,
- if "PLAY RECAP" in line:
- ParseFlag = False
- if ParseFlag and len(line.strip())>0:
- str_json += line.strip()
- if "TASK [debug]" in line:
- ParseFlag = True
- str_json = ''
- log.append (line)
-
- if str_json:
- if '=>' in str_json:
- out_json =eval(str_json.split('=>')[1].replace('true','True').replace('false','False'))
-
- if 'ping.stdout_lines' in out_json:
- for node in targetnode:
- ip_address = node
- ok_flag = '0'
- changed_flag = '0'
- unreachable_flag = '0'
- failed_flag = '1'
- for rec in out_json['ping.stdout_lines']:
- if node in rec and "is alive" in rec:
- ok_flag = '1'
- changed_flag = '1'
- unreachable_flag = '0'
- failed_flag = '0'
- for rec in out_json['ping.stdout_lines']:
- if node in rec and "address not found" in rec:
- ok_flag = '0'
- changed_flag = '0'
- unreachable_flag = '1'
- failed_flag = '0'
- retval[ip_address]=[ok_flag, changed_flag, unreachable_flag,
- failed_flag]
- else:
-
- for line in stdout_value: # p.stdout.readlines():
- print line # line,
- if ParseFlag and len(line.strip())>0:
- ip_address = line.split(':')[0].strip()
- ok_flag = line.split(':')[1].strip().split('=')[1].split('changed')[0].strip()
- changed_flag = line.split(':')[1].strip().split('=')[2].split('unreachable')[0].strip()
- unreachable_flag = line.split(':')[1].strip().split('=')[3].split('failed')[0].strip()
- failed_flag = line.split(':')[1].strip().split('=')[4].strip()
- retval[ip_address]=[ok_flag, changed_flag, unreachable_flag, failed_flag]
- if "PLAY RECAP" in line:
- ParseFlag = True
- log.append (line)
-
- # retval['p'] = p.wait()
-
- print " =================ANSIBLE STDOUT END==============================================\n"
-
- return retval, log, returncode
-
-if __name__ == '__main__':
-
- from multiprocessing import Process, Value, Array, Manager
- import time
-
- nodelist = 'host'
-
- playbook_file = 'ansible_sleep@0.00.yml'
-
-
- d = Manager().dict()
-
- p = Process(nodelist=ansible_call, args=('ansible_module_config', playbook_file, nodelist,d, ))
- p.start()
-
- print "Process running"
- print d
- p.join()
- print d
diff --git a/installation/ansible-server/src/main/scripts/AnsibleSql.py b/installation/ansible-server/src/main/scripts/AnsibleSql.py
deleted file mode 100755
index ab58a96c..00000000
--- a/installation/ansible-server/src/main/scripts/AnsibleSql.py
+++ /dev/null
@@ -1,322 +0,0 @@
-'''
-/*-
-* ============LICENSE_START=======================================================
-* ONAP : APPC
-* ================================================================================
-* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-* ================================================================================
-* Copyright (C) 2017 Amdocs
-* =============================================================================
-* 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.
-*
-* ECOMP is a trademark and service mark of AT&T Intellectual Property.
-* ============LICENSE_END=========================================================
-*/
-'''
-
-import pymysql, sys
-from os import listdir
-from os.path import isfile, join
-
-class mySql():
-
- def __init__(self, myhost, myuser, mypasswd, mydb):
- self.con = True
- self.error = ''
- self.db = None
- try:
- self.db = pymysql.connect(host=myhost,
- user=myuser,
- passwd=mypasswd,
- db=mydb)
- self.cur = self.db.cursor()
- except Exception as e:
- self.error = e[1]
- self.con = False
-
- def Query (self, myquery, val = None):
- results = None
- try:
- if val:
- self.cur.execute(myquery, val)
- else:
- self.cur.execute(myquery)
- self.db.commit()
- results = self.cur.fetchall()
- except Exception, e:
- results = repr(e)
- return results
-
- def Close (self):
- if self.db:
- self.db.close()
-
-def loadPlaybook (sqlintf, value, version, ext = '.yml'):
-
- errorCode = 0
- diag = ''
-
- # Test if primary key already defined
- query = "SELECT name FROM playbook WHERE name='" + value +"'"
- results = sqlintf.Query (query)
- if len(results) > 0:
- pass
- else:
- query = "INSERT INTO playbook (name) VALUES ('" + value + "')"
- results = sqlintf.Query (query)
- if len(results) > 0:
- errorCode = 1
- diag = results
-
- # Load playbook
- file = open(playbook_path + value + ext, 'r')
- load_file = file.read()
-
- if not errorCode:
- sql = "UPDATE playbook SET value=%s, version=%s, type=%s WHERE name=%s"
-
- results = sqlintf.Query(sql, (load_file, version, ext, value))
-
- if len (results) > 0:
- # Error loading playbook
- errorCode = 1
- diag = results
-
- return errorCode, diag
-
-def loadCredentials (sqlintf, hostgroup, hostname, cred):
- errorCode = 0
- diag = ''
-
- # Load credentials
-
- query = "SELECT hostname,hostgroup FROM inventory WHERE hostname='" + hostname +"'"
- results = sqlintf.Query (query)
-
- if hostname in str (results):
-
- results_hostgroups = results[0][1]
-
- if hostgroup in results_hostgroups.split(','):
- query = "UPDATE inventory SET hostname='" + hostname + "',credentials='" +\
- cred +\
- "' WHERE hostname='" + hostname + "'"
- else:
-
- results_hostgroups = results_hostgroups + ',' + hostgroup
-
- query = "UPDATE inventory SET hostname='" + hostname + "',credentials='" +\
- cred + "',hostgroup='" + results_hostgroups + \
- "' WHERE hostname='" + hostname + "'"
-
- results = sqlintf.Query (query)
-
- else:
-
- query = "INSERT INTO inventory (hostgroup, hostname, credentials) VALUES ('" + \
- hostgroup + "','" + hostname + "','" + cred + "')"
- results = sqlintf.Query (query)
-
- if len (results) > 0:
- # Error loading playbook
- errorCode = 1
- diag = results
-
- return errorCode, diag
-
-
-def readPlaybook (sqlintf, value, version=None):
-
- errorCode = 0
- diag = ''
-
- print "***> in AnsibleSql.readPlaybook"
-
- if not version:
- query = "SELECT MAX(version) FROM playbook WHERE name like'" + value + "%'"
- print " Query:", query
- results = sqlintf.Query (query)
- version = results[0][0]
-
- print " Provided playbook name:", value
- print " Used version:", version
-
- results = []
- if version:
- query = "SELECT value,type FROM playbook WHERE name='" + value + "@" + version + "'"
- results = sqlintf.Query (query)
-
- print "Query:", query
- print "Results:", results
-
- if len(results) == 0:
- errorCode = 1
- else:
- if len(results[0]) == 0:
- errorCode = 1
- diag = results[0]
- else:
- diag = results[0]
-
- return value, version, errorCode, diag
-
-def readCredentials (sqlintf, tag):
- errorCode = []
- diag = []
-
- print "***> in AnsibleSql.readCredential"
-
- # Load credentials
-
- for rec in tag:
-
- # Try hostgroup
- query = "SELECT hostgroup, hostname, credentials FROM inventory WHERE hostgroup LIKE '%" + \
- rec +"%'"
- query_results = sqlintf.Query (query)
-
- results = ()
- for q in query_results:
- if rec in q[0].split(','):
- l = list(q)
- l[0] = rec
- q = tuple(l)
- results = (q,) + results
-
- if len(results) == 0:
- # Try hostname
- query = "SELECT hostgroup, hostname, credentials FROM inventory WHERE hostname='" + \
- rec +"'"
- results = sqlintf.Query (query)
-
- print " Query:", query
- print " Results:", len(results), results
-
- if len(results) == 0:
- errorCode = 1
- hostgroup = rec
- hostname = rec
- credentials = 'ansible_connection=ssh ansible_ssh_user=na ansible_ssh_private_key_file=na\n'
- diag.append([hostgroup, hostname, credentials])
- else:
- errorCode = 0
- for i in range(len (results)):
- for h in results[i][0].split(','):
- hostgroup = h
- hostname = results[i][1]
- credentials = results[i][2]
- diag.append([hostgroup, hostname, credentials])
-
- return errorCode, diag
-
-
-if __name__ == '__main__':
-
- ################################################################
- # Change below
- ################################################################
- host="localhost" # your host, usually localhost
- user="mysql_user_id" # your username
- passwd="password_4_mysql_user_id" # your password
- db="ansible" # name of the data base
-
- playbook_path = "/home/ubuntu/RestServerOpenSource/"
- inventory = "/home/ubuntu/RestServerOpenSource/Ansible_inventory"
- ################################################################
-
- onlyfiles = [f for f in listdir(playbook_path)
- if isfile(join(playbook_path, f))]
-
- sqlintf = mySql (host, user, passwd, db)
-
- # Load playbooks
-
- print "Loading playbooks"
- for file in onlyfiles:
- if "yml" in file:
-
- name = file.split (".yml")[0]
- print " Loading:", name
- version = name.split("@")[1]
- errorCode, diag = loadPlaybook (sqlintf, name, version, '.yml')
- if errorCode:
- print " Results: Failed - ", diag
- else:
- print " Results: Success"
-
- print "\nLoading inventory"
-
- # Load inventory
-
- hostgroup = None
- inv = {}
- file = open(inventory, 'r')
-
- for line in file:
-
- if '[' in line and ']' in line:
- hostgroup = line.strip().replace('[','').replace(']','')
- inv[hostgroup] = {}
- elif hostgroup and len(line.strip())>0:
- host = line.strip().split(" ")[0]
- credentials = line.replace(host,"")
- inv[hostgroup][host] = credentials
-
- file.close()
-
- for hostgroup in inv:
- print " Loading:", hostgroup
- hostfqdn = ''
- cred = ''
- for hostname in inv[hostgroup]:
- cred = inv[hostgroup][hostname]
- errorCode, diag = loadCredentials (sqlintf, hostgroup, hostname, cred)
- if errorCode:
- print " Results: Failed - ", diag
- else:
- print " Results: Success"
-
- print "\nReading playbook"
-
- # Read playbook
-
- if not sqlintf.con:
- print "Cannot connect to MySql:", sqlintf.error
- sys.exit()
-
- name = "ansible_sleep"
- print "Reading playbook:", name
- value, version, errorCode, diag = readPlaybook (sqlintf, name)
- if errorCode:
- print "Results: Failed - ", diag
- else:
- print "Results: Success"
- print value
- print version
- print diag
-
- print "\nReading inventory"
-
- # Read inventory
-
- tag = ["your_inventory_test_group_name"]
- print "Reading inventory tag:", tag
- errorCode, diag = readCredentials (sqlintf, tag)
- if errorCode:
- print "Results: Failed - ", diag
- else:
- print "Results: Success"
- print diag
-
- sqlintf.Close()
-
diff --git a/installation/ansible-server/src/main/scripts/LoadAnsibleMySql.py b/installation/ansible-server/src/main/scripts/LoadAnsibleMySql.py
deleted file mode 100755
index 0a1c78a6..00000000
--- a/installation/ansible-server/src/main/scripts/LoadAnsibleMySql.py
+++ /dev/null
@@ -1,207 +0,0 @@
-'''
-/*-
-* ============LICENSE_START=======================================================
-* ONAP : APPC
-* ================================================================================
-* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-* ================================================================================
-* Copyright (C) 2017 Amdocs
-* =============================================================================
-* 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.
-*
-* ECOMP is a trademark and service mark of AT&T Intellectual Property.
-* ============LICENSE_END=========================================================
-*/
-'''
-
-#!/usr/bin/python
-import pymysql
-from os import listdir
-from os.path import isfile, join
-
-class mySql():
-
- def __init__(self, myhost, myuser, mypasswd, mydb):
- self.db = pymysql.connect(host=myhost,
- user=myuser,
- passwd=mypasswd,
- db=mydb)
- self.cur = self.db.cursor()
-
- def Query (self, myquery, val = None):
- results = None
- error = None
- try:
- if val:
- self.cur.execute(myquery, val)
- else:
- self.cur.execute(myquery)
- self.db.commit()
- results = self.cur.fetchall()
- except Exception, e:
- error = str (e)
- return results, error
-
- def Close (self):
- self.db.close()
-
-def loadPlaybook (value, version, ext = '.yml'):
-
- errorCode = 0
- diag = ''
-
- # Test if primary key already defined
- query = "SELECT name FROM playbook WHERE name='" + value +"'"
- results, error = sqlintf.Query (query)
- if results:
- # print "Primary key already defined: Updating playbook"
- pass
- else:
- # print "Primary key not defined: Insert new playbook"
- query = "INSERT INTO playbook (name) VALUES ('" + value + "')"
- results, error = sqlintf.Query (query)
- if error:
- errorCode = 1
- diag = error
-
- # Load playbook
- file = open(playbook_path + value + ext, 'r')
- load_file = file.read()
-
- # Load playbook
-
- if not errorCode:
- sql = "UPDATE playbook SET value=%s, version=%s, type=%s WHERE name=%s"
-
- results, error = sqlintf.Query(sql, (load_file, version, ext, value))
-
- if error:
- # Error loading playbook
- errorCode = 1
- diag = error
-
- return errorCode, diag
-
-def loadCredentials (hostgroup, hostname, cred):
- errorCode = 0
- diag = ''
-
- # Load credentials
-
- query = "SELECT hostname,hostgroup FROM inventory WHERE hostname='" + hostname +"'"
- results = sqlintf.Query (query)
-
- print '==>', results
-
- if hostname in str(results):
-
- results_hostgroups = results[0][0][1]
-
- # print "Record already defined: Updating inventory"
- if hostgroup in results_hostgroups.split(','):
- query = "UPDATE inventory SET hostname='" + hostname + "',credentials='" +\
- cred +\
- "' WHERE hostname='" + hostname + "'"
- else:
-
- results_hostgroups = results_hostgroups + ',' + hostgroup
-
- query = "UPDATE inventory SET hostname='" + hostname + "',credentials='" +\
- cred + "',hostgroup='" + results_hostgroups + \
- "' WHERE hostname='" + hostname + "'"
-
- results, error = sqlintf.Query (query)
-
- else:
-
- query = "INSERT INTO inventory (hostgroup, hostname, credentials) VALUES ('" + \
- hostgroup + "','" + hostname + "','" + cred + "')"
- results, error = sqlintf.Query (query)
-
- if error:
- # Error loading credentials
- errorCode = 1
- diag = results
-
- return errorCode, diag
-
-
-if __name__ == '__main__':
-
- ################################################################
- # Change below
- ################################################################
- host="localhost" # your host, usually localhost
- user="mysql_user_id" # your username
- passwd="password_4_mysql_user_id" # your password
- db="ansible" # name of the data base
-
- playbook_path = "/home/ubuntu/RestServerOpenSource/"
- inventory = "/home/ubuntu/RestServerOpenSource/Ansible_inventory"
- ################################################################
-
- onlyfiles = [f for f in listdir(playbook_path)
- if isfile(join(playbook_path, f))]
-
- sqlintf = mySql (host, user, passwd, db)
-
- # Load playbooks
- print "Loading playbooks"
- for file in onlyfiles:
- if "yml" in file:
- name = file.split (".yml")[0]
- print " Loading:", name
- version = name.split("@")[1]
- errorCode, diag = loadPlaybook (name, version)
- if errorCode:
- print " Results: Failed - ", diag
- else:
- print " Results: Success"
- if "tar.gz" in file:
- name = file.split (".tar.gz")[0]
- print " Loading:", name
- version = name.split("@")[1]
- errorCode, diag = loadPlaybook (name, version, ".tar.gz")
-
- print "\nLoading inventory"
-
- # Load inventory
- hostgroup = None
- inv = {}
- file = open(inventory, 'r')
-
- for line in file:
-
- if '[' in line and ']' in line:
- hostgroup = line.strip().replace('[','').replace(']','')
- inv[hostgroup] = {}
- elif hostgroup and len(line.strip())>0:
- host = line.strip().split(" ")[0]
- credentials = line.replace(host,"")
- inv[hostgroup][host] = credentials
-
- file.close()
-
- for hostgroup in inv:
- print " Loading:", hostgroup
- hostfqdn = ''
- cred = ''
- for hostname in inv[hostgroup]:
- cred = inv[hostgroup][hostname]
- errorCode, diag = loadCredentials (hostgroup, hostname, cred)
- if errorCode:
- print " Results: Failed - ", diag
- else:
- print " Results: Success"
-
- sqlintf.Close()
diff --git a/installation/ansible-server/src/main/scripts/README b/installation/ansible-server/src/main/scripts/README
deleted file mode 100644
index 976a8cf7..00000000
--- a/installation/ansible-server/src/main/scripts/README
+++ /dev/null
@@ -1,103 +0,0 @@
-'''
-/*-
-* ============LICENSE_START=======================================================
-* ONAP : APPC
-* ================================================================================
-* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-* ================================================================================
-* Copyright (C) 2017 Amdocs
-* =============================================================================
-* 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.
-*
-* ECOMP is a trademark and service mark of AT&T Intellectual Property.
-* ============LICENSE_END=========================================================
-*/
-'''
-
-============
-INSTALLATION:
-============
-
-Python:
--------
-sudo apt-get install python2.7
-sudo apt-get install python-pip
-pip install PyMySQL
-pip install requests
-
-Ansible:
---------
-sudo apt-get install software-properties-common
-sudo apt-add-repository ppa:ansible/ansible
-sudo apt-get update
-sudo apt-get install ansible
-
-SQL db: N/A for SDNC
--------
-
-sudo apt-get install mysql-server
-
-Set root passwd during installation (i.e. password_4_mysql_user_id)
-
-sudo service mysql restart
-
-Setup mysql: N/A for SDNC
-------------
-
-mysql -u [username]-p
-mysql -uroot -p
-
-Create user (i.e. id=mysql_user_id psswd=password_4_mysql_user_id)
- CREATE USER 'appc'@'%' IDENTIFIED BY 'password_4_mysql_user_id';
- GRANT ALL PRIVILEGES ON *.* TO 'mysql_user_id'@'%';
- SET PASSWORD FOR 'mysql_user_id'@'%'=PASSWORD('password_4_mysql_user_id');
-
-Create schema
- CREATE SCHEMA ansible;
- show databases;
- use ansible;
- CREATE TABLE playbook (name VARCHAR(45) NOT NULL, value BLOB, type VARCHAR(60), version VARCHAR(60), PRIMARY KEY (name));
- show tables;
- CREATE TABLE inventory (hostname VARCHAR(45) NOT NULL, hostgroup VARCHAR(45), credentials VARCHAR(500), PRIMARY KEY (hostname));
- SHOW COLUMNS FROM playbook;
- SHOW COLUMNS FROM inventory;
- GRANT ALL PRIVILEGES ON *.* TO 'mysql_user_id'@'%' IDENTIFIED BY 'password_4_mysql_user_id' WITH GRANT OPTION;
- GRANT ALL PRIVILEGES ON *.* TO 'ansible'@'%' IDENTIFIED BY 'ansible_agent' WITH GRANT OPTION;
- FLUSH PRIVILEGES;
-
-Load db: N/A for SDNC
---------
-
-python LoadAnsibleMySql.py
-
-=============
-CODE TESTING:
-=============
-1. Start RestServer: python RestServer.py
-
-2. Try curl commands (case no secured REST: http & no authentication):
-
-- Request to execute playbook:
-curl -H "Content-type: application/json" -X POST -d '{"Id": "10", "PlaybookName": "ansible_sleep", "NodeList": ["host"], "Timeout": "60", "EnvParameters": {"Sleep": "10"}}' http://0.0.0.0:8000/Dispatch
-
-response: {"ExpectedDuration": "60sec", "StatusMessage": "PENDING", "StatusCode": 100}
-
-- Get results (blocked until test finished):
-curl --cacert ~/SshKey/fusion_eric-vm_cert.pem --user "appc:abc123" -H "Content-type: application/json" -X GET "http://0.0.0.0:8000/Dispatch/?Id=10&Type=GetResult"
-
-response: {"Results": {"localhost": {"GroupName": "host", "StatusMessage": "SUCCESS", "StatusCode": 200}}, "PlaybookName": "ansible_sleep", "Version": "0.00", "Duration": "11.261794", "StatusMessage": "FINISHED", "StatusCode": 200}
-
-- Delete playbook execution information
-curl --cacert ~/SshKey/fusion_eric-vm_cert.pem --user "appc:abc123" -H "Content-type: application/json" -X DELETE http://0.0.0.0:8000/Dispatch/?Id=10
-
-response: {"StatusMessage": "PLAYBOOK EXECUTION RECORDS DELETED", "StatusCode": 200}
diff --git a/installation/ansible-server/src/main/scripts/RestServer.py b/installation/ansible-server/src/main/scripts/RestServer.py
deleted file mode 100755
index 4758a9b9..00000000
--- a/installation/ansible-server/src/main/scripts/RestServer.py
+++ /dev/null
@@ -1,948 +0,0 @@
-'''
-/*-
-* ============LICENSE_START=======================================================
-* ONAP : APPC
-* ================================================================================
-* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-* ================================================================================
-* Copyright (C) 2017 Amdocs
-* =============================================================================
-* 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.
-*
-* ECOMP is a trademark and service mark of AT&T Intellectual Property.
-* ============LICENSE_END=========================================================
-*/
-'''
-
-import time, datetime, json, os, sys, subprocess, re
-import uuid
-import tarfile
-import shutil
-
-import requests
-
-import cherrypy
-from cherrypy.lib.httputil import parse_query_string
-from cherrypy.lib import auth_basic
-
-from multiprocessing import Process, Manager
-
-from AnsibleModule import ansibleSysCall
-
-import AnsibleSql
-from AnsibleSql import readPlaybook, readCredentials
-
-from os import listdir
-from os.path import isfile, join
-
-TestRecord = Manager().dict()
-ActiveProcess = {}
-
-def sys_call (cmd):
- p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- output = p.stdout.readlines()
- retval = p.wait()
- if len (output) > 0:
- for i in range(len(output)):
- output[i] = output[i].strip()
- return retval, output
-
-def callback (Id, Result, Output, Log, returncode):
-
- print "***> in RestServer.callback"
-
- if Id in TestRecord:
- time_now = datetime.datetime.utcnow()
- delta_time = (time_now - TestRecord[Id]['Time']).total_seconds()
- Result['PlaybookName'] = TestRecord[Id]['PlaybookName']
- Result['Version'] = TestRecord[Id]['Version']
- if returncode == 137:
- Result['StatusCode'] = 500
- Result['StatusMessage'] = "TERMINATED"
- else:
- Result['StatusCode'] = 200
- Result['StatusMessage'] = "FINISHED"
-
- # Need to update the whole data structure for key=Id otherwise Manager is not updated
- TestRecord[Id] = {'PlaybookName': TestRecord[Id]['PlaybookName'],
- 'LCM': TestRecord[Id]['LCM'],
- 'Version': TestRecord[Id]['Version'],
- 'NodeList': TestRecord[Id]['NodeList'],
- 'HostGroupList': TestRecord[Id]['HostGroupList'],
- 'HostNameList': TestRecord[Id]['HostNameList'],
- 'Time': TestRecord[Id]['Time'],
- 'Timeout': TestRecord[Id]['Timeout'],
- 'Duration': str(delta_time),
- 'EnvParameters': TestRecord[Id]['EnvParameters'],
- 'LocalParameters': TestRecord[Id]['LocalParameters'],
- 'FileParameters': TestRecord[Id]['FileParameters'],
- 'CallBack': TestRecord[Id]['CallBack'],
- 'Result': Result,
- 'Log': Log,
- 'Output': Output,
- 'Path': TestRecord[Id]['Path'],
- 'Mandatory': TestRecord[Id]['Path']}
-
- if not TestRecord[Id]['CallBack'] == None:
-
- # Posting results to callback server
-
- data = {"StatusCode": 200,
- "StatusMessage": "FINISHED",
- "PlaybookName": TestRecord[Id]["PlaybookName"],
- "Version": TestRecord[Id]["Version"],
- "Duration": TestRecord[Id]["Duration"],
- "Results": TestRecord[Id]['Result']['Results']}
-
- if not TestRecord[Id]['Output']['Output'] == {}:
- for key in data["Results"]:
- if key in TestRecord[Id]['Output']['Output']:
- data["Results"][key]["Output"] = TestRecord[Id]['Output']['Output'][key]
-
- print " Posting to", TestRecord[Id]['CallBack']
-
- s = requests.Session()
- r = s.post(TestRecord[Id]['CallBack'], data = json.dumps(data),
- headers = {'content-type': 'application/json'})
- print " Response", r.status_code, r.text
-
-def RunAnsible_Playbook (callback, Id, Inventory, Playbook, NodeList, TestRecord,
- Path, ArchiveFlag):
-
- print "***> in RestServer.RunAnsible_Playbook"
-
- # Run test in playbook for given target
- Result = ''
-
- retval, log, returncode = ansibleSysCall (Inventory, Playbook, NodeList,
- TestRecord[Id]['Mandatory'],
- TestRecord[Id]['EnvParameters'],
- TestRecord[Id]['LocalParameters'],
- TestRecord[Id]['LCM'],
- TestRecord[Id]['Timeout'])
-
-
- print " returncode:", returncode
- print " retval: ", retval
- print " log: ", log
-
- Log = ''.join(log)
- Output = {'Output': {}}
-
- onlyfiles = [f for f in listdir(Path)
- if isfile(join(Path, f))]
-
- for file in onlyfiles:
- if "results.txt" in file:
- f = open(Path + "/" + file, "r")
- key = file.split("_")[0]
- Output['Output'][key] = f.read()
- f.close()
-
- Result = {'Results': {}}
- if 'could not be found' in Log:
- Result['Results'] = {"StatusCode": 101,
- "StatusMessage": "PLAYBOOK NOT FOUND"}
- if returncode == 137:
- Result['Results'] = {"StatusCode": 500,
- "StatusMessage": "TERMINATED"}
-
- elif TestRecord[Id]['NodeList'] == []:
-
- host_index = None
-
- if 'TargetNode' in TestRecord[Id]['EnvParameters']:
- targetlist = TestRecord[Id]['EnvParameters']['TargetNode'].split(' ')
- else:
- targetlist = ["localhost"]
-
- for key in retval:
- for i in range (len(targetlist)):
- if key in targetlist[i]:
- host_index = i
-
- if int(retval[key][0]) > 0 and int(retval[key][2]) == 0 and \
- int(retval[key][3]) == 0:
-
- if host_index:
- Result['Results'][targetlist[host_index]] = \
- {"GroupName": 'na', "StatusCode": 200, \
- "StatusMessage": "SUCCESS"}
- else:
- Result['Results'][key] = \
- {"GroupName": 'na', "StatusCode": 200, \
- "StatusMessage": "SUCCESS"}
- elif int(retval[key][2]) > 0:
- if host_index:
- Result['Results'][targetlist[host_index]] = \
- {"GroupName": 'na', "StatusCode": 400, \
- "StatusMessage": "NOT REACHABLE"}
- else:
- Result['Results'][key] = \
- {"GroupName": 'na', "StatusCode": 400, \
- "StatusMessage": "NOT REACHABLE"}
- elif int(retval[key][3]) > 0:
- if host_index:
- Result['Results'][targetlist[host_index]] = \
- {"GroupName": 'na', "StatusCode": 400, \
- "StatusMessage": "FAILURE"}
- else:
- Result['Results'][key] = \
- {"GroupName": 'na', "StatusCode": 400, \
- "StatusMessage": "FAILURE"}
- else:
-
- for key in retval:
-
- if len(TestRecord[Id]['HostNameList']) > 0:
-
- host_index = []
- for i in range (len(TestRecord[Id]['HostNameList'])):
- if key in TestRecord[Id]['HostNameList'][i]:
- host_index.append(i)
-
- if int(retval[key][0]) > 0 and int(retval[key][2]) == 0 and \
- int(retval[key][3]) == 0:
-
- if len(host_index) > 0:
- Result['Results'][TestRecord[Id]['HostNameList'][host_index[0]]] = \
- {"GroupName": TestRecord[Id]['HostGroupList'][host_index[0]],
- "StatusCode": 200, "StatusMessage": "SUCCESS"}
-
- for i in range (1, len(host_index)):
- Result['Results'][TestRecord[Id]['HostNameList'][host_index[i]]]["GroupName"]+=\
- "," + TestRecord[Id]['HostGroupList'][host_index[i]]
- else:
- Result['Results'][key] = \
- {"GroupName": key,
- "StatusCode": 200, "StatusMessage": "SUCCESS"}
-
- elif int(retval[key][2]) > 0:
-
- if len(host_index) > 0:
- Result['Results'][TestRecord[Id]['HostNameList'][host_index[0]]] = \
- {"GroupName": TestRecord[Id]['HostGroupList'][host_index[0]],
- "StatusCode": 400, "StatusMessage": "NOT REACHABLE"}
-
- for i in range (1, len(host_index)):
- Result['Results'][TestRecord[Id]['HostNameList'][host_index[i]]]["GroupName"]+=\
- "," + TestRecord[Id]['HostGroupList'][host_index[i]]
- else:
- Result['Results'][key] = \
- {"GroupName": key,
- "StatusCode": 200, "StatusMessage": "NOT REACHABLE"}
-
- elif int(retval[key][3]) > 0:
-
- if len(host_index) > 0:
- Result['Results'][TestRecord[Id]['HostNameList'][host_index[0]]] = \
- {"GroupName": TestRecord[Id]['HostGroupList'][host_index[0]],
- "StatusCode": 400, "StatusMessage": "FAILURE"}
-
- for i in range (1, len(host_index)):
- Result['Results'][TestRecord[Id]['HostNameList'][host_index[i]]]["GroupName"]+=\
- "," + TestRecord[Id]['HostGroupList'][host_index[i]]
- else:
- Result['Results'][key] = \
- {"GroupName": key,
- "StatusCode": 200, "StatusMessage": "FAILURE"}
- else:
- host_index = None
- for i in range (len(TestRecord[Id]['NodeList'])):
- if key in TestRecord[Id]['NodeList'][i]:
- host_index = i
-
- if int(retval[key][0]) > 0 and int(retval[key][2]) == 0 and \
- int(retval[key][3]) == 0:
- Result['Results'][TestRecord[Id]['NodeList'][host_index]] = \
- {"GroupName": 'na', "StatusCode": 200, \
- "StatusMessage": "SUCCESS"}
- elif int(retval[key][2]) > 0:
- Result['Results'][TestRecord[Id]['NodeList'][host_index]] = \
- {"GroupName": 'na', "StatusCode": 400, "StatusMessage": "NOT REACHABLE"}
- elif int(retval[key][3]) > 0:
- Result['Results'][TestRecord[Id]['NodeList'][host_index]] = \
- {"GroupName": 'na', "StatusCode": 400, "StatusMessage": "FAILURE"}
-
- callback (Id, Result, Output, Log, returncode)
-
-class TestManager (object):
-
- @cherrypy.expose
- @cherrypy.tools.json_out()
- @cherrypy.tools.json_in()
- @cherrypy.tools.allow(methods=['POST', 'GET', 'DELETE'])
-
- def Dispatch(self, **kwargs):
-
- # Let cherrypy error handler deal with malformed requests
- # No need for explicit error handler, we use default ones
-
- time_now = datetime.datetime.utcnow()
-
- # Erase old test results (2x timeout)
- if TestRecord:
- for key in TestRecord.copy():
- delta_time = (time_now - TestRecord[key]['Time']).seconds
- if delta_time > 2*TestRecord[key]['Timeout']:
- print "Deleted history for test", key
- if os.path.exists(TestRecord[key]['Path']):
- shutil.rmtree (TestRecord[key]['Path'])
- del TestRecord[key]
-
- print "***> in RestServer.Dispatch:", cherrypy.request.method
-
- HomeDir = os.path.dirname(os.path.realpath("~/"))
-
- if 'POST' in cherrypy.request.method:
-
- input_json = cherrypy.request.json
- print " Payload: ", input_json
-
- if 'Id' in input_json and 'PlaybookName' in input_json:
-
- if True:
-
- if not input_json['Id'] in TestRecord:
-
- Id = input_json['Id']
- PlaybookName = input_json['PlaybookName']
-
- version = None
- if 'Version' in input_json:
- version = input_json['Version']
-
- AnsibleInvFail = True
- AnsiblePlaybookFail = True
-
- MySqlConFail = True
- MySqlCause = ''
-
- LocalNodeList = None
-
- str_uuid = str (uuid.uuid4())
-
- LCM = PlaybookName.split(".")[0].split('_')[-1]
- PlaybookDir = HomeDir + "/" + ansible_temp + "/" + \
- PlaybookName.split(".")[0] + "_" + str_uuid
- AnsibleInv = LCM + "_" + "inventory"
- ArchiveFlag = False
-
- print " LCM: ", LCM
- print " PlaybookDir: ", ansible_temp + PlaybookDir.split(ansible_temp)[1]
- print " AnsibleInv: ", AnsibleInv
- print " ansible_temp: ", ansible_temp
-
- if not os.path.exists(HomeDir + "/" + ansible_temp):
- os.makedirs(HomeDir + "/" + ansible_temp)
-
- os.mkdir(PlaybookDir)
-
- # Process inventory file for target
-
- hostgrouplist = []
- hostnamelist = []
-
- NodeList = []
- if 'NodeList' in input_json:
- NodeList = input_json['NodeList']
-
- print " NodeList: ", NodeList
-
- if NodeList == []:
- # By default set to local host
- AnsibleInvFail = False
-
- LocalNodeList = "host"
- LocalCredentials = "localhost ansible_connection=local"
- f = open(PlaybookDir + "/" + AnsibleInv, "w")
- f.write("[" + LocalNodeList + "]\n")
- f.write(LocalCredentials)
- f.close()
-
- else:
-
- if from_files:
-
- # Get credentials from file
-
- data_inventory_orig = {}
- data_inventory_target = {}
- curr_group = None
-
- print "***>", ansible_path + "/" + ansible_inv
- f = open(ansible_path + "/" + ansible_inv, "r")
- for line in f:
- line = line.rstrip()
-
- if len(line)> 0:
- if '#' not in line:
- if "[" in line and "]" in line:
- data_inventory_orig[line] = []
- curr_group = line
- else:
- data_inventory_orig[curr_group].append(line)
- f.close()
-
- for node in NodeList:
- Fail = True
- if "[" + node + "]" in data_inventory_orig:
- if not "[" + node + "]" in data_inventory_target:
-
- print "RESET", "[" + node + "]"
- data_inventory_target["[" + node + "]"] = []
- else:
- print "OK", "[" + node + "]"
- Fail = False
- for cred in data_inventory_orig["[" + node + "]"]:
- data_inventory_target["[" + node + "]"].append(cred)
-
- else:
- for key in data_inventory_orig:
- if node in " ".join(data_inventory_orig[key]):
- if not key in data_inventory_target:
- data_inventory_target[key] = []
- for cred in data_inventory_orig[key]:
- if node in cred:
- data_inventory_target[key].append(cred)
- Fail = False
-
- if Fail:
- data_inventory_target["["+node+"]"] = \
- [node + " ansible_connection=ssh ansible_ssh_user=na ansible_ssh_private_key_file=na"]
-
- AnsibleInvFail = False
-
- f = open(PlaybookDir + "/" + AnsibleInv, "w")
- for key in data_inventory_target:
- f.write(key + "\n")
- for rec in data_inventory_target[key]:
- hostgrouplist.append(key.replace("[", '').replace("]", ''))
- hostnamelist.append(rec.split(' ')[0])
- f.write(rec + "\n")
- f.close()
-
- else:
-
- # Get credentials from mySQL
-
- sqlintf = AnsibleSql.mySql (host, user, passwd,
- db)
- if sqlintf.con:
- MySqlConFail = False
- errorCode, diag = readCredentials (sqlintf,
- NodeList)
-
- print errorCode, diag
- if len (diag) > 0:
- f = open(PlaybookDir + "/" + AnsibleInv,
- "w")
- AnsibleInvFail = False
- # [hostgroup, hostname, credentials]
- for i in range(len(diag)):
- f.write('[' + diag[i][0] + ']' + "\n")
- f.write(diag[i][1]+ " " + diag[i][2] + "\n\n")
- hostgrouplist.append(diag[i][0])
- hostnamelist.append(diag[i][1])
- f.close()
- else:
- MySqlConFailCause = sqlintf.error
- sqlintf.Close()
-
- timeout = timeout_seconds
- if 'Timeout' in input_json:
- timeout = int (input_json['Timeout'])
-
- EnvParam = {}
- if 'EnvParameters' in input_json:
- EnvParam = input_json['EnvParameters']
-
- LocalParam = {}
- if 'LocalParameters' in input_json:
- LocalParam = input_json['LocalParameters']
-
- FileParam = {}
- if 'FileParameters' in input_json:
- FileParam = input_json['FileParameters']
-
- callback_flag = None
- if 'CallBack' in input_json:
- callback_flag = input_json['CallBack']
-
- TestRecord[Id] = {'PlaybookName': PlaybookName,
- 'LCM': LCM,
- 'Version': version,
- 'NodeList': NodeList,
- 'HostGroupList': hostgrouplist,
- 'HostNameList': hostnamelist,
- 'Time': time_now,
- 'Duration': timeout,
- 'Timeout': timeout,
- 'EnvParameters': EnvParam,
- 'LocalParameters': LocalParam,
- 'FileParameters': FileParam,
- 'CallBack': callback_flag,
- 'Result': {"StatusCode": 100,
- "StatusMessage": 'PENDING',
- "ExpectedDuration": str(timeout) + "sec"},
- 'Log': '',
- 'Output': {},
- 'Path': PlaybookDir,
- 'Mandatory': None}
-
- # Write files
-
- if not TestRecord[Id]['FileParameters'] == {}:
- for key in TestRecord[Id]['FileParameters']:
- filename = key
- filecontent = TestRecord[Id]['FileParameters'][key]
- f = open(PlaybookDir + "/" + filename, "w")
- f.write(filecontent)
- f.close()
-
-
- # Process playbook
-
- if from_files:
-
- # Get playbooks from files
-
- MySqlConFail = False
-
- version = None
- target_PlaybookName = None
-
- if '@' in PlaybookName:
- version = PlaybookName.split("@")[1]
- version = version.replace('.yml','')
- version = version.replace('.tar.gz','')
-
- onlyfiles = [f for f in listdir(ansible_path)
- if isfile(join(ansible_path, f))]
-
- version_max = '0.00'
- version_target = ''
-
- for file in onlyfiles:
- if LCM in file:
- temp_version = file.split("@")[1]
- temp_version = temp_version.replace('.yml','')
- temp_version = temp_version.replace('.tar.gz','')
- if version_max < temp_version:
- version_max = temp_version
-
- if not version == None:
- if version in PlaybookName:
- version_target = version
- target_PlaybookName = file
-
- if target_PlaybookName == None:
- for file in onlyfiles:
- if LCM in file and version_max in file:
- target_PlaybookName = file
- version_target = version_max
-
- if target_PlaybookName:
- AnsiblePlaybookFail = False
- readversion = version_target
- src = ansible_path + "/" + target_PlaybookName
- if ".tar.gz" in target_PlaybookName:
- dest = PlaybookDir + "/" + LCM + ".tar.gz"
- shutil.copy2(src, dest)
- retcode = subprocess.call(['tar', '-xvzf',
- dest, "-C", PlaybookDir])
- ArchiveFlag = True
- else:
- dest = PlaybookDir + "/" + LCM + ".yml"
- shutil.copy2(src, dest)
-
- else:
- # Get playbooks from mySQL
-
- sqlintf = AnsibleSql.mySql (host, user, passwd, db)
- if sqlintf.con:
- MySqlConFail = False
-
- name, readversion, AnsiblePlaybookFail, diag = \
- readPlaybook (sqlintf, PlaybookName.split(".")[0],
- version)
-
- if not AnsiblePlaybookFail:
-
- f = open(PlaybookDir + "/" + LCM + diag[1], "w")
- f.write(diag[0])
- f.close()
-
- if ".tar.gz" in diag[1]:
- retcode = subprocess.call(['tar', '-xvzf',
- PlaybookDir + "/" + LCM + diag[1], "-C", PlaybookDir])
- f.close()
- ArchiveFlag = True
- else:
- MySqlConFailCause = sqlintf.error
- sqlintf.Close()
-
- if MySqlConFail:
- if os.path.exists(PlaybookDir):
- shutil.rmtree (PlaybookDir)
- del TestRecord[Id]
- return {"StatusCode": 101,
- "StatusMessage": "CANNOT CONNECT TO MYSQL: " \
- + MySqlConFailCause}
- elif AnsiblePlaybookFail:
- if os.path.exists(PlaybookDir):
- shutil.rmtree (PlaybookDir)
- del TestRecord[Id]
- return {"StatusCode": 101,
- "StatusMessage": "PLAYBOOK NOT FOUND"}
- elif AnsibleInvFail:
- if os.path.exists(PlaybookDir):
- shutil.rmtree (PlaybookDir)
- del TestRecord[Id]
- return {"StatusCode": 101,
- "StatusMessage": "NODE LIST CREDENTIALS NOT FOUND"}
- else:
-
- # Test EnvParameters
- playbook_path = None
- if ArchiveFlag:
- for dName, sdName, fList in os.walk(PlaybookDir):
- if LCM+".yml" in fList:
- playbook_path = dName
- else:
- playbook_path = PlaybookDir
-
- # Store local vars
- if not os.path.exists(playbook_path + "/vars"):
- os.mkdir(playbook_path + "/vars")
- if not os.path.isfile(playbook_path + "/vars/defaults.yml"):
- os.mknod(playbook_path + "/vars/defaults.yml")
-
- for key in TestRecord[Id]['LocalParameters']:
- host_index = []
- for i in range(len(TestRecord[Id]['HostNameList'])):
- if key in TestRecord[Id]['HostNameList'][i]:
- host_index.append(i)
- if len(host_index) == 0:
- for i in range(len(TestRecord[Id]['HostGroupList'])):
- if key in TestRecord[Id]['HostGroupList'][i]:
- host_index.append(i)
- if len(host_index) > 0:
- for i in range(len(host_index)):
- f = open(playbook_path + "/vars/" +
- TestRecord[Id]['HostNameList'][host_index[i]] +
- ".yml", "a")
- for param in TestRecord[Id]['LocalParameters'][key]:
- f.write(param + ": " +
- str (TestRecord[Id]['LocalParameters'][key][param]) +
- "\n")
- f.close()
-
- # Get mandatory parameters from playbook
- Mandatory = []
- with open(playbook_path + "/" + LCM + ".yml") as origin_file:
- for line in origin_file:
- if "Mandatory" in line:
- temp = line.split(":")[1].strip().replace(' ', '')
- if len(temp) > 0:
- Mandatory = temp.split(",")
-
- TestRecord[Id] = {'PlaybookName': TestRecord[Id]['PlaybookName'],
- 'LCM': TestRecord[Id]['LCM'],
- 'Version': readversion,
- 'NodeList': TestRecord[Id]['NodeList'],
- 'HostGroupList': TestRecord[Id]['HostGroupList'],
- 'HostNameList': TestRecord[Id]['HostNameList'],
- 'Time': TestRecord[Id]['Time'],
- 'Timeout': TestRecord[Id]['Timeout'],
- 'Duration': TestRecord[Id]['Duration'],
- 'EnvParameters': TestRecord[Id]['EnvParameters'],
- 'LocalParameters': TestRecord[Id]['LocalParameters'],
- 'FileParameters': TestRecord[Id]['FileParameters'],
- 'CallBack': TestRecord[Id]['CallBack'],
- 'Result': TestRecord[Id]['Result'],
- 'Log': TestRecord[Id]['Log'],
- 'Output': TestRecord[Id]['Output'],
- 'Path': TestRecord[Id]['Path'],
- 'Mandatory': Mandatory}
-
- TestKey = False
-
- if Mandatory:
- for val in Mandatory:
- if EnvParam:
- if val in EnvParam:
- TestKey = True
- else:
- if LocalParam:
- for key in TestRecord[Id]['NodeList']:
- if key in LocalParam:
- if val in LocalParam[key]:
- TestKey = True
- else:
- if LocalParam:
- for key in TestRecord[Id]['NodeList']:
- if key in LocalParam:
- if val in LocalParam[key]:
- TestKey = True
-
- if not TestKey:
- if os.path.exists(PlaybookDir):
- shutil.rmtree (PlaybookDir)
- del TestRecord[Id]
- return {"StatusCode": 101,
- "StatusMessage": "MISSING MANDATORY PARAMETER: " + \
- " ".join(str(x) for x in Mandatory)}
-
-
- # Cannot use thread because ansible module uses
- # signals which are only supported in main thread.
- # So use multiprocess with shared object
-
- p = Process(target = RunAnsible_Playbook,
- args = (callback, Id, PlaybookDir + "/" + AnsibleInv,
- playbook_path + "/" + LCM + ".yml",
- NodeList, TestRecord, PlaybookDir,
- ArchiveFlag))
- p.start()
- ActiveProcess[Id] = p
- return TestRecord[Id]['Result']
- else:
- return {"StatusCode": 101, "StatusMessage": "TEST ID ALREADY DEFINED"}
-
- else:
- return {"StatusCode": 500, "StatusMessage": "REQUEST MUST INCLUDE: NODELIST"}
-
- else:
- return {"StatusCode": 500, "StatusMessage": "JSON OBJECT MUST INCLUDE: ID, PLAYBOOKNAME"}
-
- elif 'GET' in cherrypy.request.method:
-
- input_data = parse_query_string(cherrypy.request.query_string)
-
- print "***> in RestServer.GET"
- print " Payload: ", input_data, input_data['Type']
-
- if 'Id' in input_data and 'Type' in input_data:
- if not ('GetResult' in input_data['Type'] or 'GetOutput' in input_data['Type'] or 'GetLog' in input_data['Type']):
- return {"StatusCode": 500, "StatusMessage": "RESULTS TYPE UNDEFINED"}
- if input_data['Id'] in TestRecord:
-
- if 'GetResult' in input_data['Type']:
-
- print "Result:", TestRecord[input_data['Id']]['Result']
-
- if 'StatusMessage' in TestRecord[input_data['Id']]['Result'] and getresults_block:
-
- print "*** Request blocked", input_data['Id']
-
- while ActiveProcess[input_data['Id']].is_alive():
- time.sleep(5)
-
- print "*** Request released ", input_data['Id']
-
- print TestRecord[input_data['Id']]['Result']
- if TestRecord[input_data['Id']]['Result']['StatusCode'] == 500:
- out_obj = TestRecord[input_data['Id']]['Result']['Results']
- else:
- out_obj = {"StatusCode": 200,
- "StatusMessage": "FINISHED",
- "PlaybookName": TestRecord[input_data['Id']]["PlaybookName"],
- "Version": TestRecord[input_data['Id']]["Version"],
- "Duration": TestRecord[input_data['Id']]["Duration"],
- "Results": TestRecord[input_data['Id']]['Result']['Results']}
- if not TestRecord[input_data['Id']]['Output']['Output'] == {}:
- for key in out_obj["Results"]:
- if key in TestRecord[input_data['Id']]['Output']['Output']:
- out_obj["Results"][key]["Output"] = TestRecord[input_data['Id']]['Output']['Output'][key]
-
- return out_obj
-
- elif 'GetOutput' in input_data['Type']:
-
- if TestRecord[input_data['Id']]['Output'] == {} and \
- getresults_block:
-
- print "*** Request blocked", input_data['Id']
-
- while TestRecord[input_data['Id']]['Output'] == {} \
- or 'StatusMessage' in TestRecord[input_data['Id']]['Result']:
- time.sleep(5)
-
- print "*** Request released ", input_data['Id']
-
- print "Output:", TestRecord[input_data['Id']]['Output']
- return {"Output": TestRecord[input_data['Id']]['Output']['Output']}
- else:
- # GetLog
-
- if TestRecord[input_data['Id']]['Log'] == '' and \
- getresults_block:
-
- print "*** Request blocked", input_data['Id']
-
- while TestRecord[input_data['Id']]['Log'] == '' \
- or 'StatusMessage' in TestRecord[input_data['Id']]['Result']:
- time.sleep(5)
-
- print "*** Request released ", input_data['Id']
-
- print "Log:", TestRecord[input_data['Id']]['Log']
- return {"Log": TestRecord[input_data['Id']]['Log']}
- else:
- return {"StatusCode": 500, "StatusMessage": "TEST ID UNDEFINED"}
- else:
- return {"StatusCode": 500, "StatusMessage": "MALFORMED REQUEST"}
- elif 'DELETE' in cherrypy.request.method:
- input_data = parse_query_string(cherrypy.request.query_string)
-
- print "***> in RestServer.DELETE"
- print " Payload: ", input_data
-
- if input_data['Id'] in TestRecord:
- if not 'PENDING' in TestRecord[input_data['Id']]['Result']:
- print " Path:", TestRecord[input_data['Id']]['Path']
- if os.path.exists(TestRecord[input_data['Id']]['Path']):
- shutil.rmtree (TestRecord[input_data['Id']]['Path'])
- TestRecord.pop (input_data['Id'])
- if input_data['Id'] in ActiveProcess:
- ActiveProcess.pop (input_data['Id'])
-
- return {"StatusCode": 200, "StatusMessage": "PLAYBOOK EXECUTION RECORDS DELETED"}
- else:
- return {"StatusCode": 200, "StatusMessage": "PENDING"}
- else:
- return {"StatusCode": 500, "StatusMessage": "TEST ID UNDEFINED"}
-
-
-if __name__ == '__main__':
-
- # Read configuration
-
- config_file_path = "RestServer_config"
-
- if not os.path.exists(config_file_path):
- print '[INFO] The config file does not exist'
- sys.exit(0)
-
- ip = 'na'
- port = 'na'
- tls = False
- auth = False
- pub = 'na'
- id = 'na'
- priv = 'na'
- psswd = 'na'
- timeout_seconds = 'na'
- ansible_path = 'na'
- ansible_inv = 'na'
- ansible_temp = 'na'
- host = 'na'
- user = 'na'
- passwd = 'na'
- db = 'na'
- getresults_block = False
- from_files = False
-
- file = open(config_file_path, 'r')
- for line in file.readlines():
- if '#' not in line:
- if 'ip:' in line:
- ip = line.split(':')[1].strip()
- elif 'port:' in line:
- port = line.split(':')[1].strip()
- elif 'tls:' in line:
- tls = 'YES' in line.split(':')[1].strip().upper()
- elif 'auth:' in line:
- auth = 'YES' in line.split(':')[1].strip().upper()
- if tls and 'priv:' in line:
- priv = line.split(':')[1].strip()
- if tls and 'pub:' in line:
- pub = line.split(':')[1].strip()
- if auth and 'id:' in line:
- id = line.split(':')[1].strip()
- if auth and 'psswd:' in line:
- psswd = line.split(':')[1].strip()
- if 'timeout_seconds' in line:
- timeout_seconds = int (line.split(':')[1].strip())
- if 'ansible_path' in line:
- ansible_path = line.split(':')[1].strip()
- if 'ansible_inv' in line:
- ansible_inv = line.split(':')[1].strip()
- if not os.path.exists(ansible_path + "/" + ansible_inv):
- print '[INFO] The ansible_inv file does not exist'
- sys.exit(0)
- if 'ansible_temp' in line:
- ansible_temp = line.split(':')[1].strip()
- if 'host' in line:
- host = line.split(':')[1].strip()
- if 'user' in line:
- user = line.split(':')[1].strip()
- if 'passwd' in line:
- passwd = line.split(':')[1].strip()
- if 'db' in line:
- db = line.split(':')[1].strip()
- if 'getresults_block' in line:
- getresults_block = 'YES' in line.split(':')[1].strip().upper()
- if 'from_files' in line:
- from_files = 'YES' in line.split(':')[1].strip().upper()
- file.close()
-
- # Initialization
-
- global_conf = {
- 'global': {
- 'server.socket_host': ip,
- 'server.socket_port': int(port),
- 'server.protocol_version': 'HTTP/1.1'
- }
- }
-
- if tls:
- # Use pythons built-in SSL
- cherrypy.server.ssl_module = 'builtin'
-
- # Point to certificate files
-
- if not os.path.exists(pub):
- print '[INFO] The public certificate does not exist'
- sys.exit(0)
-
- if not os.path.exists(priv):
- print '[INFO] The private key does not exist'
- sys.exit(0)
-
- cherrypy.server.ssl_certificate = pub
- cherrypy.server.ssl_private_key = priv
-
- if auth:
- userpassdict = {id: psswd}
- checkpassword = cherrypy.lib.auth_basic.checkpassword_dict(userpassdict)
-
- app_conf = {'/':
- {'tools.auth_basic.on': True,
- 'tools.auth_basic.realm': 'earth',
- 'tools.auth_basic.checkpassword': checkpassword,
- }
- }
-
- cherrypy.tree.mount(TestManager(), '/', app_conf)
- else:
- cherrypy.tree.mount(TestManager(), '/')
-
- cherrypy.config.update(global_conf)
-
- # Start server
-
- cherrypy.engine.start()
- cherrypy.engine.block()
diff --git a/installation/ansible-server/src/main/scripts/RestServer_config b/installation/ansible-server/src/main/scripts/RestServer_config
deleted file mode 100644
index a98d8749..00000000
--- a/installation/ansible-server/src/main/scripts/RestServer_config
+++ /dev/null
@@ -1,55 +0,0 @@
-# /*-
-# * ============LICENSE_START=======================================================
-# * ONAP : APPC
-# * ================================================================================
-# * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-# * ================================================================================
-# * Copyright (C) 2017 Amdocs
-# * =============================================================================
-# * 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.
-# *
-# * ECOMP is a trademark and service mark of AT&T Intellectual Property.
-# * ============LICENSE_END=========================================================
-# */
-
-# Host definition
-ip: 0.0.0.0
-port: 8000
-
-# Security (controls use of TLS encrypton and RestServer authentication)
-tls: no
-auth: no
-
-# TLS certificates (must be built on application host)
-priv: provide_privated_key.pem
-pub: provide_public_key.pem
-
-# RestServer authentication
-id: sdnc
-psswd: sdnc
-
-# Mysql
-host: dbhost
-user: sdnc
-passwd: sdnc
-db: ansible
-
-# Playbooks
-from_files: yes
-ansible_path: /opt/onap/sdnc/Playbooks
-ansible_inv: Ansible_inventory
-ansible_temp: PlaybooksTemp
-timeout_seconds: 60
-
-# Blocking on GetResults
-getresults_block: yes
diff --git a/installation/ansible-server/src/main/scripts/startAnsibleServer.sh b/installation/ansible-server/src/main/scripts/startAnsibleServer.sh
deleted file mode 100644
index c35f7864..00000000
--- a/installation/ansible-server/src/main/scripts/startAnsibleServer.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-exec &> >(tee -a "/var/log/ansible-server.log")
-
-if [ ! -f /tmp/.ansible-server-installed ]
-then
- pip install PyMySQL
- pip install cherrypy
- pip install requests
-
- apt-get -y install software-properties-common
- apt-add-repository -y ppa:ansible/ansible
- apt-get -y install ansible
-
- cp /etc/ansible/ansible.cfg /etc/ansible/ansible.cfg.orig
- cat /etc/ansible/ansible.cfg.orig | sed -e 's/#host_key_checking/host_key_checking/' > /etc/ansible/ansible.cfg
- date > /tmp/.ansible-server-installed 2>&1
-fi
-
-cd /opt/onap/sdnc
-exec /usr/bin/python RestServer.py
diff --git a/installation/sdnc/src/main/resources/vf_model.data.dump b/installation/sdnc/src/main/resources/vf_model.data.dump
index e98783fe..6e528e52 100644
--- a/installation/sdnc/src/main/resources/vf_model.data.dump
+++ b/installation/sdnc/src/main/resources/vf_model.data.dump
@@ -38,6 +38,9 @@ CREATE TABLE `VF_MODEL` (
`nf_role` varchar(255) DEFAULT NULL,
`vendor` varchar(255) DEFAULT NULL,
`vendor_version` varchar(255) DEFAULT NULL,
+ `sdnc_model_name` varchar(255) DEFAULT NULL,
+ `sdnc_model_version` varchar(255) DEFAULT NULL,
+ `sdnc_artifact_name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`customization_uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/installation/sdnc/src/main/resources/vf_module_model.data.dump b/installation/sdnc/src/main/resources/vf_module_model.data.dump
index 91e336f2..bd3139c2 100644
--- a/installation/sdnc/src/main/resources/vf_module_model.data.dump
+++ b/installation/sdnc/src/main/resources/vf_module_model.data.dump
@@ -31,6 +31,8 @@ CREATE TABLE `VF_MODULE_MODEL` (
`vf_module_type` varchar(255) DEFAULT NULL,
`availability_zone_count` int(11) DEFAULT NULL,
`ecomp_generated_vm_assignments` char(1) DEFAULT NULL,
+ `vf_customization_uuid` varchar(255) DEFAULT NULL,
+ `vf_module_label` varchar(255) DEFAULT NULL,
PRIMARY KEY (`customization_uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/installation/src/main/properties/generic-resource-api-dg.properties b/installation/src/main/properties/generic-resource-api-dg.properties
index b9ca1f69..ef99e9d0 100644
--- a/installation/src/main/properties/generic-resource-api-dg.properties
+++ b/installation/src/main/properties/generic-resource-api-dg.properties
@@ -10,6 +10,9 @@ restapi.trustStorePassword=adminadmin
restapi.keyStoreFileName=/opt/onap/sdnc/data/stores/sdnc.p12
restapi.keyStorePassword=adminadmin
restapi.connection-oof-url=http://oof.api.simpledemo.onap.org:8698/v1/route
+naming.gen-name.url=http://{naming-ms-instance-url}
+naming.gen-name.user={naming-ms-user}
+naming.gen-name.pwd={naming-ms-pwd}
# Templates
restapi.sz.templatefile=security-zone-allotted-resource.json
@@ -27,6 +30,7 @@ restapi.services.vnf.vfmodule.templatefile=vfmodule-vim-parameters.vgw.json
restapi.sotn-attachment.templatefile=sotn-attachment-allotted-resource.json
restapi.sdwan-attachment.templatefile=sdwan-attachment-allotted-resource.json
restapi.oof-getpath.templatefile=oof-getpath.json
+restapi.naming.gen-name.templatefile=naming-ms-post-gen-name.json
# URLs
restapi.cr-allottedresource=/restconf/config/GENERIC-RESOURCE-API:contrail-route-allotted-resources/contrail-route-allotted-resource/{allotted-resource-id}/
@@ -45,3 +49,4 @@ restapi.network-provided-resource=/restconf/config/GENERIC-RESOURCE-API:services
restapi.services=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}
restapi.service.vnf.vfmodule-resource=/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data/vnfs/vnf/{vnf-id}/vnf-data/vf-modules/vf-module/{vf-module-id}
restapi.connection-attachment-allottedresource=/restconf/config/GENERIC-RESOURCE-API:connection-attachment-allotted-resources/connection-attachment-allotted-resource/{allotted-resource-id}/
+restapi.naming.gen-name.service=/web/service/v1/genNetworkElementName
diff --git a/installation/src/main/properties/lcm-dg.properties b/installation/src/main/properties/lcm-dg.properties
index 7cd90640..3c6920e3 100644
--- a/installation/src/main/properties/lcm-dg.properties
+++ b/installation/src/main/properties/lcm-dg.properties
@@ -9,6 +9,9 @@ ansible.version=0.00
lcm.upgrade-pre-check.playbookname=ansible_precheck
lcm.upgrade-post-check.playbookname=ansible_postcheck
lcm.upgrade-software.playbookname=ansible_upgradesw
+lcm.pnf.upgrade-pre-check.playbookname=ansible_precheck_pnf
+lcm.pnf.upgrade-post-check.playbookname=ansible_postcheck_pnf
+lcm.pnf.upgrade-software.playbookname=ansible_upgradesw_pnf
lcm.quiesce-traffic.playbookname=ansible_quiescetraffic
lcm.resume-traffic.playbookname=ansible_resumetraffic
lcm.distribute-traffic.playbookname=ansible_distributetraffic
diff --git a/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_network-topology-operation.json b/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_network-topology-operation.json
index 76d920b1..9b4c70e3 100644
--- a/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_network-topology-operation.json
+++ b/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_network-topology-operation.json
@@ -1,20 +1,20 @@
[
{
- "id": "79f282c8.82473c",
+ "id": "4e8e1695.988a28",
"type": "dgstart",
"name": "DGSTART",
"outputs": 1,
- "x": 126.01040649414062,
- "y": 74.77774620056152,
- "z": "9aad28bb.de6b08",
+ "x": 123.01040649414062,
+ "y": 97.77774596214294,
+ "z": "2db908be.484d28",
"wires": [
[
- "aa8fb88e.70ce88"
+ "3d7adacf.e37b26"
]
]
},
{
- "id": "aa8fb88e.70ce88",
+ "id": "3d7adacf.e37b26",
"type": "service-logic",
"name": "GENERIC-RESOURCE-API ${project.version}",
"module": "GENERIC-RESOURCE-API",
@@ -22,1631 +22,1694 @@
"comments": "",
"xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='GENERIC-RESOURCE-API' version='${project.version}'>",
"outputs": 1,
- "x": 207.9627685546875,
- "y": 115.01585865020752,
- "z": "9aad28bb.de6b08",
+ "x": 204.9627685546875,
+ "y": 138.01585841178894,
+ "z": "2db908be.484d28",
"wires": [
[
- "6e24967e.ad6008"
+ "99936fad.eb5a8"
]
]
},
{
- "id": "6e24967e.ad6008",
+ "id": "99936fad.eb5a8",
"type": "method",
"name": "network-topology-operation",
"xml": "<method rpc='network-topology-operation' mode='sync'>\n",
"comments": "",
"outputs": 1,
- "x": 187.4390411376953,
- "y": 165.77775192260742,
- "z": "9aad28bb.de6b08",
+ "x": 184.4390411376953,
+ "y": 188.77775168418884,
+ "z": "2db908be.484d28",
"wires": [
[
- "7a35625.e24119c"
+ "fa94a458.153ec8"
]
]
},
{
- "id": "a789a649.5a0d58",
+ "id": "e85a20e2.1a6f",
"type": "comment",
"name": " NETWORK-TOPOLOGY-OPERATION ",
"info": "",
"comments": "",
- "x": 520.3552627563477,
- "y": 22.364089965820312,
- "z": "9aad28bb.de6b08",
+ "x": 517.3552627563477,
+ "y": 45.36408972740173,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "7a35625.e24119c",
+ "id": "fa94a458.153ec8",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 240.01043701171875,
- "y": 238.22122955322266,
- "z": "9aad28bb.de6b08",
+ "x": 237.01043701171875,
+ "y": 261.2212293148041,
+ "z": "2db908be.484d28",
"wires": [
[
- "ba0d38ae.e81c58",
- "457583d9.562e0c",
- "cba36fc0.072d2",
- "d3235e19.d8ecb"
+ "74a7b33e.25ccac",
+ "e6a39d58.fa5d7",
+ "94b2997f.90f198",
+ "2ccd4cf4.cd1224"
]
]
},
{
- "id": "ba0d38ae.e81c58",
+ "id": "74a7b33e.25ccac",
"type": "returnSuccess",
"name": "return success",
"xml": "<return status='success'>\n<parameter name=\"ack-final-indicator\" value=\"Y\" />\n<parameter name=\"error-code\" value=\"200\" />\n<parameter name=\"error-message\" value=\"`$error-message`\" />\n",
"comments": "",
- "x": 444.09381103515625,
- "y": 1264.3138828277588,
- "z": "9aad28bb.de6b08",
+ "x": 441.09381103515625,
+ "y": 1287.3138825893402,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "457583d9.562e0c",
+ "id": "e6a39d58.fa5d7",
"type": "switchNode",
"name": "switch svc-action",
"xml": "<switch test='`$network-topology-operation-input.sdnc-request-header.svc-action`'>\n",
"comments": "",
"outputs": 1,
- "x": 466.72467041015625,
- "y": 468.6349239349365,
- "z": "9aad28bb.de6b08",
+ "x": 463.72467041015625,
+ "y": 491.63492369651794,
+ "z": "2db908be.484d28",
"wires": [
[
- "dc5ac960.8b0118",
- "c0a124c2.b074a8",
- "615f84cf.02d10c",
- "5464b8d8.4a3498",
- "fb6e7e31.10ac3",
- "a87a521d.9540c",
- "31fb5db9.aec912",
- "24acb0b8.15f98"
+ "ad7b4573.ffb848",
+ "2a4dd65a.9a82ea",
+ "a50cf8ad.598a18",
+ "f1232753.705208",
+ "de92e919.3dfbf8",
+ "7130c8aa.c3e608",
+ "1591e42d.e2cabc",
+ "d1b59f6c.66aa3",
+ "3a527742.291048"
]
]
},
{
- "id": "dc5ac960.8b0118",
+ "id": "ad7b4573.ffb848",
"type": "other",
"name": "assign",
"xml": "<outcome value='assign'>\n",
"comments": "",
"outputs": 1,
- "x": 681.2009086608887,
- "y": 240.9206027984619,
- "z": "9aad28bb.de6b08",
+ "x": 678.2009086608887,
+ "y": 263.92060256004333,
+ "z": "2db908be.484d28",
"wires": [
[
- "875082ec.7b232"
+ "341de51.f64001a"
]
]
},
{
- "id": "875082ec.7b232",
+ "id": "341de51.f64001a",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 853.439079284668,
- "y": 238.92073154449463,
- "z": "9aad28bb.de6b08",
+ "x": 850.439079284668,
+ "y": 261.92073130607605,
+ "z": "2db908be.484d28",
"wires": [
[
- "580a77ff.6cd088"
+ "b2a344c1.b2b118"
]
]
},
{
- "id": "cba36fc0.072d2",
+ "id": "94b2997f.90f198",
"type": "call",
"name": "call GENERIC-RESOURCE-API:validate-network-input",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='validate-network-input' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 577.0103950500488,
- "y": 178.77775311470032,
- "z": "9aad28bb.de6b08",
+ "x": 574.0103950500488,
+ "y": 201.77775287628174,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "c0a124c2.b074a8",
+ "id": "2a4dd65a.9a82ea",
"type": "other",
"name": "activate",
"xml": "<outcome value='activate'>\n",
"comments": "",
"outputs": 1,
- "x": 684.0104484558105,
- "y": 330.7777404785156,
- "z": "9aad28bb.de6b08",
+ "x": 681.0104484558105,
+ "y": 353.77774024009705,
+ "z": "2db908be.484d28",
"wires": [
[
- "e703e8d7.7187b8"
+ "28e87a49.f59c96"
]
]
},
{
- "id": "5517cc3b.5b0904",
+ "id": "389876cb.1e467a",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1060.2486991882324,
- "y": 407.77792263031006,
- "z": "9aad28bb.de6b08",
+ "x": 1057.2486991882324,
+ "y": 430.7779223918915,
+ "z": "2db908be.484d28",
"wires": [
[
- "9c0b8d26.ccc64",
- "7ee91c34.4e4f44",
- "10521c9e.098fa3"
+ "62930298.0b2a1c",
+ "d3301b58.914a58",
+ "fb007c4b.5179"
]
]
},
{
- "id": "4ebef597.bf543c",
+ "id": "c9165975.2c8ce8",
"type": "call",
"name": "call GENERIC-RESOURCE-API:network-topology-operation-activate",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-activate' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 2331.0703353881836,
- "y": 919.38498878479,
- "z": "9aad28bb.de6b08",
+ "x": 2328.0703353881836,
+ "y": 942.3849885463715,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "615f84cf.02d10c",
+ "id": "a50cf8ad.598a18",
"type": "other",
"name": "deactivate",
"xml": "<outcome value='deactivate'>\n",
"comments": "",
"outputs": 1,
- "x": 678.010440826416,
- "y": 562.777738571167,
- "z": "9aad28bb.de6b08",
+ "x": 675.010440826416,
+ "y": 585.7777383327484,
+ "z": "2db908be.484d28",
"wires": [
[
- "c572c289.cadd5"
+ "8e1c520d.d2576"
]
]
},
{
- "id": "1e922072.6c693",
+ "id": "c28aa9c7.571d18",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1080.248664855957,
- "y": 757.7780284881592,
- "z": "9aad28bb.de6b08",
+ "x": 1077.248664855957,
+ "y": 780.7780282497406,
+ "z": "2db908be.484d28",
"wires": [
[
- "9c0b8d26.ccc64",
- "8aea2ef9.6eafd",
- "10521c9e.098fa3"
+ "62930298.0b2a1c",
+ "9d5d0700.ed8698",
+ "fb007c4b.5179"
]
]
},
{
- "id": "8aea2ef9.6eafd",
+ "id": "9d5d0700.ed8698",
"type": "call",
"name": "call GENERIC-RESOURCE-API:network-topology-operation-deactivate",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-deactivate' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1659.2369384765625,
- "y": 1007.6350364685059,
- "z": "9aad28bb.de6b08",
+ "x": 1656.2369384765625,
+ "y": 1030.6350362300873,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "5464b8d8.4a3498",
+ "id": "f1232753.705208",
"type": "other",
"name": "unassign",
"xml": "<outcome value='unassign'>\n",
"comments": "",
"outputs": 1,
- "x": 675.0104598999023,
- "y": 814.7777881622314,
- "z": "9aad28bb.de6b08",
+ "x": 672.0104598999023,
+ "y": 837.7777879238129,
+ "z": "2db908be.484d28",
"wires": [
[
- "a28f55cf.2766d8"
+ "a735954b.9ab908"
]
]
},
{
- "id": "a28f55cf.2766d8",
+ "id": "a735954b.9ab908",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 856.2486190795898,
- "y": 815.777910232544,
- "z": "9aad28bb.de6b08",
+ "x": 853.2486190795898,
+ "y": 838.7779099941254,
+ "z": "2db908be.484d28",
"wires": [
[
- "9c0b8d26.ccc64",
- "f8a88ed3.13cf",
- "10521c9e.098fa3"
+ "62930298.0b2a1c",
+ "21cf404.360a8c",
+ "fb007c4b.5179"
]
]
},
{
- "id": "3a9ebc21.5bb5a4",
+ "id": "c95f430.de215c",
"type": "call",
"name": "call GENERIC-RESOURCE-API:network-topology-operation-unassign",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-unassign' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 2326.820198059082,
- "y": 1112.884958267212,
- "z": "9aad28bb.de6b08",
+ "x": 2323.820198059082,
+ "y": 1135.8849580287933,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "fb6e7e31.10ac3",
+ "id": "de92e919.3dfbf8",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 659.0104598999023,
- "y": 1069.7777848243713,
- "z": "9aad28bb.de6b08",
+ "x": 645.0104370117188,
+ "y": 1163.77783203125,
+ "z": "2db908be.484d28",
"wires": [
[
- "ddd743b8.7f7fe"
+ "88ae8f90.f87f8"
]
]
},
{
- "id": "ddd743b8.7f7fe",
+ "id": "88ae8f90.f87f8",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"sdnc-request-header.svc-action is a required input\" />\n",
"comments": "",
- "x": 841.0104560852051,
- "y": 1068.7777943611145,
- "z": "9aad28bb.de6b08",
+ "x": 827.0104331970215,
+ "y": 1162.7778415679932,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "d3235e19.d8ecb",
+ "id": "2ccd4cf4.cd1224",
"type": "set",
"name": "Set final indicator to Y",
"xml": "<set>\n<parameter name=\"ack-final\" value=\"Y\"/>",
"comments": "",
- "x": 463.1215057373047,
- "y": 1223.4722213745117,
- "z": "9aad28bb.de6b08",
+ "x": 460.1215057373047,
+ "y": 1246.4722211360931,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "58c301a.4cd9b",
+ "id": "487e294c.601868",
"type": "for",
"name": "for nidx..service-data.networks.network[]",
"xml": "<for index='nidx' start='0' end='`$service-data.networks.network_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 2195.740863800049,
- "y": 457.5396976470947,
- "z": "9aad28bb.de6b08",
+ "x": 2192.740863800049,
+ "y": 480.53969740867615,
+ "z": "2db908be.484d28",
"wires": [
[
- "ae92c30c.ac766"
+ "d951934c.04645"
]
]
},
{
- "id": "9c0b8d26.ccc64",
+ "id": "62930298.0b2a1c",
"type": "switchNode",
"name": "switch service-data.networks.network_length",
"xml": "<switch test='`$service-data.networks.network_length`'>\n",
"comments": "",
"outputs": 1,
- "x": 1473.205020904541,
- "y": 425.8610897064209,
- "z": "9aad28bb.de6b08",
+ "x": 1470.205020904541,
+ "y": 448.8610894680023,
+ "z": "2db908be.484d28",
"wires": [
[
- "88ad5c25.78bab",
- "eb688204.84b63"
+ "4ffb7265.aead1c",
+ "e7073ffc.39cd9"
]
]
},
{
- "id": "88ad5c25.78bab",
+ "id": "4ffb7265.aead1c",
"type": "other",
"name": "outcome Null",
"xml": "<outcome value=''>\n",
"comments": "",
"outputs": 1,
- "x": 1772.4548988342285,
- "y": 424.11108779907227,
- "z": "9aad28bb.de6b08",
+ "x": 1769.4548988342285,
+ "y": 447.1110875606537,
+ "z": "2db908be.484d28",
"wires": [
[
- "5cd57caa.022474"
+ "81b94f7b.60cfe"
]
]
},
{
- "id": "eb688204.84b63",
+ "id": "e7073ffc.39cd9",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 1726.4549293518066,
- "y": 457.1111087799072,
- "z": "9aad28bb.de6b08",
+ "x": 1723.4549293518066,
+ "y": 480.11110854148865,
+ "z": "2db908be.484d28",
"wires": [
[
- "a9c84ebc.a8703"
+ "b0120e6d.fd62b"
]
]
},
{
- "id": "ae92c30c.ac766",
+ "id": "d951934c.04645",
"type": "switchNode",
"name": "switch networkid found",
"xml": "<switch test=\"`$service-data.networks.network[$nidx].network-id == $network-topology-operation-input.network-information.network-id`\">\n\n",
"comments": "",
"outputs": 1,
- "x": 2486.1694145202637,
- "y": 456.78978157043457,
- "z": "9aad28bb.de6b08",
+ "x": 2483.1694145202637,
+ "y": 479.789781332016,
+ "z": "2db908be.484d28",
"wires": [
[
- "3c861008.97d8d"
+ "c85e865f.6c4118"
]
]
},
{
- "id": "3c861008.97d8d",
+ "id": "c85e865f.6c4118",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2675.121768951416,
- "y": 457.6825199127197,
- "z": "9aad28bb.de6b08",
+ "x": 2672.121768951416,
+ "y": 480.68251967430115,
+ "z": "2db908be.484d28",
"wires": [
[
- "276ddcff.2cc734"
+ "28d9a085.7b353"
]
]
},
{
- "id": "276ddcff.2cc734",
+ "id": "28d9a085.7b353",
"type": "set",
"name": "set tmp.nidx and network-data",
"xml": "<set>\n<parameter name='tmp.nidx' value='`$nidx`' />\n<parameter name='network-data.' value='`$service-data.networks.network[$nidx].`' />\n",
"comments": "",
- "x": 2908.653537750244,
- "y": 456.43252754211426,
- "z": "9aad28bb.de6b08",
+ "x": 2905.653537750244,
+ "y": 479.4325273036957,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "b1fb15f0.efbb18",
+ "id": "5286bff0.28cfd",
"type": "comment",
"name": "Find the index to service data for this network - save id in tmp.nidx, save service-data",
"info": "",
"comments": "",
- "x": 1652.5660438537598,
- "y": 391.1111011505127,
- "z": "9aad28bb.de6b08",
+ "x": 1649.5660438537598,
+ "y": 414.1111009120941,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "5cfdd79e.62ec78",
+ "id": "94a02e8f.672a9",
"type": "comment",
"name": "service-data will not be stored until we have a network-id",
"info": "",
"comments": "",
- "x": 1191.6772003173828,
- "y": 20,
- "z": "9aad28bb.de6b08",
+ "x": 1188.6772003173828,
+ "y": 42.99999976158142,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "5cd57caa.022474",
+ "id": "81b94f7b.60cfe",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"network-topology-operation-input.network-request-input.network-id not found in service-data\" />\n",
"comments": "",
- "x": 1964.2324562072754,
- "y": 422.0000858306885,
- "z": "9aad28bb.de6b08",
+ "x": 1961.2324562072754,
+ "y": 445.0000855922699,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "a9c84ebc.a8703",
+ "id": "b0120e6d.fd62b",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1893.724895477295,
- "y": 456.6656856536865,
- "z": "9aad28bb.de6b08",
+ "x": 1890.724895477295,
+ "y": 479.66568541526794,
+ "z": "2db908be.484d28",
"wires": [
[
- "58c301a.4cd9b",
- "a3b536b8.c2db88"
+ "487e294c.601868",
+ "8b184c42.8ea"
]
]
},
{
- "id": "a3b536b8.c2db88",
+ "id": "8b184c42.8ea",
"type": "switchNode",
"name": "switch tmp.nidx ",
"xml": "<switch test=\"`$tmp.nidx`\">\n\n",
"comments": "",
"outputs": 1,
- "x": 2122.792407989502,
- "y": 507.0228967666626,
- "z": "9aad28bb.de6b08",
+ "x": 2119.792407989502,
+ "y": 530.022896528244,
+ "z": "2db908be.484d28",
"wires": [
[
- "71b6d5f6.52251c",
- "76280ac2.a29dc4"
+ "6f1188e.df71378",
+ "4941aa7.ba31254"
]
]
},
{
- "id": "18569546.2d3f0b",
+ "id": "5f4d6f01.eacb6",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"network-topology-operation-input.network-request-input.network-id not found in service-data\" />\n",
"comments": "",
- "x": 2475.6493911743164,
- "y": 502.73713874816895,
- "z": "9aad28bb.de6b08",
+ "x": 2472.6493911743164,
+ "y": 525.7371385097504,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "71b6d5f6.52251c",
+ "id": "6f1188e.df71378",
"type": "outcome",
"name": "NULL",
"xml": "<outcome value=''>\n",
"comments": "",
"outputs": 1,
- "x": 2294.2209434509277,
- "y": 505.59428215026855,
- "z": "9aad28bb.de6b08",
+ "x": 2291.2209434509277,
+ "y": 528.59428191185,
+ "z": "2db908be.484d28",
"wires": [
[
- "18569546.2d3f0b"
+ "5f4d6f01.eacb6"
]
]
},
{
- "id": "7ee91c34.4e4f44",
+ "id": "d3301b58.914a58",
"type": "switchNode",
"name": "switch network-level-oper-status",
"xml": "<switch test='`$service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`'>\n",
"comments": "",
"outputs": 1,
- "x": 1544.0385665893555,
- "y": 919.336389541626,
- "z": "9aad28bb.de6b08",
+ "x": 1541.0385665893555,
+ "y": 942.3363893032074,
+ "z": "2db908be.484d28",
"wires": [
[
- "9b070cdb.c3554",
- "e0410e72.9776b"
+ "df23fde1.eee29",
+ "e3ffbfd1.5bf58"
]
]
},
{
- "id": "9b070cdb.c3554",
+ "id": "df23fde1.eee29",
"type": "outcome",
"name": "outcome PendingCreate",
"xml": "<outcome value='PendingCreate'>\n",
"comments": "",
"outputs": 1,
- "x": 1909.0385462443028,
- "y": 919.3363742828369,
- "z": "9aad28bb.de6b08",
+ "x": 1906.0385462443028,
+ "y": 942.3363740444183,
+ "z": "2db908be.484d28",
"wires": [
[
- "4ebef597.bf543c"
+ "c9165975.2c8ce8"
]
]
},
{
- "id": "e0410e72.9776b",
+ "id": "e3ffbfd1.5bf58",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 1859.0385932922363,
- "y": 959.336404800415,
- "z": "9aad28bb.de6b08",
+ "x": 1856.0385932922363,
+ "y": 982.3364045619965,
+ "z": "2db908be.484d28",
"wires": [
[
- "3fd77df7.1089b2"
+ "e72a7431.e545a8"
]
]
},
{
- "id": "3fd77df7.1089b2",
+ "id": "e72a7431.e545a8",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"`'Network is not in appropriate state for activate. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`\" />",
"comments": "",
- "x": 2029.0385932922363,
- "y": 959.336404800415,
- "z": "9aad28bb.de6b08",
+ "x": 2026.0385932922363,
+ "y": 982.3364045619965,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "f8a88ed3.13cf",
+ "id": "21cf404.360a8c",
"type": "switchNode",
"name": "switch network-level-oper-status",
"xml": "<switch test='`$service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`'>\n",
"comments": "",
"outputs": 1,
- "x": 1533.6415786743164,
- "y": 1114.4891605377197,
- "z": "9aad28bb.de6b08",
+ "x": 1530.6415786743164,
+ "y": 1137.4891602993011,
+ "z": "2db908be.484d28",
"wires": [
[
- "bc4211ff.d463a",
- "affa5015.d4e59",
- "f59d3b2d.cd5398"
+ "7d4ba4c2.0667bc",
+ "4d4bd64c.75d9f8",
+ "3e2015ec.34c4aa"
]
]
},
{
- "id": "bc4211ff.d463a",
+ "id": "7d4ba4c2.0667bc",
"type": "outcome",
"name": "outcome PendingCreate",
"xml": "<outcome value='PendingCreate'>\n",
"comments": "",
"outputs": 1,
- "x": 1893.6415481567383,
- "y": 1114.4891910552979,
- "z": "9aad28bb.de6b08",
+ "x": 1890.6415481567383,
+ "y": 1137.4891908168793,
+ "z": "2db908be.484d28",
"wires": [
[
- "3a9ebc21.5bb5a4"
+ "c95f430.de215c"
]
]
},
{
- "id": "affa5015.d4e59",
+ "id": "4d4bd64c.75d9f8",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 1849.391471862793,
- "y": 1185.9892539978027,
- "z": "9aad28bb.de6b08",
+ "x": 1846.391471862793,
+ "y": 1208.9892537593842,
+ "z": "2db908be.484d28",
"wires": [
[
- "3f9880a9.7295a"
+ "7523d96d.5d1058"
]
]
},
{
- "id": "3f9880a9.7295a",
+ "id": "7523d96d.5d1058",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"`'Network is not in appropriate state for unassign. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`\" />",
"comments": "",
- "x": 2040.7248916625977,
- "y": 1184.6558828353882,
- "z": "9aad28bb.de6b08",
+ "x": 2037.7248916625977,
+ "y": 1207.6558825969696,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "f59d3b2d.cd5398",
+ "id": "3e2015ec.34c4aa",
"type": "outcome",
"name": "outcome PendingDelete",
"xml": "<outcome value='PendingDelete'>\n",
"comments": "",
"outputs": 1,
- "x": 1896.8717727661133,
- "y": 1152.3363590240479,
- "z": "9aad28bb.de6b08",
+ "x": 1893.8717727661133,
+ "y": 1175.3363587856293,
+ "z": "2db908be.484d28",
"wires": [
[
- "3a9ebc21.5bb5a4"
+ "c95f430.de215c"
]
]
},
{
- "id": "a87a521d.9540c",
+ "id": "7130c8aa.c3e608",
"type": "other",
"name": "changeassign",
"xml": "<outcome value='changeassign'>",
"comments": "",
"outputs": 1,
- "x": 686.0104789733887,
- "y": 465.77777099609375,
- "z": "9aad28bb.de6b08",
+ "x": 683.0104789733887,
+ "y": 488.77777075767517,
+ "z": "2db908be.484d28",
"wires": [
[
- "4c2bd72a.1c31e8"
+ "8681ccd2.61776"
]
]
},
{
- "id": "4c2bd72a.1c31e8",
+ "id": "8681ccd2.61776",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1058.2604179382324,
- "y": 462.7777624130249,
- "z": "9aad28bb.de6b08",
+ "x": 1055.2604179382324,
+ "y": 485.7777621746063,
+ "z": "2db908be.484d28",
"wires": [
[
- "9c0b8d26.ccc64",
- "8a2b1a64.939138"
+ "62930298.0b2a1c",
+ "755b61e1.5599c"
]
]
},
{
- "id": "a28b0e04.6b316",
+ "id": "8551ad66.6b965",
"type": "call",
"name": "call GENERIC-RESOURCE-API:network-topology-operation-assign",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-assign' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1827.0106010437012,
- "y": 160.77776336669922,
- "z": "9aad28bb.de6b08",
+ "x": 1824.0106010437012,
+ "y": 183.77776312828064,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "580a77ff.6cd088",
+ "id": "b2a344c1.b2b118",
"type": "switchNode",
"name": "switch network-level-oper-status",
"xml": "<switch test='`$service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`'>\n",
"comments": "",
"outputs": 1,
- "x": 1122.9786567687988,
- "y": 98.72915458679199,
- "z": "9aad28bb.de6b08",
+ "x": 1119.9786567687988,
+ "y": 121.72915434837341,
+ "z": "2db908be.484d28",
"wires": [
[
- "bfcbec05.b41b2",
- "ca2b9239.fc004",
- "3e71fe57.a54f32",
- "fd7d3d8b.626ba"
+ "3cdc8b88.b67114",
+ "9df378e0.5934d8",
+ "6224bc8a.6b7094",
+ "bdfd9d9f.89385"
]
]
},
{
- "id": "bfcbec05.b41b2",
+ "id": "3cdc8b88.b67114",
"type": "outcome",
"name": "outcome PendingCreate",
"xml": "<outcome value='PendingCreate'>\n",
"comments": "",
"outputs": 1,
- "x": 1508.978702545166,
- "y": 118.72913646697998,
- "z": "9aad28bb.de6b08",
+ "x": 1505.978702545166,
+ "y": 141.7291362285614,
+ "z": "2db908be.484d28",
"wires": [
[
- "8e3a130b.a0405"
+ "903012af.85f85"
]
]
},
{
- "id": "ca2b9239.fc004",
+ "id": "9df378e0.5934d8",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 1456.9786987304688,
- "y": 160.72916793823242,
- "z": "9aad28bb.de6b08",
+ "x": 1453.9786987304688,
+ "y": 183.72916769981384,
+ "z": "2db908be.484d28",
"wires": [
[
- "a28b0e04.6b316"
+ "8551ad66.6b965"
]
]
},
{
- "id": "8e3a130b.a0405",
+ "id": "903012af.85f85",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"`'Network is not in appropriate state for assign. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`\" />",
"comments": "",
- "x": 1783.9789237976074,
- "y": 114.72918510437012,
- "z": "9aad28bb.de6b08",
+ "x": 1780.9789237976074,
+ "y": 137.72918486595154,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "fd7d3d8b.626ba",
+ "id": "bdfd9d9f.89385",
"type": "outcome",
"name": "outcome PendingDelete",
"xml": "<outcome value='PendingDelete'>\n",
"comments": "",
"outputs": 1,
- "x": 1507.010440826416,
- "y": 83.77775192260742,
- "z": "9aad28bb.de6b08",
+ "x": 1504.010440826416,
+ "y": 106.77775168418884,
+ "z": "2db908be.484d28",
"wires": [
[
- "8e3a130b.a0405"
+ "903012af.85f85"
]
]
},
{
- "id": "3e71fe57.a54f32",
+ "id": "6224bc8a.6b7094",
"type": "outcome",
"name": "outcome Created",
"xml": "<outcome value='Created'>\n",
"comments": "",
"outputs": 1,
- "x": 1487.0104789733887,
- "y": 48.777753829956055,
- "z": "9aad28bb.de6b08",
+ "x": 1484.0104789733887,
+ "y": 71.77775359153748,
+ "z": "2db908be.484d28",
"wires": [
[
- "8e3a130b.a0405"
+ "903012af.85f85"
]
]
},
{
- "id": "8a2b1a64.939138",
+ "id": "755b61e1.5599c",
"type": "call",
"name": "call GENERIC-RESOURCE-API:network-topology-operation-changeassign",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-changeassign' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1636.2568130493164,
- "y": 851.2738800048828,
- "z": "9aad28bb.de6b08",
+ "x": 1633.2568130493164,
+ "y": 874.2738797664642,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "aa217b3b.e03768",
+ "id": "c908bff.a5def4",
"type": "set",
"name": "set object-path",
"xml": "<set>\n<parameter name='network-object-path' value=\"`'restconf/config/GENERIC-RESOURCE-API:services/service/'\n + $network-topology-operation-input.service-information.service-instance-id\n + '/service-data/networks/network/'\n + $networkId\n + '/network-data/network-topology/'` \" />\n \n",
"comments": "",
- "x": 472.5113830566406,
- "y": 1129.528715133667,
- "z": "9aad28bb.de6b08",
+ "x": 469.5113830566406,
+ "y": 1152.5287148952484,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "5dd24184.f92cb",
+ "id": "7e1abfb0.77caa",
"type": "set",
"name": "set networkId",
"xml": "<set>\n<parameter name='networkId' value='`$network-topology-operation-input.network-information.network-id`' />\n",
"comments": "",
- "x": 466.7970161437988,
- "y": 1092.385823249817,
- "z": "9aad28bb.de6b08",
+ "x": 463.7970161437988,
+ "y": 1115.3858230113983,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "c28329f4.0a0298",
+ "id": "57827229.6b2abc",
"type": "set",
"name": "set network-level-oper-status",
"xml": "<set>\n<parameter name='service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status' value='Created' />\n<parameter name='service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.last-rpc-action' value='`$network-topology-operation-input.sdnc-request-header.svc-action`' />\n<parameter name='service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.last-action' value='`$network-topology-operation-input.request-information.request-action`' />\n",
"comments": "",
- "x": 514.7970771789551,
- "y": 1174.9571886062622,
- "z": "9aad28bb.de6b08",
+ "x": 511.7970771789551,
+ "y": 1197.9571883678436,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "10521c9e.098fa3",
+ "id": "fb007c4b.5179",
"type": "switchNode",
"name": "switch network-information.network-instance-group-id",
"xml": "<switch test='`$network-topology-operation-input.network-information.network-instance-group-id`'>\n\n",
"comments": "",
"outputs": 1,
- "x": 1548.4490547180176,
- "y": 683.2787666320801,
- "z": "9aad28bb.de6b08",
+ "x": 1545.4490547180176,
+ "y": 706.2787663936615,
+ "z": "2db908be.484d28",
"wires": [
[
- "9cd01d18.8e54",
- "b7c9f72f.a87b48"
+ "9d79b615.01e948",
+ "249b5309.c2bf1c"
]
]
},
{
- "id": "9cd01d18.8e54",
+ "id": "9d79b615.01e948",
"type": "other",
"name": "Other",
"xml": "<outcome value='Other'>",
"comments": "",
"outputs": 1,
- "x": 1835.1989364624023,
- "y": 721.4454336166382,
- "z": "9aad28bb.de6b08",
+ "x": 1832.1989364624023,
+ "y": 744.4454333782196,
+ "z": "2db908be.484d28",
"wires": [
[
- "a5779725.1836a8"
+ "6a373b7d.6814a4"
]
]
},
{
- "id": "b7c9f72f.a87b48",
+ "id": "249b5309.c2bf1c",
"type": "other",
"name": "NULL",
"xml": "<outcome value=''>",
"comments": "",
"outputs": 1,
- "x": 1832.8658332824707,
- "y": 688.4453077316284,
- "z": "9aad28bb.de6b08",
+ "x": 1829.8658332824707,
+ "y": 711.4453074932098,
+ "z": "2db908be.484d28",
"wires": [
[
- "92ce5cf3.bc142"
+ "a9c385b1.781fe8"
]
]
},
{
- "id": "92ce5cf3.bc142",
+ "id": "a9c385b1.781fe8",
"type": "returnSuccess",
"name": "return success",
"xml": "<return status='success'>\n<parameter name='' value='' />\n",
"comments": "",
- "x": 1993.199062347412,
- "y": 685.4453649520874,
- "z": "9aad28bb.de6b08",
+ "x": 1990.199062347412,
+ "y": 708.4453647136688,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "434328af.62d878",
+ "id": "c0c595e2.aa8d28",
"type": "switchNode",
"name": "service-data.network-instance-groups.network-instance-group_length",
"xml": "<switch test='`$service-data.network-instance-groups.network-instance-group_length`'>\n",
"comments": "",
"outputs": 1,
- "x": 2328.2746772766113,
- "y": 714.7111825942993,
- "z": "9aad28bb.de6b08",
+ "x": 2325.2746772766113,
+ "y": 737.7111823558807,
+ "z": "2db908be.484d28",
"wires": [
[
- "b36d81f7.3394d",
- "af36bb73.fa73d8"
+ "f9db9f35.7e7",
+ "581dba4.d6ec244"
]
]
},
{
- "id": "b36d81f7.3394d",
+ "id": "f9db9f35.7e7",
"type": "other",
"name": "outcome Null",
"xml": "<outcome value=''>\n",
"comments": "",
"outputs": 1,
- "x": 2687.524368286133,
- "y": 671.7111854553223,
- "z": "9aad28bb.de6b08",
+ "x": 2684.524368286133,
+ "y": 694.7111852169037,
+ "z": "2db908be.484d28",
"wires": [
[
- "14e27ae6.5357e5"
+ "5de331e2.b21f2"
]
]
},
{
- "id": "af36bb73.fa73d8",
+ "id": "581dba4.d6ec244",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 2667.524368286133,
- "y": 706.7111854553223,
- "z": "9aad28bb.de6b08",
+ "x": 2664.524368286133,
+ "y": 729.7111852169037,
+ "z": "2db908be.484d28",
"wires": [
[
- "c46e6f.e0c8b19"
+ "c0ff470a.8d1c68"
]
]
},
{
- "id": "a5779725.1836a8",
+ "id": "6a373b7d.6814a4",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1969.3101921081543,
- "y": 721.889838218689,
- "z": "9aad28bb.de6b08",
+ "x": 1966.3101921081543,
+ "y": 744.8898379802704,
+ "z": "2db908be.484d28",
"wires": [
[
- "434328af.62d878"
+ "c0c595e2.aa8d28"
]
]
},
{
- "id": "704254e7.9457ec",
+ "id": "7d8245f1.d453ec",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 4091.5181846618652,
- "y": 649.9217891693115,
- "z": "9aad28bb.de6b08",
+ "x": 4088.5181846618652,
+ "y": 672.921788930893,
+ "z": "2db908be.484d28",
"wires": [
[
- "c1e82544.f95008"
+ "1e1e6239.fb4e8e"
]
]
},
{
- "id": "909b166d.5228d8",
+ "id": "fbc8dfca.d5c4e",
"type": "set",
"name": "set tmp.ngidx and ctx.network-instance-group-data",
"xml": "<set>\n<parameter name='tmp.ngidx' value='`$ngidx`' />\n<parameter name='ctx.network-instance-group-data.' value='`$service-data.network-instance-groups.network-instance-group[$ngidx].`' />\n",
"comments": "",
- "x": 4534.050151824951,
- "y": 649.6718139648438,
- "z": "9aad28bb.de6b08",
+ "x": 4531.050151824951,
+ "y": 672.6718137264252,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "c1e82544.f95008",
+ "id": "1e1e6239.fb4e8e",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 4240.136623382568,
- "y": 649.778974533081,
- "z": "9aad28bb.de6b08",
+ "x": 4237.136623382568,
+ "y": 672.7789742946625,
+ "z": "2db908be.484d28",
"wires": [
[
- "909b166d.5228d8"
+ "fbc8dfca.d5c4e"
]
]
},
{
- "id": "b3d1c50c.fca068",
+ "id": "c50d7ac.b94b688",
"type": "for",
"name": "for ngidx..service-data.network-instance-groups.network-instance-group[]",
"xml": "<for index='ngidx' start='0' end='`$service-data.network-instance-groups.network-instance-_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 3274.386589050293,
- "y": 710.0287618637085,
- "z": "9aad28bb.de6b08",
+ "x": 3271.386589050293,
+ "y": 733.0287616252899,
+ "z": "2db908be.484d28",
"wires": [
[
- "7b57f8f2.c90d48"
+ "6bc50ed2.e98f"
]
]
},
{
- "id": "7b57f8f2.c90d48",
+ "id": "6bc50ed2.e98f",
"type": "switchNode",
"name": "switch network-instance-group-id found",
"xml": "<switch test=\"`$service-data.network-instance-groups.network-instance-group[$nidx].network-instance-group-id == $network-topology-operation-input.network-information.network-instance-group-id`\">\n\n",
"comments": "",
"outputs": 1,
- "x": 3719.815185546875,
- "y": 709.7789306640625,
- "z": "9aad28bb.de6b08",
+ "x": 3716.815185546875,
+ "y": 732.7789304256439,
+ "z": "2db908be.484d28",
"wires": [
[
- "704254e7.9457ec"
+ "7d8245f1.d453ec"
]
]
},
{
- "id": "c46e6f.e0c8b19",
+ "id": "c0ff470a.8d1c68",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 2886.3704681396484,
- "y": 707.9046869277954,
- "z": "9aad28bb.de6b08",
+ "x": 2883.3704681396484,
+ "y": 730.9046866893768,
+ "z": "2db908be.484d28",
"wires": [
[
- "b3d1c50c.fca068"
+ "c50d7ac.b94b688"
]
]
},
{
- "id": "14e27ae6.5357e5",
+ "id": "5de331e2.b21f2",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"network-topology-operation-input.network-request-input.network-instance-group-id not found in service-data\" />\n",
"comments": "",
- "x": 2879.074020385742,
- "y": 671.2787523269653,
- "z": "9aad28bb.de6b08",
+ "x": 2876.074020385742,
+ "y": 694.2787520885468,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "76280ac2.a29dc4",
+ "id": "4941aa7.ba31254",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 2293.7565956115723,
- "y": 536.5238647460938,
- "z": "9aad28bb.de6b08",
+ "x": 2290.7565956115723,
+ "y": 559.5238645076752,
+ "z": "2db908be.484d28",
"wires": [
[
- "d6b32cf3.dcd68"
+ "c2ba8bb7.5d1488"
]
]
},
{
- "id": "d6b32cf3.dcd68",
+ "id": "c2ba8bb7.5d1488",
"type": "set",
"name": "set nidx",
"xml": "<set>\n<parameter name='nidx' value='`$tmp.nidx`' />\n",
"comments": "",
- "x": 2450.7565956115723,
- "y": 537.5238647460938,
- "z": "9aad28bb.de6b08",
+ "x": 2447.7565956115723,
+ "y": 560.5238645076752,
+ "z": "2db908be.484d28",
"wires": []
},
{
- "id": "e703e8d7.7187b8",
+ "id": "28e87a49.f59c96",
"type": "switchNode",
"name": "switch request-action",
"xml": "<switch test='`$network-topology-operation-input.request-information.request-action`'>\n",
"comments": "",
"outputs": 1,
- "x": 875.1215934753418,
- "y": 323.2326765060425,
- "z": "9aad28bb.de6b08",
+ "x": 872.1215934753418,
+ "y": 346.2326762676239,
+ "z": "2db908be.484d28",
"wires": [
[
- "ab621132.6111e",
- "503d49e7.558b48",
- "79aaad9.716b554",
- "7fc79916.fb5438"
+ "32d531df.85499e",
+ "4bb6e988.fe7c58",
+ "e792c2b8.ea131",
+ "960249a0.73e4e8"
]
]
},
{
- "id": "ab621132.6111e",
+ "id": "32d531df.85499e",
"type": "outcome",
"name": "ActivateDCINetworkInstance",
"xml": "<outcome value='ActivateDCINetworkInstance'>",
"comments": "",
"outputs": 1,
- "x": 1135.4548149108887,
- "y": 268.2324924468994,
- "z": "9aad28bb.de6b08",
+ "x": 1132.4548149108887,
+ "y": 291.23249220848083,
+ "z": "2db908be.484d28",
"wires": [
[
- "cac59810.e65568"
+ "b83bfcdc.13d1a"
]
]
},
{
- "id": "cac59810.e65568",
+ "id": "b83bfcdc.13d1a",
"type": "call",
"name": "call GENERIC-RESOURCE-API:dci-connects-network-topology-operation-activate",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='dci-connects-network-topology-operation-activate' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1581.4549140930176,
- "y": 269.8993225097656,
- "z": "9aad28bb.de6b08",
+ "x": 1578.4549140930176,
+ "y": 292.89932227134705,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "503d49e7.558b48",
+ "id": "4bb6e988.fe7c58",
"type": "outcome",
"name": "other",
"xml": "<outcome value='other'>",
"comments": "",
"outputs": 1,
- "x": 1071.454833984375,
- "y": 361.89923095703125,
- "z": "9aad28bb.de6b08",
+ "x": 1068.454833984375,
+ "y": 384.89923071861267,
+ "z": "2db908be.484d28",
"wires": [
[
- "5517cc3b.5b0904"
+ "389876cb.1e467a"
]
]
},
{
- "id": "c572c289.cadd5",
+ "id": "8e1c520d.d2576",
"type": "switchNode",
"name": "switch request-action",
"xml": "<switch test='`$network-topology-operation-input.request-information.request-action`'>\n",
"comments": "",
"outputs": 1,
- "x": 879.6771430969238,
- "y": 564.6770572662354,
- "z": "9aad28bb.de6b08",
+ "x": 876.6771430969238,
+ "y": 587.6770570278168,
+ "z": "2db908be.484d28",
"wires": [
[
- "b98e948a.2ccfb8",
- "5cdec052.1da21",
- "16f91dec.cb7af2",
- "625d77ac.1d4f58"
+ "5eb403c4.8c424c",
+ "124ca478.59aa4c",
+ "49021010.79466",
+ "2ff099ca.196ee6"
]
]
},
{
- "id": "b98e948a.2ccfb8",
+ "id": "5eb403c4.8c424c",
"type": "outcome",
"name": "DeactivateSOTNConnectivityInstance",
"xml": "<outcome value='DeactivateSOTNConnectivityInstance'>",
"comments": "",
"outputs": 1,
- "x": 1169.455020904541,
- "y": 508.8991947174072,
- "z": "9aad28bb.de6b08",
+ "x": 1166.455020904541,
+ "y": 531.8991944789886,
+ "z": "2db908be.484d28",
"wires": [
[
- "2cfdfb08.ec09b4"
+ "152c7bc7.994c24"
]
]
},
{
- "id": "5cdec052.1da21",
+ "id": "124ca478.59aa4c",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 1077.8999862670898,
- "y": 656.5907688140869,
- "z": "9aad28bb.de6b08",
+ "x": 1074.8999862670898,
+ "y": 679.5907685756683,
+ "z": "2db908be.484d28",
"wires": [
[
- "1e922072.6c693"
+ "c28aa9c7.571d18"
]
]
},
{
- "id": "2cfdfb08.ec09b4",
+ "id": "152c7bc7.994c24",
"type": "call",
"name": "call GENERIC-RESOURCE-API:sotn-network-topology-operation-deactivate",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='sotn-network-topology-operation-deactivate' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1629.8121376037598,
- "y": 510.18252182006836,
- "z": "9aad28bb.de6b08",
+ "x": 1626.8121376037598,
+ "y": 533.1825215816498,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "31fb5db9.aec912",
+ "id": "1591e42d.e2cabc",
"type": "other",
"name": "create",
"xml": "<outcome value='create'>\n",
"comments": "",
"outputs": 1,
- "x": 665.3439102172852,
- "y": 904.0105962753296,
- "z": "9aad28bb.de6b08",
+ "x": 662.3439102172852,
+ "y": 927.010596036911,
+ "z": "2db908be.484d28",
"wires": [
[
- "b39f385b.dd8e48"
+ "a09e2b38.714a58"
]
]
},
{
- "id": "b39f385b.dd8e48",
+ "id": "a09e2b38.714a58",
"type": "switchNode",
"name": "switch request-action",
"xml": "<switch test='`$network-topology-operation-input.request-information.request-action`'>\n",
"comments": "",
"outputs": 1,
- "x": 865.6577301025391,
- "y": 903.7882690429688,
- "z": "9aad28bb.de6b08",
+ "x": 862.6577301025391,
+ "y": 926.7882688045502,
+ "z": "2db908be.484d28",
"wires": [
[
- "de767c6b.834f1",
- "6bdbc712.18ec58",
- "c75bd3e1.bc391"
+ "123388e8.cc22d7",
+ "e823c269.0d884",
+ "fe173c3b.37ab5"
]
]
},
{
- "id": "24acb0b8.15f98",
+ "id": "d1b59f6c.66aa3",
"type": "other",
"name": "delete",
"xml": "<outcome value='delete'>\n",
"comments": "",
"outputs": 1,
- "x": 663.3439140319824,
- "y": 981.0106000900269,
- "z": "9aad28bb.de6b08",
+ "x": 660.3439140319824,
+ "y": 1004.0105998516083,
+ "z": "2db908be.484d28",
"wires": [
[
- "7e743816.5d9958"
+ "f91ae971.a2f4f8"
]
]
},
{
- "id": "7e743816.5d9958",
+ "id": "f91ae971.a2f4f8",
"type": "switchNode",
"name": "switch request-action",
"xml": "<switch test='`$network-topology-operation-input.request-information.request-action`'>\n",
"comments": "",
"outputs": 1,
- "x": 865.6321716308594,
- "y": 982.071400642395,
- "z": "9aad28bb.de6b08",
+ "x": 862.6321716308594,
+ "y": 1005.0714004039764,
+ "z": "2db908be.484d28",
"wires": [
[
- "8f457dbf.8b07b",
- "915d81d7.e103a",
- "c7012119.b3554"
+ "81ef432e.c5cd2",
+ "dac05fa.465e7a",
+ "ad7b9fb5.8def5"
]
]
},
{
- "id": "c02f2b27.1444e8",
+ "id": "4debc446.71044c",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1609.4551811218262,
- "y": 1338.8993883132935,
- "z": "9aad28bb.de6b08",
+ "x": 1606.4551811218262,
+ "y": 1361.8993880748749,
+ "z": "2db908be.484d28",
"wires": [
[
- "f7aee00f.2cad"
+ "a33b166a.24fd28"
]
]
},
{
- "id": "afea4e67.794a",
+ "id": "21f7416d.44262e",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1581.8996543884277,
- "y": 1537.454912662506,
- "z": "9aad28bb.de6b08",
+ "x": 1578.8996543884277,
+ "y": 1560.4549124240875,
+ "z": "2db908be.484d28",
"wires": [
[
- "1b882c62.b4d5c4"
+ "c3e850c.08aaab"
]
]
},
{
- "id": "f7aee00f.2cad",
+ "id": "a33b166a.24fd28",
"type": "call",
"name": "call GENERIC-RESOURCE-API:network-topology-operation-create",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-create' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1974.1216773986816,
- "y": 1338.3440103530884,
- "z": "9aad28bb.de6b08",
+ "x": 1971.1216773986816,
+ "y": 1361.3440101146698,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "1b882c62.b4d5c4",
+ "id": "c3e850c.08aaab",
"type": "call",
"name": "call GENERIC-RESOURCE-API:network-topology-operation-delete",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-delete' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1946.8995780944824,
- "y": 1536.4548411369324,
- "z": "9aad28bb.de6b08",
+ "x": 1943.8995780944824,
+ "y": 1559.4548408985138,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "de767c6b.834f1",
+ "id": "123388e8.cc22d7",
"type": "outcome",
"name": "other",
"xml": "<outcome value='other'>",
"comments": "",
"outputs": 1,
- "x": 1427.65771484375,
- "y": 1340.677001953125,
- "z": "9aad28bb.de6b08",
+ "x": 1424.65771484375,
+ "y": 1363.6770017147064,
+ "z": "2db908be.484d28",
"wires": [
[
- "c02f2b27.1444e8"
+ "4debc446.71044c"
]
]
},
{
- "id": "6bdbc712.18ec58",
+ "id": "e823c269.0d884",
"type": "outcome",
"name": "CreateSOTNConnectivityInstance",
"xml": "<outcome value='CreateSOTNConnectivityInstance'>",
"comments": "",
"outputs": 1,
- "x": 1507.3244438171387,
- "y": 1241.4549032608047,
- "z": "9aad28bb.de6b08",
+ "x": 1504.3244438171387,
+ "y": 1264.4549030223861,
+ "z": "2db908be.484d28",
"wires": [
[
- "cc35726f.72d91"
+ "f75de23d.a281"
]
]
},
{
- "id": "cc35726f.72d91",
+ "id": "f75de23d.a281",
"type": "call",
"name": "call GENERIC-RESOURCE-API:sotn-network-topology-operation-create",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='sotn-network-topology-operation-create' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1986.2132606506348,
- "y": 1243.6770855346695,
- "z": "9aad28bb.de6b08",
+ "x": 1983.2132606506348,
+ "y": 1266.6770852962509,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "915d81d7.e103a",
+ "id": "dac05fa.465e7a",
"type": "outcome",
"name": "DeleteSOTNConnectivityInstance",
"xml": "<outcome value='DeleteSOTNConnectivityInstance'>",
"comments": "",
"outputs": 1,
- "x": 1504.7435417175293,
- "y": 1434.6269526481628,
- "z": "9aad28bb.de6b08",
+ "x": 1501.7435417175293,
+ "y": 1457.6269524097443,
+ "z": "2db908be.484d28",
"wires": [
[
- "ffefe985.e53578"
+ "37fda84e.b42608"
]
]
},
{
- "id": "ffefe985.e53578",
+ "id": "37fda84e.b42608",
"type": "call",
"name": "call GENERIC-RESOURCE-API:sotn-network-topology-operation-delete",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='sotn-network-topology-operation-delete' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1971.6323585510254,
- "y": 1436.8491349220276,
- "z": "9aad28bb.de6b08",
+ "x": 1968.6323585510254,
+ "y": 1459.849134683609,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "8f457dbf.8b07b",
+ "id": "81ef432e.c5cd2",
"type": "outcome",
"name": "other",
"xml": "<outcome value='other'>",
"comments": "",
"outputs": 1,
- "x": 1424.0767822265625,
- "y": 1541.8489990234375,
- "z": "9aad28bb.de6b08",
+ "x": 1421.0767822265625,
+ "y": 1564.848998785019,
+ "z": "2db908be.484d28",
"wires": [
[
- "afea4e67.794a"
+ "21f7416d.44262e"
]
]
},
{
- "id": "79aaad9.716b554",
+ "id": "e792c2b8.ea131",
"type": "outcome",
"name": "ActivateSOTNConnectivityInstance",
"xml": "<outcome value='ActivateSOTNConnectivityInstance'>",
"comments": "",
"outputs": 1,
- "x": 1158.4548530578613,
- "y": 223.01040077209473,
- "z": "9aad28bb.de6b08",
+ "x": 1155.4548530578613,
+ "y": 246.01040053367615,
+ "z": "2db908be.484d28",
"wires": [
[
- "a1756e2.236019"
+ "284dd097.c8e25"
]
]
},
{
- "id": "a1756e2.236019",
+ "id": "284dd097.c8e25",
"type": "call",
"name": "call GENERIC-RESOURCE-API:sotn-network-topology-operation-activate",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='sotn-network-topology-operation-activate' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1583.6770095825195,
- "y": 219.24494327697903,
- "z": "9aad28bb.de6b08",
+ "x": 1580.6770095825195,
+ "y": 242.24494303856045,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "16f91dec.cb7af2",
+ "id": "49021010.79466",
"type": "outcome",
"name": "DeActivateDCINetworkInstance",
"xml": "<outcome value='DeActivateDCINetworkInstance'>",
"comments": "",
"outputs": 1,
- "x": 1149.5555610656738,
- "y": 551.9999942779541,
- "z": "9aad28bb.de6b08",
+ "x": 1146.5555610656738,
+ "y": 574.9999940395355,
+ "z": "2db908be.484d28",
"wires": [
[
- "20c06620.a7484a"
+ "8f0d395a.fe6d58"
]
]
},
{
- "id": "20c06620.a7484a",
+ "id": "8f0d395a.fe6d58",
"type": "call",
"name": "call GENERIC-RESOURCE-API:dci-connects-network-topology-operation-deactivate",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='dci-connects-network-topology-operation-deactivate' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1624.5557823181152,
- "y": 550.6668124198914,
- "z": "9aad28bb.de6b08",
+ "x": 1621.5557823181152,
+ "y": 573.6668121814728,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "7fc79916.fb5438",
+ "id": "960249a0.73e4e8",
"type": "outcome",
"name": "ActivateSDWANConnectivityInstance",
"xml": "<outcome value='ActivateSDWANConnectivityInstance'>",
"comments": "",
"outputs": 1,
- "x": 1155.0000228881836,
- "y": 318.0000190734863,
- "z": "9aad28bb.de6b08",
+ "x": 1152.0000228881836,
+ "y": 341.00001883506775,
+ "z": "2db908be.484d28",
"wires": [
[
- "8f8df3ac.f43bf"
+ "8e724d0c.12ad"
]
]
},
{
- "id": "8f8df3ac.f43bf",
+ "id": "8e724d0c.12ad",
"type": "call",
"name": "call GENERIC-RESOURCE-API:sdwan-network-topology-operation-activate",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='sdwan-network-topology-operation-activate' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1598.0002136230469,
- "y": 315.66684770584106,
- "z": "9aad28bb.de6b08",
+ "x": 1595.0002136230469,
+ "y": 338.6668474674225,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "625d77ac.1d4f58",
+ "id": "2ff099ca.196ee6",
"type": "outcome",
"name": "DeactivateSDWANConnectivityInstance",
"xml": "<outcome value='DeactivateSDWANConnectivityInstance'>",
"comments": "",
"outputs": 1,
- "x": 1167,
- "y": 605,
- "z": "9aad28bb.de6b08",
+ "x": 1164,
+ "y": 627.9999997615814,
+ "z": "2db908be.484d28",
"wires": [
[
- "3bbfdab2.224de6"
+ "5313db5b.ba3784"
]
]
},
{
- "id": "3bbfdab2.224de6",
+ "id": "5313db5b.ba3784",
"type": "call",
"name": "call GENERIC-RESOURCE-API:sdwan-network-topology-operation-deactivate",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='sdwan-network-topology-operation-deactivate' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1610.0001907348633,
- "y": 602.6668286323547,
- "z": "9aad28bb.de6b08",
+ "x": 1607.0001907348633,
+ "y": 625.6668283939362,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "c75bd3e1.bc391",
+ "id": "fe173c3b.37ab5",
"type": "outcome",
"name": "CreateSDWANConnectivityInstance",
"xml": "<outcome value='CreateSDWANConnectivityInstance'>",
"comments": "",
"outputs": 1,
- "x": 1513,
- "y": 1290,
- "z": "9aad28bb.de6b08",
+ "x": 1510,
+ "y": 1312.9999997615814,
+ "z": "2db908be.484d28",
"wires": [
[
- "db52f061.34611"
+ "55f558b0.f98bd8"
]
]
},
{
- "id": "db52f061.34611",
+ "id": "55f558b0.f98bd8",
"type": "call",
"name": "call GENERIC-RESOURCE-API:sdwan-network-topology-operation-create",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='sdwan-network-topology-operation-create' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1956.0001907348633,
- "y": 1287.6668286323547,
- "z": "9aad28bb.de6b08",
+ "x": 1953.0001907348633,
+ "y": 1310.6668283939362,
+ "z": "2db908be.484d28",
"wires": [
[]
]
},
{
- "id": "c7012119.b3554",
+ "id": "ad7b9fb5.8def5",
"type": "outcome",
"name": "DeleteSDWANConnectivityInstance",
"xml": "<outcome value='DeleteSDWANConnectivityInstance'>",
"comments": "",
"outputs": 1,
- "x": 1506,
- "y": 1485,
- "z": "9aad28bb.de6b08",
+ "x": 1503,
+ "y": 1507.9999997615814,
+ "z": "2db908be.484d28",
"wires": [
[
- "c57dac36.dcf83"
+ "483a39e2.dfbcc8"
]
]
},
{
- "id": "c57dac36.dcf83",
+ "id": "483a39e2.dfbcc8",
"type": "call",
"name": "call GENERIC-RESOURCE-API:sdwan-network-topology-operation-delete",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='sdwan-network-topology-operation-delete' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 1972.888816833496,
- "y": 1487.2221822738647,
- "z": "9aad28bb.de6b08",
+ "x": 1969.888816833496,
+ "y": 1510.2221820354462,
+ "z": "2db908be.484d28",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "3a527742.291048",
+ "type": "other",
+ "name": "reoptimize",
+ "xml": "<outcome value='reoptimize'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 653,
+ "y": 1074,
+ "z": "2db908be.484d28",
+ "wires": [
+ [
+ "8989e10f.fcf5f"
+ ]
+ ]
+ },
+ {
+ "id": "8989e10f.fcf5f",
+ "type": "switchNode",
+ "name": "switch request-action",
+ "xml": "<switch test='`$network-topology-operation-input.request-information.request-action`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 842,
+ "y": 1076,
+ "z": "2db908be.484d28",
+ "wires": [
+ [
+ "c0517ae5.fea898"
+ ]
+ ]
+ },
+ {
+ "id": "c0517ae5.fea898",
+ "type": "outcome",
+ "name": "ReoptimizeSOTNInstance",
+ "xml": "<outcome value='ReoptimizeSOTNInstance'>",
+ "comments": "",
+ "outputs": 1,
+ "x": 1472,
+ "y": 1641,
+ "z": "2db908be.484d28",
+ "wires": [
+ [
+ "70bb459.77727bc"
+ ]
+ ]
+ },
+ {
+ "id": "70bb459.77727bc",
+ "type": "call",
+ "name": "call GENERIC-RESOURCE-API:sotn-network-topology-operation-reoptimize",
+ "xml": "<call module='GENERIC-RESOURCE-API' rpc='sotn-network-topology-operation-reoptimize' mode='sync' >\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1913,
+ "y": 1636,
+ "z": "2db908be.484d28",
"wires": [
[]
]
diff --git a/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sdwan-get-site-param.json b/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sdwan-get-site-param.json
index 76e0f703..d123bd70 100644
--- a/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sdwan-get-site-param.json
+++ b/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sdwan-get-site-param.json
@@ -1,20 +1,20 @@
[
{
- "id": "c38bd7d5.df77b8",
+ "id": "a907ba2f.81c9d8",
"type": "dgstart",
"name": "DGSTART",
"outputs": 1,
- "x": 220.00390625,
- "y": 142.00390625,
- "z": "152c5971.7ac927",
+ "x": 97,
+ "y": 49,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "9db33c19.af792"
+ "46194736.3f09f8"
]
]
},
{
- "id": "9db33c19.af792",
+ "id": "46194736.3f09f8",
"type": "service-logic",
"name": "GENERIC-RESOURCE-API ${project.version}",
"module": "GENERIC-RESOURCE-API",
@@ -22,712 +22,793 @@
"comments": "",
"xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='GENERIC-RESOURCE-API' version='${project.version}'>",
"outputs": 1,
- "x": 432.00391006469727,
- "y": 214.0039234161377,
- "z": "152c5971.7ac927",
+ "x": 275.00000381469727,
+ "y": 114.0000171661377,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "d521798b.eb0348"
+ "5cc16d87.a8a744"
]
]
},
{
- "id": "d521798b.eb0348",
+ "id": "5cc16d87.a8a744",
"type": "method",
"name": "sdwan-get-site-param",
"xml": "<method rpc='sdwan-get-site-param' mode='sync'>\n",
"comments": "",
"outputs": 1,
- "x": 420.0040283203125,
- "y": 302.00390625,
- "z": "152c5971.7ac927",
+ "x": 263.0001220703125,
+ "y": 202,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "71ba9c6d.9a9864"
+ "2fcad45c.204f2c"
]
]
},
{
- "id": "71ba9c6d.9a9864",
+ "id": "2fcad45c.204f2c",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 427.00392150878906,
- "y": 388.0039644241333,
- "z": "152c5971.7ac927",
+ "x": 270.00001525878906,
+ "y": 288.0000581741333,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "b3f4200f.57507"
+ "a59bab93.b75108"
]
]
},
{
- "id": "b3f4200f.57507",
+ "id": "a59bab93.b75108",
"type": "for",
"name": "for each sdwan-get-request-input-param",
"xml": "<for index='idx' start='0' end='`$vnf-request-input.vnf-input-parameters.param_length`' >\n\n",
"comments": "",
"outputs": 1,
- "x": 463.6706848144531,
- "y": 470.670560836792,
- "z": "152c5971.7ac927",
+ "x": 306.6667785644531,
+ "y": 370.666654586792,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "6800f034.117f8"
+ "e896db23.035228"
]
]
},
{
- "id": "6800f034.117f8",
+ "id": "e896db23.035228",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 750.5042343139648,
- "y": 388.00400829315186,
- "z": "152c5971.7ac927",
+ "x": 593.5003280639648,
+ "y": 288.00010204315186,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "a6377b98.e830f8",
- "517edbd2.91b704",
- "a701284f.455118",
- "ca16c569.719ab8",
- "86e64461.d62ec8",
- "c6f06bc6.074328",
- "24b313e.2bb53ec",
- "3a793fa2.7f94e",
- "fee596dc.022e48",
- "2bb40b1d.ca77f4",
- "663914f5.d948fc",
- "9a6d9a43.210478",
- "d3c58875.e0f958"
+ "17beedf5.3fa3a2",
+ "9658f5ce.551378",
+ "9f759735.d76cd8",
+ "9966cd8b.1697a",
+ "11d51c5.93463e4",
+ "8cb0a11.7bd686",
+ "5f3ab5eb.71688c",
+ "ca7858b9.e061c8",
+ "5ff23f08.f8215",
+ "5dd3c67.a478d38",
+ "4f1e9b40.0d5344",
+ "32f8d4e8.435a2c",
+ "3e3aefd6.843cc"
]
]
},
{
- "id": "a6377b98.e830f8",
+ "id": "17beedf5.3fa3a2",
"type": "returnSuccess",
"name": "return success",
"xml": "<return status='success'>\n<parameter name=\"ack-final-indicator\" value=\"Y\" />\n<parameter name=\"error-code\" value=\"200\" />\n<parameter name=\"error-message\" value=\"`$error-message`\" />\n",
"comments": "",
- "x": 954.0049743652344,
- "y": 757.004668712616,
- "z": "152c5971.7ac927",
+ "x": 795.001106262207,
+ "y": 721.0007653236389,
+ "z": "94b1afc3.a0dc",
"wires": []
},
{
- "id": "517edbd2.91b704",
+ "id": "9658f5ce.551378",
"type": "switchNode",
"name": "switch name",
"xml": "<switch test=\"`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'name'`\">\n",
"comments": "",
"outputs": 1,
- "x": 970.0039443969727,
- "y": 184.003981590271,
- "z": "152c5971.7ac927",
+ "x": 813.0000381469727,
+ "y": 84.000075340271,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "7a153116.0d4e7"
+ "1180c11c.4e5d3f"
]
]
},
{
- "id": "7a153116.0d4e7",
+ "id": "1180c11c.4e5d3f",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1112.0039443969727,
- "y": 185.003981590271,
- "z": "152c5971.7ac927",
+ "x": 955.0000381469727,
+ "y": 85.000075340271,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "d8a2309b.8475f"
+ "c4a1ef6b.cb92a"
]
]
},
{
- "id": "d8a2309b.8475f",
+ "id": "c4a1ef6b.cb92a",
"type": "set",
"name": "set name",
"xml": "<set>\n<parameter name='prop.site.name' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />\n",
"comments": "",
- "x": 1246.0039443969727,
- "y": 185.60398769378662,
- "z": "152c5971.7ac927",
+ "x": 1089.0000381469727,
+ "y": 85.60008144378662,
+ "z": "94b1afc3.a0dc",
"wires": []
},
{
- "id": "a701284f.455118",
+ "id": "9f759735.d76cd8",
"type": "switchNode",
"name": "switch name",
"xml": "<switch test=\"`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'name'`\">\n",
"comments": "",
"outputs": 1,
- "x": 966.0040512084961,
- "y": 275.0039396286011,
- "z": "152c5971.7ac927",
+ "x": 809.0001449584961,
+ "y": 175.00003337860107,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "de455822.f8ce78"
+ "d7f5a60b.3b5968"
]
]
},
{
- "id": "de455822.f8ce78",
+ "id": "d7f5a60b.3b5968",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1144.0040645599365,
- "y": 278.0039396286011,
- "z": "152c5971.7ac927",
+ "x": 987.0001583099365,
+ "y": 178.00003337860107,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "78b4f47e.c7bfcc"
+ "a9112d64.3441b"
]
]
},
{
- "id": "78b4f47e.c7bfcc",
+ "id": "a9112d64.3441b",
"type": "set",
"name": "set name",
"xml": "<set>\n<parameter name='prop.site.name' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />\n",
"comments": "",
- "x": 1291.0040740966797,
- "y": 277.6039352416992,
- "z": "152c5971.7ac927",
+ "x": 1134.0001678466797,
+ "y": 177.60002899169922,
+ "z": "94b1afc3.a0dc",
"wires": []
},
{
- "id": "2bb40b1d.ca77f4",
+ "id": "5dd3c67.a478d38",
"type": "switchNode",
"name": "switch type",
"xml": "<switch test=\"`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'type'`\">\n",
"comments": "",
"outputs": 1,
- "x": 944.8997230529785,
- "y": 572.9773893356323,
- "z": "152c5971.7ac927",
+ "x": 787.8958168029785,
+ "y": 472.9734830856323,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "8bb0abec.ed7288"
+ "abf743a3.45204"
]
]
},
{
- "id": "8bb0abec.ed7288",
- "type": "outcomeTrue",
- "name": "true",
- "xml": "<outcome value='true'>\n",
- "comments": "",
- "outputs": 1,
- "x": 1123.8995666503906,
- "y": 573.9773092269897,
- "z": "152c5971.7ac927",
- "wires": [
- [
- "bb6bcb71.b39508"
- ]
- ]
- },
- {
- "id": "bb6bcb71.b39508",
+ "id": "59ff6271.db05ec",
"type": "set",
"name": "set type",
"xml": "<set>\n<parameter name='prop.site.type' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />\n<parameter name='prop.site.sdwan' value='true' />",
"comments": "",
- "x": 1273.8995780944824,
- "y": 575.5773239135742,
- "z": "152c5971.7ac927",
+ "x": 1439.8958778381348,
+ "y": 526.5734176635742,
+ "z": "94b1afc3.a0dc",
"wires": []
},
{
- "id": "663914f5.d948fc",
+ "id": "4f1e9b40.0d5344",
"type": "switchNode",
"name": "switch role",
"xml": "<switch test=\"`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'role'`\">\n",
"comments": "",
"outputs": 1,
- "x": 945.8993988037109,
- "y": 616.9774293899536,
- "z": "152c5971.7ac927",
+ "x": 786.8955307006836,
+ "y": 580.9735260009766,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "a0fc9634.928638"
+ "30daf487.0dff4c"
]
]
},
{
- "id": "a0fc9634.928638",
+ "id": "30daf487.0dff4c",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1115.8994064331055,
- "y": 626.9773921966553,
- "z": "152c5971.7ac927",
+ "x": 956.8955383300781,
+ "y": 590.9734888076782,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "55d77248.d68a9c"
+ "685d8c42.5d6ca4"
]
]
},
{
- "id": "ca16c569.719ab8",
+ "id": "9966cd8b.1697a",
"type": "switchNode",
"name": "switch location-name",
"xml": "<switch test=\"`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'location-name'`\">\n",
"comments": "",
"outputs": 1,
- "x": 988.8992385864258,
- "y": 316.9772481918335,
- "z": "152c5971.7ac927",
+ "x": 831.8953323364258,
+ "y": 216.9733419418335,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "4c784934.a87448"
+ "cc9616ce.430f58"
]
]
},
{
- "id": "4c784934.a87448",
+ "id": "cc9616ce.430f58",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1152.8994102478027,
- "y": 316.9772491455078,
- "z": "152c5971.7ac927",
+ "x": 995.8955039978027,
+ "y": 216.9733428955078,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "3e756eb.d90f392"
+ "ec0a2191.fba48"
]
]
},
{
- "id": "3e756eb.d90f392",
+ "id": "ec0a2191.fba48",
"type": "set",
"name": "set location-name",
"xml": "<set>\n<parameter name='prop.site.location-name' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />\n",
"comments": "",
- "x": 1314.8994216918945,
- "y": 316.5773057937622,
- "z": "152c5971.7ac927",
+ "x": 1157.8955154418945,
+ "y": 216.5733995437622,
+ "z": "94b1afc3.a0dc",
"wires": []
},
{
- "id": "86e64461.d62ec8",
+ "id": "11d51c5.93463e4",
"type": "switchNode",
"name": "switch address",
"xml": "<switch test=\"`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'address'`\">\n",
"comments": "",
"outputs": 1,
- "x": 971.8992385864258,
- "y": 352.97725200653076,
- "z": "152c5971.7ac927",
+ "x": 814.8953323364258,
+ "y": 252.97334575653076,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "4b7d0893.6d1a98"
+ "c8c98295.92206"
]
]
},
{
- "id": "4b7d0893.6d1a98",
+ "id": "c8c98295.92206",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1141.8990859985352,
- "y": 360.97725105285645,
- "z": "152c5971.7ac927",
+ "x": 984.8951797485352,
+ "y": 260.97334480285645,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "2c26a847.9d4008"
+ "c8183604.5bf978"
]
]
},
{
- "id": "2c26a847.9d4008",
+ "id": "c8183604.5bf978",
"type": "set",
"name": "set location-address",
"xml": "<set>\n<parameter name='prop.site.location-address' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />\n",
"comments": "",
- "x": 1329.8992614746094,
- "y": 356.57722663879395,
- "z": "152c5971.7ac927",
+ "x": 1172.8953552246094,
+ "y": 256.57332038879395,
+ "z": "94b1afc3.a0dc",
"wires": []
},
{
- "id": "c6f06bc6.074328",
+ "id": "8cb0a11.7bd686",
"type": "switchNode",
"name": "switch postcode",
"xml": "<switch test=\"`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'postcode'`\">\n",
"comments": "",
"outputs": 1,
- "x": 972.8992385864258,
- "y": 394.9772129058838,
- "z": "152c5971.7ac927",
+ "x": 815.8953323364258,
+ "y": 294.9733066558838,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "af6ba3e1.07f47"
+ "164b8673.bea07a"
]
]
},
{
- "id": "af6ba3e1.07f47",
+ "id": "164b8673.bea07a",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1137.8994102478027,
- "y": 393.9772129058838,
- "z": "152c5971.7ac927",
+ "x": 980.8955039978027,
+ "y": 293.9733066558838,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "2e6a288b.539db8"
+ "9880bf16.cc774"
]
]
},
{
- "id": "2e6a288b.539db8",
+ "id": "9880bf16.cc774",
"type": "set",
"name": "set location-postcode",
"xml": "<set>\n<parameter name='prop.site.location-postcode' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />\n",
"comments": "",
- "x": 1324.8992614746094,
- "y": 395.5772294998169,
- "z": "152c5971.7ac927",
+ "x": 1167.8953552246094,
+ "y": 295.5733232498169,
+ "z": "94b1afc3.a0dc",
"wires": []
},
{
- "id": "9a6d9a43.210478",
+ "id": "32f8d4e8.435a2c",
"type": "switchNode",
"name": "switch controlPoint",
"xml": "<switch test=\"`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'controlPoint'`\">\n",
"comments": "",
"outputs": 1,
- "x": 964.7826232910156,
- "y": 677.0042304992676,
- "z": "152c5971.7ac927",
+ "x": 805.7787551879883,
+ "y": 641.0003271102905,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "610c92a.a595c6c"
+ "f9a2e4bf.e893d8"
]
]
},
{
- "id": "610c92a.a595c6c",
+ "id": "f9a2e4bf.e893d8",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1126.7825469970703,
- "y": 673.0042533874512,
- "z": "152c5971.7ac927",
+ "x": 967.778678894043,
+ "y": 637.0003499984741,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "be722424.9e5438"
+ "2b1dae74.689ae2"
]
]
},
{
- "id": "64aa63f1.8e581c",
+ "id": "cdec920f.b6fa4",
"type": "set",
"name": "set role",
"xml": "<set>\n<parameter name='prop.site.role' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />\n\n",
"comments": "",
- "x": 1487.7826957702637,
- "y": 603.0041675567627,
- "z": "152c5971.7ac927",
+ "x": 1339.7788467407227,
+ "y": 565.0002994537354,
+ "z": "94b1afc3.a0dc",
"wires": []
},
{
- "id": "79665fbb.1aeb5",
+ "id": "f025176.9eb87e8",
"type": "set",
"name": "set controlPoint",
"xml": "<set>\n<parameter name='prop.site.controlPoint' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />\n\n",
"comments": "",
- "x": 1511.7825736999512,
- "y": 693.0042514801025,
- "z": "152c5971.7ac927",
+ "x": 1352.7787055969238,
+ "y": 657.0003480911255,
+ "z": "94b1afc3.a0dc",
"wires": []
},
{
- "id": "adfd7aba.7276f8",
+ "id": "95df77a9.2015c8",
"type": "execute",
"name": "execute split roles",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split' >\n<parameter name=\"original_string\" value='`$prop.site.role`'/>\n<parameter name=\"regex\" value=\",\"/>\n<parameter name=\"ctx_memory_result_key\" value=\"prop.site.roles\"/>\n",
"comments": "",
"outputs": 1,
- "x": 1526.4489212036133,
- "y": 650.0040855407715,
- "z": "152c5971.7ac927",
+ "x": 1367.445053100586,
+ "y": 614.0001821517944,
+ "z": "94b1afc3.a0dc",
"wires": [
[]
]
},
{
- "id": "55d77248.d68a9c",
+ "id": "685d8c42.5d6ca4",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1273.4490585327148,
- "y": 630.0040855407715,
- "z": "152c5971.7ac927",
+ "x": 1114.4451904296875,
+ "y": 594.0001821517944,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "64aa63f1.8e581c",
- "adfd7aba.7276f8"
+ "cdec920f.b6fa4",
+ "95df77a9.2015c8"
]
]
},
{
- "id": "be722424.9e5438",
+ "id": "2b1dae74.689ae2",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"comments": "",
"outputs": 1,
- "x": 1285.4488945007324,
- "y": 677.0040092468262,
- "z": "152c5971.7ac927",
+ "x": 1126.445026397705,
+ "y": 641.0001058578491,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "79665fbb.1aeb5",
- "db6408de.efe4c8"
+ "f025176.9eb87e8",
+ "9399b06c.d4d46"
]
]
},
{
- "id": "db6408de.efe4c8",
+ "id": "9399b06c.d4d46",
"type": "execute",
"name": "execute split control points",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split' >\n<parameter name=\"original_string\" value='`$prop.site.controlPoint`'/>\n<parameter name=\"regex\" value=\",\"/>\n<parameter name=\"ctx_memory_result_key\" value=\"prop.site.controlpoints\"/>\n",
"comments": "",
"outputs": 1,
- "x": 1536.4490509033203,
- "y": 745.004111289978,
- "z": "152c5971.7ac927",
+ "x": 1377.445182800293,
+ "y": 709.000207901001,
+ "z": "94b1afc3.a0dc",
"wires": [
[]
]
},
{
- "id": "24b313e.2bb53ec",
+ "id": "5f3ab5eb.71688c",
"type": "switchNode",
"name": "switch latitude",
"xml": "<switch test=\"`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'latitude'`\">\n",
"comments": "",
"outputs": 1,
- "x": 963.1155471801758,
- "y": 439.00399017333984,
- "z": "152c5971.7ac927",
+ "x": 806.1116409301758,
+ "y": 339.00008392333984,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "13e09627.b199da"
+ "17934d90.83f8b2"
]
]
},
{
- "id": "13e09627.b199da",
+ "id": "17934d90.83f8b2",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1139.1153945922852,
- "y": 434.00394916534424,
- "z": "152c5971.7ac927",
+ "x": 982.1114883422852,
+ "y": 334.00004291534424,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "3ac65d27.a38462"
+ "c1cb3429.151d98"
]
]
},
{
- "id": "3ac65d27.a38462",
+ "id": "c1cb3429.151d98",
"type": "set",
"name": "set location-latitude",
"xml": "<set>\n<parameter name='prop.site.location-latitude' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />\n",
"comments": "",
- "x": 1313.1154022216797,
- "y": 432.60396575927734,
- "z": "152c5971.7ac927",
+ "x": 1156.1114959716797,
+ "y": 332.60005950927734,
+ "z": "94b1afc3.a0dc",
"wires": []
},
{
- "id": "3a793fa2.7f94e",
+ "id": "ca7858b9.e061c8",
"type": "switchNode",
"name": "switch longitude",
"xml": "<switch test=\"`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'longitude'`\">\n",
"comments": "",
"outputs": 1,
- "x": 966.1155471801758,
- "y": 479.0040330886841,
- "z": "152c5971.7ac927",
+ "x": 809.1116409301758,
+ "y": 379.0001268386841,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "55ab0e28.8342d"
+ "8f39dcfa.83f0e"
]
]
},
{
- "id": "55ab0e28.8342d",
+ "id": "8f39dcfa.83f0e",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1138.1155548095703,
- "y": 474.004075050354,
- "z": "152c5971.7ac927",
+ "x": 981.1116485595703,
+ "y": 374.000168800354,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "de42d185.f22c5"
+ "257b4537.3c066a"
]
]
},
{
- "id": "de42d185.f22c5",
+ "id": "257b4537.3c066a",
"type": "set",
"name": "set location-longitude",
"xml": "<set>\n<parameter name='prop.site.location-longitude' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />\n",
"comments": "",
- "x": 1320.1154098510742,
- "y": 477.60392665863037,
- "z": "152c5971.7ac927",
+ "x": 1163.1115036010742,
+ "y": 377.60002040863037,
+ "z": "94b1afc3.a0dc",
"wires": []
},
{
- "id": "954fde0c.db00e",
+ "id": "44ed6e14.4ca7e",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1129.1155548095703,
- "y": 524.004077911377,
- "z": "152c5971.7ac927",
+ "x": 972.1116485595703,
+ "y": 424.00017166137695,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "ec738ea.7ff107"
+ "e5a3e724.d41f08"
]
]
},
{
- "id": "ddfdabba.c44028",
+ "id": "2490dffe.947e9",
"type": "set",
"name": "set emails",
"xml": "<set>\n<parameter name='prop.site.emails' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />\n",
"comments": "",
- "x": 1487.115249633789,
- "y": 492.6039299964905,
- "z": "152c5971.7ac927",
+ "x": 1330.111343383789,
+ "y": 392.6000237464905,
+ "z": "94b1afc3.a0dc",
"wires": []
},
{
- "id": "fee596dc.022e48",
+ "id": "5ff23f08.f8215",
"type": "switchNode",
"name": "switch emails",
"xml": "<switch test=\"`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'emails'`\">\n",
"comments": "",
"outputs": 1,
- "x": 956.1156234741211,
- "y": 524.004077911377,
- "z": "152c5971.7ac927",
+ "x": 799.1117172241211,
+ "y": 424.00017166137695,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "954fde0c.db00e"
+ "44ed6e14.4ca7e"
]
]
},
{
- "id": "803294bd.b33768",
+ "id": "b15996ac.1ac678",
"type": "execute",
"name": "execute split emails",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split' >\n<parameter name=\"original_string\" value='`$prop.site.emails`'/>\n<parameter name=\"regex\" value=\",\"/>\n<parameter name=\"ctx_memory_result_key\" value=\"prop.site.email\"/>\n",
"comments": "",
"outputs": 1,
- "x": 1512.781593322754,
- "y": 539.0038328170776,
- "z": "152c5971.7ac927",
+ "x": 1355.777687072754,
+ "y": 438.99992656707764,
+ "z": "94b1afc3.a0dc",
"wires": [
[]
]
},
{
- "id": "ec738ea.7ff107",
+ "id": "e5a3e724.d41f08",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1291.1155624389648,
- "y": 525.0039954185486,
- "z": "152c5971.7ac927",
+ "x": 1134.1116561889648,
+ "y": 425.0000891685486,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "ddfdabba.c44028",
- "803294bd.b33768"
+ "2490dffe.947e9",
+ "b15996ac.1ac678"
]
]
},
{
- "id": "d3c58875.e0f958",
+ "id": "3e3aefd6.843cc",
"type": "switchNode",
"name": "switch description",
"xml": "<switch test=\"`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'description'`\">\n",
"comments": "",
"outputs": 1,
- "x": 971.00390625,
- "y": 229.00390625,
- "z": "152c5971.7ac927",
+ "x": 814,
+ "y": 129,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "8aebe9ab.cbad88"
+ "2b975758.fb5fb8"
]
]
},
{
- "id": "8aebe9ab.cbad88",
+ "id": "2b975758.fb5fb8",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1113.00390625,
- "y": 230.00390625,
- "z": "152c5971.7ac927",
+ "x": 956,
+ "y": 130,
+ "z": "94b1afc3.a0dc",
"wires": [
[
- "d7605ed6.36544"
+ "d08aa9c0.911c88"
]
]
},
{
- "id": "d7605ed6.36544",
+ "id": "d08aa9c0.911c88",
"type": "set",
"name": "set description",
"xml": "<set>\n<parameter name='prop.site.description' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />\n",
"comments": "",
- "x": 1259.0039825439453,
- "y": 230.60393619537354,
- "z": "152c5971.7ac927",
+ "x": 1102.0000762939453,
+ "y": 130.60002994537354,
+ "z": "94b1afc3.a0dc",
"wires": []
+ },
+ {
+ "id": "e1339417.d483a8",
+ "type": "other",
+ "name": "outcome Null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1329.00004196167,
+ "y": 478.00005531311035,
+ "z": "94b1afc3.a0dc",
+ "wires": [
+ [
+ "9d513524.b6af68"
+ ]
+ ]
+ },
+ {
+ "id": "d2b9e663.ae14c8",
+ "type": "other",
+ "name": "other",
+ "xml": "<outcome value='Other'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1312.5003700256348,
+ "y": 526.0000152587891,
+ "z": "94b1afc3.a0dc",
+ "wires": [
+ [
+ "59ff6271.db05ec"
+ ]
+ ]
+ },
+ {
+ "id": "abf743a3.45204",
+ "type": "outcomeTrue",
+ "name": "true",
+ "xml": "<outcome value='true'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 925.8956985473633,
+ "y": 472.97340202331543,
+ "z": "94b1afc3.a0dc",
+ "wires": [
+ [
+ "b178377b.d61118"
+ ]
+ ]
+ },
+ {
+ "id": "b178377b.d61118",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 1042.0000305175781,
+ "y": 475.00001430511475,
+ "z": "94b1afc3.a0dc",
+ "wires": [
+ [
+ "bb291d8b.bac3a"
+ ]
+ ]
+ },
+ {
+ "id": "bb291d8b.bac3a",
+ "type": "switchNode",
+ "name": "switch value",
+ "xml": "<switch test=\"`$vnf-request-input.vnf-input-parameters.param[$idx].value`\">\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1172.0000343322754,
+ "y": 507.00001335144043,
+ "z": "94b1afc3.a0dc",
+ "wires": [
+ [
+ "e1339417.d483a8",
+ "d2b9e663.ae14c8"
+ ]
+ ]
+ },
+ {
+ "id": "9d513524.b6af68",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 1468.0000457763672,
+ "y": 478.00001335144043,
+ "z": "94b1afc3.a0dc",
+ "wires": [
+ []
+ ]
}
]
diff --git a/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_self-serve-generate-name.json b/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_self-serve-generate-name.json
index 34896b70..2d05912d 100644
--- a/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_self-serve-generate-name.json
+++ b/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_self-serve-generate-name.json
@@ -1,20 +1,20 @@
[
{
- "id": "a0fcff67.f90228",
+ "id": "44384001.814478",
"type": "dgstart",
"name": "DGSTART",
"outputs": 1,
- "x": 87.14288330078125,
- "y": 81.42857360839844,
- "z": "719b1fb6.3a5b9",
+ "x": 112,
+ "y": 43,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "77ff7670.28ec1"
+ "7f8a6cfc.d713c4"
]
]
},
{
- "id": "77ff7670.28ec1",
+ "id": "7f8a6cfc.d713c4",
"type": "service-logic",
"name": "GENERIC-RESOURCE-API ${project.version}",
"module": "GENERIC-RESOURCE-API",
@@ -22,2855 +22,2881 @@
"comments": "",
"xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='GENERIC-RESOURCE-API' version='${project.version}'>",
"outputs": 1,
- "x": 352.2857360839844,
- "y": 81.4285659790039,
- "z": "719b1fb6.3a5b9",
+ "x": 359.1428527832031,
+ "y": 43.99999237060547,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "8198a596.8587a8"
+ "3e607973.034d6e"
]
]
},
{
- "id": "8198a596.8587a8",
+ "id": "3e607973.034d6e",
"type": "method",
"name": "self-serve-generate-name",
"xml": "<method rpc='self-serve-generate-name' mode='sync'>\n",
"comments": "",
"outputs": 1,
- "x": 657.2857360839844,
- "y": 81.4285659790039,
- "z": "719b1fb6.3a5b9",
+ "x": 664.1428527832031,
+ "y": 43.99999237060547,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "d1eee6c3.444198"
+ "3f9a35f8.8da52a"
]
]
},
{
- "id": "d1eee6c3.444198",
+ "id": "3f9a35f8.8da52a",
"type": "block",
"name": "block atomic",
"xml": "<block atomic=\"true\">\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 156.28573608398438,
- "y": 167.4285659790039,
- "z": "719b1fb6.3a5b9",
+ "x": 163.14285278320312,
+ "y": 129.99999237060547,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "350eff4d.2e40a",
- "e1ffb57d.53823",
- "32827181.a6b956",
- "de00c7d5.b7368"
+ "7a632215.c0ac2c",
+ "7f9a3712.0790f",
+ "f841aff3.13a07",
+ "571f0673.b8518",
+ "2a352877.19cd9"
]
]
},
{
- "id": "a5d9b0a3.665e9",
+ "id": "bc633e83.bdfe98",
"type": "execute",
"name": "execute replace extra comma",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace'>\n <parameter name='outputPath' value='tmp.naming-data-payload' />\n <parameter name='source' value='`$tmp.naming-data-payload`' />\n <parameter name='target' value=',}' />\n <parameter name='replacement' value='}' />",
"comments": "",
"outputs": 1,
- "x": 1722.0000915527344,
- "y": 893.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 1728.8572082519531,
+ "y": 856.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "350eff4d.2e40a",
+ "id": "7a632215.c0ac2c",
"type": "set",
"name": "set capability-name",
"xml": "<set>\n<parameter name='tmp.naming-data-payload' value='{&quot;elements&quot;:[' />\n",
"comments": "",
- "x": 355.2857360839844,
- "y": 168.4285659790039,
- "z": "719b1fb6.3a5b9",
+ "x": 362.1428527832031,
+ "y": 130.99999237060547,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "e1ffb57d.53823",
+ "id": "7f9a3712.0790f",
"type": "call",
"name": "call capability-param-resolution",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='self-serve-capability-param-resolution' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 393.2857360839844,
- "y": 233.4285659790039,
- "z": "719b1fb6.3a5b9",
+ "x": 391.1428527832031,
+ "y": 222,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "e6cffea2.05b508",
- "d29f4ed4.70282"
+ "f5bead73.e939c8",
+ "e210e97d.997518"
]
]
},
{
- "id": "c8ae8fb3.2b106",
+ "id": "f5e94169.5fc978",
"type": "for",
"name": "for vnf-parameters-data",
"xml": "<for index='i' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1155.785888671875,
- "y": 524.8570861816406,
- "z": "719b1fb6.3a5b9",
+ "x": 1162.6430053710938,
+ "y": 487.4285125732422,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "29db996f.2f77fe"
+ "fa4257ae.9fd718"
]
]
},
{
- "id": "29db996f.2f77fe",
+ "id": "fa4257ae.9fd718",
"type": "switchNode",
"name": "switch capability-name",
"xml": "<switch test='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.capability-name == $ss.capability-name`'>\n",
"comments": "",
"outputs": 1,
- "x": 1398.6429443359375,
- "y": 524.8570861816406,
- "z": "719b1fb6.3a5b9",
+ "x": 1405.5000610351562,
+ "y": 487.4285125732422,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "fa3c082e.e81b98"
+ "4a6ecd53.d56884"
]
]
},
{
- "id": "fa3c082e.e81b98",
+ "id": "4a6ecd53.d56884",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1579.3572998046875,
- "y": 524.8570709228516,
- "z": "719b1fb6.3a5b9",
+ "x": 1586.2144165039062,
+ "y": 487.4284973144531,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "ecb50e0c.b6f238"
+ "a7c641d6.1516b"
]
]
},
{
- "id": "9b45dec.f68242",
+ "id": "9750b026.40e79",
"type": "for",
"name": "for vnf-parameters-data",
"xml": "<for index='j' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1691.5000915527344,
- "y": 694.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 1698.3572082519531,
+ "y": 657.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "83953b14.cd3cc"
+ "6e26ff1a.e07b88"
]
]
},
{
- "id": "e6cffea2.05b508",
+ "id": "f5bead73.e939c8",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 616.2857360839844,
- "y": 201.4285659790039,
- "z": "719b1fb6.3a5b9",
+ "x": 614.1428527832031,
+ "y": 190,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "3bec3c36.db162c"
+ "322435c8.51411a"
]
]
},
{
- "id": "d29f4ed4.70282",
+ "id": "e210e97d.997518",
"type": "failure",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 625.2857360839844,
- "y": 267.4285659790039,
- "z": "719b1fb6.3a5b9",
+ "x": 623.1428527832031,
+ "y": 256,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "3bec3c36.db162c"
+ "322435c8.51411a"
]
]
},
{
- "id": "3bec3c36.db162c",
+ "id": "322435c8.51411a",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"Error from capability-param-resolution\" />\n",
"comments": "",
- "x": 818.2857360839844,
- "y": 201.4285659790039,
- "z": "719b1fb6.3a5b9",
+ "x": 816.1428527832031,
+ "y": 190,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "d44e28a5.a5361",
+ "id": "11ec24e5.5f86b3",
"type": "set",
"name": "set payload data",
- "xml": "<set>\n<parameter name=\"tmp.naming-data-payload\" value=\"`$tmp.naming-data-payload + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].name + '&quot;:' + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].value + '&quot;,'`\"/>",
+ "xml": "<set>\n<parameter name=\"tmp.naming-data-payload\" value=\"`$tmp.naming-data-payload + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].name + '&quot;:' + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].value + '&quot;,'`\"/>\n<parameter name=\"`tmp.gen-name[0].element[$j].name`\" value=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].name`\"/>\n<parameter name=\"`tmp.gen-name[0].element[$j].value`\" value=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].value`\"/>\n<parameter name=\"`tmp.gen-name[0].element_length`\" value='`$j + 1`' />",
"comments": "",
- "x": 2294.0000915527344,
- "y": 692.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 2300.857208251953,
+ "y": 655.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "561c14d8.97e21c",
+ "id": "bc87beaf.bad8a",
"type": "set",
"name": "set set payload data",
- "xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + '{'`\" />",
+ "xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + '{'`\" />\n<parameter name='tmp.gen-name_length' value='1' />",
"comments": "",
- "x": 1689.000244140625,
- "y": 620.4284362792969,
- "z": "719b1fb6.3a5b9",
+ "x": 1695.8573608398438,
+ "y": 582.9998626708984,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "755059e1.8e09a8",
+ "id": "3b24af37.62d288",
"type": "set",
"name": "set payload data",
"xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + '},'`\" />",
"comments": "",
- "x": 1689.0000915527344,
- "y": 756.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 1695.8572082519531,
+ "y": 719.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "bc43a903.45bae8",
+ "id": "a94779d8.6d99c",
"type": "set",
"name": "set close payload list",
"xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + ']}'`\" />",
"comments": "",
- "x": 1695.0000915527344,
- "y": 821.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 1701.8572082519531,
+ "y": 784.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "d6e4c46a.7a8e5",
+ "id": "349803e.db927fc",
"type": "execute",
"name": "execute replace extra comma",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace'>\n <parameter name='outputPath' value='tmp.naming-data-payload' />\n <parameter name='source' value='`$tmp.naming-data-payload`' />\n <parameter name='target' value=',]' />\n <parameter name='replacement' value=']' />",
"comments": "",
"outputs": 1,
- "x": 1725.0000915527344,
- "y": 947.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 1731.8572082519531,
+ "y": 910.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "87e249a7.d2d76",
- "type": "execute",
- "name": "execute NameGenerationNode-unassign",
- "xml": "<execute plugin='org.openecomp.sdnc.prov.namegeneration.node.UnAssignNameNode' method='process'>\n <parameter name='payload' value='`$tmp.naming-data-payload`' />\n <parameter name=\"prifix\" value=\"nameGenResponse\" />\n",
- "comments": "",
- "outputs": 1,
- "x": 1751.0000915527344,
- "y": 1004.5713424682617,
- "z": "719b1fb6.3a5b9",
- "wires": [
- [
- "e6a3bbe9.313368",
- "77d6fd82.74cf9c"
- ]
- ]
- },
- {
- "id": "e6a3bbe9.313368",
+ "id": "8af1d548.36ba08",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 2026.0000915527344,
- "y": 954.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 2097.857177734375,
+ "y": 932.1427612304688,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "1105b68e.0b87b9"
+ "c7e4d145.feb3b8"
]
]
},
{
- "id": "6b43378b.4fca7",
+ "id": "91f543dc.e9a0c8",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"Error from NameGenerationNode Unassign\" />\n",
"comments": "",
- "x": 2391.0000915527344,
- "y": 1054.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 2462.857177734375,
+ "y": 1032.1427612304688,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "77d6fd82.74cf9c",
+ "id": "6b5d2c36.36d07c",
"type": "failure",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 2031.0000915527344,
- "y": 1053.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 2102.857177734375,
+ "y": 1031.1427612304688,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "1105b68e.0b87b9"
+ "c7e4d145.feb3b8"
]
]
},
{
- "id": "1105b68e.0b87b9",
+ "id": "c7e4d145.feb3b8",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 2189.0000915527344,
- "y": 998.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 2260.857177734375,
+ "y": 976.1427612304688,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "6d474a1e.25ac34",
- "6b43378b.4fca7"
+ "6effc421.de541c",
+ "91f543dc.e9a0c8"
]
]
},
{
- "id": "6d474a1e.25ac34",
+ "id": "6effc421.de541c",
"type": "set",
"name": "set status as FAILED",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.status`' value='FAILED' />",
"comments": "",
- "x": 2405.0000915527344,
- "y": 945.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 2476.857177734375,
+ "y": 923.1427612304688,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "d4160d84.70bb48",
+ "id": "4312cb34.d1fec4",
"type": "switchNode",
"name": "switch capability action assign",
"xml": "<switch test=\"`$ss.capability-action == 'assign'`\">",
"comments": "",
"outputs": 1,
- "x": 779.5238037109375,
- "y": 1652.1904296875,
- "z": "719b1fb6.3a5b9",
+ "x": 786.3809204101562,
+ "y": 1614.7618560791016,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "bf3e09f4.dafff"
+ "c588e672.9457"
]
]
},
{
- "id": "bf3e09f4.dafff",
+ "id": "c588e672.9457",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1034.238037109375,
- "y": 1652.1904296875,
- "z": "719b1fb6.3a5b9",
+ "x": 1041.0951538085938,
+ "y": 1614.7618560791016,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "6b713cfb.723974"
+ "96d8122d.bb415"
]
]
},
{
- "id": "9c664d90.9ee95",
+ "id": "f5ff6d86.dbc2a8",
"type": "for",
"name": "for vnf-parameters-data",
"xml": "<for index='l' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1937.0000915527344,
- "y": 1249.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 1943.8572082519531,
+ "y": 1212.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "1476063f.6bab8a"
+ "9f1d9384.e4cf38"
]
]
},
{
- "id": "dbdeedbe.f41fd8",
+ "id": "e8412a7e.3847d8",
"type": "switchNode",
"name": "switch capability-name",
"xml": "<switch test='`$s2[0] == $jsonContextPrefix.elements[$n].resource-name`'>\n",
"comments": "",
"outputs": 1,
- "x": 2140.0000915527344,
- "y": 1467.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 2146.857208251953,
+ "y": 1430.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "79a3b021.b0b288"
+ "32086d42.08bf12"
]
]
},
{
- "id": "79a3b021.b0b288",
+ "id": "32086d42.08bf12",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2350.0000915527344,
- "y": 1467.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 2356.857208251953,
+ "y": 1430.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "be0571f0.89d93"
+ "8dd8a7af.a18a58"
]
]
},
{
- "id": "be0571f0.89d93",
+ "id": "8dd8a7af.a18a58",
"type": "set",
"name": "set set payload data",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$l].value`' value=\"`$jsonContextPrefix.elements[$n].resource-value`\" />\n",
"comments": "",
- "x": 2546.5000915527344,
- "y": 1468.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 2553.357208251953,
+ "y": 1431.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "3456afaf.a73238",
+ "id": "7ce3d216.f2e854",
"type": "execute",
"name": "execute jsonStringToCtx",
- "xml": "<execute plugin=\"org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils\" method=\"jsonStringToCtx\">\n\t<parameter name=\"source\" value=\"nameGenResponse.response-payload\" />\n\t<parameter name=\"outputPath\" value=\"jsonContextPrefix\" />\n\t<parameter name=\"isEscaped\" value=\"false\" />\n\n",
+ "xml": "<execute plugin=\"org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils\" method=\"jsonStringToCtx\">\n\t<parameter name=\"source\" value=\"nameGenResponse.httpResponse\" />\n\t<parameter name=\"outputPath\" value=\"jsonContextPrefix\" />\n\t<parameter name=\"isEscaped\" value=\"false\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 1706.0000915527344,
- "y": 1152.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 1712.8572082519531,
+ "y": 1115.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "5e598157.0c9c38",
+ "id": "174f706f.eb1c4",
"type": "for",
"name": "for response elements",
"xml": "<for index='n' start='0' end='`$jsonContextPrefix.elements_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1699.0000915527344,
- "y": 1248.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 1705.8572082519531,
+ "y": 1211.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "9c664d90.9ee95"
+ "f5ff6d86.dbc2a8"
]
]
},
{
- "id": "1476063f.6bab8a",
+ "id": "9f1d9384.e4cf38",
"type": "execute",
"name": "slistringUtils - check value for $",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='contains' emitsOutcome='true' >\n <parameter name=\"source\" value=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$l].value`\" />\n <parameter name=\"target\" value=\"$\"/>\n \n",
"comments": "",
"outputs": 1,
- "x": 2241.0000915527344,
- "y": 1249.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 2247.857208251953,
+ "y": 1212.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "61dff537.8d841c"
+ "ce97b583.de0eb"
]
]
},
{
- "id": "61dff537.8d841c",
+ "id": "ce97b583.de0eb",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2481.0000915527344,
- "y": 1248.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 2487.857208251953,
+ "y": 1211.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "1266c260.0a766e"
+ "2768322c.982d36"
]
]
},
{
- "id": "ee43f6d5.8d77f8",
+ "id": "edf18693.d94aa8",
"type": "execute",
"name": "split resource-resolution-data",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split'>\n <parameter name='ctx_memory_result_key' value='resource-resolution-split' />\n <parameter name='original_string' value='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$l].value`' />\n <parameter name='regex' value='\\$\\{' />\n",
"comments": "",
"outputs": 1,
- "x": 2148.0000915527344,
- "y": 1319.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 2154.857208251953,
+ "y": 1282.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "aa6b38f9.769088",
+ "id": "ddf9d245.932de",
"type": "execute",
"name": "split resource-resolution-split-1",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split'>\n <parameter name='ctx_memory_result_key' value='s2' />\n <parameter name='original_string' value='`$resource-resolution-split[1]`' />\n <parameter name='regex' value='\\}' />\n",
"comments": "",
"outputs": 1,
- "x": 2163.0000915527344,
- "y": 1402.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 2169.857208251953,
+ "y": 1365.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "1266c260.0a766e",
+ "id": "2768322c.982d36",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1932.0000915527344,
- "y": 1319.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 1938.8572082519531,
+ "y": 1282.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "ee43f6d5.8d77f8",
- "aa6b38f9.769088",
- "dbdeedbe.f41fd8"
+ "edf18693.d94aa8",
+ "ddf9d245.932de",
+ "e8412a7e.3847d8"
]
]
},
{
- "id": "ecb50e0c.b6f238",
+ "id": "a7c641d6.1516b",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic='true'>",
"atomic": "true",
"comments": "",
"outputs": 1,
- "x": 1482.0000915527344,
- "y": 620.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 1488.8572082519531,
+ "y": 583.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "561c14d8.97e21c",
- "9b45dec.f68242",
- "755059e1.8e09a8",
- "bc43a903.45bae8",
- "a5d9b0a3.665e9",
- "87e249a7.d2d76",
- "3456afaf.a73238",
- "8b2dbcd4.32fa2",
- "5e598157.0c9c38",
- "d6e4c46a.7a8e5"
+ "bc87beaf.bad8a",
+ "9750b026.40e79",
+ "3b24af37.62d288",
+ "a94779d8.6d99c",
+ "bc633e83.bdfe98",
+ "7ce3d216.f2e854",
+ "dcc81210.7b3bb",
+ "174f706f.eb1c4",
+ "349803e.db927fc",
+ "f9afd12e.2d3128"
]
]
},
{
- "id": "8b2dbcd4.32fa2",
+ "id": "dcc81210.7b3bb",
"type": "set",
"name": "set status as DELETED",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.status`' value='DELETED' />",
"comments": "",
- "x": 1704.0000915527344,
- "y": 1202.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 1710.8572082519531,
+ "y": 1165.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "27e20f71.6cc548",
+ "id": "fff738e5.4d0ce",
"type": "execute",
"name": "execute replace extra comma",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace'>\n <parameter name='outputPath' value='tmp.naming-data-payload' />\n <parameter name='source' value='`$tmp.naming-data-payload`' />\n <parameter name='target' value=',}' />\n <parameter name='replacement' value='}' />",
"comments": "",
"outputs": 1,
- "x": 1620.66650390625,
- "y": 2137.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1627.5236206054688,
+ "y": 2099.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "10be84bb.581f9b",
+ "id": "16446b33.aaf505",
"type": "for",
"name": "for vnf-parameters-data",
"xml": "<for index='j' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1728.16650390625,
- "y": 1953.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1735.0236206054688,
+ "y": 1915.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "8f7c2524.de50c"
+ "95c09049.cf0398"
]
]
},
{
- "id": "8f7c2524.de50c",
+ "id": "95c09049.cf0398",
"type": "set",
"name": "set payload data",
- "xml": "<set>\n<parameter name=\"tmp.naming-data-payload\" value=\"`$tmp.naming-data-payload + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].name + '&quot;:' + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].value + '&quot;,'`\"/>",
+ "xml": "<set>\n<parameter name=\"tmp.naming-data-payload\" value=\"`$tmp.naming-data-payload + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].name + '&quot;:' + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].value + '&quot;,'`\"/>\n<parameter name=\"`tmp.gen-name[$tmp.gen-name_length].element[$j].name`\" value=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].name`\"/>\n<parameter name=\"`tmp.gen-name[$tmp.gen-name_length].element[$j].value`\" value=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].value`\"/>\n<parameter name=\"`tmp.gen-name[$tmp.gen-name_length].element_length`\" value='`$j + 1`' />",
"comments": "",
- "x": 1980.66650390625,
- "y": 1953.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1987.5236206054688,
+ "y": 1915.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "c15c85cd.ea9f2",
+ "id": "278f5611.2443c2",
"type": "set",
"name": "set payload data",
- "xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + '{'`\" />",
+ "xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + '{'`\" />\n",
"comments": "",
- "x": 1709.094970703125,
- "y": 1891.8093872070312,
- "z": "719b1fb6.3a5b9",
+ "x": 1715.9520874023438,
+ "y": 1854.3808135986328,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "463d12f4.b57d9c",
+ "id": "b557bbbd.9b02a",
"type": "set",
"name": "set payload data",
- "xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + '},'`\" />",
+ "xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + '},'`\" />\n<parameter name='tmp.gen-name_length' value='`$tmp.gen-name_length + 1`' />",
"comments": "",
- "x": 1710.66650390625,
- "y": 2009.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1717.5236206054688,
+ "y": 1971.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "6a94f7b6.2e3e3",
+ "id": "88f11c7a.f31688",
"type": "set",
"name": "set close payload list",
"xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + ']}'`\" />",
"comments": "",
- "x": 1595.66650390625,
- "y": 2094.0949096679688,
- "z": "719b1fb6.3a5b9",
+ "x": 1602.5236206054688,
+ "y": 2056.6663360595703,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "9ffd6dac.5925a",
+ "id": "f398ae72.bb9338",
"type": "execute",
"name": "execute replace extra comma",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace'>\n <parameter name='outputPath' value='tmp.naming-data-payload' />\n <parameter name='source' value='`$tmp.naming-data-payload`' />\n <parameter name='target' value=',]' />\n <parameter name='replacement' value=']' />",
"comments": "",
"outputs": 1,
- "x": 1621.66650390625,
- "y": 2188.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1628.5236206054688,
+ "y": 2150.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "18ddf882.11fd17",
- "type": "execute",
- "name": "execute NameGenerationNode-assign",
- "xml": "<execute plugin='org.openecomp.sdnc.prov.namegeneration.node.AssignNameNode' method='process'>\n <parameter name='payload' value='`$tmp.naming-data-payload`' />\n <parameter name=\"prifix\" value=\"nameGenResponse\" />\n",
- "comments": "",
- "outputs": 1,
- "x": 1654.66650390625,
- "y": 2245.094970703125,
- "z": "719b1fb6.3a5b9",
- "wires": [
- [
- "92a93214.de1db8",
- "b360f358.424cc8"
- ]
- ]
- },
- {
- "id": "92a93214.de1db8",
+ "id": "7136f5d4.61b024",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1929.66650390625,
- "y": 2195.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1969.523681640625,
+ "y": 2184.66650390625,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "177b20fb.1bc74f"
+ "cce60393.cfd56"
]
]
},
{
- "id": "3a3832be.f27146",
+ "id": "37abde73.8b06c2",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"Error from NameGenerationNode Assign\" />\n",
"comments": "",
- "x": 2294.66650390625,
- "y": 2295.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 2334.523681640625,
+ "y": 2284.66650390625,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "b360f358.424cc8",
+ "id": "ef775b29.4a7b",
"type": "failure",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 1934.66650390625,
- "y": 2294.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1974.523681640625,
+ "y": 2283.66650390625,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "177b20fb.1bc74f"
+ "cce60393.cfd56"
]
]
},
{
- "id": "177b20fb.1bc74f",
+ "id": "cce60393.cfd56",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 2092.66650390625,
- "y": 2239.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 2132.523681640625,
+ "y": 2228.66650390625,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "9799610d.ba099",
- "3a3832be.f27146"
+ "546fd473.2cd5dc",
+ "37abde73.8b06c2"
]
]
},
{
- "id": "9799610d.ba099",
+ "id": "546fd473.2cd5dc",
"type": "set",
"name": "set status as FAILED",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.status`' value='FAILED' />",
"comments": "",
- "x": 2308.66650390625,
- "y": 2186.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 2348.523681640625,
+ "y": 2175.66650390625,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "37785a2.d8ea0a6",
+ "id": "e2624cc8.4eb57",
"type": "for",
"name": "for vnf-parameters-data",
"xml": "<for index='l' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1841.66650390625,
- "y": 2445.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1848.5236206054688,
+ "y": 2407.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "10461664.c280c2"
+ "be8a0258.a3d64"
]
]
},
{
- "id": "ddf9ee24.32721",
+ "id": "5380bfed.f4864",
"type": "switchNode",
"name": "switch capability-name",
"xml": "<switch test='`$s2[0] == $jsonContextPrefix.elements[$n].resource-name`'>\n",
"comments": "",
"outputs": 1,
- "x": 2044.66650390625,
- "y": 2663.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 2051.5236206054688,
+ "y": 2625.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "915c127.869707"
+ "94a6c10b.d1c6a"
]
]
},
{
- "id": "915c127.869707",
+ "id": "94a6c10b.d1c6a",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2254.66650390625,
- "y": 2663.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 2261.5236206054688,
+ "y": 2625.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "3e3270b5.18b048"
+ "7afdb21d.b59cb4"
]
]
},
{
- "id": "3e3270b5.18b048",
+ "id": "7afdb21d.b59cb4",
"type": "set",
"name": "set set payload data",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$l].value`' value=\"`$jsonContextPrefix.elements[$n].resource-value`\" />\n",
"comments": "",
- "x": 2451.16650390625,
- "y": 2664.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 2458.0236206054688,
+ "y": 2626.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "a0734951.e43bb8",
+ "id": "6d5e56ed.17d75",
"type": "execute",
"name": "execute jsonStringToCtx",
- "xml": "<execute plugin=\"org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils\" method=\"jsonStringToCtx\">\n\t<parameter name=\"source\" value=\"nameGenResponse.response-payload\" />\n\t<parameter name=\"outputPath\" value=\"jsonContextPrefix\" />\n\t<parameter name=\"isEscaped\" value=\"false\" />\n\n",
+ "xml": "<execute plugin=\"org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils\" method=\"jsonStringToCtx\">\n\t<parameter name=\"source\" value=\"nameGenResponse.httpResponse\" />\n\t<parameter name=\"outputPath\" value=\"jsonContextPrefix\" />\n\t<parameter name=\"isEscaped\" value=\"false\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 1602.66650390625,
- "y": 2347.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1609.5236206054688,
+ "y": 2309.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "9976393.8117548",
+ "id": "a133146c.f8d1c",
"type": "for",
"name": "for response elements",
"xml": "<for index='n' start='0' end='`$jsonContextPrefix.elements_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1594.66650390625,
- "y": 2444.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1601.5236206054688,
+ "y": 2406.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "37785a2.d8ea0a6"
+ "e2624cc8.4eb57"
]
]
},
{
- "id": "10461664.c280c2",
+ "id": "be8a0258.a3d64",
"type": "execute",
"name": "slistringUtils - check value for $",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='contains' emitsOutcome='true' >\n <parameter name=\"source\" value=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$l].value`\" />\n <parameter name=\"target\" value=\"$\"/>\n \n",
"comments": "",
"outputs": 1,
- "x": 2145.66650390625,
- "y": 2445.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 2152.5236206054688,
+ "y": 2407.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "41922990.8a02f"
+ "663752cc.bb14ac"
]
]
},
{
- "id": "41922990.8a02f",
+ "id": "663752cc.bb14ac",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2385.66650390625,
- "y": 2444.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 2392.5236206054688,
+ "y": 2406.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "306d8cff.17a97c"
+ "5dfb8377.41af4c"
]
]
},
{
- "id": "82f3e171.12001",
+ "id": "f365dac0.f6fd5",
"type": "execute",
"name": "split resource-resolution-data",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split'>\n <parameter name='ctx_memory_result_key' value='resource-resolution-split' />\n <parameter name='original_string' value='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$l].value`' />\n <parameter name='regex' value='\\$\\{' />\n",
"comments": "",
"outputs": 1,
- "x": 2052.66650390625,
- "y": 2515.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 2059.5236206054688,
+ "y": 2477.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "7a6ff351.59e66c",
+ "id": "f61ff7c0.095698",
"type": "execute",
"name": "split resource-resolution-split-1",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split'>\n <parameter name='ctx_memory_result_key' value='s2' />\n <parameter name='original_string' value='`$resource-resolution-split[1]`' />\n <parameter name='regex' value='\\}' />\n",
"comments": "",
"outputs": 1,
- "x": 2067.66650390625,
- "y": 2598.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 2074.5236206054688,
+ "y": 2560.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "306d8cff.17a97c",
+ "id": "5dfb8377.41af4c",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1836.66650390625,
- "y": 2515.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1843.5236206054688,
+ "y": 2477.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "82f3e171.12001",
- "7a6ff351.59e66c",
- "ddf9ee24.32721"
+ "f365dac0.f6fd5",
+ "f61ff7c0.095698",
+ "5380bfed.f4864"
]
]
},
{
- "id": "6ed8d498.9723f4",
+ "id": "4849f457.b71524",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic='true'>",
"atomic": "true",
"comments": "",
"outputs": 1,
- "x": 1505.8095703125,
- "y": 1871.380615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 1512.6666870117188,
+ "y": 1833.9520416259766,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "c15c85cd.ea9f2",
- "10be84bb.581f9b",
- "463d12f4.b57d9c"
+ "278f5611.2443c2",
+ "16446b33.aaf505",
+ "b557bbbd.9b02a"
]
]
},
{
- "id": "c0cd44d1.7422",
+ "id": "a0bc5db0.876ac8",
"type": "set",
"name": "set status as SUCCESS",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.status`' value='SUCCESS' />",
"comments": "",
- "x": 1601.66650390625,
- "y": 2398.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1608.5236206054688,
+ "y": 2360.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "83953b14.cd3cc",
+ "id": "6e26ff1a.e07b88",
"type": "switchNode",
"name": "switch external-key",
"xml": "<switch test=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].name == 'external-key'`\">\n",
"comments": "",
"outputs": 1,
- "x": 1930.0000915527344,
- "y": 693.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 1936.8572082519531,
+ "y": 656.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "6b9e4dcc.d7de0c"
+ "983c7546.c67c28"
]
]
},
{
- "id": "6b9e4dcc.d7de0c",
+ "id": "983c7546.c67c28",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2114.0000915527344,
- "y": 693.5713424682617,
- "z": "719b1fb6.3a5b9",
+ "x": 2120.857208251953,
+ "y": 656.1427688598633,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "d44e28a5.a5361"
+ "11ec24e5.5f86b3"
]
]
},
{
- "id": "763cbc48.beee84",
+ "id": "d8da45ad.01a8a",
"type": "execute",
"name": "execute replace extra comma",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace'>\n <parameter name='outputPath' value='tmp.naming-data-payload' />\n <parameter name='source' value='`$tmp.naming-data-payload`' />\n <parameter name='target' value=',}' />\n <parameter name='replacement' value='}' />",
"comments": "",
"outputs": 1,
- "x": 1841.619140625,
- "y": 4107.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 1848.4762573242188,
+ "y": 4070.3329010009766,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "f26ae3f9.58a6a8",
+ "id": "a3bde9b.3b85798",
"type": "for",
"name": "for vnf-parameters-data",
"xml": "<for index='i' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1130.1190185546875,
- "y": 3719.761962890625,
- "z": "719b1fb6.3a5b9",
+ "x": 1136.9761352539062,
+ "y": 3682.3333892822266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "19fb9704.e19821"
+ "4c84b197.b55718"
]
]
},
{
- "id": "19fb9704.e19821",
+ "id": "4c84b197.b55718",
"type": "switchNode",
"name": "switch capability-name",
"xml": "<switch test='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.capability-name == $ss.capability-name`'>\n",
"comments": "",
"outputs": 1,
- "x": 1410.1190185546875,
- "y": 3719.761962890625,
- "z": "719b1fb6.3a5b9",
+ "x": 1416.9761352539062,
+ "y": 3682.3333892822266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "3b748ba2.5ca9c4"
+ "8fbf4fc0.ccf628"
]
]
},
{
- "id": "3b748ba2.5ca9c4",
+ "id": "8fbf4fc0.ccf628",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1619.119140625,
- "y": 3719.761962890625,
- "z": "719b1fb6.3a5b9",
+ "x": 1625.9762573242188,
+ "y": 3682.3333892822266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "fe9fb952.03865"
+ "37468c59.dd2414"
]
]
},
{
- "id": "a3efff0f.aa4ec8",
+ "id": "97197bdb.a2cad8",
"type": "for",
"name": "for vf-module-parameters",
"xml": "<for index='j' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1811.119140625,
- "y": 3908.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 1817.9762573242188,
+ "y": 3871.3329010009766,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "411e99fd.a39438"
+ "3908bfeb.e84f"
]
]
},
{
- "id": "9abfe611.4545c8",
+ "id": "28d4f278.d4fa26",
"type": "set",
"name": "set payload data",
- "xml": "<set>\n<parameter name=\"tmp.naming-data-payload\" value=\"`$tmp.naming-data-payload + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].name + '&quot;:' + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].value + '&quot;,'`\"/>",
+ "xml": "<set>\n<parameter name=\"tmp.naming-data-payload\" value=\"`$tmp.naming-data-payload + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].name + '&quot;:' + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].value + '&quot;,'`\"/>\n<parameter name=\"`tmp.gen-name[0].element[$j].name`\" value=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].name`\"/>\n<parameter name=\"`tmp.gen-name[0].element[$j].value`\" value=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].value`\"/>\n<parameter name=\"`tmp.gen-name[0].element_length`\" value='`$j + 1`' />",
"comments": "",
- "x": 2413.619140625,
- "y": 3906.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2420.4762573242188,
+ "y": 3869.3329010009766,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "ed0277b1.5970a",
+ "id": "73a75422.d8850c",
"type": "set",
"name": "set set payload data",
- "xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + '{'`\" />",
+ "xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + '{'`\" />\n<parameter name='tmp.gen-name_length' value='1' />",
"comments": "",
- "x": 1808.619140625,
- "y": 3831.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 1815.4762573242188,
+ "y": 3794.3329010009766,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "8bbcc0bf.293ef8",
+ "id": "46fb189c.966838",
"type": "set",
"name": "set payload data",
"xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + '},'`\" />",
"comments": "",
- "x": 1808.619140625,
- "y": 3970.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 1815.4762573242188,
+ "y": 3933.3329010009766,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "d5dd6ae4.c76cb8",
+ "id": "be439e05.fe7ff8",
"type": "set",
"name": "set close payload list",
"xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + ']}'`\" />",
"comments": "",
- "x": 1814.619140625,
- "y": 4035.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 1821.4762573242188,
+ "y": 3998.3329010009766,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "a8bf6cef.175b98",
+ "id": "a84918b5.b82848",
"type": "execute",
"name": "execute replace extra comma",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace'>\n <parameter name='outputPath' value='tmp.naming-data-payload' />\n <parameter name='source' value='`$tmp.naming-data-payload`' />\n <parameter name='target' value=',]' />\n <parameter name='replacement' value=']' />",
"comments": "",
"outputs": 1,
- "x": 1844.619140625,
- "y": 4161.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 1851.4762573242188,
+ "y": 4124.332901000977,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "452bff82.4ad42",
- "type": "execute",
- "name": "execute NameGenerationNode-unassign",
- "xml": "<execute plugin='org.openecomp.sdnc.prov.namegeneration.node.UnAssignNameNode' method='process'>\n <parameter name='payload' value='`$tmp.naming-data-payload`' />\n <parameter name=\"prifix\" value=\"nameGenResponse\" />\n",
- "comments": "",
- "outputs": 1,
- "x": 1870.619140625,
- "y": 4218.761474609375,
- "z": "719b1fb6.3a5b9",
- "wires": [
- [
- "12b87141.01ce77",
- "da1a35af.b4fb48"
- ]
- ]
- },
- {
- "id": "12b87141.01ce77",
+ "id": "e6db3fc2.418c7",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 2145.619140625,
- "y": 4168.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2181.476318359375,
+ "y": 4146.3330078125,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "d6576013.79b6e"
+ "c89f9697.3bcd9"
]
]
},
{
- "id": "8bddd10d.aa37",
+ "id": "54902e1f.a23738",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"Error from NameGenerationNode Unassign\" />\n",
"comments": "",
- "x": 2510.619140625,
- "y": 4268.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2546.476318359375,
+ "y": 4246.3330078125,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "da1a35af.b4fb48",
+ "id": "add1de2.24bbda",
"type": "failure",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 2150.619140625,
- "y": 4267.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2186.476318359375,
+ "y": 4245.3330078125,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "d6576013.79b6e"
+ "c89f9697.3bcd9"
]
]
},
{
- "id": "d6576013.79b6e",
+ "id": "c89f9697.3bcd9",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 2308.619140625,
- "y": 4212.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2344.476318359375,
+ "y": 4190.3330078125,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "d5fbd703.684a6",
- "8bddd10d.aa37"
+ "ed1d207b.66697",
+ "54902e1f.a23738"
]
]
},
{
- "id": "d5fbd703.684a6",
+ "id": "ed1d207b.66697",
"type": "set",
"name": "set status as FAILED",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.status`' value='FAILED' />",
"comments": "",
- "x": 2524.619140625,
- "y": 4159.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2560.476318359375,
+ "y": 4137.3330078125,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "979f7afd.afba98",
+ "id": "712165ae.c8b134",
"type": "for",
"name": "for vf-module-parameters",
"xml": "<for index='l' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 2056.619140625,
- "y": 4463.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2063.4762573242188,
+ "y": 4426.332901000977,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "648836d6.70a21"
+ "a8831bf.0add2e8"
]
]
},
{
- "id": "8ff2df62.ffbde",
+ "id": "c4d874bf.c84648",
"type": "switchNode",
"name": "switch capability-name",
"xml": "<switch test='`$s2[0] == $jsonContextPrefix.elements[$n].resource-name`'>\n",
"comments": "",
"outputs": 1,
- "x": 2259.619140625,
- "y": 4681.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2266.4762573242188,
+ "y": 4644.332901000977,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "78ff017c.17864"
+ "6c8538a0.f116f8"
]
]
},
{
- "id": "78ff017c.17864",
+ "id": "6c8538a0.f116f8",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2469.619140625,
- "y": 4681.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2476.4762573242188,
+ "y": 4644.332901000977,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "1462085a.8135a"
+ "4ab33b35.a84a54"
]
]
},
{
- "id": "1462085a.8135a",
+ "id": "4ab33b35.a84a54",
"type": "set",
"name": "set set payload data",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$l].value`' value=\"`$jsonContextPrefix.elements[$n].resource-value`\" />\n",
"comments": "",
- "x": 2666.119140625,
- "y": 4682.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2672.9762573242188,
+ "y": 4645.332901000977,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "5bd4041e.5eb064",
+ "id": "2bae3b0b.919654",
"type": "execute",
"name": "execute jsonStringToCtx",
- "xml": "<execute plugin=\"org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils\" method=\"jsonStringToCtx\">\n\t<parameter name=\"source\" value=\"nameGenResponse.response-payload\" />\n\t<parameter name=\"outputPath\" value=\"jsonContextPrefix\" />\n\t<parameter name=\"isEscaped\" value=\"false\" />\n\n",
+ "xml": "<execute plugin=\"org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils\" method=\"jsonStringToCtx\">\n\t<parameter name=\"source\" value=\"nameGenResponse.httpResponse\" />\n\t<parameter name=\"outputPath\" value=\"jsonContextPrefix\" />\n\t<parameter name=\"isEscaped\" value=\"false\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 1825.619140625,
- "y": 4366.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 1832.4762573242188,
+ "y": 4329.332901000977,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "d49e444f.57b07",
+ "id": "bd0c0aec.c12ba",
"type": "for",
"name": "for response elements",
"xml": "<for index='n' start='0' end='`$jsonContextPrefix.elements_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1818.619140625,
- "y": 4462.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 1825.4762573242188,
+ "y": 4425.332901000977,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "979f7afd.afba98"
+ "712165ae.c8b134"
]
]
},
{
- "id": "648836d6.70a21",
+ "id": "a8831bf.0add2e8",
"type": "execute",
"name": "slistringUtils - check value for $",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='contains' emitsOutcome='true' >\n <parameter name=\"source\" value=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$l].value`\" />\n <parameter name=\"target\" value=\"$\"/>\n \n",
"comments": "",
"outputs": 1,
- "x": 2360.619140625,
- "y": 4463.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2367.4762573242188,
+ "y": 4426.332901000977,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "7a9d7c8a.3c0bc4"
+ "b4bafecc.dbd1d8"
]
]
},
{
- "id": "7a9d7c8a.3c0bc4",
+ "id": "b4bafecc.dbd1d8",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2600.619140625,
- "y": 4462.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2607.4762573242188,
+ "y": 4425.332901000977,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "2051ec8a.8af274"
+ "37f99340.6371ac"
]
]
},
{
- "id": "999690dc.8426f8",
+ "id": "c6f61ac6.058e2",
"type": "execute",
"name": "split resource-resolution-data",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split'>\n <parameter name='ctx_memory_result_key' value='resource-resolution-split' />\n <parameter name='original_string' value='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$l].value`' />\n <parameter name='regex' value='\\$\\{' />\n",
"comments": "",
"outputs": 1,
- "x": 2267.619140625,
- "y": 4533.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2274.4762573242188,
+ "y": 4496.332901000977,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "5bc42c8c.88381c",
+ "id": "7b6510ed.263a5",
"type": "execute",
"name": "split resource-resolution-split-1",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split'>\n <parameter name='ctx_memory_result_key' value='s2' />\n <parameter name='original_string' value='`$resource-resolution-split[1]`' />\n <parameter name='regex' value='\\}' />\n",
"comments": "",
"outputs": 1,
- "x": 2282.619140625,
- "y": 4616.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2289.4762573242188,
+ "y": 4579.332901000977,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "2051ec8a.8af274",
+ "id": "37f99340.6371ac",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 2051.619140625,
- "y": 4533.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2058.4762573242188,
+ "y": 4496.332901000977,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "999690dc.8426f8",
- "5bc42c8c.88381c",
- "8ff2df62.ffbde"
+ "c6f61ac6.058e2",
+ "7b6510ed.263a5",
+ "c4d874bf.c84648"
]
]
},
{
- "id": "fe9fb952.03865",
+ "id": "37468c59.dd2414",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic='true'>",
"atomic": "true",
"comments": "",
"outputs": 1,
- "x": 1601.619140625,
- "y": 3834.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 1608.4762573242188,
+ "y": 3797.3329010009766,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "ed0277b1.5970a",
- "a3efff0f.aa4ec8",
- "8bbcc0bf.293ef8",
- "d5dd6ae4.c76cb8",
- "763cbc48.beee84",
- "452bff82.4ad42",
- "5bd4041e.5eb064",
- "9a62d212.fe282",
- "d49e444f.57b07",
- "a8bf6cef.175b98"
+ "73a75422.d8850c",
+ "97197bdb.a2cad8",
+ "46fb189c.966838",
+ "be439e05.fe7ff8",
+ "d8da45ad.01a8a",
+ "2bae3b0b.919654",
+ "6650d50f.f2a194",
+ "bd0c0aec.c12ba",
+ "a84918b5.b82848",
+ "99585b38.25a06"
]
]
},
{
- "id": "9a62d212.fe282",
+ "id": "6650d50f.f2a194",
"type": "set",
"name": "set status as DELETED",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.status`' value='DELETED' />",
"comments": "",
- "x": 1823.619140625,
- "y": 4416.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 1830.4762573242188,
+ "y": 4379.332901000977,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "411e99fd.a39438",
+ "id": "3908bfeb.e84f",
"type": "switchNode",
"name": "switch external-key",
"xml": "<switch test=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].name == 'external-key'`\">\n",
"comments": "",
"outputs": 1,
- "x": 2049.619140625,
- "y": 3907.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2056.4762573242188,
+ "y": 3870.3329010009766,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "73c6b2a8.a3b054"
+ "5a34ee8b.f9c61"
]
]
},
{
- "id": "73c6b2a8.a3b054",
+ "id": "5a34ee8b.f9c61",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2233.619140625,
- "y": 3907.761474609375,
- "z": "719b1fb6.3a5b9",
+ "x": 2240.4762573242188,
+ "y": 3870.3329010009766,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "9abfe611.4545c8"
+ "28d4f278.d4fa26"
]
]
},
{
- "id": "32827181.a6b956",
+ "id": "f841aff3.13a07",
"type": "switchNode",
"name": "switch capability-type. vnf",
"xml": "<switch test=\"`$ss.capability-type == 'vnf'`\">\n",
"comments": "",
"outputs": 1,
- "x": 365.2857360839844,
- "y": 338.4285659790039,
- "z": "719b1fb6.3a5b9",
+ "x": 372.1428527832031,
+ "y": 300.99999237060547,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "524e830f.6470c4"
+ "58dd98ce.eb99f"
]
]
},
{
- "id": "524e830f.6470c4",
+ "id": "58dd98ce.eb99f",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 568.7142944335938,
- "y": 337.71429443359375,
- "z": "719b1fb6.3a5b9",
+ "x": 575.5714111328125,
+ "y": 300.2857208251953,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "ef52847b.ff229"
+ "7b0e8ad8.f3802c"
]
]
},
{
- "id": "de00c7d5.b7368",
+ "id": "571f0673.b8518",
"type": "switchNode",
"name": "switch capability-type vf-module",
"xml": "<switch test=\"`$ss.capability-type == 'vf-module'`\">\n",
"comments": "",
"outputs": 1,
- "x": 494.61907958984375,
- "y": 3501.7619018554688,
- "z": "719b1fb6.3a5b9",
+ "x": 501.4761962890625,
+ "y": 3464.3333282470703,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "1ded1ea.e9121e1"
+ "48a38bbd.e8a77c"
]
]
},
{
- "id": "1ded1ea.e9121e1",
+ "id": "48a38bbd.e8a77c",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 713.6190795898438,
- "y": 3502.761962890625,
- "z": "719b1fb6.3a5b9",
+ "x": 720.4761962890625,
+ "y": 3465.3333892822266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "c14ba9b4.7c8ad8"
+ "750bfd10.899924"
]
]
},
{
- "id": "36603013.bbb4f8",
+ "id": "a6e4bc7d.20b678",
"type": "for",
"name": "for vnf-parameters data",
"xml": "<for index='l' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1606.66650390625,
- "y": 2624.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1613.5236206054688,
+ "y": 2586.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "a6ad8f3a.9c7f8"
+ "ffc03440.e917d"
]
]
},
{
- "id": "a6ad8f3a.9c7f8",
+ "id": "ffc03440.e917d",
"type": "execute",
"name": "slistringUtils - check value for $",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='contains' emitsOutcome='true' >\n <parameter name=\"source\" value=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$l].value`\" />\n <parameter name=\"target\" value=\"$\"/>\n \n",
"comments": "",
"outputs": 1,
- "x": 1732.3331298828125,
- "y": 2755.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1739.1902465820312,
+ "y": 2717.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "77a82966.ec0b48"
+ "1af41882.7a6b4f"
]
]
},
{
- "id": "77a82966.ec0b48",
+ "id": "1af41882.7a6b4f",
"type": "failure",
"name": "false",
"xml": "<outcome value='false'>\n",
"comments": "",
"outputs": 1,
- "x": 1994.3331298828125,
- "y": 2811.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 2001.1902465820312,
+ "y": 2773.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "f33d0266.cea3"
+ "fcd660c4.530c58"
]
]
},
{
- "id": "f33d0266.cea3",
+ "id": "fcd660c4.530c58",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 2210.3331298828125,
- "y": 2811.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 2217.1902465820312,
+ "y": 2773.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "bd9f5006.39331",
- "1847b82e.cbd13"
+ "236c01c7.bf3206",
+ "bd4596a.19984e8"
]
]
},
{
- "id": "bd9f5006.39331",
+ "id": "236c01c7.bf3206",
"type": "set",
"name": "set capability name",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$l].resource-resolution-data.capability-name`' value='INPUT' />",
"comments": "",
- "x": 2430.3331298828125,
- "y": 2749.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 2437.1902465820312,
+ "y": 2711.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "1847b82e.cbd13",
+ "id": "bd4596a.19984e8",
"type": "set",
"name": "set status SUCCESS",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$l].resource-resolution-data.status`' value='SUCCESS' />\n",
"comments": "",
- "x": 2440.3331298828125,
- "y": 2857.094970703125,
- "z": "719b1fb6.3a5b9",
+ "x": 2447.1902465820312,
+ "y": 2819.6663970947266,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "bc970fe5.a522f8",
+ "id": "4bd2a625.600b48",
"type": "switchNode",
"name": "switch capability action unassign",
"xml": "<switch test=\"`$ss.capability-action == 'unassign'`\">\n",
"comments": "",
"outputs": 1,
- "x": 822.8571166992188,
- "y": 428.5714416503906,
- "z": "719b1fb6.3a5b9",
+ "x": 829.7142333984375,
+ "y": 391.1428680419922,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "e1f81f5d.07ca4"
+ "f5867b52.e6b6c"
]
]
},
{
- "id": "e1f81f5d.07ca4",
+ "id": "f5867b52.e6b6c",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1108.5714111328125,
- "y": 427.1428527832031,
- "z": "719b1fb6.3a5b9",
+ "x": 1115.4285278320312,
+ "y": 389.7142791748047,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "c8ae8fb3.2b106"
+ "f5e94169.5fc978"
]
]
},
{
- "id": "ef52847b.ff229",
+ "id": "7b0e8ad8.f3802c",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 572.857177734375,
- "y": 402.857177734375,
- "z": "719b1fb6.3a5b9",
+ "x": 579.7142944335938,
+ "y": 365.42860412597656,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "bc970fe5.a522f8",
- "d4160d84.70bb48"
+ "4bd2a625.600b48",
+ "4312cb34.d1fec4"
]
]
},
{
- "id": "80902f6b.f3783",
+ "id": "acaab3ca.702c88",
"type": "for",
"name": "for vnf-parameters-data",
"xml": "<for index='i' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1047.2144775390625,
- "y": 1814.5953369140625,
- "z": "719b1fb6.3a5b9",
+ "x": 1054.0715942382812,
+ "y": 1777.166763305664,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "504c0e8f.4cc8a"
+ "ae04112f.bd2d08"
]
]
},
{
- "id": "504c0e8f.4cc8a",
+ "id": "ae04112f.bd2d08",
"type": "switchNode",
"name": "switch capability-name",
"xml": "<switch test='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.capability-name == $ss.capability-name`'>\n",
"comments": "",
"outputs": 1,
- "x": 1288.821533203125,
- "y": 1814.5953369140625,
- "z": "719b1fb6.3a5b9",
+ "x": 1295.6786499023438,
+ "y": 1777.166763305664,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "98b667d2.9e63f8"
+ "1e81a1ec.bd42f6"
]
]
},
{
- "id": "98b667d2.9e63f8",
+ "id": "1e81a1ec.bd42f6",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1469.535888671875,
- "y": 1814.5953369140625,
- "z": "719b1fb6.3a5b9",
+ "x": 1476.3930053710938,
+ "y": 1777.166763305664,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "6ed8d498.9723f4"
+ "4849f457.b71524"
]
]
},
{
- "id": "10288042.9afdc",
+ "id": "d951a688.ea8908",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1202.0001220703125,
- "y": 3631,
- "z": "719b1fb6.3a5b9",
+ "x": 1208.8572387695312,
+ "y": 3593.5714263916016,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "f26ae3f9.58a6a8"
+ "a3bde9b.3b85798"
]
]
},
{
- "id": "ae383e92.c64418",
+ "id": "90ab2ac1.82262",
"type": "switchNode",
"name": "switch capability action unassign",
"xml": "<switch test=\"`$ss.capability-action == 'unassign'`\">\n",
"comments": "",
"outputs": 1,
- "x": 960.9998779296875,
- "y": 3631,
- "z": "719b1fb6.3a5b9",
+ "x": 967.8569946289062,
+ "y": 3593.5714263916016,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "10288042.9afdc"
+ "d951a688.ea8908"
]
]
},
{
- "id": "c14ba9b4.7c8ad8",
+ "id": "750bfd10.899924",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 718,
- "y": 3568,
- "z": "719b1fb6.3a5b9",
+ "x": 724.8571166992188,
+ "y": 3530.5714263916016,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "ae383e92.c64418",
- "b1d4f02b.074b08"
+ "90ab2ac1.82262",
+ "876d4c7d.f86a88"
]
]
},
{
- "id": "b1d4f02b.074b08",
+ "id": "876d4c7d.f86a88",
"type": "switchNode",
"name": "switch capability action assign",
"xml": "<switch test=\"`$ss.capability-action == 'assign'`\">",
"comments": "",
"outputs": 1,
- "x": 937.9525146484375,
- "y": 5238.7626953125,
- "z": "719b1fb6.3a5b9",
+ "x": 944.8096313476562,
+ "y": 5201.334121704102,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "5f3175ef.b2e644"
+ "97b1b31a.f402b"
]
]
},
{
- "id": "5f3175ef.b2e644",
+ "id": "97b1b31a.f402b",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1166.9525146484375,
- "y": 5238.7626953125,
- "z": "719b1fb6.3a5b9",
+ "x": 1173.8096313476562,
+ "y": 5201.334121704102,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "7f8df3af.553754"
+ "bf89c636.30aac8"
]
]
},
{
- "id": "b52f5f26.c98fb",
+ "id": "c54c6f8e.b8ff58",
"type": "execute",
"name": "execute replace extra comma",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace'>\n <parameter name='outputPath' value='tmp.naming-data-payload' />\n <parameter name='source' value='`$tmp.naming-data-payload`' />\n <parameter name='target' value=',}' />\n <parameter name='replacement' value='}' />",
"comments": "",
"outputs": 1,
- "x": 1715.452392578125,
- "y": 5709.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 1722.3095092773438,
+ "y": 5671.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "21cc2c07.2e17cc",
+ "id": "b361600c.eb049",
"type": "for",
"name": "for vf-module-parameters",
"xml": "<for index='j' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 2033.702392578125,
- "y": 5516.7626953125,
- "z": "719b1fb6.3a5b9",
+ "x": 2040.5595092773438,
+ "y": 5479.334121704102,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "d6c21c77.670988"
+ "b5cdeaa7.6f11d"
]
]
},
{
- "id": "d6c21c77.670988",
+ "id": "b5cdeaa7.6f11d",
"type": "set",
"name": "set payload data",
- "xml": "<set>\n<parameter name=\"tmp.naming-data-payload\" value=\"`$tmp.naming-data-payload + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].name + '&quot;:' + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].value + '&quot;,'`\"/>",
+ "xml": "<set>\n<parameter name=\"tmp.naming-data-payload\" value=\"`$tmp.naming-data-payload + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].name + '&quot;:' + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].value + '&quot;,'`\"/>\n<parameter name=\"`tmp.gen-name[$tmp.gen-name_length].element[$j].name`\" value=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].name`\"/>\n<parameter name=\"`tmp.gen-name[$tmp.gen-name_length].element[$j].value`\" value=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].value`\"/>\n<parameter name=\"`tmp.gen-name[$tmp.gen-name_length].element_length`\" value='`$j + 1`' />",
"comments": "",
- "x": 2290.202392578125,
- "y": 5516.7626953125,
- "z": "719b1fb6.3a5b9",
+ "x": 2297.0595092773438,
+ "y": 5479.334121704102,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "b09f0c88.a8dd8",
+ "id": "8bb2899.7eabb78",
"type": "set",
"name": "set set payload data",
"xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + '{'`\" />",
"comments": "",
- "x": 2016.202392578125,
- "y": 5462.7626953125,
- "z": "719b1fb6.3a5b9",
+ "x": 2023.0595092773438,
+ "y": 5425.334121704102,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "16aca9a0.b085ce",
+ "id": "feb610d7.764ab",
"type": "set",
"name": "set payload data",
- "xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + '},'`\" />",
+ "xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + '},'`\" />\n<parameter name='tmp.gen-name_length' value='`$tmp.gen-name_length + 1`' />",
"comments": "",
- "x": 2022.202392578125,
- "y": 5578.7626953125,
- "z": "719b1fb6.3a5b9",
+ "x": 2029.0595092773438,
+ "y": 5541.334121704102,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "1fd7b0ea.d78def",
+ "id": "aba737c8.b673a",
"type": "set",
"name": "set close payload list",
"xml": "<set>\n<parameter name='tmp.naming-data-payload' value=\"`$tmp.naming-data-payload + ']}'`\" />",
"comments": "",
- "x": 1685.452392578125,
- "y": 5658.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 1692.3095092773438,
+ "y": 5620.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "382244f1.84c314",
+ "id": "e94ef6dd.a37908",
"type": "execute",
"name": "execute replace extra comma",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace'>\n <parameter name='outputPath' value='tmp.naming-data-payload' />\n <parameter name='source' value='`$tmp.naming-data-payload`' />\n <parameter name='target' value=',]' />\n <parameter name='replacement' value=']' />",
"comments": "",
"outputs": 1,
- "x": 1718.452392578125,
- "y": 5763.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 1725.3095092773438,
+ "y": 5725.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "b1e358e4.0f1af8",
- "type": "execute",
- "name": "execute NameGenerationNode-assign",
- "xml": "<execute plugin='org.openecomp.sdnc.prov.namegeneration.node.AssignNameNode' method='process'>\n <parameter name='payload' value='`$tmp.naming-data-payload`' />\n <parameter name=\"prifix\" value=\"nameGenResponse\" />\n",
- "comments": "",
- "outputs": 1,
- "x": 1744.452392578125,
- "y": 5820.0130615234375,
- "z": "719b1fb6.3a5b9",
- "wires": [
- [
- "1e42490a.0702a7",
- "1ec1c7ac.f1fe98"
- ]
- ]
- },
- {
- "id": "1e42490a.0702a7",
+ "id": "1ec3d3c3.85586c",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 2019.452392578125,
- "y": 5770.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2028.3095703125,
+ "y": 5739.58447265625,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "1dc6c6ec.4b2119"
+ "21b0f329.fc401c"
]
]
},
{
- "id": "c05d5782.207da8",
+ "id": "7a611dc7.f16d14",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"Error from NameGenerationNode Assign\" />\n",
"comments": "",
- "x": 2384.452392578125,
- "y": 5870.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2393.3095703125,
+ "y": 5839.58447265625,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "1ec1c7ac.f1fe98",
+ "id": "80386656.f0d7d",
"type": "failure",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 2024.452392578125,
- "y": 5869.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2033.3095703125,
+ "y": 5838.58447265625,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "1dc6c6ec.4b2119"
+ "21b0f329.fc401c"
]
]
},
{
- "id": "1dc6c6ec.4b2119",
+ "id": "21b0f329.fc401c",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 2182.452392578125,
- "y": 5814.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2191.3095703125,
+ "y": 5783.58447265625,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "c05d5782.207da8",
- "e913f4eb.f584"
+ "7a611dc7.f16d14",
+ "399dfaf7.a00f2e"
]
]
},
{
- "id": "e913f4eb.f584",
+ "id": "399dfaf7.a00f2e",
"type": "set",
"name": "set status as FAILED",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.status`' value='FAILED' />",
"comments": "",
- "x": 2398.452392578125,
- "y": 5761.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2407.3095703125,
+ "y": 5730.58447265625,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "3d332c56.43f43c",
+ "id": "8744b72d.e0422",
"type": "for",
"name": "for vf-module-parameters",
"xml": "<for index='l' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1996.452392578125,
- "y": 6353.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2003.3095092773438,
+ "y": 6315.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "5f0db49f.fd8454"
+ "26376a44.3bf3e6"
]
]
},
{
- "id": "d9f8a4b0.d2e5c",
+ "id": "c8297614.5665c8",
"type": "switchNode",
"name": "switch capability-name",
"xml": "<switch test='`$s2[0] == $jsonContextPrefix.elements[$n].resource-name`'>\n",
"comments": "",
"outputs": 1,
- "x": 2167.452392578125,
- "y": 6511.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2174.3095092773438,
+ "y": 6473.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "f6bd7605.4d5f48"
+ "5c1866b1.7ab59"
]
]
},
{
- "id": "f6bd7605.4d5f48",
+ "id": "5c1866b1.7ab59",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2371.452392578125,
- "y": 6509.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2378.3095092773438,
+ "y": 6471.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "74b43ff2.601cb"
+ "8068dba1.b90f38"
]
]
},
{
- "id": "74b43ff2.601cb",
+ "id": "8068dba1.b90f38",
"type": "set",
"name": "set set payload data",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$l].value`' value=\"`$jsonContextPrefix.elements[$n].resource-value`\" />\n",
"comments": "",
- "x": 2565.952392578125,
- "y": 6442.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2572.8095092773438,
+ "y": 6404.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "8f868b5c.16e278",
+ "id": "cbc78ec6.7ff248",
"type": "execute",
"name": "execute jsonStringToCtx",
- "xml": "<execute plugin=\"org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils\" method=\"jsonStringToCtx\">\n\t<parameter name=\"source\" value=\"nameGenResponse.response-payload\" />\n\t<parameter name=\"outputPath\" value=\"jsonContextPrefix\" />\n\t<parameter name=\"isEscaped\" value=\"false\" />\n\n",
+ "xml": "<execute plugin=\"org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils\" method=\"jsonStringToCtx\">\n\t<parameter name=\"source\" value=\"nameGenResponse.httpResponse\" />\n\t<parameter name=\"outputPath\" value=\"jsonContextPrefix\" />\n\t<parameter name=\"isEscaped\" value=\"false\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 1699.452392578125,
- "y": 5876.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 1706.3095092773438,
+ "y": 5838.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "20e95425.2ec68c",
+ "id": "1e5d91b7.f1cac6",
"type": "for",
"name": "for response elements",
"xml": "<for index='n' start='0' end='`$jsonContextPrefix.elements_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1728.452392578125,
- "y": 6354.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 1735.3095092773438,
+ "y": 6316.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "3d332c56.43f43c"
+ "8744b72d.e0422"
]
]
},
{
- "id": "5f0db49f.fd8454",
+ "id": "26376a44.3bf3e6",
"type": "execute",
"name": "slistringUtils - check value for $",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='contains' emitsOutcome='true' >\n <parameter name=\"source\" value=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$l].value`\" />\n <parameter name=\"target\" value=\"$\"/>\n \n",
"comments": "",
"outputs": 1,
- "x": 2280.452392578125,
- "y": 6357.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2287.3095092773438,
+ "y": 6319.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "e81d08ce.9ec57"
+ "6638dc1c.c0f774"
]
]
},
{
- "id": "e81d08ce.9ec57",
+ "id": "6638dc1c.c0f774",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2508.452392578125,
- "y": 6354.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2515.3095092773438,
+ "y": 6316.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "4dc60b03.30474c"
+ "49c6c4cb.ae35f4"
]
]
},
{
- "id": "d9a4aa95.7b85",
+ "id": "614640d1.2410b",
"type": "execute",
"name": "split resource-resolution-data",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split'>\n <parameter name='ctx_memory_result_key' value='resource-resolution-split' />\n <parameter name='original_string' value='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$l].value`' />\n <parameter name='regex' value='\\$\\{' />\n",
"comments": "",
"outputs": 1,
- "x": 2175.452392578125,
- "y": 6407.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2182.3095092773438,
+ "y": 6369.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "7ebcca07.69da94",
+ "id": "f159cc8b.de17d",
"type": "execute",
"name": "split resource-resolution-split-1",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split'>\n <parameter name='ctx_memory_result_key' value='s2' />\n <parameter name='original_string' value='`$resource-resolution-split[1]`' />\n <parameter name='regex' value='\\}' />\n",
"comments": "",
"outputs": 1,
- "x": 2188.452392578125,
- "y": 6466.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2195.3095092773438,
+ "y": 6428.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[]
]
},
{
- "id": "4dc60b03.30474c",
+ "id": "49c6c4cb.ae35f4",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1935.452392578125,
- "y": 6433.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 1942.3095092773438,
+ "y": 6395.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "d9f8a4b0.d2e5c",
- "d9a4aa95.7b85",
- "7ebcca07.69da94"
+ "c8297614.5665c8",
+ "614640d1.2410b",
+ "f159cc8b.de17d"
]
]
},
{
- "id": "d4e4d3cb.8e365",
+ "id": "80097c84.1bbc38",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic='true'>",
"atomic": "true",
"comments": "",
"outputs": 1,
- "x": 1809.202392578125,
- "y": 5465.7626953125,
- "z": "719b1fb6.3a5b9",
+ "x": 1816.0595092773438,
+ "y": 5428.334121704102,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "21cc2c07.2e17cc",
- "b09f0c88.a8dd8",
- "16aca9a0.b085ce"
+ "b361600c.eb049",
+ "8bb2899.7eabb78",
+ "feb610d7.764ab"
]
]
},
{
- "id": "c761a7c.6b8ed58",
+ "id": "d085846f.259da",
"type": "set",
"name": "set status as SUCCESS",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.status`' value='SUCCESS' />",
"comments": "",
- "x": 1701.452392578125,
- "y": 5928.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 1708.3095092773438,
+ "y": 5890.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "64f6b871.04fb28",
+ "id": "2d4ee971.9f5306",
"type": "for",
"name": "for vnf parameters data",
"xml": "<for index='l' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1723.452392578125,
- "y": 6576.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 1730.3095092773438,
+ "y": 6538.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "74477622.de12d"
+ "968d7f58.752fa8"
]
]
},
{
- "id": "74477622.de12d",
+ "id": "968d7f58.752fa8",
"type": "execute",
"name": "slistringUtils - check value for $",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='contains' emitsOutcome='true' >\n <parameter name=\"source\" value=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$l].value`\" />\n <parameter name=\"target\" value=\"$\"/>\n \n",
"comments": "",
"outputs": 1,
- "x": 2029.452392578125,
- "y": 6574.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2036.3095092773438,
+ "y": 6536.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "59f6f125.780478"
+ "b316390f.c223e"
]
]
},
{
- "id": "59f6f125.780478",
+ "id": "b316390f.c223e",
"type": "failure",
"name": "false",
"xml": "<outcome value='false'>\n",
"comments": "",
"outputs": 1,
- "x": 2267.452392578125,
- "y": 6574.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2274.3095092773438,
+ "y": 6536.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "f3d21584.7ce7b8"
+ "523d1dc3.a4cfdc"
]
]
},
{
- "id": "f3d21584.7ce7b8",
+ "id": "523d1dc3.a4cfdc",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 2429.452392578125,
- "y": 6568.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2436.3095092773438,
+ "y": 6530.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "2c8c0702.854ee8",
- "fa294e63.602d08"
+ "196036c5.88ba19",
+ "a33c55dc.d6268"
]
]
},
{
- "id": "2c8c0702.854ee8",
+ "id": "196036c5.88ba19",
"type": "set",
"name": "set capability name",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$l].resource-resolution-data.capability-name`' value='INPUT' />\n",
"comments": "",
- "x": 2653.452392578125,
- "y": 6534.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2660.3095092773438,
+ "y": 6496.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "fa294e63.602d08",
+ "id": "a33c55dc.d6268",
"type": "set",
"name": "set status SUCCESS",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$l].resource-resolution-data.status`' value='SUCCESS' />\n\t",
"comments": "",
- "x": 2641.452392578125,
- "y": 6634.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2648.3095092773438,
+ "y": 6596.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "4bd004e3.7dd99c",
+ "id": "af0954c0.0ed2a8",
"type": "for",
"name": "for vnf-parameters data",
"xml": "<for index='cn' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1711.452392578125,
- "y": 6034.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 1718.3095092773438,
+ "y": 5996.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "85c7441c.53c08"
+ "fcdfe07c.36982"
]
]
},
{
- "id": "85c7441c.53c08",
+ "id": "fcdfe07c.36982",
"type": "switchNode",
"name": "switch param[] name",
"xml": "<switch test=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].name == 'vnfc-name'`\">\n",
"comments": "",
"outputs": 1,
- "x": 1964.952392578125,
- "y": 6035.013427734375,
- "z": "719b1fb6.3a5b9",
+ "x": 1971.8095092773438,
+ "y": 5997.584854125977,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "b4e69f12.2126f8"
+ "ecb5c713.928a5"
]
]
},
{
- "id": "b4e69f12.2126f8",
+ "id": "ecb5c713.928a5",
"type": "success",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2157.952392578125,
- "y": 6035.5133056640625,
- "z": "719b1fb6.3a5b9",
+ "x": 2164.8095092773438,
+ "y": 5998.084732055664,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "1fdd7e1e.c75b82"
+ "a271047.93a13f8"
]
]
},
{
- "id": "1fdd7e1e.c75b82",
+ "id": "a271047.93a13f8",
"type": "for",
"name": "for j in resource key",
"xml": "<for index='j' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1799.452392578125,
- "y": 6150.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 1806.3095092773438,
+ "y": 6112.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "e34d6504.04ef68"
+ "a54bbb54.f3ff88"
]
]
},
{
- "id": "e34d6504.04ef68",
+ "id": "a54bbb54.f3ff88",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 2071.452392578125,
- "y": 6146.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2078.3095092773438,
+ "y": 6108.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "8427815.e49c28",
- "7720c796.cf51d",
- "14b77c36.339774",
- "db75ea42.1350d",
- "6061ffc.9494f",
- "15f23c59.7c19e4",
- "e7c83d46.a2ef48"
+ "7a50c097.1fd508",
+ "bae1a795.c95818",
+ "6cb03d6a.b426e4",
+ "fdef5f45.af46b8",
+ "d977a0bb.d25038",
+ "d4543380.8a8648",
+ "80d478e2.ca4f3"
]
]
},
{
- "id": "7720c796.cf51d",
+ "id": "bae1a795.c95818",
"type": "switchNode",
"name": "switch model-invariant-uuid",
"xml": "<switch test=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key[$j].name == 'model-invariant-uuid'`\">\n\n",
"comments": "",
"outputs": 1,
- "x": 2509.452392578125,
- "y": 6022.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2516.3095092773438,
+ "y": 5984.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "6857d48.2b9c62c"
+ "e21bbc33.3bd9b8"
]
]
},
{
- "id": "14b77c36.339774",
+ "id": "6cb03d6a.b426e4",
"type": "switchNode",
"name": "switch model-customization-uuid",
"xml": "<switch test=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key[$j].name == 'model-customization-uuid'`\">\n\n",
"comments": "",
"outputs": 1,
- "x": 2477.452392578125,
- "y": 6080.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2484.3095092773438,
+ "y": 6042.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "36c572f8.11887e"
+ "26752abf.e0f87e"
]
]
},
{
- "id": "db75ea42.1350d",
+ "id": "fdef5f45.af46b8",
"type": "switchNode",
"name": "switch model-uuid",
"xml": "<switch test=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key[$j].name == 'model-uuid'`\">\n\n",
"comments": "",
"outputs": 1,
- "x": 2475.452392578125,
- "y": 6142.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2482.3095092773438,
+ "y": 6104.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "992d2ec6.0f6bf8"
+ "99545f4f.9552"
]
]
},
{
- "id": "6061ffc.9494f",
+ "id": "d977a0bb.d25038",
"type": "switchNode",
"name": "switch model-version",
"xml": "<switch test=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key[$j].name == 'model-version'`\">\n",
"comments": "",
"outputs": 1,
- "x": 2483.452392578125,
- "y": 6204.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2490.3095092773438,
+ "y": 6166.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "ddbe5eba.fbf8d8"
+ "d332c105.d01b6"
]
]
},
{
- "id": "8427815.e49c28",
+ "id": "7a50c097.1fd508",
"type": "switchNode",
"name": "switch vm-type",
"xml": "<switch test=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key[$j].name == 'vm-type'`\">\n\n",
"comments": "",
"outputs": 1,
- "x": 2499.452392578125,
- "y": 5950.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2506.3095092773438,
+ "y": 5912.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "481f3b2.962dd44"
+ "343730f6.0bde"
]
]
},
{
- "id": "481f3b2.962dd44",
+ "id": "343730f6.0bde",
"type": "success",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2703.452392578125,
- "y": 5946.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2710.3095092773438,
+ "y": 5908.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "9d2fa840.0363b"
+ "10dcd678.f75eb2"
]
]
},
{
- "id": "6857d48.2b9c62c",
+ "id": "e21bbc33.3bd9b8",
"type": "success",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2703.452392578125,
- "y": 6020.2630615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2710.3095092773438,
+ "y": 5982.834487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "1fb07fdb.0d632"
+ "ba46d15f.84fe98"
]
]
},
{
- "id": "36c572f8.11887e",
+ "id": "26752abf.e0f87e",
"type": "success",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2709.452392578125,
- "y": 6076.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2716.3095092773438,
+ "y": 6038.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "a0d68506.3f9068"
+ "ec7f1ff2.18d6b8"
]
]
},
{
- "id": "992d2ec6.0f6bf8",
+ "id": "99545f4f.9552",
"type": "success",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2713.452392578125,
- "y": 6134.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2720.3095092773438,
+ "y": 6096.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "5459f399.0fb614"
+ "9cb30ad2.947f6"
]
]
},
{
- "id": "ddbe5eba.fbf8d8",
+ "id": "d332c105.d01b6",
"type": "success",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2719.452392578125,
- "y": 6200.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2726.3095092773438,
+ "y": 6162.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "29fd0e8b.8c7952"
+ "78957203.1f8534"
]
]
},
{
- "id": "9d2fa840.0363b",
+ "id": "10dcd678.f75eb2",
"type": "set",
"name": "set vm-type",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[0].vm-type`' value='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key[$j].value`' />\n",
"comments": "",
- "x": 2867.452392578125,
- "y": 5948.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2874.3095092773438,
+ "y": 5910.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "1fb07fdb.0d632",
+ "id": "ba46d15f.84fe98",
"type": "set",
"name": "set model-invariant-uuid",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[0].onap-model-information.model-invariant-uuid`' value='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key[$j].value`' />\n",
"comments": "",
- "x": 2913.452392578125,
- "y": 6014.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2920.3095092773438,
+ "y": 5976.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "a0d68506.3f9068",
+ "id": "ec7f1ff2.18d6b8",
"type": "set",
"name": "set model-customization-uuid",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[0].onap-model-information.model-customization-uuid`' value='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key[$j].value`' />\n",
"comments": "",
- "x": 2957.452392578125,
- "y": 6078.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2964.3095092773438,
+ "y": 6040.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "5459f399.0fb614",
+ "id": "9cb30ad2.947f6",
"type": "set",
"name": "set model-uuid",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[0].onap-model-information.model-uuid`' value='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key[$j].value`' />\n",
"comments": "",
- "x": 2933.452392578125,
- "y": 6132.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2940.3095092773438,
+ "y": 6094.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "29fd0e8b.8c7952",
+ "id": "78957203.1f8534",
"type": "set",
"name": "set model-version",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[0].onap-model-information.model-version`' value='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key[j].value`' />\n",
"comments": "",
- "x": 2879.452392578125,
- "y": 6198.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2886.3095092773438,
+ "y": 6160.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "68fa786b.6c6688",
+ "id": "72d6e55e.c52994",
"type": "set",
"name": "set model-name",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[0].onap-model-information.model-name`' value='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key[$j].value`' />\n",
"comments": "",
- "x": 2885.452392578125,
- "y": 6254.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2892.3095092773438,
+ "y": 6216.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "caf48f2a.9458a",
+ "id": "f9bda76a.6618c8",
"type": "set",
"name": "set vnfc-name",
"xml": "<set>\n<parameter name='`service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-assignments.vms.vm[0].vm-names.vnfc-names[0].vnfc-name`' value='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key[$j].value`' />\n",
"comments": "",
- "x": 2903.452392578125,
- "y": 6310.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2910.3095092773438,
+ "y": 6272.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "15f23c59.7c19e4",
+ "id": "d4543380.8a8648",
"type": "switchNode",
"name": "switch model-name",
"xml": "<switch test=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key[$j].name == 'model-name'`\">\n",
"comments": "",
"outputs": 1,
- "x": 2483.452392578125,
- "y": 6256.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2490.3095092773438,
+ "y": 6218.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "8525cf9e.edea6"
+ "ebf87fd3.da0e28"
]
]
},
{
- "id": "e7c83d46.a2ef48",
+ "id": "80d478e2.ca4f3",
"type": "switchNode",
"name": "switch vnfc-name",
"xml": "<switch test=\"`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$cn].resource-resolution-data.resource-key[$j].name == 'vnfc-name'`\">\n",
"comments": "",
"outputs": 1,
- "x": 2481.452392578125,
- "y": 6310.0130615234375,
- "z": "719b1fb6.3a5b9",
+ "x": 2488.3095092773438,
+ "y": 6272.584487915039,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "ef06dde5.e03b88"
+ "e0094cf6.191bc"
]
]
},
{
- "id": "8525cf9e.edea6",
+ "id": "ebf87fd3.da0e28",
"type": "success",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2717.452392578125,
- "y": 6254.013061523437,
- "z": "719b1fb6.3a5b9",
+ "x": 2724.3095092773438,
+ "y": 6216.584487915038,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "68fa786b.6c6688"
+ "72d6e55e.c52994"
]
]
},
{
- "id": "ef06dde5.e03b88",
+ "id": "e0094cf6.191bc",
"type": "success",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2711.452392578125,
- "y": 6308.013061523437,
- "z": "719b1fb6.3a5b9",
+ "x": 2718.3095092773438,
+ "y": 6270.584487915038,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "caf48f2a.9458a"
+ "f9bda76a.6618c8"
]
]
},
{
- "id": "48f13d71.542c54",
+ "id": "c88ce4fa.2e3558",
"type": "for",
"name": "for vnf-parameters-data",
"xml": "<for index='i' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1252,
- "y": 5412.000244140625,
- "z": "719b1fb6.3a5b9",
+ "x": 1258.8571166992188,
+ "y": 5374.571670532227,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "5e336da6.0d601c"
+ "5a20be5b.b3a028"
]
]
},
{
- "id": "5e336da6.0d601c",
+ "id": "5a20be5b.b3a028",
"type": "switchNode",
"name": "switch capability-name",
"xml": "<switch test='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.capability-name == $ss.capability-name`'>\n",
"comments": "",
"outputs": 1,
- "x": 1532,
- "y": 5412.000244140625,
- "z": "719b1fb6.3a5b9",
+ "x": 1538.8571166992188,
+ "y": 5374.571670532227,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "9ea4a345.b9cf7"
+ "deb0eb20.bf079"
]
]
},
{
- "id": "9ea4a345.b9cf7",
+ "id": "deb0eb20.bf079",
"type": "not-found",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1741.0001220703125,
- "y": 5412.000244140625,
- "z": "719b1fb6.3a5b9",
+ "x": 1747.8572387695312,
+ "y": 5374.571670532227,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "d4e4d3cb.8e365"
+ "80097c84.1bbc38"
]
]
},
{
- "id": "6b713cfb.723974",
+ "id": "96d8122d.bb415",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic='true'>",
"atomic": "true",
"comments": "",
"outputs": 1,
- "x": 826.25,
- "y": 1755,
- "z": "719b1fb6.3a5b9",
+ "x": 833.1071166992188,
+ "y": 1717.5714263916016,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "80902f6b.f3783",
- "84fcdd32.ae8a78",
- "a887b563.1d77e"
+ "acaab3ca.702c88",
+ "6764646d.7a6754",
+ "e7afeea8.32592"
]
]
},
{
- "id": "84fcdd32.ae8a78",
+ "id": "6764646d.7a6754",
"type": "set",
"name": "set payload data",
- "xml": "<set>\n<parameter name='tmp.naming-data-payload' value='' />",
+ "xml": "<set>\n\t<parameter name='tmp.naming-data-payload' value='{&quot;elements&quot;:[' />\n\t<parameter name='tmp.gen-name_length' value='0' />",
"comments": "",
- "x": 1034,
- "y": 1756,
- "z": "719b1fb6.3a5b9",
+ "x": 1040.8571166992188,
+ "y": 1718.5714263916016,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "a887b563.1d77e",
+ "id": "e7afeea8.32592",
"type": "switchNode",
"name": "switch tmp.naming-data-payload is null",
"xml": "<switch test=\"`$tmp.naming-data-payload == ''`\">\n",
"comments": "",
"outputs": 1,
- "x": 1082,
- "y": 2035,
- "z": "719b1fb6.3a5b9",
+ "x": 1088.8571166992188,
+ "y": 1997.5714263916016,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "a826576f.08cdb8"
+ "b86e6a12.7ee33"
]
]
},
{
- "id": "a826576f.08cdb8",
+ "id": "b86e6a12.7ee33",
"type": "not-found",
"name": "false",
"xml": "<outcome value='false'>\n",
"comments": "",
"outputs": 1,
- "x": 1319,
- "y": 2036,
- "z": "719b1fb6.3a5b9",
+ "x": 1325.8571166992188,
+ "y": 1998.5714263916016,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "af5562cb.12735"
+ "6e3664a9.34079c"
]
]
},
{
- "id": "af5562cb.12735",
+ "id": "6e3664a9.34079c",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic='true'>",
"atomic": "true",
"comments": "",
"outputs": 1,
- "x": 1357,
- "y": 2094,
- "z": "719b1fb6.3a5b9",
+ "x": 1363.8571166992188,
+ "y": 2056.5714263916016,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "6a94f7b6.2e3e3",
- "27e20f71.6cc548",
- "9ffd6dac.5925a",
- "18ddf882.11fd17",
- "a0734951.e43bb8",
- "c0cd44d1.7422",
- "9976393.8117548",
- "36603013.bbb4f8"
+ "88f11c7a.f31688",
+ "fff738e5.4d0ce",
+ "f398ae72.bb9338",
+ "6d5e56ed.17d75",
+ "a0bc5db0.876ac8",
+ "a133146c.f8d1c",
+ "a6e4bc7d.20b678",
+ "93dc5615.04a418"
]
]
},
{
- "id": "7f8df3af.553754",
+ "id": "bf89c636.30aac8",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic='true'>",
"atomic": "true",
"comments": "",
"outputs": 1,
- "x": 1003,
- "y": 5345,
- "z": "719b1fb6.3a5b9",
+ "x": 1009.8571166992188,
+ "y": 5307.571426391602,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "9bc5841e.944e18",
- "48f13d71.542c54",
- "4e9878a6.bcb88"
+ "86e86da4.4fe67",
+ "c88ce4fa.2e3558",
+ "b36f7e94.174be"
]
]
},
{
- "id": "9bc5841e.944e18",
+ "id": "86e86da4.4fe67",
"type": "set",
"name": "set set payload data",
- "xml": "<set>\n<parameter name='tmp.naming-data-payload' value='' />",
+ "xml": "<set>\n\t<parameter name='tmp.naming-data-payload' value='{&quot;elements&quot;:[' />\n\t<parameter name='tmp.gen-name_length' value='0' />",
"comments": "",
- "x": 1240,
- "y": 5344,
- "z": "719b1fb6.3a5b9",
+ "x": 1246.8571166992188,
+ "y": 5306.571426391602,
+ "z": "b88526e.24a7ad8",
"wires": []
},
{
- "id": "4e9878a6.bcb88",
+ "id": "b36f7e94.174be",
"type": "switchNode",
"name": "switch tmp.naming-data-payload is null",
"xml": "<switch test=\"`$tmp.naming-data-payload == ''`\">\n",
"comments": "",
"outputs": 1,
- "x": 1282.2500305175781,
- "y": 5534.5001220703125,
- "z": "719b1fb6.3a5b9",
+ "x": 1289.1071472167969,
+ "y": 5497.071548461914,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "c1f0c66b.befbd"
+ "1f8cfbc.8ebb904"
]
]
},
{
- "id": "c1f0c66b.befbd",
+ "id": "1f8cfbc.8ebb904",
"type": "not-found",
"name": "false",
"xml": "<outcome value='false'>\n",
"comments": "",
"outputs": 1,
- "x": 1516.0000610351562,
- "y": 5534.2498779296875,
- "z": "719b1fb6.3a5b9",
+ "x": 1522.857177734375,
+ "y": 5496.821304321289,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "c6b57b94.c8c07"
+ "d5e5468.2a80438"
]
]
},
{
- "id": "c6b57b94.c8c07",
+ "id": "d5e5468.2a80438",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic='true'>",
"atomic": "true",
"comments": "",
"outputs": 1,
- "x": 1503.7500610351562,
- "y": 5611.500244140625,
- "z": "719b1fb6.3a5b9",
+ "x": 1510.607177734375,
+ "y": 5574.071670532227,
+ "z": "b88526e.24a7ad8",
"wires": [
[
- "1fd7b0ea.d78def",
- "b52f5f26.c98fb",
- "382244f1.84c314",
- "b1e358e4.0f1af8",
- "8f868b5c.16e278",
- "c761a7c.6b8ed58",
- "4bd004e3.7dd99c",
- "20e95425.2ec68c",
- "64f6b871.04fb28"
+ "aba737c8.b673a",
+ "c54c6f8e.b8ff58",
+ "e94ef6dd.a37908",
+ "cbc78ec6.7ff248",
+ "d085846f.259da",
+ "af0954c0.0ed2a8",
+ "1e5d91b7.f1cac6",
+ "2d4ee971.9f5306",
+ "d6d7c682.438ef8"
]
]
+ },
+ {
+ "id": "2a352877.19cd9",
+ "type": "execute",
+ "name": "execute readProperties",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/generic-resource-api-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 375,
+ "y": 176,
+ "z": "b88526e.24a7ad8",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "d6d7c682.438ef8",
+ "type": "execute",
+ "name": "execute RestApiCallNode - POST gen-name",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' > \n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.naming.gen-name.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.naming.gen-name.url + $prop.restapi.naming.gen-name.service`' />\n <parameter name='restapiUser' value='`$prop.naming.gen-name.user`' />\n <parameter name='restapiPassword' value='`$prop.naming.gen-name.pwd`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name=\"responsePrefix\" value=\"nameGenResponse\" />\n\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1771,
+ "y": 5787,
+ "z": "b88526e.24a7ad8",
+ "wires": [
+ [
+ "1ec3d3c3.85586c",
+ "80386656.f0d7d"
+ ]
+ ]
+ },
+ {
+ "id": "93dc5615.04a418",
+ "type": "execute",
+ "name": "execute RestApiCallNode - POST gen-name",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' > \n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.naming.gen-name.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.naming.gen-name.url + $prop.restapi.naming.gen-name.service`' />\n <parameter name='restapiUser' value='`$prop.naming.gen-name.user`' />\n <parameter name='restapiPassword' value='`$prop.naming.gen-name.pwd`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name=\"responsePrefix\" value=\"nameGenResponse\" />\n\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1674,
+ "y": 2229,
+ "z": "b88526e.24a7ad8",
+ "wires": [
+ [
+ "7136f5d4.61b024",
+ "ef775b29.4a7b"
+ ]
+ ]
+ },
+ {
+ "id": "99585b38.25a06",
+ "type": "execute",
+ "name": "execute RestApiCallNode - DELETE gen-name",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' > \n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.naming.gen-name.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.naming.gen-name.url + $prop.restapi.naming.gen-name.service`' />\n <parameter name='restapiUser' value='`$prop.naming.gen-name.user`' />\n <parameter name='restapiPassword' value='`$prop.naming.gen-name.pwd`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='DELETE' />\n <parameter name=\"responsePrefix\" value=\"nameGenResponse\" />\n\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1891,
+ "y": 4194,
+ "z": "b88526e.24a7ad8",
+ "wires": [
+ [
+ "e6db3fc2.418c7",
+ "add1de2.24bbda"
+ ]
+ ]
+ },
+ {
+ "id": "f9afd12e.2d3128",
+ "type": "execute",
+ "name": "execute RestApiCallNode - DELETE gen-name",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' > \n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.naming.gen-name.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.naming.gen-name.url + $prop.restapi.naming.gen-name.service`' />\n <parameter name='restapiUser' value='`$prop.naming.gen-name.user`' />\n <parameter name='restapiPassword' value='`$prop.naming.gen-name.pwd`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='DELETE' />\n <parameter name=\"responsePrefix\" value=\"nameGenResponse\" />\n\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1784,
+ "y": 979,
+ "z": "b88526e.24a7ad8",
+ "wires": [
+ [
+ "8af1d548.36ba08",
+ "6b5d2c36.36d07c"
+ ]
+ ]
+ },
+ {
+ "id": "63a7432d.46f304",
+ "type": "comment",
+ "name": "For Generate Name DG Capability ",
+ "info": "Support Bulk assign and single delete\nAlso calls Naming gen mS for assign/un-assign\n\nAdded by Ajay Singh(as396y)",
+ "comments": "",
+ "x": 838,
+ "y": 106,
+ "z": "b88526e.24a7ad8",
+ "wires": []
}
] \ No newline at end of file
diff --git a/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-activate.json b/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-activate.json
index 47601af5..80b22323 100644
--- a/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-activate.json
+++ b/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-activate.json
@@ -1,20 +1,20 @@
[
{
- "id": "cbe4a9ee.16a0f8",
+ "id": "f1032bbd.b31d28",
"type": "dgstart",
"name": "DGSTART",
"outputs": 1,
- "x": 129.00390625,
- "y": 47.00390625,
- "z": "886e5ee7.da286",
+ "x": 85,
+ "y": 38,
+ "z": "cbb28df7.1359",
"wires": [
[
- "e13e73c3.adb19"
+ "ded6a886.414a98"
]
]
},
{
- "id": "e13e73c3.adb19",
+ "id": "ded6a886.414a98",
"type": "service-logic",
"name": "GENERIC-RESOURCE-API ${project.version}",
"module": "GENERIC-RESOURCE-API",
@@ -22,2872 +22,2904 @@
"comments": "",
"xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='GENERIC-RESOURCE-API' version='${project.version}'>",
"outputs": 1,
- "x": 341.00391006469727,
- "y": 119.0039234161377,
- "z": "886e5ee7.da286",
+ "x": 297.00000381469727,
+ "y": 110.0000171661377,
+ "z": "cbb28df7.1359",
"wires": [
[
- "5fa2576a.526658"
+ "a2425e96.87088"
]
]
},
{
- "id": "5fa2576a.526658",
+ "id": "a2425e96.87088",
"type": "method",
"name": "sotn-attachment-topology-operation-activate",
"xml": "<method rpc='sotn-attachment-topology-operation-activate' mode='sync'>\n",
"comments": "",
"outputs": 1,
- "x": 329.0040283203125,
- "y": 207.00390625,
- "z": "886e5ee7.da286",
+ "x": 285.0001220703125,
+ "y": 198,
+ "z": "cbb28df7.1359",
"wires": [
[
- "91f5fd5b.cb45c"
+ "e7f36c41.5e57f"
]
]
},
{
- "id": "91f5fd5b.cb45c",
+ "id": "e7f36c41.5e57f",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 345.0040283203125,
- "y": 762.0041508674622,
- "z": "886e5ee7.da286",
+ "x": 301.0001220703125,
+ "y": 753.0002446174622,
+ "z": "cbb28df7.1359",
"wires": [
[
- "f796ddaa.da23c",
- "d7cfeb18.ac7528",
- "b6393afd.3cacd8",
- "81c5733e.5f25d",
- "1053c083.232fef",
- "42a877ee.39df08",
- "d3f500c4.1bfb3",
- "aa223239.c5978",
- "44848e46.5ebac",
- "b29f5799.241a78",
- "3637e175.005c6e",
- "295602b3.df648e",
- "6a3ffb44.1e9004",
- "6bb92832.c7ba68",
- "1605273a.149319",
- "93c61c2f.6bcfd",
- "eba0b0a5.90799",
- "e1d773b9.aec52",
- "8f7266fc.c45038",
- "5e07c169.5398c"
+ "e04b6e39.cae71",
+ "b9edbe74.6fc66",
+ "e027a6b9.d5fec8",
+ "6f3c3c57.eb6864",
+ "f719861e.58e0d8",
+ "c02fb64d.81dcb8",
+ "308c70eb.a087f",
+ "d993c33b.774ec",
+ "acc938bc.eae1d8",
+ "d519b726.ce9b88",
+ "8ad08551.c43818",
+ "dad7cff3.85c1b",
+ "f192b08c.ec685",
+ "17f7a6f0.5e20c9",
+ "f18db1f7.e4c95",
+ "7bf02ef8.1215c",
+ "f879cc99.b3ef8",
+ "75a3a30e.eab54c",
+ "bd9c39e4.8a1478",
+ "3b7ef3d8.70ae1c"
]
]
},
{
- "id": "f796ddaa.da23c",
+ "id": "e04b6e39.cae71",
"type": "set",
"name": "set tmp.ar.allotted-resource-id,etc",
"xml": "<set>\n<parameter name='tmp.ar.allotted-resource-id' value='`$connection-attachment-topology-operation-input.allotted-resource-information.allotted-resource-id`' />\n<parameter name='tmp.ar.parent-service-instance-id' value='`$connection-attachment-topology-operation-input.allotted-resource-information.parent-service-instance-id`' />\n\n\n",
"comments": "",
- "x": 741.9974670410156,
- "y": 160.9973931312561,
- "z": "886e5ee7.da286",
+ "x": 697.9935607910156,
+ "y": 151.9934868812561,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "84a283be.00d5",
+ "id": "afb2368f.9bd8f8",
"type": "comment",
"name": "set tmp ar-id to fetch resource from MDSAL",
"info": "",
"comments": "",
- "x": 770.9577789306641,
- "y": 125.02918910980225,
- "z": "886e5ee7.da286",
+ "x": 726.9538726806641,
+ "y": 116.02528285980225,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "d7cfeb18.ac7528",
+ "id": "b9edbe74.6fc66",
"type": "set",
"name": "set tmp.ar.self-link",
"xml": "<set>\n<parameter name='tmp.ar.self-link' value=\"`'restconf/config/GENERIC-RESOURCE-API:connection-attachment-allotted-resources/connection-attachment-allotted-resource/'\n + $tmp.ar.allotted-resource-id\n + '/allotted-resource-data/connection-attachment-topology/'` \" />\n\n",
"comments": "",
- "x": 695.9974060058594,
- "y": 253.99739837646484,
- "z": "886e5ee7.da286",
+ "x": 651.9934997558594,
+ "y": 244.99349212646484,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "1053c083.232fef",
+ "id": "f719861e.58e0d8",
"type": "execute",
"name": "execute Properties",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/generic-resource-api-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
"comments": "",
"outputs": 1,
- "x": 702.2592964172363,
- "y": 341.6641273498535,
- "z": "886e5ee7.da286",
+ "x": 658.2553901672363,
+ "y": 332.6602210998535,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "b6393afd.3cacd8",
+ "id": "e027a6b9.d5fec8",
"type": "execute",
"name": "generate allotted-resource tmp.ar-url",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace' >\n <parameter name=\"source\" value=\"`$prop.restapi.connection-attachment-allottedresource`\"/>\n <parameter name=\"outputPath\" value=\"tmp.ar-url\"/>\n <parameter name=\"target\" value=\"{allotted-resource-id}\"/>\n <parameter name=\"replacement\" value=\"`$tmp.ar.allotted-resource-id`\"/>\n",
"comments": "",
"outputs": 1,
- "x": 749.2593536376953,
- "y": 429.6641311645508,
- "z": "886e5ee7.da286",
+ "x": 705.2554473876953,
+ "y": 420.6602249145508,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "611b176c.616988",
+ "id": "452cf8b8.86cc88",
"type": "comment",
"name": "GET connection-attachment-allotted-resource from mdsal",
"info": "",
"comments": "",
- "x": 795.8122863769531,
- "y": 560.5425653457642,
- "z": "886e5ee7.da286",
+ "x": 751.8083801269531,
+ "y": 551.5386590957642,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "eec7a472.d0ac68",
+ "id": "12f54fa3.aaff3",
"type": "comment",
"name": "Used for setting output to API Handler",
"info": "",
"comments": "",
- "x": 749.9974365234375,
- "y": 220.997407913208,
- "z": "886e5ee7.da286",
+ "x": 705.9935302734375,
+ "y": 211.993501663208,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "5ba07193.a939c",
+ "id": "926a67a.4a82498",
"type": "comment",
"name": "Obtain different URL, template location etc",
"info": "For saving resource information to MDSAL & for AAI",
"comments": "",
- "x": 767.9974021911621,
- "y": 306.8862886428833,
- "z": "886e5ee7.da286",
+ "x": 723.9934959411621,
+ "y": 297.8823823928833,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "25108569.01c11a",
+ "id": "f41dfc4.f4cda",
"type": "comment",
"name": "Used to Get AR by id to MDSAL, same as self-link",
"info": "",
"comments": "",
- "x": 793.9974212646484,
- "y": 393.8862476348877,
- "z": "886e5ee7.da286",
+ "x": 749.9935150146484,
+ "y": 384.8823413848877,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "5268ad10.1fbc94",
+ "id": "a1fbf2bd.6b2d9",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 1255.6706981658936,
- "y": 578.0038909912109,
- "z": "886e5ee7.da286",
+ "x": 1211.6667919158936,
+ "y": 568.9999847412109,
+ "z": "cbb28df7.1359",
"wires": [
[
- "1b9b3a1f.4ecdd6"
+ "9cd08c09.1d068"
]
]
},
{
- "id": "1b9b3a1f.4ecdd6",
+ "id": "9cd08c09.1d068",
"type": "block",
"name": "block: atomic",
"xml": "<block atomic=\"true\">\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1399.6707763671875,
- "y": 535.5038089752197,
- "z": "886e5ee7.da286",
+ "x": 1355.6668701171875,
+ "y": 526.4999027252197,
+ "z": "cbb28df7.1359",
"wires": [
[
- "b1843433.376208"
+ "33641e94.7a0b72"
]
]
},
{
- "id": "b1843433.376208",
+ "id": "33641e94.7a0b72",
"type": "switchNode",
"name": "switch cr length",
"xml": "<switch test='`$mdsal-ar.connection-attachment-allotted-resource_length`'>\n",
"comments": "",
"outputs": 1,
- "x": 1568.5282001495361,
- "y": 533.1229801177979,
- "z": "886e5ee7.da286",
+ "x": 1524.5242938995361,
+ "y": 524.1190738677979,
+ "z": "cbb28df7.1359",
"wires": [
[
- "72d20a43.d9be64",
- "eb9d8f14.be82"
+ "affca4cd.d977a8",
+ "c376fca7.816d6"
]
]
},
{
- "id": "72d20a43.d9be64",
+ "id": "affca4cd.d977a8",
"type": "other",
"name": "outcome 1",
"xml": "<outcome value='1'>\n",
"comments": "",
"outputs": 1,
- "x": 1723.8613357543945,
- "y": 505.1228952407837,
- "z": "886e5ee7.da286",
+ "x": 1679.8574295043945,
+ "y": 496.1189889907837,
+ "z": "cbb28df7.1359",
"wires": [
[
- "bb2299d5.286418"
+ "53c06015.6266b"
]
]
},
{
- "id": "bb2299d5.286418",
+ "id": "53c06015.6266b",
"type": "block",
"name": "block: atomic",
"xml": "<block atomic='true'>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1882.385139465332,
- "y": 503.02774238586426,
- "z": "886e5ee7.da286",
+ "x": 1838.381233215332,
+ "y": 494.02383613586426,
+ "z": "cbb28df7.1359",
"wires": [
[
- "5775f1db.84903",
- "246f7da0.0df1c2",
- "af0aec90.73323"
+ "7ac858c4.60b0b8",
+ "dad8eb30.a0d438",
+ "c39c89e4.ebe398"
]
]
},
{
- "id": "5facd3b6.9153ec",
+ "id": "27d51102.19665e",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"404\" />\n <parameter name=\"error-message\" value=\"Error: Connection attachment resource not exist\" />\n \n",
"comments": "",
- "x": 1822.5230712890625,
- "y": 610.0699768066406,
- "z": "886e5ee7.da286",
+ "x": 1778.5191650390625,
+ "y": 601.0660705566406,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "ffb50ed4.11c7e",
+ "id": "97f58790.fbe988",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 1247.5225009918213,
- "y": 613.0699758529663,
- "z": "886e5ee7.da286",
+ "x": 1203.5185947418213,
+ "y": 604.0660696029663,
+ "z": "cbb28df7.1359",
"wires": [
[
- "8996743b.6d4188"
+ "e6b498e7.ee1fb8"
]
]
},
{
- "id": "8996743b.6d4188",
+ "id": "e6b498e7.ee1fb8",
"type": "block",
"name": "block: atomic",
"xml": "<block atomic=\"true\">\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1427.5224514007568,
- "y": 613.7365264892578,
- "z": "886e5ee7.da286",
+ "x": 1383.5185451507568,
+ "y": 604.7326202392578,
+ "z": "cbb28df7.1359",
"wires": [
[
- "5facd3b6.9153ec"
+ "27d51102.19665e"
]
]
},
{
- "id": "eb9d8f14.be82",
+ "id": "c376fca7.816d6",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 1715.189338684082,
- "y": 564.4032697677612,
- "z": "886e5ee7.da286",
+ "x": 1671.185432434082,
+ "y": 555.3993635177612,
+ "z": "cbb28df7.1359",
"wires": [
[
- "5facd3b6.9153ec"
+ "27d51102.19665e"
]
]
},
{
- "id": "5775f1db.84903",
+ "id": "7ac858c4.60b0b8",
"type": "set",
"name": "set connection-attachment-ar from get",
"xml": "<set>\n<parameter name='connection-attachment-ar.' value='$mdsal-ar.connection-attachment-allotted-resource[0].' />\n",
"comments": "",
- "x": 2129.4485931396484,
- "y": 476.00399446487427,
- "z": "886e5ee7.da286",
+ "x": 2085.4446868896484,
+ "y": 467.00008821487427,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "af0aec90.73323",
+ "id": "c39c89e4.ebe398",
"type": "set",
"name": "set oper-status",
"xml": "<set>\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.last-action' value='`$connection-attachment-ar.allotted-resource-data.allotted-resource-operation-information.request-information.request-action`' />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.last-rpc-action' value='`$connection-attachment-ar.allotted-resource-status.rpc-action`' />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.last-svc-request-id' value='`$connection-attachment-ar.allotted-resource-data.allotted-resource-operation-information.sdnc-request-header.svc-request-id`' />\n\n",
"comments": "",
- "x": 2063.4486236572266,
- "y": 549.4324970245361,
- "z": "886e5ee7.da286",
+ "x": 2019.4447174072266,
+ "y": 540.4285907745361,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "246f7da0.0df1c2",
+ "id": "dad8eb30.a0d438",
"type": "switchNode",
"name": "switch order-status",
"xml": "<switch test='`$connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.order-status`'>\n",
"comments": "",
"outputs": 1,
- "x": 2073.448402404785,
- "y": 515.0039310455322,
- "z": "886e5ee7.da286",
+ "x": 2029.4444961547852,
+ "y": 506.0000247955322,
+ "z": "cbb28df7.1359",
"wires": [
[
- "9948e837.465828",
- "ac517970.6daf78"
+ "cc20c996.8c9528",
+ "d77bf1ee.049a3",
+ "453143a6.32929c"
]
]
},
{
- "id": "9948e837.465828",
+ "id": "cc20c996.8c9528",
"type": "outcome",
"name": "outcome Created",
"xml": "<outcome value='Created'>\n",
"comments": "",
"outputs": 1,
- "x": 2309.048484802246,
- "y": 509.0039620399475,
- "z": "886e5ee7.da286",
+ "x": 2265.044578552246,
+ "y": 500.0000557899475,
+ "z": "cbb28df7.1359",
"wires": [
[
- "d4094486.c3a6e8"
+ "3a4bc81f.b971d8"
]
]
},
{
- "id": "ac517970.6daf78",
+ "id": "d77bf1ee.049a3",
"type": "outcome",
"name": "outcome Other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 2302.762924194336,
- "y": 548.4325699806213,
- "z": "886e5ee7.da286",
+ "x": 2258.759078979492,
+ "y": 580.4286904335022,
+ "z": "cbb28df7.1359",
"wires": [
[
- "757a486d.390608"
+ "f8e833ae.2c3a5"
]
]
},
{
- "id": "d4094486.c3a6e8",
+ "id": "3a4bc81f.b971d8",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 2467.519157409668,
- "y": 509.37961769104004,
- "z": "886e5ee7.da286",
+ "x": 2423.515251159668,
+ "y": 500.37571144104004,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "757a486d.390608",
+ "id": "f8e833ae.2c3a5",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" \n value=\"`'Existing connection-attachment-allotted-resource with order status of ' + $connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.order-status + '.'`\" />\n",
"comments": "",
- "x": 2478.670738220215,
- "y": 547.0039691925049,
- "z": "886e5ee7.da286",
+ "x": 2434.666893005371,
+ "y": 579.0000896453857,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "d09e7753.a74cd8",
+ "id": "a031723a.72d45",
"type": "call",
"name": "call GENERIC-RESOURCE-API:sotn-get-saved-ar-param",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='sotn-get-saved-ar-param' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 966.306957244873,
- "y": 660.4975109100342,
- "z": "886e5ee7.da286",
+ "x": 922.303050994873,
+ "y": 651.4936046600342,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "42a877ee.39df08",
+ "id": "c02fb64d.81dcb8",
"type": "block",
"name": "block: atomic",
"xml": "<block atomic=\"true\">\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 660.3130569458008,
- "y": 661.5038814544678,
- "z": "886e5ee7.da286",
+ "x": 616.3091506958008,
+ "y": 652.4999752044678,
+ "z": "cbb28df7.1359",
"wires": [
[
- "d09e7753.a74cd8"
+ "a031723a.72d45"
]
]
},
{
- "id": "e91124de.b8d7d8",
+ "id": "8474372c.daa338",
"type": "comment",
"name": "GET parent-service-data from mdsal to check existence of other End point",
"info": "",
"comments": "",
- "x": 848.00439453125,
- "y": 706.5356588363647,
- "z": "886e5ee7.da286",
+ "x": 804.00048828125,
+ "y": 697.5317525863647,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "cfe58f57.1b13e",
+ "id": "dfd9ac30.4d327",
"type": "for",
"name": "for pidx..mdsal-psd.service-data.provided-allotted-resources.provided-allotted-resource[]",
"xml": "<for index='pidx' start='0' end='`$mdsal-psd.service-data.provided-allotted-resources.provided-allotted-resource_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1739.1891021728516,
- "y": 859.0081362724304,
- "z": "886e5ee7.da286",
+ "x": 1695.1851959228516,
+ "y": 850.0042300224304,
+ "z": "cbb28df7.1359",
"wires": [
[
- "b90499b4.5bff18"
+ "69bb7e37.5502b"
]
]
},
{
- "id": "81c5733e.5f25d",
+ "id": "6f3c3c57.eb6864",
"type": "switchNode",
"name": "switch mdsal-psd.service-data.provided-allotted-resources_length",
"xml": "<switch test='`$mdsal-psd.service-data.provided-allotted-resources.provided-allotted-resource_length`'>\n",
"comments": "",
"outputs": 1,
- "x": 823.1881256103516,
- "y": 966.7221727371216,
- "z": "886e5ee7.da286",
+ "x": 779.1842193603516,
+ "y": 957.7182664871216,
+ "z": "cbb28df7.1359",
"wires": [
[
- "2b5852f4.1574ce",
- "8b23ecf0.b4c98",
- "2dc5a41e.bad62c"
+ "e5034add.dc7ee8",
+ "ea87fbba.a1ee38",
+ "37719ae7.6e63d6"
]
]
},
{
- "id": "2b5852f4.1574ce",
+ "id": "e5034add.dc7ee8",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 1151.3311462402344,
- "y": 1039.5794467926025,
- "z": "886e5ee7.da286",
+ "x": 1107.3272399902344,
+ "y": 1030.5755405426025,
+ "z": "cbb28df7.1359",
"wires": [
[
- "4362d0c4.f5cb7"
+ "882cb355.05a04"
]
]
},
{
- "id": "3bb83710.9a5ab8",
+ "id": "4d6165bb.ea8a7c",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1335.458408355713,
- "y": 898.7054557800293,
- "z": "886e5ee7.da286",
+ "x": 1291.454502105713,
+ "y": 889.7015495300293,
+ "z": "cbb28df7.1359",
"wires": [
[
- "cfe58f57.1b13e",
- "44aafa72.840b94"
+ "dfd9ac30.4d327",
+ "3a395b7f.25dd64"
]
]
},
{
- "id": "b90499b4.5bff18",
+ "id": "69bb7e37.5502b",
"type": "switchNode",
"name": "switch allotted-resource-id",
"xml": "<switch test=\"`$mdsal-psd.service-data.provided-allotted-resources.provided-allotted-resource[$pidx].allotted-resource-id == $tmp.ar.allotted-resource-id`\">\n\n",
"comments": "",
"outputs": 1,
- "x": 2179.3004302978516,
- "y": 856.0079383850098,
- "z": "886e5ee7.da286",
+ "x": 2135.2965240478516,
+ "y": 847.0040321350098,
+ "z": "cbb28df7.1359",
"wires": [
[
- "d9f6094c.60f3c8",
- "cb859d5.2b35e6"
+ "cc363d65.ffc05",
+ "15afd920.4feac7"
]
]
},
{
- "id": "d9f6094c.60f3c8",
+ "id": "cc363d65.ffc05",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2352.1106452941895,
- "y": 827.4725532531738,
- "z": "886e5ee7.da286",
+ "x": 2308.1067390441895,
+ "y": 818.4686470031738,
+ "z": "cbb28df7.1359",
"wires": [
[
- "8ae27c1b.bd8dc"
+ "1c47a88e.29f817"
]
]
},
{
- "id": "303a5029.c6676",
+ "id": "8ff402e2.b14b9",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 2500.8711166381836,
- "y": 884.3296403884888,
- "z": "886e5ee7.da286",
+ "x": 2456.8672103881836,
+ "y": 875.3257341384888,
+ "z": "cbb28df7.1359",
"wires": [
[
- "da88cefe.fe269"
+ "42b3d0fe.09e55"
]
]
},
{
- "id": "da88cefe.fe269",
+ "id": "42b3d0fe.09e55",
"type": "set",
"name": "set tmp.pidx and ptx.consumed-ar",
"xml": "<set>\n<parameter name='tmp.pidx' value='`$pidx`' />\n<parameter name='tmp.provided-ar.' value='`$mdsal-psd.service-data.provided-allotted-resources.provided-allotted-resource[$pidx].`' />\n<parameter name='tmp.found-in-ar' value='true' />\n<parameter name='tmp.ep-available' value='true' />",
"comments": "",
- "x": 2735.728542327881,
- "y": 882.9011726379395,
- "z": "886e5ee7.da286",
+ "x": 2691.724636077881,
+ "y": 873.8972663879395,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "eb542676.9f39a8",
+ "id": "b37984c.e70a578",
"type": "comment",
"name": "Check existence of other AR in parent service data",
"info": "Check if other allotted resource is available.",
"comments": "",
- "x": 770.9665641784668,
- "y": 871.8968677520752,
- "z": "886e5ee7.da286",
+ "x": 726.9626579284668,
+ "y": 862.8929615020752,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "8b23ecf0.b4c98",
+ "id": "ea87fbba.a1ee38",
"type": "other",
"name": "outcome 1",
"xml": "<outcome value='1'>\n",
"comments": "",
"outputs": 1,
- "x": 1165.9836158752441,
- "y": 978.6811304092407,
- "z": "886e5ee7.da286",
+ "x": 1121.9797096252441,
+ "y": 969.6772241592407,
+ "z": "cbb28df7.1359",
"wires": [
[
- "eb826fe2.5c753"
+ "c0453fc3.0e237"
]
]
},
{
- "id": "4362d0c4.f5cb7",
+ "id": "882cb355.05a04",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"404\" />\n <parameter name=\"error-message\" value=\"Error: End points not available\" />\n \n",
"comments": "",
- "x": 1310.9834938049316,
- "y": 1038.68137550354,
- "z": "886e5ee7.da286",
+ "x": 1266.9795875549316,
+ "y": 1029.67746925354,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "2dc5a41e.bad62c",
+ "id": "37719ae7.6e63d6",
"type": "other",
"name": "outcome 2",
"xml": "<outcome value='2'>\n",
"comments": "",
"outputs": 1,
- "x": 1160.9834289550781,
- "y": 899.6811561584473,
- "z": "886e5ee7.da286",
+ "x": 1116.9795227050781,
+ "y": 890.6772499084473,
+ "z": "cbb28df7.1359",
"wires": [
[
- "3bb83710.9a5ab8"
+ "4d6165bb.ea8a7c"
]
]
},
{
- "id": "8ae27c1b.bd8dc",
+ "id": "1c47a88e.29f817",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 2510.0948600769043,
- "y": 826.6812963485718,
- "z": "886e5ee7.da286",
+ "x": 2466.0909538269043,
+ "y": 817.6773900985718,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "cb859d5.2b35e6",
+ "id": "15afd920.4feac7",
"type": "outcomeTrue",
"name": "false",
"xml": "<outcome value='false'>\n",
"comments": "",
"outputs": 1,
- "x": 2359.0945014953613,
- "y": 883.6811561584473,
- "z": "886e5ee7.da286",
+ "x": 2315.0905952453613,
+ "y": 874.6772499084473,
+ "z": "cbb28df7.1359",
"wires": [
[
- "303a5029.c6676"
+ "8ff402e2.b14b9"
]
]
},
{
- "id": "44aafa72.840b94",
+ "id": "3a395b7f.25dd64",
"type": "switchNode",
"name": "switch tmp.found-in-ar",
"xml": "<switch test='`$tmp.found-in-ar`'>\n\n",
"comments": "",
"outputs": 1,
- "x": 1547.9834060668945,
- "y": 952.4589738845825,
- "z": "886e5ee7.da286",
+ "x": 1503.9794998168945,
+ "y": 943.4550676345825,
+ "z": "cbb28df7.1359",
"wires": [
[
- "753da27d.40afec"
+ "620a8680.ec1638"
]
]
},
{
- "id": "753da27d.40afec",
+ "id": "620a8680.ec1638",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1718.98344039917,
- "y": 953.5701951980591,
- "z": "886e5ee7.da286",
+ "x": 1674.97953414917,
+ "y": 944.5662889480591,
+ "z": "cbb28df7.1359",
"wires": [
[
- "15dd4c54.90cd64"
+ "54a50118.05977"
]
]
},
{
- "id": "15dd4c54.90cd64",
+ "id": "54a50118.05977",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1867.9835357666016,
- "y": 953.5701942443848,
- "z": "886e5ee7.da286",
+ "x": 1823.9796295166016,
+ "y": 944.5662879943848,
+ "z": "cbb28df7.1359",
"wires": [
[
- "2865c930.441376",
- "36209682.cdfdca"
+ "2fbf3350.d69d7c",
+ "51067155.cb254"
]
]
},
{
- "id": "2877490b.8d1876",
+ "id": "7d7dc112.d678b",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 2614.101360321045,
- "y": 969.7990484237671,
- "z": "886e5ee7.da286",
+ "x": 2570.097454071045,
+ "y": 960.7951421737671,
+ "z": "cbb28df7.1359",
"wires": [
[
- "2c4d90a6.77e83"
+ "94f95621.9a2ea8"
]
]
},
{
- "id": "bf4a739d.0a26c",
+ "id": "79425b66.b91424",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 2605.9531631469727,
- "y": 1004.8651332855225,
- "z": "886e5ee7.da286",
+ "x": 2561.9492568969727,
+ "y": 995.8612270355225,
+ "z": "cbb28df7.1359",
"wires": [
[
- "7b79fb1a.832b54"
+ "3ebc390b.802eb6"
]
]
},
{
- "id": "24a003e8.d381ac",
+ "id": "90be4eb6.fdc8c",
"type": "switchNode",
"name": "switch mdsal-psd.service-data.networks_length",
"xml": "<switch test='`$mdsal-psd.service-data.networks.network_length`'>\n",
"comments": "",
"outputs": 1,
- "x": 1611.316909790039,
- "y": 1053.903814315796,
- "z": "886e5ee7.da286",
+ "x": 1567.313003540039,
+ "y": 1044.899908065796,
+ "z": "cbb28df7.1359",
"wires": [
[
- "1aeaa906.662367",
- "d808e760.0f46c8"
+ "b54c4867.028668",
+ "73000cce.d47514"
]
]
},
{
- "id": "d808e760.0f46c8",
+ "id": "73000cce.d47514",
"type": "other",
"name": "outcome 1",
"xml": "<outcome value='1'>\n",
"comments": "",
"outputs": 1,
- "x": 1875.3167572021484,
- "y": 1033.7925605773926,
- "z": "886e5ee7.da286",
+ "x": 1831.3128509521484,
+ "y": 1024.7886543273926,
+ "z": "cbb28df7.1359",
"wires": [
[
- "e18d77e0.ca5578"
+ "d471d131.1144d"
]
]
},
{
- "id": "1aeaa906.662367",
+ "id": "b54c4867.028668",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 1865.3168182373047,
- "y": 1081.792531967163,
- "z": "886e5ee7.da286",
+ "x": 1821.3129119873047,
+ "y": 1072.788625717163,
+ "z": "cbb28df7.1359",
"wires": [
[
- "d8d07b23.4c08f8"
+ "5f3379.2755bc88"
]
]
},
{
- "id": "d8d07b23.4c08f8",
+ "id": "5f3379.2755bc88",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"404\" />\n <parameter name=\"error-message\" value=\"Error: Incorrect state found more then 1 network\" />\n \n",
"comments": "",
- "x": 2003.9691619873047,
- "y": 1083.894292831421,
- "z": "886e5ee7.da286",
+ "x": 1959.9652557373047,
+ "y": 1074.890386581421,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "3516f8ea.4360d8",
+ "id": "d6222ed2.2e3d3",
"type": "set",
"name": "set tmp.network.",
"xml": "<set>\n<parameter name='tmp.network.' value='`$mdsal-psd.service-data.networks.network[0].`' />\n\n\n",
"comments": "",
- "x": 2236.761615753174,
- "y": 1034.792730331421,
- "z": "886e5ee7.da286",
+ "x": 2192.757709503174,
+ "y": 1025.788824081421,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "eb826fe2.5c753",
+ "id": "c0453fc3.0e237",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1333.4279251098633,
- "y": 977.7923974990845,
- "z": "886e5ee7.da286",
+ "x": 1289.4240188598633,
+ "y": 968.7884912490845,
+ "z": "cbb28df7.1359",
"wires": [
[
- "24a003e8.d381ac"
+ "90be4eb6.fdc8c"
]
]
},
{
- "id": "e18d77e0.ca5578",
+ "id": "d471d131.1144d",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 2034.0945281982422,
- "y": 1036.7923946380615,
- "z": "886e5ee7.da286",
+ "x": 1990.0906219482422,
+ "y": 1027.7884883880615,
+ "z": "cbb28df7.1359",
"wires": [
[
- "3516f8ea.4360d8",
- "fa997652.5fc978"
+ "d6222ed2.2e3d3",
+ "ce58bf5a.0189d"
]
]
},
{
- "id": "fa997652.5fc978",
+ "id": "ce58bf5a.0189d",
"type": "for",
"name": "for nidx..tmp.network.network-data.network-request-input.network...[]",
"xml": "<for index='nidx' start='0' end='`$tmp.network.network-data.network-request-input.network-input-parameters.param_length`' >",
"comments": "",
"outputs": 1,
- "x": 2397.094566345215,
- "y": 1082.7925491333008,
- "z": "886e5ee7.da286",
+ "x": 2353.090660095215,
+ "y": 1073.7886428833008,
+ "z": "cbb28df7.1359",
"wires": [
[
- "f89cda47.d902a8"
+ "a4f1258e.f8f7e8"
]
]
},
{
- "id": "f89cda47.d902a8",
+ "id": "a4f1258e.f8f7e8",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 2443.650634765625,
- "y": 1313.7923583984375,
- "z": "886e5ee7.da286",
+ "x": 2399.646728515625,
+ "y": 1304.7884521484375,
+ "z": "cbb28df7.1359",
"wires": [
[
- "eff80839.760f28",
- "81242a80.6995e8",
- "a9774cfd.8e266",
- "1742a4f9.42112b",
- "e032978.6936268",
- "b04f73ae.32d85",
- "3f331e86.57efa2",
- "d4d17449.0a3768",
- "b369fa7c.e07e38",
- "642263f7.dd00fc"
+ "ce9cca12.4f0af8",
+ "d379e536.6a0348",
+ "63d37889.57ca38",
+ "ff3897ba.b2c938",
+ "410b060d.0c2948",
+ "805eddea.23b52",
+ "623ff136.8ac42",
+ "3055227f.6b6a0e",
+ "830a582f.f084d8",
+ "f77b8935.e0ba38"
]
]
},
{
- "id": "eff80839.760f28",
+ "id": "ce9cca12.4f0af8",
"type": "switchNode",
"name": "switch access-node-id",
"xml": "<switch test=\"`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].name == 'access-node-id'`\">",
"comments": "",
"outputs": 1,
- "x": 2720.1608505249023,
- "y": 1155.8031058311462,
- "z": "886e5ee7.da286",
+ "x": 2676.1569442749023,
+ "y": 1146.7991995811462,
+ "z": "cbb28df7.1359",
"wires": [
[
- "3c2bf5ae.ea0f1a"
+ "c66b2919.5cf5d8"
]
]
},
{
- "id": "3c2bf5ae.ea0f1a",
+ "id": "c66b2919.5cf5d8",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2909.1604766845703,
- "y": 1157.8029704093933,
- "z": "886e5ee7.da286",
+ "x": 2865.1565704345703,
+ "y": 1148.7990641593933,
+ "z": "cbb28df7.1359",
"wires": [
[
- "ff19cd9d.b44a2"
+ "f9c2cbff.de99a8"
]
]
},
{
- "id": "ff19cd9d.b44a2",
+ "id": "f9c2cbff.de99a8",
"type": "set",
"name": "set tmp.found-in-network tmp.ep-available",
"xml": "<set>\n<parameter name='tmp.found-in-network' value='true' />\n<parameter name='tmp.ep-available' value='true' />",
"comments": "",
- "x": 3162.1606521606445,
- "y": 1157.4030165672302,
- "z": "886e5ee7.da286",
+ "x": 3118.1567459106445,
+ "y": 1148.3991103172302,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "81242a80.6995e8",
+ "id": "d379e536.6a0348",
"type": "returnSuccess",
"name": "return success",
"xml": "<return status='success'>\n<parameter name=\"ack-final-indicator\" value=\"Y\" />\n<parameter name=\"error-code\" value=\"200\" />\n<parameter name=\"error-message\" value=\"`$error-message`\" />\n",
"comments": "",
- "x": 2694.150302886963,
- "y": 1529.7923970222473,
- "z": "886e5ee7.da286",
+ "x": 2650.146396636963,
+ "y": 1520.7884907722473,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "295602b3.df648e",
+ "id": "dad7cff3.85c1b",
"type": "switchNode",
"name": "switch tmp.ep-available",
"xml": "<switch test='`$tmp.ep-available`'>\n",
"comments": "",
"outputs": 1,
- "x": 686.3167266845703,
- "y": 1162.236707687378,
- "z": "886e5ee7.da286",
+ "x": 642.3128204345703,
+ "y": 1153.232801437378,
+ "z": "cbb28df7.1359",
"wires": [
[
- "49e6bbf9.737be4",
- "71f6c993.d973c8"
+ "6ca6c936.2c3768",
+ "eac664c0.e13b08"
]
]
},
{
- "id": "71f6c993.d973c8",
+ "id": "eac664c0.e13b08",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 904.9834461212158,
- "y": 1211.5700645446777,
- "z": "886e5ee7.da286",
+ "x": 860.9795398712158,
+ "y": 1202.5661582946777,
+ "z": "cbb28df7.1359",
"wires": [
[
- "71103f59.0e808"
+ "750588ef.b99fe8"
]
]
},
{
- "id": "49e6bbf9.737be4",
+ "id": "6ca6c936.2c3768",
"type": "outcomeTrue",
"name": "false",
"xml": "<outcome value='false'>\n",
"comments": "",
"outputs": 1,
- "x": 909.8722476959229,
- "y": 1120.570125579834,
- "z": "886e5ee7.da286",
+ "x": 865.8683414459229,
+ "y": 1111.566219329834,
+ "z": "cbb28df7.1359",
"wires": [
[
- "20d8c152.565e0e"
+ "749ef9db.5d3a08"
]
]
},
{
- "id": "20d8c152.565e0e",
+ "id": "749ef9db.5d3a08",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1056.8722438812256,
- "y": 1122.4589385986328,
- "z": "886e5ee7.da286",
+ "x": 1012.8683376312256,
+ "y": 1113.4550323486328,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "71103f59.0e808",
+ "id": "750588ef.b99fe8",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1075.094533920288,
- "y": 1209.5700225830078,
- "z": "886e5ee7.da286",
+ "x": 1031.090627670288,
+ "y": 1200.5661163330078,
+ "z": "cbb28df7.1359",
"wires": [
[
- "44959453.f2ce1c",
- "8bc2c84.596c538",
- "431946d9.2130a8"
+ "fceb9616.eb61b8",
+ "7c3f1ab0.926054",
+ "d86d0f7e.bebac"
]
]
},
{
- "id": "44959453.f2ce1c",
+ "id": "fceb9616.eb61b8",
"type": "switchNode",
"name": "switch tmp.found-in-ar",
"xml": "<switch test='`$tmp.found-in-ar`'>\n",
"comments": "",
"outputs": 1,
- "x": 1301.2055473327637,
- "y": 1176.5700225830078,
- "z": "886e5ee7.da286",
+ "x": 1257.2016410827637,
+ "y": 1167.5661163330078,
+ "z": "cbb28df7.1359",
"wires": [
[
- "37b8c945.c963b6",
- "bce04597.421bd8"
+ "c8457f81.3c93c",
+ "ce69f5f5.7107f8"
]
]
},
{
- "id": "37b8c945.c963b6",
+ "id": "c8457f81.3c93c",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1496.6499938964844,
- "y": 1154.570083618164,
- "z": "886e5ee7.da286",
+ "x": 1452.6460876464844,
+ "y": 1145.566177368164,
+ "z": "cbb28df7.1359",
"wires": [
[
- "2970ed54.87cac2"
+ "7996be51.f87bd"
]
]
},
{
- "id": "bce04597.421bd8",
+ "id": "ce69f5f5.7107f8",
"type": "outcomeTrue",
"name": "false",
"xml": "<outcome value='false'>\n",
"comments": "",
"outputs": 1,
- "x": 1493.64990234375,
- "y": 1202.570068359375,
- "z": "886e5ee7.da286",
+ "x": 1449.64599609375,
+ "y": 1193.566162109375,
+ "z": "cbb28df7.1359",
"wires": [
[
- "a5084037.7afaf"
+ "1e79b4e5.a1cc3b"
]
]
},
{
- "id": "2970ed54.87cac2",
+ "id": "7996be51.f87bd",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1684.2056579589844,
- "y": 1151.570083618164,
- "z": "886e5ee7.da286",
+ "x": 1640.2017517089844,
+ "y": 1142.566177368164,
+ "z": "cbb28df7.1359",
"wires": [
[
- "c697bcdd.29bcd"
+ "2b6b416f.53780e"
]
]
},
{
- "id": "a5084037.7afaf",
+ "id": "1e79b4e5.a1cc3b",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1681.20556640625,
- "y": 1201.570068359375,
- "z": "886e5ee7.da286",
+ "x": 1637.20166015625,
+ "y": 1192.566162109375,
+ "z": "cbb28df7.1359",
"wires": [
[
- "10ed7f5b.5c00f1"
+ "1a9c7979.469227"
]
]
},
{
- "id": "3b7ac17e.0f823e",
+ "id": "add86bf3.f17608",
"type": "comment",
"name": "GET connection-attachment-ar to store AR data from mdsal",
"info": "",
"comments": "",
- "x": 2193.4767417907715,
- "y": 438.50785398483276,
- "z": "886e5ee7.da286",
+ "x": 2149.4728355407715,
+ "y": 429.50394773483276,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "71841c48.209304",
+ "id": "652dad92.494ca4",
"type": "comment",
"name": "Set source end point",
"info": "",
"comments": "",
- "x": 682.9766387939453,
- "y": 527.2578740119934,
- "z": "886e5ee7.da286",
+ "x": 638.9727325439453,
+ "y": 518.2539677619934,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "d3f500c4.1bfb3",
+ "id": "308c70eb.a087f",
"type": "set",
"name": "set tmp.ar.parent-service-instance-id",
"xml": "<set>\n<parameter name='tmp.ar.parent-service-instance-id' value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.parent-service-instance-id` \" />\n\n",
"comments": "",
- "x": 733.9727325439453,
- "y": 736.0039968490601,
- "z": "886e5ee7.da286",
+ "x": 689.9688262939453,
+ "y": 727.0000905990601,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "7ecc4648.197a88",
+ "id": "76dc332e.fe177c",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 1093.972885131836,
- "y": 807.0039834976196,
- "z": "886e5ee7.da286",
+ "x": 1049.968978881836,
+ "y": 798.0000772476196,
+ "z": "cbb28df7.1359",
"wires": [
[
- "2393b2c8.86b16e"
+ "9d0d7b21.e0ad98"
]
]
},
{
- "id": "dfe397a0.b9ba28",
+ "id": "cbf3f4e6.00aa98",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 1085.8246879577637,
- "y": 842.070068359375,
- "z": "886e5ee7.da286",
+ "x": 1041.8207817077637,
+ "y": 833.066162109375,
+ "z": "cbb28df7.1359",
"wires": [
[
- "1a3d638c.318b9c"
+ "d8b072f9.d7c21"
]
]
},
{
- "id": "1a3d638c.318b9c",
+ "id": "d8b072f9.d7c21",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"404\" />\n <parameter name=\"error-message\" value=\"Error: Parent service data not available\" />\n \n",
"comments": "",
- "x": 1231.9734687805176,
- "y": 841.3374795913696,
- "z": "886e5ee7.da286",
+ "x": 1187.9695625305176,
+ "y": 832.3335733413696,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "2393b2c8.86b16e",
+ "id": "9d0d7b21.e0ad98",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1224.9729804992676,
- "y": 807.0040445327759,
- "z": "886e5ee7.da286",
+ "x": 1180.9690742492676,
+ "y": 798.0001382827759,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "7b79fb1a.832b54",
+ "id": "3ebc390b.802eb6",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"404\" />\n <parameter name=\"error-message\" value=\"Error: SOTN provided attachment resource not found\" />\n \n",
"comments": "",
- "x": 2755.973213195801,
- "y": 1005.00417137146,
- "z": "886e5ee7.da286",
+ "x": 2711.969306945801,
+ "y": 996.00026512146,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "2c4d90a6.77e83",
+ "id": "94f95621.9a2ea8",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 2740.9733352661133,
- "y": 972.0041561126709,
- "z": "886e5ee7.da286",
+ "x": 2696.9694290161133,
+ "y": 963.0002498626709,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "aa223239.c5978",
+ "id": "d993c33b.774ec",
"type": "set",
"name": "set tmp.found-in-ar tmp.found-in-network tmp.ep-available to false",
"xml": "<set>\n<parameter name='tmp.found-in-ar' value='false' />\n<parameter name='tmp.found-in-network' value='false' />\n<parameter name='tmp.ep-available' value='false' />",
"comments": "",
- "x": 819.9726715087891,
- "y": 909.0039710998535,
- "z": "886e5ee7.da286",
+ "x": 775.9687652587891,
+ "y": 900.0000648498535,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "3eb9877e.29bda8",
+ "id": "336df829.2ff8b8",
"type": "comment",
"name": "If other EP exists set destination end point",
"info": "Check if other allotted resource is available.",
"comments": "",
- "x": 736.9726715087891,
- "y": 1087.0039196014404,
- "z": "886e5ee7.da286",
+ "x": 692.9687652587891,
+ "y": 1078.0000133514404,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "6bea5b5c.cc56a4",
+ "id": "917d1ab.d2608e8",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1476.9727935791016,
- "y": 1414.0042009353638,
- "z": "886e5ee7.da286",
+ "x": 1432.9688873291016,
+ "y": 1405.0002946853638,
+ "z": "cbb28df7.1359",
"wires": [
[
- "873a1eb1.c2b41",
- "ec2f2c59.85a72",
- "4344ccac.0cc2d4",
- "3e861847.acb138",
- "dbce043e.c1b088",
- "6cf22112.6f2ff",
- "447be204.cdf4fc",
- "3722b20a.c8338e"
+ "a62deca7.bcade",
+ "81802c0b.6f8f",
+ "11a25f88.82eed",
+ "47a81553.315d4c",
+ "ee81a378.a7601",
+ "b4347cf5.49bc8",
+ "5c76f693.8395f8",
+ "59d53676.123ac8"
]
]
},
{
- "id": "873a1eb1.c2b41",
+ "id": "a62deca7.bcade",
"type": "switchNode",
"name": "switch access-node-id",
"xml": "<switch test=\"`$tmp.ep.parameters.param[$idx].name == 'access-node-id'`\">",
"comments": "",
"outputs": 1,
- "x": 1719.4830951690674,
- "y": 1284.014597415924,
- "z": "886e5ee7.da286",
+ "x": 1675.4791889190674,
+ "y": 1275.010691165924,
+ "z": "cbb28df7.1359",
"wires": [
[
- "e78fa7d0.0dc8a8"
+ "fe688e94.da33b"
]
]
},
{
- "id": "ec2f2c59.85a72",
+ "id": "81802c0b.6f8f",
"type": "returnSuccess",
"name": "return success",
"xml": "<return status='success'>\n<parameter name=\"ack-final-indicator\" value=\"Y\" />\n<parameter name=\"error-code\" value=\"200\" />\n<parameter name=\"error-message\" value=\"`$error-message`\" />\n",
"comments": "",
- "x": 1692.4730472564697,
- "y": 1589.0045609474182,
- "z": "886e5ee7.da286",
+ "x": 1648.4691410064697,
+ "y": 1580.0006546974182,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "4344ccac.0cc2d4",
+ "id": "11a25f88.82eed",
"type": "switchNode",
"name": "switch access-ltp-id",
"xml": "<switch test=\"`$tmp.ep.parameters.param[$idx].name == 'access-ltp-id'`\">",
"comments": "",
"outputs": 1,
- "x": 1710.9729251861572,
- "y": 1327.7821288108826,
- "z": "886e5ee7.da286",
+ "x": 1666.9690189361572,
+ "y": 1318.7782225608826,
+ "z": "cbb28df7.1359",
"wires": [
[
- "e0447eeb.b4df4"
+ "c02ee204.0e0d9"
]
]
},
{
- "id": "3e861847.acb138",
+ "id": "47a81553.315d4c",
"type": "switchNode",
"name": "switch clientSignal",
"xml": "<switch test=\"`$tmp.ep.parameters.param[$idx].name == 'clientSignal'`\">",
"comments": "",
"outputs": 1,
- "x": 1704.9729633331299,
- "y": 1373.782175540924,
- "z": "886e5ee7.da286",
+ "x": 1660.9690570831299,
+ "y": 1364.778269290924,
+ "z": "cbb28df7.1359",
"wires": [
[
- "851a1f33.b90d6"
+ "54c81360.7adb5c"
]
]
},
{
- "id": "dbce043e.c1b088",
+ "id": "ee81a378.a7601",
"type": "switchNode",
"name": "switch cVLAN",
"xml": "<switch test=\"`$tmp.ep.parameters.param[$idx].name == 'cVLAN'`\">",
"comments": "",
"outputs": 1,
- "x": 1688.9624652862549,
- "y": 1412.771677494049,
- "z": "886e5ee7.da286",
+ "x": 1644.9585590362549,
+ "y": 1403.767771244049,
+ "z": "cbb28df7.1359",
"wires": [
[
- "cde9b854.f3d7e8"
+ "99167636.bd39c8"
]
]
},
{
- "id": "e78fa7d0.0dc8a8",
+ "id": "fe688e94.da33b",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1897.1950092315674,
- "y": 1284.6709694862366,
- "z": "886e5ee7.da286",
+ "x": 1853.1911029815674,
+ "y": 1275.6670632362366,
+ "z": "cbb28df7.1359",
"wires": [
[
- "bfb532e5.03a1a"
+ "ba53eaa4.9c9d68"
]
]
},
{
- "id": "bfb532e5.03a1a",
+ "id": "ba53eaa4.9c9d68",
"type": "set",
"name": "set dst-access-node-id",
"xml": "<set>\n<parameter name='prop.remote.connection-attachment.access-node-id' value='`$tmp.ep.parameters.param[$idx].value`' />",
"comments": "",
- "x": 2072.1950092315674,
- "y": 1284.270944595337,
- "z": "886e5ee7.da286",
+ "x": 2028.1911029815674,
+ "y": 1275.267038345337,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "e0447eeb.b4df4",
+ "id": "c02ee204.0e0d9",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1892.6848773956299,
- "y": 1327.438425540924,
- "z": "886e5ee7.da286",
+ "x": 1848.6809711456299,
+ "y": 1318.434519290924,
+ "z": "cbb28df7.1359",
"wires": [
[
- "b05efaae.c42928"
+ "d114cdd9.cd628"
]
]
},
{
- "id": "851a1f33.b90d6",
+ "id": "54c81360.7adb5c",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1892.6848773956299,
- "y": 1373.438425540924,
- "z": "886e5ee7.da286",
+ "x": 1848.6809711456299,
+ "y": 1364.434519290924,
+ "z": "cbb28df7.1359",
"wires": [
[
- "24c05af2.8faa76"
+ "b311a80c.06bd18"
]
]
},
{
- "id": "cde9b854.f3d7e8",
+ "id": "99167636.bd39c8",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1892.6743793487549,
- "y": 1412.4280495643616,
- "z": "886e5ee7.da286",
+ "x": 1848.6704730987549,
+ "y": 1403.4241433143616,
+ "z": "cbb28df7.1359",
"wires": [
[
- "27931eaa.157cb2"
+ "9a953c6c.d3922"
]
]
},
{
- "id": "8bc2c84.596c538",
+ "id": "7c3f1ab0.926054",
"type": "for",
"name": "for idx..tmp.ep.parameters[]",
"xml": "<for index='idx' start='0' end='`$tmp.ep.parameters.param_length`'>\n\n",
"comments": "",
"outputs": 1,
- "x": 1329.97265625,
- "y": 1302.00390625,
- "z": "886e5ee7.da286",
+ "x": 1285.96875,
+ "y": 1293,
+ "z": "cbb28df7.1359",
"wires": [
[
- "6bea5b5c.cc56a4"
+ "917d1ab.d2608e8"
]
]
},
{
- "id": "c697bcdd.29bcd",
+ "id": "2b6b416f.53780e",
"type": "set",
"name": "set tmp.ep.parameters",
"xml": "<set>\n<parameter name='tmp.ep.parameters.' value='`$mdsal-other-ar.connection-attachment-allotted-resource[0].allotted-resource-data.allotted-resource-operation-information.connection-attachment-request-input.`' />\n",
"comments": "",
- "x": 1895.9727115631104,
- "y": 1151.0039806365967,
- "z": "886e5ee7.da286",
+ "x": 1851.9688053131104,
+ "y": 1142.0000743865967,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "10ed7f5b.5c00f1",
+ "id": "1a9c7979.469227",
"type": "set",
"name": "set tmp.ep.parameters",
"xml": "<set>\n<parameter name='tmp.ep.parameters.' value='`$tmp.network.network-data.network-request-input.network-input-parameters.`' />\n",
"comments": "",
- "x": 1892.972620010376,
- "y": 1197.0039653778076,
- "z": "886e5ee7.da286",
+ "x": 1848.968713760376,
+ "y": 1188.0000591278076,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "b05efaae.c42928",
+ "id": "d114cdd9.cd628",
"type": "set",
"name": "set dst-access-node-id",
"xml": "<set>\n<parameter name='prop.remote.connection-attachment.access-ltp-id' value='`$tmp.ep.parameters.param[$idx].value`' />",
"comments": "",
- "x": 2069.9728412628174,
- "y": 1327.0042214393616,
- "z": "886e5ee7.da286",
+ "x": 2025.9689350128174,
+ "y": 1318.0003151893616,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "24c05af2.8faa76",
+ "id": "b311a80c.06bd18",
"type": "set",
"name": "set dst-clientSignal",
"xml": "<set>\n<parameter name='prop.remote.connection-attachment.clientSignal' value='`$tmp.ep.parameters.param[$idx].value`' />",
"comments": "",
- "x": 2063.9728412628174,
- "y": 1371.0042214393616,
- "z": "886e5ee7.da286",
+ "x": 2019.9689350128174,
+ "y": 1362.0003151893616,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "27931eaa.157cb2",
+ "id": "9a953c6c.d3922",
"type": "set",
"name": "set dst-cVLAN",
"xml": "<set>\n<parameter name='prop.remote.connection-attachment.cVLAN' value='`$tmp.ep.parameters.param[$idx].value`' />",
"comments": "",
- "x": 2054.9728412628174,
- "y": 1410.0042214393616,
- "z": "886e5ee7.da286",
+ "x": 2010.9689350128174,
+ "y": 1401.0003151893616,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "1eb5604c.140ea",
+ "id": "41e007bc.b49c58",
"type": "comment",
"name": "Get controller info and send request",
"info": "",
"comments": "",
- "x": 1936.972713470459,
- "y": 1881.004059791565,
- "z": "886e5ee7.da286",
+ "x": 1892.968807220459,
+ "y": 1872.000153541565,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "4c07dee.6ce442",
+ "id": "ce79c05a.55781",
"type": "execute",
"name": "execute RestApiCallNode Create ethernet Service",
- "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n<parameter name=\"templateFileName\" value=\"`$prop.restapi.templateDir + '/sotn-ethernet-service.json'`\" />\n<parameter name=\"restapiUrl\" value=\"`$prop.sdncRestApi.thirdpartySdnc.url + 'restconf/data/ietf-eth-tran-service:etht-svc'`\" />\n<parameter name=\"restapiUser\" value=\"`$prop.sdncRestApi.thirdpartySdnc.user`\" />\n<parameter name=\"restapiPassword\" value=\"`$prop.sdncRestApi.thirdpartySdnc.password`\" />\n<parameter name=\"format\" value=\"json\"/>\n<parameter name=\"httpMethod\" value=\"patch\"/>\n<parameter name=\"responsePrefix\" value=\"vpn-result\"/>\n<parameter name=\"trustStoreFileName\" value=\"/opt/onap/sdnc/data/stores/truststore.openecomp.client.jks\"/>\n<parameter name=\"trustStorePassword\" value=\"adminadmin\"/>\n<parameter name=\"keyStoreFileName\" value=\"/opt/onap/sdnc/data/stores/sdnc.p12\"/>\n<parameter name=\"keyStorePassword\" value=\"adminadmin\"/>\n<parameter name='customHttpHeaders' value=\"`'X-ACCESS-TOKEN=' + $prop.sdncRestApi.token_id`\" />",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n<parameter name=\"templateFileName\" value=\"`$prop.restapi.templateDir + '/sotn-ethernet-service.json'`\" />\n<parameter name=\"restapiUrl\" value=\"`$prop.sdncRestApi.thirdpartySdnc.url + '/restconf/data/ietf-eth-tran-service:etht-svc'`\" />\n<parameter name=\"restapiUser\" value=\"`$prop.sdncRestApi.thirdpartySdnc.user`\" />\n<parameter name=\"restapiPassword\" value=\"`$prop.sdncRestApi.thirdpartySdnc.password`\" />\n<parameter name=\"format\" value=\"json\"/>\n<parameter name=\"httpMethod\" value=\"patch\"/>\n<parameter name=\"responsePrefix\" value=\"vpn-result\"/>\n<parameter name=\"trustStoreFileName\" value=\"/opt/onap/sdnc/data/stores/truststore.openecomp.client.jks\"/>\n<parameter name=\"trustStorePassword\" value=\"adminadmin\"/>\n<parameter name=\"keyStoreFileName\" value=\"/opt/onap/sdnc/data/stores/sdnc.p12\"/>\n<parameter name=\"keyStorePassword\" value=\"adminadmin\"/>\n<parameter name='customHttpHeaders' value=\"`'X-ACCESS-TOKEN=' + $prop.sdncRestApi.token_id`\" />",
"comments": "",
"outputs": 1,
- "x": 1989.97314453125,
- "y": 2024.0048599243164,
- "z": "886e5ee7.da286",
+ "x": 1945.96923828125,
+ "y": 2015.0009536743164,
+ "z": "cbb28df7.1359",
"wires": [
[
- "ebb13c18.63d5b",
- "27ef146.5170fec"
+ "163df924.1c4a27",
+ "eec75b28.8ba118"
]
]
},
{
- "id": "ebb13c18.63d5b",
+ "id": "163df924.1c4a27",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 2255.972869873047,
- "y": 2053.004982948303,
- "z": "886e5ee7.da286",
+ "x": 2211.968963623047,
+ "y": 2044.0010766983032,
+ "z": "cbb28df7.1359",
"wires": [
[
- "3abdd3d8.70de3c"
+ "638866f6.2498c8"
]
]
},
{
- "id": "3abdd3d8.70de3c",
+ "id": "638866f6.2498c8",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"comments": "",
"outputs": 1,
- "x": 2403.972869873047,
- "y": 2051.0048608779907,
- "z": "886e5ee7.da286",
+ "x": 2359.968963623047,
+ "y": 2042.0009546279907,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "252b7082.c5a2b",
+ "id": "bb864308.fd063",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"Error executing Create vpn rest api\" />\n",
"comments": "",
- "x": 2385.972900390625,
- "y": 1998.0049209594727,
- "z": "886e5ee7.da286",
+ "x": 2341.968994140625,
+ "y": 1989.0010147094727,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "27ef146.5170fec",
+ "id": "eec75b28.8ba118",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 2246.9728088378906,
- "y": 1998.0049209594727,
- "z": "886e5ee7.da286",
+ "x": 2202.9689025878906,
+ "y": 1989.0010147094727,
+ "z": "cbb28df7.1359",
"wires": [
[
- "252b7082.c5a2b"
+ "bb864308.fd063"
]
]
},
{
- "id": "b6a98854.3d7a58",
+ "id": "4cd33402.f5bedc",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 908.7350807189941,
- "y": 2104.9576148986816,
- "z": "886e5ee7.da286",
+ "x": 864.7311744689941,
+ "y": 2095.9537086486816,
+ "z": "cbb28df7.1359",
"wires": [
[
- "35924502.aff77a"
+ "ed40bf1a.07a59"
]
]
},
{
- "id": "35924502.aff77a",
+ "id": "ed40bf1a.07a59",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"AAI failed\" />\n",
"comments": "",
- "x": 1075.2589015960693,
- "y": 2131.5766220092773,
- "z": "886e5ee7.da286",
+ "x": 1031.2549953460693,
+ "y": 2122.5727157592773,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "89209832.9697d8",
+ "id": "589b918b.e1a7",
"type": "failure",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 910.8303089141846,
- "y": 2152.719457626343,
- "z": "886e5ee7.da286",
+ "x": 866.8264026641846,
+ "y": 2143.715551376343,
+ "z": "cbb28df7.1359",
"wires": [
[
- "35924502.aff77a"
+ "ed40bf1a.07a59"
]
]
},
{
- "id": "48f4ae61.b756e",
+ "id": "489a8dba.917834",
"type": "comment",
"name": "Save Resource to AAI",
"info": "",
"comments": "",
- "x": 682.7827243804932,
- "y": 2093.3067779541016,
- "z": "886e5ee7.da286",
+ "x": 638.7788181304932,
+ "y": 2084.3028717041016,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "e1d773b9.aec52",
+ "id": "75a3a30e.eab54c",
"type": "set",
"name": "set output to api handler",
"xml": "<set>\n<parameter name='allotted-resource-id' value='`$tmp.ar.allotted-resource-id`' />\n<parameter name='connection-attachment-object-path' value=\"`$tmp.ar.self-link`\"/>\n<parameter name='service-object-path' value=\"`'restconf/config/GENERIC-RESOURCE-API:services/service/'\n + $connection-attachment-topology-operation-input.service-information.service-instance-id\n + '/service-data/service-topology/'`\"/>\n \n",
"comments": "",
- "x": 697.5504207611084,
- "y": 2014.8322591781616,
- "z": "886e5ee7.da286",
+ "x": 653.5465145111084,
+ "y": 2005.8283529281616,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "5e07c169.5398c",
+ "id": "3b7ef3d8.70ae1c",
"type": "returnSuccess",
"name": "return success",
"xml": "<return status='success'>\n<parameter name=\"ack-final-indicator\" value=\"Y\" />\n<parameter name=\"error-code\" value=\"200\" />\n<parameter name=\"error-message\" value=\"`$error-message`\" />\n",
"comments": "",
- "x": 657.9635925292969,
- "y": 2200.4480476379395,
- "z": "886e5ee7.da286",
+ "x": 613.9596862792969,
+ "y": 2191.4441413879395,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "eba0b0a5.90799",
+ "id": "f879cc99.b3ef8",
"type": "execute",
"name": "execute RestApiCallNode - PUT AR by id",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.sotn-attachment.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.controller.url + $tmp.ar-url`' />\n <parameter name='restapiUser' value='`$prop.controller.user`' />\n <parameter name='restapiPassword' value='`$prop.controller.pwd`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='PUT' />\n <parameter name=\"responsePrefix\" value=\"mdsal-ar\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 750.2825031280518,
- "y": 1939.4731121063232,
- "z": "886e5ee7.da286",
+ "x": 706.2785968780518,
+ "y": 1930.4692058563232,
+ "z": "cbb28df7.1359",
"wires": [
[
- "88c5e9d5.563c18",
- "ade401d9.d9d7d",
- "c5f54133.a8e19"
+ "e695cbc9.963178",
+ "c00494c2.3f5b48",
+ "2e65b760.7a5738"
]
]
},
{
- "id": "88c5e9d5.563c18",
+ "id": "e695cbc9.963178",
"type": "not-found",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 1004.9239253997803,
- "y": 1983.8045063018799,
- "z": "886e5ee7.da286",
+ "x": 960.9200191497803,
+ "y": 1974.8006000518799,
+ "z": "cbb28df7.1359",
"wires": [
[
- "effa0e45.a8e79"
+ "c996b950.fcda58"
]
]
},
{
- "id": "ade401d9.d9d7d",
+ "id": "c00494c2.3f5b48",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1006.9239482879639,
- "y": 1942.3044704422355,
- "z": "886e5ee7.da286",
+ "x": 962.9200420379639,
+ "y": 1933.3005641922355,
+ "z": "cbb28df7.1359",
"wires": [
[
- "effa0e45.a8e79"
+ "c996b950.fcda58"
]
]
},
{
- "id": "c5f54133.a8e19",
+ "id": "2e65b760.7a5738",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 1010.6740322113037,
- "y": 1893.6616230010986,
- "z": "886e5ee7.da286",
+ "x": 966.6701259613037,
+ "y": 1884.6577167510986,
+ "z": "cbb28df7.1359",
"wires": [
[
- "f45f0673.a366c8"
+ "fe27e5ca.7550c8"
]
]
},
{
- "id": "effa0e45.a8e79",
+ "id": "c996b950.fcda58",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"Error updating md-sal for connection-attachment-allotted-resource\" />\n",
"comments": "",
- "x": 1165.67405128479,
- "y": 1962.054536819458,
- "z": "886e5ee7.da286",
+ "x": 1121.67014503479,
+ "y": 1953.050630569458,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "f45f0673.a366c8",
+ "id": "fe27e5ca.7550c8",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1138.3299770355225,
- "y": 1895.8537912368774,
- "z": "886e5ee7.da286",
+ "x": 1094.3260707855225,
+ "y": 1886.8498849868774,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "6a3ffb44.1e9004",
+ "id": "f192b08c.ec685",
"type": "set",
"name": "set ar-data",
"xml": "<set>\n<parameter name='connection-attachment-ar.allotted-resource-status.action' value=\"`$connection-attachment-topology-operation-input.request-information.request-action` \" />\n<parameter name='connection-attachment-ar.allotted-resource-status.rpc-name' value=\"connection-attachment-topology-operation\" />\n<parameter name='connection-attachment-ar.allotted-resource-status.rpc-action' value=\"`$connection-attachment-topology-operation-input.sdnc-request-header.svc-action` \" />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-operation-information.request-information.' value=\"`$connection-attachment-topology-operation-input.request-information.` \" />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-operation-information.sdnc-request-header.' value=\"`$connection-attachment-topology-operation-input.sdnc-request-header.` \" />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-operation-information.service-information.' value=\"`$connection-attachment-topology-operation-input.service-information.` \" />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.' value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.` \" />",
"comments": "",
- "x": 652.4961185455322,
- "y": 1773.8540132045746,
- "z": "886e5ee7.da286",
+ "x": 608.4922122955322,
+ "y": 1764.8501069545746,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "1605273a.149319",
+ "id": "f18db1f7.e4c95",
"type": "execute",
"name": "execute getTime",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='setTime' >\n <parameter name=\"outputPath\" value=\"tmp.current-time\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 669.78196144104,
- "y": 1846.4736108779907,
- "z": "886e5ee7.da286",
+ "x": 625.77805519104,
+ "y": 1837.4697046279907,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "93c61c2f.6bcfd",
+ "id": "7bf02ef8.1215c",
"type": "set",
"name": "set allotted-resource-oper-status",
"xml": "<set>\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.order-status' value='Active' />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.last-action' value='`$connection-attachment-topology-operation-input.request-information.request-action`' />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.last-rpc-action' value='`$connection-attachment-topology-operation-input.sdnc-request-header.svc-action`' />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.last-svc-request-id' value='`$connection-attachment-topology-operation-input.sdnc-request-header.svc-request-id`' />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.create-timestamp' value='`$tmp.current-time`' />\n",
"comments": "",
- "x": 719.7690410614014,
- "y": 1883.4246912002563,
- "z": "886e5ee7.da286",
+ "x": 675.7651348114014,
+ "y": 1874.4207849502563,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "6bb92832.c7ba68",
+ "id": "17f7a6f0.5e20c9",
"type": "set",
"name": "set model-data",
"xml": "<set>\n<parameter name='connection-attachment-ar.allotted-resource-data.connection-attachment-topology.onap-model-information.' value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.onap-model-information.` \" />",
"comments": "",
- "x": 666.3376598358154,
- "y": 1813.028663635254,
- "z": "886e5ee7.da286",
+ "x": 622.3337535858154,
+ "y": 1804.024757385254,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "4d71f89f.b7cd18",
+ "id": "59f6758a.f1882c",
"type": "comment",
"name": "Prepare data for allotted-resource addition to MDSAL",
"info": "This will add to allotted-resource which is present inside service.",
"comments": "",
- "x": 779.67112159729,
- "y": 1734.0286157131195,
- "z": "886e5ee7.da286",
+ "x": 735.66721534729,
+ "y": 1725.0247094631195,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "5c1a3e33.04e12",
+ "id": "e5584499.737208",
"type": "comment",
"name": "Add to allotted-resources in mdsal",
"info": "",
"comments": "",
- "x": 721.2509479522705,
- "y": 1701.4419174194336,
- "z": "886e5ee7.da286",
+ "x": 677.2470417022705,
+ "y": 1692.4380111694336,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "8f7266fc.c45038",
+ "id": "bd9c39e4.8a1478",
"type": "update",
"name": "update AAI allotted-resource",
- "xml": "<update plugin=\"org.onap.ccsdk.sli.adaptors.aai.AAIService\" \n\t\tresource=\"allotted-resource\" \n\t\tkey=\"customer.global-customer-id = $connection-attachment-topology-operation-input.service-information.global-customer-id AND\n\t\t\tservice-subscription.service-type = $connection-attachment-topology-operation-input.service-information.subscription-service-type AND\n\t\t\tservice-instance.service-instance-id = $connection-attachment-topology-operation-input.allotted-resource-information.parent-service-instance-id AND\n\t\t\tallotted-resource.id = $tmp.ar.allotted-resource-id\"\n pfx='pfx' local-only='false' force='false'>\n\t<parameter name=\"description\" value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.allotted-resource-type`\" />\n\t<parameter name=\"selflink\" value=\"`$tmp.ar.self-link`\" />\n\t<parameter name=\"model-invariant-id\" value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.onap-model-information.model-invariant-uuid`\" />\n\t<parameter name=\"model-version-id\" value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.onap-model-information.model-uuid`\" />\n\t<parameter name=\"operational-status\" value=\"Active\" />\n",
+ "xml": "<update plugin=\"org.onap.ccsdk.sli.adaptors.aai.AAIService\" \n\t\tresource=\"allotted-resource\" \n\t\tkey=\"customer.global-customer-id = $connection-attachment-topology-operation-input.service-information.global-customer-id AND\n\t\t\tservice-subscription.service-type = $connection-attachment-topology-operation-input.service-information.subscription-service-type AND\n\t\t\tservice-instance.service-instance-id = $connection-attachment-topology-operation-input.allotted-resource-information.parent-service-instance-id AND\n\t\t\tallotted-resource.id = $tmp.ar.allotted-resource-id\"\n pfx='pfx' local-only='false' force='false'>\n\t<parameter name=\"description\" value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.allotted-resource-type`\" />\n\t<parameter name=\"selflink\" value=\"`$tmp.ar.self-link`\" />\n\t<!--parameter name=\"model-invariant-id\" value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.onap-model-information.model-invariant-uuid`\" />\n\t<parameter name=\"model-version-id\" value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.onap-model-information.model-uuid`\" /-->\n\t<parameter name=\"operational-status\" value=\"Active\" />\n",
"comments": "",
"outputs": 1,
- "x": 709.2270030975342,
- "y": 2130.7589206695557,
- "z": "886e5ee7.da286",
+ "x": 665.2230968475342,
+ "y": 2121.7550144195557,
+ "z": "cbb28df7.1359",
"wires": [
[
- "b6a98854.3d7a58",
- "89209832.9697d8"
+ "4cd33402.f5bedc",
+ "589b918b.e1a7"
]
]
},
{
- "id": "f51b8e7a.4294a",
+ "id": "dfdb9aed.f71ce8",
"type": "execute",
"name": "execute RestApiCallNode getPath from OOF",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n<parameter name=\"templateFileName\" value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.oof-getpath.templatefile`\" />\n<parameter name=\"restapiUrl\" value=\"`$prop.restapi.connection-oof-url`\" />\n<parameter name=\"restapiUser\" value=\"`$prop.oof.user`\" />\n<parameter name=\"restapiPassword\" value=\"`$prop.oof.password`\" />\n<parameter name=\"format\" value=\"json\"/>\n<parameter name=\"httpMethod\" value=\"post\"/>\n<parameter name=\"responsePrefix\" value=\"oof\"/>\n<parameter name=\"trustStoreFileName\" value=\"/opt/onap/sdnc/data/stores/truststore.openecomp.client.jks\"/>\n<parameter name=\"trustStorePassword\" value=\"adminadmin\"/>\n<parameter name=\"keyStoreFileName\" value=\"/opt/onap/sdnc/data/stores/sdnc.p12\"/>\n<parameter name=\"keyStorePassword\" value=\"adminadmin\"/>\n<parameter name='customHttpHeaders' value=\"`'X-ACCESS-TOKEN=' + $prop.sdncRestApi.token_id`\" />",
"comments": "",
"outputs": 1,
- "x": 1517.976963043213,
- "y": 1693.2585725784302,
- "z": "886e5ee7.da286",
+ "x": 1473.973056793213,
+ "y": 1684.2546663284302,
+ "z": "cbb28df7.1359",
"wires": [
[
- "475ee246.c4d58c",
- "951a0e07.b45a7"
+ "5746b590.8e789c",
+ "dfadca6b.0a2088"
]
]
},
{
- "id": "475ee246.c4d58c",
+ "id": "5746b590.8e789c",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 1757.9771041870117,
- "y": 1717.258542060852,
- "z": "886e5ee7.da286",
+ "x": 1713.9731979370117,
+ "y": 1708.254635810852,
+ "z": "cbb28df7.1359",
"wires": [
[
- "2cebb233.b139be"
+ "6ae16eae.42967"
]
]
},
{
- "id": "dfc21d27.a29bd",
+ "id": "882eddea.960c4",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"Error executing OOF api\" />\n",
"comments": "",
- "x": 1896.977138519287,
- "y": 1666.2586336135864,
- "z": "886e5ee7.da286",
+ "x": 1852.973232269287,
+ "y": 1657.2547273635864,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "951a0e07.b45a7",
+ "id": "dfadca6b.0a2088",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1756.9768905639648,
- "y": 1666.258632659912,
- "z": "886e5ee7.da286",
+ "x": 1712.9729843139648,
+ "y": 1657.254726409912,
+ "z": "cbb28df7.1359",
"wires": [
[
- "dfc21d27.a29bd"
+ "882eddea.960c4"
]
]
},
{
- "id": "d7025fc8.34b0f",
+ "id": "4ef28c1a.417b14",
"type": "comment",
"name": "Get VPNs from OOF",
"info": "",
"comments": "",
- "x": 1503.980884552002,
- "y": 1660.2625722885132,
- "z": "886e5ee7.da286",
+ "x": 1459.976978302002,
+ "y": 1651.2586660385132,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "7306bfe1.33065",
+ "id": "14017773.15ade9",
"type": "for",
"name": "for vidx..oof.vpns_length[]",
"xml": "<for index='vidx' start='0' end='`$oof.vpns_length`' >",
"comments": "",
"outputs": 1,
- "x": 1470.9766845703125,
- "y": 1798.50830078125,
- "z": "886e5ee7.da286",
+ "x": 1413.972900390625,
+ "y": 1766.50439453125,
+ "z": "cbb28df7.1359",
"wires": [
[
- "3edaf3bd.0b304c"
+ "1e38af3f.f6ce71"
]
]
},
{
- "id": "9a8b6203.49db4",
+ "id": "3e61c92c.93c8a6",
"type": "comment",
"name": "Loop through VPN and configure them",
"info": "",
"comments": "",
- "x": 1500.977138519287,
- "y": 1761.0086650848389,
- "z": "886e5ee7.da286",
+ "x": 1459.9733505249023,
+ "y": 1901.0047721862793,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "a9774cfd.8e266",
+ "id": "63d37889.57ca38",
"type": "switchNode",
"name": "switch name",
"xml": "<switch test=\"`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].name == 'name'`\">\n \n",
"comments": "",
"outputs": 1,
- "x": 2697.760986328125,
- "y": 1247.125732421875,
- "z": "886e5ee7.da286",
+ "x": 2653.757080078125,
+ "y": 1238.121826171875,
+ "z": "cbb28df7.1359",
"wires": [
[
- "a313d119.ec211"
+ "bead713d.d0c48"
]
]
},
{
- "id": "a313d119.ec211",
+ "id": "bead713d.d0c48",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2886.760955810547,
- "y": 1247.125717639923,
- "z": "886e5ee7.da286",
+ "x": 2842.757049560547,
+ "y": 1238.121811389923,
+ "z": "cbb28df7.1359",
"wires": [
[
- "3a640881.1aa1d8"
+ "e5afa8f6.b33978"
]
]
},
{
- "id": "3a640881.1aa1d8",
+ "id": "e5afa8f6.b33978",
"type": "set",
"name": "set etht-svc-name & bandwidth-profile-name",
"xml": "<set>\n<parameter name='prop.global.sotn.etht-svc-name' value='`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].value`' />\n<parameter name='prop.global.sotn.bandwidth-profile-name' value='`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].value`' />\n",
"comments": "",
- "x": 3127.76127243042,
- "y": 1246.7257723808289,
- "z": "886e5ee7.da286",
+ "x": 3083.75736618042,
+ "y": 1237.7218661308289,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "1742a4f9.42112b",
+ "id": "ff3897ba.b2c938",
"type": "switchNode",
"name": "switch description",
"xml": "<switch test=\"`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].name == 'description'`\">\n",
"comments": "",
"outputs": 1,
- "x": 2710.6008644104004,
- "y": 1282.1258273124695,
- "z": "886e5ee7.da286",
+ "x": 2666.5969581604004,
+ "y": 1273.1219210624695,
+ "z": "cbb28df7.1359",
"wires": [
[
- "26c6398e.ae40a6"
+ "7e0c933d.418d0c"
]
]
},
{
- "id": "26c6398e.ae40a6",
+ "id": "7e0c933d.418d0c",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2885.600929260254,
- "y": 1284.1258130073547,
- "z": "886e5ee7.da286",
+ "x": 2841.597023010254,
+ "y": 1275.1219067573547,
+ "z": "cbb28df7.1359",
"wires": [
[
- "ec7ec9cc.624b18"
+ "3819c097.d5b38"
]
]
},
{
- "id": "ec7ec9cc.624b18",
+ "id": "3819c097.d5b38",
"type": "set",
"name": "set etht-svc-descr",
"xml": "<set>\n<parameter name='prop.global.sotn.etht-svc-descr' value='`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].value`' />\n",
"comments": "",
- "x": 3041.9342460632324,
- "y": 1281.5868878364563,
- "z": "886e5ee7.da286",
+ "x": 2997.9303398132324,
+ "y": 1272.5829815864563,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "e032978.6936268",
+ "id": "410b060d.0c2948",
"type": "switchNode",
"name": "switch tenantId",
"xml": "<switch test=\"`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].name == 'tenantId'`\">\n",
"comments": "",
"outputs": 1,
- "x": 2705.983127593994,
- "y": 1315.4592175483704,
- "z": "886e5ee7.da286",
+ "x": 2661.979221343994,
+ "y": 1306.4553112983704,
+ "z": "cbb28df7.1359",
"wires": [
[
- "a0536f01.8cf66"
+ "2df9d1b1.36383e"
]
]
},
{
- "id": "a0536f01.8cf66",
+ "id": "2df9d1b1.36383e",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2883.9831314086914,
- "y": 1319.4590954780579,
- "z": "886e5ee7.da286",
+ "x": 2839.9792251586914,
+ "y": 1310.4551892280579,
+ "z": "cbb28df7.1359",
"wires": [
[
- "a1009c69.a8fed"
+ "357ff876.835a78"
]
]
},
{
- "id": "a1009c69.a8fed",
+ "id": "357ff876.835a78",
"type": "set",
"name": "set tenantId",
"xml": "<set>\n<parameter name='prop.global.sotn.tenantId' value='`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].value`' />\n",
"comments": "",
- "x": 3021.9833183288574,
- "y": 1316.0590710639954,
- "z": "886e5ee7.da286",
+ "x": 2977.9794120788574,
+ "y": 1307.0551648139954,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "3f331e86.57efa2",
+ "id": "623ff136.8ac42",
"type": "switchNode",
"name": "switch cir",
"xml": "<switch test=\"`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].name == 'cir'`\">\n",
"comments": "",
"outputs": 1,
- "x": 2688.822727203369,
- "y": 1388.4591727256775,
- "z": "886e5ee7.da286",
+ "x": 2644.818820953369,
+ "y": 1379.4552664756775,
+ "z": "cbb28df7.1359",
"wires": [
[
- "937bdc12.dc2f3"
+ "a057011b.3d0e6"
]
]
},
{
- "id": "937bdc12.dc2f3",
+ "id": "a057011b.3d0e6",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2883.8227920532227,
- "y": 1389.4591727256775,
- "z": "886e5ee7.da286",
+ "x": 2839.8188858032227,
+ "y": 1380.4552664756775,
+ "z": "cbb28df7.1359",
"wires": [
[
- "5cef9c18.c1e3e4"
+ "25f349b7.7cabf6"
]
]
},
{
- "id": "5cef9c18.c1e3e4",
+ "id": "25f349b7.7cabf6",
"type": "set",
"name": "set cir",
"xml": "<set>\n<parameter name='prop.sotn.cir' value='`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].value`' />\n",
"comments": "",
- "x": 3008.15629196167,
- "y": 1387.920247554779,
- "z": "886e5ee7.da286",
+ "x": 2964.15238571167,
+ "y": 1378.916341304779,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "b04f73ae.32d85",
+ "id": "805eddea.23b52",
"type": "switchNode",
"name": "switch vpnType",
"xml": "<switch test=\"`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].name == 'vpnType'`\">\n",
"comments": "",
"outputs": 1,
- "x": 2703.131015777588,
- "y": 1351.236882686615,
- "z": "886e5ee7.da286",
+ "x": 2659.127109527588,
+ "y": 1342.232976436615,
+ "z": "cbb28df7.1359",
"wires": [
[
- "56ebc42c.8ac03c"
+ "f566b2bd.002c1"
]
]
},
{
- "id": "56ebc42c.8ac03c",
+ "id": "f566b2bd.002c1",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2885.131202697754,
- "y": 1354.236867427826,
- "z": "886e5ee7.da286",
+ "x": 2841.127296447754,
+ "y": 1345.232961177826,
+ "z": "cbb28df7.1359",
"wires": [
[
- "74808c5.5744174"
+ "69079e30.4f1f7"
]
]
},
{
- "id": "74808c5.5744174",
+ "id": "69079e30.4f1f7",
"type": "set",
"name": "set vpnType",
"xml": "<set>\n<parameter name='prop.global.sotn.vpnType' value='`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].value`' />\n",
"comments": "",
- "x": 3021.464946746826,
- "y": 1350.6981091499329,
- "z": "886e5ee7.da286",
+ "x": 2977.461040496826,
+ "y": 1341.6942028999329,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "d4d17449.0a3768",
+ "id": "3055227f.6b6a0e",
"type": "switchNode",
"name": "switch eir",
"xml": "<switch test=\"`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].name == 'eir'`\">\n",
"comments": "",
"outputs": 1,
- "x": 2684.1130714416504,
- "y": 1422.1570801734924,
- "z": "886e5ee7.da286",
+ "x": 2640.1091651916504,
+ "y": 1413.1531739234924,
+ "z": "cbb28df7.1359",
"wires": [
[
- "f8a0cc6a.69a85"
+ "2ee770d4.d5299"
]
]
},
{
- "id": "f8a0cc6a.69a85",
+ "id": "2ee770d4.d5299",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2884.1133193969727,
- "y": 1425.1570191383362,
- "z": "886e5ee7.da286",
+ "x": 2840.1094131469727,
+ "y": 1416.1531128883362,
+ "z": "cbb28df7.1359",
"wires": [
[
- "f369a42b.d52e88"
+ "b9ec2386.9ae27"
]
]
},
{
- "id": "f369a42b.d52e88",
+ "id": "b9ec2386.9ae27",
"type": "set",
"name": "set eir",
"xml": "<set>\n<parameter name='prop.global.sotn.eir' value='`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].value`' />\n",
"comments": "",
- "x": 3007.4469413757324,
- "y": 1424.6180787086487,
- "z": "886e5ee7.da286",
+ "x": 2963.4430351257324,
+ "y": 1415.6141724586487,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "b369fa7c.e07e38",
+ "id": "830a582f.f084d8",
"type": "switchNode",
"name": "switch colorAware",
"xml": "<switch test=\"`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].name == 'colorAware'`\">\n",
"comments": "",
"outputs": 1,
- "x": 2709.113681793213,
- "y": 1456.1569590568542,
- "z": "886e5ee7.da286",
+ "x": 2665.109775543213,
+ "y": 1447.1530528068542,
+ "z": "cbb28df7.1359",
"wires": [
[
- "6206f9dc.040438"
+ "e42ebbc6.466e88"
]
]
},
{
- "id": "6206f9dc.040438",
+ "id": "e42ebbc6.466e88",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2880.1135025024414,
- "y": 1462.1568975448608,
- "z": "886e5ee7.da286",
+ "x": 2836.1095962524414,
+ "y": 1453.1529912948608,
+ "z": "cbb28df7.1359",
"wires": [
[
- "be68a268.af6ac"
+ "6fd3f45c.5fea2c"
]
]
},
{
- "id": "be68a268.af6ac",
+ "id": "6fd3f45c.5fea2c",
"type": "set",
"name": "set colorAware",
"xml": "<set>\n<parameter name='prop.global.sotn.colorAware' value='`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].value`' />\n",
"comments": "",
- "x": 3028.44681930542,
- "y": 1462.6181101799011,
- "z": "886e5ee7.da286",
+ "x": 2984.44291305542,
+ "y": 1453.6142039299011,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "642263f7.dd00fc",
+ "id": "f77b8935.e0ba38",
"type": "switchNode",
"name": "switch couplingFlag",
"xml": "<switch test=\"`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].name == 'couplingFlag'`\">\n",
"comments": "",
"outputs": 1,
- "x": 2711.1136207580566,
- "y": 1492.1570210456848,
- "z": "886e5ee7.da286",
+ "x": 2667.1097145080566,
+ "y": 1483.1531147956848,
+ "z": "cbb28df7.1359",
"wires": [
[
- "fa5db057.82465"
+ "66020844.5e3b48"
]
]
},
{
- "id": "fa5db057.82465",
+ "id": "66020844.5e3b48",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2883.1135025024414,
- "y": 1501.1569905281067,
- "z": "886e5ee7.da286",
+ "x": 2839.1095962524414,
+ "y": 1492.1530842781067,
+ "z": "cbb28df7.1359",
"wires": [
[
- "6df9a5ad.64aebc"
+ "74a5b014.5554d"
]
]
},
{
- "id": "6df9a5ad.64aebc",
+ "id": "74a5b014.5554d",
"type": "set",
"name": "set couplingFlag",
"xml": "<set>\n<parameter name='prop.global.sotn.couplingFlag' value='`$tmp.network.network-data.network-request-input.network-input-parameters.param[$nidx].value`' />\n",
"comments": "",
- "x": 3036.44681930542,
- "y": 1501.6181111335754,
- "z": "886e5ee7.da286",
+ "x": 2992.44291305542,
+ "y": 1492.6142048835754,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "dcfbfca6.40021",
+ "id": "4bea378a.ee8c98",
"type": "comment",
"name": "Check if other EP exists in SOTNConnectionResource",
"info": "",
"comments": "",
- "x": 2842.316650390625,
- "y": 1110.7923583984375,
- "z": "886e5ee7.da286",
+ "x": 2798.312744140625,
+ "y": 1101.7884521484375,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "d09beabc.c794f8",
+ "id": "c5b17466.a418c8",
"type": "comment",
"name": "Get other global parameters from network",
"info": "",
"comments": "",
- "x": 2778.31640625,
- "y": 1196.7923583984375,
- "z": "886e5ee7.da286",
+ "x": 2734.3125,
+ "y": 1187.7884521484375,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "6cf22112.6f2ff",
+ "id": "b4347cf5.49bc8",
"type": "switchNode",
"name": "switch access-provider-id",
"xml": "<switch test=\"`$tmp.ep.parameters.param[$idx].name == 'access-provider-id'`\">",
"comments": "",
"outputs": 1,
- "x": 1726.5387592315674,
- "y": 1458.2368874549866,
- "z": "886e5ee7.da286",
+ "x": 1682.5348529815674,
+ "y": 1449.2329812049866,
+ "z": "cbb28df7.1359",
"wires": [
[
- "c84add66.981c8"
+ "1b940064.8ad79"
]
]
},
{
- "id": "c84add66.981c8",
+ "id": "1b940064.8ad79",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1913.5387592315674,
- "y": 1454.2368874549866,
- "z": "886e5ee7.da286",
+ "x": 1869.5348529815674,
+ "y": 1445.2329812049866,
+ "z": "cbb28df7.1359",
"wires": [
[
- "d4a1069.e5c08f8"
+ "427c462c.3a8218"
]
]
},
{
- "id": "d4a1069.e5c08f8",
+ "id": "427c462c.3a8218",
"type": "set",
"name": "set access-provider-id",
"xml": "<set>\n<parameter name='prop.remote.connection-attachment.access-provider-id' value='`$tmp.ep.parameters.param[$idx].value`' />\n",
"comments": "",
- "x": 2081.5387592315674,
- "y": 1454.8368935585022,
- "z": "886e5ee7.da286",
+ "x": 2037.5348529815674,
+ "y": 1445.8329873085022,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "447be204.cdf4fc",
+ "id": "5c76f693.8395f8",
"type": "switchNode",
"name": "switch access-client-id",
"xml": "<switch test=\"`$tmp.ep.parameters.param[$idx].name == 'access-client-id'`\">",
"comments": "",
"outputs": 1,
- "x": 1717.5387744903564,
- "y": 1501.2473359107971,
- "z": "886e5ee7.da286",
+ "x": 1673.5348682403564,
+ "y": 1492.2434296607971,
+ "z": "cbb28df7.1359",
"wires": [
[
- "ced037b4.e37178"
+ "8078ffd1.06781"
]
]
},
{
- "id": "ced037b4.e37178",
+ "id": "8078ffd1.06781",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1904.5387744903564,
- "y": 1497.2473359107971,
- "z": "886e5ee7.da286",
+ "x": 1860.5348682403564,
+ "y": 1488.2434296607971,
+ "z": "cbb28df7.1359",
"wires": [
[
- "f03bab32.57be38"
+ "ee89727e.012f2"
]
]
},
{
- "id": "f03bab32.57be38",
+ "id": "ee89727e.012f2",
"type": "set",
"name": "set access-client-id",
"xml": "<set>\n<parameter name='prop.remote.connection-attachment.access-client-id' value='`$tmp.ep.parameters.param[$idx].value`' />\n",
"comments": "",
- "x": 2072.5387744903564,
- "y": 1497.8473420143127,
- "z": "886e5ee7.da286",
+ "x": 2028.5348682403564,
+ "y": 1488.8434357643127,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "3722b20a.c8338e",
+ "id": "59d53676.123ac8",
"type": "switchNode",
"name": "switch access-topology-id",
"xml": "<switch test=\"`$tmp.ep.parameters.param[$idx].name == 'access-topology-id'`\">",
"comments": "",
"outputs": 1,
- "x": 1730.538719177246,
- "y": 1543.2473669052124,
- "z": "886e5ee7.da286",
+ "x": 1686.534812927246,
+ "y": 1534.2434606552124,
+ "z": "cbb28df7.1359",
"wires": [
[
- "b6a6f2db.60fe6"
+ "ad434cbd.d2efc"
]
]
},
{
- "id": "b6a6f2db.60fe6",
+ "id": "ad434cbd.d2efc",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 1917.538719177246,
- "y": 1539.2473669052124,
- "z": "886e5ee7.da286",
+ "x": 1873.534812927246,
+ "y": 1530.2434606552124,
+ "z": "cbb28df7.1359",
"wires": [
[
- "e9af1870.fc5978"
+ "2b625bb5.d8dfe4"
]
]
},
{
- "id": "e9af1870.fc5978",
+ "id": "2b625bb5.d8dfe4",
"type": "set",
"name": "set access-topology-id",
"xml": "<set>\n<parameter name='prop.remote.connection-attachment.access-topology-id' value='`$tmp.ep.parameters.param[$idx].value`' />\n",
"comments": "",
- "x": 2085.538719177246,
- "y": 1539.847373008728,
- "z": "886e5ee7.da286",
+ "x": 2041.534812927246,
+ "y": 1530.843466758728,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "3edaf3bd.0b304c",
+ "id": "1e38af3f.f6ce71",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1676.0940551757812,
- "y": 1796.3482403755188,
- "z": "886e5ee7.da286",
+ "x": 1637.090217590332,
+ "y": 1803.3444538116455,
+ "z": "cbb28df7.1359",
"wires": [
[
- "13419eef.5a7671",
- "ab382a71.e012a8",
- "518651aa.2aca3",
- "24337100.d599a",
- "12ceff59.6da431",
- "d86cc1ce.6085e",
- "30cf4858.64e188",
- "fa2339a4.1d6f28",
- "f8b8212e.de624",
- "4c07dee.6ce442"
+ "25129de9.186342",
+ "bf4d6589.d6b308",
+ "2c248924.320b46",
+ "97ef93ae.8225c",
+ "71bec3b2.6b692c",
+ "803aa791.a5b668",
+ "55ed92f3.9f37ac",
+ "b5e33c1e.9cd83",
+ "ce79c05a.55781",
+ "23370a9.5aed5f6"
]
]
},
{
- "id": "9cf5ad87.06886",
+ "id": "a8cc5d14.06bf4",
"type": "set",
"name": "set controller data",
"xml": "<set>\n<parameter name='prop.sdncRestApi.thirdpartySdnc.url' value=\"`$tmp.aai.esr-thirdparty-sdnc.esr-system-info-list.esr-system-info[0].service-url`\" />\n<parameter name='prop.sdncRestApi.thirdpartySdnc.user' value=\"`$tmp.aai.esr-thirdparty-sdnc.esr-system-info-list.esr-system-info[0].user-name`\" />\n<parameter name='prop.sdncRestApi.thirdpartySdnc.password' value=\"`$tmp.aai.esr-thirdparty-sdnc.esr-system-info-list.esr-system-info[0].password`\" />\n",
"comments": "",
- "x": 2322.538787841797,
- "y": 1876.6815524101257,
- "z": "886e5ee7.da286",
+ "x": 2278.534881591797,
+ "y": 1867.6776461601257,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "f8b8212e.de624",
+ "id": "b5e33c1e.9cd83",
"type": "get-resource",
"name": "get-resource esr-thirdparty-sdnc",
"xml": "<get-resource plugin=\"org.onap.ccsdk.sli.adaptors.aai.AAIService\" \n\t\tresource=\"esr-thirdparty-sdnc\" \n\t\tkey=\"esr-thirdparty-sdnc.thirdparty-sdnc-id = $tmp.thirdparty-sdnc-id AND \n\t\t depth = '1'\"\n pfx='tmp.aai.esr-thirdparty-sdnc' local-only='false' >\n\n",
"comments": "",
"outputs": 1,
- "x": 1939.0386962890625,
- "y": 1913.6814918518066,
- "z": "886e5ee7.da286",
+ "x": 1895.0347900390625,
+ "y": 1904.6775856018066,
+ "z": "cbb28df7.1359",
"wires": [
[
- "2a73c293.cee82e",
- "cd5e3cf0.7e544",
- "e221ac88.e3abb"
+ "f21a66d9.8077a8",
+ "63593a58.c04864",
+ "7c8fedda.36f2d4"
]
]
},
{
- "id": "2a73c293.cee82e",
+ "id": "f21a66d9.8077a8",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 2159.038631439209,
- "y": 1877.6814608573914,
- "z": "886e5ee7.da286",
+ "x": 2115.034725189209,
+ "y": 1868.6775546073914,
+ "z": "cbb28df7.1359",
"wires": [
[
- "9cf5ad87.06886"
+ "a8cc5d14.06bf4"
]
]
},
{
- "id": "cd5e3cf0.7e544",
+ "id": "63593a58.c04864",
"type": "not-found",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 2168.529571533203,
- "y": 1918.2554669380188,
- "z": "886e5ee7.da286",
+ "x": 2124.525665283203,
+ "y": 1909.2515606880188,
+ "z": "cbb28df7.1359",
"wires": [
[
- "73ddc8d7.9cef28"
+ "ba7a24b5.83e278"
]
]
},
{
- "id": "e221ac88.e3abb",
+ "id": "7c8fedda.36f2d4",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 2163.862548828125,
- "y": 1954.5887799263,
- "z": "886e5ee7.da286",
+ "x": 2119.858642578125,
+ "y": 1945.5848736763,
+ "z": "cbb28df7.1359",
"wires": [
[
- "9cd2e5f3.c77dc8"
+ "9d46cc37.6bebe"
]
]
},
{
- "id": "73ddc8d7.9cef28",
+ "id": "ba7a24b5.83e278",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"`'An error occurred while querying esr-thirdparty-sdnc from AnAI with thirdparty-sdnc-id = ' + $tmp.thirdparty-sdnc-id`\" />\n\n",
"comments": "",
- "x": 2315.1009216308594,
- "y": 1914.5412936210632,
- "z": "886e5ee7.da286",
+ "x": 2271.0970153808594,
+ "y": 1905.5373873710632,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "9cd2e5f3.c77dc8",
+ "id": "9d46cc37.6bebe",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"`'Unexpected error occurred while querying esr-thirdparty-sdnc from AnAI with thirdparty-sdnc-id = ' + $tmp.thirdparty-sdnc-id`\" />\n\n",
"comments": "",
- "x": 2318.6351928710938,
- "y": 1956.0279278755188,
- "z": "886e5ee7.da286",
+ "x": 2274.6312866210938,
+ "y": 1947.0240216255188,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "fa2339a4.1d6f28",
+ "id": "55ed92f3.9f37ac",
"type": "get-resource",
"name": "get-resource pnf",
- "xml": "<get-resource plugin=\"org.onap.ccsdk.sli.adaptors.aai.AAIService\" \n\t\tresource=\"pnf\" \n\t\tkey=\"network-resource.network-id = $mdsal-psd.service-data.networks.network[0].network-id \n\t\tAND pnf.pnf-name = $oof.vpn.access-node-id \n\t\tAND depth = '0'\"\n pfx='tmp.aai.pnf' local-only='false' >\n\n\n",
+ "xml": "<get-resource plugin=\"org.onap.ccsdk.sli.adaptors.aai.AAIService\" \n\t\tresource=\"pnf\" \n\t\tkey=\"pnf.pnf-name = $oof.vpn.access-node-id \n\t\tAND depth = '0'\"\n pfx='tmp.aai.pnf' local-only='false' >\n\n\n",
"comments": "",
"outputs": 1,
- "x": 1884.538589477539,
- "y": 1822.6811356544495,
- "z": "886e5ee7.da286",
+ "x": 1840.534683227539,
+ "y": 1813.6772294044495,
+ "z": "cbb28df7.1359",
"wires": [
[
- "346b021b.bac82e",
- "fe6ca97c.41f258",
- "fc66139b.853a"
+ "4c302da.addb0d4",
+ "5d24a360.057f4c",
+ "41a13e1a.fbbb1"
]
]
},
{
- "id": "346b021b.bac82e",
+ "id": "4c302da.addb0d4",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 2066.5386352539062,
- "y": 1767.681245803833,
- "z": "886e5ee7.da286",
+ "x": 2022.5347290039062,
+ "y": 1758.677339553833,
+ "z": "cbb28df7.1359",
"wires": [
[
- "edadbcd1.1307c"
+ "5347e72e.2bfef8"
]
]
},
{
- "id": "fe6ca97c.41f258",
+ "id": "5d24a360.057f4c",
"type": "not-found",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 2067.0295372009277,
- "y": 1805.2553424835205,
- "z": "886e5ee7.da286",
+ "x": 2023.0256309509277,
+ "y": 1796.2514362335205,
+ "z": "cbb28df7.1359",
"wires": [
[
- "df86be3c.187cb"
+ "30e7544d.83010c"
]
]
},
{
- "id": "fc66139b.853a",
+ "id": "41a13e1a.fbbb1",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 2058.362548828125,
- "y": 1838.5887174606323,
- "z": "886e5ee7.da286",
+ "x": 2014.358642578125,
+ "y": 1829.5848112106323,
+ "z": "cbb28df7.1359",
"wires": [
[
- "589f379c.3c1008"
+ "2ea2fe84.d1da82"
]
]
},
{
- "id": "df86be3c.187cb",
+ "id": "30e7544d.83010c",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"`'An error occurred while querying pnf from AnAI with pnf-name = ' + $prop.connection-attachement.access-node-id`\" />\n\n",
"comments": "",
- "x": 2214.601161956787,
- "y": 1804.5412311553955,
- "z": "886e5ee7.da286",
+ "x": 2170.597255706787,
+ "y": 1795.5373249053955,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "589f379c.3c1008",
+ "id": "2ea2fe84.d1da82",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"`'Unexpected error occurred while querying pnf from AnAI with pnf-name = ' + $prop.connection-attachement.access-node-id`\" />\n\n",
"comments": "",
- "x": 2212.1351928710938,
- "y": 1838.027865409851,
- "z": "886e5ee7.da286",
+ "x": 2168.1312866210938,
+ "y": 1829.023959159851,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "edadbcd1.1307c",
+ "id": "5347e72e.2bfef8",
"type": "set",
"name": "set tmp.thirdparty-sdnc-id",
"xml": "<set>\n<parameter name='tmp.thirdparty-sdnc-id' value=\"`$tmp.aai.pnf.relationship-list.relationship[0].relationship-data[0].relationship-value`\" />\n",
"comments": "",
- "x": 2251.5386352539062,
- "y": 1766.6813678741455,
- "z": "886e5ee7.da286",
+ "x": 2207.5347290039062,
+ "y": 1757.6774616241455,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "ca8d7a27.974a78",
+ "id": "d0963e5.17cefc",
"type": "comment",
"name": "get domain controller information",
"info": "",
"comments": "",
- "x": 1935.0425033569336,
- "y": 1789.6850910186768,
- "z": "886e5ee7.da286",
+ "x": 1891.0385971069336,
+ "y": 1780.6811847686768,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "30cf4858.64e188",
+ "id": "23370a9.5aed5f6",
"type": "set",
"name": "set oof.vpn",
"xml": "<set>\n<parameter name='oof.vpn.' value='`$oof.vpns[$vidx].`' />",
"comments": "",
- "x": 1896.538589477539,
- "y": 1743.7922191619873,
- "z": "886e5ee7.da286",
+ "x": 1852.534683227539,
+ "y": 1734.7883129119873,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "ab382a71.e012a8",
+ "id": "bf4d6589.d6b308",
"type": "save",
"name": "save VPN resource in AAI",
"xml": "<save plugin='org.onap.ccsdk.sli.adaptors.aai.AAIService' resource='vpn-binding' \n key='vpn-binding.vpn-id = $tmp.vpnName' >\n<parameter name='vpn-id' value='`$tmp.vpnName`' />\n<parameter name='vpn-name' value='`$tmp.vpnName`' />\n<parameter name='access-provider-id' value='`$oof.vpn.access-provider-id`' />\n<parameter name='access-client-id' value='`$oof.vpn.access-client-id`' />\n<parameter name='access-topology-id' value='`$oof.vpn.access-topology-id`' />\n<parameter name='src-access-node-id' value='`$oof.vpn.access-node-id`' />\n<parameter name='src-access-ltp-id' value='`$oof.vpn.src-access-ltp-id`' />\n<parameter name='dst-access-node-id' value='`$oof.vpn.access-node-id`' />\n<parameter name='dst-access-ltp-id' value='`$oof.vpn.dst-access-ltp-id`' />\n<parameter name='vpn-type' value='`$prop.global.sotn.vpnType`' />\n<parameter name='operational-status' value='Created' />\n<parameter name='model-customization-id' value='`$network-topology-operation-input.network-information.onap-model-information.model-customization-uuid`' />\n<parameter name='model-invariant-id' value='`$network-topology-operation-input.network-information.onap-model-information.model-invariant-uuid`' />\n<parameter name='model-version-id' value='`$network-topology-operation-input.network-information.onap-model-information.model-uuid`' />",
"comments": "",
"outputs": 1,
- "x": 1915.004005432129,
- "y": 2160.7546215057373,
- "z": "886e5ee7.da286",
+ "x": 1871.000099182129,
+ "y": 2151.7507152557373,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "518651aa.2aca3",
+ "id": "2c248924.320b46",
"type": "set",
"name": "set tmp.vpnName",
"xml": "<set>\n<parameter name='tmp.vpnName' value=\"`$oof.vpn.access-node-id + '-' + $prop.global.sotn.etht-svc-name`\" />",
"comments": "",
- "x": 1891.504005432129,
- "y": 2113.2543182373047,
- "z": "886e5ee7.da286",
+ "x": 1847.500099182129,
+ "y": 2104.2504119873047,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "24337100.d599a",
+ "id": "97ef93ae.8225c",
"type": "save",
"name": "save connectivity relationship in AAI",
"xml": "<save plugin='org.onap.ccsdk.sli.adaptors.aai.AAIService' resource='vpn-binding:relationship-list' \n key='vpn-binding.vpn-id = $tmp.vpnName' \n force=\"true\" pfx=\"tmp.AnAI-data\">\n<parameter name=\"relationship-list.relationship[0].related-to\" value=\"connectivity\" />\n<parameter name=\"relationship-list.relationship[0].related-link\" value=\"`'/network/connectivities/connectivity/' + $mdsal-psd.service-data.networks.network[0].network-id`\" />\n<parameter name=\"relationship-list.relationship[0].relationship-data[0].relationship-key\" value=\"connectivity.connectivity-id\" />\n<parameter name=\"relationship-list.relationship[0].relationship-data[0].relationship-value\" value=\"`$mdsal-psd.service-data.networks.network[0].network-id`\" />",
"comments": "",
"outputs": 1,
- "x": 1950.004005432129,
- "y": 2205.7543773651123,
- "z": "886e5ee7.da286",
+ "x": 1906.000099182129,
+ "y": 2196.7504711151123,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "abe0f3b4.f562f",
+ "id": "cc0d73cc.20adc",
"type": "comment",
"name": "save vpn and its relation to AAI",
"info": "",
"comments": "",
- "x": 1933.0042037963867,
- "y": 2074.754587173462,
- "z": "886e5ee7.da286",
+ "x": 1889.0002975463867,
+ "y": 2065.750680923462,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "13419eef.5a7671",
+ "id": "25129de9.186342",
"type": "set",
"name": "set src-ltpId dst-ltpId",
"xml": "<set>\n<parameter name='src-ltpId' value=\"`'nodeId-' + $oof.vpn.access-node-id + '-ltpId-' + $oof.vpn.src-access-ltp-id`\" />\n<parameter name='dst-ltpId' value=\"`'nodeId-' + $oof.vpn.access-node-id + '-ltpId-' + $oof.vpn.dst-access-ltp-id`\" />",
"comments": "",
- "x": 1902.004035949707,
- "y": 2245.754497528076,
- "z": "886e5ee7.da286",
+ "x": 1858.000129699707,
+ "y": 2236.750591278076,
+ "z": "cbb28df7.1359",
"wires": []
},
{
- "id": "12ceff59.6da431",
+ "id": "71bec3b2.6b692c",
"type": "save",
"name": "save srcLTP relationship in AAI",
- "xml": "<save plugin='org.onap.ccsdk.sli.adaptors.aai.AAIService' resource='vpn-binding:relationship-list' \n key='vpn-binding.vpn-id = $tmp.vpnName' \n force=\"true\" pfx=\"tmp.AnAI-data\">\n<parameter name=\"relationship-list.relationship[0].related-to\" value=\"p-interface\" />\n<parameter name=\"relationship-list.relationship[0].related-link\" value=\"`'/network/network-resources/network-resource/' + $mdsal-psd.service-data.networks.network[0].network-id + '/pnfs/pnf/' + $oof.vpn.access-node-id '/p-interfaces/p-interface/' + $src-ltpId`\" />\n<parameter name=\"relationship-list.relationship[0].relationship-data[0].relationship-key\" value=\"p-interface.interface-name\" />\n<parameter name=\"relationship-list.relationship[0].relationship-data[0].relationship-value\" value=\"`$src-ltpId`\" />\n\n\n\n",
+ "xml": "<save plugin='org.onap.ccsdk.sli.adaptors.aai.AAIService' resource='vpn-binding:relationship-list' \n key='vpn-binding.vpn-id = $tmp.vpnName' \n force=\"true\" pfx=\"tmp.AnAI-data\">\n<parameter name=\"relationship-list.relationship[0].related-to\" value=\"p-interface\" />\n<parameter name=\"relationship-list.relationship[0].related-link\" value=\"`'/network/pnfs/pnf/' + $oof.vpn.access-node-id + '/p-interfaces/p-interface/' + $src-ltpId`\" />\n<parameter name=\"relationship-list.relationship[0].relationship-data[0].relationship-key\" value=\"p-interface.interface-name\" />\n<parameter name=\"relationship-list.relationship[0].relationship-data[0].relationship-value\" value=\"`$src-ltpId`\" />\n\n\n\n",
"comments": "",
"outputs": 1,
- "x": 1936.0039825439453,
- "y": 2285.5043773651123,
- "z": "886e5ee7.da286",
+ "x": 1892.0003814697266,
+ "y": 2276.5008001327515,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "d86cc1ce.6085e",
+ "id": "803aa791.a5b668",
"type": "save",
"name": "save dstLTP relationship in AAI",
- "xml": "<save plugin='org.onap.ccsdk.sli.adaptors.aai.AAIService' resource='vpn-binding:relationship-list' \n key='vpn-binding.vpn-id = $tmp.vpnName' \n force=\"true\" pfx=\"tmp.AnAI-data\">\n<parameter name=\"relationship-list.relationship[0].related-to\" value=\"p-interface\" />\n<parameter name=\"relationship-list.relationship[0].related-link\" value=\"`'/network/network-resources/network-resource/' + $mdsal-psd.service-data.networks.network[0].network-id + '/pnfs/pnf/' + $oof.vpn.access-node-id '/p-interfaces/p-interface/' + $dst-ltpId`\" />\n<parameter name=\"relationship-list.relationship[0].relationship-data[0].relationship-key\" value=\"p-interface.interface-name\" />\n<parameter name=\"relationship-list.relationship[0].relationship-data[0].relationship-value\" value=\"`$dst-ltpId`\" />",
+ "xml": "<save plugin='org.onap.ccsdk.sli.adaptors.aai.AAIService' resource='vpn-binding:relationship-list' \n key='vpn-binding.vpn-id = $tmp.vpnName' \n force=\"true\" pfx=\"tmp.AnAI-data\">\n<parameter name=\"relationship-list.relationship[0].related-to\" value=\"p-interface\" />\n<parameter name=\"relationship-list.relationship[0].related-link\" value=\"`'/network/pnfs/pnf/' + $oof.vpn.access-node-id + '/p-interfaces/p-interface/' + $dst-ltpId`\" />\n<parameter name=\"relationship-list.relationship[0].relationship-data[0].relationship-key\" value=\"p-interface.interface-name\" />\n<parameter name=\"relationship-list.relationship[0].relationship-data[0].relationship-value\" value=\"`$dst-ltpId`\" />",
"comments": "",
"outputs": 1,
- "x": 1934.0039863586426,
- "y": 2331.2543773651123,
- "z": "886e5ee7.da286",
+ "x": 1890.0002136230469,
+ "y": 2322.250638961792,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "44848e46.5ebac",
+ "id": "acc938bc.eae1d8",
"type": "execute",
"name": "execute RestApiCallNode - get-resource connection-attachment-allotted-resource",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='restapiUrl' value='`$prop.controller.url + $tmp.ar-url`' />\n <parameter name='restapiUser' value='`$prop.controller.user`' />\n <parameter name='restapiPassword' value='`$prop.controller.pwd`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='GET' />\n <parameter name=\"responsePrefix\" value=\"mdsal-ar\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 876.0078430175781,
- "y": 596.0078182220459,
- "z": "886e5ee7.da286",
+ "x": 832.0039367675781,
+ "y": 587.0039119720459,
+ "z": "cbb28df7.1359",
"wires": [
[
- "5268ad10.1fbc94",
- "ffb50ed4.11c7e"
+ "a1fbf2bd.6b2d9",
+ "97f58790.fbe988"
]
]
},
{
- "id": "b29f5799.241a78",
+ "id": "d519b726.ce9b88",
"type": "execute",
"name": "execute RestApiCallNode - get-resource parent service data",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='restapiUrl' value='`$prop.controller.url + $tmp.ar-url-psd`' />\n <parameter name='restapiUser' value='`$prop.controller.user`' />\n <parameter name='restapiPassword' value='`$prop.controller.pwd`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='GET' />\n <parameter name=\"responsePrefix\" value=\"mdsal-psd\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 803.0079956054688,
- "y": 823.007981300354,
- "z": "886e5ee7.da286",
+ "x": 759.0040893554688,
+ "y": 814.004075050354,
+ "z": "cbb28df7.1359",
"wires": [
[
- "7ecc4648.197a88",
- "dfe397a0.b9ba28"
+ "76dc332e.fe177c",
+ "cbf3f4e6.00aa98"
]
]
},
{
- "id": "3637e175.005c6e",
+ "id": "8ad08551.c43818",
"type": "execute",
"name": "get parent-service-data url",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace' >\n <parameter name=\"source\" value=\"/restconf/config/GENERIC-RESOURCE-API:services/service/{service-instance-id}/service-data\"/>\n <parameter name=\"outputPath\" value=\"tmp.ar-url-psd\"/>\n <parameter name=\"target\" value=\"{service-instance-id}\"/>\n <parameter name=\"replacement\" value=\"`$tmp.ar.parent-service-instance-id`\"/>\n",
"comments": "",
"outputs": 1,
- "x": 703.0079040527344,
- "y": 786.0078144073486,
- "z": "886e5ee7.da286",
+ "x": 659.0039978027344,
+ "y": 777.0039081573486,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "2865c930.441376",
+ "id": "2fbf3350.d69d7c",
"type": "execute",
"name": "generate tmp.ar-other-url-connection",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace' >\n <parameter name=\"source\" value=\"`$prop.restapi.connection-attachment-allottedresource`\"/>\n <parameter name=\"outputPath\" value=\"tmp.ar-other-url-connection\"/>\n <parameter name=\"target\" value=\"{allotted-resource-id}\"/>\n <parameter name=\"replacement\" value=\"`$tmp.provided-ar.allotted-resource-id`\"/>\n \n\n",
"comments": "",
"outputs": 1,
- "x": 2117.0042572021484,
- "y": 942.3373756408691,
- "z": "886e5ee7.da286",
+ "x": 2073.0003509521484,
+ "y": 933.3334693908691,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "36209682.cdfdca",
+ "id": "51067155.cb254",
"type": "execute",
"name": "execute RestApiCallNode - get-resource connection-attachment-allotted-resource",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='restapiUrl' value='`$prop.controller.url + $tmp.ar-other-url-connection`' />\n <parameter name='restapiUser' value='`$prop.controller.user`' />\n <parameter name='restapiPassword' value='`$prop.controller.pwd`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='GET' />\n <parameter name=\"responsePrefix\" value=\"mdsal-other-ar\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 2254.004898071289,
- "y": 984.8372402191162,
- "z": "886e5ee7.da286",
+ "x": 2210.000991821289,
+ "y": 975.8333339691162,
+ "z": "cbb28df7.1359",
"wires": [
[
- "2877490b.8d1876",
- "bf4a739d.0a26c"
+ "7d7dc112.d678b",
+ "79425b66.b91424"
]
]
},
{
- "id": "2cebb233.b139be",
+ "id": "6ae16eae.42967",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1879.0041770935059,
- "y": 1708.0040254592896,
- "z": "886e5ee7.da286",
+ "x": 1835.0002708435059,
+ "y": 1699.0001192092896,
+ "z": "cbb28df7.1359",
"wires": [
[]
]
},
{
- "id": "431946d9.2130a8",
+ "id": "d86d0f7e.bebac",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1255.9727897644043,
- "y": 1733.0042095184326,
- "z": "886e5ee7.da286",
+ "x": 1211.9688835144043,
+ "y": 1724.0003032684326,
+ "z": "cbb28df7.1359",
"wires": [
[
- "7306bfe1.33065",
- "f51b8e7a.4294a"
+ "dfdb9aed.f71ce8",
+ "14017773.15ade9"
]
]
+ },
+ {
+ "id": "453143a6.32929c",
+ "type": "outcome",
+ "name": "outcome PendingDelete",
+ "xml": "<outcome value='PendingDelete'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 2286.0313415527344,
+ "y": 539.0312976837158,
+ "z": "cbb28df7.1359",
+ "wires": [
+ [
+ "ea213aeb.c1a238"
+ ]
+ ]
+ },
+ {
+ "id": "ea213aeb.c1a238",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 2470.031352996826,
+ "y": 535.0312976837158,
+ "z": "cbb28df7.1359",
+ "wires": [
+ []
+ ]
}
] \ No newline at end of file
diff --git a/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-create.json b/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-create.json
index b785bc4a..0992fa6d 100644
--- a/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-create.json
+++ b/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-create.json
@@ -1,20 +1,20 @@
[
{
- "id": "c96eae79.08813",
+ "id": "e71077a5.449178",
"type": "dgstart",
"name": "DGSTART",
"outputs": 1,
- "x": 100,
- "y": 40,
- "z": "307cdf1d.539fd",
+ "x": 94.00001907348633,
+ "y": 67.0000991821289,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "2bbd4a2b.66a236"
+ "e230874f.1ced38"
]
]
},
{
- "id": "2bbd4a2b.66a236",
+ "id": "e230874f.1ced38",
"type": "service-logic",
"name": "GENERIC-RESOURCE-API ${project.version}",
"module": "GENERIC-RESOURCE-API",
@@ -22,1299 +22,1311 @@
"comments": "",
"xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='GENERIC-RESOURCE-API' version='${project.version}'>",
"outputs": 1,
- "x": 275.00000381469727,
- "y": 112.0000171661377,
- "z": "307cdf1d.539fd",
+ "x": 269.0000228881836,
+ "y": 139.0001163482666,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "7de06dac.f33994"
+ "fda28de9.a9688"
]
]
},
{
- "id": "7de06dac.f33994",
+ "id": "fda28de9.a9688",
"type": "method",
"name": "sotn-attachment-topology-operation-create",
"xml": "<method rpc='sotn-attachment-topology-operation-create' mode='sync'>\n",
"comments": "",
"outputs": 1,
- "x": 263.0001220703125,
- "y": 200,
- "z": "307cdf1d.539fd",
+ "x": 257.0001411437988,
+ "y": 227.0000991821289,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "8a29d369.0bab4"
+ "8e26551b.7dfe18"
]
]
},
{
- "id": "8a29d369.0bab4",
+ "id": "8e26551b.7dfe18",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 183.00005340576172,
- "y": 949.0002479553223,
- "z": "307cdf1d.539fd",
+ "x": 177.00007247924805,
+ "y": 976.0003471374512,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "51f31211.8f114c",
- "a2a65745.852438",
- "f3044df1.6f232",
- "5ba82df.f35b0d4",
- "2da52da7.95c362",
- "dc7e1c21.4599e",
- "7bdd95f3.db24ac",
- "371cf69b.dabcaa",
- "c34405e1.82d938",
- "46e15a07.ae9ba4",
- "cd08d99a.10abb8",
- "c56a158b.169088",
- "3292b995.f13186",
- "71214832.584f28",
- "23b7a6d1.9a369a",
- "4ebfff40.f0aa5",
- "cb431e44.1b2d7",
- "6c73a0d6.045f8",
- "1f74500.b2f7fb",
- "6d4b764b.a8a308",
- "6e7b925f.51d77c",
- "92f874df.f4a158",
- "ea8d2a7c.dc1c98",
- "5a956e5b.11a09"
+ "c93c04d7.3e5348",
+ "9950e65d.3636a8",
+ "1ae547a2.eaba88",
+ "65f23dcc.6522b4",
+ "3e30e763.22be28",
+ "aa28416d.6d08a",
+ "15ca2e29.9a7dd2",
+ "9b1a0521.5c3978",
+ "f24b78b1.fdc468",
+ "a64f1b8.759c3e8",
+ "ab5d9313.ad157",
+ "6c39c83c.d7b048",
+ "8b5e7723.d59fc8",
+ "6b976d2c.2711d4",
+ "c9e7bba5.2bcb28",
+ "5aa40ff8.faf21",
+ "46cb4068.e43d3",
+ "8bddffb6.5284",
+ "abedf313.5d507",
+ "fac542dd.1d112",
+ "b07d75d2.a2b088",
+ "26fdc495.60ac0c",
+ "a63f9a77.c174a8",
+ "e02c5c21.82a2",
+ "bde5bdf6.37338"
]
]
},
{
- "id": "dceaac22.2856",
+ "id": "c90f1d50.24dc",
"type": "comment",
"name": "Set allotted resource id if not sent by SO",
"info": "",
"comments": "",
- "x": 667.0767517089844,
- "y": 109.4339189529419,
- "z": "307cdf1d.539fd",
+ "x": 661.0767707824707,
+ "y": 136.4340181350708,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "51f31211.8f114c",
+ "id": "c93c04d7.3e5348",
"type": "switchNode",
"name": "switch allotted-resource-id",
"xml": "<switch test='`$connection-attachment-topology-operation-input.allotted-resource-information.allotted-resource-id`'>\n",
"comments": "",
"outputs": 1,
- "x": 613.0000305175781,
- "y": 164.99999237060547,
- "z": "307cdf1d.539fd",
+ "x": 607.0000495910645,
+ "y": 192.00009155273438,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "5d06a5f3.384e7c",
- "a9453642.a0afc8"
+ "213269bc.4275f6",
+ "6419db5e.a2c0c4"
]
]
},
{
- "id": "5d06a5f3.384e7c",
+ "id": "213269bc.4275f6",
"type": "outcome",
"name": "NULL",
"xml": "<outcome value=''>",
"comments": "",
"outputs": 1,
- "x": 811.0001182556152,
- "y": 134.99998092651367,
- "z": "307cdf1d.539fd",
+ "x": 805.0001373291016,
+ "y": 162.00008010864258,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "b367b4cb.81eda8"
+ "eccd2036.554d7"
]
]
},
{
- "id": "a9453642.a0afc8",
+ "id": "6419db5e.a2c0c4",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 810.0000267028809,
- "y": 171.99999141693115,
- "z": "307cdf1d.539fd",
+ "x": 804.0000457763672,
+ "y": 199.00009059906006,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "b2cd00b8.57706"
+ "4ab8dc05.8f0984"
]
]
},
{
- "id": "b2cd00b8.57706",
+ "id": "4ab8dc05.8f0984",
"type": "set",
"name": "set tmp.ar.allotted-resource-id",
"xml": "<set>\n<parameter name='tmp.ar.allotted-resource-id' value='`$connection-attachment-topology-operation-input.allotted-resource-information.allotted-resource-id`' />\n",
"comments": "",
- "x": 1008.0000152587891,
- "y": 169.00001049041748,
- "z": "307cdf1d.539fd",
+ "x": 1002.0000343322754,
+ "y": 196.0001096725464,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "a2a65745.852438",
+ "id": "9950e65d.3636a8",
"type": "set",
"name": "set tmp.ar.self-link",
"xml": "<set>\n<parameter name='tmp.ar.self-link' value=\"`'restconf/config/GENERIC-RESOURCE-API:connection-attachment-allotted-resources/connection-attachment-allotted-resource/'\n + $tmp.ar.allotted-resource-id\n + '/allotted-resource-data/connection-attachment-topology/'` \" />\n\n",
"comments": "",
- "x": 580.9999542236328,
- "y": 386.0000991821289,
- "z": "307cdf1d.539fd",
+ "x": 574.9999732971191,
+ "y": 413.0001983642578,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "f3044df1.6f232",
+ "id": "1ae547a2.eaba88",
"type": "execute",
"name": "execute Properties",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/generic-resource-api-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
"comments": "",
"outputs": 1,
- "x": 581.2618713378906,
- "y": 467.66678047180176,
- "z": "307cdf1d.539fd",
+ "x": 575.261890411377,
+ "y": 494.66687965393066,
+ "z": "ab45b2a0.2d254",
"wires": [
[]
]
},
{
- "id": "5ba82df.f35b0d4",
+ "id": "65f23dcc.6522b4",
"type": "execute",
"name": "generate allotted-resource tmp.ar-url",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace' >\n <parameter name=\"source\" value=\"`$prop.restapi.connection-attachment-allottedresource`\"/>\n <parameter name=\"outputPath\" value=\"tmp.ar-url\"/>\n <parameter name=\"target\" value=\"{allotted-resource-id}\"/>\n <parameter name=\"replacement\" value=\"`$tmp.ar.allotted-resource-id`\"/>\n",
"comments": "",
"outputs": 1,
- "x": 634.2619323730469,
- "y": 554.6666984558105,
- "z": "307cdf1d.539fd",
+ "x": 628.2619514465332,
+ "y": 581.6667976379395,
+ "z": "ab45b2a0.2d254",
"wires": [
[]
]
},
{
- "id": "b367b4cb.81eda8",
+ "id": "eccd2036.554d7",
"type": "execute",
"name": "execute tmp.ar.allotted-resource-id",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='generateUUID' >\n<parameter name=\"ctx-destination\" value=\"tmp.ar.allotted-resource-id\"/>\n",
"comments": "",
"outputs": 1,
- "x": 1026.0000953674316,
- "y": 135.99998664855957,
- "z": "307cdf1d.539fd",
+ "x": 1020.000114440918,
+ "y": 163.00008583068848,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "a3bb33e3.15368"
+ "90c2cdec.e7c9c"
]
]
},
{
- "id": "a3bb33e3.15368",
+ "id": "90c2cdec.e7c9c",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1244.0001373291016,
- "y": 135.99995040893555,
- "z": "307cdf1d.539fd",
+ "x": 1238.000156402588,
+ "y": 163.00004959106445,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "1a685e2d.8d4cc2"
+ "a192b9fd.7610f8"
]
]
},
{
- "id": "1a685e2d.8d4cc2",
+ "id": "a192b9fd.7610f8",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n<parameter name='error-code' value='' />\n<parameter name='error-message' value=\"An error occured while generation allotted resource ID\" />\n",
"comments": "",
- "x": 1410.0000915527344,
- "y": 135.9999647140503,
- "z": "307cdf1d.539fd",
+ "x": 1404.0001106262207,
+ "y": 163.0000638961792,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "8b5477db.c5c9d8",
+ "id": "66a512c5.0faacc",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 1140.0002307891846,
- "y": 626.777871131897,
- "z": "307cdf1d.539fd",
+ "x": 1134.000249862671,
+ "y": 653.7779703140259,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "5b1e701f.600c"
+ "19566392.15832c"
]
]
},
{
- "id": "cc9f7f26.8914e",
+ "id": "2a3354d7.ee765c",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"Error: Existing connection attachment allotted resource\" />\n \n",
"comments": "",
- "x": 1873.5186100006104,
- "y": 627.8439426422119,
- "z": "307cdf1d.539fd",
+ "x": 1867.5186290740967,
+ "y": 654.8440418243408,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "65a2f2cb.5edd4c",
+ "id": "70da4f2f.1d3ca",
"type": "comment",
"name": "Check for non existence of allotted resource",
"info": "",
"comments": "",
- "x": 996.0001525878906,
- "y": 560.7779378890991,
- "z": "307cdf1d.539fd",
+ "x": 990.000171661377,
+ "y": 587.778037071228,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "2eaa291f.8f6b46",
+ "id": "66ac283c.bd2348",
"type": "for",
"name": "for cidx..service-data.consumed-allotted-resources.consumed-allotted-resource[]",
"xml": "<for index='cidx' start='0' end='`$service-data.consumed-allotted-resources.consumed-allotted-resource_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 1516.6666984558105,
- "y": 771.0000503063202,
- "z": "307cdf1d.539fd",
+ "x": 1510.6667175292969,
+ "y": 798.0001494884491,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "1bef4b2b.0d1235"
+ "c03dacc1.547db"
]
]
},
{
- "id": "dc7e1c21.4599e",
+ "id": "aa28416d.6d08a",
"type": "switchNode",
"name": "switch service-data.consumed-allotted-resources_length",
"xml": "<switch test='`$service-data.consumed-allotted-resources.consumed-allotted-resource_length`'>\n",
"comments": "",
"outputs": 1,
- "x": 698.6660232543945,
- "y": 747.7140827178955,
- "z": "307cdf1d.539fd",
+ "x": 692.6660423278809,
+ "y": 774.7141819000244,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "f0ad968c.edb0a8",
- "6ec4508a.edb8"
+ "ae723a2a.13be98",
+ "1678938e.1bfafc"
]
]
},
{
- "id": "f0ad968c.edb0a8",
+ "id": "ae723a2a.13be98",
"type": "other",
"name": "outcome Null",
"xml": "<outcome value=''>\n",
"comments": "",
"outputs": 1,
- "x": 1002.8089218139648,
- "y": 716.5715198516846,
- "z": "307cdf1d.539fd",
+ "x": 996.8089408874512,
+ "y": 743.5716190338135,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "1bdd00e8.bfe58f"
+ "9ff14f9b.0b3b"
]
]
},
{
- "id": "6ec4508a.edb8",
+ "id": "1678938e.1bfafc",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 979.8089714050293,
- "y": 777.5714750289917,
- "z": "307cdf1d.539fd",
+ "x": 973.8089904785156,
+ "y": 804.5715742111206,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "db245e97.27431"
+ "79d1a933.7fd6a8"
]
]
},
{
- "id": "db245e97.27431",
+ "id": "79d1a933.7fd6a8",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1139.9360618591309,
- "y": 775.6974515914917,
- "z": "307cdf1d.539fd",
+ "x": 1133.9360809326172,
+ "y": 802.6975507736206,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "2eaa291f.8f6b46",
- "493dd1d2.fc196",
- "23139ea3.633f22"
+ "66ac283c.bd2348",
+ "3b659fae.e519",
+ "a32862a8.8af3d"
]
]
},
{
- "id": "1bdd00e8.bfe58f",
+ "id": "9ff14f9b.0b3b",
"type": "set",
"name": "set cidx",
"xml": "<set>\n<parameter name='tmp.cidx' value=\"`0`\" />\n<parameter name='service-data.consumed-allotted-resources.consumed-allotted-resource_length' value=\"1\" />\n\n\n",
"comments": "",
- "x": 1152.6659049987793,
- "y": 714.2855701446533,
- "z": "307cdf1d.539fd",
+ "x": 1146.6659240722656,
+ "y": 741.2856693267822,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "7bdd95f3.db24ac",
+ "id": "15ca2e29.9a7dd2",
"type": "set",
"name": "set consumed allotted resources",
"xml": "<set>\n<parameter name='service-data.consumed-allotted-resources.consumed-allotted-resource[$tmp.cidx].allotted-resource-id' value=\"`$tmp.ar.allotted-resource-id` \" />\n<parameter name='service-data.consumed-allotted-resources.consumed-allotted-resource[$tmp.cidx].allotted-resource-type' value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.allotted-resource-type` \" />\n<parameter name='service-data.consumed-allotted-resources.consumed-allotted-resource[$tmp.cidx].allotted-resource-pointer' value=\"`$tmp.ar.self-link` \" />\n<parameter name='service-data.consumed-allotted-resources.consumed-allotted-resource_length' value='`$tmp.cidx + 1`' />\n\n",
"comments": "",
- "x": 627.5233154296875,
- "y": 851.285647392273,
- "z": "307cdf1d.539fd",
+ "x": 621.5233345031738,
+ "y": 878.2857465744019,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "493dd1d2.fc196",
+ "id": "3b659fae.e519",
"type": "switchNode",
"name": "switch tmp.found-cidx",
"xml": "<switch test='`$tmp.found-cidx`'>\n",
"comments": "",
"outputs": 1,
- "x": 1329.0511093139648,
- "y": 807.7089743614197,
- "z": "307cdf1d.539fd",
+ "x": 1323.0511283874512,
+ "y": 834.7090735435486,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "2ccff848.6a8838"
+ "966db31a.47786"
]
]
},
{
- "id": "2ccff848.6a8838",
+ "id": "966db31a.47786",
"type": "outcomeTrue",
"name": "false",
"xml": "<outcome value='false'>\n",
"comments": "",
"outputs": 1,
- "x": 1519.0510635375977,
- "y": 807.7089114189148,
- "z": "307cdf1d.539fd",
+ "x": 1513.051082611084,
+ "y": 834.7090106010437,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "d5d85369.7e688"
+ "b95410b0.660fd"
]
]
},
{
- "id": "d5d85369.7e688",
+ "id": "b95410b0.660fd",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1685.0510635375977,
- "y": 807.7089114189148,
- "z": "307cdf1d.539fd",
+ "x": 1679.051082611084,
+ "y": 834.7090106010437,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "fa8e9142.85d7d"
+ "2ab57899.a130b8"
]
]
},
{
- "id": "1bef4b2b.0d1235",
+ "id": "c03dacc1.547db",
"type": "switchNode",
"name": "switch allotted-resource-id",
"xml": "<switch test=\"`$service-data.consumed-allotted-resources.consumed-allotted-resource[$cidx].allotted-resource-id == $tmp.ar.allotted-resource-id`\">\n\n",
"comments": "",
"outputs": 1,
- "x": 1933.7783279418945,
- "y": 768.0000772476196,
- "z": "307cdf1d.539fd",
+ "x": 1927.7783470153809,
+ "y": 795.0001764297485,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "39a011f4.26c90e"
+ "ba9ad589.8abb58"
]
]
},
{
- "id": "39a011f4.26c90e",
+ "id": "ba9ad589.8abb58",
"type": "outcomeTrue",
"name": "true",
"xml": "<outcome value='true'>\n",
"comments": "",
"outputs": 1,
- "x": 2115.587902069092,
- "y": 768.464524269104,
- "z": "307cdf1d.539fd",
+ "x": 2109.587921142578,
+ "y": 795.4646234512329,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "3bd67468.05082c"
+ "ef75ff36.6e6a8"
]
]
},
{
- "id": "fa8e9142.85d7d",
+ "id": "2ab57899.a130b8",
"type": "set",
"name": "set tmp.cidx",
"xml": "<set>\n<parameter name='tmp.cidx' value='`$service-data.consumed-allotted-resources.consumed-allotted-resource_length`' />\n",
"comments": "",
- "x": 1846.924446105957,
- "y": 807.2206125259399,
- "z": "307cdf1d.539fd",
+ "x": 1840.9244651794434,
+ "y": 834.2207117080688,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "45f09705.29f058",
+ "id": "e6f158d3.3c83a8",
"type": "comment",
"name": "Add to consumed service consumed-allotted-resources in mdsal",
"info": "Prepare data and add to service-data",
"comments": "",
- "x": 719.667236328125,
- "y": 678.0000467300415,
- "z": "307cdf1d.539fd",
+ "x": 713.6672554016113,
+ "y": 705.0001459121704,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "7472ca93.259114",
+ "id": "464592d5.7d3adc",
"type": "comment",
"name": "This set resource will be added to MDSAL by provider code",
"info": "Below we add to service-data.consumed-allotted-resource at last index",
"comments": "",
- "x": 707.0001525878906,
- "y": 816.7781391143799,
- "z": "307cdf1d.539fd",
+ "x": 701.000171661377,
+ "y": 843.7782382965088,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "ea8d2a7c.dc1c98",
+ "id": "a63f9a77.c174a8",
"type": "update",
"name": "save AAI allotted-resource",
"xml": "<save plugin=\"org.onap.ccsdk.sli.adaptors.aai.AAIService\" \n\t\tresource=\"allotted-resource\" \n\t\tkey=\"customer.global-customer-id = $connection-attachment-topology-operation-input.service-information.global-customer-id AND\n\t\t\tservice-subscription.service-type = $connection-attachment-topology-operation-input.service-information.subscription-service-type AND\n\t\t\tservice-instance.service-instance-id = $connection-attachment-topology-operation-input.allotted-resource-information.parent-service-instance-id AND\n\t\t\tallotted-resource.id = $tmp.ar.allotted-resource-id\"\n pfx='pfx' local-only='false' force='false'>\n <parameter name=\"id\" value=\"`$tmp.ar.allotted-resource-id`\" />\n\t<parameter name=\"name\" value=\"`$prop.connection-attachment.sotnVpnName`\" />\n\t<parameter name=\"access-provider-id\" value=\"`$prop.connection-attachment.access-provider-id`\" />\n\t<parameter name=\"access-client-id\" value=\"`$prop.connection-attachment.access-client-id`\" />\n\t<parameter name=\"access-topology-id\" value=\"`$prop.connection-attachment.access-topology-id`\" />\n\t<parameter name=\"access-node-id\" value=\"`$prop.connection-attachment.access-node-id`\" />\n\t<parameter name=\"access-ltp-id\" value=\"`$prop.connection-attachment.access-ltp-id`\" />\t\n\t<parameter name=\"cvlan\" value=\"`$prop.connection-attachment.cVLAN`\" />\n <parameter name=\"vpn-name\" value=\"`$prop.connection-attachment.sotnVpnName`\" />\n\t<parameter name=\"selflink\" value=\"`$tmp.ar.self-link`\" />\n\t<!--parameter name=\"model-invariant-id\" value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.onap-model-information.model-invariant-uuid`\" />\n\t<parameter name=\"model-version-id\" value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.onap-model-information.model-uuid`\" /-->\n\t<parameter name=\"operational-status\" value=\"Created\" />\n",
"comments": "",
"outputs": 1,
- "x": 612.6908721923828,
- "y": 1866.5318479537964,
- "z": "307cdf1d.539fd",
+ "x": 577.6909523010254,
+ "y": 1914.5320167541504,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "951bf335.bca52",
- "3aff12ef.b5135e"
+ "8865c331.63809",
+ "3795c6dc.0749ba"
]
]
},
{
- "id": "951bf335.bca52",
+ "id": "8865c331.63809",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 807.4527854919434,
- "y": 1857.4844913482666,
- "z": "307cdf1d.539fd",
+ "x": 801.4528045654297,
+ "y": 1884.4845905303955,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "5683eb13.db5c34"
+ "4e95350f.9bd78c"
]
]
},
{
- "id": "5683eb13.db5c34",
+ "id": "4e95350f.9bd78c",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"AAI failed\" />\n",
"comments": "",
- "x": 973.9766654968262,
- "y": 1869.1035623550415,
- "z": "307cdf1d.539fd",
+ "x": 967.9766845703125,
+ "y": 1896.1036615371704,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "3aff12ef.b5135e",
+ "id": "3795c6dc.0749ba",
"type": "failure",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 814.5480728149414,
- "y": 1890.2464590072632,
- "z": "307cdf1d.539fd",
+ "x": 808.5480918884277,
+ "y": 1917.246558189392,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "5683eb13.db5c34"
+ "4e95350f.9bd78c"
]
]
},
{
- "id": "9b778367.8c46a",
+ "id": "e8bcac4.3e63b5",
"type": "comment",
"name": "Save Resource to AAI",
"info": "",
"comments": "",
- "x": 589.50048828125,
- "y": 1809.8338623046875,
- "z": "307cdf1d.539fd",
+ "x": 583.5005073547363,
+ "y": 1836.8339614868164,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "9719bb6e.70a358",
+ "id": "9ada057d.8d0ed8",
"type": "comment",
"name": "Set allotted resource type if not sent by SO",
"info": "",
"comments": "",
- "x": 653,
- "y": 218,
- "z": "307cdf1d.539fd",
+ "x": 647.0000190734863,
+ "y": 245.0000991821289,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "2da52da7.95c362",
+ "id": "3e30e763.22be28",
"type": "switchNode",
"name": "switch allotted-resource-type",
"xml": "<switch test='`$connection-attachment-topology-operation-input.allotted-resource-information.allotted-resource-type`'>\n",
"comments": "",
"outputs": 1,
- "x": 614.9233093261719,
- "y": 258.5660562515259,
- "z": "307cdf1d.539fd",
+ "x": 608.9233283996582,
+ "y": 285.5661554336548,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "684d8da4.b880e4",
- "7ce6426e.522ebc"
+ "1b1ef42.aa2a50c",
+ "5b1a6ad6.d32444"
]
]
},
{
- "id": "684d8da4.b880e4",
+ "id": "1b1ef42.aa2a50c",
"type": "outcome",
"name": "NULL",
"xml": "<outcome value=''>",
"comments": "",
"outputs": 1,
- "x": 817.9234619140625,
- "y": 243.56605911254883,
- "z": "307cdf1d.539fd",
+ "x": 811.9234809875488,
+ "y": 270.56615829467773,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "63c4923.3c3426c"
+ "23a0059d.3f004a"
]
]
},
{
- "id": "7ce6426e.522ebc",
+ "id": "5b1a6ad6.d32444",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 810.9232902526855,
- "y": 283.5660791397095,
- "z": "307cdf1d.539fd",
+ "x": 804.9233093261719,
+ "y": 310.5661783218384,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "bca9b7c7.73b158"
+ "e101a8fa.94ec78"
]
]
},
{
- "id": "bca9b7c7.73b158",
+ "id": "e101a8fa.94ec78",
"type": "set",
"name": "set tmp.ar.allotted-resource-type",
"xml": "<set>\n<parameter name='tmp.ar.allotted-resource-type' value='`$connection-attachment-topology-operation-input.allotted-resource-information.allotted-resource-type`' />\n",
"comments": "",
- "x": 1042.9232749938965,
- "y": 283.56608390808105,
- "z": "307cdf1d.539fd",
+ "x": 1036.9232940673828,
+ "y": 310.56618309020996,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "4c5ae3e7.94b54c",
+ "id": "535c3465.db6a5c",
"type": "comment",
"name": "For storage in AAI connection-attachment-topology",
"info": "",
"comments": "",
- "x": 677.9999618530273,
- "y": 353,
- "z": "307cdf1d.539fd",
+ "x": 671.9999809265137,
+ "y": 380.0000991821289,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "566d8977.bdc218",
+ "id": "7158b402.34b20c",
"type": "comment",
"name": "Obtain different URL, template location etc",
"info": "For saving resource information to MDSAL & for AAI",
"comments": "",
- "x": 652.9999465942383,
- "y": 434.8889093399048,
- "z": "307cdf1d.539fd",
+ "x": 646.9999656677246,
+ "y": 461.8890085220337,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "eba557cf.66dec8",
+ "id": "8b7046e5.63a738",
"type": "comment",
"name": "Used for Put AR by id to MDSAL",
"info": "",
"comments": "",
- "x": 619.0000305175781,
- "y": 523.8889265060425,
- "z": "307cdf1d.539fd",
+ "x": 613.0000495910645,
+ "y": 550.8890256881714,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "6d67020a.67de0c",
+ "id": "41e867cd.171798",
"type": "comment",
"name": "Obtain the last index in services",
"info": "ServiceData is added by Provider code",
"comments": "",
- "x": 620.4444732666016,
- "y": 709.8888711929321,
- "z": "307cdf1d.539fd",
+ "x": 614.4444923400879,
+ "y": 736.888970375061,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "1f74500.b2f7fb",
+ "id": "abedf313.5d507",
"type": "set",
"name": "set output to api handler",
"xml": "<set>\n<parameter name='allotted-resource-id' value='`$tmp.ar.allotted-resource-id`' />\n<parameter name='connection-attachment-object-path' value=\"`$tmp.ar.self-link`\"/>\n<parameter name='service-object-path' value=\"`'restconf/config/GENERIC-RESOURCE-API:services/service/'\n + $connection-attachment-topology-operation-input.service-information.service-instance-id\n + '/service-data/service-topology/'`\"/>\n \n",
"comments": "",
- "x": 598.2681350708008,
- "y": 1773.3591890335083,
- "z": "307cdf1d.539fd",
+ "x": 592.2681541442871,
+ "y": 1800.3592882156372,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "6d4b764b.a8a308",
+ "id": "fac542dd.1d112",
"type": "returnSuccess",
"name": "return success",
"xml": "<return status='success'>\n<parameter name=\"ack-final-indicator\" value=\"Y\" />\n<parameter name=\"error-code\" value=\"200\" />\n<parameter name=\"error-message\" value=\"`$error-message`\" />\n",
"comments": "",
- "x": 566.6812324523926,
- "y": 1977.9749908447266,
- "z": "307cdf1d.539fd",
+ "x": 536.6813507080078,
+ "y": 2033.975341796875,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "63c4923.3c3426c",
+ "id": "23a0059d.3f004a",
"type": "set",
"name": "set tmp.ar.allotted-resource-type",
"xml": "<set>\n<parameter name='tmp.ar.allotted-resource-type' value=\"SOTNAttachmentInstance\" />\n",
"comments": "",
- "x": 1057.0001487731934,
- "y": 243.99998569488525,
- "z": "307cdf1d.539fd",
+ "x": 1051.0001678466797,
+ "y": 271.00008487701416,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "e855335b.71b3c",
+ "id": "77c2c758.5059b8",
"type": "call",
"name": "call GENERIC-RESOURCE-API:sotn-get-saved-ar-param",
"xml": "<call module='GENERIC-RESOURCE-API' rpc='sotn-get-saved-ar-param' mode='sync' >\n",
"comments": "",
"outputs": 1,
- "x": 899.9941558837891,
- "y": 1622.4937295913696,
- "z": "307cdf1d.539fd",
+ "x": 893.9941749572754,
+ "y": 1649.4938287734985,
+ "z": "ab45b2a0.2d254",
"wires": [
[]
]
},
{
- "id": "6c73a0d6.045f8",
+ "id": "8bddffb6.5284",
"type": "execute",
"name": "execute RestApiCallNode - PUT AR by id",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.sotn-attachment.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.controller.url + $tmp.ar-url`' />\n <parameter name='restapiUser' value='`$prop.controller.user`' />\n <parameter name='restapiPassword' value='`$prop.controller.pwd`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='PUT' />\n <parameter name=\"responsePrefix\" value=\"mdsal-ar\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 649.0002670288086,
- "y": 1707.0001182556152,
- "z": "307cdf1d.539fd",
+ "x": 643.0002861022949,
+ "y": 1734.0002174377441,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "17f1151d.06a5ab",
- "ccace23a.27702",
- "325329b.e9052d6"
+ "d13a7894.7c9648",
+ "a17ed53e.8a7c48",
+ "2a45ba4f.903ad6"
]
]
},
{
- "id": "17f1151d.06a5ab",
+ "id": "d13a7894.7c9648",
"type": "not-found",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 898.6416206359863,
- "y": 1745.3314485549927,
- "z": "307cdf1d.539fd",
+ "x": 892.6416397094727,
+ "y": 1772.3315477371216,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "503ba1c3.ce81b"
+ "2a58bb37.857ca4"
]
]
},
{
- "id": "ccace23a.27702",
+ "id": "a17ed53e.8a7c48",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 889.6416702270508,
- "y": 1713.8314743041992,
- "z": "307cdf1d.539fd",
+ "x": 883.6416893005371,
+ "y": 1740.8315734863281,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "503ba1c3.ce81b"
+ "2a58bb37.857ca4"
]
]
},
{
- "id": "325329b.e9052d6",
+ "id": "2a45ba4f.903ad6",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 893.3917083740234,
- "y": 1684.1885791793466,
- "z": "307cdf1d.539fd",
+ "x": 887.3917274475098,
+ "y": 1711.1886783614755,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "565609af.5fb058"
+ "4b685690.de2cf8"
]
]
},
{
- "id": "503ba1c3.ce81b",
+ "id": "2a58bb37.857ca4",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"Error updating md-sal for connection-attachment-allotted-resource\" />\n",
"comments": "",
- "x": 1059.3917083740234,
- "y": 1714.5814981460571,
- "z": "307cdf1d.539fd",
+ "x": 1053.3917274475098,
+ "y": 1741.581597328186,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "565609af.5fb058",
+ "id": "4b685690.de2cf8",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1035.0476760864258,
- "y": 1680.3807483687997,
- "z": "307cdf1d.539fd",
+ "x": 1029.047695159912,
+ "y": 1707.3808475509286,
+ "z": "ab45b2a0.2d254",
"wires": [
[]
]
},
{
- "id": "cd08d99a.10abb8",
+ "id": "ab5d9313.ad157",
"type": "execute",
"name": "execute RestApiCallNode - Update parent provided service AR",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.parentsvc.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.controller.url + $tmp.parent-ar-url`' />\n <parameter name='restapiUser' value='`$prop.controller.user`' />\n <parameter name='restapiPassword' value='`$prop.controller.pwd`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='PUT' />\n <parameter name=\"responsePrefix\" value=\"parent\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 718.9999542236328,
- "y": 1133.0001649856567,
- "z": "307cdf1d.539fd",
+ "x": 712.9999732971191,
+ "y": 1160.0002641677856,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "ef2f7f10.9941b",
- "b03054a4.69fc18",
- "8aa9a171.e089b"
+ "9094ff9e.53d26",
+ "43bc3599.27bffc",
+ "fc9fd873.a374e8"
]
]
},
{
- "id": "ef2f7f10.9941b",
+ "id": "9094ff9e.53d26",
"type": "not-found",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 1027.3080139160156,
- "y": 1164.9984407424927,
- "z": "307cdf1d.539fd",
+ "x": 1021.308032989502,
+ "y": 1191.9985399246216,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "65c0c4d1.41acbc"
+ "421ec30a.485b8c"
]
]
},
{
- "id": "b03054a4.69fc18",
+ "id": "43bc3599.27bffc",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1018.3080635070801,
- "y": 1133.4984664916992,
- "z": "307cdf1d.539fd",
+ "x": 1012.3080825805664,
+ "y": 1160.4985656738281,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "65c0c4d1.41acbc"
+ "421ec30a.485b8c"
]
]
},
{
- "id": "8aa9a171.e089b",
+ "id": "fc9fd873.a374e8",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 1022.0581016540527,
- "y": 1103.8555713668466,
- "z": "307cdf1d.539fd",
+ "x": 1016.0581207275391,
+ "y": 1130.8556705489755,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "c70fcaaf.55a4c8"
+ "c6163b00.f85308"
]
]
},
{
- "id": "65c0c4d1.41acbc",
+ "id": "421ec30a.485b8c",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"Error updating md-sal for connection-attachment-allotted-resource\" />\n",
"comments": "",
- "x": 1188.0581016540527,
- "y": 1134.2484903335571,
- "z": "307cdf1d.539fd",
+ "x": 1182.058120727539,
+ "y": 1161.248589515686,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "c70fcaaf.55a4c8",
+ "id": "c6163b00.f85308",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1163.714069366455,
- "y": 1100.0477405562997,
- "z": "307cdf1d.539fd",
+ "x": 1157.7140884399414,
+ "y": 1127.0478397384286,
+ "z": "ab45b2a0.2d254",
"wires": [
[]
]
},
{
- "id": "4609b233.9d833c",
+ "id": "f91628dc.a22298",
"type": "comment",
"name": "Put the parent allotted resource in mdsal",
"info": "",
"comments": "",
- "x": 647.9999008178711,
- "y": 1095.0000715255737,
- "z": "307cdf1d.539fd",
+ "x": 641.9999198913574,
+ "y": 1122.0001707077026,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "3292b995.f13186",
+ "id": "8b5e7723.d59fc8",
"type": "set",
"name": "set connection-attachment-ar-identifiers",
"xml": "<set>\n<parameter name='connection-attachment-ar-identifiers.consuming-service-instance-id' value=\"`$connection-attachment-topology-operation-input.service-information.service-instance-id` \" />\n<parameter name='connection-attachment-ar-identifiers.parent-service-instance-id' value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.parent-service-instance-id` \" />\n<parameter name='connection-attachment-ar-identifiers.allotted-resource-type' value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.allotted-resource-type` \" />\n<parameter name='connection-attachment-ar-identifiers.allotted-resource-id' value=\"`$tmp.ar.allotted-resource-id` \" />\n\n",
"comments": "",
- "x": 644.3570861816406,
- "y": 1297.5716905593872,
- "z": "307cdf1d.539fd",
+ "x": 638.357105255127,
+ "y": 1324.571789741516,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "c56a158b.169088",
+ "id": "6c39c83c.d7b048",
"type": "set",
"name": "set ar-data",
"xml": "<set>\n<parameter name='connection-attachment-ar.allotted-resource-id' value=\"`$tmp.ar.allotted-resource-id` \" />\n<parameter name='connection-attachment-ar.allotted-resource-status.action' value=\"`$connection-attachment-topology-operation-input.request-information.request-action` \" />\n<parameter name='connection-attachment-ar.allotted-resource-status.rpc-name' value=\"connection-attachment-topology-operation\" />\n<parameter name='connection-attachment-ar.allotted-resource-status.rpc-action' value=\"`$connection-attachment-topology-operation-input.sdnc-request-header.svc-action` \" />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-operation-information.request-information.' value=\"`$connection-attachment-topology-operation-input.request-information.` \" />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-operation-information.sdnc-request-header.' value=\"`$connection-attachment-topology-operation-input.sdnc-request-header.` \" />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-operation-information.service-information.' value=\"`$connection-attachment-topology-operation-input.service-information.` \" />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.' value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.` \" />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-operation-information.connection-attachment-request-input.' value=\"`$connection-attachment-topology-operation-input.connection-attachment-request-input.` \" />",
"comments": "",
- "x": 558.2138671875,
- "y": 1265.3810472488403,
- "z": "307cdf1d.539fd",
+ "x": 552.2138862609863,
+ "y": 1292.3811464309692,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "71214832.584f28",
+ "id": "6b976d2c.2711d4",
"type": "set",
"name": "set identifiers in overall structure",
"xml": "<set>\n<parameter name='connection-attachment-ar.allotted-resource-data.connection-attachment-topology.allotted-resource-identifiers.' \nvalue=\"`$connection-attachment-ar-identifiers.`\" />\n\n\n",
"comments": "",
- "x": 623.1668853759766,
- "y": 1331.6668758392334,
- "z": "307cdf1d.539fd",
+ "x": 617.1669044494629,
+ "y": 1358.6669750213623,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "23b7a6d1.9a369a",
+ "id": "c9e7bba5.2bcb28",
"type": "execute",
"name": "execute getTime",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='setTime' >\n <parameter name=\"outputPath\" value=\"tmp.current-time\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 575.4997253417969,
- "y": 1405.0004034042358,
- "z": "307cdf1d.539fd",
+ "x": 569.4997444152832,
+ "y": 1432.0005025863647,
+ "z": "ab45b2a0.2d254",
"wires": [
[]
]
},
{
- "id": "4ebfff40.f0aa5",
+ "id": "5aa40ff8.faf21",
"type": "set",
"name": "set allotted-resource-oper-status",
"xml": "<set>\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.order-status' value='Created' />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.last-action' value='`$connection-attachment-topology-operation-input.request-information.request-action`' />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.last-rpc-action' value='`$connection-attachment-topology-operation-input.sdnc-request-header.svc-action`' />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.last-svc-request-id' value='`$connection-attachment-topology-operation-input.sdnc-request-header.svc-request-id`' />\n<parameter name='connection-attachment-ar.allotted-resource-data.allotted-resource-oper-status.create-timestamp' value='`$tmp.current-time`' />\n",
"comments": "",
- "x": 626.4867630004883,
- "y": 1460.951636314392,
- "z": "307cdf1d.539fd",
+ "x": 620.4867820739746,
+ "y": 1487.951735496521,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "cb431e44.1b2d7",
+ "id": "46cb4068.e43d3",
"type": "set",
"name": "set model-data",
"xml": "<set>\n<parameter name='connection-attachment-ar.allotted-resource-data.connection-attachment-topology.onap-model-information.' value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.onap-model-information.` \" />",
"comments": "",
- "x": 571.0553817749023,
- "y": 1366.5557613372803,
- "z": "307cdf1d.539fd",
+ "x": 565.0554008483887,
+ "y": 1393.5558605194092,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "10171c26.195644",
+ "id": "b1148074.b83dc",
"type": "comment",
"name": "Prepare data for allotted-resource addition to MDSAL",
"info": "This will add to allotted-resource which is present inside service.",
"comments": "",
- "x": 688.3888702392578,
- "y": 1231.5556077957153,
- "z": "307cdf1d.539fd",
+ "x": 682.3888893127441,
+ "y": 1258.5557069778442,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "46e15a07.ae9ba4",
+ "id": "a64f1b8.759c3e8",
"type": "execute",
"name": "generate parent-ar url - replace allotted-resource-id",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace' >\n <parameter name=\"source\" value=\"`$tmp.parent-ar-url`\"/>\n <parameter name=\"outputPath\" value=\"tmp.parent-ar-url\"/>\n <parameter name=\"target\" value=\"{allotted-resource-id}\"/>\n <parameter name=\"replacement\" value=\"`$tmp.ar.allotted-resource-id`\"/>\n",
"comments": "",
"outputs": 1,
- "x": 683.5000152587891,
- "y": 1059.0000104904175,
- "z": "307cdf1d.539fd",
+ "x": 677.5000343322754,
+ "y": 1086.0001096725464,
+ "z": "ab45b2a0.2d254",
"wires": [
[]
]
},
{
- "id": "c34405e1.82d938",
+ "id": "f24b78b1.fdc468",
"type": "execute",
"name": "generate parent-ar url - replace service-instance-id",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace' >\n <parameter name=\"source\" value=\"`$prop.restapi.parent-provided-resource`\"/>\n <parameter name=\"outputPath\" value=\"tmp.parent-ar-url\"/>\n <parameter name=\"target\" value=\"{service-instance-id}\"/>\n <parameter name=\"replacement\" value=\"`$tmp.ar.parent-service-instance-id`\"/>\n",
"comments": "",
"outputs": 1,
- "x": 679.4999389648438,
- "y": 1016.0001468658447,
- "z": "307cdf1d.539fd",
+ "x": 673.4999580383301,
+ "y": 1043.0002460479736,
+ "z": "ab45b2a0.2d254",
"wires": [
[]
]
},
{
- "id": "a521acad.d004d",
+ "id": "5c890ede.9091d",
"type": "comment",
"name": "Prepare Parent AR URL",
"info": "Preparation to set provided-allotted-resource in parent service instance",
"comments": "",
- "x": 597.5003967285156,
- "y": 945.0001001358032,
- "z": "307cdf1d.539fd",
+ "x": 591.500415802002,
+ "y": 972.0001993179321,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "371cf69b.dabcaa",
+ "id": "9b1a0521.5c3978",
"type": "set",
"name": "set tmp.ar.parent-service-instance-id",
"xml": "<set>\n<parameter name='tmp.ar.parent-service-instance-id' value=\"`$connection-attachment-topology-operation-input.allotted-resource-information.parent-service-instance-id` \" />\n\n",
"comments": "",
- "x": 636.5001907348633,
- "y": 978.5000395774841,
- "z": "307cdf1d.539fd",
+ "x": 630.5002098083496,
+ "y": 1005.500138759613,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "471a396d.b72ac8",
+ "id": "1dce57cb.3a2f28",
"type": "comment",
"name": "Required for filling template values",
"info": "This is done because connection-attachment is generic resource and doesn't have specific parameters",
"comments": "",
- "x": 826.000358581543,
- "y": 1585.4998025894165,
- "z": "307cdf1d.539fd",
+ "x": 820.0003776550293,
+ "y": 1612.4999017715454,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "3bd67468.05082c",
+ "id": "ef75ff36.6e6a8",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"500\" />\n <parameter name=\"error-message\" value=\"Error updating md-sal for connection-attachment-allotted-resource as cosumed allotted resource already exists.\" />\n",
"comments": "",
- "x": 2193.7569732666016,
- "y": 816.6458292007446,
- "z": "307cdf1d.539fd",
+ "x": 2187.756992340088,
+ "y": 843.6459283828735,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "23139ea3.633f22",
+ "id": "a32862a8.8af3d",
"type": "set",
"name": "set tmp.found-cidx",
"xml": "<set>\n<parameter name='tmp.found-cidx' value=\"`false`\" />\n\n\n",
"comments": "",
- "x": 1319.6461448669434,
- "y": 728.3125722408295,
- "z": "307cdf1d.539fd",
+ "x": 1313.6461639404297,
+ "y": 755.3126714229584,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "572750a4.da966",
+ "id": "46efcfd6.a7a1a",
"type": "comment",
"name": "Add to parent services provided-allotted-resources in mdsal",
"info": "",
"comments": "",
- "x": 708.2015075683594,
- "y": 912.9792566299438,
- "z": "307cdf1d.539fd",
+ "x": 702.2015266418457,
+ "y": 939.9793558120728,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "c22af7ab.9a1898",
+ "id": "b6eb1599.cd85e8",
"type": "comment",
"name": "Add to allotted-resources in mdsal",
"info": "",
"comments": "",
- "x": 628.9686965942383,
- "y": 1198.968936920166,
- "z": "307cdf1d.539fd",
+ "x": 622.9687156677246,
+ "y": 1225.969036102295,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "5b1e701f.600c",
+ "id": "19566392.15832c",
"type": "block",
"name": "block: atomic",
"xml": "<block atomic=\"true\">\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1302.000051498413,
- "y": 626.2777605056763,
- "z": "307cdf1d.539fd",
+ "x": 1296.0000705718994,
+ "y": 653.2778596878052,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "f33fd165.6af9d"
+ "be105cba.576f"
]
]
},
{
- "id": "f33fd165.6af9d",
+ "id": "be105cba.576f",
"type": "switchNode",
"name": "switch cr length",
"xml": "<switch test='`$mdsal-ar.connection-attachment-allotted-resource_length`'>\n",
"comments": "",
"outputs": 1,
- "x": 1489.8574314117432,
- "y": 626.8968958854675,
- "z": "307cdf1d.539fd",
+ "x": 1483.8574504852295,
+ "y": 653.8969950675964,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "30bd1249.6e0cce"
+ "a5af4603.e786b8"
]
]
},
{
- "id": "30bd1249.6e0cce",
+ "id": "a5af4603.e786b8",
"type": "other",
"name": "outcome 1",
"xml": "<outcome value='1'>\n",
"comments": "",
"outputs": 1,
- "x": 1689.1905536651611,
- "y": 626.8969745635986,
- "z": "307cdf1d.539fd",
+ "x": 1683.1905727386475,
+ "y": 653.8970737457275,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "cc9f7f26.8914e"
+ "2a3354d7.ee765c"
]
]
},
{
- "id": "6e7b925f.51d77c",
+ "id": "b07d75d2.a2b088",
"type": "execute",
"name": "execute RestApiCallNode - get-resource connection-attachment-allotted-resource",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='restapiUrl' value='`$prop.controller.url + $tmp.ar-url`' />\n <parameter name='restapiUser' value='`$prop.controller.user`' />\n <parameter name='restapiPassword' value='`$prop.controller.pwd`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='GET' />\n <parameter name=\"responsePrefix\" value=\"mdsal-ar\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 774.0000534057617,
- "y": 621.000036239624,
- "z": "307cdf1d.539fd",
+ "x": 768.000072479248,
+ "y": 648.0001354217529,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "8b5477db.c5c9d8",
- "94a8a58d.dee408"
+ "66a512c5.0faacc",
+ "9a3ff920.b9ec88"
]
]
},
{
- "id": "94a8a58d.dee408",
+ "id": "9a3ff920.b9ec88",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1142.0000839233398,
- "y": 591.0000343322754,
- "z": "307cdf1d.539fd",
+ "x": 1136.0001029968262,
+ "y": 618.0001335144043,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "9c37a2ea.b7b0a"
+ "9cab679f.f79248"
]
]
},
{
- "id": "9c37a2ea.b7b0a",
+ "id": "9cab679f.f79248",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1294.0000839233398,
- "y": 590.0000343322754,
- "z": "307cdf1d.539fd",
+ "x": 1288.0001029968262,
+ "y": 617.0001335144043,
+ "z": "ab45b2a0.2d254",
"wires": [
[]
]
},
{
- "id": "92f874df.f4a158",
+ "id": "26fdc495.60ac0c",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 570.5556106567383,
- "y": 1540.6666536331177,
- "z": "307cdf1d.539fd",
+ "x": 564.5556297302246,
+ "y": 1567.6667528152466,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "53c527c9.b22648",
- "e855335b.71b3c"
+ "3267c7d4.904798",
+ "77c2c758.5059b8"
]
]
},
{
- "id": "53c527c9.b22648",
+ "id": "3267c7d4.904798",
"type": "for",
"name": "for each sotn-get-request-input-param",
"xml": "<for index='i' start='0' end='`$connection-attachment-ar.allotted-resource-data.allotted-resource-operation-information.connection-attachment-request-input.param_length`' >\n",
"comments": "",
"outputs": 1,
- "x": 840.5556755065918,
- "y": 1540.6667013168335,
- "z": "307cdf1d.539fd",
+ "x": 834.5556945800781,
+ "y": 1567.6668004989624,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "261e5f2.fe442a"
+ "2605999a.01d556"
]
]
},
{
- "id": "d5857a39.639db8",
+ "id": "2051e6d6.e5a81a",
"type": "comment",
"name": "Take the parameter names by removing prefix",
"info": "",
"comments": "",
- "x": 1380.5554580688477,
- "y": 1496.6667346954346,
- "z": "307cdf1d.539fd",
+ "x": 1374.555477142334,
+ "y": 1523.6668338775635,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "6df2fba8.889c14",
+ "id": "43dec0c4.9aa5a",
"type": "execute",
"name": "execute split parameterName",
"xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split' >\n<parameter name=\"original_string\" value='`$connection-attachment-ar.allotted-resource-data.allotted-resource-operation-information.connection-attachment-request-input.param[$i].name`'/>\n<parameter name=\"regex\" value=\"_\"/>\n<parameter name=\"ctx_memory_result_key\" value=\"param-prefix\"/>\n",
"comments": "",
"outputs": 1,
- "x": 1338.5901260375977,
- "y": 1531.6458778381348,
- "z": "307cdf1d.539fd",
+ "x": 1332.590145111084,
+ "y": 1558.6459770202637,
+ "z": "ab45b2a0.2d254",
"wires": [
[]
]
},
{
- "id": "bd5f9072.2a8a7",
+ "id": "e2d39b7e.8a6eb8",
"type": "set",
"name": "set parameterName",
"xml": "<set>\n<parameter name=\"`connection-attachment-ar.allotted-resource-data.allotted-resource-operation-information.connection-attachment-request-input.param[$i].name`\" value='`$param-prefix[$param-prefix_length -1]`'/>\n",
"comments": "",
- "x": 1309.034652709961,
- "y": 1564.6458778381348,
- "z": "307cdf1d.539fd",
+ "x": 1303.0346717834473,
+ "y": 1591.6459770202637,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "4a2aa60e.ed5c08",
+ "id": "36eb754f.ed7b4a",
"type": "comment",
"name": "Remove VNFC prefix",
"info": "",
"comments": "",
- "x": 781.5556030273438,
- "y": 1508.1110153198242,
- "z": "307cdf1d.539fd",
+ "x": 775.5556221008301,
+ "y": 1535.1111145019531,
+ "z": "ab45b2a0.2d254",
"wires": []
},
{
- "id": "261e5f2.fe442a",
+ "id": "2605999a.01d556",
"type": "block",
"name": "block : atomic",
"xml": "<block atomic=\"true\">",
"atomic": "true",
"outputs": 1,
- "x": 1087.5555114746094,
- "y": 1539.1110458374023,
- "z": "307cdf1d.539fd",
+ "x": 1081.5555305480957,
+ "y": 1566.1111450195312,
+ "z": "ab45b2a0.2d254",
"wires": [
[
- "6df2fba8.889c14",
- "bd5f9072.2a8a7"
+ "43dec0c4.9aa5a",
+ "e2d39b7e.8a6eb8"
]
]
},
{
- "id": "5a956e5b.11a09",
+ "id": "e02c5c21.82a2",
"type": "save",
"name": "save srcLTP relationship in AAI",
- "xml": "<save plugin=\"org.onap.ccsdk.sli.adaptors.aai.AAIService\" \n\t\tresource=\"allotted-resource\" \n\t\tkey=\"customer.global-customer-id = $connection-attachment-topology-operation-input.service-information.global-customer-id AND\n\t\t\tservice-subscription.service-type = $connection-attachment-topology-operation-input.service-information.subscription-service-type AND\n\t\t\tservice-instance.service-instance-id = $connection-attachment-topology-operation-input.allotted-resource-information.parent-service-instance-id AND\n\t\t\tallotted-resource.id = $tmp.ar.allotted-resource-id\" \n force=\"true\" pfx=\"tmp.AnAI-data\">\n<parameter name=\"relationship-list.relationship[0].related-to\" value=\"p-interface\" />\n<parameter name=\"relationship-list.relationship[0].related-link\" value=\"`'/network/pnfs/pnf/' + $prop.connection-attachment.access-node-id + '/p-interfaces/p-interface/' + $prop.connection-attachment.access-ltp-id`\" />\n<parameter name=\"relationship-list.relationship[0].relationship-data[0].relationship-key\" value=\"p-interface.interface-name\" />\n<parameter name=\"relationship-list.relationship[0].relationship-data[0].relationship-value\" value=\"`$src-ltpId`\" />\n\n\n\n",
+ "xml": "<save plugin=\"org.onap.ccsdk.sli.adaptors.aai.AAIService\" \n\t\tresource=\"allotted-resource\" \n\t\tkey=\"customer.global-customer-id = $connection-attachment-topology-operation-input.service-information.global-customer-id AND\n\t\t\tservice-subscription.service-type = $connection-attachment-topology-operation-input.service-information.subscription-service-type AND\n\t\t\tservice-instance.service-instance-id = $connection-attachment-topology-operation-input.allotted-resource-information.parent-service-instance-id AND\n\t\t\tallotted-resource.id = $tmp.ar.allotted-resource-id\" \n force=\"true\" pfx=\"tmp.AnAI-data\">\n<parameter name=\"relationship-list.relationship[0].related-to\" value=\"p-interface\" />\n<parameter name=\"relationship-list.relationship[0].related-link\" value=\"`'/network/pnfs/pnf/' + $prop.connection-attachment.access-node-id + '/p-interfaces/p-interface/' + $src-ltpId`\" />\n<parameter name=\"relationship-list.relationship[0].relationship-data[0].relationship-key\" value=\"p-interface.interface-name\" />\n<parameter name=\"relationship-list.relationship[0].relationship-data[0].relationship-value\" value=\"`$src-ltpId`\" />\n\n\n\n",
"comments": "",
"outputs": 1,
- "x": 619.0039329528809,
- "y": 1925.0039825439453,
- "z": "307cdf1d.539fd",
+ "x": 590.0041046142578,
+ "y": 1988.0046367645264,
+ "z": "ab45b2a0.2d254",
"wires": [
[]
]
+ },
+ {
+ "id": "bde5bdf6.37338",
+ "type": "set",
+ "name": "set src-ltpId",
+ "xml": "<set>\n<parameter name='src-ltpId' value=\"`'nodeId-' + $prop.connection-attachment.access-node-id + '-ltpId-' + $prop.connection-attachment.access-ltp-id`\" />\n",
+ "comments": "",
+ "x": 534.0001983642578,
+ "y": 1952.0004014968872,
+ "z": "ab45b2a0.2d254",
+ "wires": []
}
]
diff --git a/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sotn-network-topology-operation-reoptimize.json b/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sotn-network-topology-operation-reoptimize.json
new file mode 100644
index 00000000..2fc5b3ea
--- /dev/null
+++ b/platform-logic/generic-resource-api/src/main/json/GENERIC-RESOURCE-API_sotn-network-topology-operation-reoptimize.json
@@ -0,0 +1,377 @@
+[
+ {
+ "id": "ba830c79.783fc",
+ "type": "dgstart",
+ "name": "DGSTART",
+ "outputs": 1,
+ "x": 112,
+ "y": 60,
+ "z": "e5bf33cc.860bc",
+ "wires": [
+ [
+ "4ae6deec.cd3f3"
+ ]
+ ]
+ },
+ {
+ "id": "4ae6deec.cd3f3",
+ "type": "service-logic",
+ "name": "GENERIC-RESOURCE-API ${project.version}",
+ "module": "GENERIC-RESOURCE-API",
+ "version": "${project.version}",
+ "comments": "",
+ "xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='GENERIC-RESOURCE-API' version='${project.version}'>",
+ "outputs": 1,
+ "x": 330.49999237060547,
+ "y": 140.9999928767793,
+ "z": "e5bf33cc.860bc",
+ "wires": [
+ [
+ "d2d46081.2fceb"
+ ]
+ ]
+ },
+ {
+ "id": "d2d46081.2fceb",
+ "type": "method",
+ "name": "sotn-network-topology-operation-reoptimize",
+ "xml": "<method rpc='sotn-network-topology-operation-reoptimize' mode='sync'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 331.5,
+ "y": 194,
+ "z": "e5bf33cc.860bc",
+ "wires": [
+ [
+ "36051f70.beb8c"
+ ]
+ ]
+ },
+ {
+ "id": "36051f70.beb8c",
+ "type": "block",
+ "name": "block : atomic",
+ "xml": "<block atomic=\"true\">\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 409.50000762939453,
+ "y": 252.000009059906,
+ "z": "e5bf33cc.860bc",
+ "wires": [
+ [
+ "7af3f162.64be",
+ "def5a09c.a5553",
+ "ecfb074a.096988",
+ "17f9a997.150a06",
+ "a8c6638b.cba29",
+ "59b44687.021ed8"
+ ]
+ ]
+ },
+ {
+ "id": "7af3f162.64be",
+ "type": "set",
+ "name": "set tmp.network.parent-network-id,etc",
+ "xml": "<set>\n<parameter name='tmp.network.network-id' value='`$network-topology-operation-input.network-information.network-id`' />\n<parameter name='tmp.network.service-instance-id' value='`$network-topology-operation-input.service-information.service-instance-id`' />\n\n\n",
+ "comments": "",
+ "x": 757.0000152587891,
+ "y": 147.00000476837158,
+ "z": "e5bf33cc.860bc",
+ "wires": []
+ },
+ {
+ "id": "e6874582.0b2958",
+ "type": "comment",
+ "name": "set tmp connectivity-id to fetch resource from MDSAL",
+ "info": "",
+ "comments": "",
+ "x": 826.9603424072266,
+ "y": 112.03180408477783,
+ "z": "e5bf33cc.860bc",
+ "wires": []
+ },
+ {
+ "id": "def5a09c.a5553",
+ "type": "execute",
+ "name": "execute Properties",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/generic-resource-api-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 700.9999542236328,
+ "y": 230.00000476837158,
+ "z": "e5bf33cc.860bc",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "5022e1ba.bc98c",
+ "type": "comment",
+ "name": "Obtain different URL, template location etc",
+ "info": "For saving resource information to MDSAL & for AAI",
+ "comments": "",
+ "x": 796.7380523681641,
+ "y": 195.22217273712158,
+ "z": "e5bf33cc.860bc",
+ "wires": []
+ },
+ {
+ "id": "ecfb074a.096988",
+ "type": "for",
+ "name": "for pidx..mdsal-psd.service-data.provided-allotted-resources.provided-allotted-resource[]",
+ "xml": "<for index='pidx' start='0' end='`$service-data.provided-allotted-resources.provided-allotted-resource_length`' >\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 911.0000991821289,
+ "y": 312.0000705718994,
+ "z": "e5bf33cc.860bc",
+ "wires": [
+ [
+ "d7a2d973.f454d8"
+ ]
+ ]
+ },
+ {
+ "id": "d7a2d973.f454d8",
+ "type": "block",
+ "name": "block atomic",
+ "xml": "<block atomic=\"true\">\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 882.8459091186523,
+ "y": 368.224645614624,
+ "z": "e5bf33cc.860bc",
+ "wires": [
+ [
+ "23cb526c.80076e",
+ "39defcd5.3339e4",
+ "165dda1d.49d8c6",
+ "6d05051.63437fc",
+ "2355af77.170bb",
+ "c3991295.942e1",
+ "5cbe5e79.5b38f",
+ "5573aa15.2f76f4",
+ "92a8c0e.7e8084",
+ "53bd8f16.8bed2"
+ ]
+ ]
+ },
+ {
+ "id": "23cb526c.80076e",
+ "type": "set",
+ "name": "set prop.ar.provided-allotted-resource-id",
+ "xml": "<set>\n<parameter name='prop.ar.provided-allotted-resource-id' value='`$service-data.provided-allotted-resources.provided-allotted-resource[$pidx].allotted-resource-id`' />\n\n",
+ "comments": "",
+ "x": 1152.8153915405273,
+ "y": 351.02744245529175,
+ "z": "e5bf33cc.860bc",
+ "wires": []
+ },
+ {
+ "id": "39defcd5.3339e4",
+ "type": "execute",
+ "name": "generate tmp.ar-url-connection url",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace' >\n <parameter name=\"source\" value=\"`$prop.restapi.connection-attachment-allottedresource`\"/>\n <parameter name=\"outputPath\" value=\"tmp.ar-url-connection\"/>\n <parameter name=\"target\" value=\"{allotted-resource-id}\"/>\n <parameter name=\"replacement\" value='`$prop.ar.provided-allotted-resource-id`'/>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1141.815284729004,
+ "y": 403.5724229812622,
+ "z": "e5bf33cc.860bc",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "165dda1d.49d8c6",
+ "type": "execute",
+ "name": "execute RestApiCallNode - get-resource connection-attachment-allotted-resource",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='restapiUrl' value='`$prop.controller.url + $tmp.ar-url-connection`' />\n <parameter name='restapiUser' value='`$prop.controller.user`' />\n <parameter name='restapiPassword' value='`$prop.controller.pwd`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='GET' />\n <parameter name=\"responsePrefix\" value=\"mdsal-providedAr\" />\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1282.8151321411133,
+ "y": 459.2390090227127,
+ "z": "e5bf33cc.860bc",
+ "wires": [
+ [
+ "cd095866.b31848",
+ "1215888c.ee51e7"
+ ]
+ ]
+ },
+ {
+ "id": "cd095866.b31848",
+ "type": "success",
+ "name": "success",
+ "xml": "<outcome value='success'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1658.185203552246,
+ "y": 459.7611274719238,
+ "z": "e5bf33cc.860bc",
+ "wires": [
+ [
+ "7c49cfc5.d8cce"
+ ]
+ ]
+ },
+ {
+ "id": "1215888c.ee51e7",
+ "type": "other",
+ "name": "other",
+ "xml": "<outcome value='Other'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1650.0370063781738,
+ "y": 494.8272123336792,
+ "z": "e5bf33cc.860bc",
+ "wires": [
+ [
+ "77edea1f.976304"
+ ]
+ ]
+ },
+ {
+ "id": "7c49cfc5.d8cce",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 1789.1852989196777,
+ "y": 459.7611885070801,
+ "z": "e5bf33cc.860bc",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "77edea1f.976304",
+ "type": "returnFailure",
+ "name": "return failure",
+ "xml": "<return status='failure'>\n\t<parameter name='ack-final' value='Y'/>\n\t<parameter name=\"error-code\" value=\"404\" />\n <parameter name=\"error-message\" value=\"Error: Parent service data not available\" />\n \n",
+ "comments": "",
+ "x": 1796.1857872009277,
+ "y": 494.0946235656738,
+ "z": "e5bf33cc.860bc",
+ "wires": []
+ },
+ {
+ "id": "c3991295.942e1",
+ "type": "set",
+ "name": "set model-data to input",
+ "xml": "<set>\n<parameter name='connection-attachment-topology-operation-input.allotted-resource-information.onap-model-information.' value=\"`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.connection-attachment-topology.onap-model-information.` \" />",
+ "comments": "",
+ "x": 1123.0001907348633,
+ "y": 594.0000371932983,
+ "z": "e5bf33cc.860bc",
+ "wires": []
+ },
+ {
+ "id": "2355af77.170bb",
+ "type": "set",
+ "name": "set connection-attachment-ar-identifiers to input",
+ "xml": "<set>\n<parameter name='connection-attachment-topology-operation-input.service-information.service-instance-id' value=\"`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.connection-attachment-topology.allotted-resource-identifiers.consuming-service-instance-id` \" />\n<parameter name='connection-attachment-topology-operation-input.allotted-resource-information.parent-service-instance-id' value=\"`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.connection-attachment-topology.allotted-resource-identifiers.parent-service-instance-id` \" />\n<parameter name='connection-attachment-topology-operation-input.allotted-resource-information.allotted-resource-type' value=\"`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.connection-attachment-topology.allotted-resource-identifiers.allotted-resource-type` \" />\n<parameter name='connection-attachment-topology-operation-input.allotted-resource-information.allotted-resource-id' value=\"`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.connection-attachment-topology.allotted-resource-identifiers.allotted-resource-id` \" />\n",
+ "comments": "",
+ "x": 1198.301872253418,
+ "y": 556.0159864425659,
+ "z": "e5bf33cc.860bc",
+ "wires": []
+ },
+ {
+ "id": "6d05051.63437fc",
+ "type": "set",
+ "name": "set ar-data to input",
+ "xml": "<set>\n<parameter name='connection-attachment-topology-operation-input.request-information.request-action' value=\"`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-status.action` \" />\n<parameter name='connection-attachment-topology-operation-input.sdnc-request-header.svc-action' value=\"`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-status.rpc-action` \" />\n<parameter name='connection-attachment-topology-operation-input.request-information.' value=\"`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.allotted-resource-operation-information.request-information.` \" />\n<parameter name='connection-attachment-topology-operation-input.sdnc-request-header.' value=\"`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.allotted-resource-operation-information.sdnc-request-header.` \" />\n<parameter name='connection-attachment-topology-operation-input.service-information.' value=\"`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.allotted-resource-operation-information.service-information.` \" />\n<parameter name='connection-attachment-topology-operation-input.allotted-resource-information.' value=\"`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.` \" />\n<parameter name='connection-attachment-topology-operation-input.connection-attachment-request-input.' value=\"`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.allotted-resource-operation-information.connection-attachment-request-input.` \" />\n",
+ "comments": "",
+ "x": 1105.1586456298828,
+ "y": 514.8253927230835,
+ "z": "e5bf33cc.860bc",
+ "wires": []
+ },
+ {
+ "id": "53bd8f16.8bed2",
+ "type": "call",
+ "name": "call sotn-attachment-topology-operation-activate",
+ "xml": "<call module='GENERIC-RESOURCE-API' rpc='sotn-attachment-topology-operation-activate' mode='sync' >\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1199.0001945495605,
+ "y": 769.0000486373901,
+ "z": "e5bf33cc.860bc",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "5573aa15.2f76f4",
+ "type": "call",
+ "name": "call sotn-attachment-topology-operation-deactivate",
+ "xml": "<call module='GENERIC-RESOURCE-API' rpc='sotn-attachment-topology-operation-deactivate' mode='sync' >\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1208.0002746582031,
+ "y": 678.0000429153442,
+ "z": "e5bf33cc.860bc",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "92a8c0e.7e8084",
+ "type": "set",
+ "name": "set request-action and svc-action",
+ "xml": "<set>\n<parameter name='connection-attachment-topology-operation-input.sdnc-request-header.svc-action' value=\"activate\" />\n<parameter name='connection-attachment-topology-operation-input.request-information.request-action' value=\"ActivateSOTNAttachmentInstance\" />\n\n\n",
+ "comments": "",
+ "x": 1154.0002746582031,
+ "y": 723.0000457763672,
+ "z": "e5bf33cc.860bc",
+ "wires": []
+ },
+ {
+ "id": "5cbe5e79.5b38f",
+ "type": "set",
+ "name": "set request-action and svc-action",
+ "xml": "<set>\n<parameter name='connection-attachment-topology-operation-input.sdnc-request-header.svc-action' value=\"deactivate\" />\n<parameter name='connection-attachment-topology-operation-input.request-information.request-action' value=\"DeactivateSOTNAttachmentInstance\" />\n<parameter name='connection-attachment-topology-operation-input.service-information.global-customer-id' value=\"`$service-data.service-information.global-customer-id` \" />\n<parameter name='connection-attachment-topology-operation-input.service-information.subscription-service-type' value=\"`$service-data.service-information.subscription-service-type` \" />\n<parameter name='connection-attachment-topology-operation-input.service-information.subscriber-name' value=\"`$service-data.service-information.subscriber-name` \" />",
+ "comments": "",
+ "x": 1154.000114440918,
+ "y": 637.0000410079956,
+ "z": "e5bf33cc.860bc",
+ "wires": []
+ },
+ {
+ "id": "17f9a997.150a06",
+ "type": "set",
+ "name": "set service-data in tmp var",
+ "xml": "<set>\n<parameter name = 'tmp.service-data.' value=\"`$service-data.`\"/>\n",
+ "comments": "",
+ "x": 719.0001983642578,
+ "y": 266.0000944137573,
+ "z": "e5bf33cc.860bc",
+ "wires": []
+ },
+ {
+ "id": "a8c6638b.cba29",
+ "type": "set",
+ "name": "set tmp.service-data to service-data",
+ "xml": "<set>\n<parameter name = 'service-data. ' value = \"`$tmp.service-data.`\"/>\n",
+ "comments": "",
+ "x": 822.0003814697266,
+ "y": 845.0001068115234,
+ "z": "e5bf33cc.860bc",
+ "wires": []
+ },
+ {
+ "id": "59b44687.021ed8",
+ "type": "returnSuccess",
+ "name": "return success",
+ "xml": "<return status='success'>\n<parameter name=\"ack-final-indicator\" value=\"Y\" />\n<parameter name=\"error-code\" value=\"200\" />\n<parameter name=\"error-message\" value=\"`$error-message`\" />\n",
+ "comments": "",
+ "x": 743.0001831054688,
+ "y": 889.0000267028809,
+ "z": "e5bf33cc.860bc",
+ "wires": []
+ }
+]
diff --git a/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_network-topology-operation.xml b/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_network-topology-operation.xml
index 88377fc5..05328d29 100644
--- a/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_network-topology-operation.xml
+++ b/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_network-topology-operation.xml
@@ -1,413 +1,420 @@
-<service-logic
- xmlns='http://www.onap.org/sdnc/svclogic'
- xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='GENERIC-RESOURCE-API' version='${project.version}'>
- <method rpc='network-topology-operation' mode='sync'>
- <block atomic="true">
- <call module='GENERIC-RESOURCE-API' rpc='validate-network-input' mode='sync' ></call>
- <switch test='`$network-topology-operation-input.sdnc-request-header.svc-action`'>
- <outcome value='assign'>
- <block atomic="true">
- <switch test='`$service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`'>
- <outcome value='Created'>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="`'Network is not in appropriate state for assign. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
- </return>
- </outcome>
- <outcome value='PendingDelete'>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="`'Network is not in appropriate state for assign. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
- </return>
- </outcome>
- <outcome value='PendingCreate'>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="`'Network is not in appropriate state for assign. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
- </return>
- </outcome>
- <outcome value='Other'>
- <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-assign' mode='sync' ></call>
- </outcome>
- </switch>
- </block>
- </outcome>
- <outcome value='activate'>
- <switch test='`$network-topology-operation-input.request-information.request-action`'>
- <outcome value='ActivateSOTNConnectivityInstance'>
- <call module='GENERIC-RESOURCE-API' rpc='sotn-network-topology-operation-activate' mode='sync' ></call>
- </outcome>
- <outcome value='ActivateDCINetworkInstance'>
- <call module='GENERIC-RESOURCE-API' rpc='dci-connects-network-topology-operation-activate' mode='sync' ></call>
- </outcome>
- <outcome value='ActivateSDWANConnectivityInstance'>
- <call module='GENERIC-RESOURCE-API' rpc='sdwan-network-topology-operation-activate' mode='sync' ></call>
- </outcome>
- <outcome value='other'>
- <block atomic="true">
- <switch test='`$service-data.networks.network_length`'>
- <outcome value=''>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
- </return>
- </outcome>
- <outcome value='Other'>
- <block atomic="true">
- <for index='nidx' start='0' end='`$service-data.networks.network_length`' >
- <switch test="`$service-data.networks.network[$nidx].network-id == $network-topology-operation-input.network-information.network-id`">
- <outcome value='true'>
- <set>
- <parameter name='tmp.nidx' value='`$nidx`' />
- <parameter name='network-data.' value='`$service-data.networks.network[$nidx].`' />
- </set>
- </outcome>
- </switch>
- </for>
- <switch test="`$tmp.nidx`">
- <outcome value=''>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
- </return>
- </outcome>
- <outcome value='Other'>
- <set>
- <parameter name='nidx' value='`$tmp.nidx`' />
- </set>
- </outcome>
- </switch>
- </block>
- </outcome>
- </switch>
- <switch test='`$network-topology-operation-input.network-information.network-instance-group-id`'>
- <outcome value=''>
- <return status='success'>
- <parameter name='' value='' />
- </return>
- </outcome>
- <outcome value='Other'>
- <block>
- <switch test='`$service-data.network-instance-groups.network-instance-group_length`'>
- <outcome value=''>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-instance-group-id not found in service-data" />
- </return>
- </outcome>
- <outcome value='Other'>
- <block atomic="true">
- <for index='ngidx' start='0' end='`$service-data.network-instance-groups.network-instance-_length`' >
- <switch test="`$service-data.network-instance-groups.network-instance-group[$nidx].network-instance-group-id == $network-topology-operation-input.network-information.network-instance-group-id`">
- <outcome value='true'>
- <block atomic="true">
- <set>
- <parameter name='tmp.ngidx' value='`$ngidx`' />
- <parameter name='ctx.network-instance-group-data.' value='`$service-data.network-instance-groups.network-instance-group[$ngidx].`' />
- </set>
- </block>
- </outcome>
- </switch>
- </for>
- </block>
- </outcome>
- </switch>
- </block>
- </outcome>
- </switch>
- <switch test='`$service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`'>
- <outcome value='PendingCreate'>
- <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-activate' mode='sync' ></call>
- </outcome>
- <outcome value='Other'>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="`'Network is not in appropriate state for activate. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
- </return>
- </outcome>
- </switch>
- </block>
- </outcome>
- </switch>
- </outcome>
- <outcome value='changeassign'>
- <block atomic="true">
- <switch test='`$service-data.networks.network_length`'>
- <outcome value=''>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
- </return>
- </outcome>
- <outcome value='Other'>
- <block atomic="true">
- <for index='nidx' start='0' end='`$service-data.networks.network_length`' >
- <switch test="`$service-data.networks.network[$nidx].network-id == $network-topology-operation-input.network-information.network-id`">
- <outcome value='true'>
- <set>
- <parameter name='tmp.nidx' value='`$nidx`' />
- <parameter name='network-data.' value='`$service-data.networks.network[$nidx].`' />
- </set>
- </outcome>
- </switch>
- </for>
- <switch test="`$tmp.nidx`">
- <outcome value=''>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
- </return>
- </outcome>
- <outcome value='Other'>
- <set>
- <parameter name='nidx' value='`$tmp.nidx`' />
- </set>
- </outcome>
- </switch>
- </block>
- </outcome>
- </switch>
- <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-changeassign' mode='sync' ></call>
- </block>
- </outcome>
- <outcome value='deactivate'>
- <switch test='`$network-topology-operation-input.request-information.request-action`'>
- <outcome value='DeactivateSOTNConnectivityInstance'>
- <call module='GENERIC-RESOURCE-API' rpc='sotn-network-topology-operation-deactivate' mode='sync' ></call>
- </outcome>
- <outcome value='DeActivateDCINetworkInstance'>
- <call module='GENERIC-RESOURCE-API' rpc='dci-connects-network-topology-operation-deactivate' mode='sync' ></call>
- </outcome>
- <outcome value='DeactivateSDWANConnectivityInstance'>
- <call module='GENERIC-RESOURCE-API' rpc='sdwan-network-topology-operation-deactivate' mode='sync' ></call>
- </outcome>
- <outcome value='Other'>
- <block atomic="true">
- <switch test='`$service-data.networks.network_length`'>
- <outcome value=''>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
- </return>
- </outcome>
- <outcome value='Other'>
- <block atomic="true">
- <for index='nidx' start='0' end='`$service-data.networks.network_length`' >
- <switch test="`$service-data.networks.network[$nidx].network-id == $network-topology-operation-input.network-information.network-id`">
- <outcome value='true'>
- <set>
- <parameter name='tmp.nidx' value='`$nidx`' />
- <parameter name='network-data.' value='`$service-data.networks.network[$nidx].`' />
- </set>
- </outcome>
- </switch>
- </for>
- <switch test="`$tmp.nidx`">
- <outcome value=''>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
- </return>
- </outcome>
- <outcome value='Other'>
- <set>
- <parameter name='nidx' value='`$tmp.nidx`' />
- </set>
- </outcome>
- </switch>
- </block>
- </outcome>
- </switch>
- <switch test='`$network-topology-operation-input.network-information.network-instance-group-id`'>
- <outcome value=''>
- <return status='success'>
- <parameter name='' value='' />
- </return>
- </outcome>
- <outcome value='Other'>
- <block>
- <switch test='`$service-data.network-instance-groups.network-instance-group_length`'>
- <outcome value=''>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-instance-group-id not found in service-data" />
- </return>
- </outcome>
- <outcome value='Other'>
- <block atomic="true">
- <for index='ngidx' start='0' end='`$service-data.network-instance-groups.network-instance-_length`' >
- <switch test="`$service-data.network-instance-groups.network-instance-group[$nidx].network-instance-group-id == $network-topology-operation-input.network-information.network-instance-group-id`">
- <outcome value='true'>
- <block atomic="true">
- <set>
- <parameter name='tmp.ngidx' value='`$ngidx`' />
- <parameter name='ctx.network-instance-group-data.' value='`$service-data.network-instance-groups.network-instance-group[$ngidx].`' />
- </set>
- </block>
- </outcome>
- </switch>
- </for>
- </block>
- </outcome>
- </switch>
- </block>
- </outcome>
- </switch>
- <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-deactivate' mode='sync' ></call>
- </block>
- </outcome>
- </switch>
- </outcome>
- <outcome value='unassign'>
- <block atomic="true">
- <switch test='`$service-data.networks.network_length`'>
- <outcome value=''>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
- </return>
- </outcome>
- <outcome value='Other'>
- <block atomic="true">
- <for index='nidx' start='0' end='`$service-data.networks.network_length`' >
- <switch test="`$service-data.networks.network[$nidx].network-id == $network-topology-operation-input.network-information.network-id`">
- <outcome value='true'>
- <set>
- <parameter name='tmp.nidx' value='`$nidx`' />
- <parameter name='network-data.' value='`$service-data.networks.network[$nidx].`' />
- </set>
- </outcome>
- </switch>
- </for>
- <switch test="`$tmp.nidx`">
- <outcome value=''>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
- </return>
- </outcome>
- <outcome value='Other'>
- <set>
- <parameter name='nidx' value='`$tmp.nidx`' />
- </set>
- </outcome>
- </switch>
- </block>
- </outcome>
- </switch>
- <switch test='`$network-topology-operation-input.network-information.network-instance-group-id`'>
- <outcome value=''>
- <return status='success'>
- <parameter name='' value='' />
- </return>
- </outcome>
- <outcome value='Other'>
- <block>
- <switch test='`$service-data.network-instance-groups.network-instance-group_length`'>
- <outcome value=''>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-instance-group-id not found in service-data" />
- </return>
- </outcome>
- <outcome value='Other'>
- <block atomic="true">
- <for index='ngidx' start='0' end='`$service-data.network-instance-groups.network-instance-_length`' >
- <switch test="`$service-data.network-instance-groups.network-instance-group[$nidx].network-instance-group-id == $network-topology-operation-input.network-information.network-instance-group-id`">
- <outcome value='true'>
- <block atomic="true">
- <set>
- <parameter name='tmp.ngidx' value='`$ngidx`' />
- <parameter name='ctx.network-instance-group-data.' value='`$service-data.network-instance-groups.network-instance-group[$ngidx].`' />
- </set>
- </block>
- </outcome>
- </switch>
- </for>
- </block>
- </outcome>
- </switch>
- </block>
- </outcome>
- </switch>
- <switch test='`$service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`'>
- <outcome value='PendingCreate'>
- <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-unassign' mode='sync' ></call>
- </outcome>
- <outcome value='PendingDelete'>
- <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-unassign' mode='sync' ></call>
- </outcome>
- <outcome value='Other'>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="`'Network is not in appropriate state for unassign. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
- </return>
- </outcome>
- </switch>
- </block>
- </outcome>
- <outcome value='create'>
- <switch test='`$network-topology-operation-input.request-information.request-action`'>
- <outcome value='CreateSOTNConnectivityInstance'>
- <call module='GENERIC-RESOURCE-API' rpc='sotn-network-topology-operation-create' mode='sync' ></call>
- </outcome>
- <outcome value='CreateSDWANConnectivityInstance'>
- <call module='GENERIC-RESOURCE-API' rpc='sdwan-network-topology-operation-create' mode='sync' ></call>
- </outcome>
- <outcome value='other'>
- <block atomic="true">
- <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-create' mode='sync' ></call>
- </block>
- </outcome>
- </switch>
- </outcome>
- <outcome value='delete'>
- <switch test='`$network-topology-operation-input.request-information.request-action`'>
- <outcome value='DeleteSOTNConnectivityInstance'>
- <call module='GENERIC-RESOURCE-API' rpc='sotn-network-topology-operation-delete' mode='sync' ></call>
- </outcome>
- <outcome value='DeleteSDWANConnectivityInstance'>
- <call module='GENERIC-RESOURCE-API' rpc='sdwan-network-topology-operation-delete' mode='sync' ></call>
- </outcome>
- <outcome value='other'>
- <block atomic="true">
- <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-delete' mode='sync' ></call>
- </block>
- </outcome>
- </switch>
- </outcome>
- <outcome value='Other'>
- <return status='failure'>
- <parameter name='ack-final' value='Y'/>
- <parameter name="error-code" value="500" />
- <parameter name="error-message" value="sdnc-request-header.svc-action is a required input" />
- </return>
- </outcome>
- </switch>
- <set>
- <parameter name="ack-final" value="Y"/>
- </set>
- <return status='success'>
- <parameter name="ack-final-indicator" value="Y" />
- <parameter name="error-code" value="200" />
- <parameter name="error-message" value="`$error-message`" />
- </return>
- </block>
- </method>
-</service-logic>
+<service-logic
+ xmlns='http://www.onap.org/sdnc/svclogic'
+ xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='GENERIC-RESOURCE-API' version='${project.version}'>
+ <method rpc='network-topology-operation' mode='sync'>
+ <block atomic="true">
+ <call module='GENERIC-RESOURCE-API' rpc='validate-network-input' mode='sync' ></call>
+ <switch test='`$network-topology-operation-input.sdnc-request-header.svc-action`'>
+ <outcome value='assign'>
+ <block atomic="true">
+ <switch test='`$service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`'>
+ <outcome value='Created'>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="`'Network is not in appropriate state for assign. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
+ </return>
+ </outcome>
+ <outcome value='PendingDelete'>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="`'Network is not in appropriate state for assign. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
+ </return>
+ </outcome>
+ <outcome value='PendingCreate'>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="`'Network is not in appropriate state for assign. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-assign' mode='sync' ></call>
+ </outcome>
+ </switch>
+ </block>
+ </outcome>
+ <outcome value='activate'>
+ <switch test='`$network-topology-operation-input.request-information.request-action`'>
+ <outcome value='ActivateSOTNConnectivityInstance'>
+ <call module='GENERIC-RESOURCE-API' rpc='sotn-network-topology-operation-activate' mode='sync' ></call>
+ </outcome>
+ <outcome value='ActivateDCINetworkInstance'>
+ <call module='GENERIC-RESOURCE-API' rpc='dci-connects-network-topology-operation-activate' mode='sync' ></call>
+ </outcome>
+ <outcome value='ActivateSDWANConnectivityInstance'>
+ <call module='GENERIC-RESOURCE-API' rpc='sdwan-network-topology-operation-activate' mode='sync' ></call>
+ </outcome>
+ <outcome value='other'>
+ <block atomic="true">
+ <switch test='`$service-data.networks.network_length`'>
+ <outcome value=''>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <block atomic="true">
+ <for index='nidx' start='0' end='`$service-data.networks.network_length`' >
+ <switch test="`$service-data.networks.network[$nidx].network-id == $network-topology-operation-input.network-information.network-id`">
+ <outcome value='true'>
+ <set>
+ <parameter name='tmp.nidx' value='`$nidx`' />
+ <parameter name='network-data.' value='`$service-data.networks.network[$nidx].`' />
+ </set>
+ </outcome>
+ </switch>
+ </for>
+ <switch test="`$tmp.nidx`">
+ <outcome value=''>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <set>
+ <parameter name='nidx' value='`$tmp.nidx`' />
+ </set>
+ </outcome>
+ </switch>
+ </block>
+ </outcome>
+ </switch>
+ <switch test='`$network-topology-operation-input.network-information.network-instance-group-id`'>
+ <outcome value=''>
+ <return status='success'>
+ <parameter name='' value='' />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <block>
+ <switch test='`$service-data.network-instance-groups.network-instance-group_length`'>
+ <outcome value=''>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-instance-group-id not found in service-data" />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <block atomic="true">
+ <for index='ngidx' start='0' end='`$service-data.network-instance-groups.network-instance-_length`' >
+ <switch test="`$service-data.network-instance-groups.network-instance-group[$nidx].network-instance-group-id == $network-topology-operation-input.network-information.network-instance-group-id`">
+ <outcome value='true'>
+ <block atomic="true">
+ <set>
+ <parameter name='tmp.ngidx' value='`$ngidx`' />
+ <parameter name='ctx.network-instance-group-data.' value='`$service-data.network-instance-groups.network-instance-group[$ngidx].`' />
+ </set>
+ </block>
+ </outcome>
+ </switch>
+ </for>
+ </block>
+ </outcome>
+ </switch>
+ </block>
+ </outcome>
+ </switch>
+ <switch test='`$service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`'>
+ <outcome value='PendingCreate'>
+ <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-activate' mode='sync' ></call>
+ </outcome>
+ <outcome value='Other'>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="`'Network is not in appropriate state for activate. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
+ </return>
+ </outcome>
+ </switch>
+ </block>
+ </outcome>
+ </switch>
+ </outcome>
+ <outcome value='changeassign'>
+ <block atomic="true">
+ <switch test='`$service-data.networks.network_length`'>
+ <outcome value=''>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <block atomic="true">
+ <for index='nidx' start='0' end='`$service-data.networks.network_length`' >
+ <switch test="`$service-data.networks.network[$nidx].network-id == $network-topology-operation-input.network-information.network-id`">
+ <outcome value='true'>
+ <set>
+ <parameter name='tmp.nidx' value='`$nidx`' />
+ <parameter name='network-data.' value='`$service-data.networks.network[$nidx].`' />
+ </set>
+ </outcome>
+ </switch>
+ </for>
+ <switch test="`$tmp.nidx`">
+ <outcome value=''>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <set>
+ <parameter name='nidx' value='`$tmp.nidx`' />
+ </set>
+ </outcome>
+ </switch>
+ </block>
+ </outcome>
+ </switch>
+ <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-changeassign' mode='sync' ></call>
+ </block>
+ </outcome>
+ <outcome value='deactivate'>
+ <switch test='`$network-topology-operation-input.request-information.request-action`'>
+ <outcome value='DeactivateSOTNConnectivityInstance'>
+ <call module='GENERIC-RESOURCE-API' rpc='sotn-network-topology-operation-deactivate' mode='sync' ></call>
+ </outcome>
+ <outcome value='DeActivateDCINetworkInstance'>
+ <call module='GENERIC-RESOURCE-API' rpc='dci-connects-network-topology-operation-deactivate' mode='sync' ></call>
+ </outcome>
+ <outcome value='DeactivateSDWANConnectivityInstance'>
+ <call module='GENERIC-RESOURCE-API' rpc='sdwan-network-topology-operation-deactivate' mode='sync' ></call>
+ </outcome>
+ <outcome value='Other'>
+ <block atomic="true">
+ <switch test='`$service-data.networks.network_length`'>
+ <outcome value=''>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <block atomic="true">
+ <for index='nidx' start='0' end='`$service-data.networks.network_length`' >
+ <switch test="`$service-data.networks.network[$nidx].network-id == $network-topology-operation-input.network-information.network-id`">
+ <outcome value='true'>
+ <set>
+ <parameter name='tmp.nidx' value='`$nidx`' />
+ <parameter name='network-data.' value='`$service-data.networks.network[$nidx].`' />
+ </set>
+ </outcome>
+ </switch>
+ </for>
+ <switch test="`$tmp.nidx`">
+ <outcome value=''>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <set>
+ <parameter name='nidx' value='`$tmp.nidx`' />
+ </set>
+ </outcome>
+ </switch>
+ </block>
+ </outcome>
+ </switch>
+ <switch test='`$network-topology-operation-input.network-information.network-instance-group-id`'>
+ <outcome value=''>
+ <return status='success'>
+ <parameter name='' value='' />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <block>
+ <switch test='`$service-data.network-instance-groups.network-instance-group_length`'>
+ <outcome value=''>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-instance-group-id not found in service-data" />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <block atomic="true">
+ <for index='ngidx' start='0' end='`$service-data.network-instance-groups.network-instance-_length`' >
+ <switch test="`$service-data.network-instance-groups.network-instance-group[$nidx].network-instance-group-id == $network-topology-operation-input.network-information.network-instance-group-id`">
+ <outcome value='true'>
+ <block atomic="true">
+ <set>
+ <parameter name='tmp.ngidx' value='`$ngidx`' />
+ <parameter name='ctx.network-instance-group-data.' value='`$service-data.network-instance-groups.network-instance-group[$ngidx].`' />
+ </set>
+ </block>
+ </outcome>
+ </switch>
+ </for>
+ </block>
+ </outcome>
+ </switch>
+ </block>
+ </outcome>
+ </switch>
+ <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-deactivate' mode='sync' ></call>
+ </block>
+ </outcome>
+ </switch>
+ </outcome>
+ <outcome value='unassign'>
+ <block atomic="true">
+ <switch test='`$service-data.networks.network_length`'>
+ <outcome value=''>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <block atomic="true">
+ <for index='nidx' start='0' end='`$service-data.networks.network_length`' >
+ <switch test="`$service-data.networks.network[$nidx].network-id == $network-topology-operation-input.network-information.network-id`">
+ <outcome value='true'>
+ <set>
+ <parameter name='tmp.nidx' value='`$nidx`' />
+ <parameter name='network-data.' value='`$service-data.networks.network[$nidx].`' />
+ </set>
+ </outcome>
+ </switch>
+ </for>
+ <switch test="`$tmp.nidx`">
+ <outcome value=''>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-id not found in service-data" />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <set>
+ <parameter name='nidx' value='`$tmp.nidx`' />
+ </set>
+ </outcome>
+ </switch>
+ </block>
+ </outcome>
+ </switch>
+ <switch test='`$network-topology-operation-input.network-information.network-instance-group-id`'>
+ <outcome value=''>
+ <return status='success'>
+ <parameter name='' value='' />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <block>
+ <switch test='`$service-data.network-instance-groups.network-instance-group_length`'>
+ <outcome value=''>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="network-topology-operation-input.network-request-input.network-instance-group-id not found in service-data" />
+ </return>
+ </outcome>
+ <outcome value='Other'>
+ <block atomic="true">
+ <for index='ngidx' start='0' end='`$service-data.network-instance-groups.network-instance-_length`' >
+ <switch test="`$service-data.network-instance-groups.network-instance-group[$nidx].network-instance-group-id == $network-topology-operation-input.network-information.network-instance-group-id`">
+ <outcome value='true'>
+ <block atomic="true">
+ <set>
+ <parameter name='tmp.ngidx' value='`$ngidx`' />
+ <parameter name='ctx.network-instance-group-data.' value='`$service-data.network-instance-groups.network-instance-group[$ngidx].`' />
+ </set>
+ </block>
+ </outcome>
+ </switch>
+ </for>
+ </block>
+ </outcome>
+ </switch>
+ </block>
+ </outcome>
+ </switch>
+ <switch test='`$service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`'>
+ <outcome value='PendingCreate'>
+ <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-unassign' mode='sync' ></call>
+ </outcome>
+ <outcome value='PendingDelete'>
+ <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-unassign' mode='sync' ></call>
+ </outcome>
+ <outcome value='Other'>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="`'Network is not in appropriate state for unassign. Current state is ' + $service-data.networks.network[$tmp.nidx].network-data.network-level-oper-status.order-status`" />
+ </return>
+ </outcome>
+ </switch>
+ </block>
+ </outcome>
+ <outcome value='create'>
+ <switch test='`$network-topology-operation-input.request-information.request-action`'>
+ <outcome value='CreateSOTNConnectivityInstance'>
+ <call module='GENERIC-RESOURCE-API' rpc='sotn-network-topology-operation-create' mode='sync' ></call>
+ </outcome>
+ <outcome value='CreateSDWANConnectivityInstance'>
+ <call module='GENERIC-RESOURCE-API' rpc='sdwan-network-topology-operation-create' mode='sync' ></call>
+ </outcome>
+ <outcome value='other'>
+ <block atomic="true">
+ <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-create' mode='sync' ></call>
+ </block>
+ </outcome>
+ </switch>
+ </outcome>
+ <outcome value='delete'>
+ <switch test='`$network-topology-operation-input.request-information.request-action`'>
+ <outcome value='DeleteSOTNConnectivityInstance'>
+ <call module='GENERIC-RESOURCE-API' rpc='sotn-network-topology-operation-delete' mode='sync' ></call>
+ </outcome>
+ <outcome value='DeleteSDWANConnectivityInstance'>
+ <call module='GENERIC-RESOURCE-API' rpc='sdwan-network-topology-operation-delete' mode='sync' ></call>
+ </outcome>
+ <outcome value='other'>
+ <block atomic="true">
+ <call module='GENERIC-RESOURCE-API' rpc='network-topology-operation-delete' mode='sync' ></call>
+ </block>
+ </outcome>
+ </switch>
+ </outcome>
+ <outcome value='reoptimize'>
+ <switch test='`$network-topology-operation-input.request-information.request-action`'>
+ <outcome value='ReoptimizeSOTNInstance'>
+ <call module='GENERIC-RESOURCE-API' rpc='sotn-network-topology-operation-reoptimize' mode='sync' ></call>
+ </outcome>
+ </switch>
+ </outcome>
+ <outcome value='Other'>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="500" />
+ <parameter name="error-message" value="sdnc-request-header.svc-action is a required input" />
+ </return>
+ </outcome>
+ </switch>
+ <set>
+ <parameter name="ack-final" value="Y"/>
+ </set>
+ <return status='success'>
+ <parameter name="ack-final-indicator" value="Y" />
+ <parameter name="error-code" value="200" />
+ <parameter name="error-message" value="`$error-message`" />
+ </return>
+ </block>
+ </method>
+</service-logic>
diff --git a/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sdwan-get-site-param.xml b/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sdwan-get-site-param.xml
index d957ba6b..5b00ed19 100644
--- a/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sdwan-get-site-param.xml
+++ b/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sdwan-get-site-param.xml
@@ -1,123 +1,132 @@
-<service-logic
- xmlns='http://www.onap.org/sdnc/svclogic'
- xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='GENERIC-RESOURCE-API' version='${project.version}'>
- <method rpc='sdwan-get-site-param' mode='sync'>
- <block atomic="true">
- <for index='idx' start='0' end='`$vnf-request-input.vnf-input-parameters.param_length`' >
- <block>
- <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'name'`">
- <outcome value='true'>
- <set>
- <parameter name='prop.site.name' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
- </set>
- </outcome>
- </switch>
- <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'description'`">
- <outcome value='true'>
- <set>
- <parameter name='prop.site.description' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
- </set>
- </outcome>
- </switch>
- <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'name'`">
- <outcome value='true'>
- <set>
- <parameter name='prop.site.name' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
- </set>
- </outcome>
- </switch>
- <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'location-name'`">
- <outcome value='true'>
- <set>
- <parameter name='prop.site.location-name' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
- </set>
- </outcome>
- </switch>
- <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'address'`">
- <outcome value='true'>
- <set>
- <parameter name='prop.site.location-address' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
- </set>
- </outcome>
- </switch>
- <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'postcode'`">
- <outcome value='true'>
- <set>
- <parameter name='prop.site.location-postcode' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
- </set>
- </outcome>
- </switch>
- <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'latitude'`">
- <outcome value='true'>
- <set>
- <parameter name='prop.site.location-latitude' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
- </set>
- </outcome>
- </switch>
- <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'longitude'`">
- <outcome value='true'>
- <set>
- <parameter name='prop.site.location-longitude' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
- </set>
- </outcome>
- </switch>
- <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'emails'`">
- <outcome value='true'>
- <block atomic="true">
- <set>
- <parameter name='prop.site.emails' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
- </set>
- <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split' >
- <parameter name="original_string" value='`$prop.site.emails`'/>
- <parameter name="regex" value=","/>
- <parameter name="ctx_memory_result_key" value="prop.site.email"/>
- </execute>
- </block>
- </outcome>
- </switch>
- <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'type'`">
- <outcome value='true'>
- <set>
- <parameter name='prop.site.type' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
- <parameter name='prop.site.sdwan' value='true' />
- </set>
- </outcome>
- </switch>
- <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'role'`">
- <outcome value='true'>
- <block atomic="true">
- <set>
- <parameter name='prop.site.role' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
- </set>
- <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split' >
- <parameter name="original_string" value='`$prop.site.role`'/>
- <parameter name="regex" value=","/>
- <parameter name="ctx_memory_result_key" value="prop.site.roles"/>
- </execute>
- </block>
- </outcome>
- </switch>
- <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'controlPoint'`">
- <outcome value='true'>
- <block atomic="true">
- <set>
- <parameter name='prop.site.controlPoint' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
- </set>
- <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split' >
- <parameter name="original_string" value='`$prop.site.controlPoint`'/>
- <parameter name="regex" value=","/>
- <parameter name="ctx_memory_result_key" value="prop.site.controlpoints"/>
- </execute>
- </block>
- </outcome>
- </switch>
- <return status='success'>
- <parameter name="ack-final-indicator" value="Y" />
- <parameter name="error-code" value="200" />
- <parameter name="error-message" value="`$error-message`" />
- </return>
- </block>
- </for>
- </block>
- </method>
-</service-logic>
+<service-logic
+ xmlns='http://www.onap.org/sdnc/svclogic'
+ xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='GENERIC-RESOURCE-API' version='${project.version}'>
+ <method rpc='sdwan-get-site-param' mode='sync'>
+ <block atomic="true">
+ <for index='idx' start='0' end='`$vnf-request-input.vnf-input-parameters.param_length`' >
+ <block>
+ <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'name'`">
+ <outcome value='true'>
+ <set>
+ <parameter name='prop.site.name' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
+ </set>
+ </outcome>
+ </switch>
+ <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'description'`">
+ <outcome value='true'>
+ <set>
+ <parameter name='prop.site.description' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
+ </set>
+ </outcome>
+ </switch>
+ <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'name'`">
+ <outcome value='true'>
+ <set>
+ <parameter name='prop.site.name' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
+ </set>
+ </outcome>
+ </switch>
+ <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'location-name'`">
+ <outcome value='true'>
+ <set>
+ <parameter name='prop.site.location-name' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
+ </set>
+ </outcome>
+ </switch>
+ <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'address'`">
+ <outcome value='true'>
+ <set>
+ <parameter name='prop.site.location-address' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
+ </set>
+ </outcome>
+ </switch>
+ <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'postcode'`">
+ <outcome value='true'>
+ <set>
+ <parameter name='prop.site.location-postcode' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
+ </set>
+ </outcome>
+ </switch>
+ <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'latitude'`">
+ <outcome value='true'>
+ <set>
+ <parameter name='prop.site.location-latitude' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
+ </set>
+ </outcome>
+ </switch>
+ <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'longitude'`">
+ <outcome value='true'>
+ <set>
+ <parameter name='prop.site.location-longitude' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
+ </set>
+ </outcome>
+ </switch>
+ <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'emails'`">
+ <outcome value='true'>
+ <block atomic="true">
+ <set>
+ <parameter name='prop.site.emails' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
+ </set>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split' >
+ <parameter name="original_string" value='`$prop.site.emails`'/>
+ <parameter name="regex" value=","/>
+ <parameter name="ctx_memory_result_key" value="prop.site.email"/>
+ </execute>
+ </block>
+ </outcome>
+ </switch>
+ <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'type'`">
+ <outcome value='true'>
+ <block>
+ <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].value`">
+ <outcome value=''>
+ <block></block>
+ </outcome>
+ <outcome value='Other'>
+ <set>
+ <parameter name='prop.site.type' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
+ <parameter name='prop.site.sdwan' value='true' />
+ </set>
+ </outcome>
+ </switch>
+ </block>
+ </outcome>
+ </switch>
+ <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'role'`">
+ <outcome value='true'>
+ <block atomic="true">
+ <set>
+ <parameter name='prop.site.role' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
+ </set>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split' >
+ <parameter name="original_string" value='`$prop.site.role`'/>
+ <parameter name="regex" value=","/>
+ <parameter name="ctx_memory_result_key" value="prop.site.roles"/>
+ </execute>
+ </block>
+ </outcome>
+ </switch>
+ <switch test="`$vnf-request-input.vnf-input-parameters.param[$idx].name == 'controlPoint'`">
+ <outcome value='true'>
+ <block atomic="true">
+ <set>
+ <parameter name='prop.site.controlPoint' value='`$vnf-request-input.vnf-input-parameters.param[$idx].value`' />
+ </set>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='split' >
+ <parameter name="original_string" value='`$prop.site.controlPoint`'/>
+ <parameter name="regex" value=","/>
+ <parameter name="ctx_memory_result_key" value="prop.site.controlpoints"/>
+ </execute>
+ </block>
+ </outcome>
+ </switch>
+ <return status='success'>
+ <parameter name="ack-final-indicator" value="Y" />
+ <parameter name="error-code" value="200" />
+ <parameter name="error-message" value="`$error-message`" />
+ </return>
+ </block>
+ </for>
+ </block>
+ </method>
+</service-logic> \ No newline at end of file
diff --git a/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_self-serve-generate-name.xml b/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_self-serve-generate-name.xml
index 1d074f4a..ba373a26 100644
--- a/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_self-serve-generate-name.xml
+++ b/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_self-serve-generate-name.xml
@@ -6,6 +6,10 @@
<set>
<parameter name='tmp.naming-data-payload' value='{&quot;elements&quot;:[' />
</set>
+ <execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >
+ <parameter name='fileName' value='%SDNC_CONFIG_DIR%/generic-resource-api-dg.properties' />
+ <parameter name='contextPrefix' value='prop' />
+ </execute>
<call module='GENERIC-RESOURCE-API' rpc='self-serve-capability-param-resolution' mode='sync' >
<outcome value='failure'>
<return status='failure'>
@@ -33,12 +37,16 @@
<block atomic='true'>
<set>
<parameter name='tmp.naming-data-payload' value="`$tmp.naming-data-payload + '{'`" />
+ <parameter name='tmp.gen-name_length' value='1' />
</set>
<for index='j' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key_length`' >
<switch test="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].name == 'external-key'`">
<outcome value='true'>
<set>
<parameter name="tmp.naming-data-payload" value="`$tmp.naming-data-payload + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].name + '&quot;:' + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].value + '&quot;,'`"/>
+ <parameter name="`tmp.gen-name[0].element[$j].name`" value="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].name`"/>
+ <parameter name="`tmp.gen-name[0].element[$j].value`" value="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].value`"/>
+ <parameter name="`tmp.gen-name[0].element_length`" value='`$j + 1`' />
</set>
</outcome>
</switch>
@@ -61,9 +69,14 @@
<parameter name='target' value=',]' />
<parameter name='replacement' value=']' />
</execute>
- <execute plugin='org.openecomp.sdnc.prov.namegeneration.node.UnAssignNameNode' method='process'>
- <parameter name='payload' value='`$tmp.naming-data-payload`' />
- <parameter name="prifix" value="nameGenResponse" />
+ <execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >
+ <parameter name='templateFileName' value="`$prop.restapi.templateDir + '/' + $prop.restapi.naming.gen-name.templatefile`" />
+ <parameter name='restapiUrl' value='`$prop.naming.gen-name.url + $prop.restapi.naming.gen-name.service`' />
+ <parameter name='restapiUser' value='`$prop.naming.gen-name.user`' />
+ <parameter name='restapiPassword' value='`$prop.naming.gen-name.pwd`' />
+ <parameter name='format' value='json' />
+ <parameter name='httpMethod' value='DELETE' />
+ <parameter name="responsePrefix" value="nameGenResponse" />
<outcome value='failure'>
<block>
<set>
@@ -90,7 +103,7 @@
</outcome>
</execute>
<execute plugin="org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils" method="jsonStringToCtx">
- <parameter name="source" value="nameGenResponse.response-payload" />
+ <parameter name="source" value="nameGenResponse.httpResponse" />
<parameter name="outputPath" value="jsonContextPrefix" />
<parameter name="isEscaped" value="false" />
</execute>
@@ -136,7 +149,8 @@
<outcome value='true'>
<block atomic='true'>
<set>
- <parameter name='tmp.naming-data-payload' value='' />
+ <parameter name='tmp.naming-data-payload' value='{&quot;elements&quot;:[' />
+ <parameter name='tmp.gen-name_length' value='0' />
</set>
<for index='i' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param_length`' >
<switch test='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.capability-name == $ss.capability-name`'>
@@ -148,10 +162,14 @@
<for index='j' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key_length`' >
<set>
<parameter name="tmp.naming-data-payload" value="`$tmp.naming-data-payload + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].name + '&quot;:' + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].value + '&quot;,'`"/>
+ <parameter name="`tmp.gen-name[$tmp.gen-name_length].element[$j].name`" value="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].name`"/>
+ <parameter name="`tmp.gen-name[$tmp.gen-name_length].element[$j].value`" value="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vnf-topology.vnf-parameters-data.param[$i].resource-resolution-data.resource-key[$j].value`"/>
+ <parameter name="`tmp.gen-name[$tmp.gen-name_length].element_length`" value='`$j + 1`' />
</set>
</for>
<set>
<parameter name='tmp.naming-data-payload' value="`$tmp.naming-data-payload + '},'`" />
+ <parameter name='tmp.gen-name_length' value='`$tmp.gen-name_length + 1`' />
</set>
</block>
</outcome>
@@ -175,9 +193,14 @@
<parameter name='target' value=',]' />
<parameter name='replacement' value=']' />
</execute>
- <execute plugin='org.openecomp.sdnc.prov.namegeneration.node.AssignNameNode' method='process'>
- <parameter name='payload' value='`$tmp.naming-data-payload`' />
- <parameter name="prifix" value="nameGenResponse" />
+ <execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >
+ <parameter name='templateFileName' value="`$prop.restapi.templateDir + '/' + $prop.restapi.naming.gen-name.templatefile`" />
+ <parameter name='restapiUrl' value='`$prop.naming.gen-name.url + $prop.restapi.naming.gen-name.service`' />
+ <parameter name='restapiUser' value='`$prop.naming.gen-name.user`' />
+ <parameter name='restapiPassword' value='`$prop.naming.gen-name.pwd`' />
+ <parameter name='format' value='json' />
+ <parameter name='httpMethod' value='POST' />
+ <parameter name="responsePrefix" value="nameGenResponse" />
<outcome value='failure'>
<block>
<set>
@@ -204,7 +227,7 @@
</outcome>
</execute>
<execute plugin="org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils" method="jsonStringToCtx">
- <parameter name="source" value="nameGenResponse.response-payload" />
+ <parameter name="source" value="nameGenResponse.httpResponse" />
<parameter name="outputPath" value="jsonContextPrefix" />
<parameter name="isEscaped" value="false" />
</execute>
@@ -276,12 +299,16 @@
<block atomic='true'>
<set>
<parameter name='tmp.naming-data-payload' value="`$tmp.naming-data-payload + '{'`" />
+ <parameter name='tmp.gen-name_length' value='1' />
</set>
<for index='j' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key_length`' >
<switch test="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].name == 'external-key'`">
<outcome value='true'>
<set>
<parameter name="tmp.naming-data-payload" value="`$tmp.naming-data-payload + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].name + '&quot;:' + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].value + '&quot;,'`"/>
+ <parameter name="`tmp.gen-name[0].element[$j].name`" value="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].name`"/>
+ <parameter name="`tmp.gen-name[0].element[$j].value`" value="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].value`"/>
+ <parameter name="`tmp.gen-name[0].element_length`" value='`$j + 1`' />
</set>
</outcome>
</switch>
@@ -304,9 +331,14 @@
<parameter name='target' value=',]' />
<parameter name='replacement' value=']' />
</execute>
- <execute plugin='org.openecomp.sdnc.prov.namegeneration.node.UnAssignNameNode' method='process'>
- <parameter name='payload' value='`$tmp.naming-data-payload`' />
- <parameter name="prifix" value="nameGenResponse" />
+ <execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >
+ <parameter name='templateFileName' value="`$prop.restapi.templateDir + '/' + $prop.restapi.naming.gen-name.templatefile`" />
+ <parameter name='restapiUrl' value='`$prop.naming.gen-name.url + $prop.restapi.naming.gen-name.service`' />
+ <parameter name='restapiUser' value='`$prop.naming.gen-name.user`' />
+ <parameter name='restapiPassword' value='`$prop.naming.gen-name.pwd`' />
+ <parameter name='format' value='json' />
+ <parameter name='httpMethod' value='DELETE' />
+ <parameter name="responsePrefix" value="nameGenResponse" />
<outcome value='failure'>
<block>
<set>
@@ -333,7 +365,7 @@
</outcome>
</execute>
<execute plugin="org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils" method="jsonStringToCtx">
- <parameter name="source" value="nameGenResponse.response-payload" />
+ <parameter name="source" value="nameGenResponse.httpResponse" />
<parameter name="outputPath" value="jsonContextPrefix" />
<parameter name="isEscaped" value="false" />
</execute>
@@ -379,7 +411,8 @@
<outcome value='true'>
<block atomic='true'>
<set>
- <parameter name='tmp.naming-data-payload' value='' />
+ <parameter name='tmp.naming-data-payload' value='{&quot;elements&quot;:[' />
+ <parameter name='tmp.gen-name_length' value='0' />
</set>
<for index='i' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param_length`' >
<switch test='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.capability-name == $ss.capability-name`'>
@@ -391,10 +424,14 @@
<for index='j' start='0' end='`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key_length`' >
<set>
<parameter name="tmp.naming-data-payload" value="`$tmp.naming-data-payload + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].name + '&quot;:' + '&quot;' + $service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].value + '&quot;,'`"/>
+ <parameter name="`tmp.gen-name[$tmp.gen-name_length].element[$j].name`" value="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].name`"/>
+ <parameter name="`tmp.gen-name[$tmp.gen-name_length].element[$j].value`" value="`$service-data.vnfs.vnf[$vnf-index].vnf-data.vf-modules.vf-module[$vf-module-index].vf-module-data.vf-module-topology.vf-module-parameters.param[$i].resource-resolution-data.resource-key[$j].value`"/>
+ <parameter name="`tmp.gen-name[$tmp.gen-name_length].element_length`" value='`$j + 1`' />
</set>
</for>
<set>
<parameter name='tmp.naming-data-payload' value="`$tmp.naming-data-payload + '},'`" />
+ <parameter name='tmp.gen-name_length' value='`$tmp.gen-name_length + 1`' />
</set>
</block>
</outcome>
@@ -418,9 +455,14 @@
<parameter name='target' value=',]' />
<parameter name='replacement' value=']' />
</execute>
- <execute plugin='org.openecomp.sdnc.prov.namegeneration.node.AssignNameNode' method='process'>
- <parameter name='payload' value='`$tmp.naming-data-payload`' />
- <parameter name="prifix" value="nameGenResponse" />
+ <execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >
+ <parameter name='templateFileName' value="`$prop.restapi.templateDir + '/' + $prop.restapi.naming.gen-name.templatefile`" />
+ <parameter name='restapiUrl' value='`$prop.naming.gen-name.url + $prop.restapi.naming.gen-name.service`' />
+ <parameter name='restapiUser' value='`$prop.naming.gen-name.user`' />
+ <parameter name='restapiPassword' value='`$prop.naming.gen-name.pwd`' />
+ <parameter name='format' value='json' />
+ <parameter name='httpMethod' value='POST' />
+ <parameter name="responsePrefix" value="nameGenResponse" />
<outcome value='failure'>
<block>
<set>
@@ -447,7 +489,7 @@
</outcome>
</execute>
<execute plugin="org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils" method="jsonStringToCtx">
- <parameter name="source" value="nameGenResponse.response-payload" />
+ <parameter name="source" value="nameGenResponse.httpResponse" />
<parameter name="outputPath" value="jsonContextPrefix" />
<parameter name="isEscaped" value="false" />
</execute>
diff --git a/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-activate.xml b/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-activate.xml
index 23b28c85..9e0e96c6 100644
--- a/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-activate.xml
+++ b/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-activate.xml
@@ -41,6 +41,9 @@
<outcome value='Created'>
<block></block>
</outcome>
+ <outcome value='PendingDelete'>
+ <block></block>
+ </outcome>
<outcome value='Other'>
<return status='failure'>
<parameter name='ack-final' value='Y'/>
@@ -378,8 +381,7 @@
</set>
<get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
resource="pnf"
- key="network-resource.network-id = $mdsal-psd.service-data.networks.network[0].network-id
- AND pnf.pnf-name = $oof.vpn.access-node-id
+ key="pnf.pnf-name = $oof.vpn.access-node-id
AND depth = '0'"
pfx='tmp.aai.pnf' local-only='false' >
<outcome value='success'>
@@ -431,7 +433,7 @@
</get-resource>
<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >
<parameter name="templateFileName" value="`$prop.restapi.templateDir + '/sotn-ethernet-service.json'`" />
- <parameter name="restapiUrl" value="`$prop.sdncRestApi.thirdpartySdnc.url + 'restconf/data/ietf-eth-tran-service:etht-svc'`" />
+ <parameter name="restapiUrl" value="`$prop.sdncRestApi.thirdpartySdnc.url + '/restconf/data/ietf-eth-tran-service:etht-svc'`" />
<parameter name="restapiUser" value="`$prop.sdncRestApi.thirdpartySdnc.user`" />
<parameter name="restapiPassword" value="`$prop.sdncRestApi.thirdpartySdnc.password`" />
<parameter name="format" value="json"/>
@@ -489,7 +491,7 @@
key='vpn-binding.vpn-id = $tmp.vpnName'
force="true" pfx="tmp.AnAI-data">
<parameter name="relationship-list.relationship[0].related-to" value="p-interface" />
- <parameter name="relationship-list.relationship[0].related-link" value="`'/network/network-resources/network-resource/' + $mdsal-psd.service-data.networks.network[0].network-id + '/pnfs/pnf/' + $oof.vpn.access-node-id '/p-interfaces/p-interface/' + $src-ltpId`" />
+ <parameter name="relationship-list.relationship[0].related-link" value="`'/network/pnfs/pnf/' + $oof.vpn.access-node-id + '/p-interfaces/p-interface/' + $src-ltpId`" />
<parameter name="relationship-list.relationship[0].relationship-data[0].relationship-key" value="p-interface.interface-name" />
<parameter name="relationship-list.relationship[0].relationship-data[0].relationship-value" value="`$src-ltpId`" />
</save>
@@ -497,7 +499,7 @@
key='vpn-binding.vpn-id = $tmp.vpnName'
force="true" pfx="tmp.AnAI-data">
<parameter name="relationship-list.relationship[0].related-to" value="p-interface" />
- <parameter name="relationship-list.relationship[0].related-link" value="`'/network/network-resources/network-resource/' + $mdsal-psd.service-data.networks.network[0].network-id + '/pnfs/pnf/' + $oof.vpn.access-node-id '/p-interfaces/p-interface/' + $dst-ltpId`" />
+ <parameter name="relationship-list.relationship[0].related-link" value="`'/network/pnfs/pnf/' + $oof.vpn.access-node-id + '/p-interfaces/p-interface/' + $dst-ltpId`" />
<parameter name="relationship-list.relationship[0].relationship-data[0].relationship-key" value="p-interface.interface-name" />
<parameter name="relationship-list.relationship[0].relationship-data[0].relationship-value" value="`$dst-ltpId`" />
</save>
@@ -571,8 +573,7 @@
pfx='pfx' local-only='false' force='false'>
<parameter name="description" value="`$connection-attachment-topology-operation-input.allotted-resource-information.allotted-resource-type`" />
<parameter name="selflink" value="`$tmp.ar.self-link`" />
- <parameter name="model-invariant-id" value="`$connection-attachment-topology-operation-input.allotted-resource-information.onap-model-information.model-invariant-uuid`" />
- <parameter name="model-version-id" value="`$connection-attachment-topology-operation-input.allotted-resource-information.onap-model-information.model-uuid`" />
+ <!--parameter name="model-invariant-id" value="`$connection-attachment-topology-operation-input.allotted-resource-information.onap-model-information.model-invariant-uuid`" /><parameter name="model-version-id" value="`$connection-attachment-topology-operation-input.allotted-resource-information.onap-model-information.model-uuid`" /-->
<parameter name="operational-status" value="Active" />
<outcome value='failure'>
<return status='failure'>
@@ -596,4 +597,4 @@
</return>
</block>
</method>
-</service-logic> \ No newline at end of file
+</service-logic>
diff --git a/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-create.xml b/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-create.xml
index e0beaac9..073b4210 100644
--- a/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-create.xml
+++ b/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sotn-attachment-topology-operation-create.xml
@@ -270,6 +270,9 @@ value="`$connection-attachment-ar-identifiers.`" />
</return>
</outcome>
</save>
+ <set>
+ <parameter name='src-ltpId' value="`'nodeId-' + $prop.connection-attachment.access-node-id + '-ltpId-' + $prop.connection-attachment.access-ltp-id`" />
+ </set>
<save plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
resource="allotted-resource"
key="customer.global-customer-id = $connection-attachment-topology-operation-input.service-information.global-customer-id AND
@@ -278,7 +281,7 @@ value="`$connection-attachment-ar-identifiers.`" />
allotted-resource.id = $tmp.ar.allotted-resource-id"
force="true" pfx="tmp.AnAI-data">
<parameter name="relationship-list.relationship[0].related-to" value="p-interface" />
- <parameter name="relationship-list.relationship[0].related-link" value="`'/network/pnfs/pnf/' + $prop.connection-attachment.access-node-id + '/p-interfaces/p-interface/' + $prop.connection-attachment.access-ltp-id`" />
+ <parameter name="relationship-list.relationship[0].related-link" value="`'/network/pnfs/pnf/' + $prop.connection-attachment.access-node-id + '/p-interfaces/p-interface/' + $src-ltpId`" />
<parameter name="relationship-list.relationship[0].relationship-data[0].relationship-key" value="p-interface.interface-name" />
<parameter name="relationship-list.relationship[0].relationship-data[0].relationship-value" value="`$src-ltpId`" />
</save>
diff --git a/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sotn-network-topology-operation-reoptimize.xml b/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sotn-network-topology-operation-reoptimize.xml
new file mode 100644
index 00000000..9a257eb4
--- /dev/null
+++ b/platform-logic/generic-resource-api/src/main/xml/GENERIC-RESOURCE-API_sotn-network-topology-operation-reoptimize.xml
@@ -0,0 +1,89 @@
+<service-logic
+ xmlns='http://www.onap.org/sdnc/svclogic'
+ xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='GENERIC-RESOURCE-API' version='${project.version}'>
+ <method rpc='sotn-network-topology-operation-reoptimize' mode='sync'>
+ <block atomic="true">
+ <set>
+ <parameter name='tmp.network.network-id' value='`$network-topology-operation-input.network-information.network-id`' />
+ <parameter name='tmp.network.service-instance-id' value='`$network-topology-operation-input.service-information.service-instance-id`' />
+ </set>
+ <execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >
+ <parameter name='fileName' value='%SDNC_CONFIG_DIR%/generic-resource-api-dg.properties' />
+ <parameter name='contextPrefix' value='prop' />
+ </execute>
+ <set>
+ <parameter name = 'tmp.service-data.' value="`$service-data.`"/>
+ </set>
+ <for index='pidx' start='0' end='`$service-data.provided-allotted-resources.provided-allotted-resource_length`' >
+ <block atomic="true">
+ <set>
+ <parameter name='prop.ar.provided-allotted-resource-id' value='`$service-data.provided-allotted-resources.provided-allotted-resource[$pidx].allotted-resource-id`' />
+ </set>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliStringUtils' method='replace' >
+ <parameter name="source" value="`$prop.restapi.connection-attachment-allottedresource`"/>
+ <parameter name="outputPath" value="tmp.ar-url-connection"/>
+ <parameter name="target" value="{allotted-resource-id}"/>
+ <parameter name="replacement" value='`$prop.ar.provided-allotted-resource-id`'/>
+ </execute>
+ <execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >
+ <parameter name='restapiUrl' value='`$prop.controller.url + $tmp.ar-url-connection`' />
+ <parameter name='restapiUser' value='`$prop.controller.user`' />
+ <parameter name='restapiPassword' value='`$prop.controller.pwd`' />
+ <parameter name='format' value='json' />
+ <parameter name='httpMethod' value='GET' />
+ <parameter name="responsePrefix" value="mdsal-providedAr" />
+ <outcome value='success'>
+ <block></block>
+ </outcome>
+ <outcome value='Other'>
+ <return status='failure'>
+ <parameter name='ack-final' value='Y'/>
+ <parameter name="error-code" value="404" />
+ <parameter name="error-message" value="Error: Parent service data not available" />
+ </return>
+ </outcome>
+ </execute>
+ <set>
+ <parameter name='connection-attachment-topology-operation-input.request-information.request-action' value="`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-status.action` " />
+ <parameter name='connection-attachment-topology-operation-input.sdnc-request-header.svc-action' value="`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-status.rpc-action` " />
+ <parameter name='connection-attachment-topology-operation-input.request-information.' value="`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.allotted-resource-operation-information.request-information.` " />
+ <parameter name='connection-attachment-topology-operation-input.sdnc-request-header.' value="`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.allotted-resource-operation-information.sdnc-request-header.` " />
+ <parameter name='connection-attachment-topology-operation-input.service-information.' value="`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.allotted-resource-operation-information.service-information.` " />
+ <parameter name='connection-attachment-topology-operation-input.allotted-resource-information.' value="`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.allotted-resource-operation-information.allotted-resource-information.` " />
+ <parameter name='connection-attachment-topology-operation-input.connection-attachment-request-input.' value="`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.allotted-resource-operation-information.connection-attachment-request-input.` " />
+ </set>
+ <set>
+ <parameter name='connection-attachment-topology-operation-input.service-information.service-instance-id' value="`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.connection-attachment-topology.allotted-resource-identifiers.consuming-service-instance-id` " />
+ <parameter name='connection-attachment-topology-operation-input.allotted-resource-information.parent-service-instance-id' value="`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.connection-attachment-topology.allotted-resource-identifiers.parent-service-instance-id` " />
+ <parameter name='connection-attachment-topology-operation-input.allotted-resource-information.allotted-resource-type' value="`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.connection-attachment-topology.allotted-resource-identifiers.allotted-resource-type` " />
+ <parameter name='connection-attachment-topology-operation-input.allotted-resource-information.allotted-resource-id' value="`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.connection-attachment-topology.allotted-resource-identifiers.allotted-resource-id` " />
+ </set>
+ <set>
+ <parameter name='connection-attachment-topology-operation-input.allotted-resource-information.onap-model-information.' value="`$mdsal-providedAr.connection-attachment-allotted-resource[0].allotted-resource-data.connection-attachment-topology.onap-model-information.` " />
+ </set>
+ <set>
+ <parameter name='connection-attachment-topology-operation-input.sdnc-request-header.svc-action' value="deactivate" />
+ <parameter name='connection-attachment-topology-operation-input.request-information.request-action' value="DeactivateSOTNAttachmentInstance" />
+ <parameter name='connection-attachment-topology-operation-input.service-information.global-customer-id' value="`$service-data.service-information.global-customer-id` " />
+ <parameter name='connection-attachment-topology-operation-input.service-information.subscription-service-type' value="`$service-data.service-information.subscription-service-type` " />
+ <parameter name='connection-attachment-topology-operation-input.service-information.subscriber-name' value="`$service-data.service-information.subscriber-name` " />
+ </set>
+ <call module='GENERIC-RESOURCE-API' rpc='sotn-attachment-topology-operation-deactivate' mode='sync' ></call>
+ <set>
+ <parameter name='connection-attachment-topology-operation-input.sdnc-request-header.svc-action' value="activate" />
+ <parameter name='connection-attachment-topology-operation-input.request-information.request-action' value="ActivateSOTNAttachmentInstance" />
+ </set>
+ <call module='GENERIC-RESOURCE-API' rpc='sotn-attachment-topology-operation-activate' mode='sync' ></call>
+ </block>
+ </for>
+ <set>
+ <parameter name = 'service-data. ' value = "`$tmp.service-data.`"/>
+ </set>
+ <return status='success'>
+ <parameter name="ack-final-indicator" value="Y" />
+ <parameter name="error-code" value="200" />
+ <parameter name="error-message" value="`$error-message`" />
+ </return>
+ </block>
+ </method>
+</service-logic> \ No newline at end of file
diff --git a/platform-logic/lcm/src/main/json/LCM_distribute-traffic.json b/platform-logic/lcm/src/main/json/LCM_distribute-traffic.json
index 30ee561d..fcd3d4f3 100755
--- a/platform-logic/lcm/src/main/json/LCM_distribute-traffic.json
+++ b/platform-logic/lcm/src/main/json/LCM_distribute-traffic.json
@@ -1,22 +1,22 @@
[
{
- "id": "1a420388.7ce24c",
+ "id": "fab0f7ed.c486b8",
"type": "method",
"name": "distribute-traffic",
"xml": "<method rpc='distribute-traffic' mode='sync'>\n",
"comments": "",
"outputs": 1,
- "x": 550,
- "y": 102,
- "z": "af8f5cdd.6e4de",
+ "x": 480,
+ "y": 147,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "e635fd5d.f4087"
+ "5ccc8e8d.06e5"
]
]
},
{
- "id": "c220826b.91906",
+ "id": "5c791eb8.0072b",
"type": "service-logic",
"name": "LCM ${project.version}",
"module": "LCM",
@@ -24,528 +24,788 @@
"comments": "",
"xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='LCM' version='${project.version}'>",
"outputs": 1,
- "x": 337.99993896484375,
- "y": 103,
- "z": "af8f5cdd.6e4de",
+ "x": 267.99993896484375,
+ "y": 148,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "1a420388.7ce24c"
+ "fab0f7ed.c486b8"
]
]
},
{
- "id": "810e1e54.dec1c",
+ "id": "3503ece1.d7ad14",
"type": "execute",
"name": "execute AnsibleA.reqExec",
- "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >\n<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n<parameter name='User' value='`$prop.ansible.user`'/>\n<parameter name='Password' value='`$prop.ansible.password`'/>\n<parameter name='LocalParameters' value='`$prop.ansible.lcm.localparameters`'/>\n<parameter name='EnvParameters' value='`$distribute-traffic-input.payload`'/>\n<parameter name='NodeList' value=\"`$nodelist`\"/>\n<parameter name='Timeout' value='`$prop.ansible.timeout`'/>\n<parameter name='Version' value='`$prop.ansible.version`'/>\n<parameter name='Id' value='`$distribute-traffic-input.common-header.request-id`'/>\n<parameter name='PlaybookName' value='`$prop.lcm.distribute-traffic.playbookname`'/>",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >\n<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n<parameter name='User' value='`$prop.ansible.user`'/>\n<parameter name='Password' value='`$prop.ansible.password`'/>\n<parameter name='LocalParameters' value='`$prop.ansible.lcm.localparameters`'/>\n<parameter name='EnvParameters' value='`$distribute-traffic-input.payload`'/>\n<parameter name='NodeList' value=\"`$nodelist`\"/>\n<parameter name='Timeout' value='`$prop.ansible.timeout`'/>\n<parameter name='Version' value='`$prop.ansible.version`'/>\n<parameter name='Id' value='`$distribute-traffic-input.common-header.request-id`'/>\n<parameter name='PlaybookName' value='`$playbookname`'/>",
"comments": "",
"outputs": 1,
- "x": 345.00001525878906,
- "y": 379,
- "z": "af8f5cdd.6e4de",
+ "x": 335.00001525878906,
+ "y": 755,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f279f5b8.9d49b8",
- "895a0a53.e12ea8",
- "fa759954.4e2068"
+ "734b2c42.973ee4",
+ "bb8a76ca.fb7058",
+ "a457fe79.46497"
]
]
},
{
- "id": "f7db5396.7b5f1",
+ "id": "f17ff2aa.67075",
"type": "switchNode",
"name": "switch",
"xml": "<switch test=\"`$org.onap.appc.adapter.ansible.result.code`\">\n",
"comments": "",
"outputs": 1,
- "x": 690.9999389648438,
- "y": 530.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 734.9999389648438,
+ "y": 863.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "bc5a2382.4973",
- "84f0dd88.8438",
- "ffd4aab1.e3c4b8"
+ "7ad5787f.1c20f8",
+ "b6f779a3.cc7ed8",
+ "f695f05e.abf31"
]
]
},
{
- "id": "bc5a2382.4973",
+ "id": "7ad5787f.1c20f8",
"type": "other",
"name": "outcome 500",
"xml": "<outcome value='500'>\n",
"comments": "",
"outputs": 1,
- "x": 835.9999389648438,
- "y": 528.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 879.9999389648438,
+ "y": 861.0000381469727,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "84f0dd88.8438",
+ "id": "b6f779a3.cc7ed8",
"type": "other",
"name": "outcome 100",
"xml": "<outcome value='100'>\n",
"comments": "",
"outputs": 1,
- "x": 838.9999389648438,
- "y": 571.0000610351562,
- "z": "af8f5cdd.6e4de",
+ "x": 876.9999389648438,
+ "y": 918.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f44a47b3.3aa128"
+ "1a65bc45.b2fcb4"
]
]
},
{
- "id": "f44a47b3.3aa128",
+ "id": "1a65bc45.b2fcb4",
"type": "execute",
"name": "execute reqExecResult",
- "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExecResult' >\n <parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n\t<parameter name='User' value='`$prop.ansible.user`'/>\n\t<parameter name='Password' value='`$prop.ansible.password`'/>\n\t<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>\n\t<parameter name='PlaybookName' value='`$prop.lcm.distribute-traffic.playbookname`'/>\n\t\n\n\n\n\n",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExecResult' >\n <parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n\t<parameter name='User' value='`$prop.ansible.user`'/>\n\t<parameter name='Password' value='`$prop.ansible.password`'/>\n\t<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>\n\t<parameter name='PlaybookName' value='`$playbookname`'/>\n\t\n\n\n\n\n",
"comments": "",
"outputs": 1,
- "x": 1025.9999389648438,
- "y": 570.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 1064.9999389648438,
+ "y": 917.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "dd2fe7e6.957248",
- "6913b982.6c9bb8"
+ "5b0d24c6.9eb0ac",
+ "2b5e4322.1d495c"
]
]
},
{
- "id": "895a0a53.e12ea8",
+ "id": "bb8a76ca.fb7058",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 581.9999389648438,
- "y": 439.0000534057617,
- "z": "af8f5cdd.6e4de",
+ "x": 593.9999389648438,
+ "y": 776.0000915527344,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "f279f5b8.9d49b8",
+ "id": "734b2c42.973ee4",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 583.9999389648438,
- "y": 491.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 595.9999389648438,
+ "y": 828.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f7db5396.7b5f1"
+ "f17ff2aa.67075"
]
]
},
{
- "id": "dd2fe7e6.957248",
+ "id": "5b0d24c6.9eb0ac",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1189.9999389648438,
- "y": 542.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 1233.9999389648438,
+ "y": 875.0000381469727,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "ffd4aab1.e3c4b8",
+ "id": "f695f05e.abf31",
"type": "other",
"name": "outcome 101",
"xml": "<outcome value='101'>\n",
"comments": "",
"outputs": 1,
- "x": 832.9999389648438,
- "y": 486.00006103515625,
- "z": "af8f5cdd.6e4de",
+ "x": 876.9999389648438,
+ "y": 819.0000686645508,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "6913b982.6c9bb8",
+ "id": "2b5e4322.1d495c",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 1191.9999389648438,
- "y": 597.0000915527344,
- "z": "af8f5cdd.6e4de",
+ "x": 1241.9998779296875,
+ "y": 923.0001220703125,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "14c8dea1.b5b7a1"
+ "db1e6d62.a1404"
]
]
},
{
- "id": "a32993f8.f8215",
+ "id": "c1a2b259.11e46",
"type": "returnSuccess",
"name": "return success",
"xml": "<return status='success'>\n<parameter name='status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='status.message' value='`$org.onap.appc.adapter.ansible.message`'/>",
"comments": "",
- "x": 1467.9998779296875,
- "y": 648.0000610351562,
- "z": "af8f5cdd.6e4de",
+ "x": 1535.9998779296875,
+ "y": 980.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "d8c3f83d.d0b9d8",
+ "id": "566f9779.c05d38",
"type": "dgstart",
"name": "DGSTART",
"outputs": 1,
- "x": 153,
- "y": 102,
- "z": "af8f5cdd.6e4de",
+ "x": 83,
+ "y": 147,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "c220826b.91906"
+ "5c791eb8.0072b"
]
]
},
{
- "id": "e635fd5d.f4087",
+ "id": "5ccc8e8d.06e5",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 139.91668701171875,
- "y": 241.08334350585938,
- "z": "af8f5cdd.6e4de",
+ "x": 80.91668701171875,
+ "y": 239.08334350585938,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "810e1e54.dec1c",
- "ee1802be.c5c18",
- "e8d3b31a.f46c6",
- "4d7f56db.9375c8"
+ "3503ece1.d7ad14",
+ "dc18f7c9.2e4ac8",
+ "814875d2.cac108",
+ "e9d89bdf.30f7a8",
+ "69e97f86.e07ef",
+ "fa9a8e1f.bba53",
+ "baba22fc.1ceb5",
+ "81510405.ca8868"
]
]
},
{
- "id": "ee1802be.c5c18",
+ "id": "dc18f7c9.2e4ac8",
"type": "execute",
"name": "execute Properties",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/lcm-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
"comments": "",
"outputs": 1,
- "x": 328.00001525878906,
- "y": 225.08334350585938,
- "z": "af8f5cdd.6e4de",
+ "x": 379.0000305175781,
+ "y": 272.0833435058594,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "3830f5d4.87f1aa",
+ "id": "70d1c79a.089af8",
"type": "execute",
"name": "execute DmaapMsg",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
"comments": "",
"outputs": 1,
- "x": 1222.9999389648438,
- "y": 371.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1545.9998779296875,
+ "y": 725.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "1566d659.a0655a"
+ "d776c76b.1dd188"
]
]
},
{
- "id": "1566d659.a0655a",
+ "id": "d776c76b.1dd188",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1392.9998779296875,
- "y": 370.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1715.9998168945312,
+ "y": 724.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "22f8bfd0.6139e"
+ "eac6c260.d11fc"
]
]
},
{
- "id": "80cc4946.3f0f78",
+ "id": "2b54a991.b17b16",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1025.9998779296875,
- "y": 395.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1348.9998168945312,
+ "y": 749.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "3830f5d4.87f1aa",
- "fedbb5e6.fb3c28",
- "898f667e.daf2e8"
+ "70d1c79a.089af8",
+ "7970fcd5.6f11b4",
+ "3d8934f9.d0339c"
]
]
},
{
- "id": "7ce48bed.5b7c74",
+ "id": "e790e11b.4f947",
"type": "execute",
"name": "execute DmaapMsg",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
"comments": "",
"outputs": 1,
- "x": 1488.4998779296875,
- "y": 597.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1546.4998779296875,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "37e7fa80.2728b6"
+ "2e13891.034f576"
]
]
},
{
- "id": "37e7fa80.2728b6",
+ "id": "2e13891.034f576",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1648.4998779296875,
- "y": 597.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1714.4998779296875,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "47c7511a.dd8fe"
+ "30475e40.9b8be2"
]
]
},
{
- "id": "22f8bfd0.6139e",
+ "id": "eac6c260.d11fc",
"type": "record",
"name": "record",
"xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
"comments": "",
"outputs": 1,
- "x": 1524.9998779296875,
- "y": 370.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1835.9998779296875,
+ "y": 723.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "fedbb5e6.fb3c28",
+ "id": "7970fcd5.6f11b4",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n<parameter name='status.code' value='401' />\n<parameter name='status.message' value='`$org.onap.appc.adapter.ansible.message`' />\n",
"comments": "",
- "x": 1197.9165649414062,
- "y": 408.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1527.91650390625,
+ "y": 776.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "47c7511a.dd8fe",
+ "id": "30475e40.9b8be2",
"type": "record",
"name": "record",
"xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
"comments": "",
"outputs": 1,
- "x": 1769.9166259765625,
- "y": 598.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1842.9166259765625,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "898f667e.daf2e8",
+ "id": "3d8934f9.d0339c",
"type": "set",
- "name": "set",
+ "name": "set DmaapReq",
"xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$distribute-traffic-input.common-header.request-id + '-' + $distribute-traffic-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='distribute-traffic'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$distribute-traffic-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$distribute-traffic-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$distribute-traffic-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$distribute-traffic-input.common-header.request-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$distribute-traffic-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$distribute-traffic-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$distribute-traffic-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$distribute-traffic-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='lcm-dmaap.status.message' value='`$org.onap.appc.adapter.ansible.message`'/>\n",
"comments": "",
- "x": 1174.9999389648438,
- "y": 318.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1532.9998779296875,
+ "y": 672.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "14c8dea1.b5b7a1",
+ "id": "db1e6d62.a1404",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1317.9998779296875,
- "y": 596.0833435058594,
- "z": "af8f5cdd.6e4de",
+ "x": 1369.9998779296875,
+ "y": 924.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "7ce48bed.5b7c74",
- "70a28c6a.563d24",
- "a32993f8.f8215"
+ "e790e11b.4f947",
+ "3a3f1d44.898da2",
+ "c1a2b259.11e46"
]
]
},
{
- "id": "70a28c6a.563d24",
+ "id": "3a3f1d44.898da2",
"type": "set",
- "name": "set",
+ "name": "set DmaapReq",
"xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$distribute-traffic-input.common-header.request-id + '-' + $distribute-traffic-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='distribute-traffic'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$distribute-traffic-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$distribute-traffic-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$distribute-traffic-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$distribute-traffic-input.common-header.request-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$distribute-traffic-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$distribute-traffic-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$distribute-traffic-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$distribute-traffic-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='lcm-dmaap.status.message' value='`$org.onap.appc.adapter.ansible.message`'/>\n",
"comments": "",
- "x": 1448.1666259765625,
- "y": 549.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1536.1666259765625,
+ "y": 875.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "fa759954.4e2068",
+ "id": "a457fe79.46497",
"type": "not-found",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 577.9999389648438,
- "y": 392.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 602.9999389648438,
+ "y": 728.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "ed41675d.59c088"
+ "3d4c2c9a.7b1324"
]
]
},
{
- "id": "756c2e53.ca6d7",
+ "id": "d512629f.bc625",
"type": "set",
"name": "set Defaults",
"xml": "<set>\n<parameter name='org.onap.appc.adapter.ansible.result.code' value='401'/>\n<parameter name='org.onap.appc.adapter.ansible.message' value='Ansible Adapter was not found'/>\n",
"comments": "",
- "x": 1009.9999389648438,
- "y": 297.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 893.9999389648438,
+ "y": 687,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "ed41675d.59c088",
+ "id": "3d4c2c9a.7b1324",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 761.9999389648438,
- "y": 384.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 739.9999389648438,
+ "y": 722.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "756c2e53.ca6d7",
- "80cc4946.3f0f78"
+ "d512629f.bc625",
+ "2b54a991.b17b16"
]
]
},
{
- "id": "e8d3b31a.f46c6",
+ "id": "814875d2.cac108",
"type": "set",
- "name": "set default status value",
- "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>",
+ "name": "set default values",
+ "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n<parameter name='quote' value=\"'\" />\n",
"comments": "",
- "x": 336,
- "y": 269,
- "z": "af8f5cdd.6e4de",
+ "x": 372,
+ "y": 319,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "4d7f56db.9375c8",
+ "id": "442dbdff.6dfcb4",
"type": "get-resource",
- "name": "get aai.generic-vnf by vnf-id",
+ "name": "get aai.generic-vnf ",
"xml": "<get-resource plugin=\"org.onap.ccsdk.sli.adaptors.aai.AAIService\" \n\tresource=\"generic-vnf\" \n\t\tkey=\"generic-vnf.vnf-id = $distribute-traffic-input.action-identifiers.vnf-id\" \n\t\tlocal-only=\"false\" \n\t\tpfx='aai.generic-vnf'>",
"comments": "",
"outputs": 1,
- "x": 349.0000305175781,
- "y": 325,
- "z": "af8f5cdd.6e4de",
+ "x": 912,
+ "y": 495,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "fa69a126.2a554",
- "f9cb9963.f9e368"
+ "1e57cb28.122ad5"
]
]
},
{
- "id": "fa69a126.2a554",
- "type": "failure",
+ "id": "1e57cb28.122ad5",
+ "type": "success",
+ "name": "success",
+ "xml": "<outcome value='success'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1070.3907470703125,
+ "y": 493.28399658203125,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "5a65efc0.bf413"
+ ]
+ ]
+ },
+ {
+ "id": "baba22fc.1ceb5",
+ "type": "record",
+ "name": "record",
+ "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='`$playbookname`'/>\n\t<parameter name=\"field2\" value='`$nodelist`'/>",
+ "comments": "",
+ "outputs": 1,
+ "x": 300.9998779296875,
+ "y": 683,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "69e97f86.e07ef",
+ "type": "switchNode",
+ "name": "switch pnf-flag",
+ "xml": "<switch test='`$payloadJson.pnf-flag`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 354,
+ "y": 420,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "e43265e9.4c7f38",
+ "d78c93da.7125f"
+ ]
+ ]
+ },
+ {
+ "id": "e9d89bdf.30f7a8",
+ "type": "execute",
+ "name": "execute jsonStringToCtx",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='jsonStringToCtx'>\n\t<parameter name='source' value='distribute-traffic-input.payload' />\n\t<parameter name='outputPath' value='payloadJson' />\n\t<parameter name='isEscaped' value='true' />",
+ "comments": "",
+ "outputs": 1,
+ "x": 386,
+ "y": 366,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "e43265e9.4c7f38",
+ "type": "outcome",
+ "name": "true",
+ "xml": "<outcome value='true'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 551,
+ "y": 399,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "abbc4ae4.be5328"
+ ]
+ ]
+ },
+ {
+ "id": "d78c93da.7125f",
+ "type": "outcome",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 589.86083984375,
- "y": 312.53564453125,
- "z": "af8f5cdd.6e4de",
+ "x": 550.9999389648438,
+ "y": 460,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "2d1a88c6.11f9d8"
+ "f68ee407.ca6d88"
]
]
},
{
- "id": "f9cb9963.f9e368",
- "type": "success",
- "name": "success",
- "xml": "<outcome value='success'>\n",
+ "id": "f68ee407.ca6d88",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
"comments": "",
"outputs": 1,
- "x": 591.3908081054688,
- "y": 260.28399658203125,
- "z": "af8f5cdd.6e4de",
+ "x": 698.9999389648438,
+ "y": 459,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "c4d4de4d.3e19f"
+ "442dbdff.6dfcb4",
+ "80c560bb.eea5f"
]
]
},
{
- "id": "c4d4de4d.3e19f",
+ "id": "abbc4ae4.be5328",
+ "type": "set",
+ "name": "set AnsibleReq",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`'[' + $quote + $payloadJson.ipaddress-v4-oam + $quote + ']'`\"/>\n<parameter name='playbookname' value='`$prop.lcm.pnf.distribute-traffic.playbookname`'/>\n",
+ "comments": "",
+ "x": 712,
+ "y": 397,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "80c560bb.eea5f",
+ "type": "execute",
+ "name": "set playbookname",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>\n\t<parameter name='outputPath' value='playbookname' />\n\t<parameter name='source' value=\"`'prop.lcm.' + $payloadJson.nf-naming-code + '.distribute-traffic.playbookname'`\" />\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 921,
+ "y": 439,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "fa9a8e1f.bba53",
+ "type": "switchNode",
+ "name": "switch playbookname",
+ "xml": "<switch test='`$playbookname`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 351,
+ "y": 551,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "1a5624d2.74e98b"
+ ]
+ ]
+ },
+ {
+ "id": "1a5624d2.74e98b",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 522,
+ "y": 552,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "524c17a1.30fbf8"
+ ]
+ ]
+ },
+ {
+ "id": "524c17a1.30fbf8",
+ "type": "set",
+ "name": "set playbookname",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>\n<parameter name='playbookname' value='`$prop.lcm.distribute-traffic.playbookname`'/>",
+ "comments": "",
+ "x": 712,
+ "y": 551,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "81510405.ca8868",
+ "type": "switchNode",
+ "name": "switch nodelist",
+ "xml": "<switch test='`$nodelist`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 341,
+ "y": 610,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "7a126f.d2de2d9",
+ "8743a074.e8506"
+ ]
+ ]
+ },
+ {
+ "id": "7a126f.d2de2d9",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 521,
+ "y": 603,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c954af6f.c34df"
+ ]
+ ]
+ },
+ {
+ "id": "c954af6f.c34df",
"type": "set",
"name": "set nodelist",
- "xml": "<set>\n<parameter name='quote' value=\"'\" />\n<parameter name='nodelist' value=\"`'[' + $quote + $aai.ipv4-oam-address + $quote + ']'`\"/>\n",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>",
"comments": "",
- "x": 740.3908081054688,
- "y": 259.28399658203125,
- "z": "af8f5cdd.6e4de",
+ "x": 678,
+ "y": 617,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "2d1a88c6.11f9d8",
- "type": "record",
- "name": "record",
- "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='VNF not found in AAI. Nodelist retrieved from config'/>",
+ "id": "8743a074.e8506",
+ "type": "outcome",
+ "name": "empty",
+ "xml": "<outcome value=\"['']\">\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 520,
+ "y": 647,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c954af6f.c34df"
+ ]
+ ]
+ },
+ {
+ "id": "90b2891b.001708",
+ "type": "switchNode",
+ "name": "switch playbookname",
+ "xml": "<switch test='`$playbookname`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1396,
+ "y": 482,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c9dd0d76.432f7"
+ ]
+ ]
+ },
+ {
+ "id": "c9dd0d76.432f7",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1574,
+ "y": 482,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "6ea15b2b.d9cd74"
+ ]
+ ]
+ },
+ {
+ "id": "9706bdee.6acf9",
+ "type": "set",
+ "name": "set nodelist",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`'[' + $quote + $aai.generic-vnf.ipv4-oam-address + $quote + ']'`\"/>\n",
+ "comments": "",
+ "x": 1369,
+ "y": 535,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "5a65efc0.bf413",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 1199,
+ "y": 492,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "90b2891b.001708",
+ "9706bdee.6acf9"
+ ]
+ ]
+ },
+ {
+ "id": "6ea15b2b.d9cd74",
+ "type": "execute",
+ "name": "set playbookname",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>\n\t<parameter name='outputPath' value='playbookname' />\n\t<parameter name='source' value=\"`'prop.lcm.' + $aai.generic-vnf.nf-naming-code + '.distribute-traffic.playbookname'`\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 736,
- "y": 312,
- "z": "af8f5cdd.6e4de",
+ "x": 1746,
+ "y": 480,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
diff --git a/platform-logic/lcm/src/main/json/LCM_lock.json b/platform-logic/lcm/src/main/json/LCM_lock.json
index 32f1f8c0..dea68fab 100644
--- a/platform-logic/lcm/src/main/json/LCM_lock.json
+++ b/platform-logic/lcm/src/main/json/LCM_lock.json
@@ -1,194 +1,164 @@
-[
- {
- "id": "85add9d3.6d38c8",
- "type": "method",
- "name": "lock",
- "xml": "<method rpc='lock' mode='sync'>\n",
- "comments": "",
- "outputs": 1,
- "x": 535.5,
- "y": 83,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "a726273f.d4087"
- ]
- ]
- },
- {
- "id": "6cc2acd4.57558c",
- "type": "service-logic",
- "name": "LCM ${project.version}",
- "module": "LCM",
- "version": "${project.version}",
- "comments": "",
- "xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='LCM' version='${project.version}'>",
- "outputs": 1,
- "x": 306.49993896484375,
- "y": 84,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "85add9d3.6d38c8"
- ]
- ]
- },
- {
- "id": "3b5bd72a.fb19f8",
- "type": "returnSuccess",
- "name": "return success",
- "xml": "<return status='success'>\n<parameter name='status.code' value='400' />\n<parameter name='status.message' value='SDNC Lock Mock returns success'/>",
- "comments": "",
- "x": 388.5,
- "y": 472,
- "z": "1bef9bfd.091c84",
- "wires": []
- },
- {
- "id": "7bee7647.02e808",
- "type": "dgstart",
- "name": "DGSTART",
- "outputs": 1,
- "x": 103.5,
- "y": 83,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "6cc2acd4.57558c"
- ]
- ]
- },
- {
- "id": "a726273f.d4087",
- "type": "block",
- "name": "block",
- "xml": "<block>\n",
- "atomic": "false",
- "comments": "",
- "outputs": 1,
- "x": 139.41668701171875,
- "y": 237.08334350585938,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "c733c1eb.f6dc98",
- "8a3a4a22.8cd238",
- "5c905e45.08ff1",
- "ff16f6f7.bb02d",
- "3b5bd72a.fb19f8"
- ]
- ]
- },
- {
- "id": "c733c1eb.f6dc98",
- "type": "execute",
- "name": "execute Properties",
- "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/lcm-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
- "comments": "",
- "outputs": 1,
- "x": 426.5,
- "y": 222.08334350585938,
- "z": "1bef9bfd.091c84",
- "wires": [
- []
- ]
- },
- {
- "id": "ff16f6f7.bb02d",
- "type": "execute",
- "name": "execute DmaapMsg",
- "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
- "comments": "",
- "outputs": 1,
- "x": 402.5,
- "y": 399.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "4150232b.d9de94"
- ]
- ]
- },
- {
- "id": "4150232b.d9de94",
- "type": "failure",
- "name": "failure",
- "xml": "<outcome value='failure'>\n",
- "comments": "",
- "outputs": 1,
- "x": 611.5,
- "y": 397.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "1c38db15.1f052d"
- ]
- ]
- },
- {
- "id": "f6eb674d.c21",
- "type": "failure",
- "name": "failure",
- "xml": "<outcome value='failure'>\n",
- "comments": "",
- "outputs": 1,
- "x": 1506.9999389648438,
- "y": 415.0833511352539,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "db43d1c.5a1cab"
- ]
- ]
- },
- {
- "id": "1c38db15.1f052d",
- "type": "record",
- "name": "record",
- "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
- "comments": "",
- "outputs": 1,
- "x": 771.5,
- "y": 397.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": [
- []
- ]
- },
- {
- "id": "db43d1c.5a1cab",
- "type": "record",
- "name": "record",
- "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
- "comments": "",
- "outputs": 1,
- "x": 1628.4166870117188,
- "y": 416.0833511352539,
- "z": "1bef9bfd.091c84",
- "wires": [
- []
- ]
- },
- {
- "id": "5c905e45.08ff1",
- "type": "set",
- "name": "set",
- "xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$lock-input.common-header.request-id + '-' + $lock-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='lock'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$lock-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$lock-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$lock-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$lock-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$lock-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$lock-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$lock-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$lock-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='400' />\n<parameter name='lcm-dmaap.status.message' value='SDNC Lock Mock returns success'/>\n",
- "comments": "",
- "x": 374.5,
- "y": 331.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": []
- },
- {
- "id": "8a3a4a22.8cd238",
- "type": "set",
- "name": "set default status value",
- "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n",
- "comments": "",
- "x": 428.5,
- "y": 274,
- "z": "1bef9bfd.091c84",
- "wires": []
- }
-]
+[
+ {
+ "id": "c36c1e82.e47c",
+ "type": "method",
+ "name": "lock",
+ "xml": "<method rpc='lock' mode='sync'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 530,
+ "y": 121,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "ea26f1ed.e963b"
+ ]
+ ]
+ },
+ {
+ "id": "4c2264b2.81a61c",
+ "type": "service-logic",
+ "name": "LCM ${project.version}",
+ "module": "LCM",
+ "version": "${project.version}",
+ "comments": "",
+ "xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='LCM' version='${project.version}'>",
+ "outputs": 1,
+ "x": 300.99993896484375,
+ "y": 122,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "c36c1e82.e47c"
+ ]
+ ]
+ },
+ {
+ "id": "a3360ab0.ce42c8",
+ "type": "returnSuccess",
+ "name": "return success",
+ "xml": "<return status='success'>\n<parameter name='status.code' value='400' />\n<parameter name='status.message' value='SDNC Lock Mock returns success'/>",
+ "comments": "",
+ "x": 383,
+ "y": 510,
+ "z": "a439ae77.f8998",
+ "wires": []
+ },
+ {
+ "id": "7e67863d.7c42f8",
+ "type": "dgstart",
+ "name": "DGSTART",
+ "outputs": 1,
+ "x": 98,
+ "y": 121,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "4c2264b2.81a61c"
+ ]
+ ]
+ },
+ {
+ "id": "ea26f1ed.e963b",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 133.91668701171875,
+ "y": 275.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "f1d5fb31.fa3878",
+ "625601b.39b33",
+ "786cf009.ea481",
+ "cd184491.d656e8",
+ "a3360ab0.ce42c8"
+ ]
+ ]
+ },
+ {
+ "id": "f1d5fb31.fa3878",
+ "type": "execute",
+ "name": "execute Properties",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/lcm-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 421,
+ "y": 260.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "cd184491.d656e8",
+ "type": "execute",
+ "name": "execute DmaapMsg",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 397,
+ "y": 437.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "91133c94.04e29"
+ ]
+ ]
+ },
+ {
+ "id": "91133c94.04e29",
+ "type": "failure",
+ "name": "failure",
+ "xml": "<outcome value='failure'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 606,
+ "y": 435.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "f3b86bb6.9cf808"
+ ]
+ ]
+ },
+ {
+ "id": "f3b86bb6.9cf808",
+ "type": "record",
+ "name": "record",
+ "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
+ "comments": "",
+ "outputs": 1,
+ "x": 766,
+ "y": 435.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "786cf009.ea481",
+ "type": "set",
+ "name": "set",
+ "xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$lock-input.common-header.request-id + '-' + $lock-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='lock'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$lock-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$lock-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$lock-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$lock-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$lock-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$lock-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$lock-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$lock-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='400' />\n<parameter name='lcm-dmaap.status.message' value='SDNC Lock Mock returns success'/>\n",
+ "comments": "",
+ "x": 369,
+ "y": 369.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": []
+ },
+ {
+ "id": "625601b.39b33",
+ "type": "set",
+ "name": "set default status value",
+ "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n",
+ "comments": "",
+ "x": 423,
+ "y": 312,
+ "z": "a439ae77.f8998",
+ "wires": []
+ }
+] \ No newline at end of file
diff --git a/platform-logic/lcm/src/main/json/LCM_quiesce-traffic.json b/platform-logic/lcm/src/main/json/LCM_quiesce-traffic.json
index b88d314d..d6f757a5 100644
--- a/platform-logic/lcm/src/main/json/LCM_quiesce-traffic.json
+++ b/platform-logic/lcm/src/main/json/LCM_quiesce-traffic.json
@@ -1,22 +1,22 @@
[
{
- "id": "1a420388.7ce24c",
+ "id": "fab0f7ed.c486b8",
"type": "method",
"name": "quiesce-traffic",
"xml": "<method rpc='quiesce-traffic' mode='sync'>\n",
"comments": "",
"outputs": 1,
- "x": 550,
- "y": 102,
- "z": "af8f5cdd.6e4de",
+ "x": 480,
+ "y": 147,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "e635fd5d.f4087"
+ "5ccc8e8d.06e5"
]
]
},
{
- "id": "c220826b.91906",
+ "id": "5c791eb8.0072b",
"type": "service-logic",
"name": "LCM ${project.version}",
"module": "LCM",
@@ -24,528 +24,788 @@
"comments": "",
"xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='LCM' version='${project.version}'>",
"outputs": 1,
- "x": 337.99993896484375,
- "y": 103,
- "z": "af8f5cdd.6e4de",
+ "x": 267.99993896484375,
+ "y": 148,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "1a420388.7ce24c"
+ "fab0f7ed.c486b8"
]
]
},
{
- "id": "810e1e54.dec1c",
+ "id": "3503ece1.d7ad14",
"type": "execute",
"name": "execute AnsibleA.reqExec",
- "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >\n<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n<parameter name='User' value='`$prop.ansible.user`'/>\n<parameter name='Password' value='`$prop.ansible.password`'/>\n<parameter name='LocalParameters' value='`$prop.ansible.lcm.localparameters`'/>\n<parameter name='EnvParameters' value='`$quiesce-traffic-input.payload`'/>\n<parameter name='NodeList' value=\"`$nodelist`\"/>\n<parameter name='Timeout' value='`$prop.ansible.timeout`'/>\n<parameter name='Version' value='`$prop.ansible.version`'/>\n<parameter name='Id' value='`$quiesce-traffic-input.common-header.request-id`'/>\n<parameter name='PlaybookName' value='`$prop.lcm.quiesce-traffic.playbookname`'/>",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >\n<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n<parameter name='User' value='`$prop.ansible.user`'/>\n<parameter name='Password' value='`$prop.ansible.password`'/>\n<parameter name='LocalParameters' value='`$prop.ansible.lcm.localparameters`'/>\n<parameter name='EnvParameters' value='`$quiesce-traffic-input.payload`'/>\n<parameter name='NodeList' value=\"`$nodelist`\"/>\n<parameter name='Timeout' value='`$prop.ansible.timeout`'/>\n<parameter name='Version' value='`$prop.ansible.version`'/>\n<parameter name='Id' value='`$quiesce-traffic-input.common-header.request-id`'/>\n<parameter name='PlaybookName' value='`$playbookname`'/>",
"comments": "",
"outputs": 1,
- "x": 345.00001525878906,
- "y": 379,
- "z": "af8f5cdd.6e4de",
+ "x": 335.00001525878906,
+ "y": 755,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f279f5b8.9d49b8",
- "895a0a53.e12ea8",
- "fa759954.4e2068"
+ "734b2c42.973ee4",
+ "bb8a76ca.fb7058",
+ "a457fe79.46497"
]
]
},
{
- "id": "f7db5396.7b5f1",
+ "id": "f17ff2aa.67075",
"type": "switchNode",
"name": "switch",
"xml": "<switch test=\"`$org.onap.appc.adapter.ansible.result.code`\">\n",
"comments": "",
"outputs": 1,
- "x": 690.9999389648438,
- "y": 530.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 734.9999389648438,
+ "y": 863.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "bc5a2382.4973",
- "84f0dd88.8438",
- "ffd4aab1.e3c4b8"
+ "7ad5787f.1c20f8",
+ "b6f779a3.cc7ed8",
+ "f695f05e.abf31"
]
]
},
{
- "id": "bc5a2382.4973",
+ "id": "7ad5787f.1c20f8",
"type": "other",
"name": "outcome 500",
"xml": "<outcome value='500'>\n",
"comments": "",
"outputs": 1,
- "x": 835.9999389648438,
- "y": 528.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 879.9999389648438,
+ "y": 861.0000381469727,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "84f0dd88.8438",
+ "id": "b6f779a3.cc7ed8",
"type": "other",
"name": "outcome 100",
"xml": "<outcome value='100'>\n",
"comments": "",
"outputs": 1,
- "x": 838.9999389648438,
- "y": 571.0000610351562,
- "z": "af8f5cdd.6e4de",
+ "x": 876.9999389648438,
+ "y": 918.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f44a47b3.3aa128"
+ "1a65bc45.b2fcb4"
]
]
},
{
- "id": "f44a47b3.3aa128",
+ "id": "1a65bc45.b2fcb4",
"type": "execute",
"name": "execute reqExecResult",
- "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExecResult' >\n <parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n\t<parameter name='User' value='`$prop.ansible.user`'/>\n\t<parameter name='Password' value='`$prop.ansible.password`'/>\n\t<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>\n\t<parameter name='PlaybookName' value='`$prop.lcm.quiesce-traffic.playbookname`'/>\n\t\n\n\n\n\n",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExecResult' >\n <parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n\t<parameter name='User' value='`$prop.ansible.user`'/>\n\t<parameter name='Password' value='`$prop.ansible.password`'/>\n\t<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>\n\t<parameter name='PlaybookName' value='`$playbookname`'/>\n\t\n\n\n\n\n",
"comments": "",
"outputs": 1,
- "x": 1025.9999389648438,
- "y": 570.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 1064.9999389648438,
+ "y": 917.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "dd2fe7e6.957248",
- "6913b982.6c9bb8"
+ "5b0d24c6.9eb0ac",
+ "2b5e4322.1d495c"
]
]
},
{
- "id": "895a0a53.e12ea8",
+ "id": "bb8a76ca.fb7058",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 581.9999389648438,
- "y": 439.0000534057617,
- "z": "af8f5cdd.6e4de",
+ "x": 593.9999389648438,
+ "y": 776.0000915527344,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "f279f5b8.9d49b8",
+ "id": "734b2c42.973ee4",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 583.9999389648438,
- "y": 491.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 595.9999389648438,
+ "y": 828.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f7db5396.7b5f1"
+ "f17ff2aa.67075"
]
]
},
{
- "id": "dd2fe7e6.957248",
+ "id": "5b0d24c6.9eb0ac",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1189.9999389648438,
- "y": 542.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 1233.9999389648438,
+ "y": 875.0000381469727,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "ffd4aab1.e3c4b8",
+ "id": "f695f05e.abf31",
"type": "other",
"name": "outcome 101",
"xml": "<outcome value='101'>\n",
"comments": "",
"outputs": 1,
- "x": 832.9999389648438,
- "y": 486.00006103515625,
- "z": "af8f5cdd.6e4de",
+ "x": 876.9999389648438,
+ "y": 819.0000686645508,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "6913b982.6c9bb8",
+ "id": "2b5e4322.1d495c",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 1191.9999389648438,
- "y": 597.0000915527344,
- "z": "af8f5cdd.6e4de",
+ "x": 1241.9998779296875,
+ "y": 923.0001220703125,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "14c8dea1.b5b7a1"
+ "db1e6d62.a1404"
]
]
},
{
- "id": "a32993f8.f8215",
+ "id": "c1a2b259.11e46",
"type": "returnSuccess",
"name": "return success",
"xml": "<return status='success'>\n<parameter name='status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='status.message' value='`$org.onap.appc.adapter.ansible.message`'/>",
"comments": "",
- "x": 1467.9998779296875,
- "y": 648.0000610351562,
- "z": "af8f5cdd.6e4de",
+ "x": 1535.9998779296875,
+ "y": 980.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "d8c3f83d.d0b9d8",
+ "id": "566f9779.c05d38",
"type": "dgstart",
"name": "DGSTART",
"outputs": 1,
- "x": 153,
- "y": 102,
- "z": "af8f5cdd.6e4de",
+ "x": 83,
+ "y": 147,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "c220826b.91906"
+ "5c791eb8.0072b"
]
]
},
{
- "id": "e635fd5d.f4087",
+ "id": "5ccc8e8d.06e5",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 139.91668701171875,
- "y": 241.08334350585938,
- "z": "af8f5cdd.6e4de",
+ "x": 80.91668701171875,
+ "y": 239.08334350585938,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "810e1e54.dec1c",
- "ee1802be.c5c18",
- "e8d3b31a.f46c6",
- "4d7f56db.9375c8"
+ "3503ece1.d7ad14",
+ "dc18f7c9.2e4ac8",
+ "814875d2.cac108",
+ "e9d89bdf.30f7a8",
+ "69e97f86.e07ef",
+ "fa9a8e1f.bba53",
+ "baba22fc.1ceb5",
+ "81510405.ca8868"
]
]
},
{
- "id": "ee1802be.c5c18",
+ "id": "dc18f7c9.2e4ac8",
"type": "execute",
"name": "execute Properties",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/lcm-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
"comments": "",
"outputs": 1,
- "x": 328.00001525878906,
- "y": 225.08334350585938,
- "z": "af8f5cdd.6e4de",
+ "x": 379.0000305175781,
+ "y": 272.0833435058594,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "3830f5d4.87f1aa",
+ "id": "70d1c79a.089af8",
"type": "execute",
"name": "execute DmaapMsg",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
"comments": "",
"outputs": 1,
- "x": 1222.9999389648438,
- "y": 371.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1545.9998779296875,
+ "y": 725.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "1566d659.a0655a"
+ "d776c76b.1dd188"
]
]
},
{
- "id": "1566d659.a0655a",
+ "id": "d776c76b.1dd188",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1392.9998779296875,
- "y": 370.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1715.9998168945312,
+ "y": 724.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "22f8bfd0.6139e"
+ "eac6c260.d11fc"
]
]
},
{
- "id": "80cc4946.3f0f78",
+ "id": "2b54a991.b17b16",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1025.9998779296875,
- "y": 395.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1348.9998168945312,
+ "y": 749.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "3830f5d4.87f1aa",
- "fedbb5e6.fb3c28",
- "898f667e.daf2e8"
+ "70d1c79a.089af8",
+ "7970fcd5.6f11b4",
+ "3d8934f9.d0339c"
]
]
},
{
- "id": "7ce48bed.5b7c74",
+ "id": "e790e11b.4f947",
"type": "execute",
"name": "execute DmaapMsg",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
"comments": "",
"outputs": 1,
- "x": 1488.4998779296875,
- "y": 597.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1546.4998779296875,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "37e7fa80.2728b6"
+ "2e13891.034f576"
]
]
},
{
- "id": "37e7fa80.2728b6",
+ "id": "2e13891.034f576",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1648.4998779296875,
- "y": 597.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1714.4998779296875,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "47c7511a.dd8fe"
+ "30475e40.9b8be2"
]
]
},
{
- "id": "22f8bfd0.6139e",
+ "id": "eac6c260.d11fc",
"type": "record",
"name": "record",
"xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
"comments": "",
"outputs": 1,
- "x": 1524.9998779296875,
- "y": 370.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1835.9998779296875,
+ "y": 723.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "fedbb5e6.fb3c28",
+ "id": "7970fcd5.6f11b4",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n<parameter name='status.code' value='401' />\n<parameter name='status.message' value='`$org.onap.appc.adapter.ansible.message`' />\n",
"comments": "",
- "x": 1197.9165649414062,
- "y": 408.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1527.91650390625,
+ "y": 776.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "47c7511a.dd8fe",
+ "id": "30475e40.9b8be2",
"type": "record",
"name": "record",
"xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
"comments": "",
"outputs": 1,
- "x": 1769.9166259765625,
- "y": 598.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1842.9166259765625,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "898f667e.daf2e8",
+ "id": "3d8934f9.d0339c",
"type": "set",
- "name": "set",
+ "name": "set DmaapReq",
"xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$quiesce-traffic-input.common-header.request-id + '-' + $quiesce-traffic-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='quiesce-traffic'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$quiesce-traffic-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$quiesce-traffic-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$quiesce-traffic-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$quiesce-traffic-input.common-header.request-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$quiesce-traffic-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$quiesce-traffic-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$quiesce-traffic-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$quiesce-traffic-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='lcm-dmaap.status.message' value='`$org.onap.appc.adapter.ansible.message`'/>\n",
"comments": "",
- "x": 1174.9999389648438,
- "y": 318.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1532.9998779296875,
+ "y": 672.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "14c8dea1.b5b7a1",
+ "id": "db1e6d62.a1404",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1317.9998779296875,
- "y": 596.0833435058594,
- "z": "af8f5cdd.6e4de",
+ "x": 1369.9998779296875,
+ "y": 924.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "7ce48bed.5b7c74",
- "70a28c6a.563d24",
- "a32993f8.f8215"
+ "e790e11b.4f947",
+ "3a3f1d44.898da2",
+ "c1a2b259.11e46"
]
]
},
{
- "id": "70a28c6a.563d24",
+ "id": "3a3f1d44.898da2",
"type": "set",
- "name": "set",
+ "name": "set DmaapReq",
"xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$quiesce-traffic-input.common-header.request-id + '-' + $quiesce-traffic-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='quiesce-traffic'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$quiesce-traffic-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$quiesce-traffic-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$quiesce-traffic-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$quiesce-traffic-input.common-header.request-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$quiesce-traffic-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$quiesce-traffic-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$quiesce-traffic-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$quiesce-traffic-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='lcm-dmaap.status.message' value='`$org.onap.appc.adapter.ansible.message`'/>\n",
"comments": "",
- "x": 1448.1666259765625,
- "y": 549.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1536.1666259765625,
+ "y": 875.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "fa759954.4e2068",
+ "id": "a457fe79.46497",
"type": "not-found",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 577.9999389648438,
- "y": 392.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 602.9999389648438,
+ "y": 728.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "ed41675d.59c088"
+ "3d4c2c9a.7b1324"
]
]
},
{
- "id": "756c2e53.ca6d7",
+ "id": "d512629f.bc625",
"type": "set",
"name": "set Defaults",
"xml": "<set>\n<parameter name='org.onap.appc.adapter.ansible.result.code' value='401'/>\n<parameter name='org.onap.appc.adapter.ansible.message' value='Ansible Adapter was not found'/>\n",
"comments": "",
- "x": 1009.9999389648438,
- "y": 297.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 893.9999389648438,
+ "y": 687,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "ed41675d.59c088",
+ "id": "3d4c2c9a.7b1324",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 761.9999389648438,
- "y": 384.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 739.9999389648438,
+ "y": 722.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "756c2e53.ca6d7",
- "80cc4946.3f0f78"
+ "d512629f.bc625",
+ "2b54a991.b17b16"
]
]
},
{
- "id": "e8d3b31a.f46c6",
+ "id": "814875d2.cac108",
"type": "set",
- "name": "set default status value",
- "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>",
+ "name": "set default values",
+ "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n<parameter name='quote' value=\"'\" />\n",
"comments": "",
- "x": 336,
- "y": 269,
- "z": "af8f5cdd.6e4de",
+ "x": 372,
+ "y": 319,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "4d7f56db.9375c8",
+ "id": "442dbdff.6dfcb4",
"type": "get-resource",
- "name": "get aai.generic-vnf by vnf-id",
+ "name": "get aai.generic-vnf ",
"xml": "<get-resource plugin=\"org.onap.ccsdk.sli.adaptors.aai.AAIService\" \n\tresource=\"generic-vnf\" \n\t\tkey=\"generic-vnf.vnf-id = $quiesce-traffic-input.action-identifiers.vnf-id\" \n\t\tlocal-only=\"false\" \n\t\tpfx='aai.generic-vnf'>",
"comments": "",
"outputs": 1,
- "x": 349.0000305175781,
- "y": 325,
- "z": "af8f5cdd.6e4de",
+ "x": 912,
+ "y": 495,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "fa69a126.2a554",
- "f9cb9963.f9e368"
+ "1e57cb28.122ad5"
]
]
},
{
- "id": "fa69a126.2a554",
- "type": "failure",
+ "id": "1e57cb28.122ad5",
+ "type": "success",
+ "name": "success",
+ "xml": "<outcome value='success'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1070.3907470703125,
+ "y": 493.28399658203125,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "5a65efc0.bf413"
+ ]
+ ]
+ },
+ {
+ "id": "baba22fc.1ceb5",
+ "type": "record",
+ "name": "record",
+ "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='`$playbookname`'/>\n\t<parameter name=\"field2\" value='`$nodelist`'/>",
+ "comments": "",
+ "outputs": 1,
+ "x": 300.9998779296875,
+ "y": 683,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "69e97f86.e07ef",
+ "type": "switchNode",
+ "name": "switch pnf-flag",
+ "xml": "<switch test='`$payloadJson.pnf-flag`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 354,
+ "y": 420,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "e43265e9.4c7f38",
+ "d78c93da.7125f"
+ ]
+ ]
+ },
+ {
+ "id": "e9d89bdf.30f7a8",
+ "type": "execute",
+ "name": "execute jsonStringToCtx",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='jsonStringToCtx'>\n\t<parameter name='source' value='quiesce-traffic-input.payload' />\n\t<parameter name='outputPath' value='payloadJson' />\n\t<parameter name='isEscaped' value='true' />",
+ "comments": "",
+ "outputs": 1,
+ "x": 386,
+ "y": 366,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "e43265e9.4c7f38",
+ "type": "outcome",
+ "name": "true",
+ "xml": "<outcome value='true'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 551,
+ "y": 399,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "abbc4ae4.be5328"
+ ]
+ ]
+ },
+ {
+ "id": "d78c93da.7125f",
+ "type": "outcome",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 589.86083984375,
- "y": 312.53564453125,
- "z": "af8f5cdd.6e4de",
+ "x": 550.9999389648438,
+ "y": 460,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "2d1a88c6.11f9d8"
+ "f68ee407.ca6d88"
]
]
},
{
- "id": "f9cb9963.f9e368",
- "type": "success",
- "name": "success",
- "xml": "<outcome value='success'>\n",
+ "id": "f68ee407.ca6d88",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
"comments": "",
"outputs": 1,
- "x": 591.3908081054688,
- "y": 260.28399658203125,
- "z": "af8f5cdd.6e4de",
+ "x": 698.9999389648438,
+ "y": 459,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "c4d4de4d.3e19f"
+ "442dbdff.6dfcb4",
+ "80c560bb.eea5f"
]
]
},
{
- "id": "c4d4de4d.3e19f",
+ "id": "abbc4ae4.be5328",
+ "type": "set",
+ "name": "set AnsibleReq",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`'[' + $quote + $payloadJson.ipaddress-v4-oam + $quote + ']'`\"/>\n<parameter name='playbookname' value='`$prop.lcm.pnf.quiesce-traffic.playbookname`'/>\n",
+ "comments": "",
+ "x": 712,
+ "y": 397,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "80c560bb.eea5f",
+ "type": "execute",
+ "name": "set playbookname",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>\n\t<parameter name='outputPath' value='playbookname' />\n\t<parameter name='source' value=\"`'prop.lcm.' + $payloadJson.nf-naming-code + '.quiesce-traffic.playbookname'`\" />\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 921,
+ "y": 439,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "fa9a8e1f.bba53",
+ "type": "switchNode",
+ "name": "switch playbookname",
+ "xml": "<switch test='`$playbookname`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 351,
+ "y": 551,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "1a5624d2.74e98b"
+ ]
+ ]
+ },
+ {
+ "id": "1a5624d2.74e98b",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 522,
+ "y": 552,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "524c17a1.30fbf8"
+ ]
+ ]
+ },
+ {
+ "id": "524c17a1.30fbf8",
+ "type": "set",
+ "name": "set playbookname",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>\n<parameter name='playbookname' value='`$prop.lcm.quiesce-traffic.playbookname`'/>",
+ "comments": "",
+ "x": 712,
+ "y": 551,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "81510405.ca8868",
+ "type": "switchNode",
+ "name": "switch nodelist",
+ "xml": "<switch test='`$nodelist`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 341,
+ "y": 610,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "7a126f.d2de2d9",
+ "8743a074.e8506"
+ ]
+ ]
+ },
+ {
+ "id": "7a126f.d2de2d9",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 521,
+ "y": 603,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c954af6f.c34df"
+ ]
+ ]
+ },
+ {
+ "id": "c954af6f.c34df",
"type": "set",
"name": "set nodelist",
- "xml": "<set>\n<parameter name='quote' value=\"'\" />\n<parameter name='nodelist' value=\"`'[' + $quote + $aai.ipv4-oam-address + $quote + ']'`\"/>\n",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>",
"comments": "",
- "x": 740.3908081054688,
- "y": 259.28399658203125,
- "z": "af8f5cdd.6e4de",
+ "x": 678,
+ "y": 617,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "2d1a88c6.11f9d8",
- "type": "record",
- "name": "record",
- "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='VNF not found in AAI. Nodelist retrieved from config'/>",
+ "id": "8743a074.e8506",
+ "type": "outcome",
+ "name": "empty",
+ "xml": "<outcome value=\"['']\">\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 520,
+ "y": 647,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c954af6f.c34df"
+ ]
+ ]
+ },
+ {
+ "id": "90b2891b.001708",
+ "type": "switchNode",
+ "name": "switch playbookname",
+ "xml": "<switch test='`$playbookname`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1396,
+ "y": 482,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c9dd0d76.432f7"
+ ]
+ ]
+ },
+ {
+ "id": "c9dd0d76.432f7",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1574,
+ "y": 482,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "6ea15b2b.d9cd74"
+ ]
+ ]
+ },
+ {
+ "id": "9706bdee.6acf9",
+ "type": "set",
+ "name": "set nodelist",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`'[' + $quote + $aai.generic-vnf.ipv4-oam-address + $quote + ']'`\"/>\n",
+ "comments": "",
+ "x": 1369,
+ "y": 535,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "5a65efc0.bf413",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 1199,
+ "y": 492,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "90b2891b.001708",
+ "9706bdee.6acf9"
+ ]
+ ]
+ },
+ {
+ "id": "6ea15b2b.d9cd74",
+ "type": "execute",
+ "name": "set playbookname",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>\n\t<parameter name='outputPath' value='playbookname' />\n\t<parameter name='source' value=\"`'prop.lcm.' + $aai.generic-vnf.nf-naming-code + '.quiesce-traffic.playbookname'`\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 736,
- "y": 312,
- "z": "af8f5cdd.6e4de",
+ "x": 1746,
+ "y": 480,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
diff --git a/platform-logic/lcm/src/main/json/LCM_resume-traffic.json b/platform-logic/lcm/src/main/json/LCM_resume-traffic.json
index 6024d141..405e58b5 100644
--- a/platform-logic/lcm/src/main/json/LCM_resume-traffic.json
+++ b/platform-logic/lcm/src/main/json/LCM_resume-traffic.json
@@ -1,22 +1,22 @@
[
{
- "id": "1a420388.7ce24c",
+ "id": "fab0f7ed.c486b8",
"type": "method",
"name": "resume-traffic",
"xml": "<method rpc='resume-traffic' mode='sync'>\n",
"comments": "",
"outputs": 1,
- "x": 550,
- "y": 102,
- "z": "af8f5cdd.6e4de",
+ "x": 480,
+ "y": 147,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "e635fd5d.f4087"
+ "5ccc8e8d.06e5"
]
]
},
{
- "id": "c220826b.91906",
+ "id": "5c791eb8.0072b",
"type": "service-logic",
"name": "LCM ${project.version}",
"module": "LCM",
@@ -24,528 +24,788 @@
"comments": "",
"xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='LCM' version='${project.version}'>",
"outputs": 1,
- "x": 337.99993896484375,
- "y": 103,
- "z": "af8f5cdd.6e4de",
+ "x": 267.99993896484375,
+ "y": 148,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "1a420388.7ce24c"
+ "fab0f7ed.c486b8"
]
]
},
{
- "id": "810e1e54.dec1c",
+ "id": "3503ece1.d7ad14",
"type": "execute",
"name": "execute AnsibleA.reqExec",
- "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >\n<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n<parameter name='User' value='`$prop.ansible.user`'/>\n<parameter name='Password' value='`$prop.ansible.password`'/>\n<parameter name='LocalParameters' value='`$prop.ansible.lcm.localparameters`'/>\n<parameter name='EnvParameters' value='`$resume-traffic-input.payload`'/>\n<parameter name='NodeList' value=\"`$nodelist`\"/>\n<parameter name='Timeout' value='`$prop.ansible.timeout`'/>\n<parameter name='Version' value='`$prop.ansible.version`'/>\n<parameter name='Id' value='`$resume-traffic-input.common-header.request-id`'/>\n<parameter name='PlaybookName' value='`$prop.lcm.resume-traffic.playbookname`'/>",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >\n<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n<parameter name='User' value='`$prop.ansible.user`'/>\n<parameter name='Password' value='`$prop.ansible.password`'/>\n<parameter name='LocalParameters' value='`$prop.ansible.lcm.localparameters`'/>\n<parameter name='EnvParameters' value='`$resume-traffic-input.payload`'/>\n<parameter name='NodeList' value=\"`$nodelist`\"/>\n<parameter name='Timeout' value='`$prop.ansible.timeout`'/>\n<parameter name='Version' value='`$prop.ansible.version`'/>\n<parameter name='Id' value='`$resume-traffic-input.common-header.request-id`'/>\n<parameter name='PlaybookName' value='`$playbookname`'/>",
"comments": "",
"outputs": 1,
- "x": 345.00001525878906,
- "y": 379,
- "z": "af8f5cdd.6e4de",
+ "x": 335.00001525878906,
+ "y": 755,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f279f5b8.9d49b8",
- "895a0a53.e12ea8",
- "fa759954.4e2068"
+ "734b2c42.973ee4",
+ "bb8a76ca.fb7058",
+ "a457fe79.46497"
]
]
},
{
- "id": "f7db5396.7b5f1",
+ "id": "f17ff2aa.67075",
"type": "switchNode",
"name": "switch",
"xml": "<switch test=\"`$org.onap.appc.adapter.ansible.result.code`\">\n",
"comments": "",
"outputs": 1,
- "x": 690.9999389648438,
- "y": 530.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 734.9999389648438,
+ "y": 863.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "bc5a2382.4973",
- "84f0dd88.8438",
- "ffd4aab1.e3c4b8"
+ "7ad5787f.1c20f8",
+ "b6f779a3.cc7ed8",
+ "f695f05e.abf31"
]
]
},
{
- "id": "bc5a2382.4973",
+ "id": "7ad5787f.1c20f8",
"type": "other",
"name": "outcome 500",
"xml": "<outcome value='500'>\n",
"comments": "",
"outputs": 1,
- "x": 835.9999389648438,
- "y": 528.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 879.9999389648438,
+ "y": 861.0000381469727,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "84f0dd88.8438",
+ "id": "b6f779a3.cc7ed8",
"type": "other",
"name": "outcome 100",
"xml": "<outcome value='100'>\n",
"comments": "",
"outputs": 1,
- "x": 838.9999389648438,
- "y": 571.0000610351562,
- "z": "af8f5cdd.6e4de",
+ "x": 876.9999389648438,
+ "y": 918.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f44a47b3.3aa128"
+ "1a65bc45.b2fcb4"
]
]
},
{
- "id": "f44a47b3.3aa128",
+ "id": "1a65bc45.b2fcb4",
"type": "execute",
"name": "execute reqExecResult",
- "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExecResult' >\n <parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n\t<parameter name='User' value='`$prop.ansible.user`'/>\n\t<parameter name='Password' value='`$prop.ansible.password`'/>\n\t<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>\n\t<parameter name='PlaybookName' value='`$prop.lcm.resume-traffic.playbookname`'/>\n\t\n\n\n\n\n",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExecResult' >\n <parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n\t<parameter name='User' value='`$prop.ansible.user`'/>\n\t<parameter name='Password' value='`$prop.ansible.password`'/>\n\t<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>\n\t<parameter name='PlaybookName' value='`$playbookname`'/>\n\t\n\n\n\n\n",
"comments": "",
"outputs": 1,
- "x": 1025.9999389648438,
- "y": 570.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 1064.9999389648438,
+ "y": 917.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "dd2fe7e6.957248",
- "6913b982.6c9bb8"
+ "5b0d24c6.9eb0ac",
+ "2b5e4322.1d495c"
]
]
},
{
- "id": "895a0a53.e12ea8",
+ "id": "bb8a76ca.fb7058",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 581.9999389648438,
- "y": 439.0000534057617,
- "z": "af8f5cdd.6e4de",
+ "x": 593.9999389648438,
+ "y": 776.0000915527344,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "f279f5b8.9d49b8",
+ "id": "734b2c42.973ee4",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 583.9999389648438,
- "y": 491.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 595.9999389648438,
+ "y": 828.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f7db5396.7b5f1"
+ "f17ff2aa.67075"
]
]
},
{
- "id": "dd2fe7e6.957248",
+ "id": "5b0d24c6.9eb0ac",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1189.9999389648438,
- "y": 542.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 1233.9999389648438,
+ "y": 875.0000381469727,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "ffd4aab1.e3c4b8",
+ "id": "f695f05e.abf31",
"type": "other",
"name": "outcome 101",
"xml": "<outcome value='101'>\n",
"comments": "",
"outputs": 1,
- "x": 832.9999389648438,
- "y": 486.00006103515625,
- "z": "af8f5cdd.6e4de",
+ "x": 876.9999389648438,
+ "y": 819.0000686645508,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "6913b982.6c9bb8",
+ "id": "2b5e4322.1d495c",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 1191.9999389648438,
- "y": 597.0000915527344,
- "z": "af8f5cdd.6e4de",
+ "x": 1241.9998779296875,
+ "y": 923.0001220703125,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "14c8dea1.b5b7a1"
+ "db1e6d62.a1404"
]
]
},
{
- "id": "a32993f8.f8215",
+ "id": "c1a2b259.11e46",
"type": "returnSuccess",
"name": "return success",
"xml": "<return status='success'>\n<parameter name='status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='status.message' value='`$org.onap.appc.adapter.ansible.message`'/>",
"comments": "",
- "x": 1467.9998779296875,
- "y": 648.0000610351562,
- "z": "af8f5cdd.6e4de",
+ "x": 1535.9998779296875,
+ "y": 980.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "d8c3f83d.d0b9d8",
+ "id": "566f9779.c05d38",
"type": "dgstart",
"name": "DGSTART",
"outputs": 1,
- "x": 153,
- "y": 102,
- "z": "af8f5cdd.6e4de",
+ "x": 83,
+ "y": 147,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "c220826b.91906"
+ "5c791eb8.0072b"
]
]
},
{
- "id": "e635fd5d.f4087",
+ "id": "5ccc8e8d.06e5",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 139.91668701171875,
- "y": 241.08334350585938,
- "z": "af8f5cdd.6e4de",
+ "x": 80.91668701171875,
+ "y": 239.08334350585938,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "810e1e54.dec1c",
- "ee1802be.c5c18",
- "e8d3b31a.f46c6",
- "4d7f56db.9375c8"
+ "3503ece1.d7ad14",
+ "dc18f7c9.2e4ac8",
+ "814875d2.cac108",
+ "e9d89bdf.30f7a8",
+ "69e97f86.e07ef",
+ "fa9a8e1f.bba53",
+ "baba22fc.1ceb5",
+ "81510405.ca8868"
]
]
},
{
- "id": "ee1802be.c5c18",
+ "id": "dc18f7c9.2e4ac8",
"type": "execute",
"name": "execute Properties",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/lcm-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
"comments": "",
"outputs": 1,
- "x": 328.00001525878906,
- "y": 225.08334350585938,
- "z": "af8f5cdd.6e4de",
+ "x": 379.0000305175781,
+ "y": 272.0833435058594,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "3830f5d4.87f1aa",
+ "id": "70d1c79a.089af8",
"type": "execute",
"name": "execute DmaapMsg",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
"comments": "",
"outputs": 1,
- "x": 1222.9999389648438,
- "y": 371.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1545.9998779296875,
+ "y": 725.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "1566d659.a0655a"
+ "d776c76b.1dd188"
]
]
},
{
- "id": "1566d659.a0655a",
+ "id": "d776c76b.1dd188",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1392.9998779296875,
- "y": 370.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1715.9998168945312,
+ "y": 724.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "22f8bfd0.6139e"
+ "eac6c260.d11fc"
]
]
},
{
- "id": "80cc4946.3f0f78",
+ "id": "2b54a991.b17b16",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1025.9998779296875,
- "y": 395.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1348.9998168945312,
+ "y": 749.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "3830f5d4.87f1aa",
- "fedbb5e6.fb3c28",
- "898f667e.daf2e8"
+ "70d1c79a.089af8",
+ "7970fcd5.6f11b4",
+ "3d8934f9.d0339c"
]
]
},
{
- "id": "7ce48bed.5b7c74",
+ "id": "e790e11b.4f947",
"type": "execute",
"name": "execute DmaapMsg",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
"comments": "",
"outputs": 1,
- "x": 1488.4998779296875,
- "y": 597.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1546.4998779296875,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "37e7fa80.2728b6"
+ "2e13891.034f576"
]
]
},
{
- "id": "37e7fa80.2728b6",
+ "id": "2e13891.034f576",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1648.4998779296875,
- "y": 597.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1714.4998779296875,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "47c7511a.dd8fe"
+ "30475e40.9b8be2"
]
]
},
{
- "id": "22f8bfd0.6139e",
+ "id": "eac6c260.d11fc",
"type": "record",
"name": "record",
"xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
"comments": "",
"outputs": 1,
- "x": 1524.9998779296875,
- "y": 370.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1835.9998779296875,
+ "y": 723.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "fedbb5e6.fb3c28",
+ "id": "7970fcd5.6f11b4",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n<parameter name='status.code' value='401' />\n<parameter name='status.message' value='`$org.onap.appc.adapter.ansible.message`' />\n",
"comments": "",
- "x": 1197.9165649414062,
- "y": 408.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1527.91650390625,
+ "y": 776.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "47c7511a.dd8fe",
+ "id": "30475e40.9b8be2",
"type": "record",
"name": "record",
"xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
"comments": "",
"outputs": 1,
- "x": 1769.9166259765625,
- "y": 598.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1842.9166259765625,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "898f667e.daf2e8",
+ "id": "3d8934f9.d0339c",
"type": "set",
- "name": "set",
+ "name": "set DmaapReq",
"xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$resume-traffic-input.common-header.request-id + '-' + $resume-traffic-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='resume-traffic'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$resume-traffic-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$resume-traffic-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$resume-traffic-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$resume-traffic-input.common-header.request-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$resume-traffic-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$resume-traffic-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$resume-traffic-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$resume-traffic-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='lcm-dmaap.status.message' value='`$org.onap.appc.adapter.ansible.message`'/>\n",
"comments": "",
- "x": 1174.9999389648438,
- "y": 318.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1532.9998779296875,
+ "y": 672.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "14c8dea1.b5b7a1",
+ "id": "db1e6d62.a1404",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1317.9998779296875,
- "y": 596.0833435058594,
- "z": "af8f5cdd.6e4de",
+ "x": 1369.9998779296875,
+ "y": 924.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "7ce48bed.5b7c74",
- "70a28c6a.563d24",
- "a32993f8.f8215"
+ "e790e11b.4f947",
+ "3a3f1d44.898da2",
+ "c1a2b259.11e46"
]
]
},
{
- "id": "70a28c6a.563d24",
+ "id": "3a3f1d44.898da2",
"type": "set",
- "name": "set",
+ "name": "set DmaapReq",
"xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$resume-traffic-input.common-header.request-id + '-' + $resume-traffic-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='resume-traffic'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$resume-traffic-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$resume-traffic-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$resume-traffic-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$resume-traffic-input.common-header.request-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$resume-traffic-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$resume-traffic-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$resume-traffic-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$resume-traffic-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='lcm-dmaap.status.message' value='`$org.onap.appc.adapter.ansible.message`'/>\n",
"comments": "",
- "x": 1448.1666259765625,
- "y": 549.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1536.1666259765625,
+ "y": 875.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "fa759954.4e2068",
+ "id": "a457fe79.46497",
"type": "not-found",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 577.9999389648438,
- "y": 392.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 602.9999389648438,
+ "y": 728.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "ed41675d.59c088"
+ "3d4c2c9a.7b1324"
]
]
},
{
- "id": "756c2e53.ca6d7",
+ "id": "d512629f.bc625",
"type": "set",
"name": "set Defaults",
"xml": "<set>\n<parameter name='org.onap.appc.adapter.ansible.result.code' value='401'/>\n<parameter name='org.onap.appc.adapter.ansible.message' value='Ansible Adapter was not found'/>\n",
"comments": "",
- "x": 1009.9999389648438,
- "y": 297.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 893.9999389648438,
+ "y": 687,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "ed41675d.59c088",
+ "id": "3d4c2c9a.7b1324",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 761.9999389648438,
- "y": 384.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 739.9999389648438,
+ "y": 722.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "756c2e53.ca6d7",
- "80cc4946.3f0f78"
+ "d512629f.bc625",
+ "2b54a991.b17b16"
]
]
},
{
- "id": "e8d3b31a.f46c6",
+ "id": "814875d2.cac108",
"type": "set",
- "name": "set default status value",
- "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>",
+ "name": "set default values",
+ "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n<parameter name='quote' value=\"'\" />\n",
"comments": "",
- "x": 336,
- "y": 269,
- "z": "af8f5cdd.6e4de",
+ "x": 372,
+ "y": 319,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "4d7f56db.9375c8",
+ "id": "442dbdff.6dfcb4",
"type": "get-resource",
- "name": "get aai.generic-vnf by vnf-id",
+ "name": "get aai.generic-vnf ",
"xml": "<get-resource plugin=\"org.onap.ccsdk.sli.adaptors.aai.AAIService\" \n\tresource=\"generic-vnf\" \n\t\tkey=\"generic-vnf.vnf-id = $resume-traffic-input.action-identifiers.vnf-id\" \n\t\tlocal-only=\"false\" \n\t\tpfx='aai.generic-vnf'>",
"comments": "",
"outputs": 1,
- "x": 349.0000305175781,
- "y": 325,
- "z": "af8f5cdd.6e4de",
+ "x": 912,
+ "y": 495,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "fa69a126.2a554",
- "f9cb9963.f9e368"
+ "1e57cb28.122ad5"
]
]
},
{
- "id": "fa69a126.2a554",
- "type": "failure",
+ "id": "1e57cb28.122ad5",
+ "type": "success",
+ "name": "success",
+ "xml": "<outcome value='success'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1070.3907470703125,
+ "y": 493.28399658203125,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "5a65efc0.bf413"
+ ]
+ ]
+ },
+ {
+ "id": "baba22fc.1ceb5",
+ "type": "record",
+ "name": "record",
+ "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='`$playbookname`'/>\n\t<parameter name=\"field2\" value='`$nodelist`'/>",
+ "comments": "",
+ "outputs": 1,
+ "x": 300.9998779296875,
+ "y": 683,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "69e97f86.e07ef",
+ "type": "switchNode",
+ "name": "switch pnf-flag",
+ "xml": "<switch test='`$payloadJson.pnf-flag`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 354,
+ "y": 420,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "e43265e9.4c7f38",
+ "d78c93da.7125f"
+ ]
+ ]
+ },
+ {
+ "id": "e9d89bdf.30f7a8",
+ "type": "execute",
+ "name": "execute jsonStringToCtx",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='jsonStringToCtx'>\n\t<parameter name='source' value='resume-traffic-input.payload' />\n\t<parameter name='outputPath' value='payloadJson' />\n\t<parameter name='isEscaped' value='true' />",
+ "comments": "",
+ "outputs": 1,
+ "x": 386,
+ "y": 366,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "e43265e9.4c7f38",
+ "type": "outcome",
+ "name": "true",
+ "xml": "<outcome value='true'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 551,
+ "y": 399,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "abbc4ae4.be5328"
+ ]
+ ]
+ },
+ {
+ "id": "d78c93da.7125f",
+ "type": "outcome",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 589.86083984375,
- "y": 312.53564453125,
- "z": "af8f5cdd.6e4de",
+ "x": 550.9999389648438,
+ "y": 460,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "2d1a88c6.11f9d8"
+ "f68ee407.ca6d88"
]
]
},
{
- "id": "f9cb9963.f9e368",
- "type": "success",
- "name": "success",
- "xml": "<outcome value='success'>\n",
+ "id": "f68ee407.ca6d88",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
"comments": "",
"outputs": 1,
- "x": 591.3908081054688,
- "y": 260.28399658203125,
- "z": "af8f5cdd.6e4de",
+ "x": 698.9999389648438,
+ "y": 459,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "c4d4de4d.3e19f"
+ "442dbdff.6dfcb4",
+ "80c560bb.eea5f"
]
]
},
{
- "id": "c4d4de4d.3e19f",
+ "id": "abbc4ae4.be5328",
+ "type": "set",
+ "name": "set AnsibleReq",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`'[' + $quote + $payloadJson.ipaddress-v4-oam + $quote + ']'`\"/>\n<parameter name='playbookname' value='`$prop.lcm.pnf.resume-traffic.playbookname`'/>\n",
+ "comments": "",
+ "x": 712,
+ "y": 397,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "80c560bb.eea5f",
+ "type": "execute",
+ "name": "set playbookname",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>\n\t<parameter name='outputPath' value='playbookname' />\n\t<parameter name='source' value=\"`'prop.lcm.' + $payloadJson.nf-naming-code + '.resume-traffic.playbookname'`\" />\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 921,
+ "y": 439,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "fa9a8e1f.bba53",
+ "type": "switchNode",
+ "name": "switch playbookname",
+ "xml": "<switch test='`$playbookname`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 351,
+ "y": 551,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "1a5624d2.74e98b"
+ ]
+ ]
+ },
+ {
+ "id": "1a5624d2.74e98b",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 522,
+ "y": 552,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "524c17a1.30fbf8"
+ ]
+ ]
+ },
+ {
+ "id": "524c17a1.30fbf8",
+ "type": "set",
+ "name": "set playbookname",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>\n<parameter name='playbookname' value='`$prop.lcm.resume-traffic.playbookname`'/>",
+ "comments": "",
+ "x": 712,
+ "y": 551,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "81510405.ca8868",
+ "type": "switchNode",
+ "name": "switch nodelist",
+ "xml": "<switch test='`$nodelist`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 341,
+ "y": 610,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "7a126f.d2de2d9",
+ "8743a074.e8506"
+ ]
+ ]
+ },
+ {
+ "id": "7a126f.d2de2d9",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 521,
+ "y": 603,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c954af6f.c34df"
+ ]
+ ]
+ },
+ {
+ "id": "c954af6f.c34df",
"type": "set",
"name": "set nodelist",
- "xml": "<set>\n<parameter name='quote' value=\"'\" />\n<parameter name='nodelist' value=\"`'[' + $quote + $aai.ipv4-oam-address + $quote + ']'`\"/>\n",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>",
"comments": "",
- "x": 740.3908081054688,
- "y": 259.28399658203125,
- "z": "af8f5cdd.6e4de",
+ "x": 678,
+ "y": 617,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "2d1a88c6.11f9d8",
- "type": "record",
- "name": "record",
- "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='VNF not found in AAI. Nodelist retrieved from config'/>",
+ "id": "8743a074.e8506",
+ "type": "outcome",
+ "name": "empty",
+ "xml": "<outcome value=\"['']\">\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 520,
+ "y": 647,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c954af6f.c34df"
+ ]
+ ]
+ },
+ {
+ "id": "90b2891b.001708",
+ "type": "switchNode",
+ "name": "switch playbookname",
+ "xml": "<switch test='`$playbookname`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1396,
+ "y": 482,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c9dd0d76.432f7"
+ ]
+ ]
+ },
+ {
+ "id": "c9dd0d76.432f7",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1574,
+ "y": 482,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "6ea15b2b.d9cd74"
+ ]
+ ]
+ },
+ {
+ "id": "9706bdee.6acf9",
+ "type": "set",
+ "name": "set nodelist",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`'[' + $quote + $aai.generic-vnf.ipv4-oam-address + $quote + ']'`\"/>\n",
+ "comments": "",
+ "x": 1369,
+ "y": 535,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "5a65efc0.bf413",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 1199,
+ "y": 492,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "90b2891b.001708",
+ "9706bdee.6acf9"
+ ]
+ ]
+ },
+ {
+ "id": "6ea15b2b.d9cd74",
+ "type": "execute",
+ "name": "set playbookname",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>\n\t<parameter name='outputPath' value='playbookname' />\n\t<parameter name='source' value=\"`'prop.lcm.' + $aai.generic-vnf.nf-naming-code + '.resume-traffic.playbookname'`\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 736,
- "y": 312,
- "z": "af8f5cdd.6e4de",
+ "x": 1746,
+ "y": 480,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
diff --git a/platform-logic/lcm/src/main/json/LCM_snapshot.json b/platform-logic/lcm/src/main/json/LCM_snapshot.json
index 549425c6..76bb844c 100644
--- a/platform-logic/lcm/src/main/json/LCM_snapshot.json
+++ b/platform-logic/lcm/src/main/json/LCM_snapshot.json
@@ -1,194 +1,164 @@
-[
- {
- "id": "85add9d3.6d38c8",
- "type": "method",
- "name": "snapshot",
- "xml": "<method rpc='snapshot' mode='sync'>\n",
- "comments": "",
- "outputs": 1,
- "x": 535.5,
- "y": 83,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "a726273f.d4087"
- ]
- ]
- },
- {
- "id": "6cc2acd4.57558c",
- "type": "service-logic",
- "name": "LCM ${project.version}",
- "module": "LCM",
- "version": "${project.version}",
- "comments": "",
- "xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='LCM' version='${project.version}'>",
- "outputs": 1,
- "x": 306.49993896484375,
- "y": 84,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "85add9d3.6d38c8"
- ]
- ]
- },
- {
- "id": "3b5bd72a.fb19f8",
- "type": "returnSuccess",
- "name": "return success",
- "xml": "<return status='success'>\n<parameter name='status.code' value='400' />\n<parameter name='status.message' value='SDNC Lock Mock returns success'/>",
- "comments": "",
- "x": 388.5,
- "y": 472,
- "z": "1bef9bfd.091c84",
- "wires": []
- },
- {
- "id": "7bee7647.02e808",
- "type": "dgstart",
- "name": "DGSTART",
- "outputs": 1,
- "x": 103.5,
- "y": 83,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "6cc2acd4.57558c"
- ]
- ]
- },
- {
- "id": "a726273f.d4087",
- "type": "block",
- "name": "block",
- "xml": "<block>\n",
- "atomic": "false",
- "comments": "",
- "outputs": 1,
- "x": 139.41668701171875,
- "y": 237.08334350585938,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "c733c1eb.f6dc98",
- "8a3a4a22.8cd238",
- "5c905e45.08ff1",
- "ff16f6f7.bb02d",
- "3b5bd72a.fb19f8"
- ]
- ]
- },
- {
- "id": "c733c1eb.f6dc98",
- "type": "execute",
- "name": "execute Properties",
- "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/lcm-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
- "comments": "",
- "outputs": 1,
- "x": 426.5,
- "y": 222.08334350585938,
- "z": "1bef9bfd.091c84",
- "wires": [
- []
- ]
- },
- {
- "id": "ff16f6f7.bb02d",
- "type": "execute",
- "name": "execute DmaapMsg",
- "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
- "comments": "",
- "outputs": 1,
- "x": 402.5,
- "y": 399.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "4150232b.d9de94"
- ]
- ]
- },
- {
- "id": "4150232b.d9de94",
- "type": "failure",
- "name": "failure",
- "xml": "<outcome value='failure'>\n",
- "comments": "",
- "outputs": 1,
- "x": 611.5,
- "y": 397.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "1c38db15.1f052d"
- ]
- ]
- },
- {
- "id": "f6eb674d.c21",
- "type": "failure",
- "name": "failure",
- "xml": "<outcome value='failure'>\n",
- "comments": "",
- "outputs": 1,
- "x": 1506.9999389648438,
- "y": 415.0833511352539,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "db43d1c.5a1cab"
- ]
- ]
- },
- {
- "id": "1c38db15.1f052d",
- "type": "record",
- "name": "record",
- "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
- "comments": "",
- "outputs": 1,
- "x": 771.5,
- "y": 397.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": [
- []
- ]
- },
- {
- "id": "db43d1c.5a1cab",
- "type": "record",
- "name": "record",
- "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
- "comments": "",
- "outputs": 1,
- "x": 1628.4166870117188,
- "y": 416.0833511352539,
- "z": "1bef9bfd.091c84",
- "wires": [
- []
- ]
- },
- {
- "id": "5c905e45.08ff1",
- "type": "set",
- "name": "set",
- "xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$snapshot-input.common-header.request-id + '-' + $snapshot-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='snapshot'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$snapshot-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$snapshot-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$snapshot-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$snapshot-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$snapshot-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$snapshot-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$snapshot-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$snapshot-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='400' />\n<parameter name='lcm-dmaap.status.message' value='SDNC Snapshot Mock returns success'/>\n",
- "comments": "",
- "x": 374.5,
- "y": 331.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": []
- },
- {
- "id": "8a3a4a22.8cd238",
- "type": "set",
- "name": "set default status value",
- "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n",
- "comments": "",
- "x": 428.5,
- "y": 274,
- "z": "1bef9bfd.091c84",
- "wires": []
- }
-]
+[
+ {
+ "id": "c36c1e82.e47c",
+ "type": "method",
+ "name": "snapshot",
+ "xml": "<method rpc='snapshot' mode='sync'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 530,
+ "y": 121,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "ea26f1ed.e963b"
+ ]
+ ]
+ },
+ {
+ "id": "4c2264b2.81a61c",
+ "type": "service-logic",
+ "name": "LCM ${project.version}",
+ "module": "LCM",
+ "version": "${project.version}",
+ "comments": "",
+ "xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='LCM' version='${project.version}'>",
+ "outputs": 1,
+ "x": 300.99993896484375,
+ "y": 122,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "c36c1e82.e47c"
+ ]
+ ]
+ },
+ {
+ "id": "a3360ab0.ce42c8",
+ "type": "returnSuccess",
+ "name": "return success",
+ "xml": "<return status='success'>\n<parameter name='status.code' value='400' />\n<parameter name='status.message' value='SDNC Snapshot Mock returns success'/>",
+ "comments": "",
+ "x": 383,
+ "y": 510,
+ "z": "a439ae77.f8998",
+ "wires": []
+ },
+ {
+ "id": "7e67863d.7c42f8",
+ "type": "dgstart",
+ "name": "DGSTART",
+ "outputs": 1,
+ "x": 98,
+ "y": 121,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "4c2264b2.81a61c"
+ ]
+ ]
+ },
+ {
+ "id": "ea26f1ed.e963b",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 133.91668701171875,
+ "y": 275.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "f1d5fb31.fa3878",
+ "625601b.39b33",
+ "786cf009.ea481",
+ "cd184491.d656e8",
+ "a3360ab0.ce42c8"
+ ]
+ ]
+ },
+ {
+ "id": "f1d5fb31.fa3878",
+ "type": "execute",
+ "name": "execute Properties",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/lcm-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 421,
+ "y": 260.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "cd184491.d656e8",
+ "type": "execute",
+ "name": "execute DmaapMsg",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 397,
+ "y": 437.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "91133c94.04e29"
+ ]
+ ]
+ },
+ {
+ "id": "91133c94.04e29",
+ "type": "failure",
+ "name": "failure",
+ "xml": "<outcome value='failure'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 606,
+ "y": 435.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "f3b86bb6.9cf808"
+ ]
+ ]
+ },
+ {
+ "id": "f3b86bb6.9cf808",
+ "type": "record",
+ "name": "record",
+ "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
+ "comments": "",
+ "outputs": 1,
+ "x": 766,
+ "y": 435.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "786cf009.ea481",
+ "type": "set",
+ "name": "set",
+ "xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$snapshot-input.common-header.request-id + '-' + $snapshot-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='snapshot'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$snapshot-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$snapshot-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$snapshot-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$snapshot-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$snapshot-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$snapshot-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$snapshot-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$snapshot-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='400' />\n<parameter name='lcm-dmaap.status.message' value='SDNC Snapshot Mock returns success'/>\n",
+ "comments": "",
+ "x": 369,
+ "y": 369.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": []
+ },
+ {
+ "id": "625601b.39b33",
+ "type": "set",
+ "name": "set default status value",
+ "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n",
+ "comments": "",
+ "x": 423,
+ "y": 312,
+ "z": "a439ae77.f8998",
+ "wires": []
+ }
+] \ No newline at end of file
diff --git a/platform-logic/lcm/src/main/json/LCM_unlock.json b/platform-logic/lcm/src/main/json/LCM_unlock.json
index 827259d9..98d391d7 100644
--- a/platform-logic/lcm/src/main/json/LCM_unlock.json
+++ b/platform-logic/lcm/src/main/json/LCM_unlock.json
@@ -1,194 +1,164 @@
-[
- {
- "id": "85add9d3.6d38c8",
- "type": "method",
- "name": "unlock",
- "xml": "<method rpc='unlock' mode='sync'>\n",
- "comments": "",
- "outputs": 1,
- "x": 535.5,
- "y": 83,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "a726273f.d4087"
- ]
- ]
- },
- {
- "id": "6cc2acd4.57558c",
- "type": "service-logic",
- "name": "LCM ${project.version}",
- "module": "LCM",
- "version": "${project.version}",
- "comments": "",
- "xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='LCM' version='${project.version}'>",
- "outputs": 1,
- "x": 306.49993896484375,
- "y": 84,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "85add9d3.6d38c8"
- ]
- ]
- },
- {
- "id": "3b5bd72a.fb19f8",
- "type": "returnSuccess",
- "name": "return success",
- "xml": "<return status='success'>\n<parameter name='status.code' value='400' />\n<parameter name='status.message' value='SDNC Unlock Mock returns success'/>",
- "comments": "",
- "x": 388.5,
- "y": 472,
- "z": "1bef9bfd.091c84",
- "wires": []
- },
- {
- "id": "7bee7647.02e808",
- "type": "dgstart",
- "name": "DGSTART",
- "outputs": 1,
- "x": 103.5,
- "y": 83,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "6cc2acd4.57558c"
- ]
- ]
- },
- {
- "id": "a726273f.d4087",
- "type": "block",
- "name": "block",
- "xml": "<block>\n",
- "atomic": "false",
- "comments": "",
- "outputs": 1,
- "x": 139.41668701171875,
- "y": 237.08334350585938,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "c733c1eb.f6dc98",
- "8a3a4a22.8cd238",
- "5c905e45.08ff1",
- "ff16f6f7.bb02d",
- "3b5bd72a.fb19f8"
- ]
- ]
- },
- {
- "id": "c733c1eb.f6dc98",
- "type": "execute",
- "name": "execute Properties",
- "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/lcm-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
- "comments": "",
- "outputs": 1,
- "x": 426.5,
- "y": 222.08334350585938,
- "z": "1bef9bfd.091c84",
- "wires": [
- []
- ]
- },
- {
- "id": "ff16f6f7.bb02d",
- "type": "execute",
- "name": "execute DmaapMsg",
- "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
- "comments": "",
- "outputs": 1,
- "x": 402.5,
- "y": 399.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "4150232b.d9de94"
- ]
- ]
- },
- {
- "id": "4150232b.d9de94",
- "type": "failure",
- "name": "failure",
- "xml": "<outcome value='failure'>\n",
- "comments": "",
- "outputs": 1,
- "x": 611.5,
- "y": 397.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "1c38db15.1f052d"
- ]
- ]
- },
- {
- "id": "f6eb674d.c21",
- "type": "failure",
- "name": "failure",
- "xml": "<outcome value='failure'>\n",
- "comments": "",
- "outputs": 1,
- "x": 1506.9999389648438,
- "y": 415.0833511352539,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "db43d1c.5a1cab"
- ]
- ]
- },
- {
- "id": "1c38db15.1f052d",
- "type": "record",
- "name": "record",
- "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
- "comments": "",
- "outputs": 1,
- "x": 771.5,
- "y": 397.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": [
- []
- ]
- },
- {
- "id": "db43d1c.5a1cab",
- "type": "record",
- "name": "record",
- "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
- "comments": "",
- "outputs": 1,
- "x": 1628.4166870117188,
- "y": 416.0833511352539,
- "z": "1bef9bfd.091c84",
- "wires": [
- []
- ]
- },
- {
- "id": "5c905e45.08ff1",
- "type": "set",
- "name": "set",
- "xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$unlock-input.common-header.request-id + '-' + $unlock-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='unlock'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$unlock-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$unlock-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$unlock-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$unlock-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$unlock-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$unlock-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$unlock-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$unlock-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='400' />\n<parameter name='lcm-dmaap.status.message' value='SDNC Lock Mock returns success'/>\n",
- "comments": "",
- "x": 374.5,
- "y": 331.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": []
- },
- {
- "id": "8a3a4a22.8cd238",
- "type": "set",
- "name": "set default status value",
- "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n",
- "comments": "",
- "x": 428.5,
- "y": 274,
- "z": "1bef9bfd.091c84",
- "wires": []
- }
-]
+[
+ {
+ "id": "c36c1e82.e47c",
+ "type": "method",
+ "name": "unlock",
+ "xml": "<method rpc='unlock' mode='sync'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 530,
+ "y": 121,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "ea26f1ed.e963b"
+ ]
+ ]
+ },
+ {
+ "id": "4c2264b2.81a61c",
+ "type": "service-logic",
+ "name": "LCM ${project.version}",
+ "module": "LCM",
+ "version": "${project.version}",
+ "comments": "",
+ "xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='LCM' version='${project.version}'>",
+ "outputs": 1,
+ "x": 300.99993896484375,
+ "y": 122,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "c36c1e82.e47c"
+ ]
+ ]
+ },
+ {
+ "id": "a3360ab0.ce42c8",
+ "type": "returnSuccess",
+ "name": "return success",
+ "xml": "<return status='success'>\n<parameter name='status.code' value='400' />\n<parameter name='status.message' value='SDNC Unlock Mock returns success'/>",
+ "comments": "",
+ "x": 383,
+ "y": 510,
+ "z": "a439ae77.f8998",
+ "wires": []
+ },
+ {
+ "id": "7e67863d.7c42f8",
+ "type": "dgstart",
+ "name": "DGSTART",
+ "outputs": 1,
+ "x": 98,
+ "y": 121,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "4c2264b2.81a61c"
+ ]
+ ]
+ },
+ {
+ "id": "ea26f1ed.e963b",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 133.91668701171875,
+ "y": 275.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "f1d5fb31.fa3878",
+ "625601b.39b33",
+ "786cf009.ea481",
+ "cd184491.d656e8",
+ "a3360ab0.ce42c8"
+ ]
+ ]
+ },
+ {
+ "id": "f1d5fb31.fa3878",
+ "type": "execute",
+ "name": "execute Properties",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/lcm-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 421,
+ "y": 260.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "cd184491.d656e8",
+ "type": "execute",
+ "name": "execute DmaapMsg",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 397,
+ "y": 437.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "91133c94.04e29"
+ ]
+ ]
+ },
+ {
+ "id": "91133c94.04e29",
+ "type": "failure",
+ "name": "failure",
+ "xml": "<outcome value='failure'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 606,
+ "y": 435.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "f3b86bb6.9cf808"
+ ]
+ ]
+ },
+ {
+ "id": "f3b86bb6.9cf808",
+ "type": "record",
+ "name": "record",
+ "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
+ "comments": "",
+ "outputs": 1,
+ "x": 766,
+ "y": 435.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "786cf009.ea481",
+ "type": "set",
+ "name": "set",
+ "xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$unlock-input.common-header.request-id + '-' + $unlock-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='unlock'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$unlock-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$unlock-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$unlock-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$unlock-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$unlock-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$unlock-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$unlock-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$unlock-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='400' />\n<parameter name='lcm-dmaap.status.message' value='SDNC Unlock Mock returns success'/>\n",
+ "comments": "",
+ "x": 369,
+ "y": 369.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": []
+ },
+ {
+ "id": "625601b.39b33",
+ "type": "set",
+ "name": "set default status value",
+ "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n",
+ "comments": "",
+ "x": 423,
+ "y": 312,
+ "z": "a439ae77.f8998",
+ "wires": []
+ }
+] \ No newline at end of file
diff --git a/platform-logic/lcm/src/main/json/LCM_upgrade-backup.json b/platform-logic/lcm/src/main/json/LCM_upgrade-backup.json
index 42534d67..d45b3d11 100644
--- a/platform-logic/lcm/src/main/json/LCM_upgrade-backup.json
+++ b/platform-logic/lcm/src/main/json/LCM_upgrade-backup.json
@@ -1,194 +1,164 @@
-[
- {
- "id": "85add9d3.6d38c8",
- "type": "method",
- "name": "upgrade-backup",
- "xml": "<method rpc='upgrade-backup' mode='sync'>\n",
- "comments": "",
- "outputs": 1,
- "x": 535.5,
- "y": 83,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "a726273f.d4087"
- ]
- ]
- },
- {
- "id": "6cc2acd4.57558c",
- "type": "service-logic",
- "name": "LCM ${project.version}",
- "module": "LCM",
- "version": "${project.version}",
- "comments": "",
- "xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='LCM' version='${project.version}'>",
- "outputs": 1,
- "x": 306.49993896484375,
- "y": 84,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "85add9d3.6d38c8"
- ]
- ]
- },
- {
- "id": "3b5bd72a.fb19f8",
- "type": "returnSuccess",
- "name": "return success",
- "xml": "<return status='success'>\n<parameter name='status.code' value='400' />\n<parameter name='status.message' value='SDNC Lock Mock returns success'/>",
- "comments": "",
- "x": 388.5,
- "y": 472,
- "z": "1bef9bfd.091c84",
- "wires": []
- },
- {
- "id": "7bee7647.02e808",
- "type": "dgstart",
- "name": "DGSTART",
- "outputs": 1,
- "x": 103.5,
- "y": 83,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "6cc2acd4.57558c"
- ]
- ]
- },
- {
- "id": "a726273f.d4087",
- "type": "block",
- "name": "block",
- "xml": "<block>\n",
- "atomic": "false",
- "comments": "",
- "outputs": 1,
- "x": 139.41668701171875,
- "y": 237.08334350585938,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "c733c1eb.f6dc98",
- "8a3a4a22.8cd238",
- "5c905e45.08ff1",
- "ff16f6f7.bb02d",
- "3b5bd72a.fb19f8"
- ]
- ]
- },
- {
- "id": "c733c1eb.f6dc98",
- "type": "execute",
- "name": "execute Properties",
- "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/lcm-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
- "comments": "",
- "outputs": 1,
- "x": 426.5,
- "y": 222.08334350585938,
- "z": "1bef9bfd.091c84",
- "wires": [
- []
- ]
- },
- {
- "id": "ff16f6f7.bb02d",
- "type": "execute",
- "name": "execute DmaapMsg",
- "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
- "comments": "",
- "outputs": 1,
- "x": 402.5,
- "y": 399.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "4150232b.d9de94"
- ]
- ]
- },
- {
- "id": "4150232b.d9de94",
- "type": "failure",
- "name": "failure",
- "xml": "<outcome value='failure'>\n",
- "comments": "",
- "outputs": 1,
- "x": 611.5,
- "y": 397.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "1c38db15.1f052d"
- ]
- ]
- },
- {
- "id": "f6eb674d.c21",
- "type": "failure",
- "name": "failure",
- "xml": "<outcome value='failure'>\n",
- "comments": "",
- "outputs": 1,
- "x": 1506.9999389648438,
- "y": 415.0833511352539,
- "z": "1bef9bfd.091c84",
- "wires": [
- [
- "db43d1c.5a1cab"
- ]
- ]
- },
- {
- "id": "1c38db15.1f052d",
- "type": "record",
- "name": "record",
- "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
- "comments": "",
- "outputs": 1,
- "x": 771.5,
- "y": 397.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": [
- []
- ]
- },
- {
- "id": "db43d1c.5a1cab",
- "type": "record",
- "name": "record",
- "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
- "comments": "",
- "outputs": 1,
- "x": 1628.4166870117188,
- "y": 416.0833511352539,
- "z": "1bef9bfd.091c84",
- "wires": [
- []
- ]
- },
- {
- "id": "5c905e45.08ff1",
- "type": "set",
- "name": "set",
- "xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$upgrade-backup-input.common-header.request-id + '-' + $upgrade-backup-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='upgrade-backup'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$upgrade-backup-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$upgrade-backup-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$upgrade-backup-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$upgrade-backup-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$upgrade-backup-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$upgrade-backup-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$upgrade-backup-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$upgrade-backup-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='400' />\n<parameter name='lcm-dmaap.status.message' value='SDNC Upgrade-backup Mock returns success'/>\n",
- "comments": "",
- "x": 374.5,
- "y": 331.0833435058594,
- "z": "1bef9bfd.091c84",
- "wires": []
- },
- {
- "id": "8a3a4a22.8cd238",
- "type": "set",
- "name": "set default status value",
- "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n",
- "comments": "",
- "x": 428.5,
- "y": 274,
- "z": "1bef9bfd.091c84",
- "wires": []
- }
-]
+[
+ {
+ "id": "c36c1e82.e47c",
+ "type": "method",
+ "name": "upgrade-backup",
+ "xml": "<method rpc='upgrade-backup' mode='sync'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 530,
+ "y": 121,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "ea26f1ed.e963b"
+ ]
+ ]
+ },
+ {
+ "id": "4c2264b2.81a61c",
+ "type": "service-logic",
+ "name": "LCM ${project.version}",
+ "module": "LCM",
+ "version": "${project.version}",
+ "comments": "",
+ "xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='LCM' version='${project.version}'>",
+ "outputs": 1,
+ "x": 300.99993896484375,
+ "y": 122,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "c36c1e82.e47c"
+ ]
+ ]
+ },
+ {
+ "id": "a3360ab0.ce42c8",
+ "type": "returnSuccess",
+ "name": "return success",
+ "xml": "<return status='success'>\n<parameter name='status.code' value='400' />\n<parameter name='status.message' value='SDNC Upgrade-backup Mock returns success'/>",
+ "comments": "",
+ "x": 383,
+ "y": 510,
+ "z": "a439ae77.f8998",
+ "wires": []
+ },
+ {
+ "id": "7e67863d.7c42f8",
+ "type": "dgstart",
+ "name": "DGSTART",
+ "outputs": 1,
+ "x": 98,
+ "y": 121,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "4c2264b2.81a61c"
+ ]
+ ]
+ },
+ {
+ "id": "ea26f1ed.e963b",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 133.91668701171875,
+ "y": 275.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "f1d5fb31.fa3878",
+ "625601b.39b33",
+ "786cf009.ea481",
+ "cd184491.d656e8",
+ "a3360ab0.ce42c8"
+ ]
+ ]
+ },
+ {
+ "id": "f1d5fb31.fa3878",
+ "type": "execute",
+ "name": "execute Properties",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/lcm-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 421,
+ "y": 260.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "cd184491.d656e8",
+ "type": "execute",
+ "name": "execute DmaapMsg",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 397,
+ "y": 437.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "91133c94.04e29"
+ ]
+ ]
+ },
+ {
+ "id": "91133c94.04e29",
+ "type": "failure",
+ "name": "failure",
+ "xml": "<outcome value='failure'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 606,
+ "y": 435.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ [
+ "f3b86bb6.9cf808"
+ ]
+ ]
+ },
+ {
+ "id": "f3b86bb6.9cf808",
+ "type": "record",
+ "name": "record",
+ "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
+ "comments": "",
+ "outputs": 1,
+ "x": 766,
+ "y": 435.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "786cf009.ea481",
+ "type": "set",
+ "name": "set",
+ "xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$upgrade-backup-input.common-header.request-id + '-' + $upgrade-backup-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='upgrade-backup'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$upgrade-backup-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$upgrade-backup-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$upgrade-backup-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$upgrade-backup-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$upgrade-backup-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$upgrade-backup-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$upgrade-backup-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$upgrade-backup-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='400' />\n<parameter name='lcm-dmaap.status.message' value='SDNC Upgrade-backup Mock returns success'/>\n",
+ "comments": "",
+ "x": 369,
+ "y": 369.0833435058594,
+ "z": "a439ae77.f8998",
+ "wires": []
+ },
+ {
+ "id": "625601b.39b33",
+ "type": "set",
+ "name": "set default status value",
+ "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n",
+ "comments": "",
+ "x": 423,
+ "y": 312,
+ "z": "a439ae77.f8998",
+ "wires": []
+ }
+] \ No newline at end of file
diff --git a/platform-logic/lcm/src/main/json/LCM_upgrade-post-check.json b/platform-logic/lcm/src/main/json/LCM_upgrade-post-check.json
index 60fe6a61..38086480 100644
--- a/platform-logic/lcm/src/main/json/LCM_upgrade-post-check.json
+++ b/platform-logic/lcm/src/main/json/LCM_upgrade-post-check.json
@@ -1,22 +1,22 @@
[
{
- "id": "1a420388.7ce24c",
+ "id": "fab0f7ed.c486b8",
"type": "method",
"name": "upgrade-post-check",
"xml": "<method rpc='upgrade-post-check' mode='sync'>\n",
"comments": "",
"outputs": 1,
- "x": 550,
- "y": 102,
- "z": "af8f5cdd.6e4de",
+ "x": 480,
+ "y": 147,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "e635fd5d.f4087"
+ "5ccc8e8d.06e5"
]
]
},
{
- "id": "c220826b.91906",
+ "id": "5c791eb8.0072b",
"type": "service-logic",
"name": "LCM ${project.version}",
"module": "LCM",
@@ -24,528 +24,788 @@
"comments": "",
"xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='LCM' version='${project.version}'>",
"outputs": 1,
- "x": 337.99993896484375,
- "y": 103,
- "z": "af8f5cdd.6e4de",
+ "x": 267.99993896484375,
+ "y": 148,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "1a420388.7ce24c"
+ "fab0f7ed.c486b8"
]
]
},
{
- "id": "810e1e54.dec1c",
+ "id": "3503ece1.d7ad14",
"type": "execute",
"name": "execute AnsibleA.reqExec",
- "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >\n<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n<parameter name='User' value='`$prop.ansible.user`'/>\n<parameter name='Password' value='`$prop.ansible.password`'/>\n<parameter name='LocalParameters' value='`$prop.ansible.lcm.localparameters`'/>\n<parameter name='EnvParameters' value='`$upgrade-post-check-input.payload`'/>\n<parameter name='NodeList' value=\"`$nodelist`\"/>\n<parameter name='Timeout' value='`$prop.ansible.timeout`'/>\n<parameter name='Version' value='`$prop.ansible.version`'/>\n<parameter name='Id' value='`$upgrade-post-check-input.common-header.request-id`'/>\n<parameter name='PlaybookName' value='`$prop.lcm.upgrade-post-check.playbookname`'/>",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >\n<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n<parameter name='User' value='`$prop.ansible.user`'/>\n<parameter name='Password' value='`$prop.ansible.password`'/>\n<parameter name='LocalParameters' value='`$prop.ansible.lcm.localparameters`'/>\n<parameter name='EnvParameters' value='`$upgrade-post-check-input.payload`'/>\n<parameter name='NodeList' value=\"`$nodelist`\"/>\n<parameter name='Timeout' value='`$prop.ansible.timeout`'/>\n<parameter name='Version' value='`$prop.ansible.version`'/>\n<parameter name='Id' value='`$upgrade-post-check-input.common-header.request-id`'/>\n<parameter name='PlaybookName' value='`$playbookname`'/>",
"comments": "",
"outputs": 1,
- "x": 345.00001525878906,
- "y": 379,
- "z": "af8f5cdd.6e4de",
+ "x": 335.00001525878906,
+ "y": 755,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f279f5b8.9d49b8",
- "895a0a53.e12ea8",
- "fa759954.4e2068"
+ "734b2c42.973ee4",
+ "bb8a76ca.fb7058",
+ "a457fe79.46497"
]
]
},
{
- "id": "f7db5396.7b5f1",
+ "id": "f17ff2aa.67075",
"type": "switchNode",
"name": "switch",
"xml": "<switch test=\"`$org.onap.appc.adapter.ansible.result.code`\">\n",
"comments": "",
"outputs": 1,
- "x": 690.9999389648438,
- "y": 530.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 734.9999389648438,
+ "y": 863.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "bc5a2382.4973",
- "84f0dd88.8438",
- "ffd4aab1.e3c4b8"
+ "7ad5787f.1c20f8",
+ "b6f779a3.cc7ed8",
+ "f695f05e.abf31"
]
]
},
{
- "id": "bc5a2382.4973",
+ "id": "7ad5787f.1c20f8",
"type": "other",
"name": "outcome 500",
"xml": "<outcome value='500'>\n",
"comments": "",
"outputs": 1,
- "x": 835.9999389648438,
- "y": 528.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 879.9999389648438,
+ "y": 861.0000381469727,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "84f0dd88.8438",
+ "id": "b6f779a3.cc7ed8",
"type": "other",
"name": "outcome 100",
"xml": "<outcome value='100'>\n",
"comments": "",
"outputs": 1,
- "x": 838.9999389648438,
- "y": 571.0000610351562,
- "z": "af8f5cdd.6e4de",
+ "x": 876.9999389648438,
+ "y": 918.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f44a47b3.3aa128"
+ "1a65bc45.b2fcb4"
]
]
},
{
- "id": "f44a47b3.3aa128",
+ "id": "1a65bc45.b2fcb4",
"type": "execute",
"name": "execute reqExecResult",
- "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExecResult' >\n <parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n\t<parameter name='User' value='`$prop.ansible.user`'/>\n\t<parameter name='Password' value='`$prop.ansible.password`'/>\n\t<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>\n\t<parameter name='PlaybookName' value='`$prop.lcm.upgrade-post-check.playbookname`'/>\n\t\n\n\n\n\n",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExecResult' >\n <parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n\t<parameter name='User' value='`$prop.ansible.user`'/>\n\t<parameter name='Password' value='`$prop.ansible.password`'/>\n\t<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>\n\t<parameter name='PlaybookName' value='`$playbookname`'/>\n\t\n\n\n\n\n",
"comments": "",
"outputs": 1,
- "x": 1025.9999389648438,
- "y": 570.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 1064.9999389648438,
+ "y": 917.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "dd2fe7e6.957248",
- "6913b982.6c9bb8"
+ "5b0d24c6.9eb0ac",
+ "2b5e4322.1d495c"
]
]
},
{
- "id": "895a0a53.e12ea8",
+ "id": "bb8a76ca.fb7058",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 581.9999389648438,
- "y": 439.0000534057617,
- "z": "af8f5cdd.6e4de",
+ "x": 593.9999389648438,
+ "y": 776.0000915527344,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "f279f5b8.9d49b8",
+ "id": "734b2c42.973ee4",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 583.9999389648438,
- "y": 491.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 595.9999389648438,
+ "y": 828.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f7db5396.7b5f1"
+ "f17ff2aa.67075"
]
]
},
{
- "id": "dd2fe7e6.957248",
+ "id": "5b0d24c6.9eb0ac",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1189.9999389648438,
- "y": 542.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 1233.9999389648438,
+ "y": 875.0000381469727,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "ffd4aab1.e3c4b8",
+ "id": "f695f05e.abf31",
"type": "other",
"name": "outcome 101",
"xml": "<outcome value='101'>\n",
"comments": "",
"outputs": 1,
- "x": 832.9999389648438,
- "y": 486.00006103515625,
- "z": "af8f5cdd.6e4de",
+ "x": 876.9999389648438,
+ "y": 819.0000686645508,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "6913b982.6c9bb8",
+ "id": "2b5e4322.1d495c",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 1191.9999389648438,
- "y": 597.0000915527344,
- "z": "af8f5cdd.6e4de",
+ "x": 1241.9998779296875,
+ "y": 923.0001220703125,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "14c8dea1.b5b7a1"
+ "db1e6d62.a1404"
]
]
},
{
- "id": "a32993f8.f8215",
+ "id": "c1a2b259.11e46",
"type": "returnSuccess",
"name": "return success",
"xml": "<return status='success'>\n<parameter name='status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='status.message' value='`$org.onap.appc.adapter.ansible.message`'/>",
"comments": "",
- "x": 1467.9998779296875,
- "y": 648.0000610351562,
- "z": "af8f5cdd.6e4de",
+ "x": 1535.9998779296875,
+ "y": 980.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "d8c3f83d.d0b9d8",
+ "id": "566f9779.c05d38",
"type": "dgstart",
"name": "DGSTART",
"outputs": 1,
- "x": 153,
- "y": 102,
- "z": "af8f5cdd.6e4de",
+ "x": 83,
+ "y": 147,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "c220826b.91906"
+ "5c791eb8.0072b"
]
]
},
{
- "id": "e635fd5d.f4087",
+ "id": "5ccc8e8d.06e5",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 139.91668701171875,
- "y": 241.08334350585938,
- "z": "af8f5cdd.6e4de",
+ "x": 80.91668701171875,
+ "y": 239.08334350585938,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "810e1e54.dec1c",
- "ee1802be.c5c18",
- "e8d3b31a.f46c6",
- "4d7f56db.9375c8"
+ "3503ece1.d7ad14",
+ "dc18f7c9.2e4ac8",
+ "814875d2.cac108",
+ "e9d89bdf.30f7a8",
+ "69e97f86.e07ef",
+ "fa9a8e1f.bba53",
+ "baba22fc.1ceb5",
+ "81510405.ca8868"
]
]
},
{
- "id": "ee1802be.c5c18",
+ "id": "dc18f7c9.2e4ac8",
"type": "execute",
"name": "execute Properties",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/lcm-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
"comments": "",
"outputs": 1,
- "x": 328.00001525878906,
- "y": 225.08334350585938,
- "z": "af8f5cdd.6e4de",
+ "x": 379.0000305175781,
+ "y": 272.0833435058594,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "3830f5d4.87f1aa",
+ "id": "70d1c79a.089af8",
"type": "execute",
"name": "execute DmaapMsg",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
"comments": "",
"outputs": 1,
- "x": 1222.9999389648438,
- "y": 371.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1545.9998779296875,
+ "y": 725.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "1566d659.a0655a"
+ "d776c76b.1dd188"
]
]
},
{
- "id": "1566d659.a0655a",
+ "id": "d776c76b.1dd188",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1392.9998779296875,
- "y": 370.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1715.9998168945312,
+ "y": 724.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "22f8bfd0.6139e"
+ "eac6c260.d11fc"
]
]
},
{
- "id": "80cc4946.3f0f78",
+ "id": "2b54a991.b17b16",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1025.9998779296875,
- "y": 395.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1348.9998168945312,
+ "y": 749.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "3830f5d4.87f1aa",
- "fedbb5e6.fb3c28",
- "898f667e.daf2e8"
+ "70d1c79a.089af8",
+ "7970fcd5.6f11b4",
+ "3d8934f9.d0339c"
]
]
},
{
- "id": "7ce48bed.5b7c74",
+ "id": "e790e11b.4f947",
"type": "execute",
"name": "execute DmaapMsg",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
"comments": "",
"outputs": 1,
- "x": 1488.4998779296875,
- "y": 597.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1546.4998779296875,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "37e7fa80.2728b6"
+ "2e13891.034f576"
]
]
},
{
- "id": "37e7fa80.2728b6",
+ "id": "2e13891.034f576",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1648.4998779296875,
- "y": 597.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1714.4998779296875,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "47c7511a.dd8fe"
+ "30475e40.9b8be2"
]
]
},
{
- "id": "22f8bfd0.6139e",
+ "id": "eac6c260.d11fc",
"type": "record",
"name": "record",
"xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
"comments": "",
"outputs": 1,
- "x": 1524.9998779296875,
- "y": 370.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1835.9998779296875,
+ "y": 723.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "fedbb5e6.fb3c28",
+ "id": "7970fcd5.6f11b4",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n<parameter name='status.code' value='401' />\n<parameter name='status.message' value='`$org.onap.appc.adapter.ansible.message`' />\n",
"comments": "",
- "x": 1197.9165649414062,
- "y": 408.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1527.91650390625,
+ "y": 776.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "47c7511a.dd8fe",
+ "id": "30475e40.9b8be2",
"type": "record",
"name": "record",
"xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
"comments": "",
"outputs": 1,
- "x": 1769.9166259765625,
- "y": 598.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1842.9166259765625,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "898f667e.daf2e8",
+ "id": "3d8934f9.d0339c",
"type": "set",
- "name": "set",
+ "name": "set DmaapReq",
"xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$upgrade-post-check-input.common-header.request-id + '-' + $upgrade-post-check-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='upgrade-post-check'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$upgrade-post-check-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$upgrade-post-check-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$upgrade-post-check-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$upgrade-post-check-input.common-header.request-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$upgrade-post-check-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$upgrade-post-check-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$upgrade-post-check-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$upgrade-post-check-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='lcm-dmaap.status.message' value='`$org.onap.appc.adapter.ansible.message`'/>\n",
"comments": "",
- "x": 1174.9999389648438,
- "y": 318.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1532.9998779296875,
+ "y": 672.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "14c8dea1.b5b7a1",
+ "id": "db1e6d62.a1404",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1317.9998779296875,
- "y": 596.0833435058594,
- "z": "af8f5cdd.6e4de",
+ "x": 1369.9998779296875,
+ "y": 924.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "7ce48bed.5b7c74",
- "70a28c6a.563d24",
- "a32993f8.f8215"
+ "e790e11b.4f947",
+ "3a3f1d44.898da2",
+ "c1a2b259.11e46"
]
]
},
{
- "id": "70a28c6a.563d24",
+ "id": "3a3f1d44.898da2",
"type": "set",
- "name": "set",
+ "name": "set DmaapReq",
"xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$upgrade-post-check-input.common-header.request-id + '-' + $upgrade-post-check-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='upgrade-post-check'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$upgrade-post-check-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$upgrade-post-check-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$upgrade-post-check-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$upgrade-post-check-input.common-header.request-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$upgrade-post-check-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$upgrade-post-check-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$upgrade-post-check-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$upgrade-post-check-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='lcm-dmaap.status.message' value='`$org.onap.appc.adapter.ansible.message`'/>\n",
"comments": "",
- "x": 1448.1666259765625,
- "y": 549.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1536.1666259765625,
+ "y": 875.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "fa759954.4e2068",
+ "id": "a457fe79.46497",
"type": "not-found",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 577.9999389648438,
- "y": 392.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 602.9999389648438,
+ "y": 728.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "ed41675d.59c088"
+ "3d4c2c9a.7b1324"
]
]
},
{
- "id": "756c2e53.ca6d7",
+ "id": "d512629f.bc625",
"type": "set",
"name": "set Defaults",
"xml": "<set>\n<parameter name='org.onap.appc.adapter.ansible.result.code' value='401'/>\n<parameter name='org.onap.appc.adapter.ansible.message' value='Ansible Adapter was not found'/>\n",
"comments": "",
- "x": 1009.9999389648438,
- "y": 297.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 893.9999389648438,
+ "y": 687,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "ed41675d.59c088",
+ "id": "3d4c2c9a.7b1324",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 761.9999389648438,
- "y": 384.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 739.9999389648438,
+ "y": 722.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "756c2e53.ca6d7",
- "80cc4946.3f0f78"
+ "d512629f.bc625",
+ "2b54a991.b17b16"
]
]
},
{
- "id": "e8d3b31a.f46c6",
+ "id": "814875d2.cac108",
"type": "set",
- "name": "set default status value",
- "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>",
+ "name": "set default values",
+ "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n<parameter name='quote' value=\"'\" />\n",
"comments": "",
- "x": 336,
- "y": 269,
- "z": "af8f5cdd.6e4de",
+ "x": 372,
+ "y": 319,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "4d7f56db.9375c8",
+ "id": "442dbdff.6dfcb4",
"type": "get-resource",
- "name": "get aai.generic-vnf by vnf-id",
+ "name": "get aai.generic-vnf ",
"xml": "<get-resource plugin=\"org.onap.ccsdk.sli.adaptors.aai.AAIService\" \n\tresource=\"generic-vnf\" \n\t\tkey=\"generic-vnf.vnf-id = $upgrade-post-check-input.action-identifiers.vnf-id\" \n\t\tlocal-only=\"false\" \n\t\tpfx='aai.generic-vnf'>",
"comments": "",
"outputs": 1,
- "x": 349.0000305175781,
- "y": 325,
- "z": "af8f5cdd.6e4de",
+ "x": 912,
+ "y": 495,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "fa69a126.2a554",
- "f9cb9963.f9e368"
+ "1e57cb28.122ad5"
]
]
},
{
- "id": "fa69a126.2a554",
- "type": "failure",
+ "id": "1e57cb28.122ad5",
+ "type": "success",
+ "name": "success",
+ "xml": "<outcome value='success'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1070.3907470703125,
+ "y": 493.28399658203125,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "5a65efc0.bf413"
+ ]
+ ]
+ },
+ {
+ "id": "baba22fc.1ceb5",
+ "type": "record",
+ "name": "record",
+ "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='`$playbookname`'/>\n\t<parameter name=\"field2\" value='`$nodelist`'/>",
+ "comments": "",
+ "outputs": 1,
+ "x": 300.9998779296875,
+ "y": 683,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "69e97f86.e07ef",
+ "type": "switchNode",
+ "name": "switch pnf-flag",
+ "xml": "<switch test='`$payloadJson.pnf-flag`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 354,
+ "y": 420,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "e43265e9.4c7f38",
+ "d78c93da.7125f"
+ ]
+ ]
+ },
+ {
+ "id": "e9d89bdf.30f7a8",
+ "type": "execute",
+ "name": "execute jsonStringToCtx",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='jsonStringToCtx'>\n\t<parameter name='source' value='upgrade-post-check-input.payload' />\n\t<parameter name='outputPath' value='payloadJson' />\n\t<parameter name='isEscaped' value='true' />",
+ "comments": "",
+ "outputs": 1,
+ "x": 386,
+ "y": 366,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "e43265e9.4c7f38",
+ "type": "outcome",
+ "name": "true",
+ "xml": "<outcome value='true'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 551,
+ "y": 399,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "abbc4ae4.be5328"
+ ]
+ ]
+ },
+ {
+ "id": "d78c93da.7125f",
+ "type": "outcome",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 589.86083984375,
- "y": 312.53564453125,
- "z": "af8f5cdd.6e4de",
+ "x": 550.9999389648438,
+ "y": 460,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "2d1a88c6.11f9d8"
+ "f68ee407.ca6d88"
]
]
},
{
- "id": "f9cb9963.f9e368",
- "type": "success",
- "name": "success",
- "xml": "<outcome value='success'>\n",
+ "id": "f68ee407.ca6d88",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
"comments": "",
"outputs": 1,
- "x": 591.3908081054688,
- "y": 260.28399658203125,
- "z": "af8f5cdd.6e4de",
+ "x": 698.9999389648438,
+ "y": 459,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "c4d4de4d.3e19f"
+ "442dbdff.6dfcb4",
+ "80c560bb.eea5f"
]
]
},
{
- "id": "c4d4de4d.3e19f",
+ "id": "abbc4ae4.be5328",
+ "type": "set",
+ "name": "set AnsibleReq",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`'[' + $quote + $payloadJson.ipaddress-v4-oam + $quote + ']'`\"/>\n<parameter name='playbookname' value='`$prop.lcm.pnf.upgrade-post-check.playbookname`'/>\n",
+ "comments": "",
+ "x": 712,
+ "y": 397,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "80c560bb.eea5f",
+ "type": "execute",
+ "name": "set playbookname",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>\n\t<parameter name='outputPath' value='playbookname' />\n\t<parameter name='source' value=\"`'prop.lcm.' + $payloadJson.nf-naming-code + '.upgrade-post-check.playbookname'`\" />\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 921,
+ "y": 439,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "fa9a8e1f.bba53",
+ "type": "switchNode",
+ "name": "switch playbookname",
+ "xml": "<switch test='`$playbookname`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 351,
+ "y": 551,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "1a5624d2.74e98b"
+ ]
+ ]
+ },
+ {
+ "id": "1a5624d2.74e98b",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 522,
+ "y": 552,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "524c17a1.30fbf8"
+ ]
+ ]
+ },
+ {
+ "id": "524c17a1.30fbf8",
+ "type": "set",
+ "name": "set playbookname",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>\n<parameter name='playbookname' value='`$prop.lcm.upgrade-post-check.playbookname`'/>",
+ "comments": "",
+ "x": 712,
+ "y": 551,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "81510405.ca8868",
+ "type": "switchNode",
+ "name": "switch nodelist",
+ "xml": "<switch test='`$nodelist`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 341,
+ "y": 610,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "7a126f.d2de2d9",
+ "8743a074.e8506"
+ ]
+ ]
+ },
+ {
+ "id": "7a126f.d2de2d9",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 521,
+ "y": 603,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c954af6f.c34df"
+ ]
+ ]
+ },
+ {
+ "id": "c954af6f.c34df",
"type": "set",
"name": "set nodelist",
- "xml": "<set>\n<parameter name='quote' value=\"'\" />\n<parameter name='nodelist' value=\"`'[' + $quote + $aai.ipv4-oam-address + $quote + ']'`\"/>\n",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>",
"comments": "",
- "x": 740.3908081054688,
- "y": 259.28399658203125,
- "z": "af8f5cdd.6e4de",
+ "x": 678,
+ "y": 617,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "2d1a88c6.11f9d8",
- "type": "record",
- "name": "record",
- "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='VNF not found in AAI. Nodelist retrieved from config'/>",
+ "id": "8743a074.e8506",
+ "type": "outcome",
+ "name": "empty",
+ "xml": "<outcome value=\"['']\">\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 520,
+ "y": 647,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c954af6f.c34df"
+ ]
+ ]
+ },
+ {
+ "id": "90b2891b.001708",
+ "type": "switchNode",
+ "name": "switch playbookname",
+ "xml": "<switch test='`$playbookname`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1396,
+ "y": 482,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c9dd0d76.432f7"
+ ]
+ ]
+ },
+ {
+ "id": "c9dd0d76.432f7",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1574,
+ "y": 482,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "6ea15b2b.d9cd74"
+ ]
+ ]
+ },
+ {
+ "id": "9706bdee.6acf9",
+ "type": "set",
+ "name": "set nodelist",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`'[' + $quote + $aai.generic-vnf.ipv4-oam-address + $quote + ']'`\"/>\n",
+ "comments": "",
+ "x": 1369,
+ "y": 535,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "5a65efc0.bf413",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 1199,
+ "y": 492,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "90b2891b.001708",
+ "9706bdee.6acf9"
+ ]
+ ]
+ },
+ {
+ "id": "6ea15b2b.d9cd74",
+ "type": "execute",
+ "name": "set playbookname",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>\n\t<parameter name='outputPath' value='playbookname' />\n\t<parameter name='source' value=\"`'prop.lcm.' + $aai.generic-vnf.nf-naming-code + '.upgrade-post-check.playbookname'`\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 736,
- "y": 312,
- "z": "af8f5cdd.6e4de",
+ "x": 1746,
+ "y": 480,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
diff --git a/platform-logic/lcm/src/main/json/LCM_upgrade-pre-check.json b/platform-logic/lcm/src/main/json/LCM_upgrade-pre-check.json
index 4f39f487..8657b538 100644
--- a/platform-logic/lcm/src/main/json/LCM_upgrade-pre-check.json
+++ b/platform-logic/lcm/src/main/json/LCM_upgrade-pre-check.json
@@ -1,22 +1,22 @@
[
{
- "id": "1a420388.7ce24c",
+ "id": "fab0f7ed.c486b8",
"type": "method",
"name": "upgrade-pre-check",
"xml": "<method rpc='upgrade-pre-check' mode='sync'>\n",
"comments": "",
"outputs": 1,
- "x": 550,
- "y": 102,
- "z": "af8f5cdd.6e4de",
+ "x": 480,
+ "y": 147,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "e635fd5d.f4087"
+ "5ccc8e8d.06e5"
]
]
},
{
- "id": "c220826b.91906",
+ "id": "5c791eb8.0072b",
"type": "service-logic",
"name": "LCM ${project.version}",
"module": "LCM",
@@ -24,528 +24,788 @@
"comments": "",
"xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='LCM' version='${project.version}'>",
"outputs": 1,
- "x": 337.99993896484375,
- "y": 103,
- "z": "af8f5cdd.6e4de",
+ "x": 267.99993896484375,
+ "y": 148,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "1a420388.7ce24c"
+ "fab0f7ed.c486b8"
]
]
},
{
- "id": "810e1e54.dec1c",
+ "id": "3503ece1.d7ad14",
"type": "execute",
"name": "execute AnsibleA.reqExec",
- "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >\n<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n<parameter name='User' value='`$prop.ansible.user`'/>\n<parameter name='Password' value='`$prop.ansible.password`'/>\n<parameter name='LocalParameters' value='`$prop.ansible.lcm.localparameters`'/>\n<parameter name='EnvParameters' value='`$upgrade-pre-check-input.payload`'/>\n<parameter name='NodeList' value=\"`$nodelist`\"/>\n<parameter name='Timeout' value='`$prop.ansible.timeout`'/>\n<parameter name='Version' value='`$prop.ansible.version`'/>\n<parameter name='Id' value='`$upgrade-pre-check-input.common-header.request-id`'/>\n<parameter name='PlaybookName' value='`$prop.lcm.upgrade-pre-check.playbookname`'/>",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >\n<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n<parameter name='User' value='`$prop.ansible.user`'/>\n<parameter name='Password' value='`$prop.ansible.password`'/>\n<parameter name='LocalParameters' value='`$prop.ansible.lcm.localparameters`'/>\n<parameter name='EnvParameters' value='`$upgrade-pre-check-input.payload`'/>\n<parameter name='NodeList' value=\"`$nodelist`\"/>\n<parameter name='Timeout' value='`$prop.ansible.timeout`'/>\n<parameter name='Version' value='`$prop.ansible.version`'/>\n<parameter name='Id' value='`$upgrade-pre-check-input.common-header.request-id`'/>\n<parameter name='PlaybookName' value='`$playbookname`'/>",
"comments": "",
"outputs": 1,
- "x": 345.00001525878906,
- "y": 379,
- "z": "af8f5cdd.6e4de",
+ "x": 335.00001525878906,
+ "y": 755,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f279f5b8.9d49b8",
- "895a0a53.e12ea8",
- "fa759954.4e2068"
+ "734b2c42.973ee4",
+ "bb8a76ca.fb7058",
+ "a457fe79.46497"
]
]
},
{
- "id": "f7db5396.7b5f1",
+ "id": "f17ff2aa.67075",
"type": "switchNode",
"name": "switch",
"xml": "<switch test=\"`$org.onap.appc.adapter.ansible.result.code`\">\n",
"comments": "",
"outputs": 1,
- "x": 690.9999389648438,
- "y": 530.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 734.9999389648438,
+ "y": 863.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "bc5a2382.4973",
- "84f0dd88.8438",
- "ffd4aab1.e3c4b8"
+ "7ad5787f.1c20f8",
+ "b6f779a3.cc7ed8",
+ "f695f05e.abf31"
]
]
},
{
- "id": "bc5a2382.4973",
+ "id": "7ad5787f.1c20f8",
"type": "other",
"name": "outcome 500",
"xml": "<outcome value='500'>\n",
"comments": "",
"outputs": 1,
- "x": 835.9999389648438,
- "y": 528.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 879.9999389648438,
+ "y": 861.0000381469727,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "84f0dd88.8438",
+ "id": "b6f779a3.cc7ed8",
"type": "other",
"name": "outcome 100",
"xml": "<outcome value='100'>\n",
"comments": "",
"outputs": 1,
- "x": 838.9999389648438,
- "y": 571.0000610351562,
- "z": "af8f5cdd.6e4de",
+ "x": 876.9999389648438,
+ "y": 918.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f44a47b3.3aa128"
+ "1a65bc45.b2fcb4"
]
]
},
{
- "id": "f44a47b3.3aa128",
+ "id": "1a65bc45.b2fcb4",
"type": "execute",
"name": "execute reqExecResult",
- "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExecResult' >\n <parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n\t<parameter name='User' value='`$prop.ansible.user`'/>\n\t<parameter name='Password' value='`$prop.ansible.password`'/>\n\t<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>\n\t<parameter name='PlaybookName' value='`$prop.lcm.upgrade-pre-check.playbookname`'/>\n\t\n\n\n\n\n",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExecResult' >\n <parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n\t<parameter name='User' value='`$prop.ansible.user`'/>\n\t<parameter name='Password' value='`$prop.ansible.password`'/>\n\t<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>\n\t<parameter name='PlaybookName' value='`$playbookname`'/>\n\t\n\n\n\n\n",
"comments": "",
"outputs": 1,
- "x": 1025.9999389648438,
- "y": 570.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 1064.9999389648438,
+ "y": 917.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "dd2fe7e6.957248",
- "6913b982.6c9bb8"
+ "5b0d24c6.9eb0ac",
+ "2b5e4322.1d495c"
]
]
},
{
- "id": "895a0a53.e12ea8",
+ "id": "bb8a76ca.fb7058",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 581.9999389648438,
- "y": 439.0000534057617,
- "z": "af8f5cdd.6e4de",
+ "x": 593.9999389648438,
+ "y": 776.0000915527344,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "f279f5b8.9d49b8",
+ "id": "734b2c42.973ee4",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 583.9999389648438,
- "y": 491.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 595.9999389648438,
+ "y": 828.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f7db5396.7b5f1"
+ "f17ff2aa.67075"
]
]
},
{
- "id": "dd2fe7e6.957248",
+ "id": "5b0d24c6.9eb0ac",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1189.9999389648438,
- "y": 542.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 1233.9999389648438,
+ "y": 875.0000381469727,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "ffd4aab1.e3c4b8",
+ "id": "f695f05e.abf31",
"type": "other",
"name": "outcome 101",
"xml": "<outcome value='101'>\n",
"comments": "",
"outputs": 1,
- "x": 832.9999389648438,
- "y": 486.00006103515625,
- "z": "af8f5cdd.6e4de",
+ "x": 876.9999389648438,
+ "y": 819.0000686645508,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "6913b982.6c9bb8",
+ "id": "2b5e4322.1d495c",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 1191.9999389648438,
- "y": 597.0000915527344,
- "z": "af8f5cdd.6e4de",
+ "x": 1241.9998779296875,
+ "y": 923.0001220703125,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "14c8dea1.b5b7a1"
+ "db1e6d62.a1404"
]
]
},
{
- "id": "a32993f8.f8215",
+ "id": "c1a2b259.11e46",
"type": "returnSuccess",
"name": "return success",
"xml": "<return status='success'>\n<parameter name='status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='status.message' value='`$org.onap.appc.adapter.ansible.message`'/>",
"comments": "",
- "x": 1467.9998779296875,
- "y": 648.0000610351562,
- "z": "af8f5cdd.6e4de",
+ "x": 1535.9998779296875,
+ "y": 980.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "d8c3f83d.d0b9d8",
+ "id": "566f9779.c05d38",
"type": "dgstart",
"name": "DGSTART",
"outputs": 1,
- "x": 153,
- "y": 102,
- "z": "af8f5cdd.6e4de",
+ "x": 83,
+ "y": 147,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "c220826b.91906"
+ "5c791eb8.0072b"
]
]
},
{
- "id": "e635fd5d.f4087",
+ "id": "5ccc8e8d.06e5",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 139.91668701171875,
- "y": 241.08334350585938,
- "z": "af8f5cdd.6e4de",
+ "x": 80.91668701171875,
+ "y": 239.08334350585938,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "810e1e54.dec1c",
- "ee1802be.c5c18",
- "e8d3b31a.f46c6",
- "4d7f56db.9375c8"
+ "3503ece1.d7ad14",
+ "dc18f7c9.2e4ac8",
+ "814875d2.cac108",
+ "e9d89bdf.30f7a8",
+ "69e97f86.e07ef",
+ "fa9a8e1f.bba53",
+ "baba22fc.1ceb5",
+ "81510405.ca8868"
]
]
},
{
- "id": "ee1802be.c5c18",
+ "id": "dc18f7c9.2e4ac8",
"type": "execute",
"name": "execute Properties",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/lcm-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
"comments": "",
"outputs": 1,
- "x": 328.00001525878906,
- "y": 225.08334350585938,
- "z": "af8f5cdd.6e4de",
+ "x": 379.0000305175781,
+ "y": 272.0833435058594,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "3830f5d4.87f1aa",
+ "id": "70d1c79a.089af8",
"type": "execute",
"name": "execute DmaapMsg",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
"comments": "",
"outputs": 1,
- "x": 1222.9999389648438,
- "y": 371.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1545.9998779296875,
+ "y": 725.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "1566d659.a0655a"
+ "d776c76b.1dd188"
]
]
},
{
- "id": "1566d659.a0655a",
+ "id": "d776c76b.1dd188",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1392.9998779296875,
- "y": 370.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1715.9998168945312,
+ "y": 724.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "22f8bfd0.6139e"
+ "eac6c260.d11fc"
]
]
},
{
- "id": "80cc4946.3f0f78",
+ "id": "2b54a991.b17b16",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1025.9998779296875,
- "y": 395.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1348.9998168945312,
+ "y": 749.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "3830f5d4.87f1aa",
- "fedbb5e6.fb3c28",
- "898f667e.daf2e8"
+ "70d1c79a.089af8",
+ "7970fcd5.6f11b4",
+ "3d8934f9.d0339c"
]
]
},
{
- "id": "7ce48bed.5b7c74",
+ "id": "e790e11b.4f947",
"type": "execute",
"name": "execute DmaapMsg",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
"comments": "",
"outputs": 1,
- "x": 1488.4998779296875,
- "y": 597.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1546.4998779296875,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "37e7fa80.2728b6"
+ "2e13891.034f576"
]
]
},
{
- "id": "37e7fa80.2728b6",
+ "id": "2e13891.034f576",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1648.4998779296875,
- "y": 597.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1714.4998779296875,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "47c7511a.dd8fe"
+ "30475e40.9b8be2"
]
]
},
{
- "id": "22f8bfd0.6139e",
+ "id": "eac6c260.d11fc",
"type": "record",
"name": "record",
"xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
"comments": "",
"outputs": 1,
- "x": 1524.9998779296875,
- "y": 370.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1835.9998779296875,
+ "y": 723.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "fedbb5e6.fb3c28",
+ "id": "7970fcd5.6f11b4",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n<parameter name='status.code' value='401' />\n<parameter name='status.message' value='`$org.onap.appc.adapter.ansible.message`' />\n",
"comments": "",
- "x": 1197.9165649414062,
- "y": 408.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1527.91650390625,
+ "y": 776.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "47c7511a.dd8fe",
+ "id": "30475e40.9b8be2",
"type": "record",
"name": "record",
"xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
"comments": "",
"outputs": 1,
- "x": 1769.9166259765625,
- "y": 598.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1842.9166259765625,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "898f667e.daf2e8",
+ "id": "3d8934f9.d0339c",
"type": "set",
- "name": "set",
+ "name": "set DmaapReq",
"xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$upgrade-pre-check-input.common-header.request-id + '-' + $upgrade-pre-check-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='upgrade-pre-check'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$upgrade-pre-check-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$upgrade-pre-check-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$upgrade-pre-check-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$upgrade-pre-check-input.common-header.request-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$upgrade-pre-check-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$upgrade-pre-check-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$upgrade-pre-check-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$upgrade-pre-check-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='lcm-dmaap.status.message' value='`$org.onap.appc.adapter.ansible.message`'/>\n",
"comments": "",
- "x": 1174.9999389648438,
- "y": 318.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1532.9998779296875,
+ "y": 672.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "14c8dea1.b5b7a1",
+ "id": "db1e6d62.a1404",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1317.9998779296875,
- "y": 596.0833435058594,
- "z": "af8f5cdd.6e4de",
+ "x": 1369.9998779296875,
+ "y": 924.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "7ce48bed.5b7c74",
- "70a28c6a.563d24",
- "a32993f8.f8215"
+ "e790e11b.4f947",
+ "3a3f1d44.898da2",
+ "c1a2b259.11e46"
]
]
},
{
- "id": "70a28c6a.563d24",
+ "id": "3a3f1d44.898da2",
"type": "set",
- "name": "set",
+ "name": "set DmaapReq",
"xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$upgrade-pre-check-input.common-header.request-id + '-' + $upgrade-pre-check-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='upgrade-pre-check'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$upgrade-pre-check-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$upgrade-pre-check-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$upgrade-pre-check-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$upgrade-pre-check-input.common-header.request-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$upgrade-pre-check-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$upgrade-pre-check-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$upgrade-pre-check-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$upgrade-pre-check-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='lcm-dmaap.status.message' value='`$org.onap.appc.adapter.ansible.message`'/>\n",
"comments": "",
- "x": 1448.1666259765625,
- "y": 549.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1536.1666259765625,
+ "y": 875.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "fa759954.4e2068",
+ "id": "a457fe79.46497",
"type": "not-found",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 577.9999389648438,
- "y": 392.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 602.9999389648438,
+ "y": 728.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "ed41675d.59c088"
+ "3d4c2c9a.7b1324"
]
]
},
{
- "id": "756c2e53.ca6d7",
+ "id": "d512629f.bc625",
"type": "set",
"name": "set Defaults",
"xml": "<set>\n<parameter name='org.onap.appc.adapter.ansible.result.code' value='401'/>\n<parameter name='org.onap.appc.adapter.ansible.message' value='Ansible Adapter was not found'/>\n",
"comments": "",
- "x": 1009.9999389648438,
- "y": 297.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 893.9999389648438,
+ "y": 687,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "ed41675d.59c088",
+ "id": "3d4c2c9a.7b1324",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 761.9999389648438,
- "y": 384.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 739.9999389648438,
+ "y": 722.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "756c2e53.ca6d7",
- "80cc4946.3f0f78"
+ "d512629f.bc625",
+ "2b54a991.b17b16"
]
]
},
{
- "id": "e8d3b31a.f46c6",
+ "id": "814875d2.cac108",
"type": "set",
- "name": "set default status value",
- "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>",
+ "name": "set default values",
+ "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n<parameter name='quote' value=\"'\" />\n",
"comments": "",
- "x": 336,
- "y": 269,
- "z": "af8f5cdd.6e4de",
+ "x": 372,
+ "y": 319,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "4d7f56db.9375c8",
+ "id": "442dbdff.6dfcb4",
"type": "get-resource",
- "name": "get aai.generic-vnf by vnf-id",
+ "name": "get aai.generic-vnf ",
"xml": "<get-resource plugin=\"org.onap.ccsdk.sli.adaptors.aai.AAIService\" \n\tresource=\"generic-vnf\" \n\t\tkey=\"generic-vnf.vnf-id = $upgrade-pre-check-input.action-identifiers.vnf-id\" \n\t\tlocal-only=\"false\" \n\t\tpfx='aai.generic-vnf'>",
"comments": "",
"outputs": 1,
- "x": 349.0000305175781,
- "y": 325,
- "z": "af8f5cdd.6e4de",
+ "x": 912,
+ "y": 495,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "fa69a126.2a554",
- "f9cb9963.f9e368"
+ "1e57cb28.122ad5"
]
]
},
{
- "id": "fa69a126.2a554",
- "type": "failure",
+ "id": "1e57cb28.122ad5",
+ "type": "success",
+ "name": "success",
+ "xml": "<outcome value='success'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1070.3907470703125,
+ "y": 493.28399658203125,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "5a65efc0.bf413"
+ ]
+ ]
+ },
+ {
+ "id": "baba22fc.1ceb5",
+ "type": "record",
+ "name": "record",
+ "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='`$playbookname`'/>\n\t<parameter name=\"field2\" value='`$nodelist`'/>",
+ "comments": "",
+ "outputs": 1,
+ "x": 300.9998779296875,
+ "y": 683,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "69e97f86.e07ef",
+ "type": "switchNode",
+ "name": "switch pnf-flag",
+ "xml": "<switch test='`$payloadJson.pnf-flag`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 354,
+ "y": 420,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "e43265e9.4c7f38",
+ "d78c93da.7125f"
+ ]
+ ]
+ },
+ {
+ "id": "e9d89bdf.30f7a8",
+ "type": "execute",
+ "name": "execute jsonStringToCtx",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='jsonStringToCtx'>\n\t<parameter name='source' value='upgrade-pre-check-input.payload' />\n\t<parameter name='outputPath' value='payloadJson' />\n\t<parameter name='isEscaped' value='true' />",
+ "comments": "",
+ "outputs": 1,
+ "x": 386,
+ "y": 366,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "e43265e9.4c7f38",
+ "type": "outcome",
+ "name": "true",
+ "xml": "<outcome value='true'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 551,
+ "y": 399,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "abbc4ae4.be5328"
+ ]
+ ]
+ },
+ {
+ "id": "d78c93da.7125f",
+ "type": "outcome",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 589.86083984375,
- "y": 312.53564453125,
- "z": "af8f5cdd.6e4de",
+ "x": 550.9999389648438,
+ "y": 460,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "2d1a88c6.11f9d8"
+ "f68ee407.ca6d88"
]
]
},
{
- "id": "f9cb9963.f9e368",
- "type": "success",
- "name": "success",
- "xml": "<outcome value='success'>\n",
+ "id": "f68ee407.ca6d88",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
"comments": "",
"outputs": 1,
- "x": 591.3908081054688,
- "y": 260.28399658203125,
- "z": "af8f5cdd.6e4de",
+ "x": 698.9999389648438,
+ "y": 459,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "c4d4de4d.3e19f"
+ "442dbdff.6dfcb4",
+ "80c560bb.eea5f"
]
]
},
{
- "id": "c4d4de4d.3e19f",
+ "id": "abbc4ae4.be5328",
+ "type": "set",
+ "name": "set AnsibleReq",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`'[' + $quote + $payloadJson.ipaddress-v4-oam + $quote + ']'`\"/>\n<parameter name='playbookname' value='`$prop.lcm.pnf.upgrade-pre-check.playbookname`'/>\n",
+ "comments": "",
+ "x": 712,
+ "y": 397,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "80c560bb.eea5f",
+ "type": "execute",
+ "name": "set playbookname",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>\n\t<parameter name='outputPath' value='playbookname' />\n\t<parameter name='source' value=\"`'prop.lcm.' + $payloadJson.nf-naming-code + '.upgrade-pre-check.playbookname'`\" />\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 921,
+ "y": 439,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "fa9a8e1f.bba53",
+ "type": "switchNode",
+ "name": "switch playbookname",
+ "xml": "<switch test='`$playbookname`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 351,
+ "y": 551,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "1a5624d2.74e98b"
+ ]
+ ]
+ },
+ {
+ "id": "1a5624d2.74e98b",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 522,
+ "y": 552,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "524c17a1.30fbf8"
+ ]
+ ]
+ },
+ {
+ "id": "524c17a1.30fbf8",
+ "type": "set",
+ "name": "set playbookname",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>\n<parameter name='playbookname' value='`$prop.lcm.upgrade-pre-check.playbookname`'/>",
+ "comments": "",
+ "x": 712,
+ "y": 551,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "81510405.ca8868",
+ "type": "switchNode",
+ "name": "switch nodelist",
+ "xml": "<switch test='`$nodelist`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 341,
+ "y": 610,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "7a126f.d2de2d9",
+ "8743a074.e8506"
+ ]
+ ]
+ },
+ {
+ "id": "7a126f.d2de2d9",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 521,
+ "y": 603,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c954af6f.c34df"
+ ]
+ ]
+ },
+ {
+ "id": "c954af6f.c34df",
"type": "set",
"name": "set nodelist",
- "xml": "<set>\n<parameter name='quote' value=\"'\" />\n<parameter name='nodelist' value=\"`'[' + $quote + $aai.ipv4-oam-address + $quote + ']'`\"/>\n",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>",
"comments": "",
- "x": 740.3908081054688,
- "y": 259.28399658203125,
- "z": "af8f5cdd.6e4de",
+ "x": 678,
+ "y": 617,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "2d1a88c6.11f9d8",
- "type": "record",
- "name": "record",
- "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='VNF not found in AAI. Nodelist retrieved from config'/>",
+ "id": "8743a074.e8506",
+ "type": "outcome",
+ "name": "empty",
+ "xml": "<outcome value=\"['']\">\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 520,
+ "y": 647,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c954af6f.c34df"
+ ]
+ ]
+ },
+ {
+ "id": "90b2891b.001708",
+ "type": "switchNode",
+ "name": "switch playbookname",
+ "xml": "<switch test='`$playbookname`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1396,
+ "y": 482,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c9dd0d76.432f7"
+ ]
+ ]
+ },
+ {
+ "id": "c9dd0d76.432f7",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1574,
+ "y": 482,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "6ea15b2b.d9cd74"
+ ]
+ ]
+ },
+ {
+ "id": "9706bdee.6acf9",
+ "type": "set",
+ "name": "set nodelist",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`'[' + $quote + $aai.generic-vnf.ipv4-oam-address + $quote + ']'`\"/>\n",
+ "comments": "",
+ "x": 1369,
+ "y": 535,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "5a65efc0.bf413",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 1199,
+ "y": 492,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "90b2891b.001708",
+ "9706bdee.6acf9"
+ ]
+ ]
+ },
+ {
+ "id": "6ea15b2b.d9cd74",
+ "type": "execute",
+ "name": "set playbookname",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>\n\t<parameter name='outputPath' value='playbookname' />\n\t<parameter name='source' value=\"`'prop.lcm.' + $aai.generic-vnf.nf-naming-code + '.upgrade-pre-check.playbookname'`\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 736,
- "y": 312,
- "z": "af8f5cdd.6e4de",
+ "x": 1746,
+ "y": 480,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
diff --git a/platform-logic/lcm/src/main/json/LCM_upgrade-software.json b/platform-logic/lcm/src/main/json/LCM_upgrade-software.json
index 95e0638e..0ddbf91e 100644
--- a/platform-logic/lcm/src/main/json/LCM_upgrade-software.json
+++ b/platform-logic/lcm/src/main/json/LCM_upgrade-software.json
@@ -1,22 +1,22 @@
[
{
- "id": "1a420388.7ce24c",
+ "id": "fab0f7ed.c486b8",
"type": "method",
"name": "upgrade-software",
"xml": "<method rpc='upgrade-software' mode='sync'>\n",
"comments": "",
"outputs": 1,
- "x": 550,
- "y": 102,
- "z": "af8f5cdd.6e4de",
+ "x": 480,
+ "y": 147,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "e635fd5d.f4087"
+ "5ccc8e8d.06e5"
]
]
},
{
- "id": "c220826b.91906",
+ "id": "5c791eb8.0072b",
"type": "service-logic",
"name": "LCM ${project.version}",
"module": "LCM",
@@ -24,528 +24,788 @@
"comments": "",
"xml": "<service-logic xmlns='http://www.onap.org/sdnc/svclogic' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.onap.org/sdnc/svclogic ./svclogic.xsd' module='LCM' version='${project.version}'>",
"outputs": 1,
- "x": 337.99993896484375,
- "y": 103,
- "z": "af8f5cdd.6e4de",
+ "x": 267.99993896484375,
+ "y": 148,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "1a420388.7ce24c"
+ "fab0f7ed.c486b8"
]
]
},
{
- "id": "810e1e54.dec1c",
+ "id": "3503ece1.d7ad14",
"type": "execute",
"name": "execute AnsibleA.reqExec",
- "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >\n<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n<parameter name='User' value='`$prop.ansible.user`'/>\n<parameter name='Password' value='`$prop.ansible.password`'/>\n<parameter name='LocalParameters' value='`$prop.ansible.lcm.localparameters`'/>\n<parameter name='EnvParameters' value='`$upgrade-software-input.payload`'/>\n<parameter name='NodeList' value=\"`$nodelist`\"/>\n<parameter name='Timeout' value='`$prop.ansible.timeout`'/>\n<parameter name='Version' value='`$prop.ansible.version`'/>\n<parameter name='Id' value='`$upgrade-software-input.common-header.request-id`'/>\n<parameter name='PlaybookName' value='`$prop.lcm.upgrade-software.playbookname`'/>",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >\n<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n<parameter name='User' value='`$prop.ansible.user`'/>\n<parameter name='Password' value='`$prop.ansible.password`'/>\n<parameter name='LocalParameters' value='`$prop.ansible.lcm.localparameters`'/>\n<parameter name='EnvParameters' value='`$upgrade-software-input.payload`'/>\n<parameter name='NodeList' value=\"`$nodelist`\"/>\n<parameter name='Timeout' value='`$prop.ansible.timeout`'/>\n<parameter name='Version' value='`$prop.ansible.version`'/>\n<parameter name='Id' value='`$upgrade-software-input.common-header.request-id`'/>\n<parameter name='PlaybookName' value='`$playbookname`'/>",
"comments": "",
"outputs": 1,
- "x": 345.00001525878906,
- "y": 379,
- "z": "af8f5cdd.6e4de",
+ "x": 335.00001525878906,
+ "y": 755,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f279f5b8.9d49b8",
- "895a0a53.e12ea8",
- "fa759954.4e2068"
+ "734b2c42.973ee4",
+ "bb8a76ca.fb7058",
+ "a457fe79.46497"
]
]
},
{
- "id": "f7db5396.7b5f1",
+ "id": "f17ff2aa.67075",
"type": "switchNode",
"name": "switch",
"xml": "<switch test=\"`$org.onap.appc.adapter.ansible.result.code`\">\n",
"comments": "",
"outputs": 1,
- "x": 690.9999389648438,
- "y": 530.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 734.9999389648438,
+ "y": 863.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "bc5a2382.4973",
- "84f0dd88.8438",
- "ffd4aab1.e3c4b8"
+ "7ad5787f.1c20f8",
+ "b6f779a3.cc7ed8",
+ "f695f05e.abf31"
]
]
},
{
- "id": "bc5a2382.4973",
+ "id": "7ad5787f.1c20f8",
"type": "other",
"name": "outcome 500",
"xml": "<outcome value='500'>\n",
"comments": "",
"outputs": 1,
- "x": 835.9999389648438,
- "y": 528.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 879.9999389648438,
+ "y": 861.0000381469727,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "84f0dd88.8438",
+ "id": "b6f779a3.cc7ed8",
"type": "other",
"name": "outcome 100",
"xml": "<outcome value='100'>\n",
"comments": "",
"outputs": 1,
- "x": 838.9999389648438,
- "y": 571.0000610351562,
- "z": "af8f5cdd.6e4de",
+ "x": 876.9999389648438,
+ "y": 918.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f44a47b3.3aa128"
+ "1a65bc45.b2fcb4"
]
]
},
{
- "id": "f44a47b3.3aa128",
+ "id": "1a65bc45.b2fcb4",
"type": "execute",
"name": "execute reqExecResult",
- "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExecResult' >\n <parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n\t<parameter name='User' value='`$prop.ansible.user`'/>\n\t<parameter name='Password' value='`$prop.ansible.password`'/>\n\t<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>\n\t<parameter name='PlaybookName' value='`$prop.lcm.upgrade-software.playbookname`'/>\n\t\n\n\n\n\n",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExecResult' >\n <parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>\n\t<parameter name='User' value='`$prop.ansible.user`'/>\n\t<parameter name='Password' value='`$prop.ansible.password`'/>\n\t<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>\n\t<parameter name='PlaybookName' value='`$playbookname`'/>\n\t\n\n\n\n\n",
"comments": "",
"outputs": 1,
- "x": 1025.9999389648438,
- "y": 570.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 1064.9999389648438,
+ "y": 917.0000305175781,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "dd2fe7e6.957248",
- "6913b982.6c9bb8"
+ "5b0d24c6.9eb0ac",
+ "2b5e4322.1d495c"
]
]
},
{
- "id": "895a0a53.e12ea8",
+ "id": "bb8a76ca.fb7058",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 581.9999389648438,
- "y": 439.0000534057617,
- "z": "af8f5cdd.6e4de",
+ "x": 593.9999389648438,
+ "y": 776.0000915527344,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "f279f5b8.9d49b8",
+ "id": "734b2c42.973ee4",
"type": "other",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 583.9999389648438,
- "y": 491.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 595.9999389648438,
+ "y": 828.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "f7db5396.7b5f1"
+ "f17ff2aa.67075"
]
]
},
{
- "id": "dd2fe7e6.957248",
+ "id": "5b0d24c6.9eb0ac",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1189.9999389648438,
- "y": 542.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 1233.9999389648438,
+ "y": 875.0000381469727,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "ffd4aab1.e3c4b8",
+ "id": "f695f05e.abf31",
"type": "other",
"name": "outcome 101",
"xml": "<outcome value='101'>\n",
"comments": "",
"outputs": 1,
- "x": 832.9999389648438,
- "y": 486.00006103515625,
- "z": "af8f5cdd.6e4de",
+ "x": 876.9999389648438,
+ "y": 819.0000686645508,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "80cc4946.3f0f78"
+ "2b54a991.b17b16"
]
]
},
{
- "id": "6913b982.6c9bb8",
+ "id": "2b5e4322.1d495c",
"type": "success",
"name": "success",
"xml": "<outcome value='success'>\n",
"comments": "",
"outputs": 1,
- "x": 1191.9999389648438,
- "y": 597.0000915527344,
- "z": "af8f5cdd.6e4de",
+ "x": 1241.9998779296875,
+ "y": 923.0001220703125,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "14c8dea1.b5b7a1"
+ "db1e6d62.a1404"
]
]
},
{
- "id": "a32993f8.f8215",
+ "id": "c1a2b259.11e46",
"type": "returnSuccess",
"name": "return success",
"xml": "<return status='success'>\n<parameter name='status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='status.message' value='`$org.onap.appc.adapter.ansible.message`'/>",
"comments": "",
- "x": 1467.9998779296875,
- "y": 648.0000610351562,
- "z": "af8f5cdd.6e4de",
+ "x": 1535.9998779296875,
+ "y": 980.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "d8c3f83d.d0b9d8",
+ "id": "566f9779.c05d38",
"type": "dgstart",
"name": "DGSTART",
"outputs": 1,
- "x": 153,
- "y": 102,
- "z": "af8f5cdd.6e4de",
+ "x": 83,
+ "y": 147,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "c220826b.91906"
+ "5c791eb8.0072b"
]
]
},
{
- "id": "e635fd5d.f4087",
+ "id": "5ccc8e8d.06e5",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 139.91668701171875,
- "y": 241.08334350585938,
- "z": "af8f5cdd.6e4de",
+ "x": 80.91668701171875,
+ "y": 239.08334350585938,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "810e1e54.dec1c",
- "ee1802be.c5c18",
- "e8d3b31a.f46c6",
- "4d7f56db.9375c8"
+ "3503ece1.d7ad14",
+ "dc18f7c9.2e4ac8",
+ "814875d2.cac108",
+ "e9d89bdf.30f7a8",
+ "69e97f86.e07ef",
+ "fa9a8e1f.bba53",
+ "baba22fc.1ceb5",
+ "81510405.ca8868"
]
]
},
{
- "id": "ee1802be.c5c18",
+ "id": "dc18f7c9.2e4ac8",
"type": "execute",
"name": "execute Properties",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.prop.PropertiesNode' method='readProperties' >\n <parameter name='fileName' value='%SDNC_CONFIG_DIR%/lcm-dg.properties' />\n <parameter name='contextPrefix' value='prop' />\n",
"comments": "",
"outputs": 1,
- "x": 328.00001525878906,
- "y": 225.08334350585938,
- "z": "af8f5cdd.6e4de",
+ "x": 379.0000305175781,
+ "y": 272.0833435058594,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "3830f5d4.87f1aa",
+ "id": "70d1c79a.089af8",
"type": "execute",
"name": "execute DmaapMsg",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
"comments": "",
"outputs": 1,
- "x": 1222.9999389648438,
- "y": 371.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1545.9998779296875,
+ "y": 725.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "1566d659.a0655a"
+ "d776c76b.1dd188"
]
]
},
{
- "id": "1566d659.a0655a",
+ "id": "d776c76b.1dd188",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1392.9998779296875,
- "y": 370.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1715.9998168945312,
+ "y": 724.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "22f8bfd0.6139e"
+ "eac6c260.d11fc"
]
]
},
{
- "id": "80cc4946.3f0f78",
+ "id": "2b54a991.b17b16",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1025.9998779296875,
- "y": 395.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1348.9998168945312,
+ "y": 749.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "3830f5d4.87f1aa",
- "fedbb5e6.fb3c28",
- "898f667e.daf2e8"
+ "70d1c79a.089af8",
+ "7970fcd5.6f11b4",
+ "3d8934f9.d0339c"
]
]
},
{
- "id": "7ce48bed.5b7c74",
+ "id": "e790e11b.4f947",
"type": "execute",
"name": "execute DmaapMsg",
"xml": "<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >\n <parameter name='templateFileName' value=\"`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`\" />\n <parameter name='restapiUrl' value='`$prop.lcm.dmaap.url`' />\n <parameter name='restapiUser' value='`$prop.lcm.dmaap.user`' />\n <parameter name='restapiPassword' value='`$prop.lcm.dmaap.password`' />\n <parameter name='format' value='json' />\n <parameter name='httpMethod' value='POST' />\n <parameter name='contentType' value='application/json' />\n <parameter name=\"responsePrefix\" value=\"lcm\" />\n",
"comments": "",
"outputs": 1,
- "x": 1488.4998779296875,
- "y": 597.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1546.4998779296875,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "37e7fa80.2728b6"
+ "2e13891.034f576"
]
]
},
{
- "id": "37e7fa80.2728b6",
+ "id": "2e13891.034f576",
"type": "failure",
"name": "failure",
"xml": "<outcome value='failure'>\n",
"comments": "",
"outputs": 1,
- "x": 1648.4998779296875,
- "y": 597.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1714.4998779296875,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "47c7511a.dd8fe"
+ "30475e40.9b8be2"
]
]
},
{
- "id": "22f8bfd0.6139e",
+ "id": "eac6c260.d11fc",
"type": "record",
"name": "record",
"xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
"comments": "",
"outputs": 1,
- "x": 1524.9998779296875,
- "y": 370.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1835.9998779296875,
+ "y": 723.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "fedbb5e6.fb3c28",
+ "id": "7970fcd5.6f11b4",
"type": "returnFailure",
"name": "return failure",
"xml": "<return status='failure'>\n<parameter name='status.code' value='401' />\n<parameter name='status.message' value='`$org.onap.appc.adapter.ansible.message`' />\n",
"comments": "",
- "x": 1197.9165649414062,
- "y": 408.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1527.91650390625,
+ "y": 776.0834045410156,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "47c7511a.dd8fe",
+ "id": "30475e40.9b8be2",
"type": "record",
"name": "record",
"xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='Failed to Publish to DMaap'/>",
"comments": "",
"outputs": 1,
- "x": 1769.9166259765625,
- "y": 598.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1842.9166259765625,
+ "y": 930.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
},
{
- "id": "898f667e.daf2e8",
+ "id": "3d8934f9.d0339c",
"type": "set",
- "name": "set",
+ "name": "set DmaapReq",
"xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$upgrade-software-input.common-header.request-id + '-' + $upgrade-software-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='upgrade-software'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$upgrade-software-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$upgrade-software-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$upgrade-software-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$upgrade-software-input.common-header.request-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$upgrade-software-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$upgrade-software-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$upgrade-software-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$upgrade-software-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='lcm-dmaap.status.message' value='`$org.onap.appc.adapter.ansible.message`'/>\n",
"comments": "",
- "x": 1174.9999389648438,
- "y": 318.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1532.9998779296875,
+ "y": 672.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "14c8dea1.b5b7a1",
+ "id": "db1e6d62.a1404",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 1317.9998779296875,
- "y": 596.0833435058594,
- "z": "af8f5cdd.6e4de",
+ "x": 1369.9998779296875,
+ "y": 924.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "7ce48bed.5b7c74",
- "70a28c6a.563d24",
- "a32993f8.f8215"
+ "e790e11b.4f947",
+ "3a3f1d44.898da2",
+ "c1a2b259.11e46"
]
]
},
{
- "id": "70a28c6a.563d24",
+ "id": "3a3f1d44.898da2",
"type": "set",
- "name": "set",
+ "name": "set DmaapReq",
"xml": "<set>\n<parameter name='lcm-dmaap.version' value='`$prop.lcm.dmaap.version`'/>\n<parameter name='lcm-dmaap.correlation-id' value=\"`$upgrade-software-input.common-header.request-id + '-' + $upgrade-software-input.common-header.sub-request-id`\"/>\n<parameter name='lcm-dmaap.partition' value='`$prop.lcm.dmaap.partition`'/>\n<parameter name='lcm-dmaap.rpc-name' value='upgrade-software'/>\n<parameter name='lcm-dmaap.type' value='`$prop.lcm.dmaap.type`'/>\n<parameter name='lcm-dmaap.timestamp' value='`$upgrade-software-input.common-header.timestamp`'/>\n<parameter name='lcm-dmaap.api-ver' value='`$upgrade-software-input.common-header.api-ver`'/>\n<parameter name='lcm-dmaap.originator-id' value='`$upgrade-software-input.common-header.originator-id`'/>\n<parameter name='lcm-dmaap.request-id' value='`$upgrade-software-input.common-header.request-id`'/>\n<parameter name='lcm-dmaap.sub-request-id' value='`$upgrade-software-input.common-header.sub-request-id`'/>\n<parameter name='lcm-dmaap.flags.mode' value='`$upgrade-software-input.common-header.flags.mode`'/>\n<parameter name='lcm-dmaap.flags.force' value='`$upgrade-software-input.common-header.flags.force`'/>\n<parameter name='lcm-dmaap.flags.ttl' value='`$upgrade-software-input.common-header.flags.ttl`'/>\n<parameter name='lcm-dmaap.status.code' value='`$org.onap.appc.adapter.ansible.result.code`' />\n<parameter name='lcm-dmaap.status.message' value='`$org.onap.appc.adapter.ansible.message`'/>\n",
"comments": "",
- "x": 1448.1666259765625,
- "y": 549.0833740234375,
- "z": "af8f5cdd.6e4de",
+ "x": 1536.1666259765625,
+ "y": 875.0833740234375,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "fa759954.4e2068",
+ "id": "a457fe79.46497",
"type": "not-found",
"name": "not-found",
"xml": "<outcome value='not-found'>\n",
"comments": "",
"outputs": 1,
- "x": 577.9999389648438,
- "y": 392.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 602.9999389648438,
+ "y": 728.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "ed41675d.59c088"
+ "3d4c2c9a.7b1324"
]
]
},
{
- "id": "756c2e53.ca6d7",
+ "id": "d512629f.bc625",
"type": "set",
"name": "set Defaults",
"xml": "<set>\n<parameter name='org.onap.appc.adapter.ansible.result.code' value='401'/>\n<parameter name='org.onap.appc.adapter.ansible.message' value='Ansible Adapter was not found'/>\n",
"comments": "",
- "x": 1009.9999389648438,
- "y": 297.0000305175781,
- "z": "af8f5cdd.6e4de",
+ "x": 893.9999389648438,
+ "y": 687,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "ed41675d.59c088",
+ "id": "3d4c2c9a.7b1324",
"type": "block",
"name": "block",
"xml": "<block>\n",
"atomic": "false",
"comments": "",
"outputs": 1,
- "x": 761.9999389648438,
- "y": 384.0000228881836,
- "z": "af8f5cdd.6e4de",
+ "x": 739.9999389648438,
+ "y": 722.0000610351562,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "756c2e53.ca6d7",
- "80cc4946.3f0f78"
+ "d512629f.bc625",
+ "2b54a991.b17b16"
]
]
},
{
- "id": "e8d3b31a.f46c6",
+ "id": "814875d2.cac108",
"type": "set",
- "name": "set default status value",
- "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>",
+ "name": "set default values",
+ "xml": "<set>\n<parameter name='status.code' value='200' />\n<parameter name='status.message' value='unexpected return from DG' />\n<parameter name='quote' value=\"'\" />\n",
"comments": "",
- "x": 336,
- "y": 269,
- "z": "af8f5cdd.6e4de",
+ "x": 372,
+ "y": 319,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "4d7f56db.9375c8",
+ "id": "442dbdff.6dfcb4",
"type": "get-resource",
- "name": "get aai.generic-vnf by vnf-id",
+ "name": "get aai.generic-vnf ",
"xml": "<get-resource plugin=\"org.onap.ccsdk.sli.adaptors.aai.AAIService\" \n\tresource=\"generic-vnf\" \n\t\tkey=\"generic-vnf.vnf-id = $upgrade-software-input.action-identifiers.vnf-id\" \n\t\tlocal-only=\"false\" \n\t\tpfx='aai.generic-vnf'>",
"comments": "",
"outputs": 1,
- "x": 349.0000305175781,
- "y": 325,
- "z": "af8f5cdd.6e4de",
+ "x": 912,
+ "y": 495,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "fa69a126.2a554",
- "f9cb9963.f9e368"
+ "1e57cb28.122ad5"
]
]
},
{
- "id": "fa69a126.2a554",
- "type": "failure",
+ "id": "1e57cb28.122ad5",
+ "type": "success",
+ "name": "success",
+ "xml": "<outcome value='success'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1070.3907470703125,
+ "y": 493.28399658203125,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "5a65efc0.bf413"
+ ]
+ ]
+ },
+ {
+ "id": "baba22fc.1ceb5",
+ "type": "record",
+ "name": "record",
+ "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='`$playbookname`'/>\n\t<parameter name=\"field2\" value='`$nodelist`'/>",
+ "comments": "",
+ "outputs": 1,
+ "x": 300.9998779296875,
+ "y": 683,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "69e97f86.e07ef",
+ "type": "switchNode",
+ "name": "switch pnf-flag",
+ "xml": "<switch test='`$payloadJson.pnf-flag`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 354,
+ "y": 420,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "e43265e9.4c7f38",
+ "d78c93da.7125f"
+ ]
+ ]
+ },
+ {
+ "id": "e9d89bdf.30f7a8",
+ "type": "execute",
+ "name": "execute jsonStringToCtx",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='jsonStringToCtx'>\n\t<parameter name='source' value='upgrade-software-input.payload' />\n\t<parameter name='outputPath' value='payloadJson' />\n\t<parameter name='isEscaped' value='true' />",
+ "comments": "",
+ "outputs": 1,
+ "x": 386,
+ "y": 366,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "e43265e9.4c7f38",
+ "type": "outcome",
+ "name": "true",
+ "xml": "<outcome value='true'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 551,
+ "y": 399,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "abbc4ae4.be5328"
+ ]
+ ]
+ },
+ {
+ "id": "d78c93da.7125f",
+ "type": "outcome",
"name": "other",
"xml": "<outcome value='Other'>\n",
"comments": "",
"outputs": 1,
- "x": 589.86083984375,
- "y": 312.53564453125,
- "z": "af8f5cdd.6e4de",
+ "x": 550.9999389648438,
+ "y": 460,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "2d1a88c6.11f9d8"
+ "f68ee407.ca6d88"
]
]
},
{
- "id": "f9cb9963.f9e368",
- "type": "success",
- "name": "success",
- "xml": "<outcome value='success'>\n",
+ "id": "f68ee407.ca6d88",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
"comments": "",
"outputs": 1,
- "x": 591.3908081054688,
- "y": 260.28399658203125,
- "z": "af8f5cdd.6e4de",
+ "x": 698.9999389648438,
+ "y": 459,
+ "z": "50de34e0.ace54c",
"wires": [
[
- "c4d4de4d.3e19f"
+ "442dbdff.6dfcb4",
+ "80c560bb.eea5f"
]
]
},
{
- "id": "c4d4de4d.3e19f",
+ "id": "abbc4ae4.be5328",
+ "type": "set",
+ "name": "set AnsibleReq",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`'[' + $quote + $payloadJson.ipaddress-v4-oam + $quote + ']'`\"/>\n<parameter name='playbookname' value='`$prop.lcm.pnf.upgrade-software.playbookname`'/>\n",
+ "comments": "",
+ "x": 712,
+ "y": 397,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "80c560bb.eea5f",
+ "type": "execute",
+ "name": "set playbookname",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>\n\t<parameter name='outputPath' value='playbookname' />\n\t<parameter name='source' value=\"`'prop.lcm.' + $payloadJson.nf-naming-code + '.upgrade-software.playbookname'`\" />\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 921,
+ "y": 439,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ []
+ ]
+ },
+ {
+ "id": "fa9a8e1f.bba53",
+ "type": "switchNode",
+ "name": "switch playbookname",
+ "xml": "<switch test='`$playbookname`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 351,
+ "y": 551,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "1a5624d2.74e98b"
+ ]
+ ]
+ },
+ {
+ "id": "1a5624d2.74e98b",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 522,
+ "y": 552,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "524c17a1.30fbf8"
+ ]
+ ]
+ },
+ {
+ "id": "524c17a1.30fbf8",
+ "type": "set",
+ "name": "set playbookname",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>\n<parameter name='playbookname' value='`$prop.lcm.upgrade-software.playbookname`'/>",
+ "comments": "",
+ "x": 712,
+ "y": 551,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "81510405.ca8868",
+ "type": "switchNode",
+ "name": "switch nodelist",
+ "xml": "<switch test='`$nodelist`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 341,
+ "y": 610,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "7a126f.d2de2d9",
+ "8743a074.e8506"
+ ]
+ ]
+ },
+ {
+ "id": "7a126f.d2de2d9",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 521,
+ "y": 603,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c954af6f.c34df"
+ ]
+ ]
+ },
+ {
+ "id": "c954af6f.c34df",
"type": "set",
"name": "set nodelist",
- "xml": "<set>\n<parameter name='quote' value=\"'\" />\n<parameter name='nodelist' value=\"`'[' + $quote + $aai.ipv4-oam-address + $quote + ']'`\"/>\n",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`$prop.ansible.nodelist`\"/>",
"comments": "",
- "x": 740.3908081054688,
- "y": 259.28399658203125,
- "z": "af8f5cdd.6e4de",
+ "x": 678,
+ "y": 617,
+ "z": "50de34e0.ace54c",
"wires": []
},
{
- "id": "2d1a88c6.11f9d8",
- "type": "record",
- "name": "record",
- "xml": "<record plugin=\"org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder\"> \n\t<parameter name=\"logger\" value=\"message-log\"/> \n\t<parameter name=\"field1\" value='VNF not found in AAI. Nodelist retrieved from config'/>",
+ "id": "8743a074.e8506",
+ "type": "outcome",
+ "name": "empty",
+ "xml": "<outcome value=\"['']\">\n\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 520,
+ "y": 647,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c954af6f.c34df"
+ ]
+ ]
+ },
+ {
+ "id": "90b2891b.001708",
+ "type": "switchNode",
+ "name": "switch playbookname",
+ "xml": "<switch test='`$playbookname`'>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1396,
+ "y": 482,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "c9dd0d76.432f7"
+ ]
+ ]
+ },
+ {
+ "id": "c9dd0d76.432f7",
+ "type": "outcome",
+ "name": "null",
+ "xml": "<outcome value=''>\n",
+ "comments": "",
+ "outputs": 1,
+ "x": 1574,
+ "y": 482,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "6ea15b2b.d9cd74"
+ ]
+ ]
+ },
+ {
+ "id": "9706bdee.6acf9",
+ "type": "set",
+ "name": "set nodelist",
+ "xml": "<set>\n<parameter name='nodelist' value=\"`'[' + $quote + $aai.generic-vnf.ipv4-oam-address + $quote + ']'`\"/>\n",
+ "comments": "",
+ "x": 1369,
+ "y": 535,
+ "z": "50de34e0.ace54c",
+ "wires": []
+ },
+ {
+ "id": "5a65efc0.bf413",
+ "type": "block",
+ "name": "block",
+ "xml": "<block>\n",
+ "atomic": "false",
+ "comments": "",
+ "outputs": 1,
+ "x": 1199,
+ "y": 492,
+ "z": "50de34e0.ace54c",
+ "wires": [
+ [
+ "90b2891b.001708",
+ "9706bdee.6acf9"
+ ]
+ ]
+ },
+ {
+ "id": "6ea15b2b.d9cd74",
+ "type": "execute",
+ "name": "set playbookname",
+ "xml": "<execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>\n\t<parameter name='outputPath' value='playbookname' />\n\t<parameter name='source' value=\"`'prop.lcm.' + $aai.generic-vnf.nf-naming-code + '.upgrade-software.playbookname'`\" />\n\n",
"comments": "",
"outputs": 1,
- "x": 736,
- "y": 312,
- "z": "af8f5cdd.6e4de",
+ "x": 1746,
+ "y": 480,
+ "z": "50de34e0.ace54c",
"wires": [
[]
]
diff --git a/platform-logic/lcm/src/main/xml/LCM_distribute-traffic.xml b/platform-logic/lcm/src/main/xml/LCM_distribute-traffic.xml
index d83d149d..9b550d32 100755
--- a/platform-logic/lcm/src/main/xml/LCM_distribute-traffic.xml
+++ b/platform-logic/lcm/src/main/xml/LCM_distribute-traffic.xml
@@ -10,26 +10,75 @@
<set>
<parameter name='status.code' value='200' />
<parameter name='status.message' value='unexpected return from DG' />
- <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ <parameter name='quote' value="'" />
</set>
- <get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='jsonStringToCtx'>
+ <parameter name='source' value='distribute-traffic-input.payload' />
+ <parameter name='outputPath' value='payloadJson' />
+ <parameter name='isEscaped' value='true' />
+ </execute>
+ <switch test='`$payloadJson.pnf-flag`'>
+ <outcome value='true'>
+ <set>
+ <parameter name='nodelist' value="`'[' + $quote + $payloadJson.ipaddress-v4-oam + $quote + ']'`"/>
+ <parameter name='playbookname' value='`$prop.lcm.pnf.distribute-traffic.playbookname`'/>
+ </set>
+ </outcome>
+ <outcome value='Other'>
+ <block>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>
+ <parameter name='outputPath' value='playbookname' />
+ <parameter name='source' value="`'prop.lcm.' + $payloadJson.nf-naming-code + '.distribute-traffic.playbookname'`" />
+ </execute>
+ <get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
resource="generic-vnf"
key="generic-vnf.vnf-id = $distribute-traffic-input.action-identifiers.vnf-id"
local-only="false"
pfx='aai.generic-vnf'>
- <outcome value='success'>
+ <outcome value='success'>
+ <block>
+ <switch test='`$playbookname`'>
+ <outcome value=''>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>
+ <parameter name='outputPath' value='playbookname' />
+ <parameter name='source' value="`'prop.lcm.' + $aai.generic-vnf.nf-naming-code + '.distribute-traffic.playbookname'`" />
+ </execute>
+ </outcome>
+ </switch>
+ <set>
+ <parameter name='nodelist' value="`'[' + $quote + $aai.generic-vnf.ipv4-oam-address + $quote + ']'`"/>
+ </set>
+ </block>
+ </outcome>
+ </get-resource>
+ </block>
+ </outcome>
+ </switch>
+ <switch test='`$playbookname`'>
+ <outcome value=''>
<set>
- <parameter name='quote' value="'" />
- <parameter name='nodelist' value="`'[' + $quote + $aai.ipv4-oam-address + $quote + ']'`"/>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ <parameter name='playbookname' value='`$prop.lcm.distribute-traffic.playbookname`'/>
</set>
</outcome>
- <outcome value='Other'>
- <record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
- <parameter name="logger" value="message-log"/>
- <parameter name="field1" value='VNF not found in AAI. Nodelist retrieved from config'/>
- </record>
+ </switch>
+ <switch test='`$nodelist`'>
+ <outcome value=''>
+ <set>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ </set>
+ </outcome>
+ <outcome value="['']">
+ <set>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ </set>
</outcome>
- </get-resource>
+ </switch>
+ <record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
+ <parameter name="logger" value="message-log"/>
+ <parameter name="field1" value='`$playbookname`'/>
+ <parameter name="field2" value='`$nodelist`'/>
+ </record>
<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >
<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>
<parameter name='User' value='`$prop.ansible.user`'/>
@@ -40,7 +89,7 @@
<parameter name='Timeout' value='`$prop.ansible.timeout`'/>
<parameter name='Version' value='`$prop.ansible.version`'/>
<parameter name='Id' value='`$distribute-traffic-input.common-header.request-id`'/>
- <parameter name='PlaybookName' value='`$prop.lcm.distribute-traffic.playbookname`'/>
+ <parameter name='PlaybookName' value='`$playbookname`'/>
<outcome value='not-found'>
<block>
<set>
@@ -219,7 +268,7 @@
<parameter name='User' value='`$prop.ansible.user`'/>
<parameter name='Password' value='`$prop.ansible.password`'/>
<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>
- <parameter name='PlaybookName' value='`$prop.lcm.distribute-traffic.playbookname`'/>
+ <parameter name='PlaybookName' value='`$playbookname`'/>
<outcome value='failure'>
<block>
<set>
diff --git a/platform-logic/lcm/src/main/xml/LCM_quiesce-traffic.xml b/platform-logic/lcm/src/main/xml/LCM_quiesce-traffic.xml
index 95038993..36eec1dd 100644
--- a/platform-logic/lcm/src/main/xml/LCM_quiesce-traffic.xml
+++ b/platform-logic/lcm/src/main/xml/LCM_quiesce-traffic.xml
@@ -10,26 +10,75 @@
<set>
<parameter name='status.code' value='200' />
<parameter name='status.message' value='unexpected return from DG' />
- <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ <parameter name='quote' value="'" />
</set>
- <get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='jsonStringToCtx'>
+ <parameter name='source' value='quiesce-traffic-input.payload' />
+ <parameter name='outputPath' value='payloadJson' />
+ <parameter name='isEscaped' value='true' />
+ </execute>
+ <switch test='`$payloadJson.pnf-flag`'>
+ <outcome value='true'>
+ <set>
+ <parameter name='nodelist' value="`'[' + $quote + $payloadJson.ipaddress-v4-oam + $quote + ']'`"/>
+ <parameter name='playbookname' value='`$prop.lcm.pnf.quiesce-traffic.playbookname`'/>
+ </set>
+ </outcome>
+ <outcome value='Other'>
+ <block>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>
+ <parameter name='outputPath' value='playbookname' />
+ <parameter name='source' value="`'prop.lcm.' + $payloadJson.nf-naming-code + '.quiesce-traffic.playbookname'`" />
+ </execute>
+ <get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
resource="generic-vnf"
key="generic-vnf.vnf-id = $quiesce-traffic-input.action-identifiers.vnf-id"
local-only="false"
pfx='aai.generic-vnf'>
- <outcome value='success'>
+ <outcome value='success'>
+ <block>
+ <switch test='`$playbookname`'>
+ <outcome value=''>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>
+ <parameter name='outputPath' value='playbookname' />
+ <parameter name='source' value="`'prop.lcm.' + $aai.generic-vnf.nf-naming-code + '.quiesce-traffic.playbookname'`" />
+ </execute>
+ </outcome>
+ </switch>
+ <set>
+ <parameter name='nodelist' value="`'[' + $quote + $aai.generic-vnf.ipv4-oam-address + $quote + ']'`"/>
+ </set>
+ </block>
+ </outcome>
+ </get-resource>
+ </block>
+ </outcome>
+ </switch>
+ <switch test='`$playbookname`'>
+ <outcome value=''>
<set>
- <parameter name='quote' value="'" />
- <parameter name='nodelist' value="`'[' + $quote + $aai.ipv4-oam-address + $quote + ']'`"/>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ <parameter name='playbookname' value='`$prop.lcm.quiesce-traffic.playbookname`'/>
</set>
</outcome>
- <outcome value='Other'>
- <record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
- <parameter name="logger" value="message-log"/>
- <parameter name="field1" value='VNF not found in AAI. Nodelist retrieved from config'/>
- </record>
+ </switch>
+ <switch test='`$nodelist`'>
+ <outcome value=''>
+ <set>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ </set>
+ </outcome>
+ <outcome value="['']">
+ <set>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ </set>
</outcome>
- </get-resource>
+ </switch>
+ <record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
+ <parameter name="logger" value="message-log"/>
+ <parameter name="field1" value='`$playbookname`'/>
+ <parameter name="field2" value='`$nodelist`'/>
+ </record>
<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >
<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>
<parameter name='User' value='`$prop.ansible.user`'/>
@@ -40,7 +89,7 @@
<parameter name='Timeout' value='`$prop.ansible.timeout`'/>
<parameter name='Version' value='`$prop.ansible.version`'/>
<parameter name='Id' value='`$quiesce-traffic-input.common-header.request-id`'/>
- <parameter name='PlaybookName' value='`$prop.lcm.quiesce-traffic.playbookname`'/>
+ <parameter name='PlaybookName' value='`$playbookname`'/>
<outcome value='not-found'>
<block>
<set>
@@ -219,7 +268,7 @@
<parameter name='User' value='`$prop.ansible.user`'/>
<parameter name='Password' value='`$prop.ansible.password`'/>
<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>
- <parameter name='PlaybookName' value='`$prop.lcm.quiesce-traffic.playbookname`'/>
+ <parameter name='PlaybookName' value='`$playbookname`'/>
<outcome value='failure'>
<block>
<set>
diff --git a/platform-logic/lcm/src/main/xml/LCM_resume-traffic.xml b/platform-logic/lcm/src/main/xml/LCM_resume-traffic.xml
index 54d35bde..9d2795b6 100644
--- a/platform-logic/lcm/src/main/xml/LCM_resume-traffic.xml
+++ b/platform-logic/lcm/src/main/xml/LCM_resume-traffic.xml
@@ -10,26 +10,75 @@
<set>
<parameter name='status.code' value='200' />
<parameter name='status.message' value='unexpected return from DG' />
- <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ <parameter name='quote' value="'" />
</set>
- <get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='jsonStringToCtx'>
+ <parameter name='source' value='resume-traffic-input.payload' />
+ <parameter name='outputPath' value='payloadJson' />
+ <parameter name='isEscaped' value='true' />
+ </execute>
+ <switch test='`$payloadJson.pnf-flag`'>
+ <outcome value='true'>
+ <set>
+ <parameter name='nodelist' value="`'[' + $quote + $payloadJson.ipaddress-v4-oam + $quote + ']'`"/>
+ <parameter name='playbookname' value='`$prop.lcm.pnf.resume-traffic.playbookname`'/>
+ </set>
+ </outcome>
+ <outcome value='Other'>
+ <block>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>
+ <parameter name='outputPath' value='playbookname' />
+ <parameter name='source' value="`'prop.lcm.' + $payloadJson.nf-naming-code + '.resume-traffic.playbookname'`" />
+ </execute>
+ <get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
resource="generic-vnf"
key="generic-vnf.vnf-id = $resume-traffic-input.action-identifiers.vnf-id"
local-only="false"
pfx='aai.generic-vnf'>
- <outcome value='success'>
+ <outcome value='success'>
+ <block>
+ <switch test='`$playbookname`'>
+ <outcome value=''>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>
+ <parameter name='outputPath' value='playbookname' />
+ <parameter name='source' value="`'prop.lcm.' + $aai.generic-vnf.nf-naming-code + '.resume-traffic.playbookname'`" />
+ </execute>
+ </outcome>
+ </switch>
+ <set>
+ <parameter name='nodelist' value="`'[' + $quote + $aai.generic-vnf.ipv4-oam-address + $quote + ']'`"/>
+ </set>
+ </block>
+ </outcome>
+ </get-resource>
+ </block>
+ </outcome>
+ </switch>
+ <switch test='`$playbookname`'>
+ <outcome value=''>
<set>
- <parameter name='quote' value="'" />
- <parameter name='nodelist' value="`'[' + $quote + $aai.ipv4-oam-address + $quote + ']'`"/>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ <parameter name='playbookname' value='`$prop.lcm.resume-traffic.playbookname`'/>
</set>
</outcome>
- <outcome value='Other'>
- <record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
- <parameter name="logger" value="message-log"/>
- <parameter name="field1" value='VNF not found in AAI. Nodelist retrieved from config'/>
- </record>
+ </switch>
+ <switch test='`$nodelist`'>
+ <outcome value=''>
+ <set>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ </set>
+ </outcome>
+ <outcome value="['']">
+ <set>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ </set>
</outcome>
- </get-resource>
+ </switch>
+ <record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
+ <parameter name="logger" value="message-log"/>
+ <parameter name="field1" value='`$playbookname`'/>
+ <parameter name="field2" value='`$nodelist`'/>
+ </record>
<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >
<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>
<parameter name='User' value='`$prop.ansible.user`'/>
@@ -40,7 +89,7 @@
<parameter name='Timeout' value='`$prop.ansible.timeout`'/>
<parameter name='Version' value='`$prop.ansible.version`'/>
<parameter name='Id' value='`$resume-traffic-input.common-header.request-id`'/>
- <parameter name='PlaybookName' value='`$prop.lcm.resume-traffic.playbookname`'/>
+ <parameter name='PlaybookName' value='`$playbookname`'/>
<outcome value='not-found'>
<block>
<set>
@@ -219,7 +268,7 @@
<parameter name='User' value='`$prop.ansible.user`'/>
<parameter name='Password' value='`$prop.ansible.password`'/>
<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>
- <parameter name='PlaybookName' value='`$prop.lcm.resume-traffic.playbookname`'/>
+ <parameter name='PlaybookName' value='`$playbookname`'/>
<outcome value='failure'>
<block>
<set>
diff --git a/platform-logic/lcm/src/main/xml/LCM_snapshot.xml b/platform-logic/lcm/src/main/xml/LCM_snapshot.xml
index 4284f404..73d0885a 100644
--- a/platform-logic/lcm/src/main/xml/LCM_snapshot.xml
+++ b/platform-logic/lcm/src/main/xml/LCM_snapshot.xml
@@ -50,4 +50,4 @@
</return>
</block>
</method>
-</service-logic>
+</service-logic> \ No newline at end of file
diff --git a/platform-logic/lcm/src/main/xml/LCM_unlock.xml b/platform-logic/lcm/src/main/xml/LCM_unlock.xml
index 37c36a07..f524af4e 100644
--- a/platform-logic/lcm/src/main/xml/LCM_unlock.xml
+++ b/platform-logic/lcm/src/main/xml/LCM_unlock.xml
@@ -26,7 +26,7 @@
<parameter name='lcm-dmaap.flags.force' value='`$unlock-input.common-header.flags.force`'/>
<parameter name='lcm-dmaap.flags.ttl' value='`$unlock-input.common-header.flags.ttl`'/>
<parameter name='lcm-dmaap.status.code' value='400' />
- <parameter name='lcm-dmaap.status.message' value='SDNC UnLock Mock returns success'/>
+ <parameter name='lcm-dmaap.status.message' value='SDNC Unlock Mock returns success'/>
</set>
<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >
<parameter name='templateFileName' value="`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`" />
@@ -46,8 +46,8 @@
</execute>
<return status='success'>
<parameter name='status.code' value='400' />
- <parameter name='status.message' value='SDNC UnLock Mock returns success'/>
+ <parameter name='status.message' value='SDNC Unlock Mock returns success'/>
</return>
</block>
</method>
-</service-logic>
+</service-logic> \ No newline at end of file
diff --git a/platform-logic/lcm/src/main/xml/LCM_upgrade-backup.xml b/platform-logic/lcm/src/main/xml/LCM_upgrade-backup.xml
index 4b9ef5cd..39eb3414 100644
--- a/platform-logic/lcm/src/main/xml/LCM_upgrade-backup.xml
+++ b/platform-logic/lcm/src/main/xml/LCM_upgrade-backup.xml
@@ -26,7 +26,7 @@
<parameter name='lcm-dmaap.flags.force' value='`$upgrade-backup-input.common-header.flags.force`'/>
<parameter name='lcm-dmaap.flags.ttl' value='`$upgrade-backup-input.common-header.flags.ttl`'/>
<parameter name='lcm-dmaap.status.code' value='400' />
- <parameter name='lcm-dmaap.status.message' value='SDNC Lock Mock returns success'/>
+ <parameter name='lcm-dmaap.status.message' value='SDNC Upgrade-backup Mock returns success'/>
</set>
<execute plugin='org.onap.ccsdk.sli.plugins.restapicall.RestapiCallNode' method='sendRequest' >
<parameter name='templateFileName' value="`$prop.restapi.templateDir + '/' + $prop.restapi.lcm.dmaap.publish.templatefile`" />
@@ -46,8 +46,8 @@
</execute>
<return status='success'>
<parameter name='status.code' value='400' />
- <parameter name='status.message' value='SDNC Lock Mock returns success'/>
+ <parameter name='status.message' value='SDNC Upgrade-backup Mock returns success'/>
</return>
</block>
</method>
-</service-logic>
+</service-logic> \ No newline at end of file
diff --git a/platform-logic/lcm/src/main/xml/LCM_upgrade-post-check.xml b/platform-logic/lcm/src/main/xml/LCM_upgrade-post-check.xml
index 50301a72..3338f1c2 100644
--- a/platform-logic/lcm/src/main/xml/LCM_upgrade-post-check.xml
+++ b/platform-logic/lcm/src/main/xml/LCM_upgrade-post-check.xml
@@ -10,26 +10,75 @@
<set>
<parameter name='status.code' value='200' />
<parameter name='status.message' value='unexpected return from DG' />
- <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ <parameter name='quote' value="'" />
</set>
- <get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='jsonStringToCtx'>
+ <parameter name='source' value='upgrade-post-check-input.payload' />
+ <parameter name='outputPath' value='payloadJson' />
+ <parameter name='isEscaped' value='true' />
+ </execute>
+ <switch test='`$payloadJson.pnf-flag`'>
+ <outcome value='true'>
+ <set>
+ <parameter name='nodelist' value="`'[' + $quote + $payloadJson.ipaddress-v4-oam + $quote + ']'`"/>
+ <parameter name='playbookname' value='`$prop.lcm.pnf.upgrade-post-check.playbookname`'/>
+ </set>
+ </outcome>
+ <outcome value='Other'>
+ <block>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>
+ <parameter name='outputPath' value='playbookname' />
+ <parameter name='source' value="`'prop.lcm.' + $payloadJson.nf-naming-code + '.upgrade-post-check.playbookname'`" />
+ </execute>
+ <get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
resource="generic-vnf"
key="generic-vnf.vnf-id = $upgrade-post-check-input.action-identifiers.vnf-id"
local-only="false"
pfx='aai.generic-vnf'>
- <outcome value='success'>
+ <outcome value='success'>
+ <block>
+ <switch test='`$playbookname`'>
+ <outcome value=''>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>
+ <parameter name='outputPath' value='playbookname' />
+ <parameter name='source' value="`'prop.lcm.' + $aai.generic-vnf.nf-naming-code + '.upgrade-post-check.playbookname'`" />
+ </execute>
+ </outcome>
+ </switch>
+ <set>
+ <parameter name='nodelist' value="`'[' + $quote + $aai.generic-vnf.ipv4-oam-address + $quote + ']'`"/>
+ </set>
+ </block>
+ </outcome>
+ </get-resource>
+ </block>
+ </outcome>
+ </switch>
+ <switch test='`$playbookname`'>
+ <outcome value=''>
<set>
- <parameter name='quote' value="'" />
- <parameter name='nodelist' value="`'[' + $quote + $aai.ipv4-oam-address + $quote + ']'`"/>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ <parameter name='playbookname' value='`$prop.lcm.upgrade-post-check.playbookname`'/>
</set>
</outcome>
- <outcome value='Other'>
- <record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
- <parameter name="logger" value="message-log"/>
- <parameter name="field1" value='VNF not found in AAI. Nodelist retrieved from config'/>
- </record>
+ </switch>
+ <switch test='`$nodelist`'>
+ <outcome value=''>
+ <set>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ </set>
+ </outcome>
+ <outcome value="['']">
+ <set>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ </set>
</outcome>
- </get-resource>
+ </switch>
+ <record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
+ <parameter name="logger" value="message-log"/>
+ <parameter name="field1" value='`$playbookname`'/>
+ <parameter name="field2" value='`$nodelist`'/>
+ </record>
<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >
<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>
<parameter name='User' value='`$prop.ansible.user`'/>
@@ -40,7 +89,7 @@
<parameter name='Timeout' value='`$prop.ansible.timeout`'/>
<parameter name='Version' value='`$prop.ansible.version`'/>
<parameter name='Id' value='`$upgrade-post-check-input.common-header.request-id`'/>
- <parameter name='PlaybookName' value='`$prop.lcm.upgrade-post-check.playbookname`'/>
+ <parameter name='PlaybookName' value='`$playbookname`'/>
<outcome value='not-found'>
<block>
<set>
@@ -219,7 +268,7 @@
<parameter name='User' value='`$prop.ansible.user`'/>
<parameter name='Password' value='`$prop.ansible.password`'/>
<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>
- <parameter name='PlaybookName' value='`$prop.lcm.upgrade-post-check.playbookname`'/>
+ <parameter name='PlaybookName' value='`$playbookname`'/>
<outcome value='failure'>
<block>
<set>
diff --git a/platform-logic/lcm/src/main/xml/LCM_upgrade-pre-check.xml b/platform-logic/lcm/src/main/xml/LCM_upgrade-pre-check.xml
index c0947ca7..1bf68e52 100644
--- a/platform-logic/lcm/src/main/xml/LCM_upgrade-pre-check.xml
+++ b/platform-logic/lcm/src/main/xml/LCM_upgrade-pre-check.xml
@@ -10,26 +10,75 @@
<set>
<parameter name='status.code' value='200' />
<parameter name='status.message' value='unexpected return from DG' />
- <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ <parameter name='quote' value="'" />
</set>
- <get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='jsonStringToCtx'>
+ <parameter name='source' value='upgrade-pre-check-input.payload' />
+ <parameter name='outputPath' value='payloadJson' />
+ <parameter name='isEscaped' value='true' />
+ </execute>
+ <switch test='`$payloadJson.pnf-flag`'>
+ <outcome value='true'>
+ <set>
+ <parameter name='nodelist' value="`'[' + $quote + $payloadJson.ipaddress-v4-oam + $quote + ']'`"/>
+ <parameter name='playbookname' value='`$prop.lcm.pnf.upgrade-pre-check.playbookname`'/>
+ </set>
+ </outcome>
+ <outcome value='Other'>
+ <block>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>
+ <parameter name='outputPath' value='playbookname' />
+ <parameter name='source' value="`'prop.lcm.' + $payloadJson.nf-naming-code + '.upgrade-pre-check.playbookname'`" />
+ </execute>
+ <get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
resource="generic-vnf"
key="generic-vnf.vnf-id = $upgrade-pre-check-input.action-identifiers.vnf-id"
local-only="false"
pfx='aai.generic-vnf'>
- <outcome value='success'>
+ <outcome value='success'>
+ <block>
+ <switch test='`$playbookname`'>
+ <outcome value=''>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>
+ <parameter name='outputPath' value='playbookname' />
+ <parameter name='source' value="`'prop.lcm.' + $aai.generic-vnf.nf-naming-code + '.upgrade-pre-check.playbookname'`" />
+ </execute>
+ </outcome>
+ </switch>
+ <set>
+ <parameter name='nodelist' value="`'[' + $quote + $aai.generic-vnf.ipv4-oam-address + $quote + ']'`"/>
+ </set>
+ </block>
+ </outcome>
+ </get-resource>
+ </block>
+ </outcome>
+ </switch>
+ <switch test='`$playbookname`'>
+ <outcome value=''>
<set>
- <parameter name='quote' value="'" />
- <parameter name='nodelist' value="`'[' + $quote + $aai.ipv4-oam-address + $quote + ']'`"/>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ <parameter name='playbookname' value='`$prop.lcm.upgrade-pre-check.playbookname`'/>
</set>
</outcome>
- <outcome value='Other'>
- <record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
- <parameter name="logger" value="message-log"/>
- <parameter name="field1" value='VNF not found in AAI. Nodelist retrieved from config'/>
- </record>
+ </switch>
+ <switch test='`$nodelist`'>
+ <outcome value=''>
+ <set>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ </set>
+ </outcome>
+ <outcome value="['']">
+ <set>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ </set>
</outcome>
- </get-resource>
+ </switch>
+ <record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
+ <parameter name="logger" value="message-log"/>
+ <parameter name="field1" value='`$playbookname`'/>
+ <parameter name="field2" value='`$nodelist`'/>
+ </record>
<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >
<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>
<parameter name='User' value='`$prop.ansible.user`'/>
@@ -40,7 +89,7 @@
<parameter name='Timeout' value='`$prop.ansible.timeout`'/>
<parameter name='Version' value='`$prop.ansible.version`'/>
<parameter name='Id' value='`$upgrade-pre-check-input.common-header.request-id`'/>
- <parameter name='PlaybookName' value='`$prop.lcm.upgrade-pre-check.playbookname`'/>
+ <parameter name='PlaybookName' value='`$playbookname`'/>
<outcome value='not-found'>
<block>
<set>
@@ -219,7 +268,7 @@
<parameter name='User' value='`$prop.ansible.user`'/>
<parameter name='Password' value='`$prop.ansible.password`'/>
<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>
- <parameter name='PlaybookName' value='`$prop.lcm.upgrade-pre-check.playbookname`'/>
+ <parameter name='PlaybookName' value='`$playbookname`'/>
<outcome value='failure'>
<block>
<set>
diff --git a/platform-logic/lcm/src/main/xml/LCM_upgrade-software.xml b/platform-logic/lcm/src/main/xml/LCM_upgrade-software.xml
index 252b438d..1a72c47e 100644
--- a/platform-logic/lcm/src/main/xml/LCM_upgrade-software.xml
+++ b/platform-logic/lcm/src/main/xml/LCM_upgrade-software.xml
@@ -10,26 +10,75 @@
<set>
<parameter name='status.code' value='200' />
<parameter name='status.message' value='unexpected return from DG' />
- <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ <parameter name='quote' value="'" />
</set>
- <get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='jsonStringToCtx'>
+ <parameter name='source' value='upgrade-software-input.payload' />
+ <parameter name='outputPath' value='payloadJson' />
+ <parameter name='isEscaped' value='true' />
+ </execute>
+ <switch test='`$payloadJson.pnf-flag`'>
+ <outcome value='true'>
+ <set>
+ <parameter name='nodelist' value="`'[' + $quote + $payloadJson.ipaddress-v4-oam + $quote + ']'`"/>
+ <parameter name='playbookname' value='`$prop.lcm.pnf.upgrade-software.playbookname`'/>
+ </set>
+ </outcome>
+ <outcome value='Other'>
+ <block>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>
+ <parameter name='outputPath' value='playbookname' />
+ <parameter name='source' value="`'prop.lcm.' + $payloadJson.nf-naming-code + '.upgrade-software.playbookname'`" />
+ </execute>
+ <get-resource plugin="org.onap.ccsdk.sli.adaptors.aai.AAIService"
resource="generic-vnf"
key="generic-vnf.vnf-id = $upgrade-software-input.action-identifiers.vnf-id"
local-only="false"
pfx='aai.generic-vnf'>
- <outcome value='success'>
+ <outcome value='success'>
+ <block>
+ <switch test='`$playbookname`'>
+ <outcome value=''>
+ <execute plugin='org.onap.ccsdk.sli.core.slipluginutils.SliPluginUtils' method='getAttributeValue'>
+ <parameter name='outputPath' value='playbookname' />
+ <parameter name='source' value="`'prop.lcm.' + $aai.generic-vnf.nf-naming-code + '.upgrade-software.playbookname'`" />
+ </execute>
+ </outcome>
+ </switch>
+ <set>
+ <parameter name='nodelist' value="`'[' + $quote + $aai.generic-vnf.ipv4-oam-address + $quote + ']'`"/>
+ </set>
+ </block>
+ </outcome>
+ </get-resource>
+ </block>
+ </outcome>
+ </switch>
+ <switch test='`$playbookname`'>
+ <outcome value=''>
<set>
- <parameter name='quote' value="'" />
- <parameter name='nodelist' value="`'[' + $quote + $aai.ipv4-oam-address + $quote + ']'`"/>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ <parameter name='playbookname' value='`$prop.lcm.upgrade-software.playbookname`'/>
</set>
</outcome>
- <outcome value='Other'>
- <record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
- <parameter name="logger" value="message-log"/>
- <parameter name="field1" value='VNF not found in AAI. Nodelist retrieved from config'/>
- </record>
+ </switch>
+ <switch test='`$nodelist`'>
+ <outcome value=''>
+ <set>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ </set>
+ </outcome>
+ <outcome value="['']">
+ <set>
+ <parameter name='nodelist' value="`$prop.ansible.nodelist`"/>
+ </set>
</outcome>
- </get-resource>
+ </switch>
+ <record plugin="org.onap.ccsdk.sli.core.sli.recording.Slf4jRecorder">
+ <parameter name="logger" value="message-log"/>
+ <parameter name="field1" value='`$playbookname`'/>
+ <parameter name="field2" value='`$nodelist`'/>
+ </record>
<execute plugin='org.onap.ccsdk.sli.adaptors.ansible.AnsibleAdapter' method='reqExec' >
<parameter name='AgentUrl' value='`$prop.ansible.agenturl`'/>
<parameter name='User' value='`$prop.ansible.user`'/>
@@ -40,7 +89,7 @@
<parameter name='Timeout' value='`$prop.ansible.timeout`'/>
<parameter name='Version' value='`$prop.ansible.version`'/>
<parameter name='Id' value='`$upgrade-software-input.common-header.request-id`'/>
- <parameter name='PlaybookName' value='`$prop.lcm.upgrade-software.playbookname`'/>
+ <parameter name='PlaybookName' value='`$playbookname`'/>
<outcome value='not-found'>
<block>
<set>
@@ -219,7 +268,7 @@
<parameter name='User' value='`$prop.ansible.user`'/>
<parameter name='Password' value='`$prop.ansible.password`'/>
<parameter name='Id' value='`$org.onap.appc.adapter.ansible.Id`'/>
- <parameter name='PlaybookName' value='`$prop.lcm.upgrade-software.playbookname`'/>
+ <parameter name='PlaybookName' value='`$playbookname`'/>
<outcome value='failure'>
<block>
<set>
diff --git a/platform-logic/restapi-templates/src/main/json/naming-ms-post-gen-name.json b/platform-logic/restapi-templates/src/main/json/naming-ms-post-gen-name.json
new file mode 100644
index 00000000..1887aedb
--- /dev/null
+++ b/platform-logic/restapi-templates/src/main/json/naming-ms-post-gen-name.json
@@ -0,0 +1,13 @@
+{
+ "elements": [
+ ${repeat:tmp.gen-name_length:
+ {
+ ${repeat:tmp.gen-name[${1}].element_length:
+ ${tmp.gen-name[${1}].element[${2}].name}: ${tmp.gen-name[${1}].element[${2}].value}
+ ,
+ },
+ },
+ }
+
+ ]
+ } \ No newline at end of file