Fixing reported bug in Sonar for policy/common 33/36233/5
authoreikrwaq <waqas.ikram@ericsson.com>
Fri, 16 Mar 2018 15:05:41 +0000 (15:05 +0000)
committereikrwaq <waqas.ikram@ericsson.com>
Sat, 17 Mar 2018 13:43:16 +0000 (13:43 +0000)
Change-Id: I449259749f93a5b9058c76e99d96465466458a56
Issue-ID: POLICY-661
Signed-off-by: eikrwaq <waqas.ikram@ericsson.com>
site-manager/src/main/java/org/onap/policy/common/sitemanager/Main.java

index 25cd145..45be87c 100644 (file)
@@ -20,6 +20,8 @@
 
 package org.onap.policy.common.sitemanager;
 
+import java.io.BufferedReader;
+
 /*
  * Site Manager argument list:
  *
@@ -34,47 +36,61 @@ package org.onap.policy.common.sitemanager;
  */
 
 import java.io.File;
-import java.io.FileInputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 import java.util.TreeSet;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.EntityTransaction;
-import javax.persistence.Query;
-import javax.persistence.Persistence;
 import javax.management.JMX;
 import javax.management.ObjectName;
 import javax.management.remote.JMXConnector;
 import javax.management.remote.JMXConnectorFactory;
 import javax.management.remote.JMXServiceURL;
-import org.onap.policy.common.im.jpa.ResourceRegistrationEntity;
-import org.onap.policy.common.im.jpa.StateManagementEntity;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.onap.policy.common.im.jmx.ComponentAdminMBean;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.EntityTransaction;
+import javax.persistence.Persistence;
+import javax.persistence.TypedQuery;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
 import org.apache.commons.cli.DefaultParser;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
