Convert project from AJSC to Spring Boot
[aai/model-loader.git] / src / main / java / org / onap / aai / modelloader / service / ModelLoaderService.java
index aa3481c..06d6e30 100644 (file)
@@ -1,22 +1,22 @@
 /**
- * ============LICENSE_START==========================================
+ * ============LICENSE_START=======================================================
  * org.onap.aai
- * ===================================================================
+ * ================================================================================
  * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
- * Copyright © 2017-2018 Amdocs
- * ===================================================================
+ * Copyright © 2017-2018 European Software Marketing 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
+ *       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============================================
+ * ============LICENSE_END=========================================================
  */
 package org.onap.aai.modelloader.service;
 
@@ -29,9 +29,8 @@ import java.util.List;
 import java.util.Properties;
 import java.util.Timer;
 import java.util.TimerTask;
-
+import javax.annotation.PostConstruct;
 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;
@@ -39,53 +38,55 @@ import org.onap.aai.modelloader.entity.Artifact;
 import org.onap.aai.modelloader.notification.ArtifactDeploymentManager;
 import org.onap.aai.modelloader.notification.ArtifactDownloadManager;
 import org.onap.aai.modelloader.notification.EventCallback;
-import org.openecomp.sdc.api.IDistributionClient;
-import org.openecomp.sdc.api.notification.IArtifactInfo;
-import org.openecomp.sdc.api.notification.INotificationData;
-import org.openecomp.sdc.api.results.IDistributionClientResult;
-import org.openecomp.sdc.impl.DistributionClientFactory;
-import org.openecomp.sdc.utils.DistributionActionResultEnum;
+import org.onap.aai.modelloader.restclient.BabelServiceClientFactory;
+import org.onap.sdc.api.IDistributionClient;
+import org.onap.sdc.api.notification.IArtifactInfo;
+import org.onap.sdc.api.notification.INotificationData;
+import org.onap.sdc.api.results.IDistributionClientResult;
+import org.onap.sdc.impl.DistributionClientFactory;
+import org.onap.sdc.utils.DistributionActionResultEnum;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * Service class in charge of managing the negotiating model loading capabilities between AAI and an ASDC.
  */
