# Configuration & Persistency Service
-This folder contains all files for
+This folder contains all files for
[Configuration & Persistency Service](https://wiki.onap.org/pages/viewpage.action?pageId=81406119).
-The code here is related to CPS POC, then it must be kept self contained in this cps folder to prevent any impact on
-current ccsdk components and to be ready to be moved in its own repo once CPS becomes a standalone project.
\ No newline at end of file
+The code here is related to CPS POC, then it must be kept self contained in this cps folder to prevent any impact on
+current ccsdk components and to be ready to be moved in its own repo once CPS becomes a standalone project.
+
+
+## Running Locally
+
+* Run a postgres container instance and create `cpsdb' database:
+
+```
+CREATE USER cps WITH PASSWORD 'cps';
+CREATE DATABASE cpsdb OWNER cps;
+```
+
+* Build (from cps root folder)
+
+```bash
+mvn clean package
+```
+
+* Run (from cps root folder)
+
+```bash
+java -DDB_HOST=localhost -DDB_USERNAME=cps -DDB_PASSWORD=cps -jar cps-rest/target/cps-rest-0.0.1-SNAPSHOT.jar
+```
+
+* Browse
+ * [Swagger UI](http://localhost:8080/swagger-ui/index.html)
+ * OpenAPI Specification in [JSON](http://localhost:8080/api/cps/openapi.json)
+ or [YAML](http://localhost:8080/api/cps/openapi.yaml) format
<artifactId>jersey-media-multipart</artifactId>\r
</dependency>\r
\r
+ <dependency>\r
+ <groupId>org.springframework</groupId>\r
+ <artifactId>spring-webmvc</artifactId>\r
+ </dependency>\r
+\r
<dependency>\r
<groupId>org.springframework.boot</groupId>\r
<artifactId>spring-boot-starter-jersey</artifactId>\r
</execution>\r
</executions>\r
</plugin>\r
+ <plugin>\r
+ <!-- Download Swagger UI webjar. -->\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-dependency-plugin</artifactId>\r
+ <version>${maven-dependency-plugin.version}</version>\r
+ <executions>\r
+ <execution>\r
+ <phase>prepare-package</phase>\r
+ <goals>\r
+ <goal>unpack</goal>\r
+ </goals>\r
+ <configuration>\r
+ <artifactItems>\r
+ <artifactItem>\r
+ <groupId>org.webjars</groupId>\r
+ <artifactId>swagger-ui</artifactId>\r
+ <version>${swagger-ui.version}</version>\r
+ </artifactItem>\r
+ </artifactItems>\r
+ <outputDirectory>${project.build.directory}/swagger-ui-${swagger-ui.version}</outputDirectory>\r
+ </configuration>\r
+ </execution>\r
+ </executions>\r
+ </plugin>\r
+ <plugin>\r
+ <!-- Copy Swagger UI resources to static resources directory. -->\r
+ <groupId>org.apache.maven.plugins</groupId>\r
+ <artifactId>maven-resources-plugin</artifactId>\r
+ <version>${maven-resources-plugin.version}</version>\r
+ <executions>\r
+ <execution>\r
+ <id>copy-resources</id>\r
+ <phase>prepare-package</phase>\r
+ <goals>\r
+ <goal>copy-resources</goal>\r
+ </goals>\r
+ <configuration>\r
+ <outputDirectory>${project.build.outputDirectory}/static/swagger-ui</outputDirectory>\r
+ <resources>\r
+ <resource>\r
+ <directory>${project.build.directory}/swagger-ui-${swagger-ui.version}/META-INF/resources/webjars/swagger-ui/${swagger-ui.version}/</directory>\r
+ <excludes>\r
+ <exclude>**/*.gz</exclude>\r
+ </excludes>\r
+ </resource>\r
+ </resources>\r
+ </configuration>\r
+ </execution>\r
+ </executions>\r
+ </plugin>\r
+ <plugin>\r
+ <!-- Replace the OpenAPI specification example URL with the local one. -->\r
+ <groupId>com.google.code.maven-replacer-plugin</groupId>\r
+ <artifactId>replacer</artifactId>\r
+ <version>${maven-replacer-plugin.version}</version>\r
+ <executions>\r
+ <execution>\r
+ <phase>prepare-package</phase>\r
+ <goals>\r
+ <goal>replace</goal>\r
+ </goals>\r
+ </execution>\r
+ </executions>\r
+ <configuration>\r
+ <file>${project.build.outputDirectory}/static/swagger-ui/index.html</file>\r
+ <replacements>\r
+ <replacement>\r
+ <token>https://petstore.swagger.io/v2/swagger.json</token>\r
+ <value>/api/cps/openapi.json</value>\r
+ </replacement>\r
+ </replacements>\r
+ </configuration>\r
+ </plugin>\r
</plugins>\r
</build>\r
</project>\r
import javax.ws.rs.ApplicationPath;\r
import org.glassfish.jersey.media.multipart.MultiPartFeature;\r
import org.glassfish.jersey.server.ResourceConfig;\r
+import org.glassfish.jersey.servlet.ServletProperties;\r
+import org.onap.cps.rest.controller.ModelController;\r
+import org.onap.cps.rest.controller.RestController;\r
import org.springframework.context.annotation.Configuration;\r
\r
@Configuration\r
register(OpenApiResource.class);\r
register(AcceptHeaderOpenApiResource.class);\r
\r
- packages("org.onap.cps.rest.controller");\r
+ // Register controllers\r
+ register(ModelController.class);\r
+ register(RestController.class);\r
+\r
configureSwagger();\r
+ configureSwaggerUI();\r
}\r
\r
private void configureSwagger() {\r
throw new RuntimeException(e.getMessage(), e);\r
}\r
}\r
+\r
+ private void configureSwaggerUI() {\r
+ // Enable Jersey filter forwarding to next filter for 404 responses.\r
+ // This configuration lets Jersey servlet container forwarding static swagger ui requests to spring mvc filter\r
+ // to be handle by spring mvc dispatcher servlet.\r
+ property(ServletProperties.FILTER_FORWARD_ON_404, true);\r
+ }\r
+\r
}\r
password: ${DB_PASSWORD}\r
driverClassName: org.postgresql.Driver\r
initialization-mode: always\r
+ jersey:\r
+ type: filter\r
\r
logging:\r
level:\r
@Override
public final void storeSchemaContext(final SchemaContext schemaContext) {
for (final Module module : schemaContext.getModules()) {
- modelPersistencyService.storeModule(module.getName(), module.toString(),
- module.getRevision().toString());
+ modelPersistencyService.storeModule(module.getName(), module.toString(), module.getRevision().toString());
}
}
}
<swagger.version>2.1.4</swagger.version>\r
<groovy.version>3.0.6</groovy.version>\r
<spock-core.version>2.0-M2-groovy-3.0</spock-core.version>\r
+ <maven-dependency-plugin.version>3.1.2</maven-dependency-plugin.version>\r
+ <maven-resources-plugin.version>3.2.0</maven-resources-plugin.version>\r
+ <maven-replacer-plugin.version>1.5.3</maven-replacer-plugin.version>\r
+ <swagger-ui.version>3.35.0</swagger-ui.version>\r
</properties>\r
\r
<dependencyManagement>\r