+import org.onap.policy.common.im.jmx.ComponentAdminMBean;
+import org.onap.policy.common.im.jpa.ResourceRegistrationEntity;
+import org.onap.policy.common.im.jpa.StateManagementEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This class contains the main entry point for Site Manager.
  */
 public class Main
 {
-       private static final Logger logger = LoggerFactory.getLogger(Main.class.getName());
+       private static final String SITE_NAME = "site";
+
+    private static final String WHERE_R_SITE_SITE = " WHERE r.site = :" + SITE_NAME;
+
+    private static final String WHERE_R_RESOURCE_NAME = " WHERE r.resourceName = :";
+
+    private static final String RESOURCE_NAME = "resourceName";
+
+    private static final String WHERE_S_RESOURCE_NAME = " WHERE s.resourceName = :";
+
+    private static final String RESOURCE_REGISTRATION_QUERY = "SELECT r FROM ResourceRegistrationEntity r";
+
+    private static final String STATE_MANAGEMENT_QUERY = "SELECT s FROM StateManagementEntity s";
+
+    private static final Logger logger = LoggerFactory.getLogger(Main.class.getName());
        
   // table mapping 'resourceName' to 'StateManagmentEntity'
-  static HashMap<String, StateManagementEntity> stateManagementTable =
-       new HashMap<String, StateManagementEntity>();
+  static Map<String, StateManagementEntity> stateManagementTable = new HashMap<>();
 
   // table mapping 'resourceName' to 'StateManagmentEntity'
-  static HashMap<String, ResourceRegistrationEntity> resourceRegistrationTable =
-       new HashMap<String, ResourceRegistrationEntity>();
+  static Map<String, ResourceRegistrationEntity> resourceRegistrationTable = new HashMap<>();
 
   /**
    * Print out help information regarding command arguments.
@@ -99,7 +115,7 @@ public class Main
    *
    * @param propertiesFileName the path to the properties file
    */
-  private static void helpProperties(String propertiesFileName)
+  private static void helpProperties(final String propertiesFileName)
   {
        if (propertiesFileName == null)
          {
@@ -111,7 +127,7 @@ public class Main
          }
        else
          {
-               File file = new File(propertiesFileName);
+               final File file = new File(propertiesFileName);
                if (!file.exists())
                  {
                        // file name specified, but does not exist
@@ -148,50 +164,25 @@ public class Main
    *
    * @param args these are command-line arguments to 'siteManager'
    */
-  public static void main(String... args)
+  public static void main(final String[] args)
   {
-       Options options = new Options();
-       options.addOption("s", true, "specify site");
-       options.addOption("r", true, "specify resource name");
-       options.addOption("h", false, "display help");
-       options.addOption("?", false, "display help");
-
-       // parse options
-       CommandLineParser parser = new DefaultParser();
-       CommandLine cmd = null;
-
-       try
-         {
-               cmd = parser.parse(options, args);
-         }
-       catch (ParseException e)
-         {
-               System.out.println(e.getMessage());
-               help();
-               System.exit(1);
-         }
-
-       if (cmd == null || cmd.getOptionValue('h') != null || cmd.getOptionValue('?') != null)
-         {
-               help();
-               System.exit(0);
-         }
+       CommandLine cmd = getCommandLine(args);
 
        // fetch options, and remaining arguments
-       String sOption = cmd.getOptionValue('s');
-       String rOption = cmd.getOptionValue('r');
-       List<String> argList = cmd.getArgList();
+       final String sOption = cmd.getOptionValue('s');
+       final String rOption = cmd.getOptionValue('r');
+       final List<String> argList = cmd.getArgList();
 
        // a number of commands require either the '-r' option or '-s' option
-       boolean optionLetterSpecified = (rOption != null || sOption != null);
+       final boolean optionLetterSpecified = (rOption != null || sOption != null);
 
        // used to accumulate any error messages that are generated
-       StringBuilder error = new StringBuilder();
+       final StringBuilder error = new StringBuilder();
 
        // first non-option argument
        String arg0 = null;
 
-       if (argList.size() == 0)
+       if (argList.isEmpty())
          {
                error.append("No command specified\n");
          }
@@ -272,115 +263,55 @@ public class Main
          }
 
        // read in properties used to access the database
-       String propertiesFileName = System.getProperty("siteManager.properties");
-       File propertiesFile = null;
-
-       if (propertiesFileName == null
-               || !(propertiesFile = new File(propertiesFileName)).exists())
-         {
-               helpProperties(propertiesFileName);
-               System.exit(3);
-         }
-       FileInputStream fis = null;
-       Properties properties = new Properties();
-       try
-         {
-               fis = new FileInputStream(propertiesFile);
-               properties.load(fis);
-         }
-       catch (Exception e)
-         {
-               System.out.println("Exception loading properties: " + e);
-               helpProperties(propertiesFileName);
-               System.exit(3);
-         }
-       finally
-         {
-               try
-                 {
-                       fis.close();
-                 }
-               catch (Exception e)
-                 {
-                       System.err.println(e);
-                 }
-         }
-
-       // verify that we have all of the properties needed
-       if (properties.getProperty("javax.persistence.jdbc.driver") == null
-               || properties.getProperty("javax.persistence.jdbc.url") == null
-               || properties.getProperty("javax.persistence.jdbc.user") == null
-               || properties.getProperty("javax.persistence.jdbc.password") == null)
-         {
-               // one or more missing properties
-               helpProperties(propertiesFileName);
-               System.exit(3);
-         }
+       final String propertiesFileName = System.getProperty("siteManager.properties");
+       final Properties properties= getProperties(propertiesFileName);
 
        // access database through 'EntityManager'
-       EntityManagerFactory emf =
+       final EntityManagerFactory emf =
          Persistence.createEntityManagerFactory("operationalPU", properties);
-       EntityManager em = emf.createEntityManager();
+       final EntityManager em = emf.createEntityManager();
 
        // sQuery - used for StateManagementEntity table
        // rQuery - used for ResourceRegistrationEntity table
-       Query sQuery, rQuery;
-
-       if (rOption != null)
-         {
-               // 'resourceName' specified -- both queries are limited to this
-               // resource
-               sQuery = em.createQuery("SELECT s FROM StateManagementEntity s"
-                                                               + " WHERE s.resourceName = :resourceName")
-                 .setParameter("resourceName", rOption);
-               rQuery = em.createQuery("SELECT r FROM ResourceRegistrationEntity r"
-                                                               + " WHERE r.resourceName = :resourceName")
-                 .setParameter("resourceName", rOption);
-         }
-       else if (sOption != null)
-         {
-               // 'site' is specified -- 'ResourceRegistrationEntity' has a 'site'
-               // field, but 'StateManagementEntity' does not
-               sQuery = em.createQuery("SELECT s FROM StateManagementEntity s");
-               rQuery = em.createQuery("SELECT r FROM ResourceRegistrationEntity r"
-                                                               + " WHERE r.site = :site")
-                 .setParameter("site", sOption);
-         }
-       else
-         {
-               // query all entries
-               sQuery = em.createQuery("SELECT s FROM StateManagementEntity s");
-               rQuery = em.createQuery("SELECT r FROM ResourceRegistrationEntity r");
-         }
-
-       // perform 'StateManagementEntity' query, and place matching entries
-       // in 'stateManagementTable'
-       for (Object o : sQuery.getResultList())
-         {
-               if (o instanceof StateManagementEntity)
-                 {
-                       StateManagementEntity s = (StateManagementEntity) o;
-                       stateManagementTable.put(s.getResourceName(), s);
-                 }
-         }
-
-       // perform 'ResourceRegistrationQuery', and place matching entries
-       // in 'resourceRegistrationTable' ONLY if there is also an associated
-       // 'stateManagementTable' entry
-       for (Object o : rQuery.getResultList())
-         {
-               if (o instanceof ResourceRegistrationEntity)
-                 {
-                       ResourceRegistrationEntity r = (ResourceRegistrationEntity) o;
-                       String resourceName = r.getResourceName();
-                       if (stateManagementTable.get(resourceName) != null)
-                         {
-                               // only include entries that have a corresponding
-                               // state table entry -- silently ignore the rest
-                               resourceRegistrationTable.put(resourceName, r);
-                         }
-                 }
-         }
+       TypedQuery<StateManagementEntity> sQuery;
+       TypedQuery<ResourceRegistrationEntity> rQuery;
+
+        if (rOption != null) {
+            // 'resourceName' specified -- both queries are limited to this
+            // resource
+            sQuery = em.createQuery(STATE_MANAGEMENT_QUERY + WHERE_S_RESOURCE_NAME + RESOURCE_NAME,
+                    StateManagementEntity.class).setParameter(RESOURCE_NAME, rOption);
+            rQuery = em.createQuery(RESOURCE_REGISTRATION_QUERY + WHERE_R_RESOURCE_NAME + RESOURCE_NAME,
+                    ResourceRegistrationEntity.class).setParameter(RESOURCE_NAME, rOption);
+        } else if (sOption != null) {
+            // 'site' is specified -- 'ResourceRegistrationEntity' has a 'site'
+            // field, but 'StateManagementEntity' does not
+            sQuery = em.createQuery(STATE_MANAGEMENT_QUERY, StateManagementEntity.class);
+            rQuery = em.createQuery(RESOURCE_REGISTRATION_QUERY + WHERE_R_SITE_SITE,
+                    ResourceRegistrationEntity.class).setParameter(SITE_NAME, sOption);
+        } else {
+            // query all entries
+            sQuery = em.createQuery(STATE_MANAGEMENT_QUERY, StateManagementEntity.class);
+            rQuery = em.createQuery(RESOURCE_REGISTRATION_QUERY, ResourceRegistrationEntity.class);
+        }
+
+        // perform 'StateManagementEntity' query, and place matching entries
+        // in 'stateManagementTable'
+        for (final StateManagementEntity stateManagementEntity : sQuery.getResultList()) {
+            stateManagementTable.put(stateManagementEntity.getResourceName(), stateManagementEntity);
+        }
+
+        // perform 'ResourceRegistrationQuery', and place matching entries
+        // in 'resourceRegistrationTable' ONLY if there is also an associated
+        // 'stateManagementTable' entry
+        for (final ResourceRegistrationEntity resourceRegistrationEntity : rQuery.getResultList()) {
+            final String resourceName = resourceRegistrationEntity.getResourceName();
+            if (stateManagementTable.get(resourceName) != null) {
+                // only include entries that have a corresponding
+                // state table entry -- silently ignore the rest
+                resourceRegistrationTable.put(resourceName, resourceRegistrationEntity);
+            }
+        }
 
        if (resourceRegistrationTable.size() == 0)
          {
@@ -391,20 +322,18 @@ public class Main
        if ("setAdminState".equalsIgnoreCase(arg0))
          {
                // update admin state on all of the nodes
-               String adminState = argList.get(1);
-               EntityTransaction et = em.getTransaction();
+               final String adminState = argList.get(1);
+               final EntityTransaction et = em.getTransaction();
                et.begin();
                try
                  {
                        // iterate over all matching 'ResourceRegistrationEntity' instances
-                       for (ResourceRegistrationEntity r :
-                                  resourceRegistrationTable.values())
+                       for (final ResourceRegistrationEntity r : resourceRegistrationTable.values())
                          {
                                // we know the corresponding 'StateManagementEntity' exists --
                                // 'ResourceRegistrationEntity' entries without a matching
                                // 'StateManagementEntity' entry were not placed in the table
-                               StateManagementEntity s =
-                                 stateManagementTable.get(r.getResourceName());
+                               final StateManagementEntity s = stateManagementTable.get(r.getResourceName());
 
                                // update the admin state, and save the changes
                                s.setAdminState(adminState);
@@ -421,7 +350,7 @@ public class Main
        else if ("lock".equalsIgnoreCase(arg0) || "unlock".equalsIgnoreCase(arg0))
          {
                // these use the JMX interface
-               for (ResourceRegistrationEntity r :
+               for (final ResourceRegistrationEntity r :
                           resourceRegistrationTable.values())
                  {
                        // lock or unlock the entity
@@ -446,10 +375,10 @@ public class Main
    * @param arg0 this is the string "lock" or "unlock"
    * @param r this is the ResourceRegistrationEntity to lock or unlock
    */
-  static void jmxOp(String arg0, ResourceRegistrationEntity r)
+  static void jmxOp(final String arg0, final ResourceRegistrationEntity r)
   {
-       String resourceName = r.getResourceName();
-       String jmxUrl = r.getResourceUrl();
+       final String resourceName = r.getResourceName();
+       final String jmxUrl = r.getResourceUrl();
        if (jmxUrl == null)
          {
                System.out.println(arg0 + ": no resource URL for '"
@@ -461,7 +390,7 @@ public class Main
        try
          {
                connector = JMXConnectorFactory.connect(new JMXServiceURL(jmxUrl));
-               ComponentAdminMBean admin = JMX.newMXBeanProxy
+               final ComponentAdminMBean admin = JMX.newMXBeanProxy
                  (connector.getMBeanServerConnection(),
                   new ObjectName("ONAP_POLICY_COMP:name=" + resourceName),
                   ComponentAdminMBean.class);
@@ -475,7 +404,7 @@ public class Main
                        admin.unlock();
                  }
          }
-       catch (Exception e)
+       catch (final Exception e)
          {
                // e.printStackTrace();
                System.out.println(arg0 + " failed for '" + resourceName + "': " + e);
@@ -488,7 +417,7 @@ public class Main
                          {
                                connector.close();
                          }
-                       catch (Exception e)
+                       catch (final Exception e)
                          {
                                System.err.println(e);
                          }
@@ -504,7 +433,7 @@ public class Main
    * @return a negative value if s1<s2, 0 if they are equal,
    *   and positive if s1>s2
    */
-  static private int stringCompare(String s1, String s2)
+  private static int stringCompare(final String s1, final String s2)
   {
        return ((s1 == null) ?
                        (s2 == null ? 0 : -1) :
@@ -521,12 +450,12 @@ public class Main
    * @param s this is an array of length 7, containing the current String
    *   entry for each column
    */
-  static private void updateLengths(int[] current, String[] s)
+  private static void updateLengths(final int[] current, final String[] s)
   {
        for (int i = 0 ; i < 7 ; i += 1)
          {
-               String str = s[i];
-               int newLength = (str == null ? 4 : str.length());
+               final String str = s[i];
+               final int newLength = (str == null ? 4 : str.length());
                if (current[i] < newLength)
                  {
                        // this column needs to be expanded
@@ -540,10 +469,10 @@ public class Main
    */
   static void display()
   {
-       TreeSet<String[]> treeset = new TreeSet<String[]>
+       final TreeSet<String[]> treeset = new TreeSet<String[]>
          (new Comparator<String[]>()
          {
-               public int compare(String[] r1, String[] r2)
+               public int compare(final String[] r1, final String[] r2)
                  {
                        int rval = 0;
 
@@ -558,28 +487,28 @@ public class Main
                  }
          });
 
-       String[] labels = new String[]
+       final String[] labels = new String[]
          {"Site", "NodeType", "ResourceName",
           "AdminState", "OpState", "AvailStatus", "StandbyStatus"};
-       String[] underlines = new String[]
+       final String[] underlines = new String[]
          {"----", "--------", "------------",
           "----------", "-------", "-----------", "-------------"};
 
        // each column needs to be at least wide enough to fit the column label
-       int lengths[] = new int[7];
+       final int lengths[] = new int[7];
        updateLengths(lengths, labels);
 
        // Go through the 'resourceRegistrationTable', and generate the
        // associated table row. Maximum column widths are updated, and the
        // entry is inserted into tree, which has the effect of sorting the
        // entries.
-       for (ResourceRegistrationEntity r : resourceRegistrationTable.values())
+       for (final ResourceRegistrationEntity r : resourceRegistrationTable.values())
          {
-               StateManagementEntity s =
+               final StateManagementEntity s =
                  stateManagementTable.get(r.getResourceName());
 
                // these are the entries to be displayed for this row
-               String[] values = new String[]
+               final String[] values = new String[]
                  {
                        r.getSite(), r.getNodeType(), r.getResourceName(),
                        s.getAdminState(), s.getOpState(),
@@ -591,23 +520,82 @@ public class Main
          }
 
        // generate format string
-       StringBuilder sb = new StringBuilder();
+       final StringBuilder sb = new StringBuilder();
        for (int i = 0 ; i < 7 ; i += 1)
          {
                sb.append('%').append(i+1).append("$-")
                  .append(lengths[i]).append("s ");
          }
        sb.setCharAt(sb.length()-1, '\n');
-       String formatString = sb.toString();
+       final String formatString = sb.toString();
 
        // display column headers
        logger.info(formatString, (Object[])labels);
        logger.info(formatString, (Object[])underlines);
 
        // display all of the rows
-       for (String[] values : treeset)
+       for (final String[] values : treeset)
          {
                logger.info(formatString, (Object[])values);
          }
   }
+  
+  private static Properties getProperties(final String propertiesFileName) {
+      final File propertiesFile = new File(propertiesFileName);
+
+      if (propertiesFileName == null || !propertiesFile.exists()) {
+          helpProperties(propertiesFileName);
+          System.exit(3);
+      }
+      final Properties properties = getProperties(propertiesFile.toPath());
+
+      // verify that we have all of the properties needed
+      if (properties.getProperty("javax.persistence.jdbc.driver") == null
+              || properties.getProperty("javax.persistence.jdbc.url") == null
+              || properties.getProperty("javax.persistence.jdbc.user") == null
+              || properties.getProperty("javax.persistence.jdbc.password") == null) {
+          // one or more missing properties
+          helpProperties(propertiesFileName);
+          System.exit(3);
+      }
+      return properties;
+  }
+
+  private static Properties getProperties(final Path filePath) {
+      final Properties properties = new Properties();
+      try (final BufferedReader bufferedReader = Files.newBufferedReader(filePath);) {
+          properties.load(bufferedReader);
+      } catch (final Exception e) {
+          System.out.println("Exception loading properties: " + e);
+          helpProperties(filePath.getFileName().toString());
+          System.exit(3);
+      }
+      return properties;
+  }
+
+  private static CommandLine getCommandLine(final String[] args) {
+      final Options options = new Options();
+      options.addOption("s", true, "specify site");
+      options.addOption("r", true, "specify resource name");
+      options.addOption("h", false, "display help");
+      options.addOption("?", false, "display help");
+
+      // parse options
+      final CommandLineParser parser = new DefaultParser();
+      CommandLine cmd = null;
+
+      try {
+          cmd = parser.parse(options, args);
+      } catch (final ParseException e) {
+          System.out.println(e.getMessage());
+          help();
+          System.exit(1);
+      }
+
+      if (cmd == null || cmd.getOptionValue('h') != null || cmd.getOptionValue('?') != null) {
+          help();
+          System.exit(0);
+      }
+      return cmd;
+  }
 }