+@RestController
+@RequestMapping("/services/model-loader/v1/model-service")
 public class ModelLoaderService implements ModelLoaderInterface {
 
+    static Logger logger = LoggerFactory.getInstance().getLogger(ModelLoaderService.class.getName());
+
     protected static final String FILESEP =
             (System.getProperty("file.separator") == null) ? "/" : System.getProperty("file.separator");
 
-    protected static final String CONFIG_DIR = System.getProperty("CONFIG_HOME") + FILESEP;
-    protected static final String CONFIG_AUTH_LOCATION = CONFIG_DIR + "auth" + FILESEP;
-    protected static final String CONFIG_FILE = CONFIG_DIR + "model-loader.properties";
-
+    @Value("${CONFIG_HOME}")
+    private String configDir;
     private IDistributionClient client;
     private ModelLoaderConfig config;
 
-    static Logger logger = LoggerFactory.getInstance().getLogger(ModelLoaderService.class.getName());
-
     /**
      * Responsible for loading configuration files and calling initialization.
      */
-    public ModelLoaderService() {
-        start();
-    }
-
+    @PostConstruct
     protected void start() {
         // Load model loader system configuration
         logger.info(ModelLoaderMsgs.LOADING_CONFIGURATION);
+        ModelLoaderConfig.setConfigHome(configDir);
         Properties configProperties = new Properties();
         try {
-            configProperties.load(new FileInputStream(CONFIG_FILE));
+            configProperties.load(new FileInputStream(configDir + FILESEP + "model-loader.properties"));
+            config = new ModelLoaderConfig(configProperties);
+            if (!config.getASDCConnectionDisabled()) {
+                initSdcClient();
+            }
         } catch (IOException e) {
             String errorMsg = "Failed to load configuration: " + e.getMessage();
             logger.error(ModelLoaderMsgs.ASDC_CONNECTION_ERROR, errorMsg);
-            shutdown();
         }
-
-        config = new ModelLoaderConfig(configProperties, CONFIG_AUTH_LOCATION);
-        init();
-
-        Runtime.getRuntime().addShutdownHook(new Thread(this::preShutdownOperations));
     }
 
     /**
@@ -101,18 +102,28 @@ public class ModelLoaderService implements ModelLoaderInterface {
     /**
      * Responsible for loading configuration files, initializing model distribution clients, and starting them.
      */
-    protected void init() {
-        if (!config.getASDCConnectionDisabled()) {
-            // Initialize distribution client
-            logger.debug(ModelLoaderMsgs.INITIALIZING, "Initializing distribution client...");
-            client = DistributionClientFactory.createDistributionClient();
-            EventCallback callback = new EventCallback(client, config);
-
-            IDistributionClientResult initResult = client.init(config, callback);
-
-            if (initResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-                String errorMsg =
-                        "Failed to initialize distribution client: " + initResult.getDistributionMessageResult();
+    protected void initSdcClient() {
+        // Initialize distribution client
+        logger.debug(ModelLoaderMsgs.INITIALIZING, "Initializing distribution client...");
+        client = DistributionClientFactory.createDistributionClient();
+        EventCallback callback = new EventCallback(client, config);
+
+        IDistributionClientResult initResult = client.init(config, callback);
+
+        if (initResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
+            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, callback, timer);
+            timer.schedule(task, new Date(), 60000);
+        } else {
+            // Start distribution client
+            logger.debug(ModelLoaderMsgs.INITIALIZING, "Starting distribution client...");
+            IDistributionClientResult startResult = client.start();
+            if (startResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
+                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
@@ -120,41 +131,10 @@ public class ModelLoaderService implements ModelLoaderInterface {
                 TimerTask task = new SdcConnectionJob(client, config, callback, timer);
                 timer.schedule(task, new Date(), 60000);
             } else {
-                // Start distribution client
-                logger.debug(ModelLoaderMsgs.INITIALIZING, "Starting distribution client...");
-                IDistributionClientResult startResult = client.start();
-                if (startResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) {
-                    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, callback, timer);
-                    timer.schedule(task, new Date(), 60000);
-                } else {
-                    logger.info(ModelLoaderMsgs.INITIALIZING, "Connection to SDC established");
-                }
+                logger.info(ModelLoaderMsgs.INITIALIZING, "Connection to SDC established");
             }
         }
-    }
-
-    /**
-     * Shut down the process.
-     */
-    private void shutdown() {
-        preShutdownOperations();
-
-        // TODO: Find a better way to shut down the model loader.
-        try {
-            // Give logs time to write to file
-            Thread.sleep(2000);
-        } catch (InterruptedException e) { // NOSONAR
-            // Nothing we can do at this point
-            logger.debug(e.getMessage());
-        }
-
-        Runtime.getRuntime().halt(1);
+        Runtime.getRuntime().addShutdownHook(new Thread(this::preShutdownOperations));
     }
 
     /**
@@ -163,7 +143,7 @@ public class ModelLoaderService implements ModelLoaderInterface {
      * @see org.onap.aai.modelloader.service.ModelLoaderInterface#loadModel(java.lang.String)
      */
     @Override
-    public Response loadModel(String modelid) {
+    public Response loadModel(@PathVariable String modelid) {
         return Response.ok("{\"model_loaded\":\"" + modelid + "\"}").build();
     }
 
@@ -173,12 +153,13 @@ public class ModelLoaderService implements ModelLoaderInterface {
      * @see org.onap.aai.modelloader.service.ModelLoaderInterface#saveModel(java.lang.String, java.lang.String)
      */
     @Override
-    public Response saveModel(String modelid, String modelname) {
+    public Response saveModel(@PathVariable String modelid, @PathVariable String modelname) {
         return Response.ok("{\"model_saved\":\"" + modelid + "-" + modelname + "\"}").build();
     }
 
     @Override
-    public Response ingestModel(String modelName, String modelVersion, String payload) throws IOException {
+    public Response ingestModel(@PathVariable String modelName, @PathVariable String modelVersion,
+            @RequestBody String payload) throws IOException {
         boolean success;
 
         if (config.getIngestSimulatorEnabled()) {
@@ -196,8 +177,8 @@ public class ModelLoaderService implements ModelLoaderInterface {
 
                 logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, "Generating xml models from test artifact");
 
-                new ArtifactDownloadManager(client, config).processToscaArtifacts(modelArtifacts, catalogArtifacts,
-                        csarFile, artifactInfo, "test-transaction-id", modelVersion);
+                new ArtifactDownloadManager(client, config, new BabelServiceClientFactory()).processToscaArtifacts(
+                        modelArtifacts, catalogArtifacts, csarFile, artifactInfo, "test-transaction-id", modelVersion);
 
                 List<IArtifactInfo> artifacts = new ArrayList<>();
                 artifacts.add(artifactInfo);