Refactor model controller in model-loader 80/137580/1
authorFiete Ostkamp <Fiete.Ostkamp@telekom.de>
Tue, 26 Mar 2024 07:54:40 +0000 (08:54 +0100)
committerFiete Ostkamp <Fiete.Ostkamp@telekom.de>
Tue, 26 Mar 2024 07:58:54 +0000 (08:58 +0100)
- rename ModelLoaderService to ModelController since it's a @RestController
- use dependency injection for depending classes
- make class as immutable as possible

Issue-ID: AAI-3806
Change-Id: I3b976f2c4ed3dba43e8696eb9f6e0d7575403963
Signed-off-by: Fiete Ostkamp <Fiete.Ostkamp@telekom.de>
src/main/java/org/onap/aai/modelloader/config/BeanConfig.java [new file with mode: 0644]
src/main/java/org/onap/aai/modelloader/service/ModelController.java [moved from src/main/java/org/onap/aai/modelloader/service/ModelLoaderService.java with 82% similarity]
src/test/java/org/onap/aai/modelloader/service/TestModelLoaderService.java
src/test/java/org/onap/aai/modelloader/service/TestModelLoaderServiceWithSdc.java

diff --git a/src/main/java/org/onap/aai/modelloader/config/BeanConfig.java b/src/main/java/org/onap/aai/modelloader/config/BeanConfig.java
new file mode 100644 (file)
index 0000000..2d7775d
--- /dev/null
@@ -0,0 +1,68 @@
+/**
+ * ============LICENSE_START=======================================================
+ * org.onap.aai
+ * ================================================================================
+ * Copyright © 2024 Deutsche Telekom AG Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.aai.modelloader.config;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Properties;
+
+import org.onap.aai.cl.api.Logger;
+import org.onap.aai.cl.eelf.LoggerFactory;
+import org.onap.aai.modelloader.notification.EventCallback;
+import org.onap.aai.modelloader.service.BabelServiceClientFactory;
+import org.onap.aai.modelloader.service.ModelLoaderMsgs;
+import org.onap.sdc.api.IDistributionClient;
+import org.onap.sdc.impl.DistributionClientFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class BeanConfig {
+
+    private static final Logger logger = LoggerFactory.getInstance().getLogger(BeanConfig.class);
+
+
+    @Value("${CONFIG_HOME}")
+    private String configDir;
+
+    @Bean
+    public ModelLoaderConfig modelLoaderConfig() throws IOException {
+        // Load model loader system configuration
+        logger.info(ModelLoaderMsgs.LOADING_CONFIGURATION);
+        ModelLoaderConfig.setConfigHome(configDir);
+        Properties configProperties = new Properties();
+        InputStream configInputStream = Files.newInputStream(Paths.get(configDir, "model-loader.properties"));
+        configProperties.load(configInputStream);
+        return new ModelLoaderConfig(configProperties);
+    }
+    
+    @Bean
+    public IDistributionClient iDistributionClient() {
+        return DistributionClientFactory.createDistributionClient();
+    }
+
+    @Bean
+    public EventCallback eventCallback(IDistributionClient client, ModelLoaderConfig config, BabelServiceClientFactory babelClientFactory) {
+        return new EventCallback(client, config, babelClientFactory);
+    }
+}
 package org.onap.aai.modelloader.service;
 
 import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Files;
-import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Base64;
 import java.util.Date;
 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.MediaType;
 import javax.ws.rs.core.Response;
 
@@ -47,10 +42,7 @@ 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.impl.DistributionClientFactory;
 import org.onap.sdc.utils.DistributionActionResultEnum;
-import org.springframework.beans.factory.annotation.Autowired;
-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;
@@ -61,36 +53,21 @@ import org.springframework.web.bind.annotation.RestController;
  */
 @RestController
 @RequestMapping("/services/model-loader/v1/model-service")
