support external configuration of pdp groups
[policy/pap.git] / main / src / main / java / org / onap / policy / pap / main / startstop / Main.java
index f159816..5918ed1 100644 (file)
@@ -1,7 +1,8 @@
 /*-
  * ============LICENSE_START=======================================================
  *  Copyright (C) 2019 Nordix Foundation.
- *  Modifications Copyright (C) 2019 AT&T Intellectual Property.
+ *  Modifications Copyright (C) 2019, 2021 AT&T Intellectual Property.
+ *  Modifications Copyright (C) 2020 Bell Canada. 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.
 
 package org.onap.policy.pap.main.startstop;
 
-import java.io.FileInputStream;
 import java.util.Arrays;
-import java.util.Properties;
-
+import org.onap.policy.common.utils.resources.MessageConstants;
 import org.onap.policy.common.utils.services.Registry;
 import org.onap.policy.pap.main.PapConstants;
-import org.onap.policy.pap.main.PolicyPapException;
+import org.onap.policy.pap.main.PolicyPapRuntimeException;
 import org.onap.policy.pap.main.parameters.PapParameterGroup;
 import org.onap.policy.pap.main.parameters.PapParameterHandler;
 import org.slf4j.Logger;
@@ -51,11 +50,11 @@ public class Main {
      * @param args the command line arguments
      */
     public Main(final String[] args) {
-        final String argumentString = Arrays.toString(args);
+        final var argumentString = Arrays.toString(args);
         LOGGER.info("Starting policy pap service with arguments - {}", argumentString);
 
         // Check the arguments
-        final PapCommandLineArguments arguments = new PapCommandLineArguments();
+        final var arguments = new PapCommandLineArguments();
         try {
             // The arguments return a string if there is a message to print and we should exit
             final String argumentMessage = arguments.parse(args);
@@ -65,55 +64,39 @@ public class Main {
             }
             // Validate that the arguments are sane
             arguments.validate();
-        } catch (final PolicyPapException e) {
-            LOGGER.error("start of policy pap service failed", e);
-            return;
-        }
 
-        // Read the parameters
-        try {
+            // Read the parameters
             parameterGroup = new PapParameterHandler().getParameters(arguments);
-        } catch (final Exception e) {
-            LOGGER.error("start of policy pap service failed", e);
-            return;
-        }
 
-        // Read the properties
-        final Properties props = new Properties();
-        try {
-            final String propFile = arguments.getFullPropertyFilePath();
-            try (FileInputStream stream = new FileInputStream(propFile)) {
-                props.load(stream);
-            }
-        } catch (final Exception e) {
-            LOGGER.error("start of policy pap service failed", e);
-            return;
-        }
-
-        // Initialize database
-        try {
-            new PapDatabaseInitializer().initializePapDatabase(parameterGroup.getDatabaseProviderParameters());
-        } catch (final PolicyPapException exp) {
-            LOGGER.error("start of policy pap service failed, used parameters are {}", Arrays.toString(args), exp);
-            return;
-        }
+            // Initialize database
+            new PapDatabaseInitializer().initializePapDatabase(
+                    parameterGroup.getDatabaseProviderParameters(),
+                    arguments.getPdpGroupsConfiguration());
 
-        // Now, create the activator for the policy pap service
-        activator = new PapActivator(parameterGroup, props);
-        Registry.register(PapConstants.REG_PAP_ACTIVATOR, activator);
+            // Now, create the activator for the policy pap service
+            activator = new PapActivator(parameterGroup);
+            Registry.register(PapConstants.REG_PAP_ACTIVATOR, activator);
 
-        // Start the activator
-        try {
+            // Start the activator
             activator.start();
-        } catch (final RuntimeException e) {
-            LOGGER.error("start of policy pap service failed, used parameters are {}", Arrays.toString(args), e);
-            Registry.unregister(PapConstants.REG_PAP_ACTIVATOR);
-            return;
+        } catch (Exception exp) { // NOSONAR
+            /*
+             * Disabled sonar on the above line, because we want to capture the stack
+             * trace via the logger while still reporting the exception message on stdout
+             * when the JVM exits.
+             */
+            LOGGER.error("failed to start Main", exp);
+            if (null != activator) {
+                Registry.unregister(PapConstants.REG_PAP_ACTIVATOR);
+            }
+            throw new PolicyPapRuntimeException(
+                String.format(MessageConstants.START_FAILURE_MSG, MessageConstants.POLICY_PAP), exp);
         }
 
         // Add a shutdown hook to shut everything down in an orderly manner
         Runtime.getRuntime().addShutdownHook(new PolicyPapShutdownHookClass());
-        LOGGER.info("Started policy pap service");
+        var successMsg = String.format(MessageConstants.START_SUCCESS_MSG, MessageConstants.POLICY_PAP);
+        LOGGER.info(successMsg);
     }
 
     /**
@@ -128,9 +111,8 @@ public class Main {
     /**
      * Shut down Execution.
      *
-     * @throws PolicyPapException on shutdown errors
      */
-    public void shutdown() throws PolicyPapException {
+    public void shutdown() {
         // clear the parameterGroup variable
         parameterGroup = null;
 
@@ -151,11 +133,15 @@ public class Main {
          */
         @Override
         public void run() {
+            if (!activator.isAlive()) {
+                return;
+            }
+
             try {
                 // Shutdown the policy pap service and wait for everything to stop
                 activator.stop();
             } catch (final RuntimeException e) {
-                LOGGER.warn("error occured during shut down of the policy pap service", e);
+                LOGGER.warn("error occurred during shut down of the policy pap service", e);
             }
         }
     }
@@ -165,7 +151,11 @@ public class Main {
      *
      * @param args the arguments
      */
-    public static void main(final String[] args) {
+    public static void main(final String[] args) {      // NOSONAR
+        /*
+         * NOTE: arguments are validated by the constructor, thus sonar is disabled.
+         */
+
         new Main(args);
     }
 }