Merge "Fix docker image generation when not profile is selected"
diff --git a/checkstyle/pom.xml b/checkstyle/pom.xml
index 83d1808..a592085 100644
--- a/checkstyle/pom.xml
+++ b/checkstyle/pom.xml
@@ -5,7 +5,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.onap.cps</groupId>
     <artifactId>checkstyle</artifactId>
-    <version>0.0.1-SNAPSHOT</version>
+    <version>0.0.2-SNAPSHOT</version>
 
     <properties>
         <nexusproxy>https://nexus.onap.org</nexusproxy>
diff --git a/cps-application/pom.xml b/cps-application/pom.xml
index 685029b..8ea2db3 100644
--- a/cps-application/pom.xml
+++ b/cps-application/pom.xml
@@ -26,7 +26,7 @@
     <parent>
         <groupId>org.onap.cps</groupId>
         <artifactId>cps-parent</artifactId>
-        <version>0.0.1-SNAPSHOT</version>
+        <version>0.0.2-SNAPSHOT</version>
         <relativePath>../cps-parent/pom.xml</relativePath>
     </parent>
 
diff --git a/cps-bom/pom.xml b/cps-bom/pom.xml
index 9ae8a80..cf5025d 100644
--- a/cps-bom/pom.xml
+++ b/cps-bom/pom.xml
@@ -5,7 +5,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.onap.cps</groupId>
     <artifactId>cps-bom</artifactId>
-    <version>0.0.1-SNAPSHOT</version>
+    <version>0.0.2-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <description>This artifact contains dependencyManagement declarations of all published CPS components.</description>
diff --git a/cps-dependencies/pom.xml b/cps-dependencies/pom.xml
index 1beee11..8e05105 100755
--- a/cps-dependencies/pom.xml
+++ b/cps-dependencies/pom.xml
@@ -6,7 +6,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.onap.cps</groupId>
     <artifactId>cps-dependencies</artifactId>
-    <version>0.0.1-SNAPSHOT</version>
+    <version>0.0.2-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <name>${project.groupId}:${project.artifactId}</name>
diff --git a/cps-nf-proxy-rest/pom.xml b/cps-nf-proxy-rest/pom.xml
index 94420f7..ac891e1 100755
--- a/cps-nf-proxy-rest/pom.xml
+++ b/cps-nf-proxy-rest/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.cps</groupId>
         <artifactId>cps-parent</artifactId>
-        <version>0.0.1-SNAPSHOT</version>
+        <version>0.0.2-SNAPSHOT</version>
         <relativePath>../cps-parent/pom.xml</relativePath>
     </parent>
 
diff --git a/cps-nf-proxy-service/pom.xml b/cps-nf-proxy-service/pom.xml
index d32d0ad..67ffaeb 100644
--- a/cps-nf-proxy-service/pom.xml
+++ b/cps-nf-proxy-service/pom.xml
@@ -6,7 +6,7 @@
     <parent>
         <groupId>org.onap.cps</groupId>
         <artifactId>cps-parent</artifactId>
-        <version>0.0.1-SNAPSHOT</version>
+        <version>0.0.2-SNAPSHOT</version>
         <relativePath>../cps-parent/pom.xml</relativePath>
     </parent>
 
diff --git a/cps-parent/pom.xml b/cps-parent/pom.xml
index 91d1f41..0f8e643 100755
--- a/cps-parent/pom.xml
+++ b/cps-parent/pom.xml
@@ -24,14 +24,14 @@
     <parent>
         <groupId>org.onap.oparent</groupId>
         <artifactId>oparent</artifactId>
-        <version>3.1.0</version>
+        <version>3.2.0</version>
         <relativePath/>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
     <groupId>org.onap.cps</groupId>
     <artifactId>cps-parent</artifactId>
-    <version>0.0.1-SNAPSHOT</version>
+    <version>0.0.2-SNAPSHOT</version>
     <packaging>pom</packaging>
 
     <properties>
