From: Claudio D. Gasparini Date: Fri, 19 Feb 2021 16:26:23 +0000 (+0100) Subject: Initial drop of code X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F99%2F118099%2F8;p=cps%2Fcps-tbdmt.git Initial drop of code Issue-ID: CPS-243 Signed-off-by: Krishna moorthy Signed-off-by: Claudio D. Gasparini Change-Id: I048cc8931097c2f38331aaf60861d9c5a1ca7599 --- diff --git a/cps-tbdmt-application/pom.xml b/cps-tbdmt-application/pom.xml index ac57848..c2c2326 100644 --- a/cps-tbdmt-application/pom.xml +++ b/cps-tbdmt-application/pom.xml @@ -28,4 +28,79 @@ 4.0.0 cps-tbdmt-application + + + org.onap.cps.tbdmt.Application + cps-tbdmt + ${project.version} + 2.6.0 + 0.0 + nexus3.onap.org:10003/onap/ + nexus3.onap.org:10001/onap/integration + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.cloud + spring-cloud-starter-sleuth + + + ${project.groupId} + cps-tbdmt-rest + + + + + + com.google.cloud.tools + jib-maven-plugin + ${jib-maven-plugin.version} + + + ${app} + USE_CURRENT_TIMESTAMP + + + ${base.image} + + + + latest + + ${nexus.repository}${image.name}:${image.version} + + + + + package + build + + dockerBuild + + + + deploy + buildAndPush + + build + + + + + + \ No newline at end of file diff --git a/cps-tbdmt-application/src/main/java/org/onap/cps/tbdmt/Application.java b/cps-tbdmt-application/src/main/java/org/onap/cps/tbdmt/Application.java new file mode 100644 index 0000000..6e8be81 --- /dev/null +++ b/cps-tbdmt-application/src/main/java/org/onap/cps/tbdmt/Application.java @@ -0,0 +1,32 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2021 Wipro Limited. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.tbdmt; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(final String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/cps-tbdmt-dependencies/pom.xml b/cps-tbdmt-dependencies/pom.xml index 589f9f0..5c0edec 100644 --- a/cps-tbdmt-dependencies/pom.xml +++ b/cps-tbdmt-dependencies/pom.xml @@ -29,7 +29,12 @@ This artifact contains dependencyManagement declarations of upstream versions. + 1.0.1.Final + 2.5.6 + 1.18.16 https://nexus.onap.org + 0.8.13 + 42.2.5 /content/repositories/releases/ /content/repositories/snapshots/ true @@ -50,7 +55,50 @@ - + + org.postgresql + postgresql + ${postgresql.version} + + + org.hibernate.javax.persistence + hibernate-jpa-2.0-api + ${hibernate-jpa-api.version} + + + org.projectlombok + lombok + ${lombok.version} + + + com.hubspot.jinjava + jinjava + ${jinjava.version} + + + com.fasterxml.jackson.core + jackson-annotations + + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.core + jackson-core + + + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + + + + + com.openpojo + openpojo + ${openpojo.version} + test + \ No newline at end of file diff --git a/cps-tbdmt-parent/pom.xml b/cps-tbdmt-parent/pom.xml index 1322a47..9f4957d 100644 --- a/cps-tbdmt-parent/pom.xml +++ b/cps-tbdmt-parent/pom.xml @@ -10,7 +10,6 @@ - org.onap.cps cps-tbdmt-parent 0.0.1-SNAPSHOT pom diff --git a/cps-tbdmt-rest/docs/api/swagger/swagger.yaml b/cps-tbdmt-rest/docs/api/swagger/swagger.yaml index b6fe6fb..738811e 100644 --- a/cps-tbdmt-rest/docs/api/swagger/swagger.yaml +++ b/cps-tbdmt-rest/docs/api/swagger/swagger.yaml @@ -1,18 +1,16 @@ swagger: "2.0" info: - description: "" + description: "APIS for Template based Data Model Transformer" version: "1.0.0" title: "Template based Data Model Transformer APIs" license: name: "Apache 2.0" url: "http://www.apache.org/licenses/LICENSE-2.0.html" host: "localhost" -basePath: "/v1" tags: - name: "templates" description: "CRUD APIs for xpath templates" schemes: -- "https" - "http" paths: /templates: @@ -20,7 +18,7 @@ paths: tags: - "templates" summary: "Add a new template" - description: "" + description: "Creates a template in the database" operationId: "addTemplate" consumes: - "application/json" @@ -44,7 +42,7 @@ paths: tags: - "templates" summary: "Get all templates" - description: "" + description: "Retrieves all the templates stored in database" operationId: "getAllTemplates" consumes: - "application/json" @@ -61,24 +59,24 @@ paths: description: "No templates found" "500": description: "Internal server error" - /templates/{schemaSet}/{id}: + /templates/{model}/{template-id}: get: tags: - "templates" - summary: "Find template by ID" - description: "Returns a single template" + summary: "Find template by ID and model" + description: "Returns a single template identified by template-id and model" operationId: "getTemplateById" produces: - "application/json" parameters: - - name: "id" + - name: "template-id" in: "path" description: "ID of template to return" required: true type: "string" - - name: "schemaSet" + - name: "model" in: "path" - description: "schema set" + description: "represents the yang model" required: true type: "string" responses: @@ -94,18 +92,18 @@ paths: tags: - "templates" summary: "Deletes a template" - description: "" + description: "Deletes a template by id and model from the database" operationId: "deleteTemplate" produces: - "application/json" parameters: - - name: "id" + - name: "template-id" in: "path" required: true type: "string" - - name: "schemaSet" + - name: "model" in: "path" - description: "schema set" + description: "represents the yang model" required: true type: "string" responses: @@ -115,7 +113,7 @@ paths: description: "Invalid ID supplied" "404": description: "Template not found" - /execute/{schemaSet}/{id}: + /execute/{model}/{template-id}: post: tags: - "template executions" @@ -125,14 +123,14 @@ paths: produces: - "application/json" parameters: - - name: "id" + - name: "template-id" in: "path" description: "ID of template to execute" required: true type: "string" - - name: "schemaSet" + - name: "model" in: "path" - description: "schema set" + description: "represents the yang model" required: true type: "string" - in: "body" @@ -156,15 +154,15 @@ definitions: Template: type: "object" required: - - "id" - - "schemaSet" - - "xpathTemplate" + - "template-id" + - "model" + - "xpath-template" properties: - id: + template-id: type: "string" - schemaSet: + model: type: "string" - xpathTemplate: + xpath-template: type: "string" ApiRequest: type: "object" diff --git a/cps-tbdmt-rest/pom.xml b/cps-tbdmt-rest/pom.xml index 048f243..c155196 100644 --- a/cps-tbdmt-rest/pom.xml +++ b/cps-tbdmt-rest/pom.xml @@ -28,4 +28,34 @@ 4.0.0 cps-tbdmt-rest + + + ${project.groupId} + cps-tbdmt-service + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + org.springframework.boot + spring-boot-starter-jetty + + + junit + junit + test + + + org.springframework.boot + spring-boot-starter-test + test + + \ No newline at end of file diff --git a/cps-tbdmt-rest/src/main/java/org/onap/cps/tbdmt/exception/TemplateExceptionHandler.java b/cps-tbdmt-rest/src/main/java/org/onap/cps/tbdmt/exception/TemplateExceptionHandler.java new file mode 100644 index 0000000..e207827 --- /dev/null +++ b/cps-tbdmt-rest/src/main/java/org/onap/cps/tbdmt/exception/TemplateExceptionHandler.java @@ -0,0 +1,84 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2021 Wipro Limited. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.tbdmt.exception; + +import java.util.ArrayList; +import java.util.List; +import org.onap.cps.tbdmt.model.ErrorResponse; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.ObjectError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +@ControllerAdvice +public class TemplateExceptionHandler extends ResponseEntityExceptionHandler { + + /** + * Handle TemplateNotFoundException. + * + * @param templateNotFoundException Exception + * @param request web request + * @return response entity + */ + @ExceptionHandler(TemplateNotFoundException.class) + public final ResponseEntity handleTemplateNotFoundException( + final TemplateNotFoundException templateNotFoundException, + final WebRequest request) { + final List details = new ArrayList<>(); + details.add(templateNotFoundException.getLocalizedMessage()); + final ErrorResponse error = new ErrorResponse("Template Not found", details); + return new ResponseEntity<>(error, HttpStatus.NOT_FOUND); + } + + /** + * Handle ExecuteException. + * + * @param executeException Exception + * @param request web request + * @return response entity + */ + @ExceptionHandler(ExecuteException.class) + public final ResponseEntity handleExecutionException( + final ExecuteException executeException, + final WebRequest request) { + final List details = new ArrayList<>(); + details.add(executeException.getLocalizedMessage()); + final ErrorResponse error = new ErrorResponse("Error while executing template", details); + return new ResponseEntity<>(error, HttpStatus.OK); + } + + @Override + protected ResponseEntity handleMethodArgumentNotValid( + final MethodArgumentNotValidException methodArgumentNotValidException, + final HttpHeaders headers, final HttpStatus status, final WebRequest request) { + final List details = new ArrayList<>(); + for (final ObjectError error : methodArgumentNotValidException.getBindingResult().getAllErrors()) { + details.add(error.getDefaultMessage()); + } + final ErrorResponse error = new ErrorResponse("Validation Failed", details); + return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST); + } +} diff --git a/cps-tbdmt-rest/src/main/java/org/onap/cps/tbdmt/rest/ExecutionController.java b/cps-tbdmt-rest/src/main/java/org/onap/cps/tbdmt/rest/ExecutionController.java new file mode 100644 index 0000000..821efbd --- /dev/null +++ b/cps-tbdmt-rest/src/main/java/org/onap/cps/tbdmt/rest/ExecutionController.java @@ -0,0 +1,56 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2021 Wipro Limited. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.tbdmt.rest; + +import javax.validation.Valid; +import org.onap.cps.tbdmt.model.ExecutionRequest; +import org.onap.cps.tbdmt.service.ExecutionBusinessLogic; +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.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class ExecutionController { + + @Autowired + private ExecutionBusinessLogic executionBusinessLogic; + + /** + * Execute a template by model and templateId. + * + * @param templateId Id to find the template + * @param model schema set to find the template + * @return result of the execution + */ + @PostMapping(path = "/execute/{model}/{templateId}") + public ResponseEntity executeTemplate(@Valid @PathVariable final String model, + @Valid @PathVariable final String templateId, + @Valid @RequestBody final ExecutionRequest executionRequest) { + final String result = executionBusinessLogic.executeTemplate(model, + templateId, executionRequest); + return new ResponseEntity<>(result, HttpStatus.OK); + } + +} diff --git a/cps-tbdmt-rest/src/main/java/org/onap/cps/tbdmt/rest/TemplateController.java b/cps-tbdmt-rest/src/main/java/org/onap/cps/tbdmt/rest/TemplateController.java new file mode 100644 index 0000000..c907c20 --- /dev/null +++ b/cps-tbdmt-rest/src/main/java/org/onap/cps/tbdmt/rest/TemplateController.java @@ -0,0 +1,92 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP + * ================================================================================ + * Copyright (C) 2021 Wipro Limited. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.tbdmt.rest; + +import java.util.Collection; +import javax.validation.Valid; +import org.onap.cps.tbdmt.exception.TemplateNotFoundException; +import org.onap.cps.tbdmt.model.Template; +import org.onap.cps.tbdmt.model.TemplateKey; +import org.onap.cps.tbdmt.model.TemplateRequest; +import org.onap.cps.tbdmt.service.TemplateBusinessLogic; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class TemplateController { + + @Autowired + private TemplateBusinessLogic templateBusinessLogic; + + @PostMapping(path = "/templates") + public ResponseEntity