Update docker-compose for Macroflow with HEAT and small refactoring
[integration/csit.git] / plans / so / integration-etsi-testing / so-simulators / multicloud-simulator / src / main / java / org / onap / so / multicloudsimulator / controller / MultiCloudController.java
index b0e1336..c99e246 100644 (file)
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright 2021 Huawei Technologies Co., Ltd.
+ * ================================================================================
+ * 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.so.multicloudsimulator.controller;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.core.MediaType;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.json.simple.JSONArray;
-import org.json.simple.JSONObject;
-import org.onap.so.multicloudsimulator.beans.InstanceResponse;
-import org.onap.so.multicloudsimulator.beans.MulticloudInstanceRequest;
+import org.apache.commons.io.IOUtils;
+import org.onap.so.multicloudsimulator.beans.InstanceOutput;
 import org.onap.so.multicloudsimulator.beans.MulticloudCreateResponse;
+import org.onap.so.multicloudsimulator.beans.MulticloudInstanceRequest;
+import org.onap.so.multicloudsimulator.beans.InstanceResponse;
+import org.onap.so.multicloudsimulator.beans.InstanceNameOutput;
 import org.onap.so.multicloudsimulator.beans.MulticloudRequest;
-import org.onap.so.openstack.beans.HeatStatus;
 
 import org.springframework.http.ResponseEntity;
-
-import org.springframework.web.bind.annotation.*;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+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.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.io.IOException;
-import java.net.URI;
+import java.io.InputStream;
 
 import static org.onap.so.multicloudsimulator.utils.Constants.BASE_URL;