diff --git a/cps-rest/docs/api/swagger/components.yml b/cps-rest/docs/api/swagger/components.yml
index 3694f36..bb1f120 100755
--- a/cps-rest/docs/api/swagger/components.yml
+++ b/cps-rest/docs/api/swagger/components.yml
@@ -75,6 +75,14 @@
       schema:
         type: string
         default: /
+    cpsPathInQuery:
+      name: cps-path
+      in: query
+      description: cps-path
+      required: false
+      schema:
+        type: string
+        default: /
     includeDescendantsOptionInQuery:
       name: include-descendants
       in: query
diff --git a/cps-rest/docs/api/swagger/cpsQuery.yml b/cps-rest/docs/api/swagger/cpsQuery.yml
new file mode 100644
index 0000000..91a4bdb
--- /dev/null
+++ b/cps-rest/docs/api/swagger/cpsQuery.yml
@@ -0,0 +1,23 @@
+nodesByDataspaceAndAnchorAndCpsPath:
+  get:
+    description: Query data nodes for the given dataspace and anchor using CPS path
+    tags:
+      - cps-query
+    summary: Query data nodes
+    operationId: getNodesByDataspaceAndAnchorAndCpsPath
+    parameters:
+      - $ref: 'components.yml#/components/parameters/dataspaceNameInPath'
+      - $ref: 'components.yml#/components/parameters/anchorNameInPath'
+      - $ref: 'components.yml#/components/parameters/cpsPathInQuery'
+    responses:
+      '200':
+        $ref: 'components.yml#/components/responses/Ok'
+      '400':
+        $ref: 'components.yml#/components/responses/BadRequest'
+      '401':
+        $ref: 'components.yml#/components/responses/Unauthorized'
+      '403':
+        $ref: 'components.yml#/components/responses/Forbidden'
+      '404':
+        $ref: 'components.yml#/components/responses/NotFound'
+    x-codegen-request-body-name: xpath
\ No newline at end of file
diff --git a/cps-rest/docs/api/swagger/openapi.yml b/cps-rest/docs/api/swagger/openapi.yml
index 2ead202..38fbebe 100755
--- a/cps-rest/docs/api/swagger/openapi.yml
+++ b/cps-rest/docs/api/swagger/openapi.yml
@@ -50,3 +50,6 @@
 
   /v1/dataspaces/{dataspace-name}/nodes:
     $ref: 'cpsData.yml#/nodesByDataspace'
+
+  /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes/query:
+    $ref: 'cpsQuery.yml#/nodesByDataspaceAndAnchorAndCpsPath'
\ No newline at end of file
diff --git a/cps-rest/pom.xml b/cps-rest/pom.xml
index 2bb053b..840228e 100755
--- a/cps-rest/pom.xml
+++ b/cps-rest/pom.xml
@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.onap.cps</groupId>
         <artifactId>cps-parent</artifactId>
-        <version>0.0.1-SNAPSHOT</version>
+        <version>0.0.2-SNAPSHOT</version>
         <relativePath>../cps-parent/pom.xml</relativePath>
     </parent>
 
