Migrate SLI to OpenDaylight Phosphorus 11/127411/6
authorDan Timoney <dtimoney@att.com>
Tue, 1 Mar 2022 16:10:58 +0000 (11:10 -0500)
committerDan Timoney <dtimoney@att.com>
Tue, 22 Mar 2022 18:04:32 +0000 (18:04 +0000)
Updated ccsdk/sli to use Phosphorus SR1 version of parent poms and
updated Java Reflection code to handle changes in Phosphorus:
- use Uint8/Uint16/Uint32/Uint64 classes in place of
  char/Short/Long/BigInteger, respectively
- add code for toMap method to handle change in representation
  of yang list from java List to java Map
- Add new YangUtils class to replace removed ODL yangtools SchemaUtils class
- Update restconf-client due to changes in yangtools

Issue-ID: CCSDK-3567
Signed-off-by: Dan Timoney <dtimoney@att.com>
Change-Id: Iea581c7f39b1038ce95cc0ca6728fe56dd023f3e

174 files changed:
adaptors/aai-service/installer/pom.xml
adaptors/aai-service/pom.xml
adaptors/aai-service/provider/pom.xml
adaptors/ansible-adaptor/ansible-adaptor-bundle/pom.xml
adaptors/ansible-adaptor/ansible-adaptor-installer/pom.xml
adaptors/ansible-adaptor/pom.xml
adaptors/artifacts/pom.xml
adaptors/base/http/installer/pom.xml
adaptors/base/http/pom.xml
adaptors/base/http/provider/pom.xml
adaptors/base/pom.xml
adaptors/chef-adaptor/chef-adaptor-bundle/pom.xml
adaptors/chef-adaptor/chef-adaptor-installer/pom.xml
adaptors/chef-adaptor/pom.xml
adaptors/features/ccsdk-aai-service/pom.xml
adaptors/features/ccsdk-ansible-adaptor/pom.xml
adaptors/features/ccsdk-base-http/pom.xml
adaptors/features/ccsdk-chef-adaptor/pom.xml
adaptors/features/ccsdk-iaas-adaptor/pom.xml
adaptors/features/ccsdk-mdsal-resource/pom.xml
adaptors/features/ccsdk-messagerouter-consumer/pom.xml
adaptors/features/ccsdk-messagerouter-publisher/pom.xml
adaptors/features/ccsdk-netbox-client/pom.xml
adaptors/features/ccsdk-netconf-adaptor/pom.xml
adaptors/features/ccsdk-resource-assignment/pom.xml
adaptors/features/ccsdk-rest-adaptor/pom.xml
adaptors/features/ccsdk-saltstack-adaptor/pom.xml
adaptors/features/ccsdk-sli-adaptors-all/pom.xml
adaptors/features/ccsdk-sql-resource/pom.xml
adaptors/features/ccsdk-ssh-adaptor/pom.xml
adaptors/features/features-sli-adaptors/pom.xml
adaptors/features/installer/pom.xml
adaptors/features/pom.xml
adaptors/iaas-adaptor/iaas-adaptor-bundle/pom.xml
adaptors/iaas-adaptor/iaas-adaptor-installer/pom.xml
adaptors/iaas-adaptor/pom.xml
adaptors/mdsal-resource/installer/pom.xml
adaptors/mdsal-resource/pom.xml
adaptors/mdsal-resource/provider/pom.xml
adaptors/message-router/pom.xml
adaptors/netbox-client/installer/pom.xml
adaptors/netbox-client/pom.xml
adaptors/netbox-client/provider/pom.xml
adaptors/netconf-adaptor/netconf-adaptor-bundle/pom.xml
adaptors/netconf-adaptor/netconf-adaptor-installer/pom.xml
adaptors/netconf-adaptor/pom.xml
adaptors/pom.xml
adaptors/resource-assignment/installer/pom.xml
adaptors/resource-assignment/pom.xml
adaptors/resource-assignment/provider/pom.xml
adaptors/rest-adaptor/pom.xml
adaptors/rest-adaptor/rest-adaptor-bundle/pom.xml
adaptors/rest-adaptor/rest-adaptor-installer/pom.xml
adaptors/saltstack-adaptor/pom.xml
adaptors/saltstack-adaptor/saltstack-adaptor-installer/pom.xml
adaptors/saltstack-adaptor/saltstack-adaptor-provider/pom.xml
adaptors/sql-resource/installer/pom.xml
adaptors/sql-resource/pom.xml
adaptors/sql-resource/provider/pom.xml
adaptors/ssh-adaptor/pom.xml
adaptors/ssh-adaptor/ssh-adaptor-bundle/pom.xml
core/artifacts/pom.xml
core/dblib/installer/pom.xml
core/dblib/pom.xml
core/dblib/provider/pom.xml
core/features/ccsdk-dblib/pom.xml
core/features/ccsdk-filters/pom.xml
core/features/ccsdk-sli-core-all/pom.xml
core/features/ccsdk-sli/pom.xml
core/features/ccsdk-sliPluginUtils/pom.xml
core/features/ccsdk-sliapi/pom.xml
core/features/ccsdk-slicore-utils/pom.xml
core/features/features-sli-core/pom.xml
core/features/installer/pom.xml
core/features/pom.xml
core/filters/installer/pom.xml
core/filters/pom.xml
core/filters/provider/pom.xml
core/pom.xml
core/sli/common/pom.xml
core/sli/installer/pom.xml
core/sli/model/pom.xml
core/sli/model/src/main/yang/test-model@2019-07-23.yang
core/sli/pom.xml
core/sli/provider-base/pom.xml
core/sli/provider/pom.xml
core/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/MdsalHelper.java
core/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/YangUtils.java [new file with mode: 0644]
core/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/MdsalHelperTest.java
core/sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/PrintYangToPropTest.java
core/sliPluginUtils/installer/pom.xml
core/sliPluginUtils/pom.xml
core/sliPluginUtils/provider/pom.xml
core/sliapi/installer/pom.xml
core/sliapi/model/pom.xml
core/sliapi/model/swagger/pom.xml
core/sliapi/model/yang/pom.xml
core/sliapi/pom.xml
core/sliapi/provider/pom.xml
core/sliapi/provider/src/main/java/org/onap/ccsdk/sli/core/sliapi/SliapiProvider.java
core/sliapi/provider/src/test/java/org/onap/ccsdk/sli/core/sliapi/TestSliapiProvider.java
core/utils/installer/pom.xml
core/utils/pom.xml
core/utils/provider/pom.xml
northbound/artifacts/pom.xml
northbound/asdcApi/installer/pom.xml
northbound/asdcApi/model/pom.xml
northbound/asdcApi/pom.xml
northbound/asdcApi/provider/pom.xml
northbound/daexim-offsite-backup/installer/pom.xml
northbound/daexim-offsite-backup/model/pom.xml
northbound/daexim-offsite-backup/pom.xml
northbound/daexim-offsite-backup/provider/pom.xml
northbound/dataChange/installer/pom.xml
northbound/dataChange/model/pom.xml
northbound/dataChange/pom.xml
northbound/dataChange/provider/pom.xml
northbound/dmaap-listener/pom.xml
northbound/features/ccsdk-asdcApi/pom.xml
northbound/features/ccsdk-daexim-offsite-backup/pom.xml
northbound/features/ccsdk-dataChange/pom.xml
northbound/features/ccsdk-lcm/pom.xml
northbound/features/ccsdk-sli-northbound-all/pom.xml
northbound/features/features-sli-northbound/pom.xml
northbound/features/installer/pom.xml
northbound/features/pom.xml
northbound/lcm/installer/pom.xml
northbound/lcm/model/pom.xml
northbound/lcm/pom.xml
northbound/lcm/provider/pom.xml
northbound/lcm/provider/src/main/java/org/onap/ccsdk/sli/northbound/LcmProvider.java
northbound/pom.xml
northbound/ueb-listener/pom.xml
plugins/artifacts/pom.xml
plugins/features/ccsdk-gr-toolkit/pom.xml
plugins/features/ccsdk-properties-node/pom.xml
plugins/features/ccsdk-restapi-call-node/pom.xml
plugins/features/ccsdk-restconf-client/pom.xml
plugins/features/ccsdk-sli-plugins-all/pom.xml
plugins/features/ccsdk-sshapi-call-node/pom.xml
plugins/features/ccsdk-template-node/pom.xml
plugins/features/features-sli-plugins/pom.xml
plugins/features/installer/pom.xml
plugins/features/pom.xml
plugins/grToolkit/installer/pom.xml
plugins/grToolkit/model/pom.xml
plugins/grToolkit/pom.xml
plugins/grToolkit/provider/pom.xml
plugins/pom.xml
plugins/properties-node/installer/pom.xml
plugins/properties-node/pom.xml
plugins/properties-node/provider/pom.xml
plugins/restapi-call-node/installer/pom.xml
plugins/restapi-call-node/pom.xml
plugins/restapi-call-node/provider/pom.xml
plugins/restconf-client/installer/pom.xml
plugins/restconf-client/pom.xml
plugins/restconf-client/provider/pom.xml
plugins/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/restconfapicall/RestconfApiCallNode.java
plugins/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/DfSerializerUtil.java
plugins/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/MdsalSerializerHelper.java
plugins/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/dfserializer/PropertiesNodeXmlListener.java
plugins/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/pnserializer/InnerNode.java
plugins/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/pnserializer/MdsalPropertiesNodeSerializer.java
plugins/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/pnserializer/MdsalPropertiesNodeUtils.java
plugins/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/pnserializer/Namespace.java
plugins/restconf-client/provider/src/main/java/org/onap/ccsdk/sli/plugins/yangserializers/pnserializer/RootNode.java
plugins/sshapi-call-node/installer/pom.xml
plugins/sshapi-call-node/pom.xml
plugins/sshapi-call-node/provider/pom.xml
plugins/template-node/installer/pom.xml
plugins/template-node/pom.xml
plugins/template-node/provider/pom.xml
pom.xml

