Implementation for TMF 633 API - POST /serviceSpecification
[externalapi/nbi.git] / src / main / java / org / onap / nbi / apis / servicecatalog / ServiceSpecificationResource.java
index 128bc6c..a0c27e7 100644 (file)
 
 package org.onap.nbi.apis.servicecatalog;
 
+import java.net.URI;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import org.onap.nbi.OnapComponentsUrlPaths;
+import org.onap.nbi.apis.servicecatalog.model.ServiceSpecificationRequest;
 import org.onap.nbi.commons.JsonRepresentation;
 import org.onap.nbi.commons.ResourceManagement;
+import org.onap.nbi.exceptions.ValidationException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.util.MultiValueMap;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
+
+import javax.validation.Valid;
 
 @RestController
 @RequestMapping(OnapComponentsUrlPaths.SERVICE_SPECIFICATION_PATH)
@@ -42,17 +46,17 @@ public class ServiceSpecificationResource extends ResourceManagement {
 
     @GetMapping(value = "/{serviceSpecId}", produces = MediaType.APPLICATION_JSON_VALUE)
     public ResponseEntity<Object> getServiceSpecification(@PathVariable String serviceSpecId,
-            @RequestParam MultiValueMap<String, String> params) {
+                                                          @RequestParam MultiValueMap<String, String> params) {
         Map response = serviceSpecificationService.get(serviceSpecId);
 
         if (response != null) {
-           ArrayList<Map<String, Object>> resourseSpecificationMap= (ArrayList<Map<String, Object>>) response.get("resourceSpecification");
-           for (Map<String, Object> map : resourseSpecificationMap) {
-               map.remove("childResourceSpecification");
-               map.remove("serviceInstanceParams");
-               map.remove("InstanceSpecification");
-           }
-           response.put("resourceSpecification", resourseSpecificationMap);
+            ArrayList<Map<String, Object>> resourseSpecificationMap= (ArrayList<Map<String, Object>>) response.get("resourceSpecification");
+            for (Map<String, Object> map : resourseSpecificationMap) {
+                map.remove("childResourceSpecification");
+                map.remove("serviceInstanceParams");
+                map.remove("InstanceSpecification");
+            }
+            response.put("resourceSpecification", resourseSpecificationMap);
         }
 
         JsonRepresentation filter = new JsonRepresentation(params);
@@ -73,10 +77,35 @@ public class ServiceSpecificationResource extends ResourceManagement {
 
     @GetMapping(value = "/{serviceSpecId}/specificationInputSchema", produces = MediaType.APPLICATION_JSON_VALUE)
     public ResponseEntity<Object> findSpecificationInputSchema(@PathVariable String serviceSpecId,
-            @RequestParam MultiValueMap<String, String> params) {
+                                                               @RequestParam MultiValueMap<String, String> params) {
         String response = serviceSpecificationService.getInputSchema(serviceSpecId);
         JsonRepresentation filter = new JsonRepresentation(params);
         return this.getResponse(response, filter);
     }
 
+    @PostMapping(value = "", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
+    public Object createServiceSpecification(@RequestHeader(value = "USER_ID", required = true) String userId,
+                                             @Valid @RequestBody ServiceSpecificationRequest serviceSpecificationRequest, BindingResult result) {
+        if (null == userId || userId.isEmpty()) {
+            result.addError(new ObjectError("USER_ID", "USER_ID is missing in header!"));
+        }
+        if (result.hasErrors()) {
+            throw new ValidationException(result.getAllErrors());
+        }
+        Map serviceCatalogResponse = serviceSpecificationService.create(userId, serviceSpecificationRequest);
+
+        return createResponse(serviceCatalogResponse);
+    }
+    /**
+     *
+     * @param resource
+     * @return
+     */
+    private ResponseEntity<Object> createResponse(final Map resource) {
+        URI location = ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(resource.get("id"))
+                .toUri();
+        return ResponseEntity.created(location).body(resource);
+
+    }
+
 }
\ No newline at end of file