diff --git a/cps-rest/src/main/java/org/onap/cps/rest/controller/QueryRestController.java b/cps-rest/src/main/java/org/onap/cps/rest/controller/QueryRestController.java
new file mode 100644
index 0000000..a8816f0
--- /dev/null
+++ b/cps-rest/src/main/java/org/onap/cps/rest/controller/QueryRestController.java
@@ -0,0 +1,48 @@
+/*
+ *  ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation
+ *  ================================================================================
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+
+package org.onap.cps.rest.controller;
+
+import com.google.gson.Gson;
+import java.util.Collection;
+import javax.validation.Valid;
+import org.onap.cps.api.CpsQueryService;
+import org.onap.cps.rest.api.CpsQueryApi;
+import org.onap.cps.spi.model.DataNode;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("${rest.api.cps-base-path}")
+public class QueryRestController implements CpsQueryApi {
+
+    @Autowired
+    private CpsQueryService cpsQueryService;
+
+    @Override
+    public ResponseEntity<Object> getNodesByDataspaceAndAnchorAndCpsPath(final String dataspaceName,
+        final String anchorName, @Valid final String cpsPath) {
+        final Collection<DataNode> dataNodes =
+            cpsQueryService.queryDataNodes(dataspaceName, anchorName, cpsPath);
+        return new ResponseEntity<>(new Gson().toJson(dataNodes), HttpStatus.OK);
+    }
+}
diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/AdminRestControllerSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/AdminRestControllerSpec.groovy
index 926021e..ca99743 100755
--- a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/AdminRestControllerSpec.groovy
+++ b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/AdminRestControllerSpec.groovy
@@ -2,6 +2,7 @@
  *  ============LICENSE_START=======================================================
  *  Copyright (C) 2020 Pantheon.tech
  *  Modifications Copyright (C) 2020 Bell Canada. All rights reserved.
+ *  Copyright (C) 2021 Nordix Foundation
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -27,6 +28,7 @@
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post
 
 import org.modelmapper.ModelMapper
+import org.onap.cps.api.CpsQueryService
 import org.onap.cps.api.CpsAdminService
 import org.onap.cps.api.CpsDataService
 import org.onap.cps.api.CpsModuleService
@@ -60,6 +62,9 @@
     CpsDataService mockCpsDataService = Mock()
 
     @SpringBean
+    CpsQueryService mockCpsQueryService = Mock()
+
+    @SpringBean
     ModelMapper modelMapper = Mock()
 
     @Autowired
diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy
index cca94d1..b9b680d 100755
--- a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy
+++ b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy
@@ -28,6 +28,7 @@
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put
 
 import org.modelmapper.ModelMapper
+import org.onap.cps.api.CpsQueryService
 import org.onap.cps.api.CpsAdminService
 import org.onap.cps.api.CpsDataService
 import org.onap.cps.api.CpsModuleService
@@ -60,6 +61,9 @@
     CpsAdminService mockCpsAdminService = Mock()
 
     @SpringBean
+    CpsQueryService mockCpsQueryService = Mock()
+
+    @SpringBean
     ModelMapper modelMapper = Mock()
 
     @Autowired
diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/QueryRestControllerSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/QueryRestControllerSpec.groovy
new file mode 100644
index 0000000..4d9a558
--- /dev/null
+++ b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/QueryRestControllerSpec.groovy
@@ -0,0 +1,84 @@
+/*
+ *  ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation
+ *  ================================================================================
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+
+package org.onap.cps.rest.controller
+
+import com.google.common.collect.ImmutableMap
+import com.google.gson.Gson
+import org.modelmapper.ModelMapper
+import org.onap.cps.api.CpsAdminService
+import org.onap.cps.api.CpsDataService
+import org.onap.cps.api.CpsModuleService
+import org.onap.cps.api.CpsQueryService
+import org.onap.cps.spi.model.DataNode
+import org.onap.cps.spi.model.DataNodeBuilder
+import org.spockframework.spring.SpringBean
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.beans.factory.annotation.Value
+import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest
+import org.springframework.http.HttpStatus
+import org.springframework.test.web.servlet.MockMvc
+import spock.lang.Shared
+import spock.lang.Specification
+
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
+
+@WebMvcTest
+class QueryRestControllerSpec extends Specification {
+
+    @SpringBean
+    CpsDataService mockCpsDataService = Mock()
+
+    @SpringBean
+    CpsModuleService mockCpsModuleService = Mock()
+
+    @SpringBean
+    CpsAdminService mockCpsAdminService = Mock()
+
+    @SpringBean
+    CpsQueryService mockCpsQueryService = Mock()
+
+    @SpringBean
+    ModelMapper modelMapper = Mock()
+
+    @Autowired
+    MockMvc mvc
+
+    @Value('${rest.api.cps-base-path}')
+    def basePath
+
+    def 'Query data node by cps path for the given dataspace and anchor.'() {
+        given: 'service method returns a list containing a data node'
+            def dataspaceName = 'my_dataspace'
+            def anchorName = 'my_anchor'
+            def cpsPath = '/xpath/leaves[@leaf=\'value\']'
+            def dataNode = new DataNodeBuilder().withXpath("/xpath")
+                    .withLeaves(ImmutableMap.of("leaf", "value")).build()
+            ArrayList<DataNode> dataNodeList = new ArrayList();
+            dataNodeList.add(dataNode)
+            mockCpsQueryService.queryDataNodes(dataspaceName, anchorName, cpsPath) >> dataNodeList
+        and: 'the query endpoint'
+            def dataNodeEndpoint = "$basePath/v1/dataspaces/$dataspaceName/anchors/$anchorName/nodes/query"
+        when: 'query data nodes API is invoked'
+            def response = mvc.perform(get(dataNodeEndpoint).param('cps-path', cpsPath)).andReturn().response
+        then: 'the response contains the the datanode in json format'
+            response.status == HttpStatus.OK.value()
+            response.getContentAsString().contains(new Gson().toJson(dataNode))
+    }
+}
\ No newline at end of file
diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy
index 8b02d73..4e10e2c 100644
--- a/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy
+++ b/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy
@@ -1,6 +1,7 @@
 /*
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2020 Pantheon.tech
+ *  Copyright (C) 2021 Nordix Foundation
  *  ================================================================================
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -24,6 +25,7 @@
 import org.onap.cps.api.CpsAdminService
 import org.onap.cps.api.CpsDataService
 import org.onap.cps.api.CpsModuleService
+import org.onap.cps.api.CpsQueryService
 import org.onap.cps.spi.exceptions.AnchorAlreadyDefinedException
 import org.onap.cps.spi.exceptions.CpsException
 import org.onap.cps.spi.exceptions.DataInUseException
@@ -60,6 +62,9 @@
     CpsDataService mockCpsDataService = Mock()
 
     @SpringBean
+    CpsQueryService mockCpsQueryService = Mock()
+
+    @SpringBean
     ModelMapper modelMapper = Mock()
 
     @Autowired
diff --git a/cps-ri/pom.xml b/cps-ri/pom.xml
index 005fa27..fb1e6ad 100644
--- a/cps-ri/pom.xml
+++ b/cps-ri/pom.xml
@@ -5,7 +5,7 @@
     <parent>

         <groupId>org.onap.cps</groupId>

         <artifactId>cps-parent</artifactId>

-        <version>0.0.1-SNAPSHOT</version>

+        <version>0.0.2-SNAPSHOT</version>

         <relativePath>../cps-parent/pom.xml</relativePath>

     </parent>

 

diff --git a/cps-service/pom.xml b/cps-service/pom.xml
index fc4ca12..7225e43 100644
--- a/cps-service/pom.xml
+++ b/cps-service/pom.xml
@@ -5,7 +5,7 @@
   <parent>

     <groupId>org.onap.cps</groupId>

     <artifactId>cps-parent</artifactId>

-    <version>0.0.1-SNAPSHOT</version>

+    <version>0.0.2-SNAPSHOT</version>

     <relativePath>../cps-parent/pom.xml</relativePath>

   </parent>

 

diff --git a/cps-service/src/main/java/org/onap/cps/api/CpsQueryService.java b/cps-service/src/main/java/org/onap/cps/api/CpsQueryService.java
index a66e084..b432af8 100644
--- a/cps-service/src/main/java/org/onap/cps/api/CpsQueryService.java
+++ b/cps-service/src/main/java/org/onap/cps/api/CpsQueryService.java
@@ -19,9 +19,24 @@
 
 package org.onap.cps.api;
 
+import java.util.Collection;
+import org.checkerframework.checker.nullness.qual.NonNull;
+import org.onap.cps.spi.model.DataNode;
+
 /*
  * Query interface for handling cps queries.
  */
 public interface CpsQueryService {
 
+    /**
+     * Get data nodes for the given dataspace and anchor by cps path.
+     *
+     * @param dataspaceName          dataspace name
+     * @param anchorName             anchor name
+     * @param cpsPath                cps path
+     * @return a collection of data nodes
+     */
+    Collection<DataNode> queryDataNodes(@NonNull String dataspaceName, @NonNull String anchorName,
+        @NonNull String cpsPath);
+
 }
diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsQueryServiceImpl.java b/cps-service/src/main/java/org/onap/cps/api/impl/CpsQueryServiceImpl.java
new file mode 100644
index 0000000..63d0a0f
--- /dev/null
+++ b/cps-service/src/main/java/org/onap/cps/api/impl/CpsQueryServiceImpl.java
@@ -0,0 +1,40 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation
+ *  ================================================================================
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+
+package org.onap.cps.api.impl;
+
+import java.util.Collection;
+import org.onap.cps.api.CpsQueryService;
+import org.onap.cps.spi.CpsDataPersistenceService;
+import org.onap.cps.spi.model.DataNode;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CpsQueryServiceImpl implements CpsQueryService {
+
+    @Autowired
+    private CpsDataPersistenceService cpsDataPersistenceService;
+
+    @Override
+    public Collection<DataNode> queryDataNodes(final String dataspaceName, final String anchorName,
+        final String cpsPath) {
+        return cpsDataPersistenceService.queryDataNodes(dataspaceName, anchorName, cpsPath);
+    }
+}
\ No newline at end of file
diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsQueryServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsQueryServiceImplSpec.groovy
new file mode 100644
index 0000000..6e044b0
--- /dev/null
+++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsQueryServiceImplSpec.groovy
@@ -0,0 +1,44 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2021 Nordix Foundation
+ *  ================================================================================
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ *  SPDX-License-Identifier: Apache-2.0
+ *  ============LICENSE_END=========================================================
+ */
+
+package org.onap.cps.api.impl
+
+import org.onap.cps.spi.CpsDataPersistenceService
+import spock.lang.Specification
+
+class CpsQueryServiceImplSpec extends Specification {
+    def mockCpsDataPersistenceService = Mock(CpsDataPersistenceService)
+
+    def objectUnderTest = new CpsQueryServiceImpl()
+
+    def setup() {
+        objectUnderTest.cpsDataPersistenceService = mockCpsDataPersistenceService
+    }
+
+    def 'Query data nodes by cps path.'() {
+        given: 'a dataspace name, an anchor name and a cps path'
+            def dataspaceName = 'some dataspace'
+            def anchorName = 'some anchor'
+            def cpsPath = '/cps-path'
+        when: 'queryDataNodes is invoked'
+            objectUnderTest.queryDataNodes(dataspaceName, anchorName, cpsPath)
+        then: 'the persistence service is called once with the correct parameters'
+            1 * mockCpsDataPersistenceService.queryDataNodes(dataspaceName, anchorName, cpsPath)
+    }
+}
\ No newline at end of file
diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy
index 75c98a8..a24bd0a 100755
--- a/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy
@@ -106,7 +106,7 @@
         def dataNodeStored

         given: 'valid yang resource as name-to-content map'

             def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(

-                    'e2e/basic/cps-ran-inventory.yang')

