Near-RT-RIC Simualator & README files 31/1131/2
authorLathish <lathishbabu.ganesan@est.tech>
Thu, 10 Oct 2019 12:30:07 +0000 (13:30 +0100)
committerLathish <lathishbabu.ganesan@est.tech>
Fri, 11 Oct 2019 13:09:06 +0000 (14:09 +0100)
Issue-ID: NONRTRIC-29

Change-Id: I8e75b90c7bba5be8db793b671908bf0505ee4546
Signed-off-by: Lathish <lathishbabu.ganesan@est.tech>
39 files changed:
README.md
docs/developer-guide.rst [new file with mode: 0644]
near-rt-ric-simulator/README.md [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/.classpath [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/.project [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/.settings/org.eclipse.core.resources.prefs [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/.settings/org.eclipse.m2e.core.prefs [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/README.md [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/a1-med-api/.classpath [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/a1-med-api/.gitignore [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/a1-med-api/.project [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/a1-med-api/.settings/org.eclipse.core.resources.prefs [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/a1-med-api/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/a1-med-api/.settings/org.eclipse.m2e.core.prefs [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/a1-med-api/a1-med-api.iml [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/a1-med-api/a1-med-api.ipr [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/a1-med-api/a1-med-api.iws [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/a1-med-api/pom.xml [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/a1-med-api/src/main/resources/a1_mediator_0.11.0.yaml [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/.classpath [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/.gitignore [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/.project [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/.settings/org.eclipse.core.resources.prefs [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/.settings/org.eclipse.jdt.core.prefs [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/.settings/org.eclipse.m2e.core.prefs [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/pom.xml [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/docker/Dockerfile [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/config/ApplicationConfig.java [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/config/NearRicApplication.java [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/config/SwaggerConfiguration.java [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/controller/A1PApi.java [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/controller/A1PApiController.java [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/model/PolicyInstance.java [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/model/PolicyType.java [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/service/A1PApiService.java [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/service/A1PApiServiceImpl.java [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/resources/application.properties [new file with mode: 0644]
near-rt-ric-simulator/nearric-simulator/pom.xml [new file with mode: 0644]
sdnc-a1-controller/README.md [new file with mode: 0644]

index 124a3fc..3e658f6 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,10 +1,24 @@
-# Non-RealTime RIC (NONRTRIC) root repository
+# O-RAN-SC Non-RealTime RIC
 
-This repository acts as root O-RAN-SC NONRTRIC repository. 
+The O-RAN SC Non-RealTime RIC provides support non-real-time intelligent radio resource management, higher layer procedure optimization, policy optimization in RAN, and providing guidance, parameters, policies and AI/ML models to support the operation of RIC near-RT to achieve higher-level non-real-time objectives.
+
+Please see the documentation in the docs/ folder
 
 For more information about the NONRTRIC project please see the [project website](https://wiki.o-ran-sc.org/display/RICNR "O-RAN-SC NONRTRIC project")
 
 ## License
 
+Copyright (C) 2019 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.
 
-This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE.txt) file for details.
\ No newline at end of file
+For more information about license please see the [LICENSE](LICENSE.txt) file for details.
diff --git a/docs/developer-guide.rst b/docs/developer-guide.rst
new file mode 100644 (file)
index 0000000..94044d0
--- /dev/null
@@ -0,0 +1,81 @@
+.. ============LICENSE_START=======================================================
+.. Copyright (C) 2019 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=========================================================
+
+A1 Mediation:
+1. SDNC Controller
+2. Near-RT RIC Simulator
+
+SDNC A1 Controller Developer Guide
+==================================
+
+This document provides a quickstart for developers of the O-RAN SC A1 Controller SDNC Application
+
+Prerequisites
+-------------
+
+1. Java development kit (JDK), version 8
+2. Maven dependency-management tool, version 3.4 or later
+3. Python, version 2
+4. Docker, version 19.03.1 or later
+5. Docker Compose, version 1.24.1 or later
+
+Go to the northbound directory and run this command ::
+    mvn clean install
+
+This will build the project and create artifcats in maven repo
+
+Go to oam/installation directory and run this command ::
+    mvn clean install -P docker
+This will create the docker images required for sdnc
+
+After this step check for the docker images created by the maven build with this command ::
+    docker images | grep sdnc
+
+Go to oam/installation/src/main/yaml and run this command ::
+    docker-compose up -d sdnc
+
+This will create the docker containers with the sdnc image, you can check the status of the docker container using ::
+    docker-compose logs -f sdnc
+
+The SDNC url to access the Northbound API,
+    http://localhost:8282/apidoc/explorer/index.html
+
+Credentails: admin/Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U
+
+Near-RT RIC Simulator Developer Guide
+=====================================
+
+Prerequisites
+-------------
+
+1. Java development kit (JDK), version 8
+2. Maven dependency-management tool, version 3.4 or later
+
+Go to the nearric-simulator/ directory and run this command ::
+     mvn clean install
+
+If you want to genereate the sources from A1 yaml file, Go to nearric-simulator/a1-med-api/ and run this command ::
+     mvn generate-sources
+
+This will generate the A1PApi.java you need to call the generate-sources maven life cycle to generate the file
+
+The backend server listens for requests at this URL:
+   http://localhost:8080
+
+The backend server publishes live API documentation at the URL
+   http://localhost:8080/swagger-ui.html
diff --git a/near-rt-ric-simulator/README.md b/near-rt-ric-simulator/README.md
new file mode 100644 (file)
index 0000000..88f309b
--- /dev/null
@@ -0,0 +1,24 @@
+# O-RAN-SC Near-RealTime RIC Simulator
+
+The O-RAN SC Near-RealTime RIC simulates the A1 as an generic REST API which can receive and send northbound messages. The simulator validates the payload and applies policy.
+
+Please see the documentation in the docs/ folder
+
+For more information about the NONRTRIC project please see the [project website](https://wiki.o-ran-sc.org/display/RICNR "O-RAN-SC NONRTRIC project")
+
+## License
+
+Copyright (C) 2019 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.
+
+For more information about license please see the [LICENSE](LICENSE.txt) file for details.
diff --git a/near-rt-ric-simulator/nearric-simulator/.classpath b/near-rt-ric-simulator/nearric-simulator/.classpath
new file mode 100644 (file)
index 0000000..315bd1e
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="src" path="src"/>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/java-8-openjdk-amd64"/>
+       <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/near-rt-ric-simulator/nearric-simulator/.project b/near-rt-ric-simulator/nearric-simulator/.project
new file mode 100644 (file)
index 0000000..ea2f374
--- /dev/null
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>NearRic-simulator</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.m2e.core.maven2Builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.m2e.core.maven2Nature</nature>
+      <nature>org.eclipse.jdt.core.javanature</nature>
+       </natures>
+</projectDescription>
diff --git a/near-rt-ric-simulator/nearric-simulator/.settings/org.eclipse.core.resources.prefs b/near-rt-ric-simulator/nearric-simulator/.settings/org.eclipse.core.resources.prefs
new file mode 100644 (file)
index 0000000..99f26c0
--- /dev/null
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/near-rt-ric-simulator/nearric-simulator/.settings/org.eclipse.m2e.core.prefs b/near-rt-ric-simulator/nearric-simulator/.settings/org.eclipse.m2e.core.prefs
new file mode 100644 (file)
index 0000000..f897a7f
--- /dev/null
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/near-rt-ric-simulator/nearric-simulator/README.md b/near-rt-ric-simulator/nearric-simulator/README.md
new file mode 100644 (file)
index 0000000..298b988
--- /dev/null
@@ -0,0 +1,25 @@
+# O-RAN-SC Near-RealTime RIC Simulator
+
+The O-RAN SC Near-RealTime RIC simulates the A1 as an generic REST API which can receive and send northbound messages. The simulator validates the payload and applies policy.
+
+Please see the documentation in the docs/ folder
+
+The backend server publishes live API documentation at the
+URL `http://your-host-name-here:8080/swagger-ui.html`
+
+## License
+
+Copyright (C) 2019 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.
+
+For more information about license please see the [LICENSE](LICENSE.txt) file for details.
diff --git a/near-rt-ric-simulator/nearric-simulator/a1-med-api/.classpath b/near-rt-ric-simulator/nearric-simulator/a1-med-api/.classpath
new file mode 100644 (file)
index 0000000..a5d9509
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="src" output="target/classes" path="src/main/java">
+               <attributes>
+                       <attribute name="optional" value="true"/>
+                       <attribute name="maven.pomderived" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+               <attributes>
+                       <attribute name="maven.pomderived" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="src" output="target/test-classes" path="src/test/java">
+               <attributes>
+                       <attribute name="optional" value="true"/>
+                       <attribute name="maven.pomderived" value="true"/>
+                       <attribute name="test" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+               <attributes>
+                       <attribute name="maven.pomderived" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+               <attributes>
+                       <attribute name="maven.pomderived" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/near-rt-ric-simulator/nearric-simulator/a1-med-api/.gitignore b/near-rt-ric-simulator/nearric-simulator/a1-med-api/.gitignore
new file mode 100644 (file)
index 0000000..b83d222
--- /dev/null
@@ -0,0 +1 @@
+/target/
diff --git a/near-rt-ric-simulator/nearric-simulator/a1-med-api/.project b/near-rt-ric-simulator/nearric-simulator/a1-med-api/.project
new file mode 100644 (file)
index 0000000..cdf3219
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>a1-med-api</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.m2e.core.maven2Builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.m2e.core.maven2Nature</nature>
+       </natures>
+</projectDescription>
diff --git a/near-rt-ric-simulator/nearric-simulator/a1-med-api/.settings/org.eclipse.core.resources.prefs b/near-rt-ric-simulator/nearric-simulator/a1-med-api/.settings/org.eclipse.core.resources.prefs
new file mode 100644 (file)
index 0000000..db32697
--- /dev/null
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+encoding//src/main/resources=UTF-8
+encoding/<project>=UTF-8
diff --git a/near-rt-ric-simulator/nearric-simulator/a1-med-api/.settings/org.eclipse.jdt.core.prefs b/near-rt-ric-simulator/nearric-simulator/a1-med-api/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..71df522
--- /dev/null
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/near-rt-ric-simulator/nearric-simulator/a1-med-api/.settings/org.eclipse.m2e.core.prefs b/near-rt-ric-simulator/nearric-simulator/a1-med-api/.settings/org.eclipse.m2e.core.prefs
new file mode 100644 (file)
index 0000000..f897a7f
--- /dev/null
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/near-rt-ric-simulator/nearric-simulator/a1-med-api/a1-med-api.iml b/near-rt-ric-simulator/nearric-simulator/a1-med-api/a1-med-api.iml
new file mode 100644 (file)
index 0000000..89d40ee
--- /dev/null
@@ -0,0 +1,969 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<module version="4" relativePaths="false" type="JAVA_MODULE"> 
+  <component name="NewModuleRootManager"> 
+    <exclude-output/>  
+    <orderEntry type="inheritedJdk"/>  
+    <!-- output url="file://$$MODULE_DIR$$/${maven.build.dest}"/ -->  
+    <!-- output-test url="file://$$MODULE_DIR$$/${maven.test.dest}"/ -->  
+    <content url="file://$MODULE_DIR$"> 
+      <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.sourceDirectory}" isTestSource="false"/ -->  
+      <!-- sourceFolder url="file://$$MODULE_DIR$$/${pom.build.testSourceDirectory}" isTestSource="true"/ -->  
+      <sourceFolder url="file://$MODULE_DIR$/target/generated-sources/a1med/src/gen/java/main" isTestSource="false"/>
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" isTestSource="false"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/classes"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/generated-sources/a1med/.swagger-codegen"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/generated-sources/a1med/src/main"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/generated-sources/a1med/src/test"/>
+      <excludeFolder url="file://$MODULE_DIR$/target/test-classes"/>
+    </content>  
+    <orderEntry type="sourceFolder" forTests="false"/>  
+    <!-- Next include each dependency:
+      <orderEntry type="module" module-name="${dep.artifactId}"/>
+      <orderEntry type="module-library">
+        <library name="${dep.artifactId}">
+          <CLASSES>
+            <root url="jar://${lib.path}!/"/>
+          </CLASSES>
+          <JAVADOC/>
+          <SOURCES/>
+        </library>
+      </orderEntry>
+     -->  
+    <output url="file://$MODULE_DIR$/target/classes"/>
+    <output-test url="file://$MODULE_DIR$/target/test-classes"/>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.1.9.RELEASE/spring-boot-autoconfigure-2.1.9.RELEASE.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/2.1.9.RELEASE/spring-boot-autoconfigure-2.1.9.RELEASE-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/springframework/boot/spring-boot/2.1.9.RELEASE/spring-boot-2.1.9.RELEASE.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/springframework/boot/spring-boot/2.1.9.RELEASE/spring-boot-2.1.9.RELEASE-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/springframework/spring-core/5.1.10.RELEASE/spring-core-5.1.10.RELEASE.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/springframework/spring-core/5.1.10.RELEASE/spring-core-5.1.10.RELEASE-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/springframework/spring-jcl/5.1.10.RELEASE/spring-jcl-5.1.10.RELEASE.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/springframework/spring-jcl/5.1.10.RELEASE/spring-jcl-5.1.10.RELEASE-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/springframework/spring-context/5.1.10.RELEASE/spring-context-5.1.10.RELEASE.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/springframework/spring-context/5.1.10.RELEASE/spring-context-5.1.10.RELEASE-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/springframework/spring-aop/5.1.10.RELEASE/spring-aop-5.1.10.RELEASE.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/springframework/spring-aop/5.1.10.RELEASE/spring-aop-5.1.10.RELEASE-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/springframework/spring-beans/5.1.10.RELEASE/spring-beans-5.1.10.RELEASE.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/springframework/spring-beans/5.1.10.RELEASE/spring-beans-5.1.10.RELEASE-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/springframework/spring-expression/5.1.10.RELEASE/spring-expression-5.1.10.RELEASE.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/springframework/spring-expression/5.1.10.RELEASE/spring-expression-5.1.10.RELEASE-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/javax/servlet/javax.servlet-api/4.0.1/javax.servlet-api-4.0.1.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/javax/servlet/javax.servlet-api/4.0.1/javax.servlet-api-4.0.1-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/io/swagger/core/v3/swagger-annotations/2.0.8/swagger-annotations-2.0.8.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/io/swagger/core/v3/swagger-annotations/2.0.8/swagger-annotations-2.0.8-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/io/swagger/swagger-codegen-maven-plugin/2.4.8/swagger-codegen-maven-plugin-2.4.8.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/io/swagger/swagger-codegen-maven-plugin/2.4.8/swagger-codegen-maven-plugin-2.4.8-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-core/3.2.5/maven-core-3.2.5.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-core/3.2.5/maven-core-3.2.5-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-model/3.2.5/maven-model-3.2.5.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-model/3.2.5/maven-model-3.2.5-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/codehaus/plexus/plexus-utils/3.0.20/plexus-utils-3.0.20.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/codehaus/plexus/plexus-utils/3.0.20/plexus-utils-3.0.20-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-settings/3.2.5/maven-settings-3.2.5.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-settings/3.2.5/maven-settings-3.2.5-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-settings-builder/3.2.5/maven-settings-builder-3.2.5.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-settings-builder/3.2.5/maven-settings-builder-3.2.5-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.21/plexus-interpolation-1.21.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.21/plexus-interpolation-1.21-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/sonatype/plexus/plexus-sec-dispatcher/1.3/plexus-sec-dispatcher-1.3.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/sonatype/plexus/plexus-sec-dispatcher/1.3/plexus-sec-dispatcher-1.3-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-repository-metadata/3.2.5/maven-repository-metadata-3.2.5.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-repository-metadata/3.2.5/maven-repository-metadata-3.2.5-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-artifact/3.2.5/maven-artifact-3.2.5.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-artifact/3.2.5/maven-artifact-3.2.5-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-plugin-api/3.2.5/maven-plugin-api-3.2.5.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-plugin-api/3.2.5/maven-plugin-api-3.2.5-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.0.M1/org.eclipse.sisu.plexus-0.3.0.M1.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.0.M1/org.eclipse.sisu.plexus-0.3.0.M1-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/javax/enterprise/cdi-api/1.0/cdi-api-1.0.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/javax/enterprise/cdi-api/1.0/cdi-api-1.0-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/javax/annotation/jsr250-api/1.0/jsr250-api-1.0-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/javax/inject/javax.inject/1/javax.inject-1.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/javax/inject/javax.inject/1/javax.inject-1-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.0.M1/org.eclipse.sisu.inject-0.3.0.M1.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.0.M1/org.eclipse.sisu.inject-0.3.0.M1-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-model-builder/3.2.5/maven-model-builder-3.2.5.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-model-builder/3.2.5/maven-model-builder-3.2.5-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-aether-provider/3.2.5/maven-aether-provider-3.2.5.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-aether-provider/3.2.5/maven-aether-provider-3.2.5-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/eclipse/aether/aether-api/1.0.0.v20140518/aether-api-1.0.0.v20140518.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/eclipse/aether/aether-api/1.0.0.v20140518/aether-api-1.0.0.v20140518-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/eclipse/aether/aether-spi/1.0.0.v20140518/aether-spi-1.0.0.v20140518.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/eclipse/aether/aether-spi/1.0.0.v20140518/aether-spi-1.0.0.v20140518-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/eclipse/aether/aether-util/1.0.0.v20140518/aether-util-1.0.0.v20140518.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/eclipse/aether/aether-util/1.0.0.v20140518/aether-util-1.0.0.v20140518-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/eclipse/aether/aether-impl/1.0.0.v20140518/aether-impl-1.0.0.v20140518.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/eclipse/aether/aether-impl/1.0.0.v20140518/aether-impl-1.0.0.v20140518-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/sonatype/sisu/sisu-guice/3.2.3/sisu-guice-3.2.3-no_aop.jar!/"/>
+        </CLASSES>
+        <SOURCES/>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/aopalliance/aopalliance/1.0/aopalliance-1.0.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/aopalliance/aopalliance/1.0/aopalliance-1.0-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/google/guava/guava/16.0.1/guava-16.0.1.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/google/guava/guava/16.0.1/guava-16.0.1-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-compat/3.2.5/maven-compat-3.2.5.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/maven-compat/3.2.5/maven-compat-3.2.5-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/wagon/wagon-provider-api/2.8/wagon-provider-api-2.8.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/wagon/wagon-provider-api/2.8/wagon-provider-api-2.8-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/plugin-tools/maven-plugin-annotations/3.4/maven-plugin-annotations-3.4.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/maven/plugin-tools/maven-plugin-annotations/3.4/maven-plugin-annotations-3.4-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/io/swagger/swagger-codegen/2.4.8/swagger-codegen-2.4.8.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/io/swagger/swagger-codegen/2.4.8/swagger-codegen-2.4.8-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/io/swagger/swagger-parser/1.0.46/swagger-parser-1.0.46.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/io/swagger/swagger-parser/1.0.46/swagger-parser-1.0.46-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/io/swagger/swagger-core/1.5.23/swagger-core-1.5.23.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/io/swagger/swagger-core/1.5.23/swagger-core-1.5.23-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/slf4j/slf4j-api/1.7.28/slf4j-api-1.7.28.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/slf4j/slf4j-api/1.7.28/slf4j-api-1.7.28-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.9.0/jackson-annotations-2.9.0-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.9.9.3/jackson-databind-2.9.9.3.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.9.9.3/jackson-databind-2.9.9.3-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.9.9/jackson-core-2.9.9-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.9.9/jackson-dataformat-yaml-2.9.9.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.9.9/jackson-dataformat-yaml-2.9.9-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/yaml/snakeyaml/1.23/snakeyaml-1.23.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/yaml/snakeyaml/1.23/snakeyaml-1.23-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/io/swagger/swagger-models/1.5.23/swagger-models-1.5.23.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/io/swagger/swagger-models/1.5.23/swagger-models-1.5.23-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/io/swagger/swagger-annotations/1.5.23/swagger-annotations-1.5.23.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/io/swagger/swagger-annotations/1.5.23/swagger-annotations-1.5.23-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/javax/validation/validation-api/2.0.1.Final/validation-api-2.0.1.Final-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/slf4j/slf4j-ext/1.7.28/slf4j-ext-1.7.28.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/slf4j/slf4j-ext/1.7.28/slf4j-ext-1.7.28-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/commons-io/commons-io/2.4/commons-io-2.4-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/io/swagger/swagger-compat-spec-parser/1.0.46/swagger-compat-spec-parser-1.0.46.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/io/swagger/swagger-compat-spec-parser/1.0.46/swagger-compat-spec-parser-1.0.46-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/github/java-json-tools/json-schema-validator/2.2.8/json-schema-validator-2.2.8.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/github/java-json-tools/json-schema-validator/2.2.8/json-schema-validator-2.2.8-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/github/java-json-tools/json-schema-core/1.2.8/json-schema-core-1.2.8.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/github/java-json-tools/json-schema-core/1.2.8/json-schema-core-1.2.8-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/google/code/findbugs/jsr305/3.0.1/jsr305-3.0.1.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/google/code/findbugs/jsr305/3.0.1/jsr305-3.0.1-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/mozilla/rhino/1.7R4/rhino-1.7R4.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/mozilla/rhino/1.7R4/rhino-1.7R4-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/github/fge/jackson-coreutils/1.6/jackson-coreutils-1.6.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/github/fge/jackson-coreutils/1.6/jackson-coreutils-1.6-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/github/fge/msg-simple/1.1/msg-simple-1.1.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/github/fge/msg-simple/1.1/msg-simple-1.1-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/github/fge/btf/1.2/btf-1.2.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/github/fge/btf/1.2/btf-1.2-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/github/fge/uri-template/0.9/uri-template-0.9.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/github/fge/uri-template/0.9/uri-template-0.9-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/javax/mail/mailapi/1.4.3/mailapi-1.4.3.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/javax/mail/mailapi/1.4.3/mailapi-1.4.3-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/javax/activation/activation/1.1/activation-1.1.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/javax/activation/activation/1.1/activation-1.1-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/joda-time/joda-time/2.10.4/joda-time-2.10.4.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/joda-time/joda-time/2.10.4/joda-time-2.10.4-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/googlecode/libphonenumber/libphonenumber/8.0.0/libphonenumber-8.0.0.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/googlecode/libphonenumber/libphonenumber/8.0.0/libphonenumber-8.0.0-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/net/sf/jopt-simple/jopt-simple/5.0.3/jopt-simple-5.0.3.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/net/sf/jopt-simple/jopt-simple/5.0.3/jopt-simple-5.0.3-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/github/fge/json-patch/1.6/json-patch-1.6.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/github/fge/json-patch/1.6/json-patch-1.6-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/httpcomponents/httpclient/4.5.10/httpclient-4.5.10.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/httpcomponents/httpclient/4.5.10/httpclient-4.5.10-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/apache/httpcomponents/httpcore/4.4.12/httpcore-4.4.12.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/apache/httpcomponents/httpcore/4.4.12/httpcore-4.4.12-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/commons-codec/commons-codec/1.11/commons-codec-1.11.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/commons-codec/commons-codec/1.11/commons-codec-1.11-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/samskivert/jmustache/1.14/jmustache-1.14.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/samskivert/jmustache/1.14/jmustache-1.14-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/slf4j/slf4j-simple/1.7.28/slf4j-simple-1.7.28.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/slf4j/slf4j-simple/1.7.28/slf4j-simple-1.7.28-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/commons-cli/commons-cli/1.2/commons-cli-1.2.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/commons-cli/commons-cli/1.2/commons-cli-1.2-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/atlassian/commonmark/commonmark/0.9.0/commonmark-0.9.0.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/atlassian/commonmark/commonmark/0.9.0/commonmark-0.9.0-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.9.9/jackson-jaxrs-json-provider-2.9.9.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-json-provider/2.9.9/jackson-jaxrs-json-provider-2.9.9-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.9.9/jackson-jaxrs-base-2.9.9.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/jaxrs/jackson-jaxrs-base/2.9.9/jackson-jaxrs-base-2.9.9-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.9.9/jackson-module-jaxb-annotations-2.9.9.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/module/jackson-module-jaxb-annotations/2.9.9/jackson-module-jaxb-annotations-2.9.9-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.9.9/jackson-datatype-jsr310-2.9.9-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/squareup/okio/okio/1.6.0/okio-1.6.0.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/squareup/okio/okio/1.6.0/okio-1.6.0-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/squareup/okhttp/logging-interceptor/2.7.5/logging-interceptor-2.7.5.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/squareup/okhttp/logging-interceptor/2.7.5/logging-interceptor-2.7.5-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/io/gsonfire/gson-fire/1.8.2/gson-fire-1.8.2.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/io/gsonfire/gson-fire/1.8.2/gson-fire-1.8.2-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/com/google/code/gson/gson/2.8.5/gson-2.8.5.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/com/google/code/gson/gson/2.8.5/gson-2.8.5-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/threeten/threetenbp/1.3.6/threetenbp-1.3.6.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/threeten/threetenbp/1.3.6/threetenbp-1.3.6-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" exported="">
+      <library>
+        <CLASSES>
+          <root url="jar:///root/.m2/repository/org/springframework/spring-web/5.1.10.RELEASE/spring-web-5.1.10.RELEASE.jar!/"/>
+        </CLASSES>
+        <SOURCES>
+          <root url="jar:///root/.m2/repository/org/springframework/spring-web/5.1.10.RELEASE/spring-web-5.1.10.RELEASE-sources.jar!/"/>
+        </SOURCES>
+      </library>
+    </orderEntry>
+  </component>  
+  <component name="ModuleRootManager"/>  
+  <!-- If it's a war project:
+  <component name="WebModuleProperties">
+    <containerElement type="module" name="${dep.artifactId}">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/classes" />
+    </containerElement>
+    <containerElement type="library" level="module" name="${dep.artifactId}">
+      <attribute name="method" value="1" />
+      <attribute name="URI" value="/WEB-INF/lib/${dep.systemPath.name}" />
+    </containerElement>
+    <deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}/WEB-INF/web.xml" version="" />
+    <webroots>
+      <root url="file://$MODULE_DIR$/${pom.build.warSourceDirectory}" relative="/" />
+    </webroots>
+  </component>
+  --> 
+</module>
diff --git a/near-rt-ric-simulator/nearric-simulator/a1-med-api/a1-med-api.ipr b/near-rt-ric-simulator/nearric-simulator/a1-med-api/a1-med-api.ipr
new file mode 100644 (file)
index 0000000..49d99c0
--- /dev/null
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<project version="4" relativePaths="false"> 
+  <component name="ProjectRootManager" version="2" assert-keyword="true" project-jdk-name="1.8" jdk-15="true" languageLevel="JDK_1_8"/>  
+  <component name="CodeStyleManager"> 
+    <option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true"/>  
+    <option name="CODE_STYLE_SCHEME" value=""/> 
+  </component>  
+  <component name="libraryTable"/>  
+  <component name="CompilerConfiguration"> 
+    <option name="DEFAULT_COMPILER" value="Javac"/>  
+    <option name="CLEAR_OUTPUT_DIRECTORY" value="false"/>  
+    <!--
+    <wildcardResourcePatterns>
+      <entry name="${wildcardResourcePattern}"/>
+    </wildcardResourcePatterns>
+    -->  
+    <wildcardResourcePatterns>
+      <entry name="!?*.java"/>
+    </wildcardResourcePatterns>
+  </component>  
+  <component name="JavacSettings"> 
+    <option name="DEBUGGING_INFO" value="true"/>  
+    <option name="GENERATE_NO_WARNINGS" value="false"/>  
+    <option name="DEPRECATION" value="true"/>  
+    <option name="ADDITIONAL_OPTIONS_STRING" value=""/>  
+    <option name="MAXIMUM_HEAP_SIZE" value="128"/>  
+    <option name="USE_GENERICS_COMPILER" value="false"/> 
+  </component>  
+  <component name="JikesSettings"> 
+    <option name="DEBUGGING_INFO" value="true"/>  
+    <option name="DEPRECATION" value="true"/>  
+    <option name="GENERATE_NO_WARNINGS" value="false"/>  
+    <option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false"/>  
+    <option name="DO_FULL_DEPENDENCE_CHECK" value="false"/>  
+    <option name="IS_INCREMENTAL_MODE" value="false"/>  
+    <option name="IS_EMACS_ERRORS_MODE" value="true"/>  
+    <option name="ADDITIONAL_OPTIONS_STRING" value=""/>  
+    <option name="MAXIMUM_HEAP_SIZE" value="128"/> 
+  </component>  
+  <component name="AntConfiguration"> 
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>  
+    <option name="FILTER_TARGETS" value="false"/> 
+  </component>  
+  <component name="JavadocGenerationManager"> 
+    <option name="OUTPUT_DIRECTORY"/>  
+    <option name="OPTION_SCOPE" value="protected"/>  
+    <option name="OPTION_HIERARCHY" value="false"/>  
+    <option name="OPTION_NAVIGATOR" value="false"/>  
+    <option name="OPTION_INDEX" value="false"/>  
+    <option name="OPTION_SEPARATE_INDEX" value="false"/>  
+    <option name="OPTION_USE_1_1" value="false"/>  
+    <option name="OPTION_DOCUMENT_TAG_USE" value="false"/>  
+    <option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false"/>  
+    <option name="OPTION_DOCUMENT_TAG_VERSION" value="false"/>  
+    <option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="false"/>  
+    <option name="OPTION_DEPRECATED_LIST" value="false"/>  
+    <option name="OTHER_OPTIONS"/>  
+    <option name="HEAP_SIZE"/>  
+    <option name="OPEN_IN_BROWSER" value="false"/> 
+  </component>  
+  <component name="JUnitProjectSettings"> 
+    <option name="TEST_RUNNER" value="UI"/> 
+  </component>  
+  <component name="EntryPointsManager"> 
+    <entry_points/> 
+  </component>  
+  <component name="DataSourceManager"/>  
+  <component name="ExportToHTMLSettings"> 
+    <option name="PRINT_LINE_NUMBERS" value="false"/>  
+    <option name="OPEN_IN_BROWSER" value="false"/>  
+    <option name="OUTPUT_DIRECTORY"/> 
+  </component>  
+  <component name="ImportConfiguration"> 
+    <option name="VENDOR"/>  
+    <option name="RELEASE_TAG"/>  
+    <option name="LOG_MESSAGE"/>  
+    <option name="CHECKOUT_AFTER_IMPORT" value="true"/> 
+  </component>  
+  <component name="ProjectModuleManager"> 
+    <modules> 
+      <!-- module filepath="$$PROJECT_DIR$$/${pom.artifactId}.iml"/ -->  
+      <module filepath="$PROJECT_DIR$/a1-med-api.iml"/>
+    </modules> 
+  </component>  
+  <UsedPathMacros> 
+    <!--<macro name="cargo"></macro>--> 
+  </UsedPathMacros> 
+</project>
diff --git a/near-rt-ric-simulator/nearric-simulator/a1-med-api/a1-med-api.iws b/near-rt-ric-simulator/nearric-simulator/a1-med-api/a1-med-api.iws
new file mode 100644 (file)
index 0000000..03c854e
--- /dev/null
@@ -0,0 +1,418 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you 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.
+-->
+<project version="4" relativePaths="false"> 
+  <component name="LvcsProjectConfiguration"> 
+    <option name="ADD_LABEL_ON_PROJECT_OPEN" value="true"/>  
+    <option name="ADD_LABEL_ON_PROJECT_COMPILATION" value="true"/>  
+    <option name="ADD_LABEL_ON_FILE_PACKAGE_COMPILATION" value="true"/>  
+    <option name="ADD_LABEL_ON_PROJECT_MAKE" value="true"/>  
+    <option name="ADD_LABEL_ON_RUNNING" value="true"/>  
+    <option name="ADD_LABEL_ON_DEBUGGING" value="true"/>  
+    <option name="ADD_LABEL_ON_UNIT_TEST_PASSED" value="true"/>  
+    <option name="ADD_LABEL_ON_UNIT_TEST_FAILED" value="true"/> 
+  </component>  
+  <component name="PropertiesComponent"> 
+    <property name="MemberChooser.copyJavadoc" value="false"/>  
+    <property name="GoToClass.includeLibraries" value="false"/>  
+    <property name="MemberChooser.showClasses" value="true"/>  
+    <property name="MemberChooser.sorted" value="false"/>  
+    <property name="GoToFile.includeJavaFiles" value="false"/>  
+    <property name="GoToClass.toSaveIncludeLibraries" value="false"/> 
+  </component>  
+  <component name="ToolWindowManager"> 
+    <frame x="-4" y="-4" width="1032" height="746" extended-state="6"/>  
+    <editor active="false"/>  
+    <layout> 
+      <window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>  
+      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="7"/>  
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="0"/>  
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="1"/>  
+      <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1"/>  
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>  
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="6"/>  
+      <window_info id="Aspects" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>  
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1"/>  
+      <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="2"/>  
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2"/>  
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="4"/>  
+      <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.4" order="0"/>  
+      <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2"/>  
+      <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="0"/>  
+      <window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="3"/>  
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="5"/> 
+    </layout> 
+  </component>  
+  <component name="ErrorTreeViewConfiguration"> 
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>  
+    <option name="HIDE_WARNINGS" value="false"/> 
+  </component>  
+  <component name="StructureViewFactory"> 
+    <option name="SORT_MODE" value="0"/>  
+    <option name="GROUP_INHERITED" value="true"/>  
+    <option name="AUTOSCROLL_MODE" value="true"/>  
+    <option name="SHOW_FIELDS" value="true"/>  
+    <option name="AUTOSCROLL_FROM_SOURCE" value="false"/>  
+    <option name="GROUP_GETTERS_AND_SETTERS" value="true"/>  
+    <option name="SHOW_INHERITED" value="false"/>  
+    <option name="HIDE_NOT_PUBLIC" value="false"/> 
+  </component>  
+  <component name="ProjectViewSettings"> 
+    <navigator currentView="ProjectPane" flattenPackages="false" showMembers="false" showStructure="false" autoscrollToSource="false" splitterProportion="0.5"/>  
+    <view id="ProjectPane"> 
+      <expanded_node type="directory" url="file://$PROJECT_DIR$"/> 
+    </view>  
+    <view id="SourcepathPane"/>  
+    <view id="ClasspathPane"/> 
+  </component>  
+  <component name="Commander"> 
+    <leftPanel view="Project"/>  
+    <rightPanel view="Project"/>  
+    <splitter proportion="0.5"/> 
+  </component>  
+  <component name="AspectsView"/>  
+  <component name="SelectInManager"/>  
+  <component name="HierarchyBrowserManager"> 
+    <option name="SHOW_PACKAGES" value="false"/>  
+    <option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>  
+    <option name="SORT_ALPHABETICALLY" value="false"/> 
+  </component>  
+  <component name="TodoView" selected-index="0"> 
+    <todo-panel id="selected-file"> 
+      <are-packages-shown value="false"/>  
+      <flatten-packages value="false"/>  
+      <is-autoscroll-to-source value="true"/> 
+    </todo-panel>  
+    <todo-panel id="all"> 
+      <are-packages-shown value="true"/>  
+      <flatten-packages value="false"/>  
+      <is-autoscroll-to-source value="true"/> 
+    </todo-panel> 
+  </component>  
+  <component name="editorManager"/>  
+  <component name="editorHistoryManager"/>  
+  <component name="DaemonCodeAnalyzer"> 
+    <disable_hints/> 
+  </component>  
+  <component name="InspectionManager"> 
+    <option name="AUTOSCROLL_TO_SOURCE" value="false"/>  
+    <option name="SPLITTER_PROPORTION" value="0.5"/>  
+    <profile name="Default"/> 
+  </component>  
+  <component name="BookmarkManager"/>  
+  <component name="DebuggerManager"> 
+    <line_breakpoints/>  
+    <exception_breakpoints> 
+      <breakpoint_any> 
+        <option name="NOTIFY_CAUGHT" value="true"/>  
+        <option name="NOTIFY_UNCAUGHT" value="true"/>  
+        <option name="ENABLED" value="false"/>  
+        <option name="SUSPEND_VM" value="true"/>  
+        <option name="COUNT_FILTER_ENABLED" value="false"/>  
+        <option name="COUNT_FILTER" value="0"/>  
+        <option name="CONDITION_ENABLED" value="false"/>  
+        <option name="CONDITION"/>  
+        <option name="LOG_ENABLED" value="false"/>  
+        <option name="LOG_EXPRESSION_ENABLED" value="false"/>  
+        <option name="LOG_MESSAGE"/>  
+        <option name="CLASS_FILTERS_ENABLED" value="false"/>  
+        <option name="INVERSE_CLASS_FILLTERS" value="false"/>  
+        <option name="SUSPEND_POLICY" value="SuspendAll"/> 
+      </breakpoint_any> 
+    </exception_breakpoints>  
+    <field_breakpoints/>  
+    <method_breakpoints/> 
+  </component>  
+  <component name="DebuggerSettings"> 
+    <option name="TRACING_FILTERS_ENABLED" value="true"/>  
+    <option name="TOSTRING_CLASSES_ENABLED" value="false"/>  
+    <option name="VALUE_LOOKUP_DELAY" value="700"/>  
+    <option name="DEBUGGER_TRANSPORT" value="0"/>  
+    <option name="FORCE_CLASSIC_VM" value="true"/>  
+    <option name="HIDE_DEBUGGER_ON_PROCESS_TERMINATION" value="false"/>  
+    <option name="SKIP_SYNTHETIC_METHODS" value="true"/>  
+    <option name="SKIP_CONSTRUCTORS" value="false"/>  
+    <option name="STEP_THREAD_SUSPEND_POLICY" value="SuspendThread"/>  
+    <default_breakpoint_settings> 
+      <option name="NOTIFY_CAUGHT" value="true"/>  
+      <option name="NOTIFY_UNCAUGHT" value="true"/>  
+      <option name="WATCH_MODIFICATION" value="true"/>  
+      <option name="WATCH_ACCESS" value="true"/>  
+      <option name="WATCH_ENTRY" value="true"/>  
+      <option name="WATCH_EXIT" value="true"/>  
+      <option name="ENABLED" value="true"/>  
+      <option name="SUSPEND_VM" value="true"/>  
+      <option name="COUNT_FILTER_ENABLED" value="false"/>  
+      <option name="COUNT_FILTER" value="0"/>  
+      <option name="CONDITION_ENABLED" value="false"/>  
+      <option name="CONDITION"/>  
+      <option name="LOG_ENABLED" value="false"/>  
+      <option name="LOG_EXPRESSION_ENABLED" value="false"/>  
+      <option name="LOG_MESSAGE"/>  
+      <option name="CLASS_FILTERS_ENABLED" value="false"/>  
+      <option name="INVERSE_CLASS_FILLTERS" value="false"/>  
+      <option name="SUSPEND_POLICY" value="SuspendAll"/> 
+    </default_breakpoint_settings>  
+    <filter> 
+      <option name="PATTERN" value="com.sun.*"/>  
+      <option name="ENABLED" value="true"/> 
+    </filter>  
+    <filter> 
+      <option name="PATTERN" value="java.*"/>  
+      <option name="ENABLED" value="true"/> 
+    </filter>  
+    <filter> 
+      <option name="PATTERN" value="javax.*"/>  
+      <option name="ENABLED" value="true"/> 
+    </filter>  
+    <filter> 
+      <option name="PATTERN" value="org.omg.*"/>  
+      <option name="ENABLED" value="true"/> 
+    </filter>  
+    <filter> 
+      <option name="PATTERN" value="sun.*"/>  
+      <option name="ENABLED" value="true"/> 
+    </filter>  
+    <filter> 
+      <option name="PATTERN" value="junit.*"/>  
+      <option name="ENABLED" value="true"/> 
+    </filter> 
+  </component>  
+  <component name="CompilerWorkspaceConfiguration"> 
+    <option name="COMPILE_IN_BACKGROUND" value="false"/>  
+    <option name="AUTO_SHOW_ERRORS_IN_EDITOR" value="true"/> 
+  </component>  
+  <component name="RunManager"> 
+    <activeType name="Application"/>  
+    <configuration selected="false" default="true" type="Applet" factoryName="Applet"> 
+      <module name=""/>  
+      <option name="MAIN_CLASS_NAME"/>  
+      <option name="HTML_FILE_NAME"/>  
+      <option name="HTML_USED" value="false"/>  
+      <option name="WIDTH" value="400"/>  
+      <option name="HEIGHT" value="300"/>  
+      <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy"/>  
+      <option name="VM_PARAMETERS"/> 
+    </configuration>  
+    <configuration selected="false" default="true" type="Remote" factoryName="Remote"> 
+      <option name="USE_SOCKET_TRANSPORT" value="true"/>  
+      <option name="SERVER_MODE" value="false"/>  
+      <option name="SHMEM_ADDRESS" value="javadebug"/>  
+      <option name="HOST" value="localhost"/>  
+      <option name="PORT" value="5005"/> 
+    </configuration>  
+    <configuration selected="false" default="true" type="Application" factoryName="Application"> 
+      <option name="MAIN_CLASS_NAME"/>  
+      <option name="VM_PARAMETERS"/>  
+      <option name="PROGRAM_PARAMETERS"/>  
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/>  
+      <module name=""/> 
+    </configuration>  
+    <configuration selected="false" default="true" type="JUnit" factoryName="JUnit"> 
+      <module name=""/>  
+      <option name="PACKAGE_NAME"/>  
+      <option name="MAIN_CLASS_NAME"/>  
+      <option name="METHOD_NAME"/>  
+      <option name="TEST_OBJECT" value="class"/>  
+      <option name="VM_PARAMETERS"/>  
+      <option name="PARAMETERS"/>  
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/>  
+      <option name="ADDITIONAL_CLASS_PATH"/>  
+      <option name="TEST_SEARCH_SCOPE"> 
+        <value defaultName="wholeProject"/> 
+      </option> 
+    </configuration> 
+  </component>  
+  <component name="VcsManagerConfiguration"> 
+    <option name="ACTIVE_VCS_NAME" value=""/>  
+    <option name="STATE" value="0"/> 
+  </component>  
+  <component name="VssConfiguration"> 
+    <CheckoutOptions> 
+      <option name="COMMENT" value=""/>  
+      <option name="DO_NOT_GET_LATEST_VERSION" value="false"/>  
+      <option name="REPLACE_WRITABLE" value="false"/>  
+      <option name="RECURSIVE" value="false"/> 
+    </CheckoutOptions>  
+    <CheckinOptions> 
+      <option name="COMMENT" value=""/>  
+      <option name="KEEP_CHECKED_OUT" value="false"/>  
+      <option name="RECURSIVE" value="false"/> 
+    </CheckinOptions>  
+    <AddOptions> 
+      <option name="COMMENT" value=""/>  
+      <option name="STORE_ONLY_LATEST_VERSION" value="false"/>  
+      <option name="CHECK_OUT_IMMEDIATELY" value="false"/>  
+      <option name="FILE_TYPE" value="0"/> 
+    </AddOptions>  
+    <UndocheckoutOptions> 
+      <option name="MAKE_WRITABLE" value="false"/>  
+      <option name="REPLACE_LOCAL_COPY" value="0"/>  
+      <option name="RECURSIVE" value="false"/> 
+    </UndocheckoutOptions>  
+    <DiffOptions> 
+      <option name="IGNORE_WHITE_SPACE" value="false"/>  
+      <option name="IGNORE_CASE" value="false"/> 
+    </DiffOptions>  
+    <GetOptions> 
+      <option name="REPLACE_WRITABLE" value="0"/>  
+      <option name="MAKE_WRITABLE" value="false"/>  
+      <option name="RECURSIVE" value="false"/> 
+    </GetOptions>  
+    <option name="CLIENT_PATH" value=""/>  
+    <option name="SRCSAFEINI_PATH" value=""/>  
+    <option name="USER_NAME" value=""/>  
+    <option name="PWD" value=""/>  
+    <option name="SHOW_CHECKOUT_OPTIONS" value="true"/>  
+    <option name="SHOW_ADD_OPTIONS" value="true"/>  
+    <option name="SHOW_UNDOCHECKOUT_OPTIONS" value="true"/>  
+    <option name="SHOW_DIFF_OPTIONS" value="true"/>  
+    <option name="SHOW_GET_OPTIONS" value="true"/>  
+    <option name="USE_EXTERNAL_DIFF" value="false"/>  
+    <option name="EXTERNAL_DIFF_PATH" value=""/>  
+    <option name="REUSE_LAST_COMMENT" value="false"/>  
+    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
+    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
+    <option name="LAST_COMMIT_MESSAGE" value=""/>  
+    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/> 
+  </component>  
+  <component name="CheckinPanelState"/>  
+  <component name="WebViewSettings"> 
+    <webview flattenPackages="false" showMembers="false" autoscrollToSource="false"/> 
+  </component>  
+  <component name="EjbViewSettings"> 
+    <EjbView showMembers="false" autoscrollToSource="false"/> 
+  </component>  
+  <component name="AppServerRunManager"/>  
+  <component name="StarteamConfiguration"> 
+    <option name="SERVER" value=""/>  
+    <option name="PORT" value="49201"/>  
+    <option name="USER" value=""/>  
+    <option name="PASSWORD" value=""/>  
+    <option name="PROJECT" value=""/>  
+    <option name="VIEW" value=""/>  
+    <option name="ALTERNATIVE_WORKING_PATH" value=""/>  
+    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
+    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
+    <option name="LAST_COMMIT_MESSAGE" value=""/>  
+    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/> 
+  </component>  
+  <component name="Cvs2Configuration"> 
+    <option name="ON_FILE_ADDING" value="0"/>  
+    <option name="ON_FILE_REMOVING" value="0"/>  
+    <option name="PRUNE_EMPTY_DIRECTORIES" value="true"/>  
+    <option name="SHOW_UPDATE_OPTIONS" value="true"/>  
+    <option name="SHOW_ADD_OPTIONS" value="true"/>  
+    <option name="SHOW_REMOVE_OPTIONS" value="true"/>  
+    <option name="MERGING_MODE" value="0"/>  
+    <option name="MERGE_WITH_BRANCH1_NAME" value="HEAD"/>  
+    <option name="MERGE_WITH_BRANCH2_NAME" value="HEAD"/>  
+    <option name="RESET_STICKY" value="false"/>  
+    <option name="CREATE_NEW_DIRECTORIES" value="true"/>  
+    <option name="DEFAULT_TEXT_FILE_SUBSTITUTION" value="kv"/>  
+    <option name="PROCESS_UNKNOWN_FILES" value="false"/>  
+    <option name="PROCESS_DELETED_FILES" value="false"/>  
+    <option name="SHOW_EDIT_DIALOG" value="true"/>  
+    <option name="RESERVED_EDIT" value="false"/>  
+    <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6"/>  
+    <option name="SHOW_CHECKOUT_OPTIONS" value="true"/>  
+    <option name="CHECKOUT_DATE_OR_REVISION_SETTINGS"> 
+      <value> 
+        <option name="BRANCH" value=""/>  
+        <option name="DATE" value=""/>  
+        <option name="USE_BRANCH" value="false"/>  
+        <option name="USE_DATE" value="false"/> 
+      </value> 
+    </option>  
+    <option name="UPDATE_DATE_OR_REVISION_SETTINGS"> 
+      <value> 
+        <option name="BRANCH" value=""/>  
+        <option name="DATE" value=""/>  
+        <option name="USE_BRANCH" value="false"/>  
+        <option name="USE_DATE" value="false"/> 
+      </value> 
+    </option>  
+    <option name="SHOW_CHANGES_REVISION_SETTINGS"> 
+      <value> 
+        <option name="BRANCH" value=""/>  
+        <option name="DATE" value=""/>  
+        <option name="USE_BRANCH" value="false"/>  
+        <option name="USE_DATE" value="false"/> 
+      </value> 
+    </option>  
+    <option name="SHOW_OUTPUT" value="false"/>  
+    <option name="SHOW_FILE_HISTORY_AS_TREE" value="false"/>  
+    <option name="UPDATE_GROUP_BY_PACKAGES" value="false"/>  
+    <option name="ADD_WATCH_INDEX" value="0"/>  
+    <option name="REMOVE_WATCH_INDEX" value="0"/>  
+    <option name="UPDATE_KEYWORD_SUBSTITUTION"/>  
+    <option name="MAKE_NEW_FILES_READONLY" value="false"/>  
+    <option name="SHOW_CORRUPTED_PROJECT_FILES" value="0"/>  
+    <option name="TAG_AFTER_FILE_COMMIT" value="false"/>  
+    <option name="TAG_AFTER_FILE_COMMIT_NAME" value=""/>  
+    <option name="TAG_AFTER_PROJECT_COMMIT" value="false"/>  
+    <option name="TAG_AFTER_PROJECT_COMMIT_NAME" value=""/>  
+    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
+    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
+    <option name="FORCE_NON_EMPTY_COMMENT" value="false"/>  
+    <option name="LAST_COMMIT_MESSAGE" value=""/>  
+    <option name="SAVE_LAST_COMMIT_MESSAGE" value="true"/>  
+    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>  
+    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false"/>  
+    <option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false"/>  
+    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false"/>  
+    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false"/>  
+    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8"/>  
+    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5"/> 
+  </component>  
+  <component name="CvsTabbedWindow"/>  
+  <component name="SvnConfiguration"> 
+    <option name="USER" value=""/>  
+    <option name="PASSWORD" value=""/>  
+    <option name="AUTO_ADD_FILES" value="0"/>  
+    <option name="AUTO_DEL_FILES" value="0"/> 
+  </component>  
+  <component name="PerforceConfiguration"> 
+    <option name="PORT" value="magic:1666"/>  
+    <option name="USER" value=""/>  
+    <option name="PASSWORD" value=""/>  
+    <option name="CLIENT" value=""/>  
+    <option name="TRACE" value="false"/>  
+    <option name="PERFORCE_STATUS" value="true"/>  
+    <option name="CHANGELIST_OPTION" value="false"/>  
+    <option name="SYSTEMROOT" value=""/>  
+    <option name="P4_EXECUTABLE" value="p4"/>  
+    <option name="SHOW_BRANCH_HISTORY" value="false"/>  
+    <option name="GENERATE_COMMENT" value="false"/>  
+    <option name="SYNC_OPTION" value="Sync"/>  
+    <option name="PUT_FOCUS_INTO_COMMENT" value="false"/>  
+    <option name="SHOW_CHECKIN_OPTIONS" value="true"/>  
+    <option name="FORCE_NON_EMPTY_COMMENT" value="true"/>  
+    <option name="LAST_COMMIT_MESSAGE" value=""/>  
+    <option name="SAVE_LAST_COMMIT_MESSAGE" value="true"/>  
+    <option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>  
+    <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false"/>  
+    <option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false"/>  
+    <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false"/>  
+    <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false"/>  
+    <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8"/>  
+    <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5"/> 
+  </component> 
+</project>
diff --git a/near-rt-ric-simulator/nearric-simulator/a1-med-api/pom.xml b/near-rt-ric-simulator/nearric-simulator/a1-med-api/pom.xml
new file mode 100644 (file)
index 0000000..8c25392
--- /dev/null
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.oran.nearric</groupId>
+               <artifactId>nearric-simulator</artifactId>
+               <version>1.0.0-SNAPSHOT</version>
+               
+       </parent>
+
+       <artifactId>a1-med-api</artifactId>
+       <name>${project.artifactId}</name>
+
+       <properties>
+               <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+               <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+               <gson-fire-version>1.8.2</gson-fire-version>
+               <threetenbp-version>1.3.6</threetenbp-version>
+               <generated.package.api>org.oransc.ric.a1med.api</generated.package.api>
+       </properties>
+       <dependencies>
+               <dependency>
+                       <groupId>javax.annotation</groupId>
+                       <artifactId>javax.annotation-api</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>io.swagger.core.v3</groupId>
+                       <artifactId>swagger-annotations</artifactId>
+                       <version>2.0.8</version>
+               </dependency>
+               <dependency>
+                       <groupId>io.swagger</groupId>
+                       <artifactId>swagger-codegen-maven-plugin</artifactId>
+                       <version>2.4.8</version>
+               </dependency>
+               <!-- <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> 
+                       <version>2.9.2</version> </dependency> -->
+               <dependency>
+                       <groupId>com.fasterxml.jackson.core</groupId>
+                       <artifactId>jackson-core</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>com.fasterxml.jackson.core</groupId>
+                       <artifactId>jackson-annotations</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>com.fasterxml.jackson.core</groupId>
+                       <artifactId>jackson-databind</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>com.fasterxml.jackson.jaxrs</groupId>
+                       <artifactId>jackson-jaxrs-json-provider</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>com.fasterxml.jackson.datatype</groupId>
+                       <artifactId>jackson-datatype-jsr310</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>com.squareup.okhttp</groupId>
+                       <artifactId>okhttp</artifactId>
+                       <version>2.7.5</version>
+               </dependency>
+               <dependency>
+                       <groupId>com.squareup.okhttp</groupId>
+                       <artifactId>logging-interceptor</artifactId>
+                       <version>2.7.5</version>
+               </dependency>
+               <dependency>
+                       <groupId>io.gsonfire</groupId>
+                       <artifactId>gson-fire</artifactId>
+                       <version>${gson-fire-version}</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.threeten</groupId>
+                       <artifactId>threetenbp</artifactId>
+                       <version>${threetenbp-version}</version>
+               </dependency>
+       </dependencies>
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>io.swagger.codegen.v3</groupId>
+                               <artifactId>swagger-codegen-maven-plugin</artifactId>
+                               <version>3.0.11</version>
+                               <executions>
+                                       <execution>
+                                               <id>generate-sources-server</id>
+                                               <phase>generate-sources</phase>
+                                               <goals>
+                                                       <goal>generate</goal>
+                                               </goals>
+                                               <configuration>
+                                                       <inputSpec>${project.basedir}/src/main/resources/a1_mediator_0.11.0.yaml</inputSpec>
+                                                       <language>java</language>
+                                                       <output>${project.basedir}/target/generated-sources/a1med</output>
+                                                       <configOptions>
+                                                               <apiPackage>${generated.package.api}</apiPackage>
+                                                               <modelPackage>${generated.package.api}.model</modelPackage>
+                                                               <addCompileSourceRoot>true</addCompileSourceRoot>
+                                                               <generateApiTests>true</generateApiTests>
+                                                               <generateModels>true</generateModels>
+                                                               <generateApis>true</generateApis>
+                                                               <generateModelTests>true</generateModelTests>
+                                                               <sourceFolder>src/gen/java/main</sourceFolder>
+                                                               <jackson>true</jackson>
+                                                       </configOptions>
+                                               </configuration>
+                                       </execution>
+                               </executions>
+                       </plugin>
+               </plugins>
+               <pluginManagement>
+                       <plugins>
+                               <plugin>
+                                       <groupId>org.springframework.boot</groupId>
+                                       <artifactId>spring-boot-maven-plugin</artifactId>
+                                       <configuration>
+                                               <skip>true</skip>
+                                       </configuration>
+                               </plugin>
+                               <!--This plugin's configuration is used to store Eclipse m2e settings 
+                                       only. It has no influence on the Maven build itself. -->
+                               <plugin>
+                                       <groupId>org.eclipse.m2e</groupId>
+                                       <artifactId>lifecycle-mapping</artifactId>
+                                       <version>1.0.0</version>
+                                       <configuration>
+                                               <lifecycleMappingMetadata>
+                                                       <pluginExecutions>
+                                                               <pluginExecution>
+                                                                       <pluginExecutionFilter>
+                                                                               <groupId>io.swagger.codegen.v3</groupId>
+                                                                               <artifactId>swagger-codegen-maven-plugin</artifactId>
+                                                                               <versionRange>[1.0,)</versionRange>
+                                                                               <goals>
+                                                                                       <goal>generate</goal>
+                                                                               </goals>
+                                                                       </pluginExecutionFilter>
+                                                                       <action>
+                                                                               <ignore />
+                                                                       </action>
+                                                               </pluginExecution>
+                                                       </pluginExecutions>
+                                               </lifecycleMappingMetadata>
+                                       </configuration>
+                               </plugin>
+                       </plugins>
+               </pluginManagement>
+       </build>
+</project>
diff --git a/near-rt-ric-simulator/nearric-simulator/a1-med-api/src/main/resources/a1_mediator_0.11.0.yaml b/near-rt-ric-simulator/nearric-simulator/a1-med-api/src/main/resources/a1_mediator_0.11.0.yaml
new file mode 100644 (file)
index 0000000..b8b8f91
--- /dev/null
@@ -0,0 +1,388 @@
+# ==================================================================================
+#       Copyright (c) 2019 Nokia
+#       Copyright (c) 2018-2019 AT&T Intellectual Property.
+#
+#   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.
+# ==================================================================================
+openapi: 3.0.0
+info:
+  version: 0.11.0
+  title: RIC A1
+paths:
+  '/a1-p/healthcheck':
+    get:
+      description: >
+        Perform a healthcheck on a1
+      tags:
+        - A1 Mediator
+      operationId: a1.controller.get_healthcheck
+      responses:
+        200:
+          description: >
+            A1 is healthy.
+            Anything other than a 200 should be considered a1 as failing
+
+  '/a1-p/policytypes/':
+    get:
+      description: "Get a list of all registered policy type ids"
+      tags:
+        - A1 Mediator
+      operationId: a1.controller.get_all_policy_types
+      responses:
+        200:
+          description: "list of all registered policy type ids"
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  "$ref": "#/components/schemas/policy_type_id"
+              example: [20000, 20020]
+
+  '/a1-p/policytypes/{policy_type_id}':
+    parameters:
+      - name: policy_type_id
+        in: path
+        required: true
+        schema:
+          "$ref": "#/components/schemas/policy_type_id"
+    get:
+      description: >
+        Get this policy type
+      tags:
+        - A1 Mediator
+      operationId: a1.controller.get_policy_type
+      responses:
+        '200':
+          description: "policy type successfully found"
+          content:
+            application/json:
+              schema:
+                "$ref": "#/components/schemas/policy_type_schema"
+        '404':
+          description: >
+            policy type not found
+    delete:
+      description: >
+        Delete this policy type. Can only be performed if there are no instances of this type
+      tags:
+        - A1 Mediator
+      operationId: a1.controller.delete_policy_type
+      responses:
+        '204':
+          description: >
+            policy type successfully deleted
+        '400':
+          description: >
+            Policy type cannot be deleted because there are instances
+            All instances must be removed before a policy type can be deleted
+        '404':
+          description: >
+            policy type not found
+    put:
+      description: >
+        Create a new policy type .
+        Replace is not currently allowed; to replace, for now do a DELETE and then a PUT again.
+
+      tags:
+        - A1 Mediator
+      operationId: a1.controller.create_policy_type
+      requestBody:
+        content:
+          application/json:
+            schema:
+               "$ref": "#/components/schemas/policy_type_schema"
+            example:
+              name: admission_control_policy
+              description: various parameters to control admission of dual connection
+              policy_type_id: 20000
+              create_schema:
+                $schema: 'http://json-schema.org/draft-07/schema#'
+                type: object
+                properties:
+                  enforce:
+                    type: boolean
+                    default: true
+                  window_length:
+                    type: integer
+                    default: 1
+                    minimum: 1
+                    maximum: 60
+                    description: Sliding window length (in minutes)
+                  blocking_rate:
+                    type: number
+                    default: 10
+                    minimum: 1
+                    maximum: 100
+                    description: '% Connections to block'
+                  trigger_threshold:
+                    type: integer
+                    default: 10
+                    minimum: 1
+                    description: Minimum number of events in window to trigger blocking
+                additionalProperties: false
+
+      responses:
+        '201':
+          description: "policy type successfully created"
+        '400':
+          description: "illegal ID, or object already existed"
+
+  '/a1-p/policytypes/{policy_type_id}/policies':
+    parameters:
+      - name: policy_type_id
+        in: path
+        required: true
+        schema:
+          "$ref": "#/components/schemas/policy_type_id"
+    get:
+      description: "get a list of all policy instance ids for this policy type id"
+      tags:
+        - A1 Mediator
+      operationId: a1.controller.get_all_instances_for_type
+      responses:
+        200:
+          description: "list of all policy instance ids for this policy type id"
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  "$ref": "#/components/schemas/policy_instance_id"
+              example: ["3d2157af-6a8f-4a7c-810f-38c2f824bf12", "06911bfc-c127-444a-8eb1-1bffad27cc3d"]
+
+
+  '/a1-p/policytypes/{policy_type_id}/policies/{policy_instance_id}':
+    parameters:
+      - name: policy_type_id
+        in: path
+        required: true
+        schema:
+          "$ref": "#/components/schemas/policy_type_id"
+
+      - name: policy_instance_id
+        in: path
+        required: true
+        schema:
+          "$ref": "#/components/schemas/policy_instance_id"
+
+    get:
+      description: >
+        Retrieve the policy instance
+
+      tags:
+        - A1 Mediator
+      operationId: a1.controller.get_policy_instance
+      responses:
+        '200':
+          description: >
+            The policy instance.
+            the schema of this object is defined by the create_schema field of the policy type
+          content:
+            application/json:
+              schema:
+                type: object
+        '404':
+          description: >
+            there is no policy instance with this policy_instance_id or there is no policy type with this policy_type_id
+
+    delete:
+      description: >
+        Delete this policy instance
+
+      tags:
+        - A1 Mediator
+      operationId: a1.controller.delete_policy_instance
+      responses:
+        '204':
+          description: >
+            policy instance successfully deleted
+        '404':
+          description: >
+            there is no policy instance with this policy_instance_id
+            or there is no policy type with this policy_type_id
+
+    put:
+      description: >
+        Create or replace a policy instance of type policy_type_id.
+        The schema of the PUT body is defined by the create_schema field of the policy type.
+
+      tags:
+        - A1 Mediator
+      operationId: a1.controller.create_or_replace_policy_instance
+      requestBody:
+        content:
+          application/json:
+            schema:
+              type: object
+              description: >
+                  the schema of this object is defined by the create_schema field of the policy type
+            example:
+              enforce: true
+              window_length: 10
+              blocking_rate: 20
+              trigger_threshold: 10
+
+      responses:
+        '201':
+          description: >
+            Policy instance created
+        '400':
+          description: >
+            Bad PUT body for this policy instance
+        '404':
+          description: >
+            There is no policy type with this policy_type_id
+
+  '/a1-p/policytypes/{policy_type_id}/policies/{policy_instance_id}/status':
+    parameters:
+      - name: policy_type_id
+        in: path
+        required: true
+        schema:
+          "$ref": "#/components/schemas/policy_type_id"
+
+      - name: policy_instance_id
+        in: path
+        required: true
+        schema:
+          "$ref": "#/components/schemas/policy_instance_id"
+
+    get:
+      description: >
+        Retrieve the policy instance status across all handlers of the policy
+
+      tags:
+        - A1 Mediator
+      operationId: a1.controller.get_policy_instance_status
+      responses:
+        '200':
+          description: >
+            The policy instance status.
+            Returns a vector of statuses, where each contains a handler_id (opaque id of a RIC component that implements this policy) and the policy status as returned by that handler
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  type: object
+                  properties:
+                    handler_id:
+                      type: string
+                    status:
+                      type: string
+              example:
+                [{"handler_id": "1234-5678", "status" : "OK"}, {"handler_id": "abc-def", "status" : "NOT IMPLEMENTED"}]
+        '404':
+          description: >
+            there is no policy instance with this policy_instance_id or there is no policy type with this policy_type_id
+
+
+components:
+  schemas:
+    policy_type_schema:
+      type: object
+      required:
+      - name
+      - description
+      - policy_type_id
+      - create_schema
+      additionalProperties: false
+      properties:
+        name:
+          type: string
+          description: name of the policy type
+        description:
+          type: string
+          description: description of the policy type
+        policy_type_id:
+          description: the integer of the policy type
+          type: integer
+        create_schema:
+          type: object
+          description: >
+            jsonschema (following http://json-schema.org/draft-07/schema) of the CREATE payload to be sent to handlers of this policy
+
+    policy_type_id:
+      description: >
+        represents a policy type identifier. Currently this is restricted to an integer range.
+      type: integer
+      minimum: 20000
+      maximum: 21024
+
+    policy_instance_id:
+      description: >
+        represents a policy instance identifier. UUIDs are advisable but can be any string
+      type: string
+      example: "3d2157af-6a8f-4a7c-810f-38c2f824bf12"
+
+    downstream_message_schema:
+      type: object
+      required:
+        - operation
+        - policy_type_id
+        - policy_instance_id
+        - payload
+      additionalProperties: false
+      properties:
+        operation:
+          description: the operation being performed
+          type: string
+          enum:
+            - CREATE
+            - DELETE
+            - UPDATE
+            - READ
+        policy_type_id:
+          "$ref": "#/components/schemas/policy_type_id"
+        policy_instance_id:
+          "$ref": "#/components/schemas/policy_instance_id"
+        payload:
+          description: payload for this operation
+          type: object
+      example:
+        operation: CREATE
+        policy_type_id: 12345678
+        policy_instance_id: 3d2157af-6a8f-4a7c-810f-38c2f824bf12
+        payload:
+          enforce: true
+          window_length: 10
+          blocking_rate: 20
+          trigger_threshold: 10
+
+    downstream_notification_schema:
+      type: object
+      required:
+        - policy_type_id
+        - policy_instance_id
+        - handler_id
+        - status
+      additionalProperties: false
+      properties:
+        policy_type_id:
+          "$ref": "#/components/schemas/policy_type_id"
+        policy_instance_id:
+          "$ref": "#/components/schemas/policy_instance_id"
+        handler_id:
+          description: >
+            id of the policy handler
+          type: string
+        status:
+          description: >
+            the status of this policy instance in this handler
+          type: string
+      example:
+        policy_type_id: 12345678
+        policy_instance_id: 3d2157af-6a8f-4a7c-810f-38c2f824bf12
+        handler_id: 1234-5678
+        status: OK
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/.classpath b/near-rt-ric-simulator/nearric-simulator/nearric-service/.classpath
new file mode 100644 (file)
index 0000000..91d1e29
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+       <classpathentry kind="src" output="target/classes" path="src/main/java">
+               <attributes>
+                       <attribute name="optional" value="true"/>
+                       <attribute name="maven.pomderived" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
+               <attributes>
+                       <attribute name="maven.pomderived" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="src" output="target/test-classes" path="src/test/java">
+               <attributes>
+                       <attribute name="test" value="true"/>
+                       <attribute name="optional" value="true"/>
+                       <attribute name="maven.pomderived" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+               <attributes>
+                       <attribute name="maven.pomderived" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+               <attributes>
+                       <attribute name="maven.pomderived" value="true"/>
+               </attributes>
+       </classpathentry>
+       <classpathentry kind="lib" path="/a1-med-api/target/a1-med-api-1.0.0-SNAPSHOT.jar"/>
+       <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/.gitignore b/near-rt-ric-simulator/nearric-simulator/nearric-service/.gitignore
new file mode 100644 (file)
index 0000000..b83d222
--- /dev/null
@@ -0,0 +1 @@
+/target/
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/.project b/near-rt-ric-simulator/nearric-simulator/nearric-service/.project
new file mode 100644 (file)
index 0000000..6fac18c
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+       <name>nearric-service</name>
+       <comment></comment>
+       <projects>
+       </projects>
+       <buildSpec>
+               <buildCommand>
+                       <name>org.eclipse.jdt.core.javabuilder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+               <buildCommand>
+                       <name>org.eclipse.m2e.core.maven2Builder</name>
+                       <arguments>
+                       </arguments>
+               </buildCommand>
+       </buildSpec>
+       <natures>
+               <nature>org.eclipse.jdt.core.javanature</nature>
+               <nature>org.eclipse.m2e.core.maven2Nature</nature>
+       </natures>
+</projectDescription>
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/.settings/org.eclipse.core.resources.prefs b/near-rt-ric-simulator/nearric-simulator/nearric-service/.settings/org.eclipse.core.resources.prefs
new file mode 100644 (file)
index 0000000..839d647
--- /dev/null
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/.settings/org.eclipse.jdt.core.prefs b/near-rt-ric-simulator/nearric-simulator/nearric-service/.settings/org.eclipse.jdt.core.prefs
new file mode 100644 (file)
index 0000000..ebb47b7
--- /dev/null
@@ -0,0 +1,16 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/.settings/org.eclipse.m2e.core.prefs b/near-rt-ric-simulator/nearric-simulator/nearric-service/.settings/org.eclipse.m2e.core.prefs
new file mode 100644 (file)
index 0000000..f897a7f
--- /dev/null
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/pom.xml b/near-rt-ric-simulator/nearric-simulator/nearric-service/pom.xml
new file mode 100644 (file)
index 0000000..383e846
--- /dev/null
@@ -0,0 +1,143 @@
+<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.oran.nearric</groupId>
+               <artifactId>nearric-simulator</artifactId>
+               <version>1.0.0-SNAPSHOT</version>
+       </parent>
+       <artifactId>nearric-service</artifactId>
+       <name>${project.artifactId}</name>
+
+       <properties>
+               <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+               <java.version>1.8</java.version>
+               <okhttp-version>2.7.5</okhttp-version>
+               <gson-version>2.8.1</gson-version>
+       </properties>
+       <dependencies>
+               <dependency>
+                       <groupId>org.oran.nearric</groupId>
+                       <artifactId>a1-med-api</artifactId>
+                       <version>0.10.3-SNAPSHOT</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework.boot</groupId>
+                       <artifactId>spring-boot-starter-web</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework.boot</groupId>
+                       <artifactId>spring-boot-starter-data-jpa</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework.boot</groupId>
+                       <artifactId>spring-boot-starter-actuator</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework.boot</groupId>
+                       <artifactId>spring-boot-starter-test</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework.boot</groupId>
+                       <artifactId>spring-boot-devtools</artifactId>
+                       <scope>runtime</scope>
+               </dependency>
+               <dependency>
+                       <groupId>junit</groupId>
+                       <artifactId>junit</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>io.swagger</groupId>
+                       <artifactId>swagger-jaxrs</artifactId>
+                       <version>1.5.0</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.apache.directory.studio</groupId>
+                       <artifactId>org.apache.commons.io</artifactId>
+                       <version>2.4</version>
+               </dependency>
+               <dependency>
+                       <groupId>com.googlecode.json-simple</groupId>
+                       <artifactId>json-simple</artifactId>
+                       <version>1.1.1</version>
+               </dependency>
+
+               <dependency>
+                       <groupId>io.springfox</groupId>
+                       <artifactId>springfox-swagger-ui</artifactId>
+                       <version>2.6.1</version>
+                       <scope>compile</scope>
+               </dependency>
+               <dependency>
+                       <groupId>io.springfox</groupId>
+                       <artifactId>springfox-swagger2</artifactId>
+                       <version>2.6.1</version>
+                       <scope>compile</scope>
+               </dependency>
+               <dependency>
+                       <groupId>com.fasterxml.jackson.core</groupId>
+                       <artifactId>jackson-databind</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>com.h2database</groupId>
+                       <artifactId>h2</artifactId>
+               </dependency>
+               <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
+               <dependency>
+                       <groupId>commons-beanutils</groupId>
+                       <artifactId>commons-beanutils</artifactId>
+                       <version>1.9.3</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.modelmapper</groupId>
+                       <artifactId>modelmapper</artifactId>
+                       <version>2.3.0</version>
+               </dependency>
+               <dependency>
+                       <groupId>com.squareup.okio</groupId>
+                       <artifactId>okio</artifactId>
+                       <version>1.13.0</version>
+               </dependency>
+               <dependency>
+                       <groupId>com.squareup.okhttp</groupId>
+                       <artifactId>okhttp</artifactId>
+                       <version>${okhttp-version}</version>
+               </dependency>
+               <dependency>
+                       <groupId>com.squareup.okhttp</groupId>
+                       <artifactId>logging-interceptor</artifactId>
+                       <version>${okhttp-version}</version>
+               </dependency>
+               <dependency>
+                       <groupId>com.google.code.gson</groupId>
+                       <artifactId>gson</artifactId>
+                       <version>${gson-version}</version>
+               </dependency>
+        <dependency>
+            <groupId>com.github.java-json-tools</groupId>
+            <artifactId>json-schema-validator</artifactId>
+            <version>2.2.11</version>
+        </dependency>
+       </dependencies>
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>org.springframework.boot</groupId>
+                               <artifactId>spring-boot-maven-plugin</artifactId>
+                               <configuration>
+                                       <mainClass>org.onap.nearric.simulator.config.NearRicApplication</mainClass>
+                               </configuration>
+                               <executions>
+                                       <execution>
+                                               <goals>
+                                                       <goal>repackage</goal>
+                                               </goals>
+                                       </execution>
+                               </executions>
+                       </plugin>
+               </plugins>
+       </build>
+</project>
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/docker/Dockerfile b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/docker/Dockerfile
new file mode 100644 (file)
index 0000000..8a862e8
--- /dev/null
@@ -0,0 +1,7 @@
+#Not completed docker file
+FROM openjdk:8-jre-alpine
+
+WORKDIR /opt/app/nearricsimulator
+
+
+ENTRYPOINT ["/usr/bin/java", "-jar", "/opt/app/datafile/datafile-app-server.jar"]
\ No newline at end of file
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/config/ApplicationConfig.java b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/config/ApplicationConfig.java
new file mode 100644 (file)
index 0000000..3c634cc
--- /dev/null
@@ -0,0 +1,43 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 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.nearric.simulator.config;
+
+import java.util.HashMap;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * This class provides all the configuration for the Spring boot application
+ * 
+ * @author lathishbabu.ganesan@est.tech
+ *
+ */
+@Configuration
+public class ApplicationConfig {
+
+  private final HashMap<Integer, Object> policyTypeCache = new HashMap<>();
+
+  @Bean
+  public HashMap<Integer, Object> getPolicyTypeCache() {
+    return policyTypeCache;
+  }
+
+}
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/config/NearRicApplication.java b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/config/NearRicApplication.java
new file mode 100644 (file)
index 0000000..5b21d1a
--- /dev/null
@@ -0,0 +1,42 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 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.nearric.simulator.config;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.ComponentScan;
+
+/**
+ * This is the Spring Boot Application
+ * 
+ * @author lathishbabu.ganesan@est.tech
+ *
+ */
+
+@SpringBootApplication
+@ComponentScan({"org.oransc", "org.onap"})
+@EnableCaching
+public class NearRicApplication {
+  public static void main(final String[] args) {
+    SpringApplication.run(NearRicApplication.class, args);
+  }
+}
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/config/SwaggerConfiguration.java b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/config/SwaggerConfiguration.java
new file mode 100644 (file)
index 0000000..f77c189
--- /dev/null
@@ -0,0 +1,47 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 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.nearric.simulator.config;
+
+import org.onap.nearric.simulator.controller.A1PApiController;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+/**
+ * This class provides all the configuration for the Spring boot application
+ * 
+ * @author lathishbabu.ganesan@est.tech
+ *
+ */
+@Configuration
+@EnableSwagger2
+public class SwaggerConfiguration {
+  @Bean
+  public Docket apiDocket() {
+    return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.basePackage("org.onap.nearric.simulator"))
+        .paths(PathSelectors.any()).build();
+  }
+
+}
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/controller/A1PApi.java b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/controller/A1PApi.java
new file mode 100644 (file)
index 0000000..5254c1d
--- /dev/null
@@ -0,0 +1,125 @@
+/**
+ * NOTE: This class is auto generated by the swagger code generator program (3.0.8).
+ * https://github.com/swagger-api/swagger-codegen
+ * Do not edit the class manually.
+ */
+package org.onap.nearric.simulator.controller;
+
+import org.oransc.ric.a1med.api.model.InlineResponse200;
+import org.oransc.ric.a1med.api.model.PolicyTypeSchema;
+import io.swagger.annotations.*;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import javax.validation.constraints.*;
+import java.util.List;
+import java.util.Map;
+@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2019-10-04T13:41:42.802+01:00[Europe/Dublin]")
+@Api(value = "a1-p", description = "the a1-p API")
+public interface A1PApi {
+
+    @ApiOperation(value = "", nickname = "a1ControllerCreateOrReplacePolicyInstance", notes = "Create or replace a policy instance of type policy_type_id. The schema of the PUT body is defined by the create_schema field of the policy type. ", tags={ "A1 Mediator", })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 201, message = "Policy instance created "),
+        @ApiResponse(code = 400, message = "Bad PUT body for this policy instance "),
+        @ApiResponse(code = 404, message = "There is no policy type with this policy_type_id ") })
+    @RequestMapping(value = "/a1-p/policytypes/{policy_type_id}/policies/{policy_instance_id}",
+        consumes = { "application/json" },
+        method = RequestMethod.PUT)
+    ResponseEntity<Void> a1ControllerCreateOrReplacePolicyInstance(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId,@ApiParam(value = "",required=true) @PathVariable("policy_instance_id") String policyInstanceId,@ApiParam(value = ""  )  @Valid @RequestBody Object body);
+
+
+    @ApiOperation(value = "", nickname = "a1ControllerCreatePolicyType", notes = "Create a new policy type . Replace is not currently allowed; to replace, for now do a DELETE and then a PUT again. ", tags={ "A1 Mediator", })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 201, message = "policy type successfully created"),
+        @ApiResponse(code = 400, message = "illegal ID, or object already existed") })
+    @RequestMapping(value = "/a1-p/policytypes/{policy_type_id}",
+        consumes = { "application/json" },
+        method = RequestMethod.PUT)
+    ResponseEntity<Void> a1ControllerCreatePolicyType(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId,@ApiParam(value = ""  )  @Valid @RequestBody PolicyTypeSchema body);
+
+
+    @ApiOperation(value = "", nickname = "a1ControllerDeletePolicyInstance", notes = "Delete this policy instance ", tags={ "A1 Mediator", })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 204, message = "policy instance successfully deleted "),
+        @ApiResponse(code = 404, message = "there is no policy instance with this policy_instance_id or there is no policy type with this policy_type_id ") })
+    @RequestMapping(value = "/a1-p/policytypes/{policy_type_id}/policies/{policy_instance_id}",
+        method = RequestMethod.DELETE)
+    ResponseEntity<Void> a1ControllerDeletePolicyInstance(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId,@ApiParam(value = "",required=true) @PathVariable("policy_instance_id") String policyInstanceId);
+
+
+    @ApiOperation(value = "", nickname = "a1ControllerDeletePolicyType", notes = "Delete this policy type. Can only be performed if there are no instances of this type ", tags={ "A1 Mediator", })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 204, message = "policy type successfully deleted "),
+        @ApiResponse(code = 400, message = "Policy type cannot be deleted because there are instances All instances must be removed before a policy type can be deleted "),
+        @ApiResponse(code = 404, message = "policy type not found ") })
+    @RequestMapping(value = "/a1-p/policytypes/{policy_type_id}",
+        method = RequestMethod.DELETE)
+    ResponseEntity<Void> a1ControllerDeletePolicyType(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId);
+
+
+    @ApiOperation(value = "", nickname = "a1ControllerGetAllInstancesForType", notes = "get a list of all policy instance ids for this policy type id", response = String.class, responseContainer = "List", tags={ "A1 Mediator", })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "list of all policy instance ids for this policy type id", response = String.class, responseContainer = "List") })
+    @RequestMapping(value = "/a1-p/policytypes/{policy_type_id}/policies",
+        produces = { "application/json" }, 
+        method = RequestMethod.GET)
+    ResponseEntity<List<String>> a1ControllerGetAllInstancesForType(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId);
+
+
+    @ApiOperation(value = "", nickname = "a1ControllerGetAllPolicyTypes", notes = "Get a list of all registered policy type ids", response = Integer.class, responseContainer = "List", tags={ "A1 Mediator", })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "list of all registered policy type ids", response = Integer.class, responseContainer = "List") })
+    @RequestMapping(value = "/a1-p/policytypes/",
+        produces = { "application/json" }, 
+        method = RequestMethod.GET)
+    ResponseEntity<List<Integer>> a1ControllerGetAllPolicyTypes();
+
+
+    @ApiOperation(value = "", nickname = "a1ControllerGetHealthcheck", notes = "Perform a healthcheck on a1 ", tags={ "A1 Mediator", })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "A1 is healthy. Anything other than a 200 should be considered a1 as failing ") })
+    @RequestMapping(value = "/a1-p/healthcheck",
+        method = RequestMethod.GET)
+    ResponseEntity<Void> a1ControllerGetHealthcheck();
+
+
+    @ApiOperation(value = "", nickname = "a1ControllerGetPolicyInstance", notes = "Retrieve the policy instance ", response = Object.class, tags={ "A1 Mediator", })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "The policy instance. the schema of this object is defined by the create_schema field of the policy type ", response = Object.class),
+        @ApiResponse(code = 404, message = "there is no policy instance with this policy_instance_id or there is no policy type with this policy_type_id ") })
+    @RequestMapping(value = "/a1-p/policytypes/{policy_type_id}/policies/{policy_instance_id}",
+        produces = { "application/json" }, 
+        method = RequestMethod.GET)
+    ResponseEntity<Object> a1ControllerGetPolicyInstance(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId,@ApiParam(value = "",required=true) @PathVariable("policy_instance_id") String policyInstanceId);
+
+
+    @ApiOperation(value = "", nickname = "a1ControllerGetPolicyInstanceStatus", notes = "Retrieve the policy instance status across all handlers of the policy ", response = InlineResponse200.class, responseContainer = "List", tags={ "A1 Mediator", })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "The policy instance status. Returns a vector of statuses, where each contains a handler_id (opaque id of a RIC component that implements this policy) and the policy status as returned by that handler ", response = InlineResponse200.class, responseContainer = "List"),
+        @ApiResponse(code = 404, message = "there is no policy instance with this policy_instance_id or there is no policy type with this policy_type_id ") })
+    @RequestMapping(value = "/a1-p/policytypes/{policy_type_id}/policies/{policy_instance_id}/status",
+        produces = { "application/json" }, 
+        method = RequestMethod.GET)
+    ResponseEntity<List<InlineResponse200>> a1ControllerGetPolicyInstanceStatus(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId,@ApiParam(value = "",required=true) @PathVariable("policy_instance_id") String policyInstanceId);
+
+
+    @ApiOperation(value = "", nickname = "a1ControllerGetPolicyType", notes = "Get this policy type ", response = PolicyTypeSchema.class, tags={ "A1 Mediator", })
+    @ApiResponses(value = { 
+        @ApiResponse(code = 200, message = "policy type successfully found", response = PolicyTypeSchema.class),
+        @ApiResponse(code = 404, message = "policy type not found ") })
+    @RequestMapping(value = "/a1-p/policytypes/{policy_type_id}",
+        produces = { "application/json" }, 
+        method = RequestMethod.GET)
+    ResponseEntity<PolicyTypeSchema> a1ControllerGetPolicyType(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId);
+
+}
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/controller/A1PApiController.java b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/controller/A1PApiController.java
new file mode 100644 (file)
index 0000000..d2a0b3f
--- /dev/null
@@ -0,0 +1,114 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 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.nearric.simulator.controller;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.Valid;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.onap.nearric.simulator.model.PolicyType;
+import org.onap.nearric.simulator.service.A1PApiServiceImpl;
+import org.oransc.ric.a1med.api.model.InlineResponse200;
+import org.oransc.ric.a1med.api.model.PolicyTypeSchema;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import io.swagger.annotations.ApiParam;
+
+/**
+ * This class provides all the operation performed by A1 API.
+ * 
+ * @author lathishbabu.ganesan@est.tech
+ *
+ */
+@RestController
+public class A1PApiController implements A1PApi {
+
+  private static final Logger log = LoggerFactory.getLogger(A1PApiController.class);
+
+  private final ObjectMapper objectMapper;
+
+  private final HttpServletRequest request;
+
+  //@Autowired
+  private A1PApiServiceImpl a1pApiService;
+  //private A1PApiService a1pApiService;
+
+  @Autowired
+  public A1PApiController(ObjectMapper objectMapper, HttpServletRequest request) {
+      this.objectMapper = objectMapper;
+      this.request = request;
+      a1pApiService = new A1PApiServiceImpl();
+      a1pApiService.set(objectMapper, request);
+  }
+  
+  public ResponseEntity<Void> a1ControllerCreateOrReplacePolicyInstance(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId,@ApiParam(value = "",required=true) @PathVariable("policy_instance_id") String policyInstanceId,@ApiParam(value = ""  )  @Valid @RequestBody Object body) {
+      return a1pApiService.createReplaceInstance(policyTypeId, policyInstanceId, body);
+  }
+
+  public ResponseEntity<Void> a1ControllerCreatePolicyType(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId,@ApiParam(value = ""  )  @Valid @RequestBody PolicyTypeSchema body) {
+       return a1pApiService.createReplaceType(policyTypeId, body);
+  }
+
+  public ResponseEntity<Void> a1ControllerDeletePolicyInstance(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId,@ApiParam(value = "",required=true) @PathVariable("policy_instance_id") String policyInstanceId) {
+       return a1pApiService.deleteInstance(policyTypeId, policyInstanceId);
+  }
+
+  public ResponseEntity<Void> a1ControllerDeletePolicyType(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId) {
+       return a1pApiService.deleteType(policyTypeId);
+  }
+
+  public ResponseEntity<List<String>> a1ControllerGetAllInstancesForType(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId) {
+      return a1pApiService.getAllInstanceForType(policyTypeId);
+  }
+
+  public ResponseEntity<List<Integer>> a1ControllerGetAllPolicyTypes() {
+       return a1pApiService.getAllTypes();
+  }
+
+  public ResponseEntity<Void> a1ControllerGetHealthcheck() {
+      String accept = request.getHeader("Accept");
+      return new ResponseEntity<Void>(HttpStatus.ACCEPTED);
+  }
+
+  public ResponseEntity<Object> a1ControllerGetPolicyInstance(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId,@ApiParam(value = "",required=true) @PathVariable("policy_instance_id") String policyInstanceId) {
+      return a1pApiService.getPolicyInstance(policyTypeId, policyInstanceId);
+  }
+
+  public ResponseEntity<List<InlineResponse200>> a1ControllerGetPolicyInstanceStatus(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId,@ApiParam(value = "",required=true) @PathVariable("policy_instance_id") String policyInstanceId) {
+       return a1pApiService.getStatus(policyTypeId, policyInstanceId);
+  }
+
+  public ResponseEntity<PolicyTypeSchema> a1ControllerGetPolicyType(@ApiParam(value = "",required=true) @PathVariable("policy_type_id") Integer policyTypeId) {
+      return a1pApiService.getPolicyTypeSchema(policyTypeId);
+  }
+
+}
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/model/PolicyInstance.java b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/model/PolicyInstance.java
new file mode 100644 (file)
index 0000000..ca797d4
--- /dev/null
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 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.nearric.simulator.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+
+  public class PolicyInstance implements Serializable {
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -4903894058377154039L;
+       private String policyInstanceId;
+       private Object jsonObject;
+       
+       public PolicyInstance(String policyInstanceId, Object jsonObject) {
+               this.policyInstanceId = policyInstanceId;
+               this.jsonObject = jsonObject;
+       }
+
+       public Object getJson() {
+               return jsonObject;
+       }
+       
+       public String getInstanceId() {
+               return policyInstanceId;
+       }
+}
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/model/PolicyType.java b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/model/PolicyType.java
new file mode 100644 (file)
index 0000000..f63a3b3
--- /dev/null
@@ -0,0 +1,76 @@
+package org.onap.nearric.simulator.model;
+
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 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=========================================================
+ */
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import org.oransc.ric.a1med.api.model.PolicyTypeSchema;
+
+public class PolicyType implements Serializable {
+
+       /**
+        * 
+        */
+       private static final long serialVersionUID = 8719589957000170141L;
+       private Integer policyTypeId;
+       private PolicyTypeSchema policyTypeSchema;
+       private HashMap<String, PolicyInstance> policyInstances = new HashMap<String, PolicyInstance>();
+
+       public PolicyType(Integer policyTypeId, PolicyTypeSchema policyTypeSchema) {
+               this.policyTypeId = policyTypeId;
+               this.policyTypeSchema = policyTypeSchema;
+       }
+
+       public int getNumberInstances() {
+               return policyInstances.size();
+       }
+
+       public PolicyInstance getInstance(String policyInstanceId) {
+               return policyInstances.get(policyInstanceId);
+       }
+
+       public void delete(String policyInstanceId) {
+               policyInstances.remove(policyInstanceId);
+       }
+
+       public PolicyTypeSchema getSchema() {
+               return policyTypeSchema;
+       }
+
+       public void createReplaceInstance(String policyTypeId, PolicyInstance policyInstance) {
+               policyInstances.put(policyTypeId, policyInstance);
+       }
+
+       public Set<String> getInstances() {
+               return policyInstances.keySet();
+       }
+
+       public Integer getTypeId() {
+               return policyTypeId;
+       }
+
+}
\ No newline at end of file
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/service/A1PApiService.java b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/service/A1PApiService.java
new file mode 100644 (file)
index 0000000..b875ec7
--- /dev/null
@@ -0,0 +1,53 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 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.nearric.simulator.service;
+
+import org.onap.nearric.simulator.model.PolicyType;
+import org.oransc.ric.a1med.api.model.PolicyTypeSchema;
+
+/**
+ * @author lathishbabu.ganesan@est.tech
+ *
+ */
+
+public interface A1PApiService {
+
+  public void getHealthCheck();
+
+  public void getPolicyTypes();
+
+  public PolicyType getPolicyType(Integer policyTypeId);
+
+  public void deletePolicyTypeId();
+
+  public void putPolicyType(Integer policyTypeId, PolicyTypeSchema policyTypeSchema);
+
+  public void getPolicyInstances();
+
+  public void getPolicyInstanceId();
+
+  public void deletePolicyInstanceId();
+
+  public void putPolicyInstance(Integer policyTypeId, String policyInstanceId, Object body);
+
+  public void getPolicyInstanceIdStatus();
+
+}
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/service/A1PApiServiceImpl.java b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/java/org/onap/nearric/simulator/service/A1PApiServiceImpl.java
new file mode 100644 (file)
index 0000000..1521ed7
--- /dev/null
@@ -0,0 +1,441 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 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.nearric.simulator.service;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.onap.nearric.simulator.model.PolicyType;
+import org.onap.nearric.simulator.model.PolicyInstance;
+import org.oransc.ric.a1med.api.model.PolicyTypeSchema;
+import org.oransc.ric.a1med.api.model.InlineResponse200;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.fge.jackson.JsonLoader;
+import com.github.fge.jsonschema.core.exceptions.ProcessingException;
+import com.github.fge.jsonschema.core.report.ProcessingMessage;
+import com.github.fge.jsonschema.core.report.ProcessingReport;
+import com.github.fge.jsonschema.main.JsonSchema;
+import com.github.fge.jsonschema.main.JsonSchemaFactory;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+/**
+ * This class provides the service implementation of all the A1 operation
+ * 
+ * @author lathishbabu.ganesan@est.tech
+ *
+ */
+
+@Service
+public class A1PApiServiceImpl { // implements A1PApiService {
+
+       private static final Logger log = LoggerFactory.getLogger(A1PApiServiceImpl.class);
+
+       private HashMap<String, PolicyType> policyTypes = new HashMap<String, PolicyType>();
+
+       private ObjectMapper objectMapper = null;
+
+       private HttpServletRequest request = null;
+
+       public boolean validateSchema(String jsonData, String jsonSchema) {
+               ProcessingReport report = null;
+               boolean result = false;
+               try {
+                       System.out.println("Applying schema: @<@<" + jsonSchema + ">@>@ to data: #<#<" + jsonData + ">#>#");
+                       JsonNode schemaNode = JsonLoader.fromString(jsonSchema);
+                       JsonNode data = JsonLoader.fromString(jsonData);
+                       JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
+                       JsonSchema schema = factory.getJsonSchema(schemaNode);
+                       report = schema.validate(data);
+               } catch (JsonParseException jpex) {
+                       System.out.println("Error. Something went wrong trying to parse json data: #<#<" + jsonData
+                                       + ">#># or json schema: @<@<" + jsonSchema + ">@>@. Are the double quotes included? "
+                                       + jpex.getMessage());
+                       // jpex.printStackTrace();
+               } catch (ProcessingException pex) {
+                       System.out.println("Error. Something went wrong trying to process json data: #<#<" + jsonData
+                                       + ">#># with json schema: @<@<" + jsonSchema + ">@>@ " + pex.getMessage());
+                       // pex.printStackTrace();
+               } catch (IOException e) {
+                       System.out.println("Error. Something went wrong trying to read json data: #<#<" + jsonData
+                                       + ">#># or json schema: @<@<" + jsonSchema + ">@>@");
+                       // e.printStackTrace();
+               }
+               if (report != null) {
+                       Iterator<ProcessingMessage> iter = report.iterator();
+                       while (iter.hasNext()) {
+                               ProcessingMessage pm = iter.next();
+                               System.out.println("Processing Message: " + pm.getMessage());
+                       }
+                       result = report.isSuccess();
+               }
+               System.out.println(" Result=" + result);
+               return result;
+       }
+
+       public A1PApiServiceImpl() {
+       }
+
+       public void set(ObjectMapper objectMapper, HttpServletRequest request) {
+               this.objectMapper = objectMapper;
+               this.request = request;
+       }
+
+
+       public ResponseEntity<Void> createReplaceType(Integer policyTypeId, PolicyTypeSchema body) {
+
+                       System.out.println("createReplaceType - policyTypeId: " + policyTypeId);
+                       System.out.println("createReplaceType - body: " + body);
+
+                       String accept = request.getHeader("Accept");
+
+                       if (body != null && body.getName() != null) {
+                               if (body.getPolicyTypeId().intValue() != policyTypeId.intValue()) {
+                                       System.out.println("createReplaceType - policytype mismatch between request and body");
+                                       return new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);
+                               }
+
+                               if (policyTypes.containsKey(policyTypeId.toString())) {
+                                       System.out.println("createReplaceType - policytype already exists");
+                                       return new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);
+                               }
+
+                               PolicyType policyType = new PolicyType(policyTypeId, body);
+                               policyTypes.put(policyTypeId.toString(), policyType);
+                       }
+                       System.out.println("createReplaceType - created ok");
+                       return new ResponseEntity<Void>(HttpStatus.CREATED);
+
+       }
+
+       public ResponseEntity<Void> deleteType(Integer policyTypeId) {
+
+                       System.out.println("deleteType - policyTypeId: " + policyTypeId);
+
+                       String accept = request.getHeader("Accept");
+
+                       PolicyType policyType = policyTypes.get(policyTypeId.toString());
+
+                       if (policyType == null) {
+                               System.out.println("deleteType - policytype does not exists");
+                               return new ResponseEntity<Void>(HttpStatus.NOT_FOUND);
+                       }
+
+                       if (policyType.getNumberInstances() > 0) {
+                               System.out.println("deleteType - cannot delete, instances exists");
+                               return new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);
+                       }
+                       policyTypes.remove(policyTypeId.toString());
+
+                       System.out.println("deleteType - deleted ok");
+                       return new ResponseEntity<Void>(HttpStatus.NO_CONTENT);
+       }
+
+       public ResponseEntity<Void> deleteInstance(Integer policyTypeId, String policyInstanceId) {
+
+                       System.out.println("deleteInstance - policyTypeId: " + policyTypeId);
+                       System.out.println("deleteInstance - policyInstanceId: " + policyInstanceId);
+
+                       PolicyType policyType = policyTypes.get(policyTypeId.toString());
+
+                       if (policyType == null) {
+                               System.out.println("deleteType - policytype does not exists");
+                               return new ResponseEntity<Void>(HttpStatus.NOT_FOUND);
+                       }
+                       PolicyInstance policyInstance = policyType.getInstance(policyInstanceId);
+                       if (policyInstance == null) {
+                               System.out.println("deleteType - instance does not exists");
+                               return new ResponseEntity<Void>(HttpStatus.NOT_FOUND);
+                       }
+                       policyType.delete(policyInstanceId);
+
+                       System.out.println("deleteInstance - deleted ok");
+                       return new ResponseEntity<Void>(HttpStatus.NO_CONTENT);
+
+       }
+
+       public ResponseEntity<PolicyTypeSchema> getPolicyTypeSchema(Integer policyTypeId) {
+               System.out.println("getPolicyTypeSchema - policyTypeId: " + policyTypeId);
+               String accept = request.getHeader("Accept");
+               if (accept != null && accept.contains("application/json")) {
+                       String res = null;
+                       try {
+                               PolicyType policyType = policyTypes.get(policyTypeId.toString());
+
+                               if (policyType == null) {
+                                       System.out.println("getPolicyTypeSchema - policytype does not exists");
+                                       return new ResponseEntity<PolicyTypeSchema>(HttpStatus.NOT_FOUND);
+                               }
+
+                               String json = "{}";
+                               PolicyTypeSchema schema = policyType.getSchema();
+                               String createSchema = "{}";
+                               try {
+                                       // Convert Map to JSON
+                                       json = objectMapper.writeValueAsString(schema);
+                                       // Print JSON output
+                                       System.out.println("getPolicyTypeSchema - schema: " + json);
+
+                                       createSchema = objectMapper.writeValueAsString(schema.getCreateSchema());
+                                       System.out.println("getPolicyTypeSchema - createSchema: " + createSchema);
+                               } catch (Exception e) {
+                                       e.printStackTrace();
+                                       System.out.println("getPolicyTypeSchema - schema corrupt");
+                                       return new ResponseEntity<PolicyTypeSchema>(HttpStatus.INTERNAL_SERVER_ERROR);
+                               }
+                               res = "{\n  \"name\" : \"" + schema.getName() + "\",\n  \"description\" : \"" + schema.getDescription()
+                                               + "\",\n  \"create_schema\" : " + createSchema + ",\n  \"policy_type_id\" : "
+                                               + schema.getPolicyTypeId().intValue() + "\n}";
+                               System.out.println("getPolicyTypeSchema - json schema: " + res);
+                               objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
+                               return new ResponseEntity<PolicyTypeSchema>(objectMapper.readValue(res, PolicyTypeSchema.class),
+                                               HttpStatus.ACCEPTED);
+                       } catch (Exception e) {
+                               e.printStackTrace();
+                               System.out
+                                               .println("getPolicyTypeSchema - Couldn't serialize response for content type application/json");
+                               return new ResponseEntity<PolicyTypeSchema>(HttpStatus.INTERNAL_SERVER_ERROR);
+                       }
+               }
+               System.out.println("getPolicyTypeSchema - not implemented");
+               return new ResponseEntity<PolicyTypeSchema>(HttpStatus.NOT_IMPLEMENTED);
+       }
+
+       public ResponseEntity<List<Integer>> getAllTypes() {
+               System.out.println("getAllTypes");
+               String accept = request.getHeader("Accept");
+               if (accept != null && accept.contains("application/json")) {
+                       try {
+                               Set<String> types = policyTypes.keySet();
+                               String res = "";
+                               for (Iterator<String> iterator = types.iterator(); iterator.hasNext();) {
+                                       String tid = (String) iterator.next();
+                                       if (res.length() > 0) {
+                                               res = res + ",";
+                                       }
+                                       res = res + tid;
+                               }
+                               return new ResponseEntity<List<Integer>>(objectMapper.readValue("[" + res + "]", List.class),
+                                               HttpStatus.ACCEPTED);
+                       } catch (IOException e) {
+                               e.printStackTrace();
+                               System.out.println("getAllTypes - Couldn't serialize response for content type application/json");
+                               return new ResponseEntity<List<Integer>>(HttpStatus.INTERNAL_SERVER_ERROR);
+                       }
+               }
+               System.out.println("getAllTypes - not implemented");
+               return new ResponseEntity<List<Integer>>(HttpStatus.NOT_IMPLEMENTED);
+       }
+
+       public ResponseEntity<Void> createReplaceInstance(Integer policyTypeId, String policyInstanceId, Object body) {
+                       System.out.println("createReplaceInstance -  policyTypeId:" + policyTypeId);
+                       System.out.println("createReplaceInstance -  policyInstanceId:" + policyInstanceId);
+                       System.out.println("createReplaceInstance -  body:" + body);
+                       System.out.println("createReplaceInstance -  bodyclass:" + body.getClass().toString());
+
+                       String accept = request.getHeader("Accept");
+
+                       PolicyType policyType = policyTypes.get(policyTypeId.toString());
+
+                       if (policyType == null) {
+                               System.out.println("createReplaceInstance - policytype does not exists");
+                               return new ResponseEntity<Void>(HttpStatus.NOT_FOUND);
+                       }
+
+                       // Create json string from schema
+                       String createSchema = null;
+                       try {
+                               PolicyTypeSchema schema = policyType.getSchema();
+                               // Convert Map to JSON
+                               String json = objectMapper.writeValueAsString(schema);
+                               // Print JSON output
+                               System.out.println("createReplaceInstance - schema - json: " + json);
+                               createSchema = objectMapper.writeValueAsString(schema.getCreateSchema());
+                               System.out.println("createReplaceInstance - createSchema - string: " + createSchema);
+                       } catch (Exception e) {
+                               e.printStackTrace();
+                               System.out.println("createReplaceInstance - schema corrupt");
+                               return new ResponseEntity<Void>(HttpStatus.INTERNAL_SERVER_ERROR);
+                       }
+
+                       // Create json string from instance
+                       String jsonInstance = null;
+                       try {
+                               System.out.println("createReplaceInstance - raw: " + body);
+                               // Convert Map to JSON
+                               jsonInstance = objectMapper.writeValueAsString(body);
+                               // Print JSON output
+                               System.out.println("createReplaceInstance - instance: " + jsonInstance);
+
+                       } catch (Exception e) {
+                               e.printStackTrace();
+                               System.out.println("createReplaceInstance - instancce corrupt");
+                               return new ResponseEntity<Void>(HttpStatus.INTERNAL_SERVER_ERROR);
+                       }
+
+                       if (!validateSchema(jsonInstance, createSchema)) {
+                               System.out.println("createReplaceInstance - schema validation failed");
+                               return new ResponseEntity<Void>(HttpStatus.BAD_REQUEST);
+                       }
+                       PolicyInstance policyInstance = new PolicyInstance(policyInstanceId, body);
+                       policyType.createReplaceInstance(policyInstanceId, policyInstance);
+
+                       System.out.println("createReplaceInstance - created/replaced ok");
+                       return new ResponseEntity<Void>(HttpStatus.CREATED);
+
+       }
+
+       public ResponseEntity<List<String>> getAllInstanceForType(Integer policyTypeId) {
+               System.out.println("getAllInstanceForType -  policyTypeId:" + policyTypeId);
+
+               String accept = request.getHeader("Accept");
+               if (accept != null && accept.contains("application/json")) {
+                       try {
+                               PolicyType policyType = policyTypes.get(policyTypeId.toString());
+                               if (policyType == null) {
+                                       System.out.println("getAllInstanceForType - policytype does not exists");
+                                       return new ResponseEntity<List<String>>(HttpStatus.NOT_FOUND);
+                               }
+                               Set<String> instances = policyType.getInstances();
+                               String res = "";
+                               for (Iterator iterator = instances.iterator(); iterator.hasNext();) {
+                                       String iid = (String) iterator.next();
+                                       iid = "\"" + iid + "\"";
+                                       if (res.length() > 0) {
+                                               res = res + ",";
+                                       }
+                                       res = res + iid;
+                               }
+                               System.out.println("getAllInstanceForType - " + res);
+                               return new ResponseEntity<List<String>>(objectMapper.readValue("[" + res + "]", List.class),
+                                               HttpStatus.ACCEPTED);
+                       } catch (IOException e) {
+                               e.printStackTrace();
+                               System.out.println(
+                                               "getAllInstanceForType - Couldn't serialize response for content type application/json");
+                               return new ResponseEntity<List<String>>(HttpStatus.INTERNAL_SERVER_ERROR);
+                       }
+               }
+               System.out.println("getAllInstanceForType - not implemented");
+               return new ResponseEntity<List<String>>(HttpStatus.NOT_IMPLEMENTED);
+
+       }
+
+       public ResponseEntity<Object> getPolicyInstance(Integer policyTypeId, String policyInstanceId) {
+               System.out.println("getPolicyInstance -  policyTypeId:" + policyTypeId);
+               System.out.println("getPolicyInstance -  policyInstanceId:" + policyInstanceId);
+
+               String accept = request.getHeader("Accept");
+               if (accept != null && accept.contains("application/json")) {
+                       try {
+                               PolicyType policyType = policyTypes.get(policyTypeId.toString());
+                               if (policyType == null) {
+                                       System.out.println("getPolicyInstance - policytype does not exists");
+                                       return new ResponseEntity<Object>(HttpStatus.NOT_FOUND);
+                               }
+                               PolicyInstance policyInstance = policyType.getInstance(policyInstanceId);
+                               if (policyInstance == null) {
+                                       System.out.println("getPolicyInstance - policyinstance does not exists");
+                                       return new ResponseEntity<Object>(HttpStatus.NOT_FOUND);
+                               }
+
+                               String json = "{}";
+                               try {
+                                       System.out.println("getPolicyInstance - rawschema: " + policyInstance.getJson());
+                                       // Convert Map to JSON
+                                       json = objectMapper.writeValueAsString(policyInstance.getJson());
+                                       // Print JSON output
+                                       System.out.println("getPolicyInstance - schema: " + json);
+
+                               } catch (Exception e) {
+                                       e.printStackTrace();
+                                       System.out.println("getPolicyInstance - schema corrupt");
+                                       return new ResponseEntity<Object>(HttpStatus.INTERNAL_SERVER_ERROR);
+                               }
+
+                               return new ResponseEntity<Object>(objectMapper.readValue(json, Object.class), HttpStatus.ACCEPTED);
+                       } catch (IOException e) {
+                               e.printStackTrace();
+                               System.out.println("getPolicyInstance - policyinstance corrupt");
+                               return new ResponseEntity<Object>(HttpStatus.INTERNAL_SERVER_ERROR);
+                       }
+               }
+
+               return new ResponseEntity<Object>(HttpStatus.NOT_IMPLEMENTED);
+       }
+
+       public ResponseEntity<List<InlineResponse200>> getStatus(Integer policyTypeId, String policyInstanceId) {
+               System.out.println("getStatus -  policyTypeId:" + policyTypeId);
+               System.out.println("getStatus -  policyInstanceId:" + policyInstanceId);
+
+               String accept = request.getHeader("Accept");
+               if (accept != null && accept.contains("application/json")) {
+                       try {
+                               PolicyType policyType = policyTypes.get(policyTypeId.toString());
+                               if (policyType == null) {
+                                       System.out.println("getStatus - policytype does not exists");
+                                       return new ResponseEntity<List<InlineResponse200>>(HttpStatus.NOT_FOUND);
+                               }
+                               PolicyInstance policyInstance = policyType.getInstance(policyInstanceId);
+                               if (policyInstance == null) {
+                                       System.out.println("getStatus - policyinstance does not exists");
+                                       return new ResponseEntity<List<InlineResponse200>>(HttpStatus.NOT_FOUND);
+                               }
+
+
+                               return new ResponseEntity<List<InlineResponse200>>(
+                                               objectMapper.readValue("[ {\n  \"handler_id\" : \"X-APP-1\",\n  \"status\" : \"enforced\"\n} ]",
+                                                               List.class),
+                                               HttpStatus.ACCEPTED);
+                       } catch (IOException e) {
+                               e.printStackTrace();
+                               System.out.println("getStatus - Couldn't serialize response for content type application/json");
+                               return new ResponseEntity<List<InlineResponse200>>(HttpStatus.INTERNAL_SERVER_ERROR);
+                       }
+               }
+
+               return new ResponseEntity<List<InlineResponse200>>(HttpStatus.NOT_IMPLEMENTED);
+       }
+
+}
diff --git a/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/resources/application.properties b/near-rt-ric-simulator/nearric-simulator/nearric-service/src/main/resources/application.properties
new file mode 100644 (file)
index 0000000..cbb8218
--- /dev/null
@@ -0,0 +1,3 @@
+spring.security.user.name=admin
+spring.security.user.password=admin
+spring.jackson.property-naming-strategy=SNAKE_CASE
\ No newline at end of file
diff --git a/near-rt-ric-simulator/nearric-simulator/pom.xml b/near-rt-ric-simulator/nearric-simulator/pom.xml
new file mode 100644 (file)
index 0000000..e57caef
--- /dev/null
@@ -0,0 +1,57 @@
+<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>
+       <groupId>org.oran.nearric</groupId>
+       <artifactId>nearric-simulator</artifactId>
+       <version>1.0.0-SNAPSHOT</version>
+       <packaging>pom</packaging>
+       <name>${project.artifactId}</name>
+
+       <parent>
+               <groupId>org.springframework.boot</groupId>
+               <artifactId>spring-boot-starter-parent</artifactId>
+               <version>2.1.9.RELEASE</version>
+               <relativePath />
+       </parent>
+
+       <properties>
+               <spring.boot.version>2.1.9.RELEASE</spring.boot.version>
+       </properties>
+
+       <dependencyManagement>
+               <dependencies>
+                       <dependency>
+                               <groupId>org.springframework.boot</groupId>
+                               <artifactId>spring-boot-dependencies</artifactId>
+                               <version>${spring.boot.version}</version>
+                               <type>pom</type>
+                               <scope>import</scope>
+                       </dependency>
+               </dependencies>
+       </dependencyManagement>
+
+       <dependencies>
+               <dependency>
+                       <groupId>org.springframework</groupId>
+                       <artifactId>spring-context</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.springframework</groupId>
+                       <artifactId>spring-web</artifactId>
+               </dependency>
+       </dependencies>
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>org.apache.maven.plugins</groupId>
+                               <artifactId>maven-compiler-plugin</artifactId>
+                       </plugin>
+               </plugins>
+       </build>
+
+       <modules>
+               <module>a1-med-api</module>
+               <module>nearric-service</module>
+       </modules>
+</project>
\ No newline at end of file
diff --git a/sdnc-a1-controller/README.md b/sdnc-a1-controller/README.md
new file mode 100644 (file)
index 0000000..85fe58f
--- /dev/null
@@ -0,0 +1,24 @@
+# O-RAN-SC Non-RealTime RIC - A1 Controller
+
+SDNC provides Northbound Interface for A1 operation to do policy management on XAPPS's in Near-RealTime RIC's.
+
+Please see the documentation in the docs/ folder
+
+For more information about the NONRTRIC project please see the [project website](https://wiki.o-ran-sc.org/display/RICNR "O-RAN-SC NONRTRIC project")
+
+## License
+
+Copyright (C) 2019 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.
+
+For more information about license please see the [LICENSE](LICENSE.txt) file for details.