+
 @RestController
 @RequestMapping(path = BASE_URL)
 public class MultiCloudController {
 
-       public static final String X_HTTP_METHOD_OVERRIDE = "X-HTTP-Method-Override";
-       private static final Logger LOGGER = LoggerFactory.getLogger(MultiCloudController.class);
-       public MulticloudCreateResponse multicloudCreateResponse = new MulticloudCreateResponse();
-
-       @PostMapping(value="/v1/instance")
-       public ResponseEntity<?> createInstance(@RequestBody MulticloudInstanceRequest req){
-          System.out.println("MultiCloud createInstance ");
-               InstanceResponse InstanceResponse = new InstanceResponse();
-               
-               return ResponseEntity.ok(InstanceResponse);
-       }
-       
-       @GetMapping(value = "/{cloud-owner}/{cloud-region-id}/infra_workload", produces = {
-                       MediaType.APPLICATION_JSON })
-    public ResponseEntity<?> getInstance(
-               @PathVariable("cloud-owner") String cloudOwner, @PathVariable("cloud-region-id") String cloudRegionId,
-               @RequestParam(value = "depth", required = false, defaultValue = "0") Integer depth,
-               @RequestParam(name = "format", required = false) final String name, final HttpServletRequest request) throws IOException {
-               
-               LOGGER.info("found CloudOwner {} in cache", cloudOwner);
-               LOGGER.info("found cloudRegionId {} in cache", cloudRegionId);
-               LOGGER.info("found name {} in cache", name);
-                       JSONObject json = new JSONObject();
-
-                       json.put("template_type", "heat");
-                       json.put("workload_id", "");
-                       json.put("workload_status", "GET_COMPLETE");
-                       JSONObject workload = new JSONObject();
-                       workload.put("stacks", HeatStatus.NOTFOUND);
-                       json.put("workload_status_reason", workload);
-
-                       return ResponseEntity.ok(json);
-       }
-
-       @PostMapping(value = "/{cloud-owner}/{cloud-region-id}/infra_workload",
-                       consumes = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML},
-                       produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
-       public ResponseEntity<?> postCreateInstance(
-                       @RequestBody final MulticloudRequest inputRequest, @PathVariable("cloud-owner") final String cloudOwner,
-                       @PathVariable("cloud-region-id") final String cloudRegionId,
-                       @RequestHeader(value = X_HTTP_METHOD_OVERRIDE, required = false) final String xHttpHeaderOverride,
-                       final HttpServletRequest request) throws IOException {
-
-                       LOGGER.info("input request {}: ",inputRequest.toString());
-               String input = "{\n" +
-                               "   \"template_type\": \"heat\",\n" +
-                               "   \"workload_id\": \"sad_sammet\",\n" +
-                               "   \"template_response\": [\n" +
-                               "      {\n" +
-                               "         \"GVK\": {\n" +
-                               "            \"Group\": \"k8s.plugin.opnfv.org\",\n" +
-                               "            \"Version\": \"v1alpha1\",\n" +
-                               "            \"Kind\": \"Network\"\n" +
-                               "         },\n" +
-                               "         \"Name\": \"k8s-region-2-onap-nf-20210120t221126760z-management-network\"\n" +
-                               "      },\n" +
-                               "      {\n" +
-                               "         \"GVK\": {\n" +
-                               "            \"Group\": \"k8s.plugin.opnfv.org\",\n" +
-                               "            \"Version\": \"v1alpha1\",\n" +
-                               "            \"Kind\": \"Network\"\n" +
-                               "         },\n" +
-                               "         \"Name\": \"k8s-region-2-onap-nf-20210120t221126760z-protected-network\"\n" +
-                               "      },\n" +
-                               "      {\n" +
-                               "         \"GVK\": {\n" +
-                               "            \"Group\": \"k8s.plugin.opnfv.org\",\n" +
-                               "            \"Version\": \"v1alpha1\",\n" +
-                               "            \"Kind\": \"Network\"\n" +
-                               "         },\n" +
-                               "         \"Name\": \"k8s-region-2-onap-nf-20210120t221126760z-unprotected-network\"\n" +
-                               "      },\n" +
-                               "      {\n" +
-                               "         \"GVK\": {\n" +
-                               "            \"Group\": \"k8s.cni.cncf.io\",\n" +
-                               "            \"Version\": \"v1\",\n" +
-                               "            \"Kind\": \"NetworkAttachmentDefinition\"\n" +
-                               "         },\n" +
-                               "         \"Name\": \"k8s-region-2-onap-nf-20210120t221126760z-ovn-nat\"\n" +
-                               "      }\n" +
-                               "   ],\n" +
-                               "   \"workload_status\": \"CREATE_COMPLETE\",\n" +
-                               "   \"workload_status_reason\": \"test\"\n" +
-                               "}";
-
-               ObjectMapper objectMapper = new ObjectMapper();
-               JSONObject workload = new JSONObject();
-
-               workload.put("stack",true);
-
-               JsonNode jsonNode = objectMapper.readTree(workload.toJSONString());
-               MulticloudCreateResponse multiResponse = objectMapper.readValue(input, MulticloudCreateResponse.class);
-               multiResponse.setWorkloadStatusReason(null);
-
-               LOGGER.info("workload reason: {}",multiResponse.getWorkloadStatusReason());
-               multiResponse.setWorkloadId("sad_sammet");
-               multiResponse.setTemplateType("heat");
-               multiResponse.setWorkloadStatus("CREATE_COMPLETE");
-
-               return ResponseEntity.status(201).body(multiResponse);
-       }
-
-       @GetMapping(value = "/{cloud-owner}/{cloud-region-id}/infra_workload/{workload-id}", produces = {
-                       MediaType.APPLICATION_JSON })
-       public ResponseEntity<?> getInstanceName(
-                       @PathVariable("cloud-owner") String cloudOwner, @PathVariable("cloud-region-id") String cloudRegionId,
-                       @PathVariable("workload-id") String workloadId,
-                       @RequestParam(value = "depth", required = false, defaultValue = "0") Integer depth,
-                       @RequestParam(name = "format", required = false) final String name, final HttpServletRequest request) throws IOException {
-
-               LOGGER.info("Calling getInstanceName");
-               LOGGER.info("found CloudOwner {} in cache", cloudOwner);
-               LOGGER.info("found cloudRegionId {} in cache", cloudRegionId);
-               LOGGER.info("found name {} in cache", name);
-               JSONObject json = new JSONObject();
-
-                       json.put("template_type", "heat");
-                       json.put("workload_id", "sad_sammet");
-                       json.put("workload_status", "CREATE_COMPLETE");
-                       JSONObject workload = new JSONObject();
-                       workload.put("stacks", true);
-                       json.put("workload_status_reason", null);
-
-                       return ResponseEntity.ok(json);
-       }
-
-       @PostMapping(value = "/{cloud-owner}/{cloud-region-id}/infra_workload/{workload-id}",
-                       consumes = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML},
-                       produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
-       public ResponseEntity<?> postCreateInstanceName(
-                       @RequestBody final MulticloudRequest inputRequest, @PathVariable("cloud-owner") final String cloudOwner,
-                       @PathVariable("workload-id") String workloadId,
-                       @PathVariable("cloud-region-id") final String cloudRegionId,
-                       @RequestHeader(value = X_HTTP_METHOD_OVERRIDE, required = false) final String xHttpHeaderOverride,
-                       final HttpServletRequest request) throws IOException {
-
-                       LOGGER.info("Calling postCreateInstanceName");
-
-                       return ResponseEntity.status(405).build();
-       }
-}
+    public static final String X_HTTP_METHOD_OVERRIDE = "X-HTTP-Method-Override";
+    private static final Logger LOGGER = LoggerFactory.getLogger(MultiCloudController.class);
+
+    @PostMapping(value = "/v1/instance")
+    public ResponseEntity<?> createInstance(@RequestBody MulticloudInstanceRequest req) {
+        System.out.println("MultiCloud createInstance ");
+        final InstanceResponse InstanceResponse = new InstanceResponse();
+
+        LOGGER.info("Calling createInstance");
+        return ResponseEntity.ok(InstanceResponse);
+    }
+
+    @GetMapping(value = "/{cloud-owner}/{cloud-region-id}/infra_workload", produces = { MediaType.APPLICATION_JSON })
+    public ResponseEntity<?> getInstance(@PathVariable("cloud-owner") String cloudOwner,
+            @PathVariable("cloud-region-id") String cloudRegionId,
+            @RequestParam(value = "depth", required = false, defaultValue = "0") Integer depth,
+            @RequestParam(name = "format", required = false) final String name, final HttpServletRequest request)
+            throws Exception {
+
+        LOGGER.info("found CloudOwner {}", cloudOwner);
+        LOGGER.info("found cloudRegionId {}", cloudRegionId);
+        LOGGER.info("found name {}", name);
+        final InputStream instanceOutput = InstanceOutput.getInstance();
+        final String output = IOUtils.toString(instanceOutput, "utf-8");
+
+        return ResponseEntity.ok(output);
+    }
+
+    @PostMapping(value = "/{cloud-owner}/{cloud-region-id}/infra_workload", consumes = { MediaType.APPLICATION_JSON,
+            MediaType.APPLICATION_XML }, produces = { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
+    public ResponseEntity<?> postCreateInstance(@RequestBody final MulticloudCreateResponse inputRequest,
+            @PathVariable("cloud-owner") final String cloudOwner,
+            @PathVariable("cloud-region-id") final String cloudRegionId,
+            @RequestHeader(value = X_HTTP_METHOD_OVERRIDE, required = false) final String xHttpHeaderOverride,
+            final HttpServletRequest request) throws IOException {
+
+        LOGGER.info("Calling postCreateInstance");
+        inputRequest.setWorkloadStatusReason(null);
+
+        inputRequest.setWorkloadId("sad_sammet");
+        inputRequest.setTemplateType("heat");
+        inputRequest.setWorkloadStatus("CREATE_COMPLETE");
+
+        return ResponseEntity.status(201).body(inputRequest);
+    }
+
+    @GetMapping(value = "/{cloud-owner}/{cloud-region-id}/infra_workload/{workload-id}", produces = {
+            MediaType.APPLICATION_JSON })
+    public ResponseEntity<?> getInstanceName(@PathVariable("cloud-owner") final String cloudOwner,
+            @PathVariable("cloud-region-id") final String cloudRegionId, @PathVariable("workload-id") final String workloadId,
+            @RequestParam(value = "depth", required = false, defaultValue = "0") final Integer depth,
+            @RequestParam(name = "format", required = false) final String name, final HttpServletRequest request)
+            throws Exception {
+
+        LOGGER.info("Calling getInstanceName");
+        LOGGER.info("found CloudOwner {}", cloudOwner);
+        LOGGER.info("found cloudRegionId {}", cloudRegionId);
+        LOGGER.info("found name {}", name);
+        final InputStream instanceNameOutput = InstanceNameOutput.getInstanceName();
+        final String output = IOUtils.toString(instanceNameOutput, "utf-8");
+
+        return ResponseEntity.ok(output);
+    }
+
+    @PostMapping(value = "/{cloud-owner}/{cloud-region-id}/infra_workload/{workload-id}", consumes = {
+            MediaType.APPLICATION_JSON,
+            MediaType.APPLICATION_XML }, produces = { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
+    public ResponseEntity<?> postCreateInstanceName(@RequestBody final MulticloudRequest inputRequest,
+            @PathVariable("cloud-owner") final String cloudOwner, @PathVariable("workload-id") String workloadId,
+            @PathVariable("cloud-region-id") final String cloudRegionId,
+            @RequestHeader(value = X_HTTP_METHOD_OVERRIDE, required = false) final String xHttpHeaderOverride,
+            final HttpServletRequest request) throws IOException {
+
+        LOGGER.info("Calling postCreateInstanceName");
+
+        return ResponseEntity.status(405).build();
+    }
+}
\ No newline at end of file