+                    'e2e/basic/cps-ran-inventory@2021-01-28.yang')

             def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()

         and : 'a valid json is provided for the model'

             def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-ran-inventory-data.json')

@@ -122,18 +122,23 @@
                     { args -> dataNodeStored = args[2]}

         and: 'the size of the tree is correct'

             def cpsRanInventory = TestUtils.getFlattenMapByXpath(dataNodeStored)

-            assert  cpsRanInventory.size() == 3

+            assert  cpsRanInventory.size() == 4

         and: 'ran-inventory contains the correct child node'

             def ranInventory = cpsRanInventory.get('/ran-inventory')

-            def sliceProfilesList = cpsRanInventory.get('/ran-inventory/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']')

-            def pLMNIdList = cpsRanInventory.get('/ran-inventory/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']')

+            def ranSlices = cpsRanInventory.get('/ran-inventory/ran-slices[@rannfnssiid=\'14559ead-f4fe-4c1c-a94c-8015fad3ea35\']')

+            def sliceProfilesList = cpsRanInventory.get('/ran-inventory/ran-slices[@rannfnssiid=\'14559ead-f4fe-4c1c-a94c-8015fad3ea35\']/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']')

+            def pLMNIdList = cpsRanInventory.get('/ran-inventory/ran-slices[@rannfnssiid=\'14559ead-f4fe-4c1c-a94c-8015fad3ea35\']/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']')

             ranInventory.getChildDataNodes().size() == 1

