Return List<Artifact> in ArtifactDownloadManager
[aai/model-loader.git] / src / main / java / org / onap / aai / modelloader / service / ModelController.java
index 0ca2c02..233f2ab 100644 (file)
@@ -23,27 +23,24 @@ package org.onap.aai.modelloader.service;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Base64;
-import java.util.Date;
 import java.util.List;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
 
 import org.onap.aai.cl.api.Logger;
 import org.onap.aai.cl.eelf.LoggerFactory;
 import org.onap.aai.modelloader.config.ModelLoaderConfig;
 import org.onap.aai.modelloader.entity.Artifact;
+import org.onap.aai.modelloader.entity.ArtifactType;
 import org.onap.aai.modelloader.notification.ArtifactDownloadManager;
-import org.onap.aai.modelloader.notification.EventCallback;
 import org.onap.aai.modelloader.notification.NotificationDataImpl;
 import org.onap.aai.modelloader.notification.NotificationPublisher;
 import org.onap.sdc.api.IDistributionClient;
 import org.onap.sdc.api.notification.IArtifactInfo;
-import org.onap.sdc.api.results.IDistributionClientResult;
-import org.onap.sdc.utils.DistributionActionResultEnum;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+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.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -53,110 +50,53 @@ import org.springframework.web.bind.annotation.RestController;
  */
 @RestController
 @RequestMapping("/services/model-loader/v1/model-service")