-public class ModelLoaderService implements ModelLoaderInterface {
+public class ModelController implements ModelLoaderInterface {
 
-    private static final Logger logger = LoggerFactory.getInstance().getLogger(ModelLoaderService.class.getName());
+    private static final Logger logger = LoggerFactory.getInstance().getLogger(ModelController.class.getName());
 
-    @Value("${CONFIG_HOME}")
-    private String configDir;
-    private IDistributionClient client;
-    private ModelLoaderConfig config;
-    @Autowired
-    private BabelServiceClientFactory babelClientFactory;
+    private final IDistributionClient client;
+    private final ModelLoaderConfig config;
+    private final EventCallback eventCallback;
+    private final BabelServiceClientFactory babelClientFactory;
 
-    /**
-     * Responsible for loading configuration files and calling initialization.
-     */
-    @PostConstruct
-    protected void start() {
-        // Load model loader system configuration
-        logger.info(ModelLoaderMsgs.LOADING_CONFIGURATION);
-        ModelLoaderConfig.setConfigHome(configDir);
-        Properties configProperties = new Properties();
-        try (InputStream configInputStream = Files.newInputStream(Paths.get(configDir, "model-loader.properties"))) {
-            configProperties.load(configInputStream);
-            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);
-        }
+    public ModelController(IDistributionClient client, ModelLoaderConfig config, EventCallback eventCallback,
+            BabelServiceClientFactory babelClientFactory) {
+        this.client = client;
+        this.config = config;
+        this.eventCallback = eventCallback;
+        this.babelClientFactory = babelClientFactory;
     }
 
     /**
@@ -109,10 +86,7 @@ public class ModelLoaderService implements ModelLoaderInterface {
     protected void initSdcClient() {
         // Initialize distribution client
         logger.debug(ModelLoaderMsgs.INITIALIZING, "Initializing distribution client...");
-        client = DistributionClientFactory.createDistributionClient();
-        EventCallback callback = new EventCallback(client, config, babelClientFactory);
-
-        IDistributionClientResult initResult = client.init(config, callback);
+        IDistributionClientResult initResult = client.init(config, eventCallback);
 
         if (initResult.getDistributionActionResult() == DistributionActionResultEnum.SUCCESS) {
             // Start distribution client
@@ -126,7 +100,7 @@ public class ModelLoaderService implements ModelLoaderInterface {
 
                 // Kick off a timer to retry the SDC connection
                 Timer timer = new Timer();
-                TimerTask task = new SdcConnectionJob(client, config, callback, timer);
+                TimerTask task = new SdcConnectionJob(client, config, eventCallback, timer);
                 timer.schedule(task, new Date(), 60000);
             }
         } else {
@@ -135,7 +109,7 @@ public class ModelLoaderService implements ModelLoaderInterface {
 
             // Kick off a timer to retry the SDC connection
             Timer timer = new Timer();
-            TimerTask task = new SdcConnectionJob(client, config, callback, timer);
+            TimerTask task = new SdcConnectionJob(client, config, eventCallback, timer);
             timer.schedule(task, new Date(), 60000);
         }
 
index f926d8e..e58716c 100644 (file)
@@ -22,7 +22,6 @@ package org.onap.aai.modelloader.service;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.IOException;
 import java.util.Base64;
@@ -31,6 +30,7 @@ import javax.ws.rs.core.Response;
 
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
+import org.onap.aai.modelloader.config.BeanConfig;
 import org.onap.aai.modelloader.util.ArtifactTestUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -40,24 +40,18 @@ import org.springframework.test.context.TestPropertySource;
  * Tests for the ModelLoaderService class.
  *
  */
-@SpringBootTest(classes = {ModelLoaderService.class, MockBabelServiceClientFactory.class})
+@SpringBootTest(classes = {BeanConfig.class, ModelController.class, MockBabelServiceClientFactory.class})
 @TestPropertySource(properties = {"CONFIG_HOME=src/test/resources",})
 public class TestModelLoaderService {
 
     @Autowired
-    private ModelLoaderService service;
+    private ModelController service;
 
     @AfterEach
     public void shutdown() {
         service.preShutdownOperations();
     }
 
-    @Test
-    public void testMissingConfig() {
-        new ModelLoaderService().start();
-        assertTrue(true);
-    }
-
     @Test
     public void testLoadModel() {
         Response response = service.loadModel("");
index 6a01bfc..0b68cc0 100644 (file)
@@ -30,6 +30,7 @@ import javax.ws.rs.core.Response;
 
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
+import org.onap.aai.modelloader.config.BeanConfig;
 import org.onap.aai.modelloader.util.ArtifactTestUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -39,12 +40,12 @@ import org.springframework.test.context.TestPropertySource;
  * Tests for the ModelLoaderService class.
  *
  */
-@SpringBootTest(classes = {ModelLoaderService.class, HttpsBabelServiceClientFactory.class})
+@SpringBootTest(classes = {BeanConfig.class, ModelController.class, HttpsBabelServiceClientFactory.class})
 @TestPropertySource(properties = {"CONFIG_HOME=src/test/resources",})
 public class TestModelLoaderServiceWithSdc {
 
     @Autowired
-    private ModelLoaderService service;
+    private ModelController service;
 
     @AfterEach
     public void shutdown() {