-            ranInventory.getChildDataNodes().find( {it.xpath == sliceProfilesList.xpath})

+            ranInventory.getChildDataNodes().find( {it.xpath == ranSlices.xpath})

+        and: 'ranSlices contains the correct child node'

+            ranSlices.getChildDataNodes().size() == 1

+            ranSlices.getChildDataNodes().find( {it.xpath == sliceProfilesList.xpath})

         and: 'sliceProfilesList contains the correct child node'

             sliceProfilesList.getChildDataNodes().size() == 1

             sliceProfilesList.getChildDataNodes().find( {it.xpath == pLMNIdList.xpath})

-        and: 'pLMNIdList contains the no child nodes'

+        and: 'pLMNIdList contains no children'

             pLMNIdList.getChildDataNodes().size() == 0

+

     }

 

     def 'E2E RAN Schema Model.'(){

diff --git a/cps-service/src/test/resources/e2e/basic/cps-ran-inventory-data.json b/cps-service/src/test/resources/e2e/basic/cps-ran-inventory-data.json
index 1dbdab2..fb2efb1 100644
--- a/cps-service/src/test/resources/e2e/basic/cps-ran-inventory-data.json
+++ b/cps-service/src/test/resources/e2e/basic/cps-ran-inventory-data.json
@@ -1,31 +1,34 @@
 {
-"ran-inventory":{
-   "rannfnssiid": "14559ead-f4fe-4c1c-a94c-8015fad3ea35",
-   "subnetStatus": "active",
-   "nsstid": "2372a5dc-ee24-4a45-85f5-65103dfdc5b4",
-   "slicetype": "embb",
-   "isshareable": "Shareable",
-   "sliceProfilesList": [
-     {
-       "sliceProfileId": "f33a9dd8-ae51-4acf-8073-c9390c25f6f1",
-       "sNSSAI": "001-11000",
-       "maxNumberofUEs": 300,
-       "latency": 5,
-       "uLThptPerSlice": 40,
-       "dLThptPerSlice": 50,
-       "maxNumberofConns": 500,
-       "uEMobilityLevel": "FULLY MOBILITY",
-       "coverageAreaList": [
-         "Washington"
-       ],
-       "resourceSharingLevel": "Shareable",
-       "pLMNIdList": [
-         {
-           "mcc": "310",
-           "mnc": "410"
-         }
-       ]
-     }
-   ]
+  "cps-ran-inventory:ran-inventory":{
+    "ran-slices":[{
+      "rannfnssiid": "14559ead-f4fe-4c1c-a94c-8015fad3ea35",
+      "subnetStatus": "active",
+      "nsstid": "2372a5dc-ee24-4a45-85f5-65103dfdc5b4",
+      "slicetype": "embb",
+      "isshareable": "Shareable",
+      "sliceProfilesList": [
+        {
+          "sliceProfileId": "f33a9dd8-ae51-4acf-8073-c9390c25f6f1",
+          "sNSSAI": "001-11000",
+          "maxNumberofUEs": 300,
+          "latency": 5,
+          "uLThptPerSlice": 40,
+          "dLThptPerSlice": 50,
+          "maxNumberofConns": 500,
+          "uEMobilityLevel": "FULLY MOBILITY",
+          "coverageAreaList": [
+            "Washington"
+          ],
+          "resourceSharingLevel": "Shareable",
+          "pLMNIdList": [
+            {
+              "mcc": "310",
+              "mnc": "410"
+            }
+          ]
+        }
+      ]
+    }
+    ]
   }
 }
\ No newline at end of file
diff --git a/cps-service/src/test/resources/e2e/basic/cps-ran-inventory.yang b/cps-service/src/test/resources/e2e/basic/cps-ran-inventory@2021-01-28.yang
similarity index 61%
rename from cps-service/src/test/resources/e2e/basic/cps-ran-inventory.yang
rename to cps-service/src/test/resources/e2e/basic/cps-ran-inventory@2021-01-28.yang
index 0e504ca..c16a682 100644
--- a/cps-service/src/test/resources/e2e/basic/cps-ran-inventory.yang
+++ b/cps-service/src/test/resources/e2e/basic/cps-ran-inventory@2021-01-28.yang
@@ -57,46 +57,46 @@
   }
 
     grouping SliceProfile{
-  		leaf sliceProfileId{
-  			type string;
-  			mandatory true;
-  			description "slice profile id";
-  		}
-  		leaf sNSSAI{
-  			type string;
-  			mandatory false;
-  			description "The S-NSSAI may include both the SST and SD fields (in which case the S-NSSAI length is 32 bits in total), or the S-NSSAI may just include the SST field (in which case the S-NSSAI length is 8 bits only)";
-  		}
-  		leaf maxNumberofUEs{
-  			type int64 { range "0..68719476735"; }
-        		mandatory false;
-          		description "maximum number of UEs";
-  		}
-  		leaf latency{
-  			type int64 { range "0..68719476735"; }
-        		mandatory false;
-          		description "latency of the slice requested by the operator";
-  		}
-  		leaf uLThptPerSlice{
-  			type int64 { range "0..68719476735"; }
-        		mandatory false;
-          		description "uplink throughput of the slice requested by the operator";
-  		}
-  		leaf dLThptPerSlice{
-  			type int64 { range "0..68719476735"; }
-        		mandatory false;
-          		description "downlink throughput  of the slice requested by the operator";
-  		}
-  		leaf maxNumberofConns{
-  			type int64 { range "0..68719476735"; }
-        		mandatory false;
-          		description "maximum number of connections to be served by the slice";
-  		}
-  		leaf uEMobilityLevel{
-  			type string;
-  			mandatory false;
-  			description "Mobility level of the UE";
-  		}
+                leaf sliceProfileId{
+                        type string;
+                        mandatory true;
+                        description "slice profile id";
+                }
+                leaf sNSSAI{
+                        type string;
+                        mandatory false;
+                        description "The S-NSSAI may include both the SST and SD fields (in which case the S-NSSAI length is 32 bits in total), or the S-NSSAI may just include the SST field (in which case the S-NSSAI length is 8 bits only)";
+                }
+                leaf maxNumberofUEs{
+                        type int64 { range "0..68719476735"; }
+                        mandatory false;
+                        description "maximum number of UEs";
+                }
+                leaf latency{
+                        type int64 { range "0..68719476735"; }
+                        mandatory false;
+                        description "latency of the slice requested by the operator";
+                }
+                leaf uLThptPerSlice{
+                        type int64 { range "0..68719476735"; }
+                        mandatory false;
+                        description "uplink throughput of the slice requested by the operator";
+                }
+                leaf dLThptPerSlice{
+                        type int64 { range "0..68719476735"; }
+                        mandatory false;
+                        description "downlink throughput  of the slice requested by the operator";
+                }
+                leaf maxNumberofConns{
+                        type int64 { range "0..68719476735"; }
+                        mandatory false;
+                        description "maximum number of connections to be served by the slice";
+                }
+                leaf uEMobilityLevel{
+                        type string;
+                        mandatory false;
+                        description "Mobility level of the UE";
+                }
     leaf resourceSharingLevel{
       type string;
       description "Resource sharing level";
@@ -117,7 +117,7 @@
       uses PLMNId;
     }
 
-  	}
+        }
 
     grouping PLMNId {
     description
@@ -141,17 +141,17 @@
     }
   }
 
