RAN Slice YANG Model and Associated Feature code 01/111301/2
authorSandeep Shah <sandeeplinux1068@gmail.com>
Sun, 16 Aug 2020 01:21:18 +0000 (20:21 -0500)
committerSandeep Shah <sandeeplinux1068@gmail.com>
Tue, 18 Aug 2020 02:45:07 +0000 (21:45 -0500)
This includes YANG models to be used for RAN Slice
use case/POC in Gulian, and associated ranSlice
Karaf feature code.

Issue-ID: CCSDK-2661
SIgned-off-by: SandeepLinux <Sandeep.Shah@ibm.com>
Change-Id: I75ab8860c67bd25b7fdbcb5da734d705bfdce1b6

31 files changed:
sdnr/northbound/pom.xml
sdnr/northbound/ranSlice/feature/pom.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/installer/pom.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/installer/src/assembly/assemble_mvnrepo_zip.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/model/pom.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/model/src/main/yang/ran-network@2020-08-06.yang [new file with mode: 0644]
sdnr/northbound/ranSlice/model/src/main/yang/ran-slice-api@2020-08-06.yang [new file with mode: 0644]
sdnr/northbound/ranSlice/pom.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/derby.log [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/pom.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceClient.java [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceProvider.java [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceResponseCode.java [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceRpcInvocationException.java [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/main/resources/OSGI-INF/blueprint/impl-blueprint.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceProviderTest.java [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/TestRANSliceRpcInvocationException.java [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/graph.versions [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_activateRANSliceInstance.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configNotification.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureCU.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureDU.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureNearRTRIC.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureRANSliceInstance.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_deactivateRANSliceInstance.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_determineRANSliceResources.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_instantiateRANSlice.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_terminateRANSliceInstance.xml [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/resources/simplelogger.properties [new file with mode: 0644]
sdnr/northbound/ranSlice/provider/src/test/resources/svclogic.properties [new file with mode: 0644]

index 311e4da..52ccbf7 100644 (file)
@@ -45,6 +45,7 @@
         <module>oofpcipoc</module>
         <module>a1Adapter</module>
         <module>CMNotify</module>
+        <module>ranSlice</module>
         <module>features</module>
     </modules>
 </project>
diff --git a/sdnr/northbound/ranSlice/feature/pom.xml b/sdnr/northbound/ranSlice/feature/pom.xml
new file mode 100644 (file)
index 0000000..fef1ece
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk features
+  ~ ================================================================================
+  ~ Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+  ~ ================================================================================
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~ ============LICENSE_END=======================================================
+  ~
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>single-feature-parent</artifactId>
+        <version>2.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.northbound</groupId>
+    <artifactId>ranSlice-feature</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>feature</packaging>
+
+    <name>ccsdk-features :: sdnr-northbound :: ${project.artifactId}</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ranSlice-provider</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/sdnr/northbound/ranSlice/installer/pom.xml b/sdnr/northbound/ranSlice/installer/pom.xml
new file mode 100644 (file)
index 0000000..c454d70
--- /dev/null
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk features
+  ~ ================================================================================
+  ~ Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+  ~ ================================================================================
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~ ============LICENSE_END=======================================================
+  ~
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>odlparent-lite</artifactId>
+        <version>2.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.northbound</groupId>
+    <artifactId>ranSlice-installer</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <name>ccsdk-features :: sdnr-northbound :: ${project.artifactId}</name>
+
+    <properties>
+        <application.name>ranSlice</application.name>
+        <include.transitive.dependencies>false</include.transitive.dependencies>
+    </properties>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>org.onap.ccsdk.features.sdnr.northbound</groupId>
+            <artifactId>${application.name}-feature</artifactId>
+            <version>${project.version}</version>
+            <type>xml</type>
+            <classifier>features</classifier>
+            <exclusions>
+                <exclusion>
+                    <groupId>*</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>ranSlice-provider</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>maven-repo-zip</id>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                        <phase>package</phase>
+                        <configuration>
+                            <attach>true</attach>
+                            <finalName>stage/${application.name}-${project.version}</finalName>
+                            <descriptors>
+                                <descriptor>src/assembly/assemble_mvnrepo_zip.xml</descriptor>
+                            </descriptors>
+                            <appendAssemblyId>true</appendAssemblyId>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <phase>prepare-package</phase>
+                        <configuration>
+                            <transitive>false</transitive>
+                            <outputDirectory>${project.build.directory}/assembly/system</outputDirectory>
+                            <overWriteReleases>false</overWriteReleases>
+                            <overWriteSnapshots>true</overWriteSnapshots>
+                            <overWriteIfNewer>true</overWriteIfNewer>
+                            <useRepositoryLayout>true</useRepositoryLayout>
+                            <addParentPoms>false</addParentPoms>
+                            <copyPom>false</copyPom>
+                            <includeArtifactIds>ranSlice-model,ranSlice-provider,ranSlice-feature</includeArtifactIds>
+                            <scope>provided</scope>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/sdnr/northbound/ranSlice/installer/src/assembly/assemble_mvnrepo_zip.xml b/sdnr/northbound/ranSlice/installer/src/assembly/assemble_mvnrepo_zip.xml
new file mode 100644 (file)
index 0000000..dfe5060
--- /dev/null
@@ -0,0 +1,47 @@
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk features
+  ~ ================================================================================
+  ~ Copyright (C) 2017-2020 AT&T Intellectual Property. All rights reserved.
+  ~ ================================================================================
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~ ============LICENSE_END=======================================================
+  ~
+  -->
+
+<!-- Defines how we build the .zip file which is our distribution. -->
+
+<assembly
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+    <id>repo</id>
+    <formats>
+        <format>zip</format>
+    </formats>
+
+    <!--  we want "system" and related files right at the root level
+          as this file is suppose to be unzip on top of a karaf
+          distro. -->
+    <includeBaseDirectory>false</includeBaseDirectory>
+
+    <fileSets>
+        <fileSet>
+            <directory>target/assembly/</directory>
+            <outputDirectory>.</outputDirectory>
+            <excludes>
+            </excludes>
+        </fileSet>
+    </fileSets>
+
+</assembly>
diff --git a/sdnr/northbound/ranSlice/model/pom.xml b/sdnr/northbound/ranSlice/model/pom.xml
new file mode 100644 (file)
index 0000000..84d3b50
--- /dev/null
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk features
+  ~ ================================================================================
+  ~ Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+  ~ ================================================================================
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~ ============LICENSE_END=======================================================
+  ~
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>2.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.northbound</groupId>
+    <artifactId>ranSlice-model</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+
+    <name>ccsdk-features :: sdnr-northbound :: ${project.artifactId}</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.opendaylight.mdsal.binding.model.ietf</groupId>
+            <artifactId>rfc6991</artifactId>
+        </dependency>
+    </dependencies>
+
+
+</project>
diff --git a/sdnr/northbound/ranSlice/model/src/main/yang/ran-network@2020-08-06.yang b/sdnr/northbound/ranSlice/model/src/main/yang/ran-network@2020-08-06.yang
new file mode 100644 (file)
index 0000000..f45bd7c
--- /dev/null
@@ -0,0 +1,1880 @@
+module ran-network {
+  yang-version 1.1;
+  namespace "org:onap:ccsdk:features:sdnr:northbound:ran-network";
+  prefix rn;
+
+  import ietf-inet-types {
+    prefix inet;
+  }
+  import ietf-yang-types {
+    prefix yang;
+  }
+
+  organization
+    "Open Network Automation Platform - ONAP
+     <https://www.onap.org>";
+  contact
+    "Editors:
+       Sandeep Shah
+       <mailto:sandeep.shah@ibm.com>
+
+       Swaminathan Seetharaman
+       <mailto:swaminathan.seetharaman@wipro.com>";
+  description
+    "This module contains a collection of YANG definitions for managing
+     radio access network (RAN) managed network functions.
+     This YANG model is used solely for POC's in the ONAP and O-RAN communities
+
+     Copyright 2020 the O-RAN Alliance.
+
+     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.";
+
+  revision 2020-08-06 {
+    description
+      "RAN Network YANG Model for ONAP/O-RAN POC";
+    reference
+      "https://wiki.onap.org/display/DW/E2E+Network+Slicing+Use+Case+in+R7+Guilin";
+  }
+
+  typedef usageState {
+    type enumeration {
+      enum IDLE {
+        description
+          "TODO";
+      }
+      enum ACTIVE {
+        description
+          "TODO";
+      }
+      enum BUSY {
+        description
+          "TODO";
+      }
+    }
+    description
+      "It describes whether or not the resource is actively in
+       use at a specific instant, and if so, whether or not it has spare
+       capacity for additional users at that instant. The value is READ-ONLY.";
+    reference
+      "ITU T Recommendation X.731";
+  }
+
+  typedef Mcc {
+    type string;
+    description
+      "The mobile country code consists of three decimal digits,
+       The first digit of the mobile country code identifies the geographic
+       region (the digits 1 and 8 are not used):";
+    reference
+      "3GPP TS 23.003 subclause 2.2 and 12.1";
+  }
+
+  typedef Mnc {
+    type string;
+    description
+      "The mobile network code consists of two or three
+       decimal digits (for example: MNC of 001 is not the same as MNC of 01)";
+    reference
+      "3GPP TS 23.003 subclause 2.2 and 12.1";
+  }
+
+  typedef Nci {
+    type string;
+    description
+      "NR Cell Identity. The NCI shall be of fixed length of 36 bits
+       and shall be coded using full hexadecimal representation.
+       The exact coding of the NCI is the responsibility of each PLMN operator";
+    reference
+      "TS 23.003";
+  }
+
+  typedef OperationalState {
+    type enumeration {
+      enum DISABLED {
+        value 0;
+        description
+          "The resource is totally inoperable.";
+      }
+      enum ENABLED {
+        value 1;
+        description
+          "The resource is partially or fully operable.";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "3GPP TS 28.625 and ITU-T X.731";
+  }
+
+  typedef AdministrativeState {
+    type enumeration {
+      enum LOCKED {
+        value 0;
+        description
+          "The resource is administratively prohibited from performing
+           services for its users.";
+      }
+      enum UNLOCKED {
+        value 1;
+        description
+          "The resource is administratively permitted to perform
+           services for its users. This is independent of its inherent
+           operability.";
+      }
+      enum SHUTTINGDOWN {
+        value 2;
+        description
+          "Use of the resource is administratively permitted to
+           existing instances of use only. While the system remains in
+           the shutting down state the manager or the managed element
+           may at any time cause the resource to transition to the
+           locked state.";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "3GPP TS 28.625 and ITU-T X.731";
+  }
+
+  typedef AvailabilityStatus {
+    type enumeration {
+      enum IN_TEST {
+        description
+          "TODO";
+      }
+      enum FAILED {
+        description
+          "TODO";
+      }
+      enum POWER_OFF {
+        description
+          "TODO";
+      }
+      enum OFF_LINE {
+        description
+          "TODO";
+      }
+      enum OFF_DUTY {
+        description
+          "TODO";
+      }
+      enum DEPENDENCY {
+        description
+          "TODO";
+      }
+      enum DEGRADED {
+        description
+          "TODO";
+      }
+      enum NOT_INSTALLED {
+        description
+          "TODO";
+      }
+      enum LOG_FULL {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef CellState {
+    type enumeration {
+      enum IDLE {
+        description
+          "TODO";
+      }
+      enum INACTIVE {
+        description
+          "TODO";
+      }
+      enum ACTIVE {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef SNssai {
+    type uint32;
+    description
+      "Single Network Slice Selection Assistance Information.";
+    reference
+      "TS 23.501 clause 5.15.2";
+  }
+
+  typedef Sst {
+    type uint8;
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef Nrpci {
+    type uint32;
+    description
+      "Physical Cell Identity (PCI) of the NR cell.";
+    reference
+      "TS 36.211 subclause 6.11";
+  }
+
+  typedef Tac {
+    type int32 {
+      range "0..16777215";
+    }
+    description
+      "Tracking Area Code";
+    reference
+      "TS 23.003 clause 19.4.2.3";
+  }
+
+  typedef AmfRegionId {
+    type string;
+    description
+      "";
+    reference
+      "clause 2.10.1 of 3GPP TS 23.003";
+  }
+
+  typedef AmfSetId {
+    type string;
+    description
+      "";
+    reference
+      "clause 2.10.1 of 3GPP TS 23.003";
+  }
+
+  typedef AmfPointer {
+    type string;
+    description
+      "";
+    reference
+      "clause 2.10.1 of 3GPP TS 23.003";
+  }
+
+  // type definitions especially for core NFs
+
+  typedef NfType {
+    type enumeration {
+      enum NRF {
+        description
+          "TODO";
+      }
+      enum UDM {
+        description
+          "TODO";
+      }
+      enum AMF {
+        description
+          "TODO";
+      }
+      enum SMF {
+        description
+          "TODO";
+      }
+      enum AUSF {
+        description
+          "TODO";
+      }
+      enum NEF {
+        description
+          "TODO";
+      }
+      enum PCF {
+        description
+          "TODO";
+      }
+      enum SMSF {
+        description
+          "TODO";
+      }
+      enum NSSF {
+        description
+          "TODO";
+      }
+      enum UDR {
+        description
+          "TODO";
+      }
+      enum LMF {
+        description
+          "TODO";
+      }
+      enum GMLC {
+        description
+          "TODO";
+      }
+      enum 5G_EIR {
+        description
+          "TODO";
+      }
+      enum SEPP {
+        description
+          "TODO";
+      }
+      enum UPF {
+        description
+          "TODO";
+      }
+      enum N3IWF {
+        description
+          "TODO";
+      }
+      enum AF {
+        description
+          "TODO";
+      }
+      enum UDSF {
+        description
+          "TODO";
+      }
+      enum BSF {
+        description
+          "TODO";
+      }
+      enum CHF {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+  }
+
+  typedef NotificationType {
+    type enumeration {
+      enum N1_MESSAGES {
+        description
+          "TODO";
+      }
+      enum N2_INFORMATION {
+        description
+          "TODO";
+      }
+      enum LOCATION_NOTIFICATION {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+  }
+
+  typedef Load {
+    type uint8 {
+      range "0..100";
+    }
+    description
+      "Latest known load information of the NF, percentage ";
+  }
+
+  typedef N1MessageClass {
+    type enumeration {
+      enum 5GMM {
+        description
+          "TODO";
+      }
+      enum SM {
+        description
+          "TODO";
+      }
+      enum LPP {
+        description
+          "TODO";
+      }
+      enum SMS {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+  }
+
+  typedef N2InformationClass {
+    type enumeration {
+      enum SM {
+        description
+          "TODO";
+      }
+      enum NRPPA {
+        description
+          "TODO";
+      }
+      enum PWS {
+        description
+          "TODO";
+      }
+      enum PWS_BCAL {
+        description
+          "TODO";
+      }
+      enum PWS_RF {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef NsiId {
+    type string;
+    description
+      "TODO";
+  }
+
+  typedef UeMobilityLevel {
+    type enumeration {
+      enum STATIONARY {
+        description
+          "TODO";
+      }
+      enum NOMADIC {
+        description
+          "TODO";
+      }
+      enum RESTRICTED_MOBILITY {
+        description
+          "TODO";
+      }
+      enum FULLY_MOBILITY {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef ResourceSharingLevel {
+    type enumeration {
+      enum SHARED {
+        description
+          "TODO";
+      }
+      enum NOT_SHARED {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef TxDirection {
+    type enumeration {
+      enum DL {
+        description
+          "TODO";
+      }
+      enum UL {
+        description
+          "TODO";
+      }
+      enum DL_AND_UL {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef DistinguishedName { // TODO is this equivalent to TS 32.300 ?
+    type string;
+    description
+      "Represents the international standard for the representation
+       of Distinguished Name (RFC 4512).
+       The format of the DistinguishedName REGEX is:
+       {AttributeType = AttributeValue}
+
+       AttributeType consists of alphanumeric and hyphen (OIDs not allowed).
+       All other characters are restricted.
+       The Attribute value cannot contain control characters or the
+       following characters : \\ > < ; \" + , (Comma) and White space
+       The Attribute value can contain the following characters if they
+       are excaped : \\ > < ; \" + , (Comma) and White space
+       The Attribute value can contain control characters if its an escaped
+       double digit hex number.
+       Examples could be
+       UID=nobody@example.com,DC=example,DC=com
+       CN=John Smith,OU=Sales,O=ACME Limited,L=Moab,ST=Utah,C=US";
+    reference
+      "RFC 4512 Lightweight Directory Access Protocol (LDAP):
+             Directory Information Models";
+  } // recheck regexp it doesn't handle posix [:cntrl:]
+
+  typedef QOffsetRange {
+    type int8;
+    units "dB";
+    description
+      "TODO";
+    reference
+      "TODO";
+  }
+
+  typedef QuotaType {
+    type enumeration {
+      enum STRICT {
+        description
+          "TODO";
+      }
+      enum FLOAT {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+  }
+
+  typedef CyclicPrefix {
+    type enumeration {
+      enum NORMAL {
+        description
+          "TODO";
+      }
+      enum EXTENDED {
+        description
+          "TODO";
+      }
+    }
+    description
+      "TODO";
+  }
+
+  grouping PLMNInfo {
+    description
+      "The PLMNInfo data type define a S-NSSAI member in a specific PLMNId, and it have
+       two attributes PLMNId and S-NSSAI (PLMNId, S-NSSAI). The PLMNId represents a data type that
+       is comprised of mcc (mobile country code) and mnc (mobile network code), (See TS 23.003
+       subclause 2.2 and 12.1) and S-NSSAI represents an data type, that is comprised of an SST
+       (Slice/Service type) and an optional SD (Slice Differentiator) field, (See TS 23.003 [13]).";
+    uses PLMNId;
+    leaf sNssai {
+      type SNssai;
+      description
+        "TODO";
+    }
+  }
+
+  grouping ManagedNFProfile {
+    description
+      "Defines profile for managed NF";
+    reference
+      "3GPP TS 23.501";
+    leaf idx {
+      type uint32;
+      description
+        "TODO";
+      reference
+        "3GPP TS 23.501";
+    }
+    leaf nfInstanceID {
+      type yang:uuid;
+      config false;
+      mandatory true;
+      description
+        "This parameter defines profile for managed NF.
+         The format of the NF Instance ID shall be a
+         Universally Unique Identifier (UUID) version 4,
+         as described in IETF RFC 4122 ";
+    }
+    leaf-list nfType {
+      type NfType;
+      config false;
+      min-elements 1;
+      description
+        "Type of the Network Function";
+    }
+    leaf hostAddr {
+      type inet:host;
+      mandatory true;
+      description
+        "Host address of a NF";
+    }
+    leaf authzInfo {
+      type string;
+      description
+        "This parameter defines NF Specific Service authorization
+         information. It shall include the NF type (s) and NF realms/origins
+         allowed to consume NF Service(s) of NF Service Producer.";
+      reference
+        "See TS 23.501";
+    }
+    leaf location {
+      type string;
+      description
+        "Information about the location of the NF instance
+         (e.g. geographic location, data center) defined by operator";
+      reference
+        "TS 29.510";
+    }
+    leaf capacity {
+      type uint16;
+      mandatory true;
+      description
+        "This parameter defines static capacity information
+         in the range of 0-65535, expressed as a weight relative to other
+         NF instances of the same type; if capacity is also present in the
+         nfServiceList parameters, those will have precedence over this value.";
+      reference
+        "TS 29.510";
+    }
+    leaf nFSrvGroupId {
+      type string;
+      description
+        "This parameter defines identity of the group that is
+         served by the NF instance.
+         May be config false or true depending on the ManagedFunction.
+         Config=true for Udrinfo. Config=false for UdmInfo and AusfInfo.
+         Shall be present if ../nfType = UDM or AUSF or UDR. ";
+      reference
+        "TS 29.510";
+    }
+    leaf-list supportedDataSetIds {
+      type enumeration {
+        enum SUBSCRIPTION {
+          description
+            "TODO";
+        }
+        enum POLICY {
+          description
+            "TODO";
+        }
+        enum EXPOSURE {
+          description
+            "TODO";
+        }
+        enum APPLICATION {
+          description
+            "TODO";
+        }
+      }
+      description
+        "List of supported data sets in the UDR instance.
+         May be present if ../nfType = UDR";
+      reference
+        "TS 29.510";
+    }
+    leaf-list smfServingAreas {
+      type string;
+      description
+        "Defines the SMF service area(s) the UPF can serve.
+         Shall be present if ../nfType = UPF";
+      reference
+        "TS 29.510";
+    }
+    leaf priority {
+      type uint16;
+      description
+        "This parameter defines Priority (relative to other NFs
+         of the same type) in the range of 0-65535, to be used for NF selection;
+         lower values indicate a higher priority. If priority is also present
+         in the nfServiceList parameters, those will have precedence over
+         this value. Shall be present if ../nfType = AMF ";
+      reference
+        "TS 29.510";
+    }
+  }
+
+  grouping SAP {
+    description
+      "Service access point.";
+    reference
+      "TS 28.622";
+    leaf host {
+      type inet:host;
+      mandatory true;
+      description
+        "TODO";
+    }
+    leaf port {
+      type inet:port-number;
+      mandatory true;
+      description
+        "TODO";
+    }
+  }
+
+  grouping PLMNId {
+    description
+      "TODO";
+    reference
+      "TS 23.658";
+    leaf mcc {
+      type Mcc;
+      mandatory true;
+      description
+        "TODO";
+    }
+    leaf mnc {
+      type Mnc;
+      mandatory true;
+      description
+        "TODO";
+    }
+  }
+
+  grouping AmfIdentifier {
+    description
+      "The AMFI is constructed from an AMF Region ID,
+       an AMF Set ID and an AMF Pointer.
+       The AMF Region ID identifies the region,
+       the AMF Set ID uniquely identifies the AMF Set within the AMF Region, and
+       the AMF Pointer uniquely identifies the AMF within the AMF Set. ";
+    leaf amfRegionId {
+      type AmfRegionId;
+      description
+        "TODO";
+    }
+    leaf amfSetId {
+      type AmfSetId;
+      description
+        "TODO";
+    }
+    leaf amfPointer {
+      type AmfPointer;
+      description
+        "TODO";
+    }
+  }
+
+  grouping DefaultNotificationSubscription {
+    description
+      "TODO";
+    leaf notificationType {
+      type NotificationType;
+      description
+        "TODO";
+    }
+    leaf callbackUri {
+      type inet:uri;
+      description
+        "TODO";
+    }
+    leaf n1MessageClass {
+      type N1MessageClass;
+      description
+        "TODO";
+    }
+    leaf n2InformationClass {
+      type N2InformationClass;
+      description
+        "TODO";
+    }
+  }
+
+  grouping Ipv4AddressRange {
+    description
+      "TODO";
+    leaf start {
+      type inet:ipv4-address;
+      description
+        "TODO";
+    }
+    leaf end {
+      type inet:ipv4-address;
+      description
+        "TODO";
+    }
+  }
+
+  grouping Ipv6PrefixRange {
+    description
+      "TODO";
+    leaf start {
+      type inet:ipv6-prefix;
+      description
+        "TODO";
+    }
+    leaf end {
+      type inet:ipv6-prefix;
+      description
+        "TODO";
+    }
+  }
+
+  grouping AddressWithVlan {
+    description
+      "TODO";
+    leaf ipAddress {
+      type inet:ip-address;
+      description
+        "TODO";
+    }
+    leaf vlanId {
+      type uint16;
+      description
+        "TODO";
+    }
+  }
+
+  grouping ManagedElementGroup {
+    description
+      "Abstract class representing telecommunications resources.";
+    leaf dnPrefix {
+      type DistinguishedName;
+      description
+        "Provides naming context and splits the DN into a DN Prefix and Local DN";
+    }
+    leaf userLabel {
+      type string;
+      description
+        "A user-friendly name of this object.";
+    }
+    leaf locationName {
+      type string;
+      config false;
+      description
+        "The physical location (e.g. an address) of an entity";
+    }
+    leaf-list managedBy {
+      type DistinguishedName;
+      config false;
+      description
+        "Relates to the role played by ManagementSystem";
+    }
+    leaf-list managedElementTypeList {
+      type string;
+      config false;
+      min-elements 1;
+      description
+        "The type of functionality provided by the ManagedElement.
+         It may represent one ME functionality or a combination of
+         Two examples of allowed values are:
+         -  NodeB;
+         -  HLR, VLR.";
+    }
+  } // Managed Element grouping
+
+  grouping NearRTRICGroup {
+    description
+      "Abstract class representing Near RT RIC.";
+    leaf near-rt-ric-url {
+      type inet:uri;
+      description
+        "URL for the near RT RIC. String representing IP addr:port";
+    }
+    leaf dnPrefix {
+      type DistinguishedName;
+      description
+        "Provides naming context and splits the DN into a DN Prefix and Local DN";
+    }
+    leaf userLabel {
+      type string;
+      description
+        "A user-friendly name of this object.";
+    }
+    leaf locationName {
+      type string;
+      config false;
+      description
+        "The physical location (e.g. an address) of an entity";
+    }
+    leaf-list managedBy {
+      type DistinguishedName;
+      config false;
+      description
+        "Relates to the role played by ManagementSystem";
+    }
+  } // Near RT RIC grouping
+
+  grouping GNBDUFunctionGroup {
+    description
+      "Represents the GNBDUFunction IOC.";
+    reference
+      "3GPP TS 28.541";
+    leaf gNBId {
+      type int64 {
+        range "0..4294967295";
+      }
+      config false;
+      mandatory true;
+      description
+        "Identifies a gNB within a PLMN. The gNB Identifier (gNB ID)
+         is part of the NR Cell Identifier (NCI) of the gNB cells.";
+      reference
+        "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+    }
+    leaf gNBIdLength {
+      type int32 {
+        range "22..32";
+      }
+      mandatory true;
+      description
+        "Indicates the number of bits for encoding the gNB ID.";
+      reference
+        "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+    }
+    leaf gNBDUId {
+      type int64 {
+        range "0..68719476735";
+      }
+      mandatory true;
+      description
+        "Uniquely identifies the DU at least within a gNB.";
+      reference
+        "3GPP TS 38.473";
+    }
+    leaf gNBDUName {
+      type string {
+        length "1..150";
+      }
+      description
+        "Identifies the Distributed Unit of an NR node";
+      reference
+        "3GPP TS 38.473";
+    }
+    leaf aggressorSetID {
+      type uint32 {
+        range "0..4194304";
+      }
+      config false;
+      description
+        "Indicates the associated aggressor gNB Set ID of the cell
+         Valid when Remote Interference Management function is supported.";
+      reference
+        "3GPP TS 38.211 subclause 7.4.1.6";
+    }
+    leaf victimSetID {
+      type uint32 {
+        range "0..4194304";
+      }
+      config false;
+      description
+        "Indicates the associated victim gNB Set ID of the cell
+         Valid when Remote Interference Management function is supported.";
+      reference
+        "3GPP TS 38.211 subclause 7.4.1.6";
+    }
+  }
+
+  grouping NRCellDUGroup {
+    description
+      "Represents the NRCellDU IOC.";
+    reference
+      "3GPP TS 28.541";
+    uses RRMPolicy_Group;
+    leaf cellLocalId {
+      type int32 {
+        range "0..16383";
+      }
+      mandatory true;
+      description
+        "Identifies an NR cell of a gNB. Together with the
+         corresponding gNB identifier in forms the NR Cell Identity (NCI).";
+      reference
+        "NCI in 3GPP TS 38.300";
+    }
+    leaf operationalState {
+      type OperationalState;
+      config false;
+      description
+        "Operational state of the NRCellDU instance. Indicates
+         whether the resource is installed and partially or fully operable
+         (ENABLED) or the resource is not installed or not operable
+         (DISABLED).";
+    }
+    leaf administrativeState {
+      type AdministrativeState;
+      default "LOCKED";
+      description
+        "Administrative state of the NRCellDU. Indicates the
+         permission to use or prohibition against using the cell, imposed
+         through the OAM services.";
+    }
+    leaf cellState {
+      type CellState;
+      config false;
+      description
+        "Cell state of the NRCellDU instance. Indicates whether the
+         cell is not currently in use (IDLE), or currently in use but not
+         configured to carry traffic (INACTIVE), or currently in use and is
+         configured to carry traffic (ACTIVE).";
+    }
+    list pLMNInfoList {
+      key "mcc mnc";
+      min-elements 1;
+      description
+        "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that
+         can be served by the NR cell, and which S-NSSAIs that can be supported by the NR cell for
+         corresponding PLMN in case of network slicing feature is supported. The plMNId of the first
+         entry of the list is the PLMNId used to construct the nCGI for the NR cell.";
+      uses PLMNInfo;
+    }
+    leaf nRPCI {
+      type int32 {
+        range "0..1007";
+      }
+      mandatory true;
+      description
+        "The Physical Cell Identity (PCI) of the NR cell.";
+      reference
+        "3GPP TS 36.211";
+    }
+    leaf nRTAC {
+      type Tac;
+      description
+        "The common 5GS Tracking Area Code for the PLMNs.";
+      reference
+        "3GPP TS 23.003, 3GPP TS 38.473";
+    }
+    leaf arfcnDL {
+      type int32;
+      mandatory true;
+      description
+        "NR Absolute Radio Frequency Channel Number (NR-ARFCN) for
+         downlink.";
+      reference
+        "3GPP TS 38.104";
+    }
+    leaf arfcnUL {
+      type int32;
+      description
+        "NR Absolute Radio Frequency Channel Number (NR-ARFCN) for
+         uplink.";
+      reference
+        "3GPP TS 38.104";
+    }
+    leaf arfcnSUL {
+      type int32;
+      description
+        "NR Absolute Radio Frequency Channel Number (NR-ARFCN) for
+         supplementary uplink.";
+      reference
+        "3GPP TS 38.104";
+    }
+    leaf bSChannelBwDL {
+      type int32;
+      units "MHz";
+      description
+        "Base station channel bandwidth for downlink.";
+      reference
+        "3GPP TS 38.104";
+    }
+    leaf bSChannelBwUL {
+      type int32;
+      units "MHz";
+      description
+        "Base station channel bandwidth for uplink.";
+      reference
+        "3GPP TS 38.104";
+    }
+    leaf bSChannelBwSUL {
+      type int32;
+      units "MHz";
+      description
+        "Base station channel bandwidth for supplementary uplink.";
+      reference
+        "3GPP TS 38.104";
+    }
+    leaf ssbFrequency {
+      type int32 {
+        range "0..3279165";
+      }
+      mandatory true;
+      description
+        "Indicates cell defining SSB frequency domain position.
+         Frequency (in terms of NR-ARFCN) of the cell defining SSB transmission.
+         The frequency identifies the position of resource element RE=#0
+         (subcarrier #0) of resource block RB#10 of the SS block. The frequency
+         must be positioned on the NR global frequency raster, as defined in
+         3GPP TS 38.101, and within bSChannelBwDL.";
+    }
+    leaf ssbPeriodicity {
+      type int32 {
+        range "5 | 10 | 20 | 40 | 80 | 160";
+      }
+      units "subframes (ms)";
+      mandatory true;
+      description
+        "Indicates cell defined SSB periodicity. The SSB periodicity
+         is used for the rate matching purpose.";
+    }
+    leaf ssbSubCarrierSpacing {
+      type int32 {
+        range "15 | 30 | 120 | 240";
+      }
+      units "kHz";
+      mandatory true;
+      description
+        "Subcarrier spacing of SSB. Only the values 15 kHz or 30 kHz
+         (< 6 GHz), 120 kHz or 240 kHz (> 6 GHz) are applicable.";
+      reference
+        "3GPP TS 38.211";
+    }
+    leaf ssbOffset {
+      type int32 {
+        range "0..159";
+      }
+      units "subframes (ms)";
+      mandatory true;
+      description
+        "Indicates cell defining SSB time domain position. Defined
+         as the offset of the measurement window, in which to receive SS/PBCH
+         blocks, where allowed values depend on the ssbPeriodicity
+         (ssbOffset < ssbPeriodicity).";
+    }
+    leaf ssbDuration {
+      type int32 {
+        range "1..5";
+      }
+      units "subframes (ms)";
+      mandatory true;
+      description
+        "Duration of the measurement window in which to receive
+         SS/PBCH blocks.";
+      reference
+        "3GPP TS 38.213";
+    }
+    leaf-list nRSectorCarrierRef {
+      type DistinguishedName;
+      min-elements 1;
+      description
+        "Reference to corresponding NRSectorCarrier instance.";
+    }
+    leaf-list bWPRef {
+      type DistinguishedName;
+      // min-elements 0;
+      description
+        "Reference to corresponding BWP instance.";
+    }
+    leaf-list nRFrequencyRef {
+      type DistinguishedName;
+      // min-elements 0;
+      description
+        "Reference to corresponding NRFrequency instance.";
+    }
+  } // grouping
+
+  grouping rRMPolicyMemberGroup {
+    description
+      "TODO";
+    uses PLMNId;
+    leaf sNSSAI {
+      type SNssai;
+      description
+        "This data type represents an RRM Policy member that will be part of a
+         rRMPolicyMemberList. A RRMPolicyMember is defined by its pLMNId and sNSSAI (S-NSSAI).
+         The members in a rRMPolicyMemberList are assigned a specific amount of RRM resources
+         based on settings in RRMPolicy.";
+    }
+  }
+
+  grouping RRMPolicy_Group {
+    description
+      "This IOC represents the properties of an abstract RRMPolicy. The RRMPolicy_ IOC
+       needs to be subclassed to be instantiated. It defines two attributes apart from those
+       inherited from Top IOC, the resourceType attribute defines type of resource (PRB, RRC
+       connected users, DRB usage etc.) and the rRMPolicyMemberList attribute defines the
+       RRMPolicyMember(s)that are subject to this policy. An RRM resource (defined in resourceType
+       attribute) is located in NRCellDU, NRCellCU, GNBDUFunction, GNBCUCPFunction or in
+       GNBCUUPFunction. The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the
+       inheritance in TS 28.541 Figure 4.2.1.2-1. This RRM framework allows adding new policies,
+       both standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the
+       abstract RRMPolicy_ IOC.";
+    leaf resourceType {
+      type string;
+      mandatory true;
+      description
+        "The resourceType attribute defines type of resource (PRB, RRC connected users,
+         DRB usage etc.) that is subject to policy. Valid values are 'PRB', 'RRC' or 'DRB'";
+    }
+    list rRMPolicyMemberList {
+      key "idx";
+      min-elements 1;
+      description
+        "It represents the list of RRMPolicyMember (s) that the managed object
+         is supporting. A RRMPolicyMember <<dataType>> include the PLMNId <<dataType>>
+         and S-NSSAI <<dataType>>.";
+      leaf idx {
+        type uint32;
+        description
+          "TODO";
+      }
+      uses rRMPolicyMemberGroup;
+    }
+  } // grouping
+
+  grouping GNBCUUPFunctionGroup {
+    description
+      "Represents the GNBCUUPFunction IOC.";
+    reference
+      "3GPP TS 28.541";
+    uses RRMPolicy_Group;
+    leaf gNBCUUPId {
+      type uint64 {
+        range "0..68719476735";
+      }
+      config false;
+      mandatory true;
+      description
+        "Identifies the gNB-CU-UP at least within a gNB-CU-CP";
+      reference
+        "'gNB-CU-UP ID' in subclause 9.3.1.15 of 3GPP TS 38.463";
+    }
+    leaf gNBId {
+      type int32 {
+        range "22..32";
+      }
+      mandatory true;
+      description
+        "Indicates the number of bits for encoding the gNB Id.";
+      reference
+        "gNB Id in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+    }
+    list pLMNInfoList {
+      key "mcc mnc";
+      description
+        "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that
+         can be served by the GNBCUUPFunction and which S-NSSAIs can be supported by the
+         GNBCUUPFunction for corresponding PLMN in case of network slicing feature is supported";
+      uses PLMNInfo;
+    }
+  } // grouping
+
+  grouping GNBCUCPFunctionGroup {
+    description
+      "Represents the GNBCUCPFunction IOC.";
+    reference
+      "3GPP TS 28.541";
+    uses RRMPolicy_Group;
+    leaf gNBId {
+      type int64 {
+        range "0..4294967295";
+      }
+      mandatory true;
+      description
+        "Identifies a gNB within a PLMN. The gNB Identifier (gNB ID)
+         is part of the NR Cell Identifier (NCI) of the gNB cells.";
+      reference
+        "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+    }
+    leaf gNBIdLength {
+      type int32 {
+        range "22..32";
+      }
+      mandatory true;
+      description
+        "Indicates the number of bits for encoding the gNB ID.";
+      reference
+        "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413";
+    }
+    leaf gNBCUName {
+      type string {
+        length "1..150";
+      }
+      mandatory true;
+      description
+        "Identifies the Central Unit of an gNB.";
+      reference
+        "3GPP TS 38.473";
+    }
+    list pLMNId {
+      key "mcc mnc";
+      min-elements 1;
+      max-elements 1;
+      description
+        "The PLMN identifier to be used as part of the global RAN
+         node identity.";
+      uses PLMNId;
+    }
+    leaf-list x2BlackList {
+      type DistinguishedName;
+      description
+        "List of nodes to which X2 connections are prohibited.";
+    }
+    leaf-list x2WhiteList {
+      type DistinguishedName;
+      description
+        "List of nodes to which X2 connections are enforced.";
+    }
+    leaf-list xnBlackList {
+      type DistinguishedName;
+      description
+        "List of nodes to which Xn connections are prohibited.";
+    }
+    leaf-list xnWhiteList {
+      type DistinguishedName;
+      description
+        "List of nodes to which X2 connections are enforced.";
+    }
+    leaf-list x2XnHOBlackList {
+      type DistinguishedName;
+      description
+        "List of nodes to which handovers over X2 or Xn are prohibited.";
+    }
+  } // grouping
+
+  grouping NRCellCUGroup {
+    description
+      "Represents the NRCellCU IOC.";
+    reference
+      "3GPP TS 28.541";
+    leaf cellLocalId {
+      type int32 {
+        range "0..16383";
+      }
+      mandatory true;
+      description
+        "Identifies an NR cell of a gNB. Together with corresponding
+         gNB ID it forms the NR Cell Identifier (NCI).";
+    }
+    list pLMNInfoList {
+      key "mcc mnc";
+      min-elements 1;
+      description
+        "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs
+         that can be served by the NR cell, and which S-NSSAIs that can be supported by the
+         NR cell for corresponding PLMN in case of network slicing feature is supported.";
+      uses PLMNInfo;
+      // Note: Whether the attribute pLMNId in the pLMNInfo can be writable depends on the implementation.
+    }
+    leaf nRFrequencyRef {
+      type DistinguishedName;
+      config false;
+      description
+        "Reference to corresponding NRFrequency instance.";
+    }
+  } // grouping
+
+  grouping NRCellRelationGroup {
+    description
+      "Represents the NRCellRelation IOC.";
+    reference
+      "3GPP TS 28.541";
+    leaf nRTCI {
+      type uint64;
+      description
+        "Target NR Cell Identifier. It consists of NR Cell
+         Identifier (NCI) and Physical Cell Identifier of the target NR cell
+         (nRPCI).";
+    }
+    container cellIndividualOffset {
+      description
+        "A set of offset values for the neighbour cell. Used when
+         UE is in connected mode. Defined for rsrpOffsetSSB, rsrqOffsetSSB,
+         sinrOffsetSSB, rsrpOffsetCSI-RS, rsrqOffsetCSI-RS and
+         sinrOffsetCSI-RS.";
+      reference
+        "cellIndividualOffset in MeasObjectNR in 3GPP TS 38.331";
+      leaf rsrpOffsetSsb {
+        type QOffsetRange;
+        default "0";
+        description
+          "Offset value of rsrpOffsetSSB.";
+      }
+      leaf rsrqOffsetSsb {
+        type QOffsetRange;
+        default "0";
+        description
+          "Offset value of rsrqOffsetSSB.";
+      }
+      leaf sinrOffsetSsb {
+        type QOffsetRange;
+        default "0";
+        description
+          "Offset value of sinrOffsetSSB.";
+      }
+      leaf rsrpOffsetCsiRs {
+        type QOffsetRange;
+        default "0";
+        description
+          "Offset value of rsrpOffsetCSI-RS.";
+      }
+      leaf rsrqOffsetCsiRs {
+        type QOffsetRange;
+        default "0";
+        description
+          "Offset value of rsrqOffsetCSI-RS.";
+      }
+      leaf sinrOffsetCsiRs {
+        type QOffsetRange;
+        default "0";
+        description
+          "Offset value of sinrOffsetCSI-RS.";
+      }
+    }
+    leaf nRFreqRelationRef {
+      type DistinguishedName;
+      mandatory true;
+      description
+        "Reference to a corresponding NRFreqRelation instance.";
+    }
+    leaf adjacentNRCellRef {
+      type DistinguishedName;
+      mandatory true;
+      description
+        "Reference to an adjacent NR cell (NRCellCU or
+         ExternalNRCellCU).";
+    }
+    leaf isRemoveAllowed {
+      type boolean;
+      default "true";
+      description
+        "True if the ANR function in the node is allowed to remove this relation.";
+    }
+    leaf isHOAllowed {
+      type boolean;
+      default "true";
+      description
+        "True if handovers are allowed over this relation.";
+    }
+  } // grouping
+
+  grouping NRFreqRelationGroup {
+    description
+      "Represents the NRFreqRelation IOC.";
+    reference
+      "3GPP TS 28.541";
+    container offsetMO {
+      description
+        "A set of offset values applicable to all measured cells
+         with reference signal(s) indicated in corresponding MeasObjectNR. It
+         is used to indicate a cell, beam or measurement object specific offset
+         to be applied when evaluating candidates for cell re-selection or when
+         evaluating triggering conditions for measurement reporting. It is
+         defined for rsrpOffsetSSB, rsrqOffsetSSB, sinrOffsetSSB,
+         rsrpOffsetCSI-RS, rsrqOffsetCSI-RS and sinrOffsetCSI-RS.";
+      reference
+        "offsetMO in MeasObjectNR in 3GPP TS 38.331";
+      leaf rsrpOffsetSsb {
+        type QOffsetRange;
+        default "0";
+        description
+          "Offset value of rsrpOffsetSSB.";
+      }
+      leaf rsrqOffsetSsb {
+        type QOffsetRange;
+        default "0";
+        description
+          "Offset value of rsrqOffsetSSB.";
+      }
+      leaf sinrOffsetSsb {
+        type QOffsetRange;
+        default "0";
+        description
+          "Offset value of sinrOffsetSSB.";
+      }
+      leaf rsrpOffsetCsiRs {
+        type QOffsetRange;
+        default "0";
+        description
+          "Offset value of rsrpOffsetCSI-RS.";
+      }
+      leaf rsrqOffsetCsiRs {
+        type QOffsetRange;
+        default "0";
+        description
+          "Offset value of rsrqOffsetCSI-RS.";
+      }
+      leaf sinrOffsetCsiRs {
+        type QOffsetRange;
+        default "0";
+        description
+          "Offset value of sinrOffsetCSI-RS.";
+      }
+    }
+    leaf-list blackListEntry {
+      type uint16 {
+        range "0..1007";
+      }
+      // min-elements 0;
+      description
+        "A list of Physical Cell Identities (PCIs) that are
+         blacklisted in NR measurements.";
+      reference
+        "3GPP TS 38.331";
+    }
+    leaf-list blackListEntryIdleMode {
+      type uint16 {
+        range "0..1007";
+      }
+      // min-elements 0;
+      description
+        "A list of Physical Cell Identities (PCIs) that are
+         blacklisted in SIB4 and SIB5.";
+    }
+    leaf cellReselectionPriority {
+      type uint32;
+      default "0";
+      description
+        "The absolute priority of the carrier frequency used by the
+         cell reselection procedure. Value 0 means lowest priority. The value
+         must not already used by other RAT, i.e. equal priorities between RATs
+         are not supported. The UE behaviour when no value is entered is
+         specified in subclause 5.2.4.1 of 3GPP TS 38.304.";
+      reference
+        "CellReselectionPriority in 3GPP TS 38.331, priority in
+         3GPP TS 38.304";
+    }
+    leaf cellReselectionSubPriority {
+      type uint8 {
+        range "2 | 4 | 6 | 8";
+      }
+      units "0.1";
+      description
+        "Indicates a fractional value to be added to the value of
+         cellReselectionPriority to obtain the absolute priority of the
+         concerned carrier frequency for E-UTRA and NR.";
+      reference
+        "3GPP TS 38.331";
+    }
+    leaf pMax {
+      type int32 {
+        range "-30..33";
+      }
+      units "dBm";
+      // mandatory false;
+      description
+        "Used for calculation of the parameter Pcompensation
+         (defined in 3GPP TS 38.304), at cell reselection to a cell.";
+      reference
+        "PEMAX in 3GPP TS 38.101";
+    }
+    leaf qOffsetFreq {
+      type QOffsetRange;
+      default "0";
+      // mandatory false;
+      description
+        "The frequency specific offset applied when evaluating
+         candidates for cell reselection.";
+    }
+    leaf qQualMin {
+      type int32 {
+        range "-34..-3 | 0";
+      }
+      units "dB";
+      default "0";
+      description
+        "Indicates the minimum required quality level in the cell.
+         Value 0 means that it is not sent and UE applies in such case the
+         (default) value of negative infinity for Qqualmin. Sent in SIB3 or
+         SIB5.";
+      reference
+        "3GPP TS 38.304";
+    }
+    leaf qRxLevMin {
+      type int32 {
+        range "-140..-44";
+      }
+      units "dBm";
+      mandatory true;
+      description
+        "Indicates the required minimum received Reference Symbol
+         Received Power (RSRP) level in the NR frequency for cell reselection.
+         Broadcast in SIB3 or SIB5, depending on whether the related frequency
+         is intra- or inter-frequency. Resolution is 2.";
+      reference
+        "3GPP TS 38.304";
+    }
+    leaf threshXHighP {
+      type int32 {
+        range "0..62";
+      }
+      units "dB";
+      mandatory true;
+      description
+        "Specifies the Srxlev threshold used by the UE when
+         reselecting towards a higher priority RAT/frequency than the current
+         serving frequency. Each frequency of NR and E-UTRAN might have a
+         specific threshold. Resolution is 2.";
+      reference
+        "ThreshX, HighP in 3GPP TS 38.304";
+    }
+    leaf threshXHighQ {
+      type int32 {
+        range "0..31";
+      }
+      units "dB";
+      mandatory true;
+      description
+        "Specifies the Squal threshold used by the UE when
+         reselecting towards a higher priority RAT/frequency than the current
+         serving frequency. Each frequency of NR and E-UTRAN might have a
+         specific threshold.";
+      reference
+        "ThreshX, HighQ in 3GPP TS 38.304";
+    }
+    leaf threshXLowP {
+      type int32 {
+        range "0..62";
+      }
+      units "dB";
+      mandatory true;
+      description
+        "Specifies the Srxlev threshold used by the UE when
+         reselecting towards a lower priority RAT/frequency than the current
+         serving frequency. Each frequency of NR and E-UTRAN might have a
+         specific threshold. Resolution is 2.";
+      reference
+        "ThreshX, LowP in 3GPP TS 38.304";
+    }
+    leaf threshXLowQ {
+      type int32 {
+        range "0..31";
+      }
+      units "dB";
+      mandatory true;
+      description
+        "Specifies the Squal threshold used by the UE when
+         reselecting towards a lower priority RAT/frequency than the current
+         serving frequency. Each frequency of NR and E-UTRAN might have a
+         specific threshold.";
+      reference
+        "ThreshX, LowQ in 3GPP TS 38.304";
+    }
+    leaf tReselectionNR {
+      type int32 {
+        range "0..7";
+      }
+      units "s";
+      mandatory true;
+      description
+        "Cell reselection timer for NR.";
+      reference
+        "TreselectionRAT for NR in 3GPP TS 38.331";
+    }
+    leaf tReselectionNRSfHigh {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      units "%";
+      mandatory true;
+      description
+        "The attribute tReselectionNr (parameter TreselectionNR in
+         3GPP TS 38.304) is multiplied with this scaling factor if the UE is
+         in high mobility state.";
+      reference
+        "Speed dependent ScalingFactor for TreselectionNR for high
+         mobility state in 3GPP TS 38.304";
+    }
+    leaf tReselectionNRSfMedium {
+      type uint8 {
+        range "25 | 50 | 75 | 100";
+      }
+      units "%";
+      mandatory true;
+      description
+        "The attribute tReselectionNr (parameter TreselectionNR in
+         3GPP TS 38.304) multiplied with this scaling factor if the UE is in
+         medium mobility state.";
+      reference
+        "Speed dependent ScalingFactor for TreselectionNR for medium
+         mobility state in 3GPP TS 38.304";
+    }
+    leaf nRFrequencyRef {
+      type DistinguishedName;
+      mandatory true;
+      description
+        "Reference to a corresponding NRFrequency instance.";
+    }
+  } // grouping
+
+  grouping ManagedNFServiceGroup {
+    description
+      "A ManagedNFService representing a Network Function (NF) service.";
+    reference
+      "Clause 7 of 3GPP TS 23.501.";
+    leaf userLabel {
+      type string;
+      description
+        "A user-friendly (and user assignable) name of this object.";
+    }
+    list sAP {
+      key "host port";
+      min-elements 1;
+      max-elements 1;
+      description
+        "The service access point of the managed NF service instance";
+      uses SAP;
+    }
+  } // grouping
+
+  // container for RAN Network
+
+  container ran-network {
+    description
+      "Represents telecommunications equipment or
+       TMN entities within the telecommunications network providing support
+       and/or service to the subscriber.";
+    list NearRTRIC {
+      key "idNearRTRIC"; // list GNBCUCPFunction
+      description
+        "A list of expected near-real-time RIC O-RAN managed functions.";
+      leaf idNearRTRIC {
+        type string;
+        description
+          "Key leaf (namingAttribute) for a class/list.
+           Should be used as a key leaf for lists representing
+           stage 2 classes.";
+        reference
+          "3GPP TS 32.300 Name convention for managed objects";
+      }
+      container attributes {
+        description
+          "TODO";
+        uses NearRTRICGroup;
+      }
+      list GNBDUFunction {
+        key "idGNBDUFunction";
+        description
+          "Represents the logical function DU of gNB or en-gNB.";
+        reference
+          "3GPP TS 28.541";
+        leaf idGNBDUFunction {
+          type string;
+          description
+            "TODO";
+        }
+        container attributes {
+          description
+            "TODO";
+          uses GNBDUFunctionGroup;
+          uses ManagedNFServiceGroup;
+        }
+        list NRCellDU {
+          key "idNRCellDU";
+          description
+            "Represents the information of a cell known by DU.";
+          reference
+            "3GPP TS 28.541";
+          leaf idNRCellDU {
+            type string;
+            description
+              "TODO";
+          }
+          container attributes {
+            description
+              "TODO";
+            uses NRCellDUGroup;
+            uses ManagedNFServiceGroup;
+          }
+        } // list NRCellDU
+      } // list GNBDUFunction
+      list GNBCUUPFunction {
+        key "idGNBCUUPFunction";
+        description
+          "TODO";
+        leaf idGNBCUUPFunction {
+          type string;
+          description
+            "TODO";
+        }
+        container attributes {
+          description
+            "TODO";
+          uses GNBCUUPFunctionGroup;
+          uses ManagedNFServiceGroup;
+        }
+      } // list GNBCUUPFunction
+      list GNBCUCPFunction {
+        key "idGNBCUCPFunction"; // list NRCellCU
+        description
+          "Represents the logical function CU-CP of gNB and en-gNB.";
+        reference
+          "3GPP TS 28.541";
+        leaf idGNBCUCPFunction {
+          type string;
+          description
+            "TODO";
+        }
+        container attributes {
+          description
+            "TODO";
+          uses GNBCUCPFunctionGroup;
+          uses ManagedNFServiceGroup;
+        }
+        list NRCellCU {
+          key "idNRCellCU";
+          description
+            "Represents the information required by CU that is
+             responsible for the management of inter-cell mobility and neighbour
+             relations via ANR.";
+          reference
+            "3GPP TS 28.541";
+          leaf idNRCellCU {
+            type string;
+            description
+              "TODO";
+          }
+          container attributes {
+            description
+              "TODO";
+            uses NRCellCUGroup;
+            uses ManagedNFServiceGroup;
+          }
+          list NRCellRelation {
+            key "idNRCellRelation";
+            description
+              "Represents a neighbour cell relation from a source cell
+               to a target cell, where the target cell is an NRCellCU or
+               ExternalNRCellCU instance.";
+            reference
+              "3GPP TS 28.541";
+            leaf idNRCellRelation {
+              type string;
+              description
+                "TODO";
+            }
+            container attributes {
+              description
+                "TODO";
+              uses NRCellRelationGroup;
+              uses ManagedNFServiceGroup;
+            }
+          } // list NRCellRelation
+          list NRFreqRelation {
+            key "idNRFreqRelation";
+            description
+              "Together with the target NRFrequency, it represents the
+               frequency properties applicable to the referencing NRFreqRelation.";
+            reference
+              "3GPP TS 28.541";
+            leaf idNRFreqRelation {
+              type string;
+              description
+                "TODO";
+            }
+            container attributes {
+              description
+                "TODO";
+              uses NRFreqRelationGroup;
+              uses ManagedNFServiceGroup;
+            }
+          } // list NRFreqRelation
+        }
+      }
+    } // list ManagedElement
+  }
+}
diff --git a/sdnr/northbound/ranSlice/model/src/main/yang/ran-slice-api@2020-08-06.yang b/sdnr/northbound/ranSlice/model/src/main/yang/ran-slice-api@2020-08-06.yang
new file mode 100644 (file)
index 0000000..3253a01
--- /dev/null
@@ -0,0 +1,466 @@
+/*
+ * Yang model for the RANSLice Northbound API's
+ *
+ */
+module ran-slice-api {
+  yang-version 1.1;
+  namespace "org:onap:ccsdk";
+  prefix rs;
+
+  organization
+    "Open Network Automation Platform - ONAP
+     <https://www.onap.org>";
+  contact
+    "Editors:
+       Sandeep Shah
+       <mailto:sandeep.shah@ibm.com>
+
+       Swaminathan Seetharaman
+       <mailto:swaminathan.seetharaman@wipro.com>";
+  description
+    "This module defines the services and request/response requirements for
+     RAN Slice Management.
+     This YANG model is used solely for POC's in the ONAP and O-RAN communities
+
+     Copyright 2020 the O-RAN Alliance.
+
+     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.";
+
+  revision 2020-08-06 {
+    description
+      "RANSlice API YANG Model";
+    reference
+      "https://wiki.onap.org/display/DW/E2E+Network+Slicing+Use+Case+in+R7+Guilin";
+  }
+
+    /**********************************************************************************
+     * Data type definitions
+     *
+     * The following data type definitions are used to define common data structures,
+     * define constraints, or to impart special meanings to data objects related to the
+     * SDN-R controller functions.
+     **********************************************************************************/
+
+  typedef ZULU {
+    type string {
+      length "16..28";
+      pattern '[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}T[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}.[0-9]{1,6}Z';
+    }
+    description
+      "Define a common definition of a time stamp (expressed as a formatted
+       string) as follows yyyy-MM-ddTHH:mm:ss.SSSSSSSSZ";
+  }
+
+  typedef payload {
+    type string;
+    description
+      "The payload can be any valid JSON string value. Json escape characters
+       need to be added when required to include an inner json within the
+       payload to make it a valid json string value";
+  }
+
+  typedef action {
+    type enumeration {
+      enum allocate {
+        description
+          "TODO";
+      }
+      enum modify {
+        description
+          "TODO";
+      }
+      enum modify-allocate {
+        description
+          "TODO";
+      }
+      enum modify-deallocate {
+        description
+          "TODO";
+      }
+      enum deallocate {
+        description
+          "TODO";
+      }
+      enum activate {
+        description
+          "TODO";
+      }
+      enum deactivate {
+        description
+          "TODO";
+      }
+      enum reconfigure {
+        description
+          "TODO";
+      }
+    }
+    description
+      "The action to be taken by SDN-R for invoked RPC.";
+  }
+
+  typedef ranSlice-action-status {
+    type enumeration {
+      enum IN_PROGRESS {
+        description
+          "TODO";
+        }
+      enum SUCCESSFUL {
+        description
+          "TODO";
+        }
+      enum FAILED {
+        description
+          "TODO";
+        }
+      enum NOT_FOUND {
+        description
+          "TODO";
+        }
+      enum ABORTED {
+        description
+          "TODO";
+        }
+      enum MULTIPLE_REQUESTS_FOUND {
+        description
+          "TODO";
+        }
+    }
+    description
+      "The status of the requested RANSlice action";
+  }
+
+  /**********************************************************************************
+   * All requests will include this standard header
+   *
+   * The standard request header is used to define a correlation identification for
+   * the request that is returned on all responses.  This correlation identifier
+   * (called the service-request-id) is meaningful to the caller and is included on
+   * all responses from the services.
+   **********************************************************************************/
+
+  /**********************************************************************************
+   * All responses will include this standard header
+   *
+   * The standard response header includes the time of completion as well as a
+   * success|failure indication
+   **********************************************************************************/
+
+  grouping common-header {
+    description
+      "A common header for all SDN-R requests";
+    container common-header {
+      description
+        "A common header for all SDN-R requests";
+      leaf timestamp {
+        type ZULU;
+        mandatory true;
+        description
+          "timestamp is in ISO 8601 timestamp format ZULU offset";
+      }
+      leaf api-ver {
+        type string;
+        mandatory true;
+        description
+          "api-ver is the API version identifier. A given release of APPC
+              should support all previous versions of APPC API (correlate with
+              general requirements)";
+      }
+      leaf originator-id {
+        type string;
+        mandatory true;
+        description
+          "originator-id an identifier of the calling system which can be
+              used addressing purposes, i.e. returning asynchronous response
+              to the proper destination over DMaaP (especially in case of multiple
+              consumers of SDN-R APIs)";
+      }
+      leaf request-id {
+        type string;
+        mandatory true;
+        description
+          "UUID for the request ID. An OSS/BSS identifier for the request
+              that caused the current action. Multiple API calls may be made
+              with the same request-id The request-id shall be recorded throughout
+              the operations on a single request";
+      }
+      leaf sub-request-id {
+        type string;
+        description
+          "Uniquely identifies a specific RANSlice action. It is persistent over
+              the life-cycle of a single request";
+      }
+
+      /**********************************************************************************
+       * Flags are generic flags that apply to any and all commands, all are optional
+       *  force = TRUE/FALSE - Execute command even if target is in unstable (i.e. locked, transiting, etc)
+       *                       state. Specific behaviour of forced commands varies, but implies cancellation
+       *                       of previous command and an override by the new command. The FALSE value is
+       *                       used by default.
+       *  ttl = <0....N> - The timeout value for command execution, expressed in seconds
+       *  mode = EXCLUSIVE/NORMAL - defines execution mode as follows:
+       *        - EXCLUSIVE ? on encountering an exclusive command, the SDN-R will:
+       *          * Cease accepting additional command requests
+       *          * Complete execution of outstanding commands
+       *          * Execute the exclusive command to completion
+       *          * Optionally report the result of the command
+       *          * Optionally resume command acceptance and processing
+       *        - NORMAL - Obverse of EXCLUSIVE, the default one.
+       **********************************************************************************/
+      container flags {
+        description
+          "Flags are generic flags that apply to any and all commands, all are optional";
+        leaf mode {
+          type enumeration {
+            enum EXCLUSIVE {
+              description
+                "TODO";
+            }
+            enum NORMAL {
+              description
+                "TODO";
+            }
+          }
+          description
+            "EXCLUSIVE (accept no queued requests on this VNF while processing)
+                    or NORMAL (queue other requests until complete)";
+          }
+        leaf force {
+          type enumeration {
+            enum TRUE {
+              description
+                "TODO";
+            }
+            enum FALSE {
+              description
+                "TODO";
+            }
+          }
+            description
+            "TRUE/FALSE - Execute action even if target is in unstable (i.e.
+                    locked, transiting, etc.) state";
+        }
+        leaf ttl {
+          type uint16;
+            description
+            "<0....N> - The timeout value (expressed in seconds) for action
+                    execution, between action being received by APPC and action initiation";
+        }
+      }
+    }
+  }
+
+  grouping status {
+    description
+      "The specific response codes are to be aligned with SDC reference doc
+       (main table removed to avoid duplication and digression from main table).
+       See SDC and ECOMP Distribution Consumer Interface Agreement";
+    container status {
+      description
+        "The specific response codes are to be aligned with SDC reference doc
+         (main table removed to avoid duplication and digression from main table).
+         See SDC and ECOMP Distribution Consumer Interface Agreement";
+      leaf code {
+        type uint16;
+        mandatory true;
+        description
+          "Response code";
+      }
+      leaf message {
+        type string;
+        mandatory true;
+        description
+          "Response message";
+      }
+    }
+  }
+
+  grouping abstract-rpc-input {
+      uses common-header;
+      leaf action {
+        type action;
+        mandatory true;
+        description
+          "TODO";
+      }
+      leaf payload {
+        type payload;
+        description
+          "TODO";
+      }
+    description
+      "An abstract rpc output defintion.";
+  }
+  grouping abstract-rpc-input-payload-required {
+      uses common-header;
+      leaf action {
+        type action;
+        mandatory true;
+        description
+          "TODO";
+      }
+      leaf payload {
+        type payload;
+        mandatory true;
+        description
+          "TODO";
+      }
+    description
+      "An abstract rpc output defintion.";
+  }
+  grouping abstract-rpc-output {
+    uses common-header;
+    uses status;
+    description
+      "An abstract rpc output defintion.";
+  }
+  /**********************************************************************************
+   * Define the configureNearRTRIC service
+   **********************************************************************************/
+  rpc configureNearRTRIC {
+    description
+      "An operation to configure Near-Time RIC in the preparation phase";
+    input {
+      uses abstract-rpc-input;
+    }
+    output {
+      uses abstract-rpc-output;
+    }
+  }
+
+  /**********************************************************************************
+   * Define the instantiateRANSlice service
+   **********************************************************************************/
+  rpc instantiateRANSlice {
+    description
+      "An operation to instantiate RAN slice. Includes both allocation and configuration of RAN slice resources";
+    input {
+      uses abstract-rpc-input;
+    }
+    output {
+      uses abstract-rpc-output;
+    }
+  }
+
+  /**********************************************************************************
+   * Define the configureRANSliceInstance service
+   **********************************************************************************/
+  rpc configureRANSliceInstance {
+    description
+      "An operation to configure RAN slice NSSI in CU and DU";
+    input {
+      uses abstract-rpc-input;
+    }
+    output {
+      uses abstract-rpc-output;
+    }
+  }
+
+  /**********************************************************************************
+   * Define the configureCU service
+   **********************************************************************************/
+  rpc configureCU {
+    description
+      "An operation to configure CU in the preparation phase";
+    input {
+      uses abstract-rpc-input;
+    }
+    output {
+      uses abstract-rpc-output;
+    }
+  }
+
+  /**********************************************************************************
+   * Define the configureDU service
+   **********************************************************************************/
+  rpc configureDU {
+    description
+      "An operation to configure DU in the preparation phase";
+    input {
+      uses abstract-rpc-input;
+    }
+    output {
+      uses abstract-rpc-output;
+    }
+  }
+
+  /**********************************************************************************
+   * Define the activateRANSliceInstance service ... needed to enable traffic flow
+   **********************************************************************************/
+  rpc activateRANSliceInstance {
+    description
+      "An operation to reallocate RAN Slice resources";
+      input {
+        uses abstract-rpc-input;
+      }
+      output {
+        uses abstract-rpc-output;
+      }
+  }
+
+  /**********************************************************************************
+   * Define the deactivateRANSliceInstance service ... needed to disable traffic flow
+   **********************************************************************************/
+  rpc deactivateRANSliceInstance {
+    description
+      "An operation to reallocate RAN Slice resources";
+      input {
+        uses abstract-rpc-input;
+      }
+      output {
+        uses abstract-rpc-output;
+      }
+  }
+
+  /**********************************************************************************
+   * Define the terminateRANSliceInstance service
+   **********************************************************************************/
+  rpc terminateRANSliceInstance {
+    description
+      "An operation to terminate RAN slide instance";
+      input {
+        uses abstract-rpc-input;
+      }
+      output {
+        uses abstract-rpc-output;
+      }
+  }
+
+
+  /**********************************************************************************
+   * Define the determineRANSliceResources service
+   **********************************************************************************/
+  rpc determineRANSliceResources {
+    description
+      "An operation to determine RAN slice resources";
+      input {
+        uses abstract-rpc-input;
+      }
+      output {
+        uses abstract-rpc-output;
+      }
+  }
+
+  /**********************************************************************************
+   * Define the configNotification service
+   **********************************************************************************/
+  rpc configNotification {
+    description
+      "CM Notify event triggered by DMAAP VES message";
+      input {
+        uses abstract-rpc-input;
+      }
+      output {
+        uses abstract-rpc-output;
+      }
+  }
+}
diff --git a/sdnr/northbound/ranSlice/pom.xml b/sdnr/northbound/ranSlice/pom.xml
new file mode 100644 (file)
index 0000000..75bd9a7
--- /dev/null
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk features
+  ~ ================================================================================
+  ~ Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+  ~ ================================================================================
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~ ============LICENSE_END=======================================================
+  ~
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>odlparent-lite</artifactId>
+        <version>2.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.northbound</groupId>
+    <artifactId>ranSlice</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>pom</packaging>
+
+    <name>ccsdk-features :: sdnr-northbound :: ${project.artifactId}</name>
+
+    <modules>
+        <module>model</module>
+        <module>feature</module>
+        <module>provider</module>
+        <module>installer</module>
+    </modules>
+
+    <properties>
+        <feature-name>ranSlice</feature-name>
+    </properties>
+</project>
diff --git a/sdnr/northbound/ranSlice/provider/derby.log b/sdnr/northbound/ranSlice/provider/derby.log
new file mode 100644 (file)
index 0000000..33ad15c
--- /dev/null
@@ -0,0 +1,13 @@
+----------------------------------------------------------------
+Mon Aug 17 21:43:27 CDT 2020:
+Booting Derby version The Apache Software Foundation - Apache Derby - 10.14.2.0 - (1828579): instance a816c00e-0173-ff73-3522-00001953d118 
+on database directory memory:/home/sandeepos/SON-ONAP-ATT/Gulian/FINAL-GULIAN-AUG15-USE/ccsdk/features/sdnr/northbound/ranSlice/provider/sdnctl with class loader sun.misc.Launcher$AppClassLoader@18b4aac2 
+Loaded from file:/home/sandeepos/.m2/repository/org/apache/derby/derby/10.14.2.0/derby-10.14.2.0.jar
+java.vendor=Private Build
+java.runtime.version=1.8.0_265-8u265-b01-0ubuntu2~16.04-b01
+user.dir=/home/sandeepos/SON-ONAP-ATT/Gulian/FINAL-GULIAN-AUG15-USE/ccsdk/features/sdnr/northbound/ranSlice/provider
+os.name=Linux
+os.arch=amd64
+os.version=4.15.0-112-generic
+derby.system.home=null
+Database Class Loader started - derby.database.classpath=''
diff --git a/sdnr/northbound/ranSlice/provider/pom.xml b/sdnr/northbound/ranSlice/provider/pom.xml
new file mode 100644 (file)
index 0000000..ba92a0a
--- /dev/null
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk features
+  ~ ================================================================================
+  ~ Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+  ~ ================================================================================
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~ ============LICENSE_END=======================================================
+  ~
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.onap.ccsdk.parent</groupId>
+        <artifactId>binding-parent</artifactId>
+        <version>2.0.1-SNAPSHOT</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>org.onap.ccsdk.features.sdnr.northbound</groupId>
+    <artifactId>ranSlice-provider</artifactId>
+    <version>1.0.1-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+
+    <name>ccsdk-features :: sdnr-northbound :: ${project.artifactId}</name>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.opendaylight.controller</groupId>
+                <artifactId>mdsal-artifacts</artifactId>
+                <version>1.6.1</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.onap.ccsdk.sli.core</groupId>
+                <artifactId>sli-core-artifacts</artifactId>
+                <version>${ccsdk.sli.core.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+    <dependencies>
+        <dependency>
+            <groupId>org.onap.ccsdk.features.sdnr.northbound</groupId>
+            <artifactId>ranSlice-model</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <!--
+        <dependency>
+          <groupId>org.opendaylight.controller</groupId>
+          <artifactId>sal-binding-config</artifactId>
+        </dependency>
+        -->
+        <dependency>
+            <groupId>org.opendaylight.controller</groupId>
+            <artifactId>sal-binding-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.controller</groupId>
+            <artifactId>sal-common-util</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.controller</groupId>
+            <artifactId>sal-core-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.controller</groupId>
+            <artifactId>sal-binding-broker-impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-data-impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.testng</groupId>
+            <artifactId>testng</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.derby</groupId>
+            <artifactId>derby</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.sli.core</groupId>
+            <artifactId>sli-common</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.sli.core</groupId>
+            <artifactId>sli-provider</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.ccsdk.sli.core</groupId>
+            <artifactId>utils-provider</artifactId>
+            <!-- <version>${sdnctl.sli.version}</version> -->
+        </dependency>
+        <dependency>
+                       <groupId>org.osgi</groupId>
+                       <artifactId>org.osgi.core</artifactId>
+                       <scope>test</scope>
+               </dependency>
+      <dependency>
+          <groupId>org.onap.ccsdk.sli.core</groupId>
+          <artifactId>sli-provider-base</artifactId>
+          <version>${ccsdk.sli.core.version}</version>
+      </dependency>
+    </dependencies>
+
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.eclipse.m2e</groupId>
+                    <artifactId>lifecycle-mapping</artifactId>
+                    <version>1.0.0</version>
+                    <configuration>
+                        <lifecycleMappingMetadata>
+                            <pluginExecutions>
+                                <pluginExecution>
+                                    <pluginExecutionFilter>
+                                        <groupId>org.codehaus.mojo</groupId>
+                                        <artifactId>properties-maven-plugin</artifactId>
+                                        <versionRange>[1.0.0,)</versionRange>
+                                        <goals>
+                                            <goal>set-system-properties</goal>
+                                        </goals>
+                                    </pluginExecutionFilter>
+                                    <action>
+                                        <execute/>
+                                    </action>
+                                </pluginExecution>
+                            </pluginExecutions>
+                        </lifecycleMappingMetadata>
+                    </configuration>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+    </build>
+</project>
diff --git a/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceClient.java b/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceClient.java
new file mode 100644 (file)
index 0000000..f3d2a7d
--- /dev/null
@@ -0,0 +1,99 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : SDN-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ *                     reserved.
+ * Modifications Copyright Â© 2018 IBM.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.ccsdk.features.sdnr.northbound.ranSlice;
+
+
+import java.util.Properties;
+
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+import org.onap.ccsdk.sli.core.sli.provider.SvcLogicService;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RANSliceClient {
+
+       private static final Logger LOG = LoggerFactory.getLogger(RANSliceClient.class);
+
+       private final SvcLogicService svcLogicService;
+
+       private String ErrorCode = "error-code";
+
+       public RANSliceClient(final SvcLogicService svcLogicService) {
+               this.svcLogicService = svcLogicService;
+       }
+
+       public boolean hasGraph(String module, String rpc, String version, String mode) throws SvcLogicException
+       {
+               return svcLogicService.hasGraph(module, rpc, version, mode);
+       }
+
+
+       public Properties execute(String module, String rpc, String version, String mode, Properties parms, DOMDataBroker dataBroker)
+                               throws SvcLogicException {
+
+
+               if (LOG.isDebugEnabled())
+               {
+                       LOG.debug("Parameters passed to SLI");
+
+                       for (Object key : parms.keySet()) {
+                               String parmName = (String) key;
+                               String parmValue = parms.getProperty(parmName);
+
+                               LOG.debug(parmName+" = "+parmValue);
+
+                       }
+               }
+
+               Properties respProps = svcLogicService.execute(module, rpc, version, mode, parms, dataBroker);
+
+               if (LOG.isDebugEnabled())
+               {
+                       LOG.debug("Parameters returned by SLI");
+
+                       for (Object key : respProps.keySet()) {
+                               String parmName = (String) key;
+                               String parmValue = respProps.getProperty(parmName);
+
+                               LOG.debug(parmName+" = "+parmValue);
+
+                       }
+               }
+
+               if ("failure".equalsIgnoreCase(respProps.getProperty("SvcLogic.status"))) {
+
+                       if (!respProps.containsKey(ErrorCode)) {
+                               respProps.setProperty(ErrorCode, "500");
+                       }
+               } else {
+                       if (!respProps.containsKey(ErrorCode)) {
+                               respProps.setProperty(ErrorCode, "200");
+                       }
+               }
+
+
+               return respProps;
+       }
+
+}
diff --git a/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceProvider.java b/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceProvider.java
new file mode 100644 (file)
index 0000000..a88595b
--- /dev/null
@@ -0,0 +1,480 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * openECOMP : SDN-C
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights
+ *                     reserved.
+ *     Modifications Copyright Â© 2018 IBM.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.ccsdk.features.sdnr.northbound.ranSlice;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Properties;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import org.onap.ccsdk.sli.core.sli.provider.MdsalHelper;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker;
+import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.*;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.common.header.CommonHeaderBuilder;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.status.StatusBuilder;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import org.onap.ccsdk.features.sdnr.northbound.ranSlice.RANSliceResponseCode.*;
+
+/**
+ * Defines a base implementation for your provider. This class extends from a
+ * helper class which provides storage for the most commonly used components of
+ * the MD-SAL. Additionally the base class provides some basic logging and
+ * initialization / clean up methods.
+ *
+ */
+public class RANSliceProvider implements AutoCloseable, RanSliceApiService {
+
+       private class CommonRANSliceFields {
+               private StatusBuilder statusBuilder;
+               private CommonHeaderBuilder commonHeaderBuilder;
+               private Payload payload;
+
+               public CommonRANSliceFields(StatusBuilder statusBuilder, CommonHeaderBuilder commonHeaderBuilder) {
+                       this.statusBuilder = statusBuilder;
+                       this.commonHeaderBuilder = commonHeaderBuilder;
+                       this.payload = null;
+               }
+
+               public CommonRANSliceFields(StatusBuilder statusBuilder, CommonHeaderBuilder commonHeaderBuilder, Payload payload) {
+                       this.statusBuilder = statusBuilder;
+                       this.commonHeaderBuilder = commonHeaderBuilder;
+                       this.payload = payload;
+               }
+
+               public StatusBuilder getStatusBuilder() {
+                       return statusBuilder;
+               }
+
+               public CommonHeaderBuilder getCommonHeaderBuilder() {
+                       return commonHeaderBuilder;
+               }
+
+               public Payload getPayload() {
+                       return payload;
+               }
+       }
+
+       private static final Logger LOG = LoggerFactory.getLogger(RANSliceProvider.class);
+
+       private static final String exceptionMessage = "Caught exception";
+
+       private static final String APPLICATION_NAME = "RANSlice";
+
+       private final ExecutorService executor;
+       protected DataBroker dataBroker;
+       protected DOMDataBroker domDataBroker;
+       protected NotificationPublishService notificationService;
+       protected RpcProviderRegistry rpcRegistry;
+       private final RANSliceClient RANSliceClient;
+
+       protected BindingAwareBroker.RpcRegistration<RanSliceApiService> rpcRegistration;
+
+       public RANSliceProvider(final DataBroker dataBroker, final NotificationPublishService notificationPublishService,
+                       final RpcProviderRegistry rpcProviderRegistry, final RANSliceClient rANSliceClient) {
+
+               LOG.info("Creating provider for {}", APPLICATION_NAME);
+               executor = Executors.newFixedThreadPool(1);
+               this.dataBroker = dataBroker;
+               if (dataBroker instanceof AbstractForwardedDataBroker) {
+                       domDataBroker = ((AbstractForwardedDataBroker) dataBroker).getDelegate();
+               }
+               notificationService = notificationPublishService;
+               rpcRegistry = rpcProviderRegistry;
+               this.RANSliceClient = rANSliceClient;
+               initialize();
+       }
+
+       public void initialize() {
+               LOG.info("Initializing {} for {}", this.getClass().getName(), APPLICATION_NAME);
+
+               if (rpcRegistration == null) {
+                       if (rpcRegistry != null) {
+                               rpcRegistration = rpcRegistry.addRpcImplementation(RanSliceApiService.class, this);
+                               LOG.info("Initialization complete for {}", APPLICATION_NAME);
+                       } else {
+                               LOG.warn("Error initializing {} : rpcRegistry unset", APPLICATION_NAME);
+                       }
+               }
+       }
+
+       protected void initializeChild() {
+               // Override if you have custom initialization intelligence
+       }
+
+       @Override
+       public void close() throws Exception {
+               LOG.info("Closing provider for " + APPLICATION_NAME);
+               executor.shutdown();
+               rpcRegistration.close();
+               LOG.info("Successfully closed provider for " + APPLICATION_NAME);
+       }
+
+
+//RPC configureNearRTRIC
+
+       @Override
+       public ListenableFuture<RpcResult<ConfigureNearRTRICOutput>> configureNearRTRIC(ConfigureNearRTRICInput input) {
+               ConfigureNearRTRICInputBuilder iBuilder = new ConfigureNearRTRICInputBuilder(input);
+               ConfigureNearRTRICOutputBuilder oBuilder = new ConfigureNearRTRICOutputBuilder();
+
+               try {
+                       CommonRANSliceFields retval = callDG("configureNearRTRIC", iBuilder.build());
+                       oBuilder.setStatus(retval.getStatusBuilder().build());
+                       oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+               } catch (RANSliceRpcInvocationException e) {
+                       LOG.debug(exceptionMessage, e);
+                       oBuilder.setCommonHeader(e.getCommonHeader());
+                       oBuilder.setStatus(e.getStatus());
+               }
+
+               RpcResult<ConfigureNearRTRICOutput> rpcResult =
+                               RpcResultBuilder.<ConfigureNearRTRICOutput> status(true).withResult(oBuilder.build()).build();
+               // return error
+               return Futures.immediateFuture(rpcResult);
+
+       }
+
+       //RPC instantiateRANSlice
+
+       @Override
+       public ListenableFuture<RpcResult<InstantiateRANSliceOutput>> instantiateRANSlice(InstantiateRANSliceInput input) {
+               InstantiateRANSliceInputBuilder iBuilder = new InstantiateRANSliceInputBuilder(input);
+               InstantiateRANSliceOutputBuilder oBuilder = new InstantiateRANSliceOutputBuilder();
+
+               try {
+                       CommonRANSliceFields retval = callDG("instantiateRANSlice", iBuilder.build());
+                       oBuilder.setStatus(retval.getStatusBuilder().build());
+                       oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+               } catch (RANSliceRpcInvocationException e) {
+                       LOG.debug(exceptionMessage, e);
+                       oBuilder.setCommonHeader(e.getCommonHeader());
+                       oBuilder.setStatus(e.getStatus());
+               }
+
+               RpcResult<InstantiateRANSliceOutput> rpcResult =
+                               RpcResultBuilder.<InstantiateRANSliceOutput> status(true).withResult(oBuilder.build()).build();
+               // return error
+               return Futures.immediateFuture(rpcResult);
+
+       }
+
+
+
+       //RPC configureRANSliceInstance
+
+       @Override
+       public ListenableFuture<RpcResult<ConfigureRANSliceInstanceOutput>> configureRANSliceInstance(ConfigureRANSliceInstanceInput input) {
+               ConfigureRANSliceInstanceInputBuilder iBuilder = new ConfigureRANSliceInstanceInputBuilder(input);
+               ConfigureRANSliceInstanceOutputBuilder oBuilder = new ConfigureRANSliceInstanceOutputBuilder();
+
+               try {
+                       CommonRANSliceFields retval = callDG("configureRANSliceInstance", iBuilder.build());
+                       oBuilder.setStatus(retval.getStatusBuilder().build());
+                       oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+               } catch (RANSliceRpcInvocationException e) {
+                       LOG.debug(exceptionMessage, e);
+                       oBuilder.setCommonHeader(e.getCommonHeader());
+                       oBuilder.setStatus(e.getStatus());
+               }
+
+               RpcResult<ConfigureRANSliceInstanceOutput> rpcResult =
+                               RpcResultBuilder.<ConfigureRANSliceInstanceOutput> status(true).withResult(oBuilder.build()).build();
+               // return error
+               return Futures.immediateFuture(rpcResult);
+
+       }
+
+       //RPC configureCU
+
+       @Override
+       public ListenableFuture<RpcResult<ConfigureCUOutput>> configureCU(ConfigureCUInput input) {
+               ConfigureCUInputBuilder iBuilder = new ConfigureCUInputBuilder(input);
+               ConfigureCUOutputBuilder oBuilder = new ConfigureCUOutputBuilder();
+
+               try {
+                       CommonRANSliceFields retval = callDG("configureCU", iBuilder.build());
+                       oBuilder.setStatus(retval.getStatusBuilder().build());
+                       oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+               } catch (RANSliceRpcInvocationException e) {
+                       LOG.debug(exceptionMessage, e);
+                       oBuilder.setCommonHeader(e.getCommonHeader());
+                       oBuilder.setStatus(e.getStatus());
+               }
+
+               RpcResult<ConfigureCUOutput> rpcResult =
+                               RpcResultBuilder.<ConfigureCUOutput> status(true).withResult(oBuilder.build()).build();
+               // return error
+               return Futures.immediateFuture(rpcResult);
+
+       }
+
+       //RPC configureDU
+
+       @Override
+       public ListenableFuture<RpcResult<ConfigureDUOutput>> configureDU(ConfigureDUInput input) {
+               ConfigureDUInputBuilder iBuilder = new ConfigureDUInputBuilder(input);
+               ConfigureDUOutputBuilder oBuilder = new ConfigureDUOutputBuilder();
+
+               try {
+                       CommonRANSliceFields retval = callDG("configureDU", iBuilder.build());
+                       oBuilder.setStatus(retval.getStatusBuilder().build());
+                       oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+               } catch (RANSliceRpcInvocationException e) {
+                       LOG.debug(exceptionMessage, e);
+                       oBuilder.setCommonHeader(e.getCommonHeader());
+                       oBuilder.setStatus(e.getStatus());
+               }
+
+               RpcResult<ConfigureDUOutput> rpcResult =
+                               RpcResultBuilder.<ConfigureDUOutput> status(true).withResult(oBuilder.build()).build();
+               // return error
+               return Futures.immediateFuture(rpcResult);
+
+       }
+
+       //RPC activateRANSliceInstance
+
+       @Override
+       public ListenableFuture<RpcResult<ActivateRANSliceInstanceOutput>> activateRANSliceInstance(ActivateRANSliceInstanceInput input) {
+               ActivateRANSliceInstanceInputBuilder iBuilder = new ActivateRANSliceInstanceInputBuilder(input);
+               ActivateRANSliceInstanceOutputBuilder oBuilder = new ActivateRANSliceInstanceOutputBuilder();
+
+               try {
+                       CommonRANSliceFields retval = callDG("activateRANSliceInstance", iBuilder.build());
+                       oBuilder.setStatus(retval.getStatusBuilder().build());
+                       oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+               } catch (RANSliceRpcInvocationException e) {
+                       LOG.debug(exceptionMessage, e);
+                       oBuilder.setCommonHeader(e.getCommonHeader());
+                       oBuilder.setStatus(e.getStatus());
+               }
+
+               RpcResult<ActivateRANSliceInstanceOutput> rpcResult =
+                               RpcResultBuilder.<ActivateRANSliceInstanceOutput> status(true).withResult(oBuilder.build()).build();
+               // return error
+               return Futures.immediateFuture(rpcResult);
+
+       }
+
+
+       //RPC deactivateRANSliceInstance
+
+       @Override
+       public ListenableFuture<RpcResult<DeactivateRANSliceInstanceOutput>> deactivateRANSliceInstance(DeactivateRANSliceInstanceInput input) {
+               DeactivateRANSliceInstanceInputBuilder iBuilder = new DeactivateRANSliceInstanceInputBuilder(input);
+               DeactivateRANSliceInstanceOutputBuilder oBuilder = new DeactivateRANSliceInstanceOutputBuilder();
+
+               try {
+                       CommonRANSliceFields retval = callDG("deactivateRANSliceInstance", iBuilder.build());
+                       oBuilder.setStatus(retval.getStatusBuilder().build());
+                       oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+               } catch (RANSliceRpcInvocationException e) {
+                       LOG.debug(exceptionMessage, e);
+                       oBuilder.setCommonHeader(e.getCommonHeader());
+                       oBuilder.setStatus(e.getStatus());
+               }
+
+               RpcResult<DeactivateRANSliceInstanceOutput> rpcResult =
+                               RpcResultBuilder.<DeactivateRANSliceInstanceOutput> status(true).withResult(oBuilder.build()).build();
+               // return error
+               return Futures.immediateFuture(rpcResult);
+
+       }
+
+       //RPC terminateRANSliceInstance
+
+       @Override
+       public ListenableFuture<RpcResult<TerminateRANSliceInstanceOutput>> terminateRANSliceInstance(TerminateRANSliceInstanceInput input) {
+               TerminateRANSliceInstanceInputBuilder iBuilder = new TerminateRANSliceInstanceInputBuilder(input);
+               TerminateRANSliceInstanceOutputBuilder oBuilder = new TerminateRANSliceInstanceOutputBuilder();
+
+               try {
+                       CommonRANSliceFields retval = callDG("terminateRANSliceInstance", iBuilder.build());
+                       oBuilder.setStatus(retval.getStatusBuilder().build());
+                       oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+               } catch (RANSliceRpcInvocationException e) {
+                       LOG.debug(exceptionMessage, e);
+                       oBuilder.setCommonHeader(e.getCommonHeader());
+                       oBuilder.setStatus(e.getStatus());
+               }
+
+               RpcResult<TerminateRANSliceInstanceOutput> rpcResult =
+                               RpcResultBuilder.<TerminateRANSliceInstanceOutput> status(true).withResult(oBuilder.build()).build();
+               // return error
+               return Futures.immediateFuture(rpcResult);
+
+       }
+
+       //RPC determineRANSliceResources
+
+       @Override
+       public ListenableFuture<RpcResult<DetermineRANSliceResourcesOutput>> determineRANSliceResources(DetermineRANSliceResourcesInput input) {
+               DetermineRANSliceResourcesInputBuilder iBuilder = new DetermineRANSliceResourcesInputBuilder(input);
+               DetermineRANSliceResourcesOutputBuilder oBuilder = new DetermineRANSliceResourcesOutputBuilder();
+
+               try {
+                       CommonRANSliceFields retval = callDG("determineRANSliceResources", iBuilder.build());
+                       oBuilder.setStatus(retval.getStatusBuilder().build());
+                       oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+               } catch (RANSliceRpcInvocationException e) {
+                       LOG.debug(exceptionMessage, e);
+                       oBuilder.setCommonHeader(e.getCommonHeader());
+                       oBuilder.setStatus(e.getStatus());
+               }
+
+               RpcResult<DetermineRANSliceResourcesOutput> rpcResult =
+                               RpcResultBuilder.<DetermineRANSliceResourcesOutput> status(true).withResult(oBuilder.build()).build();
+               // return error
+               return Futures.immediateFuture(rpcResult);
+
+       }
+
+       //RPC cm-notify
+
+       @Override
+       public ListenableFuture<RpcResult<ConfigNotificationOutput>> configNotification(ConfigNotificationInput input) {
+
+               ConfigNotificationInputBuilder iBuilder = new ConfigNotificationInputBuilder(input);
+               ConfigNotificationOutputBuilder oBuilder = new ConfigNotificationOutputBuilder();
+
+               try {
+                       CommonRANSliceFields retval = callDG("configNotification", iBuilder.build());
+                       oBuilder.setStatus(retval.getStatusBuilder().build());
+                       oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
+               } catch (RANSliceRpcInvocationException e) {
+                       LOG.debug(exceptionMessage, e);
+                       oBuilder.setCommonHeader(e.getCommonHeader());
+                       oBuilder.setStatus(e.getStatus());
+               }
+
+               RpcResult<ConfigNotificationOutput> rpcResult =
+                               RpcResultBuilder.<ConfigNotificationOutput> status(true).withResult(oBuilder.build()).build();
+               // return error
+               return Futures.immediateFuture(rpcResult);
+
+       }
+
+
+       private CommonRANSliceFields callDG(String rpcName, Object input) throws RANSliceRpcInvocationException {
+
+               StatusBuilder statusBuilder = new StatusBuilder();
+
+               if (input == null) {
+                       LOG.debug("Rejecting " +rpcName+ " because of invalid input");
+                       statusBuilder.setCode(RANSliceResponseCode.REJECT_INVALID_INPUT.getValue());
+                       statusBuilder.setMessage("REJECT - INVALID INPUT.  Missing input");
+                       CommonHeaderBuilder hBuilder = new CommonHeaderBuilder();
+                       hBuilder.setApiVer("1");
+                       hBuilder.setOriginatorId("unknown");
+                       hBuilder.setRequestId("unset");
+                       hBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+                       throw new RANSliceRpcInvocationException(statusBuilder.build(), hBuilder.build());
+               }
+
+               CommonHeaderBuilder hBuilder = new CommonHeaderBuilder(((CommonHeader)input).getCommonHeader());
+
+               // add input to parms
+               LOG.info("Adding INPUT data for "+ rpcName +" input: " + input.toString());
+               Properties inputProps = new Properties();
+               MdsalHelper.toProperties(inputProps, input);
+
+               LOG.info("Printing SLI parameters to be passed");
+
+       // iterate properties file to get key-value pairs
+               for (String key : inputProps.stringPropertyNames()) {
+                       String value = inputProps.getProperty(key);
+                       LOG.info("The SLI parameter in " + key + " is: " + value);
+               }
+
+               Properties respProps = new Properties();
+
+               // Call SLI sync method
+               try
+               {
+                       if (RANSliceClient.hasGraph("ran-slice-api", rpcName , null, "sync"))
+                       {
+                               try
+                               {
+                                       respProps = RANSliceClient.execute("ran-slice-api", rpcName, null, "sync", inputProps, domDataBroker);
+                               }
+                               catch (Exception e)
+                               {
+                                       LOG.error("Caught exception executing service logic for "+ rpcName, e);
+                                       statusBuilder.setCode(RANSliceResponseCode.FAILURE_DG_FAILURE.getValue());
+                                       statusBuilder.setMessage("FAILURE - DG FAILURE ("+e.getMessage()+")");
+                                       throw new RANSliceRpcInvocationException(statusBuilder.build(), hBuilder.build());
+                               }
+                       } else {
+                               LOG.error("No service logic active for RANSlice: '" + rpcName + "'");
+
+                               statusBuilder.setCode(RANSliceResponseCode.REJECT_DG_NOT_FOUND.getValue());
+                               statusBuilder.setMessage("FAILURE - DG not found for action "+rpcName);
+                               throw new RANSliceRpcInvocationException(statusBuilder.build(), hBuilder.build());
+                       }
+               }
+               catch (Exception e)
+               {
+                       LOG.error("Caught exception looking for service logic", e);
+
+                       statusBuilder.setCode(RANSliceResponseCode.FAILURE_DG_FAILURE.getValue());
+                       statusBuilder.setMessage("FAILURE - Unexpected error looking for DG ("+e.getMessage()+")");
+                       throw new RANSliceRpcInvocationException(statusBuilder.build(), hBuilder.build());
+               }
+
+
+               StatusBuilder sBuilder = new StatusBuilder();
+               MdsalHelper.toBuilder(respProps, sBuilder);
+               MdsalHelper.toBuilder(respProps, hBuilder);
+
+               Payload payload = null;
+               String payloadValue = respProps.getProperty("payload");
+               if (payloadValue != null) {
+                       payload = new Payload(payloadValue);
+               }
+
+               String statusCode = sBuilder.getCode().toString();
+
+               if (!"400".equals(statusCode)) {
+                       LOG.error("Returned FAILED for "+rpcName+" error code: '" + statusCode + "'");
+               } else {
+                       LOG.info("Returned SUCCESS for "+rpcName+" ");
+               }
+
+               return new CommonRANSliceFields(sBuilder, hBuilder, payload);
+
+       }
+
+}
diff --git a/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceResponseCode.java b/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceResponseCode.java
new file mode 100644 (file)
index 0000000..814b27e
--- /dev/null
@@ -0,0 +1,51 @@
+package org.onap.ccsdk.features.sdnr.northbound.ranSlice;
+
+public enum RANSliceResponseCode {
+
+               // Accepted category
+               ACCEPT_ACCEPTED(100),
+               // Error category
+               ERROR_UNEXPECTED_ERROR(200),
+               // Rejected category
+               REJECT_REJECTED(300),
+               REJECT_INVALID_INPUT(301),
+               REJECT_MISSING_PARAM(302),
+               REJECT_PARSING_FAILED(303),
+               REJECT_NO_TRANSITION(304),
+               REJECT_ACTION_NOT_SUPPORTED(305),
+               REJECT_VNF_NOT_FOUND(306),
+               REJECT_DG_NOT_FOUND(307),
+               REJECT_WORKFLOW_NOT_FOUND(308),
+               REJECT_UNSTABLE_VNF(309),
+               REJECT_LOCKING_FAILURE(310),
+               REJECT_EXPIRED_REQUEST(311),
+               REJECT_DUPLICATE_REQUEST(312),
+               REJECT_MISSING_AAI_DATA(313),
+               REJECT_MULTIPLE_REQUESTS_FOR_SEARCH(315),
+               REJECT_POLICY_VALIDATION_FAILURE(316),
+               // Success category
+               SUCCESS(400),
+               // Failure category
+               FAILURE_DG_FAILURE(401),
+               FAILURE_NO_TRANSITION(402),
+               FAILURE_AAI_FAILURE(403),
+               FAILURE_EXPIRED_REQUEST(404),
+               FAILURE_UNEXPECTED_FAILURE(405),
+               FAILURE_UNSTABLE_VNF(406),
+               FAILURE_REQUEST_NOT_SUPPORTED(450),
+               // Partial success
+               PARTIAL_SUCCESS(500);
+
+
+
+               private int value;
+               private RANSliceResponseCode(int value) {
+                       this.value = value;
+               }
+
+               public int getValue() {
+                       return value;
+               }
+
+
+}
diff --git a/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceRpcInvocationException.java b/sdnr/northbound/ranSlice/provider/src/main/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceRpcInvocationException.java
new file mode 100644 (file)
index 0000000..18b6631
--- /dev/null
@@ -0,0 +1,25 @@
+package org.onap.ccsdk.features.sdnr.northbound.ranSlice;
+
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.common.header.CommonHeader;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.status.Status;
+
+public class RANSliceRpcInvocationException extends SvcLogicException {
+
+       private Status status;
+       private CommonHeader commonHeader;
+
+       public RANSliceRpcInvocationException(Status status, CommonHeader commonHeader) {
+               this.status = status;
+               this.commonHeader = commonHeader;
+       }
+
+       public Status getStatus() {
+               return status;
+       }
+
+       public CommonHeader getCommonHeader() {
+               return commonHeader;
+       }
+
+}
diff --git a/sdnr/northbound/ranSlice/provider/src/main/resources/OSGI-INF/blueprint/impl-blueprint.xml b/sdnr/northbound/ranSlice/provider/src/main/resources/OSGI-INF/blueprint/impl-blueprint.xml
new file mode 100644 (file)
index 0000000..57ebfbf
--- /dev/null
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk features
+  ~ ================================================================================
+  ~ Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+  ~ ================================================================================
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~ ============LICENSE_END=======================================================
+  ~
+  -->
+
+<blueprint xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+           xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" odl:use-default-for-reference-types="true">
+
+    <reference id="svcLogicService"
+               interface="org.onap.ccsdk.sli.core.sli.provider.SvcLogicService"/>
+
+    <bean id="client" class="org.onap.ccsdk.features.sdnr.northbound.ranSlice.RANSliceClient">
+        <argument ref="svcLogicService"/>
+    </bean>
+
+    <reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"
+               odl:type="default"/>
+
+    <reference id="notificationService"
+               interface="org.opendaylight.controller.md.sal.binding.api.NotificationPublishService"
+               odl:type="default"/>
+
+    <reference id="rpcRegistry" interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry"
+               odl:type="default"/>
+
+    <bean id="provider" class="org.onap.ccsdk.features.sdnr.northbound.ranSlice.RANSliceProvider">
+        <argument ref="dataBroker"/>
+        <argument ref="rpcRegistry"/>
+        <argument ref="notificationService"/>
+        <argument ref="client"/>
+    </bean>
+
+    <odl:rpc-implementation ref="provider"/>
+
+</blueprint>
diff --git a/sdnr/northbound/ranSlice/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml b/sdnr/northbound/ranSlice/provider/src/main/resources/org/opendaylight/blueprint/impl-blueprint.xml
new file mode 100644 (file)
index 0000000..57ebfbf
--- /dev/null
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ ============LICENSE_START=======================================================
+  ~ ONAP : ccsdk features
+  ~ ================================================================================
+  ~ Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+  ~ ================================================================================
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~ ============LICENSE_END=======================================================
+  ~
+  -->
+
+<blueprint xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+           xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" odl:use-default-for-reference-types="true">
+
+    <reference id="svcLogicService"
+               interface="org.onap.ccsdk.sli.core.sli.provider.SvcLogicService"/>
+
+    <bean id="client" class="org.onap.ccsdk.features.sdnr.northbound.ranSlice.RANSliceClient">
+        <argument ref="svcLogicService"/>
+    </bean>
+
+    <reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"
+               odl:type="default"/>
+
+    <reference id="notificationService"
+               interface="org.opendaylight.controller.md.sal.binding.api.NotificationPublishService"
+               odl:type="default"/>
+
+    <reference id="rpcRegistry" interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry"
+               odl:type="default"/>
+
+    <bean id="provider" class="org.onap.ccsdk.features.sdnr.northbound.ranSlice.RANSliceProvider">
+        <argument ref="dataBroker"/>
+        <argument ref="rpcRegistry"/>
+        <argument ref="notificationService"/>
+        <argument ref="client"/>
+    </bean>
+
+    <odl:rpc-implementation ref="provider"/>
+
+</blueprint>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceProviderTest.java b/sdnr/northbound/ranSlice/provider/src/test/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/RANSliceProviderTest.java
new file mode 100644 (file)
index 0000000..f1e1524
--- /dev/null
@@ -0,0 +1,366 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 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.ccsdk.features.sdnr.northbound.ranSlice;
+
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Properties;
+import java.util.concurrent.ExecutionException;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.ccsdk.sli.core.sli.SvcLogicLoader;
+import org.onap.ccsdk.sli.core.sli.SvcLogicStore;
+import org.onap.ccsdk.sli.core.sli.SvcLogicStoreFactory;
+import org.onap.ccsdk.sli.core.sli.provider.SvcLogicClassResolver;
+import org.onap.ccsdk.sli.core.sli.provider.SvcLogicPropertiesProviderImpl;
+import org.onap.ccsdk.sli.core.sli.provider.SvcLogicServiceImpl;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.*;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.common.header.CommonHeaderBuilder;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RANSliceProviderTest {
+
+       Logger LOG = LoggerFactory.getLogger(RANSliceProvider.class);
+       private RANSliceProvider provider;
+
+      /**
+       * @throws java.lang.Exception
+       */
+      @Before
+      public void setUp() throws Exception {
+          DataBroker dataBroker = mock(DataBroker.class);
+          NotificationPublishService notifyService = mock(NotificationPublishService.class);
+          RpcProviderRegistry rpcRegistry = mock(RpcProviderRegistry.class);
+          BindingAwareBroker.RpcRegistration<RanSliceApiService> rpcRegistration = (BindingAwareBroker.RpcRegistration<RanSliceApiService>) mock(BindingAwareBroker.RpcRegistration.class);
+          when(rpcRegistry.addRpcImplementation(any(Class.class), any(RanSliceApiService.class))).thenReturn(rpcRegistration);
+
+
+          // Load svclogic.properties and get a SvcLogicStore
+          InputStream propStr = RANSliceProviderTest.class.getResourceAsStream("/svclogic.properties");
+          Properties svcprops = new Properties();
+          svcprops.load(propStr);
+
+          SvcLogicStore store = SvcLogicStoreFactory.getSvcLogicStore(svcprops);
+
+          assertNotNull(store);
+
+          URL graphUrl = RANSliceProviderTest.class.getClassLoader().getResource("graphs");
+          LOG.info("Graph URL:" + graphUrl);
+
+
+          if (graphUrl == null) {
+              fail("Cannot find graphs directory");
+          }
+
+          SvcLogicLoader loader = new SvcLogicLoader(graphUrl.getPath(), store);
+          loader.loadAndActivate();
+
+          // Create a ServiceLogicService
+          SvcLogicServiceImpl svc = new SvcLogicServiceImpl(new SvcLogicPropertiesProviderImpl(),
+                               new SvcLogicClassResolver());
+
+          // Finally ready to create sliapiProvider
+          RANSliceClient client = new RANSliceClient(svc);
+          provider = new RANSliceProvider(dataBroker, notifyService, rpcRegistry, client);
+      }
+
+      /**
+       * @throws java.lang.Exception
+       */
+      @After
+      public void tearDown() throws Exception {
+          provider.close();
+      }
+
+
+       @Test
+       public void testConfigureNearRTRIC() {
+               ConfigureNearRTRICInputBuilder builder = new ConfigureNearRTRICInputBuilder();
+
+               CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+               hdrBuilder.setApiVer("1");
+               hdrBuilder.setFlags(null);
+               hdrBuilder.setOriginatorId("jUnit");
+               hdrBuilder.setRequestId("123");
+               hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+               builder.setCommonHeader(hdrBuilder.build());
+
+               builder.setAction(Action.Reconfigure);
+
+               try {
+                       ConfigureNearRTRICOutput results = provider.configureNearRTRIC(builder.build()).get().getResult();
+                       LOG.info("configureNearRTRIC returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+                       assert(results.getStatus().getCode() == 400);
+               } catch (InterruptedException | ExecutionException e) {
+                       LOG.error("Caught exception", e);
+                       fail("configureNearRTRIC threw exception");
+               }
+
+       }
+
+
+    @Test
+       public void testInstantiateRANSlice() {
+               InstantiateRANSliceInputBuilder builder = new InstantiateRANSliceInputBuilder();
+
+               CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+               hdrBuilder.setApiVer("1");
+               hdrBuilder.setFlags(null);
+               hdrBuilder.setOriginatorId("jUnit");
+               hdrBuilder.setRequestId("123");
+               hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+               builder.setCommonHeader(hdrBuilder.build());
+
+               builder.setAction(Action.Reconfigure);
+
+               try {
+                       InstantiateRANSliceOutput results = provider.instantiateRANSlice(builder.build()).get().getResult();
+                       LOG.info("instantiateRANSlice returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+                       assert(results.getStatus().getCode() == 400);
+               } catch (InterruptedException | ExecutionException e) {
+                       LOG.error("Caught exception", e);
+                       fail("instantiateRANSlice threw exception");
+               }
+
+       }
+
+
+    @Test
+       public void testConfigureRANSliceInstance() {
+               ConfigureRANSliceInstanceInputBuilder builder = new ConfigureRANSliceInstanceInputBuilder();
+
+               CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+               hdrBuilder.setApiVer("1");
+               hdrBuilder.setFlags(null);
+               hdrBuilder.setOriginatorId("jUnit");
+               hdrBuilder.setRequestId("123");
+               hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+               builder.setCommonHeader(hdrBuilder.build());
+
+               builder.setAction(Action.Reconfigure);
+
+               try {
+                       ConfigureRANSliceInstanceOutput results = provider.configureRANSliceInstance(builder.build()).get().getResult();
+                       LOG.info("configureRANSliceInstance returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+                       assert(results.getStatus().getCode() == 400);
+               } catch (InterruptedException | ExecutionException e) {
+                       LOG.error("Caught exception", e);
+                       fail("configureRANSliceInstance threw exception");
+               }
+
+       }
+
+    @Test
+       public void testConfigureCU() {
+               ConfigureCUInputBuilder builder = new ConfigureCUInputBuilder();
+
+               CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+               hdrBuilder.setApiVer("1");
+               hdrBuilder.setFlags(null);
+               hdrBuilder.setOriginatorId("jUnit");
+               hdrBuilder.setRequestId("123");
+               hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+               builder.setCommonHeader(hdrBuilder.build());
+
+               builder.setAction(Action.Reconfigure);
+
+               try {
+                       ConfigureCUOutput results = provider.configureCU(builder.build()).get().getResult();
+                       LOG.info("configureCU returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+                       assert(results.getStatus().getCode() == 400);
+               } catch (InterruptedException | ExecutionException e) {
+                       LOG.error("Caught exception", e);
+                       fail("configureCU threw exception");
+               }
+
+       }
+
+
+    @Test
+       public void testConfigureDU() {
+               ConfigureDUInputBuilder builder = new ConfigureDUInputBuilder();
+
+               CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+               hdrBuilder.setApiVer("1");
+               hdrBuilder.setFlags(null);
+               hdrBuilder.setOriginatorId("jUnit");
+               hdrBuilder.setRequestId("123");
+               hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+               builder.setCommonHeader(hdrBuilder.build());
+
+               builder.setAction(Action.Reconfigure);
+
+               try {
+                       ConfigureDUOutput results = provider.configureDU(builder.build()).get().getResult();
+                       LOG.info("configureDU returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+                       assert(results.getStatus().getCode() == 400);
+               } catch (InterruptedException | ExecutionException e) {
+                       LOG.error("Caught exception", e);
+                       fail("configureDU threw exception");
+               }
+
+       }
+
+    @Test
+       public void testActivateRANSliceInstance() {
+               ActivateRANSliceInstanceInputBuilder builder = new ActivateRANSliceInstanceInputBuilder();
+
+               CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+               hdrBuilder.setApiVer("1");
+               hdrBuilder.setFlags(null);
+               hdrBuilder.setOriginatorId("jUnit");
+               hdrBuilder.setRequestId("123");
+               hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+               builder.setCommonHeader(hdrBuilder.build());
+
+               builder.setAction(Action.Reconfigure);
+
+               try {
+                       ActivateRANSliceInstanceOutput results = provider.activateRANSliceInstance(builder.build()).get().getResult();
+                       LOG.info("activateRANSliceInstance returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+                       assert(results.getStatus().getCode() == 400);
+               } catch (InterruptedException | ExecutionException e) {
+                       LOG.error("Caught exception", e);
+                       fail("activateRANSliceInstance threw exception");
+               }
+
+       }
+
+
+    @Test
+       public void testDeactivateRANSliceInstance() {
+               DeactivateRANSliceInstanceInputBuilder builder = new DeactivateRANSliceInstanceInputBuilder();
+
+               CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+               hdrBuilder.setApiVer("1");
+               hdrBuilder.setFlags(null);
+               hdrBuilder.setOriginatorId("jUnit");
+               hdrBuilder.setRequestId("123");
+               hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+               builder.setCommonHeader(hdrBuilder.build());
+
+               builder.setAction(Action.Reconfigure);
+
+               try {
+                       DeactivateRANSliceInstanceOutput results = provider.deactivateRANSliceInstance(builder.build()).get().getResult();
+                       LOG.info("deactivateRANSliceInstance returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+                       assert(results.getStatus().getCode() == 400);
+               } catch (InterruptedException | ExecutionException e) {
+                       LOG.error("Caught exception", e);
+                       fail("deactivateRANSliceInstance threw exception");
+               }
+
+       }
+
+    @Test
+       public void testTerminateRANSliceInstance() {
+               TerminateRANSliceInstanceInputBuilder builder = new TerminateRANSliceInstanceInputBuilder();
+
+               CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+               hdrBuilder.setApiVer("1");
+               hdrBuilder.setFlags(null);
+               hdrBuilder.setOriginatorId("jUnit");
+               hdrBuilder.setRequestId("123");
+               hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+               builder.setCommonHeader(hdrBuilder.build());
+
+               builder.setAction(Action.Reconfigure);
+
+               try {
+                       TerminateRANSliceInstanceOutput results = provider.terminateRANSliceInstance(builder.build()).get().getResult();
+                       LOG.info("terminateRANSliceInstance returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+                       assert(results.getStatus().getCode() == 400);
+               } catch (InterruptedException | ExecutionException e) {
+                       LOG.error("Caught exception", e);
+                       fail("terminateRANSliceInstance threw exception");
+               }
+
+       }
+
+    @Test
+       public void testDetermineRANSliceResources() {
+               DetermineRANSliceResourcesInputBuilder builder = new DetermineRANSliceResourcesInputBuilder();
+
+               CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+               hdrBuilder.setApiVer("1");
+               hdrBuilder.setFlags(null);
+               hdrBuilder.setOriginatorId("jUnit");
+               hdrBuilder.setRequestId("123");
+               hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+               builder.setCommonHeader(hdrBuilder.build());
+
+               builder.setAction(Action.Reconfigure);
+
+               try {
+                       DetermineRANSliceResourcesOutput results = provider.determineRANSliceResources(builder.build()).get().getResult();
+                       LOG.info("determineRANSliceResources returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+                       assert(results.getStatus().getCode() == 400);
+               } catch (InterruptedException | ExecutionException e) {
+                       LOG.error("Caught exception", e);
+                       fail("determineRANSliceResources threw exception");
+               }
+
+       }
+
+
+    @Test
+       public void testConfigNotification() {
+               ConfigNotificationInputBuilder builder = new ConfigNotificationInputBuilder();
+
+               CommonHeaderBuilder hdrBuilder = new CommonHeaderBuilder();
+               hdrBuilder.setApiVer("1");
+               hdrBuilder.setFlags(null);
+               hdrBuilder.setOriginatorId("jUnit");
+               hdrBuilder.setRequestId("123");
+               hdrBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
+               builder.setCommonHeader(hdrBuilder.build());
+
+               builder.setAction(Action.Reconfigure);
+
+               try {
+                       ConfigNotificationOutput results = provider.configNotification(builder.build()).get().getResult();
+                       LOG.info("configNotification returned status {} : {}", results.getStatus().getCode(), results.getStatus().getMessage());
+                       assert(results.getStatus().getCode() == 400);
+               } catch (InterruptedException | ExecutionException e) {
+                       LOG.error("Caught exception", e);
+                       fail("configNotification threw exception");
+               }
+
+       }
+
+
+  }
diff --git a/sdnr/northbound/ranSlice/provider/src/test/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/TestRANSliceRpcInvocationException.java b/sdnr/northbound/ranSlice/provider/src/test/java/org/onap/ccsdk/features/sdnr/northbound/ranSlice/TestRANSliceRpcInvocationException.java
new file mode 100644 (file)
index 0000000..4c32c22
--- /dev/null
@@ -0,0 +1,42 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 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.ccsdk.features.sdnr.northbound.ranSlice;
+
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onap.ccsdk.sli.core.sli.SvcLogicException;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.common.header.CommonHeader;
+import org.opendaylight.yang.gen.v1.org.onap.ccsdk.rev200806.status.Status;
+
+
+public class TestRANSliceRpcInvocationException {
+
+    @Test(expected = SvcLogicException.class)
+    public void testRANSliceRpcInvocationException() throws SvcLogicException{
+        Status status = null;
+        CommonHeader commonHeader = null;
+        RANSliceRpcInvocationException exception = new RANSliceRpcInvocationException(status, commonHeader);
+        assert(exception.getStatus() == status);
+        assert(exception.getCommonHeader() == commonHeader);
+        throw exception;
+    }
+}
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/graph.versions b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/graph.versions
new file mode 100644 (file)
index 0000000..e9642a4
--- /dev/null
@@ -0,0 +1,10 @@
+ran-slice-api configureNearRTRIC 1.0.1 sync
+ran-slice-api instantiateRANSlice 1.0.1 sync
+ran-slice-api configureRANSliceInstance 1.0.1 sync
+ran-slice-api configureCU 1.0.1 sync
+ran-slice-api configureDU 1.0.1 sync
+ran-slice-api activateRANSliceInstance 1.0.1 sync
+ran-slice-api deactivateRANSliceInstance 1.0.1 sync
+ran-slice-api terminateRANSliceInstance 1.0.1 sync
+ran-slice-api determineRANSliceResources 1.0.1 sync
+ran-slice-api configNotification 1.0.1 sync
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_activateRANSliceInstance.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_activateRANSliceInstance.xml
new file mode 100644 (file)
index 0000000..b7ab247
--- /dev/null
@@ -0,0 +1,30 @@
+<!--
+  ============LICENSE_START=======================================================
+  openECOMP : SDN-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights
+                                                       reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+       module='ran-slice-api' version='1.0.1'>
+       <method rpc='activateRANSliceInstance' mode='sync'>
+               <set>
+                       <parameter name='status.code' value='400' />
+                       <parameter name='status.message' value='SUCCESS' />
+               </set>
+       </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configNotification.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configNotification.xml
new file mode 100644 (file)
index 0000000..bad0530
--- /dev/null
@@ -0,0 +1,30 @@
+<!--
+  ============LICENSE_START=======================================================
+  openECOMP : SDN-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights
+                                                       reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+       module='ran-slice-api' version='1.0.1'>
+       <method rpc='configNotification' mode='sync'>
+               <set>
+                       <parameter name='status.code' value='400' />
+                       <parameter name='status.message' value='SUCCESS' />
+               </set>
+       </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureCU.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureCU.xml
new file mode 100644 (file)
index 0000000..f1e52ea
--- /dev/null
@@ -0,0 +1,30 @@
+<!--
+  ============LICENSE_START=======================================================
+  openECOMP : SDN-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights
+                                                       reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+       module='ran-slice-api' version='1.0.1'>
+       <method rpc='configureCU' mode='sync'>
+               <set>
+                       <parameter name='status.code' value='400' />
+                       <parameter name='status.message' value='SUCCESS' />
+               </set>
+       </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureDU.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureDU.xml
new file mode 100644 (file)
index 0000000..0973765
--- /dev/null
@@ -0,0 +1,30 @@
+<!--
+  ============LICENSE_START=======================================================
+  openECOMP : SDN-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights
+                                                       reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+       module='ran-slice-api' version='1.0.1'>
+       <method rpc='configureDU' mode='sync'>
+               <set>
+                       <parameter name='status.code' value='400' />
+                       <parameter name='status.message' value='SUCCESS' />
+               </set>
+       </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureNearRTRIC.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureNearRTRIC.xml
new file mode 100644 (file)
index 0000000..eadcf76
--- /dev/null
@@ -0,0 +1,30 @@
+<!--
+  ============LICENSE_START=======================================================
+  openECOMP : SDN-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights
+                                                       reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+       module='ran-slice-api' version='1.0.1'>
+       <method rpc='configureNearRTRIC' mode='sync'>
+               <set>
+                       <parameter name='status.code' value='400' />
+                       <parameter name='status.message' value='SUCCESS' />
+               </set>
+       </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureRANSliceInstance.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_configureRANSliceInstance.xml
new file mode 100644 (file)
index 0000000..08242f4
--- /dev/null
@@ -0,0 +1,30 @@
+<!--
+  ============LICENSE_START=======================================================
+  openECOMP : SDN-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights
+                                                       reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+       module='ran-slice-api' version='1.0.1'>
+       <method rpc='configureRANSliceInstance' mode='sync'>
+               <set>
+                       <parameter name='status.code' value='400' />
+                       <parameter name='status.message' value='SUCCESS' />
+               </set>
+       </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_deactivateRANSliceInstance.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_deactivateRANSliceInstance.xml
new file mode 100644 (file)
index 0000000..e7b5c00
--- /dev/null
@@ -0,0 +1,30 @@
+<!--
+  ============LICENSE_START=======================================================
+  openECOMP : SDN-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights
+                                                       reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+       module='ran-slice-api' version='1.0.1'>
+       <method rpc='deactivateRANSliceInstance' mode='sync'>
+               <set>
+                       <parameter name='status.code' value='400' />
+                       <parameter name='status.message' value='SUCCESS' />
+               </set>
+       </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_determineRANSliceResources.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_determineRANSliceResources.xml
new file mode 100644 (file)
index 0000000..7b7a697
--- /dev/null
@@ -0,0 +1,30 @@
+<!--
+  ============LICENSE_START=======================================================
+  openECOMP : SDN-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights
+                                                       reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+       module='ran-slice-api' version='1.0.1'>
+       <method rpc='determineRANSliceResources' mode='sync'>
+               <set>
+                       <parameter name='status.code' value='400' />
+                       <parameter name='status.message' value='SUCCESS' />
+               </set>
+       </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_instantiateRANSlice.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_instantiateRANSlice.xml
new file mode 100644 (file)
index 0000000..71f8655
--- /dev/null
@@ -0,0 +1,30 @@
+<!--
+  ============LICENSE_START=======================================================
+  openECOMP : SDN-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights
+                                                       reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+       module='ran-slice-api' version='1.0.1'>
+       <method rpc='instantiateRANSlice' mode='sync'>
+               <set>
+                       <parameter name='status.code' value='400' />
+                       <parameter name='status.message' value='SUCCESS' />
+               </set>
+       </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_terminateRANSliceInstance.xml b/sdnr/northbound/ranSlice/provider/src/test/resources/graphs/ranSlice/ran-slice-api_terminateRANSliceInstance.xml
new file mode 100644 (file)
index 0000000..372f3ae
--- /dev/null
@@ -0,0 +1,30 @@
+<!--
+  ============LICENSE_START=======================================================
+  openECOMP : SDN-C
+  ================================================================================
+  Copyright (C) 2017 AT&T Intellectual Property. All rights
+                                                       reserved.
+  ================================================================================
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+       http://www.apache.org/licenses/LICENSE-2.0
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  ============LICENSE_END=========================================================
+  -->
+
+<service-logic xmlns="http://www.onap.org/sdnc/svclogic"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.onap.org/sdnc/svclogic ./svclogic.xsd"
+       module='ran-slice-api' version='1.0.1'>
+       <method rpc='terminateRANSliceInstance' mode='sync'>
+               <set>
+                       <parameter name='status.code' value='400' />
+                       <parameter name='status.message' value='SUCCESS' />
+               </set>
+       </method>
+</service-logic>
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/simplelogger.properties b/sdnr/northbound/ranSlice/provider/src/test/resources/simplelogger.properties
new file mode 100644 (file)
index 0000000..001dfd4
--- /dev/null
@@ -0,0 +1,22 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : CCSDK
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property. All rights
+#                                              reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+# 
+#      http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=========================================================
+###
+
+org.slf4j.simpleLogger.defaultLogLevel=debug
diff --git a/sdnr/northbound/ranSlice/provider/src/test/resources/svclogic.properties b/sdnr/northbound/ranSlice/provider/src/test/resources/svclogic.properties
new file mode 100644 (file)
index 0000000..426960f
--- /dev/null
@@ -0,0 +1,27 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP : CCSDK
+# ================================================================================
+# Copyright (C) 2017 AT&T Intellectual Property. All rights
+#                                              reserved.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# ============LICENSE_END=========================================================
+###
+
+org.onap.ccsdk.sli.dbtype = jdbc
+org.onap.ccsdk.sli.jdbc.url=jdbc:derby:memory:sdnctl;create=true
+org.onap.ccsdk.sli.jdbc.driver=org.apache.derby.jdbc.EmbeddedDriver
+org.onap.ccsdk.sli.jdbc.database = sdnctl
+org.onap.ccsdk.sli.jdbc.user = test
+org.onap.ccsdk.sli.jdbc.password = test