index 3305d5f..15fa49b 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index d2e84ee..a42b6cd 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index b92a8fb..1ae1605 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 991ab20..cd94a79 100644 (file)
@@ -24,7 +24,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 3608394..3c5b766 100644 (file)
@@ -28,7 +28,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 70bfbb2..26d0fb2 100644 (file)
@@ -28,7 +28,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 93b4081..0d0c5fc 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 3928d6e..d306ab7 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 08a13d7..73b2aef 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 4b28ccf..ce68cf8 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 06ecd64..b854acf 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 718bd61..abda05f 100644 (file)
@@ -27,7 +27,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 24ebc01..c77f205 100644 (file)
@@ -27,7 +27,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 8f0475b..9a70e6b 100644 (file)
@@ -27,7 +27,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 03b20d9..272895a 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index f39f62b..25e35d0 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 5940f57..fb67e48 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index cff36c5..77a4c26 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 1ecd32c..ab8b8da 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 4f1734d..46666ab 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 1af4142..f229ce4 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.adaptors.messagerouter</groupId>
index 125f260..626503d 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.adaptors.messagerouter</groupId>
index d68cc5f..1755893 100644 (file)
@@ -20,7 +20,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 5d28e05..2e43713 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index dd03baa..a8904e8 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 37ae276..c60142d 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index a02df56..984a9e8 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index b000b22..0cdee64 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index c4ce962..b7f2e5b 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 5997eca..78d5973 100644 (file)
@@ -28,7 +28,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index c2f2f20..4f7db80 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 4270641..64168b3 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index a57f522..4158ee4 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index f64e287..99d91a5 100644 (file)
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 24954cb..8c1c880 100644 (file)
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index b52a0dd..bc6a2d5 100644 (file)
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index e41ffb5..c587a21 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index ee79839..ce858a2 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 90af455..da8ef21 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index d2d8628..7748218 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 4c40b49..5bd4d48 100755 (executable)
@@ -20,7 +20,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 12122b5..d8035ed 100644 (file)
@@ -20,7 +20,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index e5c86b3..9890444 100644 (file)
@@ -20,7 +20,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index fec84f5..956e022 100644 (file)
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 83ba40f..3f846a8 100644 (file)
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index c3cb3d1..e081f30 100644 (file)
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index d2d886e..0fb9f17 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.adaptors</groupId>
index f58b508..ce4b131 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index df11995..1f0228a 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index fbb6f59..2dd29e3 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 827bc32..ecb8f66 100644 (file)
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 9d9ee09..58ffe7a 100644 (file)
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 5f55a3b..d9e1347 100644 (file)
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index dea7869..14a7fda 100644 (file)
@@ -28,7 +28,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 9326131..890acbe 100644 (file)
@@ -28,7 +28,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 642f69c..78db555 100644 (file)
@@ -17,7 +17,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 144ce05..18a5bae 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 723cf6c..17e8ded 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index f169e3a..1b9d077 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index b167c32..9d9cf00 100644 (file)
@@ -28,7 +28,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index e7ef697..ef166a0 100644 (file)
@@ -28,7 +28,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index a756c0c..af4bfe7 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 1bea19f..4e62831 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 1197c63..1ec4256 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 00e0cc7..a67d49d 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index c7a872a..519288d 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 51492a0..e715805 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 4747835..d4d946a 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index c2bc88c..7fdf43e 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 46a6564..1482964 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 4184797..eb7e3e9 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index a760460..4f07a62 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index b563e84..f51b99f 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index cb06f36..2fccfa0 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index f695028..0943cda 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index fb9a27b..c6359f6 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 76898e9..a58a1de 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 9163d54..0e899ad 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 67a3dc9..4714363 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 2a4874e..1a6b5a7 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index dd4c043..8d0e593 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 350b63a..1e39e6b 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index fc8e8b0..87419f8 100755 (executable)
@@ -18,43 +18,43 @@ module test-model {
 
     revision "2019-07-23" {
         description
-                "First release of the test model";
+            "First release of the test model";
     }
 
     identity sample-identity {
-             description
-                "Base identity";
+        description
+            "Base identity";
     }
 
-     typedef percentage {
-         type uint8 {
-             range "0 .. 100";
-         }
-         description "represents a percentage";
-     }
+    typedef percentage {
+        type uint8 {
+            range "0 .. 100";
+        }
+        description "represents a percentage";
+    }
 
     grouping builtin {
         leaf sample-binary {
             type binary;
         }
         leaf sample-bits {
-            type bits{
-             bit fan-running {
-                 position 0;
-             }
-             bit hd-led {
-                 position 1;
-             }
-             bit power-led {
-                 position 2;
-             }
+            type bits {
+                bit fan-running {
+                    position 0;
+                }
+                bit hd-led {
+                    position 1;
+                }
+                bit power-led {
+                    position 2;
+                }
             }
         }
         leaf sample-boolean {
             type boolean;
         }
         leaf sample-decimal64 {
-            type decimal64{
+            type decimal64 {
                 fraction-digits 1;
             }
         }
@@ -62,7 +62,7 @@ module test-model {
             type empty;
         }
         leaf sample-enumeration {
-            type enumeration{
+            type enumeration {
                 enum "shelf.slot.port";
                 enum "not available";
                 enum "CURRENTLY_AVAILABLE";
@@ -71,9 +71,9 @@ module test-model {
             }
         }
         leaf sample-identityref {
-             type identityref {
-                 base "sample-identity";
-             }
+            type identityref {
+                base "sample-identity";
+            }
         }
         leaf sample-int8 {
             type int8;
@@ -88,9 +88,9 @@ module test-model {
             type int64;
         }
         leaf sample-leafref {
-             type leafref {
-                 path "../sample-boolean";
-             }
+            type leafref {
+                path "../sample-boolean";
+            }
         }
         leaf sample-string {
             type string;
@@ -108,103 +108,121 @@ module test-model {
             type uint64;
         }
         leaf sample-union {
-            type union {
-                type int32;
-                type enumeration {
-                    enum "unbounded";
-                }
-            }
-        }
-     leaf percent-completed {
-         type percentage;
-     }
+            type union {
+                type int32;
+                type enumeration {
+                    enum "unbounded";
+                }
+            }
+        }
+        leaf percent-completed {
+            type percentage;
+        }
     }
 
     grouping inet-types-grouping {
         leaf ip-version {
-               type inet:ip-version;
+            type inet:ip-version;
         }
         leaf dscp {
-               type inet:dscp;
+            type inet:dscp;
         }
         leaf port-number {
-               type inet:port-number;
+            type inet:port-number;
         }
         leaf ipv6-flow-label {
-               type inet:ipv6-flow-label;
+            type inet:ipv6-flow-label;
         }
         leaf as-number {
-               type inet:as-number;
+            type inet:as-number;
         }
         leaf ip-address {
-               type inet:ip-address;
+            type inet:ip-address;
         }
         leaf ipv4-address {
-               type inet:ipv4-address;
+            type inet:ipv4-address;
         }
         leaf ipv6-address {
-               type inet:ipv6-address;
+            type inet:ipv6-address;
         }
         leaf ip-address-no-zone {
-               type inet:ip-address-no-zone;
+            type inet:ip-address-no-zone;
         }
         leaf ipv4-address-no-zone {
-               type inet:ipv4-address-no-zone;
+            type inet:ipv4-address-no-zone;
         }
         leaf ipv6-address-no-zone {
-               type inet:ipv6-address-no-zone;
+            type inet:ipv6-address-no-zone;
         }
         leaf ip-prefix {
-               type inet:ip-prefix;
+            type inet:ip-prefix;
         }
         leaf ipv4-prefix {
-               type inet:ipv4-prefix;
+            type inet:ipv4-prefix;
         }
         leaf ipv6-prefix {
-               type inet:ipv6-prefix;
+            type inet:ipv6-prefix;
         }
         leaf domain-name {
-               type inet:domain-name;
+            type inet:domain-name;
         }
         leaf host {
-               type inet:host;
+            type inet:host;
         }
         leaf uri {
-               type inet:uri;
+            type inet:uri;
         }
-     anyxml data;
+        anyxml data;
     }
 
     container sample-container {
-             leaf customer-name {
-                 type string;
-             }
-
-             leaf-list customer-nicknames {
-                 type string;
-             }
-
-             container login {
-                 leaf message {
-                     type string;
-                     description
-                         "Message given at start of login session";
-                 }
-
-                 list customer-addresses {
-                     key "address-name";
-                     leaf address-name {
-                         type string;
-                     }
-                     leaf street-address {
-                         type string;
-                     }
-                     leaf state {
-                         type string;
-                     }
-                 }
-             }
-        uses builtin;
-        uses inet-types-grouping;
-         }
+        leaf customer-name {
+            type string;
+        }
+
+        leaf-list customer-nicknames {
+            type string;
+        }
+
+        container login {
+            leaf message {
+                type string;
+                description
+                    "Message given at start of login session";
+            }
+
+            list customer-addresses {
+                key "address-name";
+                leaf address-name {
+                    type string;
+                }
+                leaf street-address {
+                    type string;
+                }
+                leaf state {
+                    type string;
+                }
+            }
+        }
+        list ip-address-list {
+            key "ip-addr";
+            leaf ip-addr {
+                type inet:ip-address;
+            }
+        }
+        leaf-list ip-address-leaf-list {
+            type inet:ip-address;
+        }
+        list ip-address-names {
+            key "ip-addr";
+            leaf ip-addr {
+                type inet:ip-address;
+            }
+            leaf fqdn {
+                type string;
+            }
+        }
+        uses builtin;
+        uses inet-types-grouping;
+    }
 }
index ca79c3a..e0f9caa 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 5d41428..ccd0c71 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index e4dd456..6b67441 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index d13122f..37a6a5b 100755 (executable)
@@ -32,20 +32,9 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Dscp;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefixBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
+import java.util.*;
+
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.*;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.RouteDistinguisher;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev200120.RouteDistinguisherBuilder;
 import org.opendaylight.yangtools.yang.binding.Identifier;
@@ -176,8 +165,16 @@ public class MdsalHelper {
                 toProperties(props, pfx + "[" + i + "]", fromList.get(i), fromClass, useLegacyEnumerationMapping);
             }
             setProperty(props, pfx + "_length", Integer.toString(fromList.size()));
-        } else if (fromClass.isEnum())
-        {
+        } else if (fromObj instanceof Map) {
+            Map fromMap = (Map) fromObj;
+            Iterator<Object> mapIter = fromMap.values().iterator();
+            int idx = 0;
+            while (mapIter.hasNext()) {
+                toProperties(props, pfx + "[" + idx + "]", mapIter.next(), fromClass, useLegacyEnumerationMapping);
+                idx++;
+            }
+            setProperty(props, pfx + "_length", Integer.toString(idx));
+        } else if (fromClass.isEnum()) {
             try {
                 if (useLegacyEnumerationMapping) {
                     Method m = fromClass.getMethod(getStringValueMethod(simpleTypeName), null);
@@ -581,6 +578,86 @@ public class MdsalHelper {
 
     }
 
+    public static Map toMap(Properties props, String pfx, Map toObj, Class elemType) {
+
+        int maxIdx = -1;
+        boolean foundValue = false;
+
+        if (props.containsKey(pfx + "_length")) {
+            try {
+                int listLength = Integer.parseInt(props.getProperty(pfx + "_length"));
+
+                if (listLength > 0) {
+                    maxIdx = listLength - 1;
+                }
+            } catch (NumberFormatException e) {
+                LOG.info("Invalid input for length ", e);
+            }
+        }
+
+        String arrayKey = pfx + "[";
+        int arrayKeyLength = arrayKey.length();
+        if (maxIdx == -1) {
+            // Figure out array size
+            for (Object pNameObj : props.keySet()) {
+                String key = (String) pNameObj;
+
+                if (key.startsWith(arrayKey)) {
+                    String idxStr = key.substring(arrayKeyLength);
+                    int endloc = idxStr.indexOf("]");
+                    if (endloc != -1) {
+                        idxStr = idxStr.substring(0, endloc);
+                    }
+                    try {
+                        int curIdx = Integer.parseInt(idxStr);
+                        if (curIdx > maxIdx) {
+                            maxIdx = curIdx;
+                        }
+                    } catch (Exception e) {
+                        LOG.error("Illegal subscript in property {}", key, e);
+                    }
+
+                }
+            }
+        }
+
+        for (int i = 0; i <= maxIdx; i++) {
+
+            String curBase = pfx + "[" + i + "]";
+
+            // Maps are used to represent yang lists.
+            // Each entry in the Map is an yang-generated object,
+            // to be constructed by a builder.
+            String builderName = elemType.getName() + "Builder";
+            try {
+                Class elemClass = Class.forName(elemType.getName());
+                Class builderClass = Class.forName(builderName);
+                Object builderObj = builderClass.newInstance();
+                Method buildMethod = builderClass.getMethod("build");
+                builderObj = toBuilder(props, curBase, builderObj, true);
+                if (builderObj != null) {
+                    Object builtObj = buildMethod.invoke(builderObj);
+                    Method keyMethod = builtObj.getClass().getMethod("key");
+                    keyMethod.setAccessible(true);
+                    Object builtObjKey = keyMethod.invoke(builtObj);
+                    toObj.put(builtObjKey, builtObj);
+                    foundValue = true;
+                }
+
+            } catch (ClassNotFoundException e) {
+                LOG.warn("Could not find builder class {}", builderName, e);
+            } catch (Exception e) {
+                LOG.error("Caught exception trying to populate list from {}", pfx, e);
+            }
+        }
+
+        if (foundValue) {
+            return (toObj);
+        } else {
+            return (null);
+        }
+    }
+
     public static Object toBuilder(Properties props, String pfx, Object toObj) {
         return (toBuilder(props, pfx, toObj, false));
     }
@@ -679,6 +756,7 @@ public class MdsalHelper {
 
                             String simpleName = paramClass.getSimpleName();
 
+
                             if (IPV4_ADDRESS.equals(simpleName) || IPV6_ADDRESS.equals(simpleName)
                                     || IP_ADDRESS.equals(simpleName)) {
 
@@ -762,9 +840,21 @@ public class MdsalHelper {
                                         LOG.error("Caught exception calling " + toClass.getName() + "." + m.getName()
                                                 + "(" + paramValue + ")", e);
                                     }
+
+                                }
+                            } else if ("Host".equals(simpleName)) {
+                                if ((paramValue != null) && (paramValue.length() > 0)) {
+                                    try {
+                                        Host host = HostBuilder.getDefaultInstance(paramValue);
+                                        m.invoke(toObj, host);
+                                        foundValue = true;
+                                    } catch (Exception e) {
+                                        LOG.error("Caught exception calling " + toClass.getName() + "." + m.getName()
+                                                + "(" + paramValue + ")", e);
+                                    }
+
                                 }
-                            }
-                            else {
+                            } else {
                                 // setter expects a yang-generated class. Need
                                 // to
                                 // create a builder to set it.
@@ -827,6 +917,56 @@ public class MdsalHelper {
                                                     }
                                                 }
 
+                                            }
+                                            if (constObj == null) {
+                                                // Is there a Uint64 constructor?
+                                                for (Constructor c : constructors) {
+                                                    Class[] cParms = c.getParameterTypes();
+                                                    if ((cParms != null) && (cParms.length == 1)) {
+                                                        if (Uint64.class.isAssignableFrom(cParms[0])) {
+                                                            constObj = c.newInstance(Uint64.valueOf(paramValue));
+                                                        }
+                                                    }
+                                                }
+
+                                            }
+
+                                            if (constObj == null) {
+                                                // Is there a Uint32 constructor?
+                                                for (Constructor c : constructors) {
+                                                    Class[] cParms = c.getParameterTypes();
+                                                    if ((cParms != null) && (cParms.length == 1)) {
+                                                        if (Uint32.class.isAssignableFrom(cParms[0])) {
+                                                            constObj = c.newInstance(Uint32.valueOf(paramValue));
+                                                        }
+                                                    }
+                                                }
+
+                                            }
+                                            if (constObj == null) {
+                                                // Is there a Uint16 constructor?
+                                                for (Constructor c : constructors) {
+                                                    Class[] cParms = c.getParameterTypes();
+                                                    if ((cParms != null) && (cParms.length == 1)) {
+                                                        if (Uint16.class.isAssignableFrom(cParms[0])) {
+                                                            constObj = c.newInstance(Uint16.valueOf(paramValue));
+                                                        }
+                                                    }
+                                                }
+
+                                            }
+
+                                            if (constObj == null) {
+                                                // Is there a Uint8 constructor?
+                                                for (Constructor c : constructors) {
+                                                    Class[] cParms = c.getParameterTypes();
+                                                    if ((cParms != null) && (cParms.length == 1)) {
+                                                        if (Uint8.class.isAssignableFrom(cParms[0])) {
+                                                            constObj = c.newInstance(Uint8.valueOf(paramValue));
+                                                        }
+                                                    }
+                                                }
+
                                             }
 
                                             if (constObj == null) {
@@ -919,9 +1059,36 @@ public class MdsalHelper {
                     } else {
 
                         // Setter's argument is not a yang-generated class. See
-                        // if it is a List.
+                        // if it is a Map or a List
+                        if (Map.class.isAssignableFrom(paramClass)) {
+                            Type paramType = m.getGenericParameterTypes()[0];
+                            Type elementType = ((ParameterizedType) paramType).getActualTypeArguments()[1];
+                            Object paramObj = new LinkedHashMap();
+                            try {
+                                paramObj = toMap(props, propName, (Map) paramObj, (Class)elementType);
+                            } catch (Exception e) {
+                                LOG.error("Caught exception trying to create map expected as argument to {}.{}",
+                                        toClass.getName(), m.getName(), e);
+                            }
+                            if (paramObj != null) {
+                                try {
+                                    boolean isAccessible = m.isAccessible();
+                                    if (!isAccessible) {
+                                        m.setAccessible(true);
+                                    }
+                                    m.invoke(toObj, paramObj);
+                                    if (!isAccessible) {
+                                        m.setAccessible(isAccessible);
+                                    }
+                                    foundValue = true;
 
-                        if (List.class.isAssignableFrom(paramClass)) {
+                                } catch (Exception e) {
+                                    LOG.error("Caught exception trying to convert List returned by" + toClass.getName()
+                                            + "." + m.getName() + "() to Properties entry", e);
+                                }
+                            }
+                        }
+                        else if (List.class.isAssignableFrom(paramClass)) {
                             // Figure out what type of args are in List and pass
                             // that to toList().
 
@@ -960,59 +1127,124 @@ public class MdsalHelper {
 
                                 Object constObj = null;
 
-                                try {
-                                    // See if I can find a constructor I can use
-                                    Constructor[] constructors = paramClass.getConstructors();
-                                    // Is there a String constructor?
-                                    for (Constructor c : constructors) {
-                                        Class[] cParms = c.getParameterTypes();
-                                        if ((cParms != null) && (cParms.length == 1)) {
-                                            if (String.class.isAssignableFrom(cParms[0])) {
-                                                constObj = c.newInstance(paramValue);
-                                            }
-                                        }
-                                    }
+                                // Handle Uint classes as special case
+                                if (Uint64.class.isAssignableFrom(paramClass)) {
+                                    constObj = Uint64.valueOf(paramValue);
+                                } else if (Uint32.class.isAssignableFrom(paramClass)) {
+                                    constObj = Uint32.valueOf(paramValue);
+                                } else if (Uint16.class.isAssignableFrom(paramClass)) {
+                                    constObj = Uint16.valueOf(paramValue);
+                                } else if (Uint8.class.isAssignableFrom(paramClass)) {
+                                    constObj = Uint8.valueOf(paramValue);
+                                }
 
-                                    if (constObj == null) {
-                                        // Is there a Long constructor?
+                                if (constObj != null) {
+                                    try {
+                                        m.invoke(toObj, constObj);
+                                        foundValue = true;
+                                    } catch (Exception e2) {
+                                        LOG.error("Caught exception trying to call " + m.getName(), e2);
+                                    }
+                                } else {
+                                    try {
+                                        // See if I can find a constructor I can use
+                                        Constructor[] constructors = paramClass.getConstructors();
+                                        // Is there a String constructor?
                                         for (Constructor c : constructors) {
                                             Class[] cParms = c.getParameterTypes();
                                             if ((cParms != null) && (cParms.length == 1)) {
-                                                if (Long.class.isAssignableFrom(cParms[0])) {
-                                                    constObj = c.newInstance(Long.parseLong(paramValue));
+                                                if (String.class.isAssignableFrom(cParms[0])) {
+                                                    constObj = c.newInstance(paramValue);
                                                 }
                                             }
                                         }
 
-                                    }
+                                        if (constObj == null) {
+                                            // Is there a Long constructor?
+                                            for (Constructor c : constructors) {
+                                                Class[] cParms = c.getParameterTypes();
+                                                if ((cParms != null) && (cParms.length == 1)) {
+                                                    if (Long.class.isAssignableFrom(cParms[0])) {
+                                                        constObj = c.newInstance(Long.parseLong(paramValue));
+                                                    }
+                                                }
+                                            }
+                                        }
 
-                                    if (constObj != null) {
-                                        try {
-                                            m.invoke(toObj, constObj);
-                                            foundValue = true;
-                                        } catch (Exception e2) {
-                                            LOG.error("Caught exception trying to call " + m.getName(), e2);
+                                        if (constObj == null) {
+                                            // Is there a Uint64 constructor?
+                                            for (Constructor c : constructors) {
+                                                Class[] cParms = c.getParameterTypes();
+                                                if ((cParms != null) && (cParms.length == 1)) {
+                                                    if (Uint64.class.isAssignableFrom(cParms[0])) {
+                                                        constObj = c.newInstance(Uint64.valueOf(paramValue));
+                                                    }
+                                                }
+                                            }
                                         }
-                                    } else {
-                                        try {
-                                            boolean isAccessible = m.isAccessible();
-                                            if (!isAccessible) {
-                                                m.setAccessible(true);
+                                        if (constObj == null) {
+                                            // Is there a Uint32 constructor?
+                                            for (Constructor c : constructors) {
+                                                Class[] cParms = c.getParameterTypes();
+                                                if ((cParms != null) && (cParms.length == 1)) {
+                                                    if (Uint32.class.isAssignableFrom(cParms[0])) {
+                                                        constObj = c.newInstance(Uint32.valueOf(paramValue));
+                                                    }
+                                                }
                                             }
-                                            m.invoke(toObj, paramValue);
-                                            if (!isAccessible) {
-                                                m.setAccessible(isAccessible);
+                                        }
+                                        if (constObj == null) {
+                                            // Is there a Uint16 constructor?
+                                            for (Constructor c : constructors) {
+                                                Class[] cParms = c.getParameterTypes();
+                                                if ((cParms != null) && (cParms.length == 1)) {
+                                                    if (Uint16.class.isAssignableFrom(cParms[0])) {
+                                                        constObj = c.newInstance(Uint16.valueOf(paramValue));
+                                                    }
+                                                }
                                             }
-                                            foundValue = true;
+                                        }
+                                        if (constObj == null) {
+                                            // Is there a Uint8 constructor?
+                                            for (Constructor c : constructors) {
+                                                Class[] cParms = c.getParameterTypes();
+                                                if ((cParms != null) && (cParms.length == 1)) {
+                                                    if (Uint8.class.isAssignableFrom(cParms[0])) {
+                                                        constObj = c.newInstance(Uint8.valueOf(paramValue));
+                                                    }
+                                                }
+                                            }
+                                        }
+
+
+                                        if (constObj != null) {
+                                            try {
+                                                m.invoke(toObj, constObj);
+                                                foundValue = true;
+                                            } catch (Exception e2) {
+                                                LOG.error("Caught exception trying to call " + m.getName(), e2);
+                                            }
+                                        } else {
+                                            try {
+                                                boolean isAccessible = m.isAccessible();
+                                                if (!isAccessible) {
+                                                    m.setAccessible(true);
+                                                }
+                                                m.invoke(toObj, paramValue);
+                                                if (!isAccessible) {
+                                                    m.setAccessible(isAccessible);
+                                                }
+                                                foundValue = true;
 
-                                        } catch (Exception e) {
-                                            LOG.error("Caught exception trying to convert value returned by"
-                                                    + toClass.getName() + "." + m.getName() + "() to Properties entry",
-                                                    e);
+                                            } catch (Exception e) {
+                                                LOG.error("Caught exception trying to convert value returned by"
+                                                                + toClass.getName() + "." + m.getName() + "() to Properties entry",
+                                                        e);
+                                            }
                                         }
+                                    } catch (Exception e1) {
+                                        LOG.warn("Could not find a suitable constructor for " + paramClass.getName(), e1);
                                     }
-                                } catch (Exception e1) {
-                                    LOG.warn("Could not find a suitable constructor for " + paramClass.getName(), e1);
                                 }
 
                             }
diff --git a/core/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/YangUtils.java b/core/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/YangUtils.java
new file mode 100644 (file)
index 0000000..573444b
--- /dev/null
@@ -0,0 +1,410 @@
+package org.onap.ccsdk.sli.core.sli.provider;
+
+import static com.google.common.base.Preconditions.checkState;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.Revision;
+import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
+import org.opendaylight.yangtools.yang.model.api.ActionNodeContainer;
+import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.AugmentationTarget;
+import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
+import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.NotificationNodeContainer;
+import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.SchemaNode;
+
+public final class YangUtils {
+
+    private YangUtils() {
+    }
+    /**
+     * Find the first schema with specified QName.
+     *
+     * @param qname schema node to find
+     * @param dataSchemaNode Iterable of schemaNodes to look through
+     * @return schema node with newest revision or absent if no schema node with matching qname is found
+     */
+    public static Optional<DataSchemaNode> findFirstSchema(final QName qname,
+                                                           final Iterable<? extends DataSchemaNode> dataSchemaNode) {
+        DataSchemaNode schema = null;
+        if (dataSchemaNode != null && qname != null) {
+            for (final DataSchemaNode dsn : dataSchemaNode) {
+                if (qname.isEqualWithoutRevision(dsn.getQName())) {
+                    if (schema == null || Revision.compare(schema.getQName().getRevision(),
+                            dsn.getQName().getRevision()) < 0) {
+                        schema = dsn;
+                    }
+                } else if (dsn instanceof ChoiceSchemaNode) {
+                    for (final CaseSchemaNode choiceCase : ((ChoiceSchemaNode) dsn).getCases()) {
+                        final Optional<DataSchemaNode> dataChildByName = choiceCase.findDataChildByName(qname);
+                        if (dataChildByName.isPresent()) {
+                            return dataChildByName;
+                        }
+                        final Optional<DataSchemaNode> foundDsn = findFirstSchema(qname, choiceCase.getChildNodes());
+                        if (foundDsn.isPresent()) {
+                            return foundDsn;
+                        }
+                    }
+                }
+            }
+        }
+        return Optional.ofNullable(schema);
+    }
+    /**
+     * Find child schema node identified by its QName within a provided schema node.
+     *
+     * @param schema schema for parent node - search root
+     * @param qname qname(with or without a revision) of a child node to be found in the parent schema
+     * @return found schema node
+     * @throws java.lang.IllegalStateException if the child was not found in parent schema node
+     */
+    public static DataSchemaNode findSchemaForChild(final DataNodeContainer schema, final QName qname) {
+        // Try to find child schema node directly, but use a fallback that compares QNames without revisions
+        // and auto-expands choices
+        final Optional<DataSchemaNode> dataChildByName = schema.findDataChildByName(qname);
+        return dataChildByName.isPresent() ? dataChildByName.get()
+                : findSchemaForChild(schema, qname, schema.getChildNodes());
+    }
+    public static @Nullable DataSchemaNode findSchemaForChild(final DataNodeContainer schema, final QName qname,
+                                                              final boolean strictMode) {
+        if (strictMode) {
+            return findSchemaForChild(schema, qname);
+        }
+        final Optional<DataSchemaNode> childSchemaOptional = findFirstSchema(qname, schema.getChildNodes());
+        if (!childSchemaOptional.isPresent()) {
+            return null;
+        }
+        return childSchemaOptional.get();
+    }
+    public static DataSchemaNode findSchemaForChild(final DataNodeContainer schema, final QName qname,
+                                                    final Iterable<? extends DataSchemaNode> childNodes) {
+        final Optional<DataSchemaNode> childSchema = findFirstSchema(qname, childNodes);
+        checkState(childSchema.isPresent(), "Unknown child(ren) node(s) detected, identified by: %s, in: %s", qname,
+                schema);
+        return childSchema.get();
+    }
+    public static DataSchemaNode findSchemaForChild(final ChoiceSchemaNode schema, final QName childPartialQName) {
+        for (final CaseSchemaNode choiceCaseNode : schema.getCases()) {
+            final Optional<DataSchemaNode> childSchema = findFirstSchema(childPartialQName,
+                    choiceCaseNode.getChildNodes());
+            if (childSchema.isPresent()) {
+                return childSchema.get();
+            }
+        }
+        throw new IllegalStateException(String.format("Unknown child(ren) node(s) detected, identified by: %s, in: %s",
+                childPartialQName, schema));
+    }
+    public static AugmentationSchemaNode findSchemaForAugment(final AugmentationTarget schema,
+                                                              final Set<QName> qnames) {
+        final Optional<AugmentationSchemaNode> schemaForAugment = findAugment(schema, qnames);
+        checkState(schemaForAugment.isPresent(), "Unknown augmentation node detected, identified by: %s, in: %s",
+                qnames, schema);
+        return schemaForAugment.get();
+    }
+    public static AugmentationSchemaNode findSchemaForAugment(final ChoiceSchemaNode schema, final Set<QName> qnames) {
+        for (final CaseSchemaNode choiceCaseNode : schema.getCases()) {
+            final Optional<AugmentationSchemaNode> schemaForAugment = findAugment(choiceCaseNode, qnames);
+            if (schemaForAugment.isPresent()) {
+                return schemaForAugment.get();
+            }
+        }
+        throw new IllegalStateException(String.format("Unknown augmentation node detected, identified by: %s, in: %s",
+                qnames, schema));
+    }
+    private static Optional<AugmentationSchemaNode> findAugment(final AugmentationTarget schema,
+                                                                final Set<QName> qnames) {
+        for (final AugmentationSchemaNode augment : schema.getAvailableAugmentations()) {
+            final Set<QName> qNamesFromAugment = ImmutableSet.copyOf(Collections2.transform(augment.getChildNodes(),
+                    DataSchemaNode::getQName));
+            if (qnames.equals(qNamesFromAugment)) {
+                return Optional.of(augment);
+            }
+        }
+        return Optional.empty();
+    }
+    /**
+     * Recursively find all child nodes that come from choices.
+     *
+     * @param schema schema
+     * @return Map with all child nodes, to their most top augmentation
+     */
+    public static Map<QName, ChoiceSchemaNode> mapChildElementsFromChoices(final DataNodeContainer schema) {
+        return mapChildElementsFromChoices(schema, schema.getChildNodes());
+    }
+    private static Map<QName, ChoiceSchemaNode> mapChildElementsFromChoices(final DataNodeContainer schema,
+                                                                            final Iterable<? extends DataSchemaNode> childNodes) {
+        final Map<QName, ChoiceSchemaNode> mappedChoices = new LinkedHashMap<>();
+        for (final DataSchemaNode childSchema : childNodes) {
+            if (childSchema instanceof ChoiceSchemaNode) {
+                if (isFromAugment(schema, childSchema)) {
+                    continue;
+                }
+                for (final CaseSchemaNode choiceCaseNode : ((ChoiceSchemaNode) childSchema).getCases()) {
+                    for (final QName qname : getChildNodesRecursive(choiceCaseNode)) {
+                        mappedChoices.put(qname, (ChoiceSchemaNode) childSchema);
+                    }
+                }
+            }
+        }
+        return mappedChoices;
+    }
+    private static boolean isFromAugment(final DataNodeContainer schema, final DataSchemaNode childSchema) {
+        if (!(schema instanceof AugmentationTarget)) {
+            return false;
+        }
+        for (final AugmentationSchemaNode augmentation : ((AugmentationTarget) schema).getAvailableAugmentations()) {
+            if (augmentation.findDataChildByName(childSchema.getQName()).isPresent()) {
+                return true;
+            }
+        }
+        return false;
+    }
+    /**
+     * Recursively find all child nodes that come from augmentations.
+     *
+     * @param schema schema
+     * @return Map with all child nodes, to their most top augmentation
+     */
+    public static Map<QName, AugmentationSchemaNode> mapChildElementsFromAugments(final AugmentationTarget schema) {
+        final Map<QName, AugmentationSchemaNode> childNodesToAugmentation = new LinkedHashMap<>();
+        // Find QNames of augmented child nodes
+        final Map<QName, AugmentationSchemaNode> augments = new HashMap<>();
+        for (final AugmentationSchemaNode augmentationSchema : schema.getAvailableAugmentations()) {
+            for (final DataSchemaNode dataSchemaNode : augmentationSchema.getChildNodes()) {
+                augments.put(dataSchemaNode.getQName(), augmentationSchema);
+            }
+        }
+        // Augmented nodes have to be looked up directly in augmentationTarget
+        // because nodes from augment do not contain nodes from other augmentations
+        if (schema instanceof DataNodeContainer) {
+            for (final DataSchemaNode child : ((DataNodeContainer) schema).getChildNodes()) {
+                // If is not augmented child, continue
+                if (!augments.containsKey(child.getQName())) {
+                    continue;
+                }
+                final AugmentationSchemaNode mostTopAugmentation = augments.get(child.getQName());
+                // recursively add all child nodes in case of augment, case and choice
+                if (child instanceof AugmentationSchemaNode || child instanceof CaseSchemaNode) {
+                    for (final QName qname : getChildNodesRecursive((DataNodeContainer) child)) {
+                        childNodesToAugmentation.put(qname, mostTopAugmentation);
+                    }
+                } else if (child instanceof ChoiceSchemaNode) {
+                    for (final CaseSchemaNode choiceCaseNode : ((ChoiceSchemaNode) child).getCases()) {
+                        for (final QName qname : getChildNodesRecursive(choiceCaseNode)) {
+                            childNodesToAugmentation.put(qname, mostTopAugmentation);
+                        }
+                    }
+                } else {
+                    childNodesToAugmentation.put(child.getQName(), mostTopAugmentation);
+                }
+            }
+        }
+        // Choice Node has to map child nodes from all its cases
+        if (schema instanceof ChoiceSchemaNode) {
+            for (final CaseSchemaNode choiceCaseNode : ((ChoiceSchemaNode) schema).getCases()) {
+                if (!augments.containsKey(choiceCaseNode.getQName())) {
+                    continue;
+                }
+                for (final QName qname : getChildNodesRecursive(choiceCaseNode)) {
+                    childNodesToAugmentation.put(qname, augments.get(choiceCaseNode.getQName()));
+                }
+            }
+        }
+        return childNodesToAugmentation;
+    }
+    /**
+     * Recursively list all child nodes. In case of choice, augment and cases, step in.
+     *
+     * @param nodeContainer node container
+     * @return set of QNames
+     */
+    public static Set<QName> getChildNodesRecursive(final DataNodeContainer nodeContainer) {
+        final Set<QName> allChildNodes = new HashSet<>();
+        for (final DataSchemaNode childSchema : nodeContainer.getChildNodes()) {
+            if (childSchema instanceof ChoiceSchemaNode) {
+                for (final CaseSchemaNode choiceCaseNode : ((ChoiceSchemaNode) childSchema).getCases()) {
+                    allChildNodes.addAll(getChildNodesRecursive(choiceCaseNode));
+                }
+            } else if (childSchema instanceof AugmentationSchemaNode || childSchema instanceof CaseSchemaNode) {
+                allChildNodes.addAll(getChildNodesRecursive((DataNodeContainer) childSchema));
+            } else {
+                allChildNodes.add(childSchema.getQName());
+            }
+        }
+        return allChildNodes;
+    }
+    /**
+     * Retrieves real schemas for augmented child node.
+     *
+     * <p>
+     * Schema of the same child node from augment, and directly from target is not the same.
+     * Schema of child node from augment is incomplete, therefore its useless for XML/NormalizedNode translation.
+     *
+     * @param targetSchema target schema
+     * @param augmentSchema augment schema
+     * @return set of nodes
+     */
+    public static Set<DataSchemaNode> getRealSchemasForAugment(final AugmentationTarget targetSchema,
+                                                               final AugmentationSchemaNode augmentSchema) {
+        if (!targetSchema.getAvailableAugmentations().contains(augmentSchema)) {
+            return ImmutableSet.of();
+        }
+        if (targetSchema instanceof DataNodeContainer) {
+            return getRealSchemasForAugment((DataNodeContainer)targetSchema, augmentSchema);
+        }
+        final Set<DataSchemaNode> realChildNodes = new HashSet<>();
+        if (targetSchema instanceof ChoiceSchemaNode) {
+            for (final DataSchemaNode dataSchemaNode : augmentSchema.getChildNodes()) {
+                for (final CaseSchemaNode choiceCaseNode : ((ChoiceSchemaNode) targetSchema).getCases()) {
+                    if (getChildNodesRecursive(choiceCaseNode).contains(dataSchemaNode.getQName())) {
+                        realChildNodes.add(choiceCaseNode.getDataChildByName(dataSchemaNode.getQName()));
+                    }
+                }
+            }
+        }
+        return realChildNodes;
+    }
+    public static Set<DataSchemaNode> getRealSchemasForAugment(final DataNodeContainer targetSchema,
+                                                               final AugmentationSchemaNode augmentSchema) {
+        final Set<DataSchemaNode> realChildNodes = new HashSet<>();
+        for (final DataSchemaNode dataSchemaNode : augmentSchema.getChildNodes()) {
+            final DataSchemaNode realChild = targetSchema.getDataChildByName(dataSchemaNode.getQName());
+            realChildNodes.add(realChild);
+        }
+        return realChildNodes;
+    }
+
+    public static boolean belongsToCaseAugment(final CaseSchemaNode caseNode,
+                                               final AugmentationIdentifier childToProcess) {
+        for (final AugmentationSchemaNode augmentationSchema : caseNode.getAvailableAugmentations()) {
+            final Set<QName> currentAugmentChildNodes = new HashSet<>();
+            for (final DataSchemaNode dataSchemaNode : augmentationSchema.getChildNodes()) {
+                currentAugmentChildNodes.add(dataSchemaNode.getQName());
+            }
+            if (childToProcess.getPossibleChildNames().equals(currentAugmentChildNodes)) {
+                return true;
+            }
+        }
+        return false;
+    }
+    /**
+     * Tries to find in {@code parent} which is dealed as augmentation target node with QName as {@code child}. If such
+     * node is found then it is returned, else null.
+     *
+     * @param parent parent node
+     * @param child child node
+     * @return augmentation schema
+     */
+    public static AugmentationSchemaNode findCorrespondingAugment(final DataSchemaNode parent,
+                                                                  final DataSchemaNode child) {
+        if (!(parent instanceof AugmentationTarget) || parent instanceof ChoiceSchemaNode) {
+            return null;
+        }
+        for (final AugmentationSchemaNode augmentation : ((AugmentationTarget) parent).getAvailableAugmentations()) {
+            final Optional<DataSchemaNode> childInAugmentation = augmentation.findDataChildByName(child.getQName());
+            if (childInAugmentation.isPresent()) {
+                return augmentation;
+            }
+        }
+        return null;
+    }
+    /**
+     * Find child data schema node identified by its QName within a provided schema node. This method performs lookup
+     * in the namespace of all leafs, leaf-lists, lists, containers, choices, rpcs, actions, notifications, anydatas
+     * and anyxmls according to RFC6050/RFC7950 section 6.2.1.
+     *
+     * @param node
+     *            schema node
+     * @param qname
+     *            QName
+     * @return data child schema node
+     * @throws IllegalArgumentException
+     *             if the schema node does not allow children
+     */
+    public static @Nullable SchemaNode findDataChildSchemaByQName(final SchemaNode node, final QName qname) {
+        if (node instanceof DataNodeContainer) {
+            SchemaNode child = ((DataNodeContainer) node).dataChildByName(qname);
+            if (child == null && node instanceof SchemaContext) {
+                child = tryFind(((SchemaContext) node).getOperations(), qname).orElse(null);
+            }
+            if (child == null && node instanceof NotificationNodeContainer) {
+                child = tryFind(((NotificationNodeContainer) node).getNotifications(), qname).orElse(null);
+            }
+            if (child == null && node instanceof ActionNodeContainer) {
+                child = tryFind(((ActionNodeContainer) node).getActions(), qname).orElse(null);
+            }
+            return child;
+        }
+        if (node instanceof ChoiceSchemaNode) {
+            return ((ChoiceSchemaNode) node).findCase(qname).orElse(null);
+        }
+        if (node instanceof OperationDefinition) {
+            switch (qname.getLocalName()) {
+                case "input":
+                    return ((OperationDefinition) node).getInput();
+                case "output":
+                    return ((OperationDefinition) node).getOutput();
+                default:
+                    return null;
+            }
+        }
+        throw new IllegalArgumentException(String.format("Schema node %s does not allow children.", node));
+    }
+    /**
+     * Find child schema node identified by its QName within a provided schema node. This method performs lookup in both
+     * the namespace of groupings and the namespace of all leafs, leaf-lists, lists, containers, choices, rpcs,
+     * actions, notifications, anydatas and anyxmls according to RFC6050/RFC7950 section 6.2.1.
+     *
+     * <p>
+     * This method returns collection of SchemaNodes, because name conflicts can occur between the namespace
+     * of groupings and namespace of data nodes. This method finds and collects all schema nodes with supplied QName
+     * and returns them all as collection of schema nodes.
+     *
+     * @param node
+     *            schema node
+     * @param qname
+     *            QName
+     * @return collection of child schema nodes
+     * @throws IllegalArgumentException
+     *             if the schema node does not allow children
+     */
+    public static Collection<SchemaNode> findChildSchemaNodesByQName(final SchemaNode node, final QName qname) {
+        final List<SchemaNode> childNodes = new ArrayList<>();
+        final SchemaNode dataNode = findDataChildSchemaByQName(node, qname);
+        if (dataNode != null) {
+            childNodes.add(dataNode);
+        }
+        if (node instanceof DataNodeContainer) {
+            tryFind(((DataNodeContainer) node).getGroupings(), qname).ifPresent(childNodes::add);
+        }
+        return childNodes.isEmpty() ? ImmutableList.of() : ImmutableList.copyOf(childNodes);
+    }
+    private static <T extends SchemaNode> Optional<T> tryFind(final Collection<T> nodes, final QName qname) {
+        return nodes.stream().filter(node -> qname.equals(node.getQName())).findFirst();
+    }
+
+    public static Module findParentModule(final SchemaContext context, final SchemaNode schemaNode) {
+        final QName qname = schemaNode.getPath().getLastComponent();
+        checkState(qname != null, "Schema Path contains invalid state of path parts. "
+                + "The Schema Path MUST contain at least ONE QName  which defines namespace and Local name of path.");
+        return context.findModule(qname.getModule()).orElse(null);
+    }
+
+}
index 21ba4cd..0c06923 100755 (executable)
@@ -24,24 +24,23 @@ package org.onap.ccsdk.sli.core.sli.provider;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.net.Inet6Address;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
+import java.util.*;
+
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.ExecuteGraphInput.Mode;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.ExecuteGraphInputBuilder;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.execute.graph.input.SliParameter;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.execute.graph.input.SliParameterBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.execute.graph.input.SliParameterKey;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.testmodel.rev190723.Builtin.SampleBits;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.testmodel.rev190723.Builtin.SampleEnumeration;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.testmodel.rev190723.Builtin.SampleUnion;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.testmodel.rev190723.Percentage;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.testmodel.rev190723.SampleContainer;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.testmodel.rev190723.SampleContainerBuilder;
-import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.testmodel.rev190723.sample.container.LoginBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.testmodel.rev190723.sample.container.*;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.testmodel.rev190723.sample.container.login.CustomerAddresses;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.testmodel.rev190723.sample.container.login.CustomerAddressesBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.testmodel.rev190723.sample.container.login.CustomerAddressesKey;
 import org.opendaylight.yang.gen.v1.test.IpFragmentFlagEnumType;
 import org.opendaylight.yang.gen.v1.test.TestObjectBuilder;
 import org.opendaylight.yang.gen.v1.test.WrapperObj;
@@ -64,7 +63,7 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
-import org.opendaylight.yangtools.yang.common.Empty;
+import org.opendaylight.yangtools.yang.common.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import junit.framework.TestCase;
@@ -92,45 +91,53 @@ public class MdsalHelperTest extends TestCase {
 
     ExecuteGraphInputBuilder execBuilder = new ExecuteGraphInputBuilder();
     SliParameterBuilder parmBuilder = new SliParameterBuilder();
-    List<SliParameter> params = new LinkedList<SliParameter>();
+    Map<SliParameterKey, SliParameter> params = new HashMap<>();
 
     parmBuilder.setParameterName("boolean-parm");
     parmBuilder.setBooleanValue(Boolean.TRUE);
-    params.add(parmBuilder.build());
+    SliParameter newParm = parmBuilder.build();
+    params.put(newParm.key(), newParm);
 
     parmBuilder.setParameterName("int-parm");
     parmBuilder.setBooleanValue(null);
     parmBuilder.setIntValue(1);
-    params.add(parmBuilder.build());
+    newParm = parmBuilder.build();
+    params.put(newParm.key(), newParm);
 
     parmBuilder.setParameterName("str-parm");
     parmBuilder.setIntValue(null);
     parmBuilder.setStringValue("hello");
-    params.add(parmBuilder.build());
+    newParm = parmBuilder.build();
+    params.put(newParm.key(), newParm);
 
     parmBuilder.setParameterName("ipaddress4-parm");
     parmBuilder.setStringValue(null);
     parmBuilder.setIpaddressValue(IpAddressBuilder.getDefaultInstance("127.0.0.1"));
-    params.add(parmBuilder.build());
+    newParm = parmBuilder.build();
+    params.put(newParm.key(), newParm);
 
     parmBuilder.setParameterName("ipaddress6-parm");
     parmBuilder.setIpaddressValue(IpAddressBuilder.getDefaultInstance("ef::1"));
-    params.add(parmBuilder.build());
+    newParm = parmBuilder.build();
+    params.put(newParm.key(), newParm);
 
     parmBuilder.setParameterName("ipprefix-parm");
     parmBuilder.setIpaddressValue(null);
     parmBuilder.setIpprefixValue(IpPrefixBuilder.getDefaultInstance("10.0.0.0/24"));
-    params.add(parmBuilder.build());
+    newParm = parmBuilder.build();
+    params.put(newParm.key(), newParm);
 
     parmBuilder.setParameterName("portnumber-parm");
     parmBuilder.setIpprefixValue(null);
     parmBuilder.setPortNumber(PortNumber.getDefaultInstance("8080"));
-    params.add(parmBuilder.build());
+    newParm = parmBuilder.build();
+    params.put(newParm.key(), newParm);
 
     parmBuilder.setParameterName("dcsp-parm");
     parmBuilder.setPortNumber(null);
     parmBuilder.setDscp(Dscp.getDefaultInstance("57"));
-    params.add(parmBuilder.build());
+    newParm = parmBuilder.build();
+    params.put(newParm.key(), newParm);
 
     execBuilder.setMode(Mode.Sync);
     execBuilder.setModuleName("my-module");
@@ -574,7 +581,8 @@ public class MdsalHelperTest extends TestCase {
 
   public void testToPropertiesWithuInt8() throws Exception {
     SampleContainerBuilder sampleBuilder = new SampleContainerBuilder();
-    Short myShort = new Short("255");
+
+    Uint8 myShort = Uint8.valueOf("255");
     sampleBuilder.setSampleUint8(myShort);
     Properties props = new Properties();
     MdsalHelper.toProperties(props, sampleBuilder);
@@ -583,7 +591,7 @@ public class MdsalHelperTest extends TestCase {
 
   public void testToPropertiesWithuInt16() throws Exception {
     SampleContainerBuilder sampleBuilder = new SampleContainerBuilder();
-    Integer myInt = new Integer("65535");
+    Uint16 myInt = Uint16.valueOf("65535");
     sampleBuilder.setSampleUint16(myInt);
     Properties props = new Properties();
     MdsalHelper.toProperties(props, sampleBuilder);
@@ -592,7 +600,7 @@ public class MdsalHelperTest extends TestCase {
 
   public void testToPropertiesWithuInt32() throws Exception {
     SampleContainerBuilder sampleBuilder = new SampleContainerBuilder();
-    Long myLong = new Long("4294967295");
+    Uint32 myLong = Uint32.valueOf("4294967295");
     sampleBuilder.setSampleUint32(myLong);
     Properties props = new Properties();
     MdsalHelper.toProperties(props, sampleBuilder);
@@ -601,7 +609,7 @@ public class MdsalHelperTest extends TestCase {
 
   public void testToPropertiesWithuInt64() throws Exception {
     SampleContainerBuilder sampleBuilder = new SampleContainerBuilder();
-    BigInteger myBigInt = new BigInteger("2432902008176640000");
+    Uint64 myBigInt = Uint64.valueOf("2432902008176640000");
     sampleBuilder.setSampleUint64(myBigInt);
     Properties props = new Properties();
     MdsalHelper.toProperties(props, sampleBuilder);
@@ -628,7 +636,7 @@ public class MdsalHelperTest extends TestCase {
     SampleContainerBuilder sampleBuilder = new SampleContainerBuilder();
     Properties props = new Properties();
 
-    Short myShort = new Short("99");
+    Uint8 myShort = Uint8.valueOf("99");
     Percentage myPercent = new Percentage(myShort);
     sampleBuilder.setPercentCompleted(myPercent);
     MdsalHelper.toProperties(props, sampleBuilder);
@@ -661,21 +669,21 @@ public class MdsalHelperTest extends TestCase {
     SampleContainerBuilder sampleBuilder = new SampleContainerBuilder();
     LoginBuilder lb = new LoginBuilder();
     lb.setMessage("WELCOME!");
-    List<CustomerAddresses> addresses = new ArrayList<CustomerAddresses>();
+    Map<CustomerAddressesKey, CustomerAddresses> addresses = new LinkedHashMap<>();
     CustomerAddressesBuilder cab = new CustomerAddressesBuilder();
     cab.setAddressName("home");
     cab.setState("NJ");
     cab.setStreetAddress("yellowbrick road");
 
     CustomerAddresses addressOne = cab.build();
-    addresses.add(addressOne);
+    addresses.put(addressOne.key(), addressOne);
 
     cab.setAddressName("vacation house");
     cab.setState("FL");
     cab.setStreetAddress("ocean ave");
 
     CustomerAddresses addressTwo = cab.build();
-    addresses.add(addressTwo);
+    addresses.put(addressTwo.key(), addressTwo);
 
     lb.setCustomerAddresses(addresses);
     sampleBuilder.setLogin(lb.build());
@@ -766,6 +774,13 @@ public class MdsalHelperTest extends TestCase {
     props.put("sample-container.ipv6-prefix", "2001:db8:aaaa:1111::100/64");
     props.put("sample-container.ipv6-prefix.value", "2001:db8:aaaa:1111::100/64");
     props.put("sample-container.port-number", "2");
+    props.put("sample-container.ip-address-list[0].ip-addr", "127.0.0.1");
+    props.put("sample-container.ip-address-list[1].ip-addr", "10.20.0.1");
+    props.put("sample-container.ip-address-list_length", 2);
+    props.put("sample-container.ip-address-leaf-list[0]", "127.0.0.1");
+    props.put("sample-container.ip-address-names[0].ip-addr", "127.0.0.1");
+    props.put("sample-container.ip-address-names[0].fqdn", "localhost");
+
     props.put("sample-container.uri", "http://wiki.onap.org:8080");
     props.put("sample-container.uri.value", "http://wiki.onap.org:8080");
     SampleContainerBuilder sampleBuilder = new SampleContainerBuilder();
@@ -790,6 +805,23 @@ public class MdsalHelperTest extends TestCase {
     assertEquals(Ipv6Prefix.getDefaultInstance("2001:db8:aaaa:1111::100/64"), result.getIpv6Prefix());
     assertEquals(PortNumber.getDefaultInstance("2"), result.getPortNumber());
     assertEquals(Uri.getDefaultInstance("http://wiki.onap.org:8080"), result.getUri());
+    Map<IpAddressListKey, IpAddressList> ipAddrList = result.getIpAddressList();
+
+    Iterator<IpAddressList> ipAddrIter = ipAddrList.values().iterator();
+    assertEquals(true, ipAddrIter.hasNext());
+    assertEquals("127.0.0.1", ipAddrIter.next().getIpAddr().stringValue());
+    assertEquals(true, ipAddrIter.hasNext());
+    assertEquals("10.20.0.1", ipAddrIter.next().getIpAddr().stringValue());
+    assertEquals(1, result.getIpAddressLeafList().size());
+    assertEquals("127.0.0.1", result.getIpAddressLeafList().get(0).stringValue());
+    Map<IpAddressNamesKey, IpAddressNames> ipNamesMap = result.getIpAddressNames();
+    Iterator<IpAddressNames> ipNamesIter = ipNamesMap.values().iterator();
+    assertEquals(true, ipNamesIter.hasNext());
+    IpAddressNames ipNames = ipNamesIter.next();
+    assertEquals("127.0.0.1", ipNames.getIpAddr().stringValue());
+    assertEquals("localhost", ipNames.getFqdn());
+
+
   }
 
   public void testToLowerHyphen() throws Exception {
index 10bbbd9..ada933d 100644 (file)
 package org.onap.ccsdk.sli.core.sli.provider;
 
 import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.ExecuteGraphInput.Mode;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.ExecuteGraphInputBuilder;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.TestResultsBuilder;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.execute.graph.input.SliParameter;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.execute.graph.input.SliParameterKey;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.execute.graph.input.SliParameterBuilder;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.test.results.TestResult;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.test.results.TestResultBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.test.results.TestResultKey;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefixBuilder;
 import org.slf4j.Logger;
@@ -57,38 +61,38 @@ public class PrintYangToPropTest {
                egBuilder.setModuleName("my-module");
                egBuilder.setRpcName("my-rpc");
 
-               List<SliParameter> pList = new LinkedList<>();
+               Map<SliParameterKey, SliParameter> pMap = new HashMap<>();
 
                SliParameterBuilder pBuilder = new SliParameterBuilder();
         pBuilder.setParameterName("string-param");
         pBuilder.setStringValue("hi");
-        pList.add(pBuilder.build());
+        pMap.put(new SliParameterKey(pBuilder.getParameterName()), pBuilder.build());
         pBuilder.setParameterName("int-param");
         pBuilder.setIntValue(1);
         pBuilder.setStringValue(null);
-        pList.add(pBuilder.build());
+        pMap.put(new SliParameterKey(pBuilder.getParameterName()), pBuilder.build());
         pBuilder.setParameterName("bool-param");
         pBuilder.setIntValue(null);
         pBuilder.setBooleanValue(true);
-        pList.add(pBuilder.build());
+        pMap.put(new SliParameterKey(pBuilder.getParameterName()), pBuilder.build());
         pBuilder.setParameterName("ipaddress-value1");
         pBuilder.setBooleanValue(null);
         pBuilder.setIpaddressValue(IpAddressBuilder.getDefaultInstance("127.0.0.1"));
-        pList.add(pBuilder.build());
+        pMap.put(new SliParameterKey(pBuilder.getParameterName()), pBuilder.build());
         pBuilder.setParameterName("ipaddress-value2");
         pBuilder.setIpaddressValue(IpAddressBuilder.getDefaultInstance("::1"));
-        pList.add(pBuilder.build());
+        pMap.put(new SliParameterKey(pBuilder.getParameterName()), pBuilder.build());
         pBuilder.setParameterName("ipprefix-value1");
         pBuilder.setIpaddressValue(null);
         pBuilder.setIpprefixValue(IpPrefixBuilder.getDefaultInstance("192.168.0.0/16"));
-        pList.add(pBuilder.build());
+        pMap.put(new SliParameterKey(pBuilder.getParameterName()), pBuilder.build());
         pBuilder.setParameterName("ipprefix-value2");
         pBuilder.setIpprefixValue(IpPrefixBuilder.getDefaultInstance("2001:db8:3c4d::/48"));
-        pList.add(pBuilder.build());
+        pMap.put(new SliParameterKey(pBuilder.getParameterName()), pBuilder.build());
 
 
 
-               egBuilder.setSliParameter(pList);
+               egBuilder.setSliParameter(pMap);
 
 
                // Generate properties
@@ -113,12 +117,12 @@ public class PrintYangToPropTest {
         TestResultBuilder resultBuilder = new TestResultBuilder();
 
         // Set builder with values
-        List<TestResult> resultList = new LinkedList<>();
+        Map<TestResultKey, TestResult> resultList = new HashMap<>();
         resultBuilder.setTestIdentifier("test1");
         List<String> results = new LinkedList<>();
         results.add("pass");
         resultBuilder.setResults(results);
-        resultList.add(resultBuilder.build());
+        resultList.put(new TestResultKey(resultBuilder.getTestIdentifier()), resultBuilder.build());
         resultsBuilder.setTestResult(resultList);
 
         // Generate properties
index 7f66197..c5571ee 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 1968d88..dea15a6 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index a238386..99ab728 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index ca5c89a..018f4ec 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 77a0900..f09441b 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index c90a336..8e5e953 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.core</groupId>
index 255d00a..b53b6ae 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index c7cb555..93cf051 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 6e852ed..bda7226 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index a00131e..015ef5e 100644 (file)
@@ -258,7 +258,7 @@ public class SliapiProvider implements AutoCloseable, SLIAPIService {
 
                        String propValue = "";
 
-                       Boolean boolval = sliParm.isBooleanValue();
+                       Boolean boolval = sliParm.getBooleanValue();
 
                        if (boolval != null) {
                                propValue = boolval.toString();
index cd7dd20..73c613a 100644 (file)
@@ -27,11 +27,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 import java.io.InputStream;
 import java.net.URL;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
+import java.util.*;
 import java.util.concurrent.Future;
 import org.junit.After;
 import org.junit.Before;
@@ -72,6 +68,7 @@ import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.Hea
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.SLIAPIService;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.VlbcheckInput;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.execute.graph.input.SliParameter;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.execute.graph.input.SliParameterKey;
 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.core.sliapi.rev161110.execute.graph.input.SliParameterBuilder;
 import org.opendaylight.yangtools.concepts.ObjectRegistration;
 
@@ -173,20 +170,23 @@ public class TestSliapiProvider {
         inputBuilder.setMode(ExecuteGraphInput.Mode.Sync);
         inputBuilder.setModuleName("sli");
         inputBuilder.setRpcName("healthcheck");
-        List<SliParameter> pList = new LinkedList<>();
+        Map<SliParameterKey, SliParameter> pMap = new LinkedHashMap<>();
         SliParameterBuilder pBuilder = new SliParameterBuilder();
         pBuilder.setParameterName("int-parameter");
         pBuilder.setIntValue(1);
-        pList.add(pBuilder.build());
+        SliParameter sliParm = pBuilder.build();
+        pMap.put(sliParm.key(), sliParm);
         pBuilder.setParameterName("bool-parameter");
         pBuilder.setIntValue(null);
         pBuilder.setBooleanValue(true);
-        pList.add(pBuilder.build());
+        sliParm = pBuilder.build();
+        pMap.put(sliParm.key(), sliParm);
         pBuilder.setParameterName("str-parameter");
         pBuilder.setBooleanValue(null);
         pBuilder.setStringValue("value");
-        pList.add(pBuilder.build());
-        inputBuilder.setSliParameter(pList);
+        sliParm = pBuilder.build();
+        pMap.put(sliParm.key(), sliParm);
+        inputBuilder.setSliParameter(pMap);
         provider.executeGraph(inputBuilder.build());
 
 
@@ -194,20 +194,23 @@ public class TestSliapiProvider {
         inputBuilder.setMode(ExecuteGraphInput.Mode.Sync);
         inputBuilder.setModuleName("sli");
         inputBuilder.setRpcName("no-such-graph");
-        pList = new LinkedList<>();
+        pMap = new LinkedHashMap<>();
         pBuilder = new SliParameterBuilder();
         pBuilder.setParameterName("int-parameter");
         pBuilder.setIntValue(1);
-        pList.add(pBuilder.build());
+        sliParm = pBuilder.build();
+        pMap.put(sliParm.key(), sliParm);
         pBuilder.setParameterName("bool-parameter");
         pBuilder.setIntValue(null);
         pBuilder.setBooleanValue(true);
-        pList.add(pBuilder.build());
+        sliParm = pBuilder.build();
+        pMap.put(sliParm.key(), sliParm);
         pBuilder.setParameterName("str-parameter");
         pBuilder.setBooleanValue(null);
         pBuilder.setStringValue("value");
-        pList.add(pBuilder.build());
-        inputBuilder.setSliParameter(pList);
+        sliParm = pBuilder.build();
+        pMap.put(sliParm.key(), sliParm);
+        inputBuilder.setSliParameter(pMap);
         provider.executeGraph(inputBuilder.build());
 
         assertTrue(provider.vlbcheck(mock(VlbcheckInput.class)) instanceof Future<?>);
index b9c0b71..a7a7417 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 8a52c14..0da7ce1 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 6e99c77..35cadb9 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 340328b..eaa13b3 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 613fe69..1ece725 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 7d32d94..e6048f0 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 557c7dc..c33700b 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 344836f..bcdbc41 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index ac6db84..5aea17d 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 044b359..b977684 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 1320a2a..a99e048 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 1ec930e..f130aaa 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 24c33a2..2bc3a4f 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 46b87ab..d8a9408 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index ca5b9f4..26c7719 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 2864f40..034414a 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 3295588..ed8dc1a 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>standalone-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 3acf8b6..8823eea 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 2e2b077..0854a15 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index a62e56b..d543399 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 62368f9..20b798d 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index d99abf4..2fa26cb 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 7fd0130..cde57f4 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 584ddb2..189919b 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 8097908..36deb63 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index e099e25..123662b 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 8867dd4..0197895 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 220f37d..7b2b860 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 6be45b2..0eac73f 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 4dd46d5..0178b40 100644 (file)
@@ -38,6 +38,7 @@ import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.northbound.lcm.rev180329.
 import org.opendaylight.yangtools.concepts.ObjectRegistration;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.opendaylight.yangtools.yang.common.Uint16;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -1038,7 +1039,7 @@ public class LcmProvider implements AutoCloseable, LCMService {
 
                if (input == null) {
                        LOG.debug("Rejecting " +rpcName+ " because of invalid input");
-                       statusBuilder.setCode(LcmResponseCode.REJECT_INVALID_INPUT.getValue());
+                       statusBuilder.setCode(Uint16.valueOf(LcmResponseCode.REJECT_INVALID_INPUT.getValue()));
                        statusBuilder.setMessage("REJECT - INVALID INPUT.  Missing input");
                        CommonHeaderBuilder hBuilder = new CommonHeaderBuilder();
                        hBuilder.setApiVer("1");
@@ -1069,14 +1070,14 @@ public class LcmProvider implements AutoCloseable, LCMService {
                                catch (Exception e)
                                {
                                        LOG.error("Caught exception executing service logic for "+ rpcName, e);
-                                       statusBuilder.setCode(LcmResponseCode.FAILURE_DG_FAILURE.getValue());
+                                       statusBuilder.setCode(Uint16.valueOf(LcmResponseCode.FAILURE_DG_FAILURE.getValue()));
                                        statusBuilder.setMessage("FAILURE - DG FAILURE ("+e.getMessage()+")");
                                        throw new LcmRpcInvocationException(statusBuilder.build(), hBuilder.build());
                                }
                        } else {
                                LOG.error("No service logic active for LCM: '" + rpcName + "'");
 
-                               statusBuilder.setCode(LcmResponseCode.REJECT_DG_NOT_FOUND.getValue());
+                               statusBuilder.setCode(Uint16.valueOf(LcmResponseCode.REJECT_DG_NOT_FOUND.getValue()));
                                statusBuilder.setMessage("FAILURE - DG not found for action "+rpcName);
                                throw new LcmRpcInvocationException(statusBuilder.build(), hBuilder.build());
                        }
@@ -1085,7 +1086,7 @@ public class LcmProvider implements AutoCloseable, LCMService {
                {
                        LOG.error("Caught exception looking for service logic", e);
 
-                       statusBuilder.setCode(LcmResponseCode.FAILURE_DG_FAILURE.getValue());
+                       statusBuilder.setCode(Uint16.valueOf(LcmResponseCode.FAILURE_DG_FAILURE.getValue()));
                        statusBuilder.setMessage("FAILURE - Unexpected error looking for DG ("+e.getMessage()+")");
                        throw new LcmRpcInvocationException(statusBuilder.build(), hBuilder.build());
                }
@@ -1101,6 +1102,7 @@ public class LcmProvider implements AutoCloseable, LCMService {
                        payload = new Payload(payloadValue);
                }
 
+
                String statusCode = sBuilder.getCode().toString();
 
                if (!"400".equals(statusCode)) {
index c6defa5..9856b33 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.northbound</groupId>
index c0a06f3..b47181d 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>standalone-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.northbound</groupId>
index e78e37a..a7af5c2 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 926004a..fcb6aa2 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 19e742c..5b814a9 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 0b25869..833f03d 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index e686c8a..6c37718 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 6b1aed5..9eb9f24 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 6132626..ba175ee 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 40eaae0..f75fb40 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>single-feature-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 0098e5a..47fbb2d 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>feature-repo-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 6af48de..058e2b7 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 9f187b1..0c979b8 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index f09c7c0..044ef57 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 1d3c680..94af126 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 10f4204..67dfa18 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index b770cd6..a1e7d35 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>
 
index 2aa8817..dd811d8 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
index ae8427d..e60514f 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
index 2e0f26d..08221d5 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
index 4aafd49..b0319f4 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
index 55d829e..d0df996 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
index 9f9ed13..472786b 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
index 9e240b0..0d1dd38 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
index 8244851..8c594aa 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
index 9005c84..a884bd5 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
index e82690a..0e40a49 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
             <artifactId>properties-node-provider</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-common</artifactId>
+            <scope>provided</scope>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-data-impl</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
index b5a9df7..4a2e181 100644 (file)
@@ -84,6 +84,7 @@ import org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.Namespace;
 import org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.PropertiesNodeSerializer;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.nb.rfc8040.utils.parser.ParserIdentifier;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
 import org.opendaylight.yangtools.yang.model.parser.api.YangParserException;
@@ -479,7 +480,7 @@ public class RestconfApiCallNode implements SvcLogicJavaPlugin {
      * @throws SvcLogicException when XML parsing fails
      */
     private String getXmlReqForPutOp(String req, String nodeName,
-                                     URI modNs) throws SvcLogicException {
+                                     XMLNamespace modNs) throws SvcLogicException {
         req = getUpdatedXmlReq(req, nodeName, modNs.toString());
         Document oldDoc;
         try {
index 0134a5a..ab554dd 100644 (file)
@@ -45,6 +45,7 @@ import org.dom4j.Element;
 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 import org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.Namespace;
 import org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.PropertiesNode;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
 import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
@@ -190,13 +191,8 @@ public final class DfSerializerUtil {
         if (mName != null) {
             it = ctx.findModules(mName).iterator();
         } else {
-            URI modUri = null;
-            try {
-               modUri = new URI(mUri);
-            } catch (URISyntaxException e) {
-                throw new SvcLogicException(URI_ERR, e);
-            }
-            it = ctx.findModules(modUri).iterator();
+
+            it = ctx.findModules(XMLNamespace.of(mUri)).iterator();
         }
 
         if (!it.hasNext()) {
index 1fd0d2d..08edacc 100644 (file)
@@ -52,8 +52,8 @@ import static org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.NodeType.M
 import static org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.NodeType.MULTI_INSTANCE_NODE;
 import static org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.NodeType.SINGLE_INSTANCE_LEAF_NODE;
 import static org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.NodeType.SINGLE_INSTANCE_NODE;
-import static org.opendaylight.yangtools.yang.data.impl.schema.SchemaUtils.findDataChildSchemaByQName;
-import static org.opendaylight.yangtools.yang.data.impl.schema.SchemaUtils.findSchemaForChild;
+import static org.onap.ccsdk.sli.core.sli.provider.YangUtils.findDataChildSchemaByQName;
+import static org.onap.ccsdk.sli.core.sli.provider.YangUtils.findSchemaForChild;
 import static org.opendaylight.yangtools.yang.data.util.ParserStreamUtils.findSchemaNodeByNameAndNamespace;
 
 /**
index f098195..09734b6 100644 (file)
@@ -30,6 +30,7 @@ import org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.Namespace;
 import org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.PropertiesNode;
 import org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.PropertiesNodeListener;
 import org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.RootNode;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
 
 import java.io.Writer;
 import java.net.URI;
@@ -211,7 +212,7 @@ public class PropertiesNodeXmlListener implements PropertiesNodeListener {
      */
     private void setValueWithNs(Element element, LeafNode node) {
         Namespace valNs = node.valueNs();
-        URI modNs = (valNs == null) ? null : valNs.moduleNs();
+        XMLNamespace modNs = (valNs == null) ? null : valNs.moduleNs();
         String val = node.value();
         if (modNs != null) {
             element.addNamespace(XML_PREFIX, modNs.toString());
index 1cf99b2..a7a2b37 100644 (file)
@@ -35,7 +35,7 @@ import static org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.MdsalPrope
 import static org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.MdsalPropertiesNodeUtils.resolveName;
 import static org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.NodeType.MULTI_INSTANCE_HOLDER_NODE;
 import static org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.NodeType.MULTI_INSTANCE_LEAF_HOLDER_NODE;
-import static org.opendaylight.yangtools.yang.data.impl.schema.SchemaUtils.findCorrespondingAugment;
+import static org.onap.ccsdk.sli.core.sli.provider.YangUtils.findCorrespondingAugment;
 
 /**
  * Abstraction of an entity that represents an inner node to properties data
index 8fd7a12..063e030 100644 (file)
@@ -40,7 +40,9 @@ import static org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.NodeType.S
 import java.util.HashMap;
 import java.util.Map;
 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+import org.onap.ccsdk.sli.core.sli.provider.YangUtils;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
@@ -143,7 +145,7 @@ public class MdsalPropertiesNodeSerializer extends PropertiesNodeSerializer<Sche
     }
 
     private RootNode createRootNode(String lastNodeName, String rootUri) {
-        Module m = SchemaContextUtil.findParentModule(schemaCtx(), curSchema);
+        Module m = YangUtils.findParentModule(schemaCtx(), curSchema);
         Namespace ns = new Namespace(m.getName(), m.getNamespace(),
                                      getRevision(m.getRevision()));
         return new RootNode(lastNodeName, ns, schemaNode(), rootUri);
index 331f01c..9b0a31d 100644 (file)
@@ -28,23 +28,20 @@ import java.util.Collection;
 import java.util.Deque;
 import java.util.Iterator;
 import java.util.Optional;
+
+import com.sun.xml.txw2.annotation.XmlNamespace;
 import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+import org.onap.ccsdk.sli.core.sli.provider.YangUtils;
 import org.opendaylight.restconf.common.context.InstanceIdentifierContext;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.yangtools.yang.common.QName;
 import org.opendaylight.yangtools.yang.common.Revision;
-import org.opendaylight.yangtools.yang.data.impl.schema.SchemaUtils;
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
 import org.opendaylight.yangtools.yang.data.util.ParserStreamUtils;
 import org.opendaylight.yangtools.yang.data.util.codec.IdentityCodecUtil;
-import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ChoiceSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
+import org.opendaylight.yangtools.yang.model.api.*;
 import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaNode;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -447,14 +444,15 @@ public final class MdsalPropertiesNodeUtils {
             return null;
         }
 
-        QName qname =  QName.create(namespace.moduleNs(),
+
+        QName qname =  QName.create(XMLNamespace.of(namespace.moduleNs().toString()),
                                     Revision.of(namespace.revision()), name);
 
         // YANG RPC will not be instance of DataSchemaNode
         if (curSchema instanceof DataSchemaNode) {
             Deque<DataSchemaNode> schemaNodeDeque = ParserStreamUtils.
                     findSchemaNodeByNameAndNamespace(((DataSchemaNode)
-                            curSchema), name, namespace.moduleNs());
+                            curSchema), name, XMLNamespace.of(namespace.moduleNs().toString()));
             if (schemaNodeDeque.isEmpty()) {
                 // could not find schema node
                 return null;
@@ -467,10 +465,12 @@ public final class MdsalPropertiesNodeUtils {
             }
 
             // node is child of Choice/case
-            return SchemaUtils.findSchemaForChild(((ChoiceSchemaNode) schemaNode),
+
+
+            return YangUtils.findSchemaForChild(((ChoiceSchemaNode) schemaNode),
                                                   qname);
         } else {
-            return SchemaUtils.findDataChildSchemaByQName(curSchema, qname);
+            return YangUtils.findDataChildSchemaByQName(curSchema, qname);
         }
     }
 
index 4f27ee1..9bb71b5 100644 (file)
 
 package org.onap.ccsdk.sli.plugins.yangserializers.pnserializer;
 
-import java.net.URI;
+
+import org.opendaylight.yangtools.yang.common.XMLNamespace;
 
 /**
  * Representation of YANG namespace.
  */
 public class Namespace {
     private String moduleName;
-    private URI moduleNs;
+    private XMLNamespace moduleNs;
     private String revision;
 
     /**
@@ -38,7 +39,7 @@ public class Namespace {
      * @param moduleNs module namespace
      * @param revision revision
      */
-    public Namespace(String modulename, URI moduleNs, String revision) {
+    public Namespace(String modulename, XMLNamespace moduleNs, String revision) {
         this.moduleName = modulename;
         this.moduleNs = moduleNs;
         this.revision = revision;
@@ -67,7 +68,7 @@ public class Namespace {
      *
      * @return module namespace
      */
-    public URI moduleNs() {
+    public XMLNamespace moduleNs() {
         return moduleNs;
     }
 
@@ -76,7 +77,7 @@ public class Namespace {
      *
      * @param moduleNs module namespace
      */
-    public void moduleNs(URI moduleNs) {
+    public void moduleNs(XMLNamespace moduleNs) {
         this.moduleNs = moduleNs;
     }
 
index c7f7340..d7ca885 100644 (file)
@@ -35,7 +35,7 @@ import static org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.MdsalPrope
 import static org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.MdsalPropertiesNodeUtils.resolveName;
 import static org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.NodeType.MULTI_INSTANCE_HOLDER_NODE;
 import static org.onap.ccsdk.sli.plugins.yangserializers.pnserializer.NodeType.MULTI_INSTANCE_LEAF_HOLDER_NODE;
-import static org.opendaylight.yangtools.yang.data.impl.schema.SchemaUtils.findCorrespondingAugment;
+import static org.onap.ccsdk.sli.core.sli.provider.YangUtils.findCorrespondingAugment;
 
 /**
  * Abstraction of node representing properties data tree.
index cde3274..36c6cc9 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
index 0de6770..7af13c5 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
index 7df3a3e..2680d10 100755 (executable)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
index 8a2452d..c216bda 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
index a790d5f..85d0142 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
index c6c2e9d..eb2da63 100644 (file)
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>binding-parent</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
     </parent>
 
     <groupId>org.onap.ccsdk.sli.plugins</groupId>
diff --git a/pom.xml b/pom.xml
index dbbbf5e..292eb2a 100755 (executable)
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.ccsdk.parent</groupId>
         <artifactId>odlparent-lite</artifactId>
-        <version>2.3.2</version>
+        <version>2.3.3-SNAPSHOT</version>
         <relativePath/>
     </parent>