Fix Sonar issues in utils PDP ParseLog rework 97/57697/5
authorKrishnajinka <kris.jinka@samsung.com>
Thu, 26 Jul 2018 11:58:24 +0000 (20:58 +0900)
committerkrishnajinka <kris.jinka@samsung.com>
Sat, 28 Jul 2018 02:47:46 +0000 (11:47 +0900)
Fix Major Sonar issues in ParseLog BackupMonitor and ONAP-PDP component.
Issues related to nested control statements. Rework2 based on review comments

Issue-ID: POLICY-1013
Change-Id: I10edb242b45a649df902a4e7c1aba0a285b8b7fb
Signed-off-by: Krishnajinka <kris.jinka@samsung.com>
LogParser/src/main/java/org/onap/xacml/parser/ParseLog.java
ONAP-PDP/src/main/java/org/onap/policy/xacml/custom/OnapFunctionDefinitionFactory.java
PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java

index 75ccfd4..54e86d2 100644 (file)
@@ -3,6 +3,7 @@
  * LogParser
  * ================================================================================
  * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Modified Copyright (C) 2018 Samsung Electronics Co., Ltd.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -377,27 +378,28 @@ public class ParseLog {
             StringBuilder builder = new StringBuilder();
             long length = file.length();
             logger.debug("dataFileName: " + dataFileName);
-            if (length > 0) {
-                length--;
-                randomAccessFile.seek(length);
-                for (long seek = length; seek >= 0; --seek) {
-                    randomAccessFile.seek(seek);
-                    final char c = (char) randomAccessFile.read();
-                    builder.append(c);
-                    if (c == '\n') {
-                        builder = builder.reverse();
-                        logger.debug("builder.toString(): " + builder.toString());
-                        if (builder.toString().contains(last + dataFileName + lineRead)) {
-                            final String[] parseString = builder.toString().split(last + dataFileName + lineRead);
-                            final String returnValue = parseString[1].replace("\r", "");
-                            randomAccessFile.close();
-                            return returnValue.trim();
-                        }
-                        builder = new StringBuilder();
+            if (length == 0) {
+                return null;
+            }
+
+            length--;
+            randomAccessFile.seek(length);
+            for (long seek = length; seek >= 0; --seek) {
+                randomAccessFile.seek(seek);
+                final char c = (char) randomAccessFile.read();
+                builder.append(c);
+                if (c == '\n') {
+                    builder = builder.reverse();
+                    logger.debug("builder.toString(): " + builder.toString());
+                    if (builder.toString().contains(last + dataFileName + lineRead)) {
+                        final String[] parseString = builder.toString().split(last + dataFileName + lineRead);
+                        final String returnValue = parseString[1].replace("\r", "");                        
+                        return returnValue.trim();
                     }
+                    builder = new StringBuilder();
                 }
             }
-            randomAccessFile.close();
+
         }
         return null;
     }
@@ -820,23 +822,25 @@ public class ParseLog {
     }
 
     private static void setLogFileProperties(final String[] splitString) {
-        if (splitString != null) {
-            for (int i = 0; i < splitString.length; i++) {
-
-                if (splitString[i].contains("debug")) {
-                    // get path of debug.log file
-                    setDebuglogFile(splitString[i]);
-                } else if (splitString[i].contains("error")) {
-                    // get path of error.log file
-                    setErrorlogFile(splitString[i]);
+        if (splitString == null) {
+            return;
+        }
+
+        for (int i = 0; i < splitString.length; i++) {
+
+            if (splitString[i].contains("debug")) {
+                // get path of debug.log file
+                setDebuglogFile(splitString[i]);
+            } else if (splitString[i].contains("error")) {
+                // get path of error.log file
+                setErrorlogFile(splitString[i]);
+            } else {
+                // get path of default file
+                logFile = splitString[i];
+                if (logFile != null && !logFile.isEmpty()) {
+                    logFile = logFile.trim();
                 } else {
-                    // get path of default file
-                    logFile = splitString[i];
-                    if (logFile != null && !logFile.isEmpty()) {
-                        logFile = logFile.trim();
-                    } else {
-                        logFile = null;
-                    }
+                    logFile = null;
                 }
             }
         }
@@ -851,53 +855,48 @@ public class ParseLog {
     public static Properties getPropertiesValue(final String fileName) {
         final Properties config = new Properties();
         final Path file = Paths.get(fileName);
-        if (file.toFile().exists()) {
-
-            if (file.toString().endsWith(".properties")) {
-                InputStream in;
-                try {
-                    in = new FileInputStream(file.toFile());
-                    config.load(in);
-
-                    resourceName = config.getProperty("RESOURCE_NAME");
-                    system = config.getProperty("SERVER");
-                    type = config.getProperty("LOGTYPE");
-                    systemLogFile = config.getProperty("PARSERLOGPATH");
-                    final String logFiles = config.getProperty("LOGPATH");
-                    final String cleanupInterval = config.getProperty("CHECK_INTERVAL");
-                    final String timeFrame = config.getProperty("TIME_FRAME");
-
-                    setCleanUpProperties(cleanupInterval, timeFrame);
-
-                    if (logFiles == null || logFiles.isEmpty()) {
-                        isMissingLogFile = true;
-                        return null;
-                    }
+        //ensure file exists and it is properties file
+        if (!(file.toFile().exists() && file.toString().endsWith(".properties"))) {
+            logger.debug("File doesn't exist in the specified Path Or it is not a properties file" + file.toString());
+            return null;
+        }
 
-                    final String[] splitString = getPaths(logFiles);
+        try (InputStream in = new FileInputStream(file.toFile())) {
+            config.load(in);
 
-                    setLogFileProperties(splitString);
+            resourceName = config.getProperty("RESOURCE_NAME");
+            system = config.getProperty("SERVER");
+            type = config.getProperty("LOGTYPE");
+            systemLogFile = config.getProperty("PARSERLOGPATH");
+            final String logFiles = config.getProperty("LOGPATH");
+            final String cleanupInterval = config.getProperty("CHECK_INTERVAL");
+            final String timeFrame = config.getProperty("TIME_FRAME");
 
-                    jdbcUrl = config.getProperty("JDBC_URL").replace("'", "");
-                    jdbcUser = config.getProperty("JDBC_USER");
-                    jdbcDriver = config.getProperty("JDBC_DRIVER");
-                    jdbcPassword = CryptoUtils.decryptTxtNoExStr(config.getProperty("JDBC_PASSWORD", ""));
-                    config.setProperty("javax.persistence.jdbc.password",
-                            CryptoUtils.decryptTxtNoExStr(config.getProperty("javax.persistence.jdbc.password", "")));
-                    return config;
+            setCleanUpProperties(cleanupInterval, timeFrame);
 
-                } catch (final IOException e) {
-                    logger.error("Error porcessing Config file will be unable to create Health Check" + e);
-                } catch (final Exception e) {
-                    logger.error("Error getPropertiesValue on TIME_FRAME", e);
-                    logger.debug("Error getPropertiesValue on TIME_FRAME, so use its default value:" + defaultTimeFrame
-                            + " days");
-                }
+            if (logFiles == null || logFiles.isEmpty()) {
+                isMissingLogFile = true;
+                return null;
             }
 
-        } else {
+            final String[] splitString = getPaths(logFiles);
 
-            logger.debug("File doesn't exist in the specified Path " + file.toString());
+            setLogFileProperties(splitString);
+
+            jdbcUrl = config.getProperty("JDBC_URL").replace("'", "");
+            jdbcUser = config.getProperty("JDBC_USER");
+            jdbcDriver = config.getProperty("JDBC_DRIVER");
+            jdbcPassword = CryptoUtils.decryptTxtNoExStr(config.getProperty("JDBC_PASSWORD", ""));
+            config.setProperty("javax.persistence.jdbc.password",
+                    CryptoUtils.decryptTxtNoExStr(config.getProperty("javax.persistence.jdbc.password", "")));
+            return config;
+
+        } catch (final IOException e) {
+            logger.error("Error porcessing Config file will be unable to create Health Check" + e);
+        } catch (final Exception e) {
+            logger.error("Error getPropertiesValue on TIME_FRAME", e);
+            logger.debug("Error getPropertiesValue on TIME_FRAME, so use its default value:" + defaultTimeFrame
+                    + " days");
         }
         return null;
     }
index 35080d3..b69141f 100644 (file)
@@ -3,6 +3,7 @@
  * ONAP-PDP
  * ================================================================================
  * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Modified Copyright (C) 2018 Samsung Electronics Co., Ltd.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -58,25 +59,25 @@ public class OnapFunctionDefinitionFactory extends FunctionDefinitionFactory {
                 needMapInit = false;
                 final Field[] declaredFields = StdFunctions.class.getDeclaredFields();
                 for (final Field field : declaredFields) {
-                    if (Modifier.isStatic(field.getModifiers()) && field.getName().startsWith(StdFunctions.FD_PREFIX)
-                            && FunctionDefinition.class.isAssignableFrom(field.getType())
-                            && Modifier.isPublic(field.getModifiers())) {
-                        try {
-                            register((FunctionDefinition) (field.get(null)));
-                        } catch (final IllegalAccessException ex) {
-                            logger.error(ex.getMessage() + ex);
-                        }
-                    }
+                    registerFunctionDefinition(field);
                 }
-                //
-                // Our custom function
-                //
-                // register(FunctionDefinitionCustomRegexpMatch);
                 register(FD_CUSTOM_REGEXP_MATCH);
             }
         }
     }
 
+    private static void registerFunctionDefinition(Field field) {
+        if (Modifier.isStatic(field.getModifiers()) && field.getName().startsWith(StdFunctions.FD_PREFIX)
+                && FunctionDefinition.class.isAssignableFrom(field.getType())
+                && Modifier.isPublic(field.getModifiers())) {
+            try {
+                register((FunctionDefinition) (field.get(null)));
+            } catch (final IllegalAccessException ex) {
+                logger.error(ex.getMessage() + ex);
+            }
+        }
+    }
+
     public OnapFunctionDefinitionFactory() {
         initMap();
     }
index 1353cc6..4f8a821 100644 (file)
@@ -3,6 +3,7 @@
  * PolicyEngineUtils
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Modified Copyright (C) 2018 Samsung Electronics Co., Ltd.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -255,130 +256,7 @@ public class BackUpMonitor {
                 em.persist(bMEntity);
                 em.flush();
             } else {
-                // Check for other Master(s)
-                ArrayList<BackUpMonitorEntity> masterEntities = new ArrayList<>();
-                // Check for self.
-                BackUpMonitorEntity selfEntity = null;
-                // Check backup monitor entities.
-                for (int i = 0; i < bMList.size(); i++) {
-                    BackUpMonitorEntity bMEntity = (BackUpMonitorEntity) bMList.get(i);
-                    LOGGER.info("Refreshing Entity. ");
-                    em.refresh(bMEntity);
-                    if (bMEntity.getFlag().equalsIgnoreCase(MASTER)) {
-                        masterEntities.add(bMEntity);
-                    }
-                    if (bMEntity.getResourceName().equals(resourceName)) {
-                        selfEntity = bMEntity;
-                    }
-                }
-                if (selfEntity != null) {
-                    LOGGER.info("Resource Name already Exists: " + resourceName);
-                    if (selfEntity.getFlag().equalsIgnoreCase(MASTER)) {
-                        // Already Master Mode.
-                        setFlag(true);
-                        LOGGER.info(resourceName + " is on Master Mode");
-                        selfEntity.setTimeStamp(new Date());
-                        selfEntity.setNotificationRecord(notificationRecord);
-                        em.persist(selfEntity);
-                        em.flush();
-                        setLastNotification(null);
-                        if (!masterEntities.contains(selfEntity)) {
-                            masterEntities.add(selfEntity);
-                        }
-                    } else {
-                        // Already Slave Mode.
-                        setFlag(false);
-                        selfEntity.setTimeStamp(new Date());
-                        selfEntity.setNotificationRecord(notificationRecord);
-                        em.persist(selfEntity);
-                        em.flush();
-                        LOGGER.info(resourceName + " is on Slave Mode");
-                    }
-                } else {
-                    // Resource name is null -> No resource with same name.
-                    selfEntity = new BackUpMonitorEntity();
-                    selfEntity.setResourceNodeName(resourceNodeName);
-                    selfEntity.setResourceName(resourceName);
-                    selfEntity.setTimeStamp(new Date());
-                    selfEntity = setSlave(selfEntity);
-                    setLastNotification(null);
-                    LOGGER.info("Creating: " + resourceName + " on Slave Mode");
-                    em.persist(selfEntity);
-                    em.flush();
-                }
-                // Correct the database if any errors and perform monitor checks.
-                if (masterEntities.size() != 1 || !getFlag()) {
-                    // We are either not master or there are more masters or no masters.
-                    if (masterEntities.isEmpty()) {
-                        // No Masters is a problem Convert ourselves to Master.
-                        selfEntity = setMaster(selfEntity);
-                        selfEntity.setTimeStamp(new Date());
-                        selfEntity.setNotificationRecord(notificationRecord);
-                        LOGGER.info(resourceName + " changed to Master Mode - No Masters available.");
-                        em.persist(selfEntity);
-                        em.flush();
-                    } else {
-                        if (masterEntities.size() > 1) {
-                            // More Masters is a problem, Fix the issue by looking for the latest one and make others
-                            // Slave.
-                            BackUpMonitorEntity masterEntity = null;
-                            for (BackUpMonitorEntity currentEntity : masterEntities) {
-                                if (currentEntity.getFlag().equalsIgnoreCase(MASTER)) {
-                                    if (masterEntity == null) {
-                                        masterEntity = currentEntity;
-                                    } else if (currentEntity.getTimeStamp().getTime() > masterEntity.getTimeStamp()
-                                            .getTime()) {
-                                        // False Master, Update master to slave and take currentMaster as Master.
-                                        masterEntity.setFlag(SLAVE);
-                                        masterEntity.setTimeStamp(new Date());
-                                        em.persist(masterEntity);
-                                        em.flush();
-                                        masterEntity = currentEntity;
-                                    } else {
-                                        currentEntity.setFlag(SLAVE);
-                                        currentEntity.setTimeStamp(new Date());
-                                        em.persist(currentEntity);
-                                        em.flush();
-                                    }
-                                }
-                            }
-                            masterEntities = new ArrayList<>();
-                            masterEntities.add(masterEntity);
-                        }
-                        if (masterEntities.size() == 1) {
-                            // Correct Size, Check if Master is Latest, if not Change Master to Slave and Slave to
-                            // Master.
-                            BackUpMonitorEntity masterEntity = masterEntities.get(0);
-                            if (!masterEntity.getResourceName().equals(selfEntity.getResourceName())) {
-                                Date currentTime = new Date();
-                                long timeDiff;
-                                timeDiff = currentTime.getTime() - masterEntity.getTimeStamp().getTime();
-                                if (timeDiff > (pingInterval + 1500)) {
-                                    // This is down or has an issue and we need to become Master while turning the
-                                    // Master to slave.
-                                    masterEntity.setFlag(SLAVE);
-                                    String lastNotification = null;
-                                    if (masterEntity.getNotificationRecord() != null) {
-                                        lastNotification = calculatePatch(masterEntity.getNotificationRecord());
-                                    }
-                                    setLastNotification(lastNotification);
-                                    em.persist(masterEntity);
-                                    em.flush();
-                                    // Lets Become Master.
-                                    selfEntity = setMaster(selfEntity);
-                                    LOGGER.info("Changing " + resourceName + " from slave to Master Mode");
-                                    selfEntity.setTimeStamp(new Date());
-                                    selfEntity.setNotificationRecord(notificationRecord);
-                                    em.persist(selfEntity);
-                                    em.flush();
-                                }
-                            }
-                        } else {
-                            LOGGER.error(
-                                    "Backup Monitor Issue, Masters out of sync, This will be fixed in next interval.");
-                        }
-                    }
-                }
+                checkOtherMaster(bMList);
             }
             et.commit();
         } catch (Exception e) {
@@ -390,6 +268,142 @@ public class BackUpMonitor {
         }
     }
 
+    private void checkOtherMaster(List<?> bMList) {
+        // Check for other Master(s)
+        ArrayList<BackUpMonitorEntity> masterEntities = new ArrayList<>();
+        // Check for self.
+        BackUpMonitorEntity selfEntity = null;
+        // Check backup monitor entities.
+        for (int i = 0; i < bMList.size(); i++) {
+            BackUpMonitorEntity bMEntity = (BackUpMonitorEntity) bMList.get(i);
+            LOGGER.info("Refreshing Entity. ");
+            em.refresh(bMEntity);
+            if (bMEntity.getFlag().equalsIgnoreCase(MASTER)) {
+                masterEntities.add(bMEntity);
+            }
+            if (bMEntity.getResourceName().equals(resourceName)) {
+                selfEntity = bMEntity;
+            }
+        }
+        if (selfEntity != null) {
+            LOGGER.info("Resource Name already Exists: " + resourceName);
+            if (selfEntity.getFlag().equalsIgnoreCase(MASTER)) {
+                // Already Master Mode.
+                setFlag(true);
+                LOGGER.info(resourceName + " is on Master Mode");
+                selfEntity.setTimeStamp(new Date());
+                selfEntity.setNotificationRecord(notificationRecord);
+                em.persist(selfEntity);
+                em.flush();
+                setLastNotification(null);
+                if (!masterEntities.contains(selfEntity)) {
+                    masterEntities.add(selfEntity);
+                }
+            } else {
+                // Already Slave Mode.
+                setFlag(false);
+                selfEntity.setTimeStamp(new Date());
+                selfEntity.setNotificationRecord(notificationRecord);
+                em.persist(selfEntity);
+                em.flush();
+                LOGGER.info(resourceName + " is on Slave Mode");
+            }
+        } else {
+            // Resource name is null -> No resource with same name.
+            selfEntity = new BackUpMonitorEntity();
+            selfEntity.setResourceNodeName(resourceNodeName);
+            selfEntity.setResourceName(resourceName);
+            selfEntity.setTimeStamp(new Date());
+            selfEntity = setSlave(selfEntity);
+            setLastNotification(null);
+            LOGGER.info("Creating: " + resourceName + " on Slave Mode");
+            em.persist(selfEntity);
+            em.flush();
+        }
+        // Correct the database if any errors and perform monitor checks.
+        if (masterEntities.size() != 1 || !getFlag()) {
+            // We are either not master or there are more masters or no masters.
+            if (masterEntities.isEmpty()) {
+                // No Masters is a problem Convert ourselves to Master.
+                selfEntity = setMaster(selfEntity);
+                selfEntity.setTimeStamp(new Date());
+                selfEntity.setNotificationRecord(notificationRecord);
+                LOGGER.info(resourceName + " changed to Master Mode - No Masters available.");
+                em.persist(selfEntity);
+                em.flush();
+            } else {
+                if (masterEntities.size() > 1) {
+                    masterEntities = multipleMasterEntity(masterEntities);
+                }
+                if (masterEntities.size() == 1) {
+                    singleMasterEntity(masterEntities, selfEntity);
+                } else {
+                    LOGGER.error(
+                            "Backup Monitor Issue, Masters out of sync, This will be fixed in next interval.");
+                }
+            }
+        }
+    }
+
+    private void singleMasterEntity(ArrayList<BackUpMonitorEntity> masterEntities, BackUpMonitorEntity selfEntity) {
+        // Correct Size, Check if Master is Latest, if not Change Master to Slave and Slave to
+        // Master.
+        BackUpMonitorEntity masterEntity = masterEntities.get(0);
+        if (!masterEntity.getResourceName().equals(selfEntity.getResourceName())) {
+            Date currentTime = new Date();
+            long timeDiff;
+            timeDiff = currentTime.getTime() - masterEntity.getTimeStamp().getTime();
+            if (timeDiff > (pingInterval + 1500)) {
+                // This is down or has an issue and we need to become Master while turning the
+                // Master to slave.
+                masterEntity.setFlag(SLAVE);
+                String lastNotification = null;
+                if (masterEntity.getNotificationRecord() != null) {
+                    lastNotification = calculatePatch(masterEntity.getNotificationRecord());
+                }
+                setLastNotification(lastNotification);
+                em.persist(masterEntity);
+                em.flush();
+                // Lets Become Master.
+                selfEntity = setMaster(selfEntity);
+                LOGGER.info("Changing " + resourceName + " from slave to Master Mode");
+                selfEntity.setTimeStamp(new Date());
+                selfEntity.setNotificationRecord(notificationRecord);
+                em.persist(selfEntity);
+                em.flush();
+            }
+        }
+    }
+
+    private ArrayList<BackUpMonitorEntity> multipleMasterEntity(ArrayList<BackUpMonitorEntity> masterEntities) {
+        // More Masters is a problem, Fix the issue by looking for the latest one and make others
+        // Slave.
+        BackUpMonitorEntity masterEntity = null;
+        for (BackUpMonitorEntity currentEntity : masterEntities) {
+            if (currentEntity.getFlag().equalsIgnoreCase(MASTER)) {
+                if (masterEntity == null) {
+                    masterEntity = currentEntity;
+                } else if (currentEntity.getTimeStamp().getTime() > masterEntity.getTimeStamp()
+                        .getTime()) {
+                    // False Master, Update master to slave and take currentMaster as Master.
+                    masterEntity.setFlag(SLAVE);
+                    masterEntity.setTimeStamp(new Date());
+                    em.persist(masterEntity);
+                    em.flush();
+                    masterEntity = currentEntity;
+                } else {
+                    currentEntity.setFlag(SLAVE);
+                    currentEntity.setTimeStamp(new Date());
+                    em.persist(currentEntity);
+                    em.flush();
+                }
+            }
+        }
+        masterEntities = new ArrayList<>();
+        masterEntities.add(masterEntity);
+        return masterEntities;
+    }
+
     private static void setNotificationRecord() throws BackUpMonitorException {
         try {
             notificationRecord = PolicyUtils.objectToJsonString(NotificationStore.getNotificationRecord());
@@ -423,9 +437,9 @@ public class BackUpMonitor {
             LOGGER.error("Error generating Patched " + e.getMessage(), e);
             return null;
         }
-       }
+    }
 
-       /**
+    /**
      * Updates Notification in the Database while Performing the health check.
      * 
      * @param notification
@@ -460,10 +474,10 @@ public class BackUpMonitor {
         } catch (Exception e) {
             LOGGER.error("Error in Clients Handler Object : " + e.getMessage(), e);
         }
-               
-       }
 
-       // Used to set LastMasterNotification Record.
+    }
+
+    // Used to set LastMasterNotification Record.
     private static void setLastNotification(String notification) {
         synchronized (notificationLock) {
             lastMasterNotification = notification;