-    container ran-inventory{
+    grouping ran-slices{
       leaf rannfnssiid{
       description "NSSI of a RAN network function";
       type string;
     }
 
     list sliceProfilesList{
-  		uses SliceProfile;
-  		key "sliceProfileId";
-  		description "List of slice profiles supported by the ran slice";
-  	}
+                uses SliceProfile;
+                key "sliceProfileId";
+                description "List of slice profiles supported by the ran slice";
+        }
 
     leaf subnetStatus{
       description "status of  RAN NF NSSI";
@@ -173,4 +173,11 @@
       type string;
     }
     }
+    container ran-inventory{
+    list ran-slices{
+        uses ran-slices;
+        key "rannfnssiid";
+        description "List of RAN Slices";
+        }
+    }
     }
diff --git a/pom.xml b/pom.xml
index 22742a3..de96249 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,12 +24,12 @@
     <parent>

         <groupId>org.onap.oparent</groupId>

         <artifactId>oparent</artifactId>

-        <version>3.1.0</version>

+        <version>3.2.0</version>

     </parent>

 

     <groupId>org.onap.cps</groupId>

     <artifactId>cps-aggregator</artifactId>

-    <version>0.0.1-SNAPSHOT</version>

+    <version>0.0.2-SNAPSHOT</version>

     <packaging>pom</packaging>

 

     <name>cps</name>

