-# 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.
--- /dev/null
+.. ============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
--- /dev/null
+# 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.
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
--- /dev/null
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
--- /dev/null
+# 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.
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+eclipse.preferences.version=1
+encoding//src/main/resources=UTF-8
+encoding/<project>=UTF-8
--- /dev/null
+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
--- /dev/null
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+# ==================================================================================
+# 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
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
--- /dev/null
+<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>
--- /dev/null
+#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
--- /dev/null
+/*-
+ * ============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;
+ }
+
+}
--- /dev/null
+/*-
+ * ============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);
+ }
+}
--- /dev/null
+/*-
+ * ============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();
+ }
+
+}
--- /dev/null
+/**
+ * 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);
+
+}
--- /dev/null
+/*-
+ * ============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);
+ }
+
+}
--- /dev/null
+/*-
+ * ============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;
+ }
+}
--- /dev/null
+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
--- /dev/null
+/*-
+ * ============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();
+
+}
--- /dev/null
+/*-
+ * ============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);
+ }
+
+}
--- /dev/null
+spring.security.user.name=admin
+spring.security.user.password=admin
+spring.jackson.property-naming-strategy=SNAKE_CASE
\ No newline at end of file
--- /dev/null
+<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
--- /dev/null
+# 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.