-public class ModelController implements ModelLoaderInterface {
+public class ModelController {
 
-    private static final Logger logger = LoggerFactory.getInstance().getLogger(ModelController.class.getName());
+    private static final Logger logger = LoggerFactory.getInstance().getLogger(ModelController.class);
 
     private final IDistributionClient client;
     private final ModelLoaderConfig config;
-    private final EventCallback eventCallback;
-    private final BabelServiceClientFactory babelClientFactory;
+    private final ArtifactDeploymentManager artifactDeploymentManager;
+    private final ArtifactDownloadManager artifactDownloadManager;
 
-    public ModelController(IDistributionClient client, ModelLoaderConfig config, EventCallback eventCallback,
-            BabelServiceClientFactory babelClientFactory) {
+    public ModelController(IDistributionClient client, ModelLoaderConfig config, ArtifactDeploymentManager artifactDeploymentManager, ArtifactDownloadManager artifactDownloadManager) {
         this.client = client;
         this.config = config;
-        this.eventCallback = eventCallback;
-        this.babelClientFactory = babelClientFactory;
+        this.artifactDeploymentManager = artifactDeploymentManager;
+        this.artifactDownloadManager = artifactDownloadManager;
     }
 
-    /**
-     * Responsible for stopping the connection to the distribution client before the resource is destroyed.
-     */
-    public void preShutdownOperations() {
-        logger.info(ModelLoaderMsgs.STOPPING_CLIENT);
-        if (client != null) {
-            client.stop();
-        }
+    @GetMapping(value = "/loadModel/{modelid}", produces = "application/json")
+    public ResponseEntity<String> loadModel(@PathVariable String modelid) {
+        return ResponseEntity.ok("{\"model_loaded\":\"" + modelid + "\"}");
     }
 
-    /**
-     * Responsible for loading configuration files, initializing model distribution clients, and starting them.
-     */
-    protected void initSdcClient() {
-        // Initialize distribution client
-        logger.debug(ModelLoaderMsgs.INITIALIZING, "Initializing distribution client...");
-        IDistributionClientResult initResult = client.init(config, eventCallback);
-
-        if (initResult.getDistributionActionResult() == DistributionActionResultEnum.SUCCESS) {
-            // Start distribution client
-            logger.debug(ModelLoaderMsgs.INITIALIZING, "Starting distribution client...");
-            IDistributionClientResult startResult = client.start();
-            if (startResult.getDistributionActionResult() == DistributionActionResultEnum.SUCCESS) {
-                logger.info(ModelLoaderMsgs.INITIALIZING, "Connection to SDC established");
-            } else {
-                String errorMsg = "Failed to start distribution client: " + startResult.getDistributionMessageResult();
-                logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
-
-                // Kick off a timer to retry the SDC connection
-                Timer timer = new Timer();
-                TimerTask task = new SdcConnectionJob(client, config, eventCallback, timer);
-                timer.schedule(task, new Date(), 60000);
-            }
-        } else {
-            String errorMsg = "Failed to initialize distribution client: " + initResult.getDistributionMessageResult();
-            logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
-
-            // Kick off a timer to retry the SDC connection
-            Timer timer = new Timer();
-            TimerTask task = new SdcConnectionJob(client, config, eventCallback, timer);
-            timer.schedule(task, new Date(), 60000);
-        }
-
-        Runtime.getRuntime().addShutdownHook(new Thread(this::preShutdownOperations));
-    }
-
-    /**
-     * (non-Javadoc)
-     *
-     * @see org.onap.aai.modelloader.service.ModelLoaderInterface#loadModel(java.lang.String)
-     */
-    @Override
-    public Response loadModel(@PathVariable String modelid) {
-        return Response.ok("{\"model_loaded\":\"" + modelid + "\"}").build();
+    @PutMapping(value = "/saveModel/{modelid}/{modelname}", produces = "application/json")
+    public ResponseEntity<String> saveModel(@PathVariable String modelid, @PathVariable String modelname) {
+        return ResponseEntity.ok("{\"model_saved\":\"" + modelid + "-" + modelname + "\"}");
     }
 
-    /**
-     * (non-Javadoc)
-     *
-     * @see org.onap.aai.modelloader.service.ModelLoaderInterface#saveModel(java.lang.String, java.lang.String)
-     */
-    @Override
-    public Response saveModel(@PathVariable String modelid, @PathVariable String modelname) {
-        return Response.ok("{\"model_saved\":\"" + modelid + "-" + modelname + "\"}").build();
-    }
-
-    @Override
-    public Response ingestModel(@PathVariable String modelName, @PathVariable String modelVersion,
+    @PostMapping(value = "/ingestModel/{modelName}/{modelVersion}", produces = "application/json")
+    public ResponseEntity<String> ingestModel(@PathVariable String modelName, @PathVariable String modelVersion,
             @RequestBody String payload) throws IOException {
-        Response response;
+        ResponseEntity<String> response;
 
         if (config.getIngestSimulatorEnabled()) {
             response = processTestArtifact(modelName, modelVersion, payload);
         } else {
             logger.debug("Simulation interface disabled");
-            response = Response.serverError().build();
+            response = ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
         }
 
         return response;
     }
 
-    private Response processTestArtifact(String modelName, String modelVersion, String payload) {
+    private ResponseEntity<String> processTestArtifact(String modelName, String modelVersion, String payload) {
         IArtifactInfo artifactInfo = new ArtifactInfoImpl();
         ((ArtifactInfoImpl) artifactInfo).setArtifactName(modelName);
         ((ArtifactInfoImpl) artifactInfo).setArtifactVersion(modelVersion);
 
-        Response response;
+        ResponseEntity<String> response;
         try {
             logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Received test artifact " + modelName + " " + modelVersion);
 
@@ -164,11 +104,16 @@ public class ModelController implements ModelLoaderInterface {
 
             logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Generating XML models from test artifact");
 
+            List<Artifact> artifacts = artifactDownloadManager.processToscaArtifacts(csarFile, artifactInfo, "test-transaction-id", modelVersion);
             List<Artifact> modelArtifacts = new ArrayList<>();
             List<Artifact> catalogArtifacts = new ArrayList<>();
-
-            new ArtifactDownloadManager(client, config, babelClientFactory).processToscaArtifacts(modelArtifacts,
-                    catalogArtifacts, csarFile, artifactInfo, "test-transaction-id", modelVersion);
+            for(Artifact artifact : artifacts) {
+                if(artifact.getType().equals(ArtifactType.MODEL)) {
+                    modelArtifacts.add(artifact);
+                } else {
+                    catalogArtifacts.add(artifact);
+                }
+            }
 
             logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Loading xml models from test artifacts: "
                     + modelArtifacts.size() + " model(s) and " + catalogArtifacts.size() + " catalog(s)");
@@ -176,9 +121,9 @@ public class ModelController implements ModelLoaderInterface {
             NotificationDataImpl notificationData = new NotificationDataImpl();
             notificationData.setDistributionID("TestDistributionID");
             boolean success =
-                    new ArtifactDeploymentManager(config).deploy(notificationData, modelArtifacts, catalogArtifacts);
+                    artifactDeploymentManager.deploy(notificationData.getDistributionID(), modelArtifacts, catalogArtifacts);
             logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Deployment success was " + success);
-            response = success ? Response.ok().build() : Response.serverError().build();
+            response = success ? ResponseEntity.ok().build() : ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
         } catch (Exception e) {
             String responseMessage = e.getMessage();
             logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Exception handled: " + responseMessage);
@@ -188,7 +133,7 @@ public class ModelController implements ModelLoaderInterface {
             } else {
                 responseMessage += "\nSDC publishing is enabled but has been bypassed";
             }
-            response = Response.serverError().entity(responseMessage).type(MediaType.APPLICATION_XML).build();
+            response = ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseMessage);
         }
         return response;
     }