diff --git a/releases/0.0.1-container.yaml b/releases/0.0.1-container.yaml
new file mode 100644
index 0000000..d071019
--- /dev/null
+++ b/releases/0.0.1-container.yaml
@@ -0,0 +1,8 @@
+distribution_type: container
+container_release_tag: 0.0.1
+project: cps
+log_dir: cps-maven-docker-stage-master/109/
+ref: c6b259cc6706585bb6123de362f57a895304c894
+containers:
+  - name: 'cps-and-nf-proxy'
+    version: '0.0.1'
\ No newline at end of file
diff --git a/releases/0.0.1.yaml b/releases/0.0.1.yaml
new file mode 100644
index 0000000..6cca9a3
--- /dev/null
+++ b/releases/0.0.1.yaml
@@ -0,0 +1,4 @@
+distribution_type: maven
+log_dir: cps-maven-stage-master/109/
+project: cps
+version: 0.0.1
\ No newline at end of file
diff --git a/spotbugs/pom.xml b/spotbugs/pom.xml
index 133c4f7..2a0788e 100644
--- a/spotbugs/pom.xml
+++ b/spotbugs/pom.xml
@@ -5,7 +5,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.onap.cps</groupId>
     <artifactId>spotbugs</artifactId>
-    <version>0.0.1-SNAPSHOT</version>
+    <version>0.0.2-SNAPSHOT</version>
 
     <properties>
         <nexusproxy>https://nexus.onap.org</nexusproxy>
diff --git a/version.properties b/version.properties
index 12156a9..304745a 100644
--- a/version.properties
+++ b/version.properties
@@ -1,9 +1,9 @@
 # Note that these variables cannot be structured (e.g. : version.release or version.snapshot etc... )
 # because they are used in Jenkins, whose plug-in doesn't support this
 
-major=1
+major=0
 minor=0
-patch=0
+patch=2
 
 base_version=${major}.${minor}.${patch}