Fixes for sonar critical issues 07/8307/4
authorTej, Tarun <tt3868@att.com>
Tue, 22 Aug 2017 00:00:50 +0000 (20:00 -0400)
committerTarun Tej Velaga <tt3868@att.com>
Wed, 23 Aug 2017 17:29:35 +0000 (17:29 +0000)
Fixes for critical and blocker issues reported in sonar.

Issue-Id: POLICY-113
Change-Id: I50969fe93a94b0497f3fb30864a6c45e63208fe6
Signed-off-by: Tej, Tarun <tt3868@att.com>
80 files changed:
BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSGateway.java
BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSHandler.java
BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSPush.java
ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/XACMLPapServlet.java
ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/PapUrlResolver.java
ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpServlet.java
ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PAPServices.java
ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PDPServices.java
ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PolicyEngineImportService.java
ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/ManualNotificationUpdateThread.java
ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationController.java
ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationServer.java
ONAP-PDP-REST/src/test/java/org/onap/policy/pdp/rest/api/test/PolicyEngineServicesTest.java
ONAP-PDP-REST/src/test/resources/notification.xacml.pdp.properties [new file with mode: 0644]
ONAP-REST/src/main/java/org/onap/policy/rest/XACMLRestProperties.java
ONAP-REST/src/main/java/org/onap/policy/rest/XacmlAdminAuthorization.java
ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyEntity.java
ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyManagement.java
ONAP-REST/src/main/java/org/onap/policy/rest/util/Webapps.java
ONAP-SDK-APP/src/main/java/org/openecomp/portalapp/conf/ExternalAppConfig.java
ONAP-SDK-APP/src/main/java/org/openecomp/portalapp/login/LoginStrategyImpl.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdEngine.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPAPPolicy.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDP.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPGroup.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPItemSetChangeNotifier.java
ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPStatus.java
POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java
POLICY-SDK-APP/src/main/java/org/onap/policy/controller/ActionPolicyController.java
POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AdminTabController.java
POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AutoPushController.java
POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopFaultController.java
POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java
POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreatePolicyController.java
POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PDPController.java
POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java
POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyExportAndImportController.java
POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyNotificationController.java
POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyValidationController.java
POLICY-SDK-APP/src/main/java/org/onap/policy/daoImp/CommonClassDaoImpl.java
POLICY-SDK-APP/src/main/java/org/onap/policy/model/PDPGroupContainer.java
POLICY-SDK-APP/src/main/java/org/onap/policy/model/PDPPolicyContainer.java
PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientDMAAP.java
PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java
PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientUEB.java
PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java
PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEndUEB.java
PolicyEngineAPI/src/main/java/org/onap/policy/std/NotificationUnMarshal.java
PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java
PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientUEBTest.java
PolicyEngineAPI/src/test/java/org/onap/policy/test/ActionPolicyApiTest.java
PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigBasePolicyTest.java
PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigFirewallPolicyTest.java
PolicyEngineAPI/src/test/java/org/onap/policy/test/DecisionPolicyApiTest.java
PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineInterfaceTest.java
PolicyEngineClient/pom.xml
PolicyEngineClient/src/test/java/org/onap/policyengine/ActionPolicyClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/ActionPolicyClient.java with 99% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/BrmsParamPolicyClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/BrmsParamPolicyClient.java with 99% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/BrmsRawPolicyClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/BrmsRawPolicyClient.java with 99% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/ClosedLoopPolicyClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/ClosedLoopPolicyClient.java with 99% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/ClosedLoopPolicyPerformanceMetricClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/ClosedLoopPolicyPerformanceMetricClient.java with 99% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/ConfigBasePolicyClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/ConfigBasePolicyClient.java with 99% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/ConfigFirewallPolicyClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/ConfigFirewallPolicyClient.java with 99% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/DecisionPolicyClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/DecisionPolicyClient.java with 99% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/DeletePolicyClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/DeletePolicyClient.java with 98% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/GeneralTestClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/GeneralTestClient.java with 99% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/GetConfigSample.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/GetConfigSample.java with 98% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/Handler.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/Handler.java with 99% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/ImportBRMSTemplate.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/ImportBRMSTemplate.java with 97% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/ImportMicroServiceClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/ImportMicroServiceClient.java with 98% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/ListConfigPoliciesClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/ListConfigPoliciesClient.java with 98% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/MainClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/MainClient.java with 99% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/MicroServicesPolicyClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/MicroServicesPolicyClient.java with 99% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/PolicyEngineTestClient.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/PolicyEngineTestClient.java with 99% similarity]
PolicyEngineClient/src/test/java/org/onap/policyengine/PushPoliciesToPDP.java [moved from PolicyEngineClient/src/main/java/org/onap/policyEngine/PushPoliciesToPDP.java with 98% similarity]
PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java
PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitorException.java [new file with mode: 0644]
PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusConsumer.java
PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusPublisher.java
PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java

index 0b4058d..c4fcf54 100644 (file)
@@ -22,67 +22,60 @@ package org.onap.policy.brmsInterface;
 
 import org.onap.policy.api.NotificationScheme;
 import org.onap.policy.api.PolicyEngine;
-
-//import org.apache.log4j.Logger;
-
-//import org.apache.commons.logging.Log;
-//import org.apache.commons.logging.LogFactory;
-
+import org.onap.policy.api.PolicyException;
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
-
 import org.onap.policy.xacml.api.XACMLErrorConstants;
 
-
 /**
- * BRMSGateway: This application acts as the Gateway interface between the PDP XACML and PDP Drools. 
- * The listens for BRMS based policies and pushes them to the specified Policy Repository, from where the PDP Drools reads the Rule Jar.  
+ * BRMSGateway: This application acts as the Gateway interface between the PDP XACML and PDP Drools. The listens for
+ * BRMS based policies and pushes them to the specified Policy Repository, from where the PDP Drools reads the Rule Jar.
  * 
  * @version 0.1
  */
 public class BRMSGateway {
-       
-       private static final Logger logger = FlexLogger.getLogger(BRMSGateway.class);
-       private static final String configFile = "config.properties";
-       
-       private static PolicyEngine policyEngine = null;
-       
-       public static void main(String[] args) throws Exception{
-               // Initialize Handler. 
-               logger.info("Initializing BRMS Handler");
-               BRMSHandler bRMSHandler = null;
-               try{
-                       bRMSHandler = new BRMSHandler(configFile);
-               }catch(NullPointerException e){
-                       logger.error("Check your property file: " + e.getMessage());
-                       System.exit(1);
-               }
-               
-               // Set Handler with Auto Notification and initialize policyEngine
-               try{
-                       logger.info("Initializing policyEngine with Auto Notifications");
-                       policyEngine= new PolicyEngine(configFile,NotificationScheme.AUTO_ALL_NOTIFICATIONS, bRMSHandler);
-               }catch(Exception e){
-                       logger.error(XACMLErrorConstants.ERROR_UNKNOWN+"Error while Initializing Policy Engine "  + e.getMessage()); 
-               }
-               
-               //Keep Running.... 
-               Runnable runnable = new Runnable(){
-                       public void run(){
-                               while (true){
-                                       try {
-                                               Thread.sleep(30000);
-                                       } catch (InterruptedException e) {
-                                               logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR+"Thread Exception " + e.getMessage()); 
-                                       }
-                               }
-                       }
-               };
-               Thread thread = new Thread(runnable);
-               thread.start();
-       }
-       
-       public static PolicyEngine getPolicyEngine(){
-               return policyEngine;
-       }
+
+    private static final Logger logger = FlexLogger.getLogger(BRMSGateway.class);
+    private static final String CONFIGFILE = "config.properties";
+
+    private static PolicyEngine policyEngine = null;
+
+    public static void main(String[] args) throws Exception {
+        // Initialize Handler.
+        logger.info("Initializing BRMS Handler");
+        BRMSHandler bRMSHandler = null;
+        try {
+            bRMSHandler = new BRMSHandler(CONFIGFILE);
+        } catch (PolicyException e) {
+            logger.error("Check your property file: " + e.getMessage(), e);
+            System.exit(1);
+        }
+
+        // Set Handler with Auto Notification and initialize policyEngine
+        try {
+            logger.info("Initializing policyEngine with Auto Notifications");
+            policyEngine = new PolicyEngine(CONFIGFILE, NotificationScheme.AUTO_ALL_NOTIFICATIONS, bRMSHandler);
+        } catch (Exception e) {
+            logger.error(XACMLErrorConstants.ERROR_UNKNOWN + "Error while Initializing Policy Engine " + e.getMessage(),
+                    e);
+        }
+
+        // Keep Running....
+        Runnable runnable = () -> {
+            while (true) {
+                try {
+                    Thread.sleep(30000);
+                } catch (InterruptedException e) {
+                    logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Thread Exception " + e.getMessage());
+                    Thread.currentThread().interrupt();
+                }
+            }
+        };
+        Thread thread = new Thread(runnable);
+        thread.start();
+    }
+
+    public static PolicyEngine getPolicyEngine() {
+        return policyEngine;
+    }
 }
index 305f64d..4303186 100644 (file)
@@ -91,7 +91,7 @@ public class BRMSHandler implements BackUpHandler{
                                        bRMSPush.removeRule(removedPolicy.getPolicyName());
                                        removed = true;
                                }catch(Exception e){
-                                       logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Rertriving policy failed " + e.getMessage());
+                                       logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Rertriving policy failed " + e.getMessage(), e);
                                }
                        }
                }
@@ -106,6 +106,7 @@ public class BRMSHandler implements BackUpHandler{
                                        //Upon Notification failure 
                                        failureFlag = true;
                                        bRMSPush.rotateURLs();
+                                       logger.error("Failure during Push Operation " , e);
                                }
                        }
                        i++;
@@ -138,6 +139,7 @@ public class BRMSHandler implements BackUpHandler{
                                        //Upon Notification failure 
                                        successFlag = false;
                                        bRMSPush.rotateURLs();
+                                       logger.error("Failure during Push Operation " , e);
                                }
                        }
                }
@@ -171,7 +173,7 @@ public class BRMSHandler implements BackUpHandler{
                                                }
                                        }
                                }catch(Exception e){
-                                       logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Rertriving policy failed " + e.getMessage());
+                                       logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Rertriving policy failed " + e.getMessage(), e);
                                }
                        }
                }
index c244938..f6f7c12 100644 (file)
@@ -96,670 +96,708 @@ import com.att.nsa.cambria.client.CambriaClientBuilders.PublisherBuilder;
 import com.fasterxml.jackson.core.JsonProcessingException;
 
 /**
- * BRMSPush: Application responsible to push policies to the BRMS PDP Policy Repository (PR). 
- * Mavenize and push policy to PR
+ * BRMSPush: Application responsible to push policies to the BRMS PDP Policy Repository (PR). Mavenize and push policy
+ * to PR
  * 
- * @version 1.0 
+ * @version 1.0
  */
 
 @SuppressWarnings("deprecation")
 public class BRMSPush {
-       private static final Logger LOGGER = FlexLogger.getLogger(BRMSPush.class.getName());
-       private static final String PROJECTSLOCATION = "RuleProjects";
-       private static final String GOALS[] = {"clean", "deploy"};
-       private static final String DEFAULT_VERSION = "1.1.0-SNAPSHOT";
-       private static final String DEPENDENCY_FILE = "dependency.json";
-
-       private static Map<String, String> modifiedGroups = new HashMap<>();
-       private static IntegrityMonitor im;
-       private static BackUpMonitor bm;
-       private static String resourceName = null;
-       private String defaultName = null;
-       private String repID = null; 
-       private String repName = null;
-       private ArrayList<String> repURLs= null;  
-       private String repUserName = null;
-       private String repPassword = null;
-       private String policyKeyID = null;
-       private boolean createFlag = false;
-       private String uebList = null;
-       private List<String> dmaapList = null;
-       private String pubTopic = null;
-       private PublisherBuilder pubBuilder = null;
-       protected BusPublisher publisher = null;
-       private Long uebDelay = Long.parseLong("20");
-       private Long dmaapDelay = Long.parseLong("5000");
-       private String notificationType = null;
-       private ArrayList<ControllerPOJO> controllers;
-       private HashMap<String, ArrayList<Object>> groupMap = new HashMap<>();
-       private Map<String, String> policyMap = new HashMap<>();
-       private String brmsdependencyversion;
-       private EntityManager em;
-       private boolean syncFlag = false;
-
-       public BRMSPush(String propertiesFile, BackUpHandler handler) throws PolicyException{
-               Properties config = new Properties();
-               Path file = Paths.get(propertiesFile);
-               if(Files.notExists(file)){
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE+"Config File doesn't Exist in the specified Path " + file.toString());
-                       throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE+"Config File doesn't Exist in the specified Path " + file.toString());
-               }else{
-                       if(file.toString().endsWith(".properties")){
-                               // Grab the Properties. 
-                               setProperty(file, config, handler);
-                       }
-               }
-       }
-
-       private void setProperty(Path file, Properties config, BackUpHandler handler) throws PolicyException{
-               InputStream in;
-               try {
-                       in = new FileInputStream(file.toFile());
-                       config.load(in);
-               } catch (IOException e) {
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Data/File Read Error while reading from the property file.");
-                       throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + "Data/File Read Error while reading from the property file.");
-               }
-               LOGGER.info("Trying to set up IntegrityMonitor");
-               try {
-                       LOGGER.info("Trying to set up IntegrityMonitor");
-                       resourceName = config.getProperty("RESOURCE_NAME");
-                       if(resourceName==null){
-                               LOGGER.warn("RESOURCE_NAME is missing setting default value. ");
-                               resourceName = "brmsgw_pdp01";
-                       }
-                       resourceName = resourceName.trim();
-                       im = IntegrityMonitor.getInstance(resourceName, config);
-               } catch (Exception e) {
-                       LOGGER.error("Error starting Integerity Monitor: " + e);
-               }
-               LOGGER.info("Trying to set up BackUpMonitor");
-               try {
-                       bm = BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), resourceName, config, handler);
-               } catch (Exception e) {
-                       LOGGER.error("Error starting BackUpMonitor: " + e);
-               }
-               config.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistenceBRMS.xml");
-               EntityManagerFactory emf = Persistence.createEntityManagerFactory("BRMSGW", config);
-               em = emf.createEntityManager();
-               defaultName = config.getProperty("defaultName");
-               if(defaultName==null){
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "defaultName property is missing from the property file ");
-                       throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + "defaultName property is missing from the property file");
-               }
-               defaultName = defaultName.trim();
-               repID = config.getProperty("repositoryID");
-               if(repID==null){
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "repositoryID property is missing from the property file ");
-                       throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + "repositoryID property is missing from the property file ");
-               }
-               repID = repID.trim();
-               repName = config.getProperty("repositoryName");
-               if(repName==null){
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "repositoryName property is missing from the property file ");
-                       throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + "repositoryName property is missing from the property file ");
-               }
-               repName = repName.trim();
-               String repURL = config.getProperty("repositoryURL");
-               if(repURL==null){
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "repositoryURL property is missing from the property file ");
-                       throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + "repositoryURL property is missing from the property file ");
-               }
-               if(repURL.contains(",")){
-                       repURLs = new ArrayList<>(Arrays.asList(repURL.trim().split(",")));
-               }else{
-                       repURLs = new ArrayList<>();
-                       repURLs.add(repURL);
-               }
-               repUserName = config.getProperty("repositoryUsername");
-               repPassword = config.getProperty("repositoryPassword");
-               if(repUserName==null || repPassword==null){
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "repostoryUserName and respositoryPassword properties are required.");
-                       throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + "repostoryUserName and respositoryPassword properties are required.");
-               }
-               repUserName = repUserName.trim();
-               repPassword = repPassword.trim();
-               policyKeyID = config.getProperty("policyKeyID");
-               if(policyKeyID==null){
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "policyKeyID property is missing from the property file ");
-                       throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + "policyKeyID property is missing from the property file ");
-               }
-               policyKeyID = policyKeyID.trim();
-               String syncF = config.getProperty("sync", "false").trim();
-               syncFlag = Boolean.parseBoolean(syncF);
-               if(syncFlag){
-                       PolicyLogger.info("SYNC Flag is turned ON. DB will be given Priority.");
-               }
-               brmsdependencyversion = config.getProperty("brms.dependency.version");
-               if(brmsdependencyversion==null){
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "brmsdependencyversion property is missing from the property file, Using default Version.");
-                       brmsdependencyversion = DEFAULT_VERSION;
-               }
-               brmsdependencyversion = brmsdependencyversion.trim();
-               readGroups(config);
-               
-               // Setup Publisher
-               notificationType = config.getProperty("NOTIFICATION_TYPE");
-               if("dmaap".equalsIgnoreCase(notificationType)){
-                       
-                       LOGGER.info("Notification Type being used is DMaaP... creating instance of BusPublisher.");
-                       // Setting up the Publisher for DMaaP MR
-                       String dmaapServers = config.getProperty("NOTIFICATION_SERVERS");
-                       pubTopic = config.getProperty("NOTIFICATION_TOPIC");
-                       String aafLogin = config.getProperty("CLIENT_ID").trim();
-                       String aafPassword = config.getProperty("CLIENT_KEY").trim();
-                       
-                       if(dmaapServers==null || pubTopic==null){
-                               LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "DMaaP properties are missing from the property file ");
-                               throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + "DMaaP properties are missing from the property file ");
-                       }
-                       
-                       dmaapServers = dmaapServers.trim();
-                       pubTopic = pubTopic.trim();
-                       
-                       if(dmaapServers.contains(",")) {
-                               dmaapList = new ArrayList<>(Arrays.asList(dmaapServers.split("\\s*,\\s*")));
-                       } else {
-                               dmaapList = new ArrayList<>();
-                               dmaapList.add(dmaapServers);
-                       }
-                       
-                       this.publisher = 
-                                       new BusPublisher.DmaapPublisherWrapper(this.dmaapList, 
-                                                                                      this.pubTopic, 
-                                                                                      aafLogin, 
-                                                                                      aafPassword);
-                       
-
-                       String dDelay = config.getProperty("NOTIFICATION_DELAY");
-                       if(dDelay!=null && !dDelay.isEmpty()){
-                               dDelay = dDelay.trim();
-                               try{
-                                       dmaapDelay = Long.parseLong(dDelay);
-                               }catch (NumberFormatException e){
-                                       LOGGER.error("DMAAP_DELAY not a long format number" + e);
-                               }
-                       }
-                       LOGGER.info("DMAAP BusPublisher is created.");
-                       
-               } else {
-                       LOGGER.info("Notification Type being used is UEB... creating instance of PublisherBuilder.");
-                       // Setting up the Publisher for UEB
-                       uebList = config.getProperty("NOTIFICATION_SERVERS");
-                       pubTopic = config.getProperty("NOTIFICATION_TOPIC");
-                       String apiKey = config.getProperty("UEB_API_KEY");
-                       String apiSecret = config.getProperty("UEB_API_SECRET");
-                       if(uebList==null || pubTopic==null){
-                               LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "UEB properties are missing from the property file ");
-                               throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + "UEB properties are missing from the property file ");
-                       }
-                       uebList = uebList.trim();
-                       pubTopic = pubTopic.trim();
-                       pubBuilder = new CambriaClientBuilders.PublisherBuilder();
-                       pubBuilder.usingHosts(uebList).onTopic(pubTopic);
-                       if(apiKey!=null && !apiKey.isEmpty() && 
-                                       apiSecret!=null && !apiSecret.isEmpty()) {
-                               apiKey= apiKey.trim();
-                               apiSecret = apiSecret.trim();
-                               pubBuilder.authenticatedBy(apiKey, apiSecret);
-                       }
-                       String uDelay = config.getProperty("NOTIFICATION_DELAY");
-                       if(uDelay!=null && !uDelay.isEmpty()){
-                               uDelay = uDelay.trim();
-                               try{
-                                       uebDelay = Long.parseLong(uDelay);
-                               }catch (NumberFormatException e){
-                                       LOGGER.error("UEB_DELAY not a long format number" + e);
-                               }
-                       }
-                       LOGGER.info("UEB PublisherBuilder is created.");
-
-               }
-
-       }
-
-       /**
-        * Will Initialize the variables required for BRMSPush. 
-        */
-       public void initiate(boolean flag) {
-               modifiedGroups =  new HashMap<>();
-               controllers = new ArrayList<>();
-               try {
-                       bm.updateNotification();
-               } catch (Exception e) {
-                       LOGGER.error("Error while updating Notification: "  + e.getMessage());
-               }
-               if(flag) syncGroupInfo();
-       }
-
-       /**
-        * Will Add rules to projects. Creates necessary folders if required. 
-        */
-       public void addRule(String name, String rule, Map<String, String> responseAttributes) {
-               // 1 check the response Attributes and determine if this belongs to any projects. 
-               // 2 if not create folder
-               // 3 create pom. 
-               // 4 copy the rule. 
-               // 5 store the groups that have been updated. 
-               String kSessionName=null;
-               String selectedName = null;
-               if(!responseAttributes.isEmpty()){
-                       // Pick selected Value
-                       String userControllerName = null;
-                       ArrayList<PEDependency> userDependencies = new ArrayList<>();
-                       for(String key: responseAttributes.keySet()){
-                               if(key.equals(policyKeyID)){
-                                       selectedName = responseAttributes.get(key);
-                               }
-                               //kmodule configurations
-                               else if (key.equals("kSessionName")){
-                                       kSessionName=responseAttributes.get(key);
-                               }
-                               // Check User Specific values.
+    private static final Logger LOGGER = FlexLogger.getLogger(BRMSPush.class.getName());
+    private static final String PROJECTSLOCATION = "RuleProjects";
+    private static final String[] GOALS = { "clean", "deploy" };
+    private static final String DEFAULT_VERSION = "1.1.0-SNAPSHOT";
+    private static final String DEPENDENCY_FILE = "dependency.json";
+
+    private static Map<String, String> modifiedGroups = new HashMap<>();
+    private static IntegrityMonitor im;
+    private static BackUpMonitor bm;
+    private String defaultName = null;
+    private String repID = null;
+    private String repName = null;
+    private ArrayList<String> repURLs = null;
+    private String repUserName = null;
+    private String repPassword = null;
+    private String policyKeyID = null;
+    private boolean createFlag = false;
+    private String uebList = null;
+    private List<String> dmaapList = null;
+    private String pubTopic = null;
+    private PublisherBuilder pubBuilder = null;
+    protected BusPublisher publisher = null;
+    private Long uebDelay = Long.parseLong("20");
+    private Long dmaapDelay = Long.parseLong("5000");
+    private String notificationType = null;
+    private ArrayList<ControllerPOJO> controllers;
+    private HashMap<String, ArrayList<Object>> groupMap = new HashMap<>();
+    private Map<String, String> policyMap = new HashMap<>();
+    private String brmsdependencyversion;
+    private EntityManager em;
+    private boolean syncFlag = false;
+
+    public BRMSPush(String propertiesFile, BackUpHandler handler) throws PolicyException {
+        Properties config = new Properties();
+        Path file = Paths.get(propertiesFile);
+        if (Files.notExists(file)) {
+            LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Config File doesn't Exist in the specified Path "
+                    + file.toString());
+            throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE
+                    + "Config File doesn't Exist in the specified Path " + file.toString());
+        } else {
+            if (file.toString().endsWith(".properties")) {
+                // Grab the Properties.
+                setProperty(file, config, handler);
+            }
+        }
+    }
+
+    private void setProperty(Path file, Properties config, BackUpHandler handler) throws PolicyException {
+        InputStream in;
+        try {
+            in = new FileInputStream(file.toFile());
+            config.load(in);
+        } catch (IOException e) {
+            LOGGER.error(
+                    XACMLErrorConstants.ERROR_DATA_ISSUE + "Data/File Read Error while reading from the property file.",
+                    e);
+            throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE
+                    + "Data/File Read Error while reading from the property file.");
+        }
+        LOGGER.info("Trying to set up IntegrityMonitor");
+        String resourceName = null;
+        try {
+            LOGGER.info("Trying to set up IntegrityMonitor");
+            resourceName = config.getProperty("RESOURCE_NAME");
+            if (resourceName == null) {
+                LOGGER.warn("RESOURCE_NAME is missing setting default value. ");
+                resourceName = "brmsgw_pdp01";
+            }
+            resourceName = resourceName.trim();
+            setIntegrityMonitor(IntegrityMonitor.getInstance(resourceName, config));
+        } catch (Exception e) {
+            LOGGER.error("Error starting Integerity Monitor: " + e);
+        }
+        LOGGER.info("Trying to set up BackUpMonitor");
+        try {
+            setBackupMonitor(BackUpMonitor.getInstance(BackUpMonitor.ResourceNode.BRMS.toString(), resourceName, config,
+                    handler));
+        } catch (Exception e) {
+            LOGGER.error("Error starting BackUpMonitor: " + e);
+        }
+        config.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistenceBRMS.xml");
+        EntityManagerFactory emf = Persistence.createEntityManagerFactory("BRMSGW", config);
+        em = emf.createEntityManager();
+        defaultName = config.getProperty("defaultName");
+        if (defaultName == null) {
+            LOGGER.error(
+                    XACMLErrorConstants.ERROR_DATA_ISSUE + "defaultName property is missing from the property file ");
+            throw new PolicyException(
+                    XACMLErrorConstants.ERROR_DATA_ISSUE + "defaultName property is missing from the property file");
+        }
+        defaultName = defaultName.trim();
+        repID = config.getProperty("repositoryID");
+        if (repID == null) {
+            LOGGER.error(
+                    XACMLErrorConstants.ERROR_DATA_ISSUE + "repositoryID property is missing from the property file ");
+            throw new PolicyException(
+                    XACMLErrorConstants.ERROR_DATA_ISSUE + "repositoryID property is missing from the property file ");
+        }
+        repID = repID.trim();
+        repName = config.getProperty("repositoryName");
+        if (repName == null) {
+            LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE
+                    + "repositoryName property is missing from the property file ");
+            throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE
+                    + "repositoryName property is missing from the property file ");
+        }
+        repName = repName.trim();
+        String repURL = config.getProperty("repositoryURL");
+        if (repURL == null) {
+            LOGGER.error(
+                    XACMLErrorConstants.ERROR_DATA_ISSUE + "repositoryURL property is missing from the property file ");
+            throw new PolicyException(
+                    XACMLErrorConstants.ERROR_DATA_ISSUE + "repositoryURL property is missing from the property file ");
+        }
+        if (repURL.contains(",")) {
+            repURLs = new ArrayList<>(Arrays.asList(repURL.trim().split(",")));
+        } else {
+            repURLs = new ArrayList<>();
+            repURLs.add(repURL);
+        }
+        repUserName = config.getProperty("repositoryUsername");
+        repPassword = config.getProperty("repositoryPassword");
+        if (repUserName == null || repPassword == null) {
+            LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE
+                    + "repostoryUserName and respositoryPassword properties are required.");
+            throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE
+                    + "repostoryUserName and respositoryPassword properties are required.");
+        }
+        repUserName = repUserName.trim();
+        repPassword = repPassword.trim();
+        policyKeyID = config.getProperty("policyKeyID");
+        if (policyKeyID == null) {
+            LOGGER.error(
+                    XACMLErrorConstants.ERROR_DATA_ISSUE + "policyKeyID property is missing from the property file ");
+            throw new PolicyException(
+                    XACMLErrorConstants.ERROR_DATA_ISSUE + "policyKeyID property is missing from the property file ");
+        }
+        policyKeyID = policyKeyID.trim();
+        String syncF = config.getProperty("sync", "false").trim();
+        syncFlag = Boolean.parseBoolean(syncF);
+        if (syncFlag) {
+            PolicyLogger.info("SYNC Flag is turned ON. DB will be given Priority.");
+        }
+        brmsdependencyversion = config.getProperty("brms.dependency.version");
+        if (brmsdependencyversion == null) {
+            LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE
+                    + "brmsdependencyversion property is missing from the property file, Using default Version.");
+            brmsdependencyversion = DEFAULT_VERSION;
+        }
+        brmsdependencyversion = brmsdependencyversion.trim();
+        readGroups(config);
+
+        // Setup Publisher
+        notificationType = config.getProperty("NOTIFICATION_TYPE");
+        if ("dmaap".equalsIgnoreCase(notificationType)) {
+
+            LOGGER.info("Notification Type being used is DMaaP... creating instance of BusPublisher.");
+            // Setting up the Publisher for DMaaP MR
+            String dmaapServers = config.getProperty("NOTIFICATION_SERVERS");
+            pubTopic = config.getProperty("NOTIFICATION_TOPIC");
+            String aafLogin = config.getProperty("CLIENT_ID").trim();
+            String aafPassword = config.getProperty("CLIENT_KEY").trim();
+
+            if (dmaapServers == null || pubTopic == null) {
+                LOGGER.error(
+                        XACMLErrorConstants.ERROR_DATA_ISSUE + "DMaaP properties are missing from the property file ");
+                throw new PolicyException(
+                        XACMLErrorConstants.ERROR_DATA_ISSUE + "DMaaP properties are missing from the property file ");
+            }
+
+            dmaapServers = dmaapServers.trim();
+            pubTopic = pubTopic.trim();
+
+            if (dmaapServers.contains(",")) {
+                dmaapList = new ArrayList<>(Arrays.asList(dmaapServers.split("\\s*,\\s*")));
+            } else {
+                dmaapList = new ArrayList<>();
+                dmaapList.add(dmaapServers);
+            }
+
+            this.publisher = new BusPublisher.DmaapPublisherWrapper(this.dmaapList, this.pubTopic, aafLogin,
+                    aafPassword);
+
+            String dDelay = config.getProperty("NOTIFICATION_DELAY");
+            if (dDelay != null && !dDelay.isEmpty()) {
+                dDelay = dDelay.trim();
+                try {
+                    dmaapDelay = Long.parseLong(dDelay);
+                } catch (NumberFormatException e) {
+                    LOGGER.error("DMAAP_DELAY not a long format number" + e);
+                }
+            }
+            LOGGER.info("DMAAP BusPublisher is created.");
+
+        } else {
+            LOGGER.info("Notification Type being used is UEB... creating instance of PublisherBuilder.");
+            // Setting up the Publisher for UEB
+            uebList = config.getProperty("NOTIFICATION_SERVERS");
+            pubTopic = config.getProperty("NOTIFICATION_TOPIC");
+            String apiKey = config.getProperty("UEB_API_KEY");
+            String apiSecret = config.getProperty("UEB_API_SECRET");
+            if (uebList == null || pubTopic == null) {
+                LOGGER.error(
+                        XACMLErrorConstants.ERROR_DATA_ISSUE + "UEB properties are missing from the property file ");
+                throw new PolicyException(
+                        XACMLErrorConstants.ERROR_DATA_ISSUE + "UEB properties are missing from the property file ");
+            }
+            uebList = uebList.trim();
+            pubTopic = pubTopic.trim();
+            pubBuilder = new CambriaClientBuilders.PublisherBuilder();
+            pubBuilder.usingHosts(uebList).onTopic(pubTopic);
+            if (apiKey != null && !apiKey.isEmpty() && apiSecret != null && !apiSecret.isEmpty()) {
+                apiKey = apiKey.trim();
+                apiSecret = apiSecret.trim();
+                pubBuilder.authenticatedBy(apiKey, apiSecret);
+            }
+            String uDelay = config.getProperty("NOTIFICATION_DELAY");
+            if (uDelay != null && !uDelay.isEmpty()) {
+                uDelay = uDelay.trim();
+                try {
+                    uebDelay = Long.parseLong(uDelay);
+                } catch (NumberFormatException e) {
+                    LOGGER.error("UEB_DELAY not a long format number" + e);
+                }
+            }
+            LOGGER.info("UEB PublisherBuilder is created.");
+
+        }
+
+    }
+
+    private static void setBackupMonitor(BackUpMonitor instance) {
+        bm = instance;
+    }
+
+    private static void setIntegrityMonitor(IntegrityMonitor instance) {
+        im = instance;
+    }
+
+    /**
+     * Will Initialize the variables required for BRMSPush.
+     */
+    public void initiate(boolean flag) {
+        resetModifiedGroups();
+        controllers = new ArrayList<>();
+        try {
+            bm.updateNotification();
+        } catch (Exception e) {
+            LOGGER.error("Error while updating Notification: " + e.getMessage(), e);
+        }
+        if (flag)
+            syncGroupInfo();
+    }
+
+    private static void resetModifiedGroups() {
+        modifiedGroups = new HashMap<>();
+    }
+
+    /**
+     * Will Add rules to projects. Creates necessary folders if required.
+     */
+    public void addRule(String name, String rule, Map<String, String> responseAttributes) {
+        // 1 check the response Attributes and determine if this belongs to any projects.
+        // 2 if not create folder
+        // 3 create pom.
+        // 4 copy the rule.
+        // 5 store the groups that have been updated.
+        String kSessionName = null;
+        String selectedName = null;
+        if (!responseAttributes.isEmpty()) {
+            // Pick selected Value
+            String userControllerName = null;
+            ArrayList<PEDependency> userDependencies = new ArrayList<>();
+            for (String key : responseAttributes.keySet()) {
+                if (key.equals(policyKeyID)) {
+                    selectedName = responseAttributes.get(key);
+                }
+                // kmodule configurations
+                else if (key.equals("kSessionName")) {
+                    kSessionName = responseAttributes.get(key);
+                }
+                // Check User Specific values.
                 if (key.equals("$controller:")) {
                     try {
-                        PEDependency dependency = PolicyUtils.jsonStringToObject(responseAttributes.get(key), PEDependency.class);
-                        userControllerName = key.replaceFirst("$controller:",""); 
+                        PEDependency dependency = PolicyUtils.jsonStringToObject(responseAttributes.get(key),
+                                PEDependency.class);
+                        userControllerName = key.replaceFirst("$controller:", "");
                         addToGroup(userControllerName, dependency);
                     } catch (Exception e) {
-                        LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Error while resolving Controller: " + e);
+                        LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while resolving Controller: " + e);
                     }
 
-                }
-                else if(key.equals("$dependency$")){
+                } else if (key.equals("$dependency$")) {
                     String value = responseAttributes.get(key);
-                    if(value.startsWith("[") && value.endsWith("]")){
-                        value = value.substring(1, value.length()-1).trim();
+                    if (value.startsWith("[") && value.endsWith("]")) {
+                        value = value.substring(1, value.length() - 1).trim();
                         List<String> dependencyStrings = Arrays.asList(value.split("},{"));
-                        for(String dependencyString: dependencyStrings){
+                        for (String dependencyString : dependencyStrings) {
                             try {
-                                userDependencies.add(PolicyUtils.jsonStringToObject(dependencyString, PEDependency.class));
+                                userDependencies
+                                        .add(PolicyUtils.jsonStringToObject(dependencyString, PEDependency.class));
                             } catch (Exception e) {
-                                LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Error while resolving Dependencies: " + e);
+                                LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW
+                                        + "Error while resolving Dependencies: " + e);
                             }
                         }
                     }
                 }
-                       }
-                       if(userControllerName!=null){
-                               // Adding custom dependencies here. 
+            }
+            if (userControllerName != null) {
+                // Adding custom dependencies here.
                 ArrayList<Object> values = groupMap.get(userControllerName);
                 values.add(userDependencies);
                 groupMap.put(userControllerName, values);
                 selectedName = userControllerName;
             }
-               }
-               // If no Match then pick Default. 
-               if(selectedName==null){
-                       selectedName = defaultName;
-               }
-               if (groupMap.containsKey(selectedName)) {
-                       //If the key is not got as parameters set by the user, setting the default value for kSessionName as closedLoop
-                       if(kSessionName==null){
-                               if(selectedName==defaultName){
-                                       kSessionName="closedloop";
-                               }else{
-                                       kSessionName= "closedloop-" + selectedName;
-                               }
-                       }
-                       // create directories if missing.
-                       manageProject(selectedName, kSessionName, name, rule);
+        }
+        // If no Match then pick Default.
+        if (selectedName == null) {
+            selectedName = defaultName;
+        }
+        if (groupMap.containsKey(selectedName)) {
+            // If the key is not got as parameters set by the user, setting the default value for kSessionName as
+            // closedLoop
+            if (kSessionName == null) {
+                if (selectedName == defaultName) {
+                    kSessionName = "closedloop";
+                } else {
+                    kSessionName = "closedloop-" + selectedName;
+                }
+            }
+            // create directories if missing.
+            manageProject(selectedName, kSessionName, name, rule);
             addModifiedGroup(selectedName, "update"); // Will check for Create Later after generating the Pom.
-               }
-       }
-
-       private void syncGroupInfo() {
-               // Sync DB to JMemory.
-               EntityTransaction et = em.getTransaction();
-               et.begin();
-               Query query = em.createQuery("select b from BRMSGroupInfo AS b");
-               List<?> bList = query.getResultList();
-               if(bList.size()!=groupMap.size()){
-                       for(Object value : bList){
-                               BRMSGroupInfo brmsGroupInfo = (BRMSGroupInfo) value;
-                               PEDependency dependency = new PEDependency();
-                               dependency.setArtifactId(brmsGroupInfo.getArtifactId());
-                               dependency.setGroupId(brmsGroupInfo.getGroupId());
-                               dependency.setVersion(brmsGroupInfo.getVersion());
-                               ArrayList<Object> values = new ArrayList<>();
-                               values.add(dependency);
-                               groupMap.put(brmsGroupInfo.getControllerName(), values);
-                       }
-               }
-               query = em.createQuery("select g from BRMSPolicyInfo AS g");
-               bList = query.getResultList();
-               if(bList.size()!=policyMap.size()){
-                       for(Object value: bList){
-                               BRMSPolicyInfo brmsPolicyInfo = (BRMSPolicyInfo) value;
-                               policyMap.put(brmsPolicyInfo.getPolicyName(), brmsPolicyInfo.getControllerName().getControllerName());
-                       }
-               }
-               et.commit();
-               LOGGER.info("Updated Local Memory values with values from database.");
-       }
-
-       private void manageProject(String selectedName, String kSessionName, String name, String rule) {
-               // Check if the Project is in Sync. If not get the latest Version. 
-               syncProject(selectedName);
-               createProject(PROJECTSLOCATION + File.separator
-                               + getArtifactID(selectedName) + File.separator + "src"
-                               + File.separator + "main" + File.separator + "resources",
-                               kSessionName);
-               copyDataToFile(
-                               PROJECTSLOCATION + File.separator
-                               + getArtifactID(selectedName) + File.separator
-                               + "src" + File.separator + "main" + File.separator
-                               + "resources" + File.separator + "rules"
-                               + File.separator + name + ".drl", rule);
-               addToPolicy(name,selectedName);
-       }
-
-       /*
-        * Add Policy to JMemory and DataBase. 
-        */
-       private void addToPolicy(String policyName, String controllerName) {
-               policyMap.put(policyName, controllerName);
-               EntityTransaction et = em.getTransaction();
-               et.begin();
-               Query query = em.createQuery("select b from BRMSPolicyInfo as b where b.policyName = :pn");
-               query.setParameter("pn", policyName);
-               List<?> pList = query.getResultList();
-               boolean createFlag = false;
-               BRMSPolicyInfo brmsPolicyInfo = new BRMSPolicyInfo();
-               if(pList.size()>0){
-                       // Already exists. 
-                       brmsPolicyInfo = (BRMSPolicyInfo) pList.get(0);
-                       if(!brmsPolicyInfo.getControllerName().getControllerName().equals(controllerName)){
-                               createFlag = true;
-                       }
-               }else{
-                       createFlag = true;
-               }
-               if(createFlag){
-                       query = em.createQuery("select b from BRMSGroupInfo as b where b.controllerName = :cn");
-                       query.setParameter("cn", controllerName);
-                       List<?> bList = query.getResultList();
-                       BRMSGroupInfo brmsGroupInfo = new BRMSGroupInfo();
-                       if(bList.size()>0){
-                               brmsGroupInfo = (BRMSGroupInfo) bList.get(0);
-                       }
-                       brmsPolicyInfo.setPolicyName(policyName);
-                       brmsPolicyInfo.setControllerName(brmsGroupInfo);
-                       em.persist(brmsPolicyInfo);
-                       em.flush();
-               }
-               et.commit();
-       }
-
-       private void syncProject(String selectedName) {
-               boolean projectExists = checkProject(selectedName);
-               if(projectExists){
-                       String version = null;
-                       version = getVersion(selectedName);
-                       if(version==null){
-                               LOGGER.error("Error getting local version for the given Controller Name:"+ selectedName+" going with Default value");
-                               version = "0.1.0";
-                       }
-                       String nextVersion = incrementVersion(version);
-                       boolean outOfSync = checkRemoteSync(selectedName, nextVersion);
-                       if(!outOfSync){
-                               return;
-                       }
-               }
-               // We are out of Sync or Project is not Present. 
-               downloadProject(selectedName);
-       }
-
-       private void downloadProject(String selectedName) {
-               NexusArtifact artifact = getLatestArtifactFromNexus(selectedName);
-               if(artifact==null) return;
-               String dirName = getDirectoryName(selectedName);
-               URL website;
-               String fileName = "rule.jar";
-               try {
-                       website = new URL(artifact.getResourceURI());
-                       ReadableByteChannel rbc = Channels.newChannel(website.openStream());
-                   FileOutputStream fos = new FileOutputStream(fileName);
-                   fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
-                   fos.close();
-                   extractJar(fileName, dirName);
-                   new File(fileName).delete();
-               } catch (IOException e) {
-                       LOGGER.error("Error while downloading the project to File System. " + e.getMessage());
-               }
-       }
-
-       private void extractJar(String jarFileName, String artifactId) throws IOException{
-               JarFile jar = new JarFile(jarFileName);
-               Enumeration<?> enumEntries = jar.entries();
-               while (enumEntries.hasMoreElements()) {
-                       JarEntry file = (JarEntry) enumEntries.nextElement();
-                   File f = null;
-                   String fileName = file.getName().substring(file.getName().lastIndexOf("/")+1);
-                   if(file.getName().endsWith(".drl")){
-                       String path = PROJECTSLOCATION+ File.separator + artifactId + File.separator + "src"+ 
-                                       File.separator+ "main" + File.separator + "resources" + File.separator+ "rules"; 
-                       new File(path).mkdirs();
-                       if(syncFlag  && policyMap.containsKey(fileName.replace(".drl", ""))){
-                               f = new File(path + File.separator + fileName);
-                       }else{
-                               f = new File(path + File.separator + fileName);
-                       }
-                   }else if(file.getName().endsWith("pom.xml")){
-                       String path = PROJECTSLOCATION+ File.separator + artifactId; 
-                       new File(path).mkdirs();
-                       f = new File(path + File.separator + fileName);
-                   }else if(file.getName().endsWith("kmodule.xml")){
-                       String path = PROJECTSLOCATION+ File.separator + artifactId + File.separator + "src"+ 
-                                       File.separator+ "main" + File.separator + "resources" + File.separator+ "META-INF"; 
-                       new File(path).mkdirs();
-                       f = new File(path + File.separator + fileName);
-                   }
-                   if(f!=null){
-                       InputStream is = jar.getInputStream(file);
-                           FileOutputStream fos = new FileOutputStream(f);
-                           while (is.available() > 0) {
-                               fos.write(is.read());
-                           }
-                           fos.close();
-                           is.close();
-                           f=null;
-                           LOGGER.info(fileName + " Created..");
-                   }
-               }
-               jar.close();
-       }
-
-       private NexusArtifact getLatestArtifactFromNexus(String selectedName) {
-               List<NexusArtifact> artifacts = getArtifactFromNexus(selectedName, null);
-               int bigNum = 0;
+        }
+    }
+
+    private void syncGroupInfo() {
+        // Sync DB to JMemory.
+        EntityTransaction et = em.getTransaction();
+        et.begin();
+        Query query = em.createQuery("select b from BRMSGroupInfo AS b");
+        List<?> bList = query.getResultList();
+        if (bList.size() != groupMap.size()) {
+            for (Object value : bList) {
+                BRMSGroupInfo brmsGroupInfo = (BRMSGroupInfo) value;
+                PEDependency dependency = new PEDependency();
+                dependency.setArtifactId(brmsGroupInfo.getArtifactId());
+                dependency.setGroupId(brmsGroupInfo.getGroupId());
+                dependency.setVersion(brmsGroupInfo.getVersion());
+                ArrayList<Object> values = new ArrayList<>();
+                values.add(dependency);
+                groupMap.put(brmsGroupInfo.getControllerName(), values);
+            }
+        }
+        query = em.createQuery("select g from BRMSPolicyInfo AS g");
+        bList = query.getResultList();
+        if (bList.size() != policyMap.size()) {
+            for (Object value : bList) {
+                BRMSPolicyInfo brmsPolicyInfo = (BRMSPolicyInfo) value;
+                policyMap.put(brmsPolicyInfo.getPolicyName(), brmsPolicyInfo.getControllerName().getControllerName());
+            }
+        }
+        et.commit();
+        LOGGER.info("Updated Local Memory values with values from database.");
+    }
+
+    private void manageProject(String selectedName, String kSessionName, String name, String rule) {
+        // Check if the Project is in Sync. If not get the latest Version.
+        syncProject(selectedName);
+        createProject(PROJECTSLOCATION + File.separator + getArtifactID(selectedName) + File.separator + "src"
+                + File.separator + "main" + File.separator + "resources", kSessionName);
+        copyDataToFile(PROJECTSLOCATION + File.separator + getArtifactID(selectedName) + File.separator + "src"
+                + File.separator + "main" + File.separator + "resources" + File.separator + "rules" + File.separator
+                + name + ".drl", rule);
+        addToPolicy(name, selectedName);
+    }
+
+    /*
+     * Add Policy to JMemory and DataBase.
+     */
+    private void addToPolicy(String policyName, String controllerName) {
+        policyMap.put(policyName, controllerName);
+        EntityTransaction et = em.getTransaction();
+        et.begin();
+        Query query = em.createQuery("select b from BRMSPolicyInfo as b where b.policyName = :pn");
+        query.setParameter("pn", policyName);
+        List<?> pList = query.getResultList();
+        boolean createFlag = false;
+        BRMSPolicyInfo brmsPolicyInfo = new BRMSPolicyInfo();
+        if (pList.size() > 0) {
+            // Already exists.
+            brmsPolicyInfo = (BRMSPolicyInfo) pList.get(0);
+            if (!brmsPolicyInfo.getControllerName().getControllerName().equals(controllerName)) {
+                createFlag = true;
+            }
+        } else {
+            createFlag = true;
+        }
+        if (createFlag) {
+            query = em.createQuery("select b from BRMSGroupInfo as b where b.controllerName = :cn");
+            query.setParameter("cn", controllerName);
+            List<?> bList = query.getResultList();
+            BRMSGroupInfo brmsGroupInfo = new BRMSGroupInfo();
+            if (bList.size() > 0) {
+                brmsGroupInfo = (BRMSGroupInfo) bList.get(0);
+            }
+            brmsPolicyInfo.setPolicyName(policyName);
+            brmsPolicyInfo.setControllerName(brmsGroupInfo);
+            em.persist(brmsPolicyInfo);
+            em.flush();
+        }
+        et.commit();
+    }
+
+    private void syncProject(String selectedName) {
+        boolean projectExists = checkProject(selectedName);
+        if (projectExists) {
+            String version = null;
+            version = getVersion(selectedName);
+            if (version == null) {
+                LOGGER.error("Error getting local version for the given Controller Name:" + selectedName
+                        + " going with Default value");
+                version = "0.1.0";
+            }
+            String nextVersion = incrementVersion(version);
+            boolean outOfSync = checkRemoteSync(selectedName, nextVersion);
+            if (!outOfSync) {
+                return;
+            }
+        }
+        // We are out of Sync or Project is not Present.
+        downloadProject(selectedName);
+    }
+
+    private void downloadProject(String selectedName) {
+        NexusArtifact artifact = getLatestArtifactFromNexus(selectedName);
+        if (artifact == null)
+            return;
+        String dirName = getDirectoryName(selectedName);
+        URL website;
+        String fileName = "rule.jar";
+        try {
+            website = new URL(artifact.getResourceURI());
+            ReadableByteChannel rbc = Channels.newChannel(website.openStream());
+            FileOutputStream fos = new FileOutputStream(fileName);
+            fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+            fos.close();
+            extractJar(fileName, dirName);
+            new File(fileName).delete();
+        } catch (IOException e) {
+            LOGGER.error("Error while downloading the project to File System. " + e.getMessage(), e);
+        }
+    }
+
+    private void extractJar(String jarFileName, String artifactId) throws IOException {
+        JarFile jar = new JarFile(jarFileName);
+        Enumeration<?> enumEntries = jar.entries();
+        while (enumEntries.hasMoreElements()) {
+            JarEntry file = (JarEntry) enumEntries.nextElement();
+            File f = null;
+            String fileName = file.getName().substring(file.getName().lastIndexOf("/") + 1);
+            if (file.getName().endsWith(".drl")) {
+                String path = PROJECTSLOCATION + File.separator + artifactId + File.separator + "src" + File.separator
+                        + "main" + File.separator + "resources" + File.separator + "rules";
+                new File(path).mkdirs();
+                if (syncFlag && policyMap.containsKey(fileName.replace(".drl", ""))) {
+                    f = new File(path + File.separator + fileName);
+                } else {
+                    f = new File(path + File.separator + fileName);
+                }
+            } else if (file.getName().endsWith("pom.xml")) {
+                String path = PROJECTSLOCATION + File.separator + artifactId;
+                new File(path).mkdirs();
+                f = new File(path + File.separator + fileName);
+            } else if (file.getName().endsWith("kmodule.xml")) {
+                String path = PROJECTSLOCATION + File.separator + artifactId + File.separator + "src" + File.separator
+                        + "main" + File.separator + "resources" + File.separator + "META-INF";
+                new File(path).mkdirs();
+                f = new File(path + File.separator + fileName);
+            }
+            if (f != null) {
+                InputStream is = jar.getInputStream(file);
+                FileOutputStream fos = new FileOutputStream(f);
+                while (is.available() > 0) {
+                    fos.write(is.read());
+                }
+                fos.close();
+                is.close();
+                f = null;
+                LOGGER.info(fileName + " Created..");
+            }
+        }
+        jar.close();
+    }
+
+    private NexusArtifact getLatestArtifactFromNexus(String selectedName) {
+        List<NexusArtifact> artifacts = getArtifactFromNexus(selectedName, null);
+        int bigNum = 0;
         int smallNum = 0;
         NexusArtifact result = null;
         for (NexusArtifact artifact : artifacts) {
             int majorVal = Integer.parseInt(artifact.getVersion().substring(0, artifact.getVersion().indexOf(".")));
-            int minorVal = Integer.parseInt(artifact.getVersion().substring(artifact.getVersion().indexOf(".")+1,artifact.getVersion().lastIndexOf(".")));
-            if(majorVal>bigNum){
+            int minorVal = Integer.parseInt(artifact.getVersion().substring(artifact.getVersion().indexOf(".") + 1,
+                    artifact.getVersion().lastIndexOf(".")));
+            if (majorVal > bigNum) {
                 bigNum = majorVal;
                 smallNum = minorVal;
             }
-            if((bigNum==majorVal)&&(minorVal>smallNum)){
+            if ((bigNum == majorVal) && (minorVal > smallNum)) {
                 smallNum = minorVal;
             }
-            if(bigNum==majorVal && minorVal==smallNum){
+            if (bigNum == majorVal && minorVal == smallNum) {
                 result = artifact;
             }
         }
         return additionalNexusLatestCheck(selectedName, result);
-       }
-       
-       // Additional Check due to Limitations from Nexus API to check if the artifact is the latest.
-       private NexusArtifact additionalNexusLatestCheck(String selectedName, NexusArtifact result) {
-               String nextVersion = incrementVersion(result.getVersion());
+    }
+
+    // Additional Check due to Limitations from Nexus API to check if the artifact is the latest.
+    private NexusArtifact additionalNexusLatestCheck(String selectedName, NexusArtifact result) {
+        String nextVersion = incrementVersion(result.getVersion());
         List<NexusArtifact> artifact = getArtifactFromNexus(selectedName, nextVersion);
-        return artifact.isEmpty()? result: additionalNexusLatestCheck(selectedName, artifact.get(0));
-       }
-
-       private boolean checkRemoteSync(String selectedName, String version) {
-               List<NexusArtifact> artifacts = getArtifactFromNexus(selectedName, version);
-               return (artifacts.size()==0) ? false: true;
-       }
-
-       private List<NexusArtifact> getArtifactFromNexus(String selectedName, String version) {
-               final NexusClient client = new NexusRestClient();
-               int i = 0 ;
-               boolean flag = false;
-               while(i<repURLs.size()){
-                       try {
-                               String repURL = repURLs.get(0);
-                               client.connect(repURL.substring(0, repURL.indexOf(repURL.split(":[0-9]+\\/nexus")[1])), repUserName, repPassword);
-                               final NexusArtifact template = new NexusArtifact();
-                               template.setGroupId(getGroupID(selectedName));
-                               template.setArtifactId(getArtifactID(selectedName));
-                               if(version!=null){
-                                       template.setVersion(version);
-                               }
-                               List<NexusArtifact> resultList = client.searchByGAV(template);
-                               if(resultList!=null){
-                                       flag = true;
-                                       return resultList;
-                               }
-                       } catch (NexusClientException | NexusConnectionException | NullPointerException e) {
-                               LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Connection to remote Nexus has failed. " +e.getMessage());
-                       } finally {
-                               try {
-                                       client.disconnect();
-                               } catch (NexusClientException | NexusConnectionException e) {
-                                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "failed to disconnect Connection from Nexus." +e.getMessage());
-                               }
-                               if(!flag){
-                                       Collections.rotate(repURLs, -1);
-                                       i++;
-                               }
-                       }
-               }
-               return new ArrayList<>();
-       }
-
-       private void setVersion(String selectedName) {
-               String newVersion = "0.1.0";
-               createFlag = false;
-               NexusArtifact artifact = getLatestArtifactFromNexus(selectedName);
-               if(artifact!=null){
-                       newVersion = incrementVersion(artifact.getVersion());
-               }
-               if(newVersion.equals("0.1.0")){
-                       createFlag = true;
-               }
-               setVersion(newVersion, selectedName);
+        return artifact.isEmpty() ? result : additionalNexusLatestCheck(selectedName, artifact.get(0));
+    }
+
+    private boolean checkRemoteSync(String selectedName, String version) {
+        List<NexusArtifact> artifacts = getArtifactFromNexus(selectedName, version);
+        return (artifacts.size() == 0) ? false : true;
+    }
+
+    private List<NexusArtifact> getArtifactFromNexus(String selectedName, String version) {
+        final NexusClient client = new NexusRestClient();
+        int i = 0;
+        boolean flag = false;
+        while (i < repURLs.size()) {
+            try {
+                String repURL = repURLs.get(0);
+                client.connect(repURL.substring(0, repURL.indexOf(repURL.split(":[0-9]+\\/nexus")[1])), repUserName,
+                        repPassword);
+                final NexusArtifact template = new NexusArtifact();
+                template.setGroupId(getGroupID(selectedName));
+                template.setArtifactId(getArtifactID(selectedName));
+                if (version != null) {
+                    template.setVersion(version);
+                }
+                List<NexusArtifact> resultList = client.searchByGAV(template);
+                if (resultList != null) {
+                    flag = true;
+                    return resultList;
+                }
+            } catch (NexusClientException | NexusConnectionException | NullPointerException e) {
+                LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Connection to remote Nexus has failed. "
+                        + e.getMessage(), e);
+            } finally {
+                try {
+                    client.disconnect();
+                } catch (NexusClientException | NexusConnectionException e) {
+                    LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "failed to disconnect Connection from Nexus."
+                            + e.getMessage(), e);
+                }
+                if (!flag) {
+                    Collections.rotate(repURLs, -1);
+                    i++;
+                }
+            }
+        }
+        return new ArrayList<>();
+    }
+
+    private void setVersion(String selectedName) {
+        String newVersion = "0.1.0";
+        createFlag = false;
+        NexusArtifact artifact = getLatestArtifactFromNexus(selectedName);
+        if (artifact != null) {
+            newVersion = incrementVersion(artifact.getVersion());
+        }
+        if (newVersion.equals("0.1.0")) {
+            createFlag = true;
+        }
+        setVersion(newVersion, selectedName);
         LOGGER.info("Controller: " + selectedName + "is on version: " + newVersion);
-       }
+    }
 
-       private String incrementVersion(String version) {
-               int majorVal = Integer.parseInt(version.substring(0, version.indexOf(".")));
-               int minorVal = Integer.parseInt(version.substring(version.indexOf(".")+1,version.lastIndexOf(".")));
-               if (minorVal >= 9) {
+    private String incrementVersion(String version) {
+        int majorVal = Integer.parseInt(version.substring(0, version.indexOf(".")));
+        int minorVal = Integer.parseInt(version.substring(version.indexOf(".") + 1, version.lastIndexOf(".")));
+        if (minorVal >= 9) {
             majorVal += 1;
             minorVal = 0;
         } else {
             minorVal += 1;
         }
-               return majorVal + "." + minorVal + version.substring(version.lastIndexOf("."));
-       }
-
-       private boolean checkProject(String selectedName) {
-               return new File(PROJECTSLOCATION + File.separator + getDirectoryName(selectedName)).exists();
-       }
-
-       private String getDirectoryName(String selectedName) {
-               return getArtifactID(selectedName);
-       }
-
-       /**
-        * Will Push policies to the PolicyRepo. 
-        * 
-        * @param notificationType <String> type of notification Type. 
-        * @throws PolicyException 
-        */
-       public void pushRules() throws PolicyException{
-               // Check how many groups have been updated. 
-               // Invoke their Maven process.
-               try {
-                       im.startTransaction();
-               } catch (AdministrativeStateException e) {
-                       LOGGER.error("Error while starting Transaction " + e);
-               } catch (Exception e) {
-                       LOGGER.error("Error while starting Transaction " + e);
-               }
-               if(!modifiedGroups.isEmpty()){
-                       Boolean flag = false;
-                       for(String group: modifiedGroups.keySet()){
-                               InvocationResult result = null;
-                               try{
-                                       InvocationRequest request = new DefaultInvocationRequest();
-                                       setVersion(group);
-                                       createPom(group);
-                                       request.setPomFile(new File(PROJECTSLOCATION+File.separator+getArtifactID(group)+File.separator+"pom.xml"));
-                                       request.setGoals(Arrays.asList(GOALS));
-                                       Invoker invoker = new DefaultInvoker();
-                                       result = invoker.execute(request);
-                                       if(result.getExecutionException()!=null){
-                                               LOGGER.error(result.getExecutionException());
-                                       }else if(result.getExitCode()!=0){
-                                               LOGGER.error("Maven Invocation failure..!");
-                                       }
-                               }catch(Exception e){
-                                       LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Maven Invocation issue for "+getArtifactID(group) + e.getMessage());
-                               }
-                               if(result!=null && result.getExitCode()==0){
-                                       LOGGER.info("Build Completed..!");
-                                       if (createFlag) {
-                                               addNotification(group, "create");
-                                       }else{
-                                               addNotification(group, modifiedGroups.get(group));
-                                       }
-                                       flag = true;
-                               }else{
-                                       throw new PolicyException(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Maven Invocation failure!");
-                               }
-                       }
-                       if(flag){
-                               sendNotification(controllers);
-               }
-               }
-               if(im!=null){
-                       im.endTransaction();
-               }
-       }
-
-       /**
-        * Removes a Rule from Rule Projects. 
-        */
-       public void removeRule(String name){
-               String controllerName = getGroupName(name);
-               if(controllerName==null){
-                       LOGGER.info("Error finding the controllerName for the given Policy: " + name);
-                       return;
-               }
-               syncProject(controllerName);
-               getNameAndSetRemove(controllerName, name);
-       }
-
-       private String getGroupName(String name) {
-               if(policyMap.containsKey(name)){
-                       return policyMap.get(name);
-               }else{
-                       syncGroupInfo();
-                       return (policyMap.containsKey(name)) ? policyMap.get(name):null;
-               }
-       }
-
-       private void addModifiedGroup(String controllerName, String operation) {
-        if(controllerName!=null){
+        return majorVal + "." + minorVal + version.substring(version.lastIndexOf("."));
+    }
+
+    private boolean checkProject(String selectedName) {
+        return new File(PROJECTSLOCATION + File.separator + getDirectoryName(selectedName)).exists();
+    }
+
+    private String getDirectoryName(String selectedName) {
+        return getArtifactID(selectedName);
+    }
+
+    /**
+     * Will Push policies to the PolicyRepo.
+     * 
+     * @param notificationType
+     *            <String> type of notification Type.
+     * @throws PolicyException
+     */
+    public void pushRules() throws PolicyException {
+        // Check how many groups have been updated.
+        // Invoke their Maven process.
+        try {
+            im.startTransaction();
+        } catch (AdministrativeStateException e) {
+            LOGGER.error("Error while starting Transaction " + e);
+        } catch (Exception e) {
+            LOGGER.error("Error while starting Transaction " + e);
+        }
+        if (!modifiedGroups.isEmpty()) {
+            Boolean flag = false;
+            for (String group : modifiedGroups.keySet()) {
+                InvocationResult result = null;
+                try {
+                    InvocationRequest request = new DefaultInvocationRequest();
+                    setVersion(group);
+                    createPom(group);
+                    request.setPomFile(new File(
+                            PROJECTSLOCATION + File.separator + getArtifactID(group) + File.separator + "pom.xml"));
+                    request.setGoals(Arrays.asList(GOALS));
+                    Invoker invoker = new DefaultInvoker();
+                    result = invoker.execute(request);
+                    if (result.getExecutionException() != null) {
+                        LOGGER.error(result.getExecutionException());
+                    } else if (result.getExitCode() != 0) {
+                        LOGGER.error("Maven Invocation failure..!");
+                    }
+                } catch (Exception e) {
+                    LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Maven Invocation issue for "
+                            + getArtifactID(group) + e.getMessage(), e);
+                }
+                if (result != null && result.getExitCode() == 0) {
+                    LOGGER.info("Build Completed..!");
+                    if (createFlag) {
+                        addNotification(group, "create");
+                    } else {
+                        addNotification(group, modifiedGroups.get(group));
+                    }
+                    flag = true;
+                } else {
+                    throw new PolicyException(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Maven Invocation failure!");
+                }
+            }
+            if (flag) {
+                sendNotification(controllers);
+            }
+        }
+        if (im != null) {
+            im.endTransaction();
+        }
+    }
+
+    /**
+     * Removes a Rule from Rule Projects.
+     */
+    public void removeRule(String name) {
+        String controllerName = getGroupName(name);
+        if (controllerName == null) {
+            LOGGER.info("Error finding the controllerName for the given Policy: " + name);
+            return;
+        }
+        syncProject(controllerName);
+        getNameAndSetRemove(controllerName, name);
+    }
+
+    private String getGroupName(String name) {
+        if (policyMap.containsKey(name)) {
+            return policyMap.get(name);
+        } else {
+            syncGroupInfo();
+            return (policyMap.containsKey(name)) ? policyMap.get(name) : null;
+        }
+    }
+
+    private void addModifiedGroup(String controllerName, String operation) {
+        if (controllerName != null) {
             modifiedGroups.put(controllerName, operation);
         }
     }
 
-       private void addNotification(String controllerName, String operation) {
+    private void addNotification(String controllerName, String operation) {
         ControllerPOJO controllerPOJO = new ControllerPOJO();
         controllerPOJO.setName(controllerName);
         controllerPOJO.setOperation(operation);
@@ -770,338 +808,341 @@ public class BRMSPush {
         controllerPOJO.setDrools(drools);
         controllers.add(controllerPOJO);
         try {
-               LOGGER.debug("Notification added: "
-                               + PolicyUtils.objectToJsonString(controllerPOJO));
+            LOGGER.debug("Notification added: " + PolicyUtils.objectToJsonString(controllerPOJO));
         } catch (JsonProcessingException e) {
-               LOGGER.error(MessageCodes.ERROR_SCHEMA_INVALID
-                               + "Json Processing Error " + e);
+            LOGGER.error(MessageCodes.ERROR_SCHEMA_INVALID + "Json Processing Error " + e);
         }
     }
 
-       private void removedRuleModifiedGroup(String controllerName){
-               // This will be sending Notification to PDPD directly to Lock
-               ControllerPOJO controllerPOJO = new ControllerPOJO();
-               controllerPOJO.setName(controllerName);
-               controllerPOJO.setOperation("lock");
-               List<ControllerPOJO> controllers = new ArrayList<>();
-               controllers.add(controllerPOJO);
-               sendNotification(controllers);
-       }
-
-       private void sendNotification(List<ControllerPOJO> controllers){
-               NotificationPOJO notification = new NotificationPOJO();
-               String requestId = UUID.randomUUID().toString();
-               LOGGER.info("Generating notification RequestID : " + requestId);
-               notification.setRequestID(requestId);
-               notification.setEntity("controller");
-               notification.setControllers(controllers);
-               try {
-                       String notificationJson = PolicyUtils.objectToJsonString(notification);
-                       LOGGER.info("Sending Notification :\n" + notificationJson);
-                       sendMessage(notificationJson);
-               } catch (Exception e) {
-                       LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while sending notification to PDP-D " + e.getMessage());
-               }
-       }
-
-       private void sendMessage(String message) throws IOException, GeneralSecurityException, InterruptedException {
-               
-               if("dmaap".equalsIgnoreCase(notificationType)) {
-                       // Sending Message through DMaaP Message Router
-                       LOGGER.debug("DMAAP Publishing Message");
-                       
-                       publisher.send( "MyPartitionKey", message);
-                       
-                       LOGGER.debug("Message Published on DMaaP :" + dmaapList.get(0) + "for Topic: " + pubTopic);
-                       
-                       Thread.sleep(dmaapDelay);
-                       publisher.close();
-               } else {
-                       // Sending Message through UEB interface.
-                       LOGGER.debug("UEB Publishing Message");
-                       
-                       CambriaBatchingPublisher pub = pubBuilder.build();
-                       pub.send( "MyPartitionKey", message);
-                       
-                       final List<?> stuck = pub.close ( uebDelay, TimeUnit.SECONDS );
-                       if ( stuck.size () > 0 ) {
-                               LOGGER.error ( stuck.size() + " messages unsent" );
-                       }else {
-                               LOGGER.debug ( "Clean exit; Message Published on UEB : " + uebList + "for Topic: " + pubTopic );
-                       }
-               }
-
-       }
-
-       private void createPom(String name) {
+    private void removedRuleModifiedGroup(String controllerName) {
+        // This will be sending Notification to PDPD directly to Lock
+        ControllerPOJO controllerPOJO = new ControllerPOJO();
+        controllerPOJO.setName(controllerName);
+        controllerPOJO.setOperation("lock");
+        List<ControllerPOJO> controllers = new ArrayList<>();
+        controllers.add(controllerPOJO);
+        sendNotification(controllers);
+    }
+
+    private void sendNotification(List<ControllerPOJO> controllers) {
+        NotificationPOJO notification = new NotificationPOJO();
+        String requestId = UUID.randomUUID().toString();
+        LOGGER.info("Generating notification RequestID : " + requestId);
+        notification.setRequestID(requestId);
+        notification.setEntity("controller");
+        notification.setControllers(controllers);
+        try {
+            String notificationJson = PolicyUtils.objectToJsonString(notification);
+            LOGGER.info("Sending Notification :\n" + notificationJson);
+            sendMessage(notificationJson);
+        } catch (Exception e) {
+            LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while sending notification to PDP-D "
+                    + e.getMessage(), e);
+        }
+    }
+
+    private void sendMessage(String message) throws IOException, GeneralSecurityException, InterruptedException {
+
+        if ("dmaap".equalsIgnoreCase(notificationType)) {
+            // Sending Message through DMaaP Message Router
+            LOGGER.debug("DMAAP Publishing Message");
+
+            publisher.send("MyPartitionKey", message);
+
+            LOGGER.debug("Message Published on DMaaP :" + dmaapList.get(0) + "for Topic: " + pubTopic);
+
+            Thread.sleep(dmaapDelay);
+            publisher.close();
+        } else {
+            // Sending Message through UEB interface.
+            LOGGER.debug("UEB Publishing Message");
+
+            CambriaBatchingPublisher pub = pubBuilder.build();
+            pub.send("MyPartitionKey", message);
+
+            final List<?> stuck = pub.close(uebDelay, TimeUnit.SECONDS);
+            if (stuck.size() > 0) {
+                LOGGER.error(stuck.size() + " messages unsent");
+            } else {
+                LOGGER.debug("Clean exit; Message Published on UEB : " + uebList + "for Topic: " + pubTopic);
+            }
+        }
+
+    }
+
+    private void createPom(String name) {
         Model model = new Model();
         model.setModelVersion("4.0.0");
         model.setGroupId(getGroupID(name));
         model.setArtifactId(getArtifactID(name));
         model.setVersion(getVersion(name));
         model.setName(name);
-               DistributionManagement distributionManagement = new DistributionManagement();
-               DeploymentRepository repository = new DeploymentRepository();
-               repository.setId(repID);
-               repository.setName(repName);
-               repository.setUrl(repURLs.get(0));
-               distributionManagement.setRepository(repository);
-               model.setDistributionManagement(distributionManagement);
-               // Dependency Management goes here. 
-               List<Dependency> dependencyList= new ArrayList<>();
-               if(groupMap.get(name).size()>1){
-                       @SuppressWarnings("unchecked")
+        DistributionManagement distributionManagement = new DistributionManagement();
+        DeploymentRepository repository = new DeploymentRepository();
+        repository.setId(repID);
+        repository.setName(repName);
+        repository.setUrl(repURLs.get(0));
+        distributionManagement.setRepository(repository);
+        model.setDistributionManagement(distributionManagement);
+        // Dependency Management goes here.
+        List<Dependency> dependencyList = new ArrayList<>();
+        if (groupMap.get(name).size() > 1) {
+            @SuppressWarnings("unchecked")
             ArrayList<PEDependency> dependencies = (ArrayList<PEDependency>) groupMap.get(name).get(1);
-            for(PEDependency dependency: dependencies){
+            for (PEDependency dependency : dependencies) {
                 dependencyList.add(dependency.getDependency());
             }
-               }else{
-                       // Add Default dependencies. 
-                       dependencyList = getDependencies(name);
+        } else {
+            // Add Default dependencies.
+            dependencyList = getDependencies(name);
+        }
+        model.setDependencies(dependencyList);
+        Writer writer = null;
+        try {
+            writer = WriterFactory.newXmlWriter(
+                    new File(PROJECTSLOCATION + File.separator + getArtifactID(name) + File.separator + "pom.xml"));
+            MavenXpp3Writer pomWriter = new MavenXpp3Writer();
+            pomWriter.write(writer, model);
+        } catch (Exception e) {
+            LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while creating POM for " + getArtifactID(name)
+                    + e.getMessage(), e);
+        } finally {
+            IOUtil.close(writer);
+        }
+    }
+
+    private List<Dependency> getDependencies(String controllerName) {
+        // Read the Dependency Information from property file.
+        Path file = Paths.get(DEPENDENCY_FILE);
+        if (!Files.notExists(file)) {
+            try {
+                String dependencyJSON = new String(Files.readAllBytes(file), StandardCharsets.UTF_8);
+                DependencyInfo dependencyInfo = PolicyUtils.jsonStringToObject(dependencyJSON, DependencyInfo.class);
+                String controller = "default";
+                if (dependencyInfo.getDependencies().containsKey(controllerName)) {
+                    controller = controllerName;
+                }
+                List<Dependency> dependencyList = new ArrayList<>();
+                for (PEDependency dependency : dependencyInfo.getDependencies().get(controller)) {
+                    dependencyList.add(dependency.getDependency());
+                }
+                return dependencyList;
+            } catch (IOException | NullPointerException e) {
+                LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW
+                        + "Error while getting dependecy Information for controller: " + controllerName
+                        + e.getMessage(), e);
+            }
         }
-               model.setDependencies(dependencyList);
-               Writer writer = null;
-               try{
-                       writer = WriterFactory.newXmlWriter(new File(PROJECTSLOCATION
-                                       + File.separator + getArtifactID(name) + File.separator
-                                       + "pom.xml"));
-                       MavenXpp3Writer pomWriter = new MavenXpp3Writer();
-                       pomWriter.write(writer, model);
-               }catch(Exception e){
-                       LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW
-                                       + "Error while creating POM for " + getArtifactID(name)
-                                       + e.getMessage());
-               }finally{
-                       IOUtil.close(writer);
-               }
-       }
-       
-       private List<Dependency> getDependencies(String controllerName) {
-               // Read the Dependency Information from property file. 
-               Path file = Paths.get(DEPENDENCY_FILE);
-               if(!Files.notExists(file)){
-                       try {
-                               String dependencyJSON = new String(Files.readAllBytes(file), StandardCharsets.UTF_8);
-                               DependencyInfo dependencyInfo = PolicyUtils.jsonStringToObject(dependencyJSON, DependencyInfo.class);
-                               String controller = "default";
-                               if(dependencyInfo.getDependencies().containsKey(controllerName)){
-                                       controller = controllerName;
-                               }
-                               List<Dependency> dependencyList = new ArrayList<>();
-                               for(PEDependency dependency: dependencyInfo.getDependencies().get(controller)){
-                                       dependencyList.add(dependency.getDependency());
-                               }
-                               return dependencyList;
-                       } catch (IOException| NullPointerException e) {
-                               LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW
-                                               + "Error while getting dependecy Information for controller: " + controllerName
-                                               + e.getMessage());
-                       }
-               }
-               return defaultDependencies(controllerName);
-       }
-       
-       // Default Dependency Section. Can be changed as required. 
-       public List<Dependency> defaultDependencies(String controllerName) {
-               
-               List<Dependency> dependencyList = new ArrayList<>();
-               String version= StringEscapeUtils.escapeJava(brmsdependencyversion);
-
-               Dependency demoDependency = new Dependency();
-               demoDependency.setGroupId("org.onap.policy.drools-applications");
-               demoDependency.setArtifactId("demo");
-               demoDependency.setVersion(version);
-               dependencyList.add(demoDependency);
-
-               Dependency controlloopDependency = new Dependency();
-               controlloopDependency.setGroupId("org.onap.policy.drools-applications");
-               controlloopDependency.setArtifactId("events");
-               controlloopDependency.setVersion(version);
-               dependencyList.add(controlloopDependency);
-
-               Dependency restDependency = new Dependency();
-               restDependency.setGroupId("org.onap.policy.drools-applications");
-               restDependency.setArtifactId("rest");
-               restDependency.setVersion(version);
-               dependencyList.add(restDependency);
-
-               Dependency appcDependency = new Dependency();
-               appcDependency.setGroupId("org.onap.policy.drools-applications");
-               appcDependency.setArtifactId("appc");
-               appcDependency.setVersion(version);
-               dependencyList.add(appcDependency);
-
-               Dependency aaiDependency = new Dependency();
-               aaiDependency.setGroupId("org.onap.policy.drools-applications");
-               aaiDependency.setArtifactId("aai");
-               aaiDependency.setVersion(version);
-               dependencyList.add(aaiDependency);
-
-               Dependency msoDependency = new Dependency();
-               msoDependency.setGroupId("org.onap.policy.drools-applications");
-               msoDependency.setArtifactId("mso");
-               msoDependency.setVersion(version);
-               dependencyList.add(msoDependency);
-
-               Dependency trafficgeneratorDependency = new Dependency();
-               trafficgeneratorDependency.setGroupId("org.onap.policy.drools-applications");
-               trafficgeneratorDependency.setArtifactId("trafficgenerator");
-               trafficgeneratorDependency.setVersion(version); 
-               dependencyList.add(trafficgeneratorDependency);
-               return dependencyList;
-       }
-
-       private void createProject(String path,String ksessionName){
-               new File(path+File.separator+"rules").mkdirs();
-               new File(path+File.separator+"META-INF").mkdirs();
-               if(!Files.exists(Paths.get(path+File.separator+"META-INF"+File.separator+"kmodule.xml"))){
-                       // Hard coding XML for PDP Drools to accept our Rules. 
-                       String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "\n"+  
-                                       "<kmodule xmlns=\"http://jboss.org/kie/6.0.0/kmodule\">" +"\n"+
-                                       "<kbase name=\"rules\" packages=\"rules\">" + "\n" +
-                                       "<ksession name=\""+ ksessionName +"\"/>"+ "\n" + 
-                                       "</kbase></kmodule>";
-                       copyDataToFile(path+File.separator+"META-INF"+File.separator+"kmodule.xml", xml);
-               }
-       }
-
-       private void copyDataToFile(String file, String rule) {
-               try{
-                       FileUtils.writeStringToFile(new File(file), rule);
-               } catch (Exception e) {
-                       LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+"Error while creating Rule for " + file + e.getMessage());
-               }
-       }
-
-       private void readGroups(Properties config) throws PolicyException{
-               String[] groupNames = null;
-               if(config.getProperty("groupNames").contains(",")){
-                       groupNames = config.getProperty("groupNames").replaceAll(" ", "").split(",");
-               }else{
-                       groupNames = new String[]{config.getProperty("groupNames").replaceAll(" ", "")};
-               }
-               if(groupNames==null || groupNames.length==0){
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "groupNames property is missing or empty from the property file ");
-                       throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + "groupNames property is missing or empty from the property file ");
-               }
-               groupMap = new HashMap<>();
-               for(int counter=0; counter < groupNames.length ;counter++){
-                       String name = groupNames[counter];
-                       String groupID = config.getProperty(name+".groupID");
-                       if(groupID==null){
-                               LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + name+".groupID property is missing from the property file ");
-                               throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + name+".groupID property is missing from the property file ");
-                       }
-                       String artifactID = config.getProperty(name+".artifactID");
-                       if(artifactID==null){
-                               LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + name+".artifactID property is missing from the property file ");
-                               throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + name+".artifactID property is missing from the property file ");
-                       }
-                       PEDependency dependency = new PEDependency();
-                       dependency.setArtifactId(artifactID);
-                       dependency.setGroupId(groupID);
-                       // Add to list if we got all
-                       addToGroup(name,dependency);
-               }
-       }
-
-       private void addToGroup(String name, PEDependency dependency) {
-               ArrayList<Object> values = new ArrayList<>();
+        return defaultDependencies(controllerName);
+    }
+
+    // Default Dependency Section. Can be changed as required.
+    public List<Dependency> defaultDependencies(String controllerName) {
+
+        List<Dependency> dependencyList = new ArrayList<>();
+        String version = StringEscapeUtils.escapeJava(brmsdependencyversion);
+
+        Dependency demoDependency = new Dependency();
+        demoDependency.setGroupId("org.onap.policy.drools-applications");
+        demoDependency.setArtifactId("demo");
+        demoDependency.setVersion(version);
+        dependencyList.add(demoDependency);
+
+        Dependency controlloopDependency = new Dependency();
+        controlloopDependency.setGroupId("org.onap.policy.drools-applications");
+        controlloopDependency.setArtifactId("events");
+        controlloopDependency.setVersion(version);
+        dependencyList.add(controlloopDependency);
+
+        Dependency restDependency = new Dependency();
+        restDependency.setGroupId("org.onap.policy.drools-applications");
+        restDependency.setArtifactId("rest");
+        restDependency.setVersion(version);
+        dependencyList.add(restDependency);
+
+        Dependency appcDependency = new Dependency();
+        appcDependency.setGroupId("org.onap.policy.drools-applications");
+        appcDependency.setArtifactId("appc");
+        appcDependency.setVersion(version);
+        dependencyList.add(appcDependency);
+
+        Dependency aaiDependency = new Dependency();
+        aaiDependency.setGroupId("org.onap.policy.drools-applications");
+        aaiDependency.setArtifactId("aai");
+        aaiDependency.setVersion(version);
+        dependencyList.add(aaiDependency);
+
+        Dependency msoDependency = new Dependency();
+        msoDependency.setGroupId("org.onap.policy.drools-applications");
+        msoDependency.setArtifactId("mso");
+        msoDependency.setVersion(version);
+        dependencyList.add(msoDependency);
+
+        Dependency trafficgeneratorDependency = new Dependency();
+        trafficgeneratorDependency.setGroupId("org.onap.policy.drools-applications");
+        trafficgeneratorDependency.setArtifactId("trafficgenerator");
+        trafficgeneratorDependency.setVersion(version);
+        dependencyList.add(trafficgeneratorDependency);
+        return dependencyList;
+    }
+
+    private void createProject(String path, String ksessionName) {
+        new File(path + File.separator + "rules").mkdirs();
+        new File(path + File.separator + "META-INF").mkdirs();
+        if (!Files.exists(Paths.get(path + File.separator + "META-INF" + File.separator + "kmodule.xml"))) {
+            // Hard coding XML for PDP Drools to accept our Rules.
+            String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "\n"
+                    + "<kmodule xmlns=\"http://jboss.org/kie/6.0.0/kmodule\">" + "\n"
+                    + "<kbase name=\"rules\" packages=\"rules\">" + "\n" + "<ksession name=\"" + ksessionName + "\"/>"
+                    + "\n" + "</kbase></kmodule>";
+            copyDataToFile(path + File.separator + "META-INF" + File.separator + "kmodule.xml", xml);
+        }
+    }
+
+    private void copyDataToFile(String file, String rule) {
+        try {
+            FileUtils.writeStringToFile(new File(file), rule);
+        } catch (Exception e) {
+            LOGGER.error(
+                    XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while creating Rule for " + file + e.getMessage(),
+                    e);
+        }
+    }
+
+    private void readGroups(Properties config) throws PolicyException {
+        String[] groupNames = null;
+        if (config.getProperty("groupNames").contains(",")) {
+            groupNames = config.getProperty("groupNames").replaceAll(" ", "").split(",");
+        } else {
+            groupNames = new String[] { config.getProperty("groupNames").replaceAll(" ", "") };
+        }
+        if (groupNames == null || groupNames.length == 0) {
+            LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE
+                    + "groupNames property is missing or empty from the property file ");
+            throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE
+                    + "groupNames property is missing or empty from the property file ");
+        }
+        groupMap = new HashMap<>();
+        for (int counter = 0; counter < groupNames.length; counter++) {
+            String name = groupNames[counter];
+            String groupID = config.getProperty(name + ".groupID");
+            if (groupID == null) {
+                LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + name
+                        + ".groupID property is missing from the property file ");
+                throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + name
+                        + ".groupID property is missing from the property file ");
+            }
+            String artifactID = config.getProperty(name + ".artifactID");
+            if (artifactID == null) {
+                LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + name
+                        + ".artifactID property is missing from the property file ");
+                throw new PolicyException(XACMLErrorConstants.ERROR_DATA_ISSUE + name
+                        + ".artifactID property is missing from the property file ");
+            }
+            PEDependency dependency = new PEDependency();
+            dependency.setArtifactId(artifactID);
+            dependency.setGroupId(groupID);
+            // Add to list if we got all
+            addToGroup(name, dependency);
+        }
+    }
+
+    private void addToGroup(String name, PEDependency dependency) {
+        ArrayList<Object> values = new ArrayList<>();
         values.add(dependency);
-               groupMap.put(name, values);
-               EntityTransaction et = em.getTransaction();
-               et.begin();
-               Query query = em.createQuery("select b from BRMSGroupInfo as b where b.controllerName = :cn");
-               query.setParameter("cn", name);
-               List<?> groupList = query.getResultList();
-               BRMSGroupInfo brmsGroupInfo = null;
-               if(groupList.size()>0){
-                       LOGGER.info("Controller name already Existing in DB. Will be updating the DB Values" + name);
-                       brmsGroupInfo = (BRMSGroupInfo) groupList.get(0);
-               }
-               if(brmsGroupInfo==null){
-                       brmsGroupInfo = new BRMSGroupInfo();
-               }
-               brmsGroupInfo.setControllerName(name);
-               brmsGroupInfo.setGroupId(dependency.getGroupId());
-               brmsGroupInfo.setArtifactId(dependency.getArtifactId());
-               brmsGroupInfo.setVersion(dependency.getVersion());
-               em.persist(brmsGroupInfo);
-               em.flush();
-               et.commit();
-       }
-
-       private String getArtifactID(String name){
+        groupMap.put(name, values);
+        EntityTransaction et = em.getTransaction();
+        et.begin();
+        Query query = em.createQuery("select b from BRMSGroupInfo as b where b.controllerName = :cn");
+        query.setParameter("cn", name);
+        List<?> groupList = query.getResultList();
+        BRMSGroupInfo brmsGroupInfo = null;
+        if (groupList.size() > 0) {
+            LOGGER.info("Controller name already Existing in DB. Will be updating the DB Values" + name);
+            brmsGroupInfo = (BRMSGroupInfo) groupList.get(0);
+        }
+        if (brmsGroupInfo == null) {
+            brmsGroupInfo = new BRMSGroupInfo();
+        }
+        brmsGroupInfo.setControllerName(name);
+        brmsGroupInfo.setGroupId(dependency.getGroupId());
+        brmsGroupInfo.setArtifactId(dependency.getArtifactId());
+        brmsGroupInfo.setVersion(dependency.getVersion());
+        em.persist(brmsGroupInfo);
+        em.flush();
+        et.commit();
+    }
+
+    private String getArtifactID(String name) {
         return ((PEDependency) groupMap.get(name).get(0)).getArtifactId();
     }
-    
-    private String getGroupID(String name){
+
+    private String getGroupID(String name) {
         return ((PEDependency) groupMap.get(name).get(0)).getGroupId();
     }
-    
-    private String getVersion(String name){
+
+    private String getVersion(String name) {
         return ((PEDependency) groupMap.get(name).get(0)).getVersion();
     }
 
     private void getNameAndSetRemove(String controllerName, String policyName) {
         String artifactName = getArtifactID(controllerName);
-        String ruleFolder= PROJECTSLOCATION + File.separator
-                + artifactName + File.separator + "src"
-                + File.separator + "main" + File.separator
-                + "resources" + File.separator + "rules";
-        File file = new File(ruleFolder+File.separator+ policyName +".drl");
-        if(file.delete()){
-               LOGGER.info("Deleted File.. " + file.getAbsolutePath());
-               removePolicyFromGroup(policyName, controllerName);
+        String ruleFolder = PROJECTSLOCATION + File.separator + artifactName + File.separator + "src" + File.separator
+                + "main" + File.separator + "resources" + File.separator + "rules";
+        File file = new File(ruleFolder + File.separator + policyName + ".drl");
+        if (file.delete()) {
+            LOGGER.info("Deleted File.. " + file.getAbsolutePath());
+            removePolicyFromGroup(policyName, controllerName);
         }
-        if(new File(ruleFolder).listFiles().length == 0) {
+        if (new File(ruleFolder).listFiles().length == 0) {
             removedRuleModifiedGroup(controllerName);
         } else {
             // This is an update in terms of PDPD.
             addModifiedGroup(controllerName, "update");
         }
     }
-       
-    // Removes Policy from Memory and Database. 
-       private void removePolicyFromGroup(String policyName, String controllerName) {
-               policyMap.remove(policyName);
-               EntityTransaction et = em.getTransaction();
-               et.begin();
-               Query query = em.createQuery("select b from BRMSPolicyInfo as b where b.policyName = :pn");
-               query.setParameter("pn", policyName);
-               List<?> pList = query.getResultList();
-               BRMSPolicyInfo brmsPolicyInfo = new BRMSPolicyInfo();
-               if(pList.size()>0){
-                       // Already exists. 
-                       brmsPolicyInfo = (BRMSPolicyInfo) pList.get(0);
-                       if(brmsPolicyInfo.getControllerName().getControllerName().equals(controllerName)){
-                               em.remove(brmsPolicyInfo);
-                               em.flush();
-                       }
-               }
-               et.commit();
-       }
-       
-       private void setVersion(String newVersion, String controllerName) {
+
+    // Removes Policy from Memory and Database.
+    private void removePolicyFromGroup(String policyName, String controllerName) {
+        policyMap.remove(policyName);
+        EntityTransaction et = em.getTransaction();
+        et.begin();
+        Query query = em.createQuery("select b from BRMSPolicyInfo as b where b.policyName = :pn");
+        query.setParameter("pn", policyName);
+        List<?> pList = query.getResultList();
+        BRMSPolicyInfo brmsPolicyInfo = new BRMSPolicyInfo();
+        if (pList.size() > 0) {
+            // Already exists.
+            brmsPolicyInfo = (BRMSPolicyInfo) pList.get(0);
+            if (brmsPolicyInfo.getControllerName().getControllerName().equals(controllerName)) {
+                em.remove(brmsPolicyInfo);
+                em.flush();
+            }
+        }
+        et.commit();
+    }
+
+    private void setVersion(String newVersion, String controllerName) {
         PEDependency userController = (PEDependency) groupMap.get(controllerName).get(0);
         userController.setVersion(newVersion);
         groupMap.get(controllerName).set(0, userController);
     }
 
-       // Return BackUpMonitor 
-       public static BackUpMonitor getBackUpMonitor(){
-               return bm;
-       }
-       
-       public void rotateURLs() {
-               if(repURLs!=null){
-                       Collections.rotate(repURLs, -1);
-               }
-       }
-
-       public int URLListSize() {
-               if(repURLs!=null){
-                       return repURLs.size();
-               }else return 0;
-       }
+    // Return BackUpMonitor
+    public static BackUpMonitor getBackUpMonitor() {
+        return bm;
+    }
+
+    public void rotateURLs() {
+        if (repURLs != null) {
+            Collections.rotate(repURLs, -1);
+        }
+    }
+
+    public int URLListSize() {
+        if (repURLs != null) {
+            return repURLs.size();
+        } else
+            return 0;
+    }
 }
index 53d801b..e11538c 100644 (file)
@@ -128,10 +128,10 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
         * The CopyOnWriteArrayList *should* protect from concurrency errors.
         * This list is seldom changed but often read, so the costs of this approach make sense.
         */
-       private static final CopyOnWriteArrayList<String> adminConsoleURLStringList = new CopyOnWriteArrayList<String>();       
+       private static final CopyOnWriteArrayList<String> adminConsoleURLStringList = new CopyOnWriteArrayList<>();     
        
-       private static String CONFIG_HOME;
-       private static String ACTION_HOME;
+       private static String configHome;
+       private static String actionHome;
        /*
         * This PAP instance's own URL.
         * Need this when creating URLs to send to the PDPs so they can GET the Policy files from this process. 
@@ -155,26 +155,13 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
        private static String papDbUrl = null;
        private static String papDbUser = null;
        private static String papDbPassword = null;
-       private static Integer papTransWait = null;
-       private static Integer papTransTimeout = null;
-       private static Integer papAuditTimeout = null;
-       private static Boolean papAuditFlag = null;
-       private static Boolean papFileSystemAudit = null;
        private static String papResourceName = null;
-       private static Integer fpMonitorInterval = null; 
-       private static Integer failedCounterThreshold = null;
-       private static Integer testTransInterval = null;
-       private static Integer writeFpcInterval = null;
-       private static String papSiteName=null;
-       private static String papNodeType=null; 
-       private static String papDependencyGroups = null;
        private static String[] papDependencyGroupsFlatArray = null;
        private static String environment = null;
        private static String pdpFile = null;
        
-       private String storedRequestId = null;
-       private IntegrityMonitor im;
-       private IntegrityAudit ia;
+       private transient IntegrityMonitor im;
+       private transient IntegrityAudit ia;
        
        //MicroService Model Properties
        private static String msOnapName;
@@ -183,8 +170,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
         * This thread may be invoked upon startup to initiate sending PDP policy/pip configuration when
         * this servlet starts. Its configurable by the admin.
         */
-       private Thread initiateThread = null;
-       private ONAPLoggingContext baseLoggingContext = null;
+       private transient static Thread initiateThread = null;
+       private transient ONAPLoggingContext baseLoggingContext = null;
        
        /**
         * @see HttpServlet#HttpServlet()
@@ -205,7 +192,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                                String hostname = InetAddress.getLocalHost().getCanonicalHostName();
                                baseLoggingContext.setServer(hostname);
                        } catch (UnknownHostException e) {
-                               LOGGER.warn(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Unable to get hostname for logging");
+                               LOGGER.warn(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Unable to get hostname for logging", e);
                        }
                        // Initialize
                        XACMLRest.xacmlInit(config);
@@ -214,87 +201,36 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                        /*
                         * Retrieve the property values
                         */
-                       CONFIG_HOME = getConfigHome();
-                       ACTION_HOME = getActionHome();
-                       papDbDriver = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_DRIVER);
-                       if(papDbDriver == null){
-                               PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papDbDriver property entry");
-                               throw new PAPException("papDbDriver is null");
-                       }
-                       setPapDbDriver(papDbDriver);
-                       papDbUrl = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_URL);
-                       if(papDbUrl == null){
-                               PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papDbUrl property entry");
-                               throw new PAPException("papDbUrl is null");
-                       }
-                       setPapDbUrl(papDbUrl);
-                       papDbUser = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_USER);
-                       if(papDbUser == null){
-                               PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papDbUser property entry");
-                               throw new PAPException("papDbUser is null");
-                       }
-                       setPapDbUser(papDbUser);
-                       papDbPassword = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_PASSWORD);
-                       if(papDbPassword == null){
-                               PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papDbPassword property entry");
-                               throw new PAPException("papDbPassword is null");
-                       }
-                       setPapDbPassword(papDbPassword);
-                       papResourceName = XACMLProperties.getProperty(XACMLRestProperties.PAP_RESOURCE_NAME);
-                       if(papResourceName == null){
-                               PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papResourceName property entry");
-                               throw new PAPException("papResourceName is null");
-                       }
-                       papSiteName = XACMLProperties.getProperty(XACMLRestProperties.PAP_SITE_NAME);
+                       setCommonProperties();
+                       String papSiteName = XACMLProperties.getProperty(XACMLRestProperties.PAP_SITE_NAME);
                        if(papSiteName == null){
                                PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papSiteName property entry");
                                throw new PAPException("papSiteName is null");
                        }
-                       papNodeType = XACMLProperties.getProperty(XACMLRestProperties.PAP_NODE_TYPE);
+                       String papNodeType = XACMLProperties.getProperty(XACMLRestProperties.PAP_NODE_TYPE);
                        if(papNodeType == null){
                                PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papNodeType property entry");
                                throw new PAPException("papNodeType is null");
                        }
-                       environment = XACMLProperties.getProperty("ENVIRONMENT", "DEVL");
                        //Integer will throw an exception of anything is missing or unrecognized
-                       papTransWait = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_WAIT));
-                       papTransTimeout = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_TIMEOUT));
-                       papAuditTimeout = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_AUDIT_TIMEOUT));
+                       int papTransWait = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_WAIT));
+                       int papTransTimeout = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_TRANS_TIMEOUT));
+                       int papAuditTimeout = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_AUDIT_TIMEOUT));
                        //Boolean will default to false if anything is missing or unrecognized
-                       papAuditFlag = Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_RUN_AUDIT_FLAG));
-                       papFileSystemAudit = Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_AUDIT_FLAG));
-                       papDependencyGroups = XACMLProperties.getProperty(XACMLRestProperties.PAP_DEPENDENCY_GROUPS);
+                       boolean papAuditFlag = Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_RUN_AUDIT_FLAG));
+                       boolean papFileSystemAudit = Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_AUDIT_FLAG));
+                       String papDependencyGroups = XACMLProperties.getProperty(XACMLRestProperties.PAP_DEPENDENCY_GROUPS);
                        if(papDependencyGroups == null){
                                throw new PAPException("papDependencyGroups is null");
                        }
-                       try{
-                               //Now we have flattened the array into a simple comma-separated list
-                               papDependencyGroupsFlatArray = papDependencyGroups.split("[;,]");
-                               //clean up the entries
-                               for (int i = 0 ; i < papDependencyGroupsFlatArray.length ; i ++){
-                                       papDependencyGroupsFlatArray[i] = papDependencyGroupsFlatArray[i].trim();
-                               }
-                               try{
-                                       if(XACMLProperties.getProperty(XACMLRestProperties.PAP_INTEGRITY_AUDIT_PERIOD_SECONDS) != null){
-                                               papIntegrityAuditPeriodSeconds = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PAP_INTEGRITY_AUDIT_PERIOD_SECONDS).trim());
-                                       }
-                               }catch(Exception e){
-                                       String msg = "integrity_audit_period_seconds ";
-                                       LOGGER.error("\n\nERROR: " + msg + "Bad property entry: " + e.getMessage() + "\n");
-                                       PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "XACMLPapServlet", " ERROR: " + msg +"Bad property entry");
-                                       throw e;
-                               }
-                       }catch(Exception e){
-                               PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "XACMLPapServlet", " ERROR: Bad property entry");
-                               throw e;
-                       }
+                       setPAPDependencyGroups(papDependencyGroups);
                        //Integer will throw an exception of anything is missing or unrecognized
-                       fpMonitorInterval = Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.FP_MONITOR_INTERVAL));
-                       failedCounterThreshold = Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.FAILED_COUNTER_THRESHOLD));
-                       testTransInterval = Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.TEST_TRANS_INTERVAL));
-                       writeFpcInterval = Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.WRITE_FPC_INTERVAL));
+                       int fpMonitorInterval = Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.FP_MONITOR_INTERVAL));
+                       int failedCounterThreshold = Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.FAILED_COUNTER_THRESHOLD));
+                       int testTransInterval = Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.TEST_TRANS_INTERVAL));
+                       int writeFpcInterval = Integer.parseInt(XACMLProperties.getProperty(IntegrityMonitorProperties.WRITE_FPC_INTERVAL));
                        LOGGER.debug("\n\n\n**************************************"
-                                       + "\n**************************************"
+                                       + "\n*************************************"
                                        + "\n"
                                        + "\n   papDbDriver = " + papDbDriver
                                        + "\n   papDbUrl = " + papDbUrl
@@ -314,7 +250,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                                        + "\n   papNodeType = " + papNodeType
                                        + "\n   papDependencyGroupsList = " + papDependencyGroups
                                        + "\n   papIntegrityAuditPeriodSeconds = " + papIntegrityAuditPeriodSeconds
-                                       + "\n\n**************************************"
+                                       + "\n\n*************************************"
                                        + "\n**************************************");
                        // Pull custom persistence settings
                        Properties properties;
@@ -330,39 +266,22 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                                                + "XACMLProperties.getProperties()");
                                throw new ServletException(e.getMessage(), e.getCause());
                        }
-                       //Micro Service Properties
-                       msOnapName=properties.getProperty("xacml.policy.msOnapName");
-                       setMsOnapName(msOnapName);
-                       msPolicyName=properties.getProperty("xacml.policy.msPolicyName");
-                       setMsPolicyName(msPolicyName);
-                       // PDPId File location 
-                       XACMLPapServlet.pdpFile = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_IDFILE);
-                       if (XACMLPapServlet.pdpFile == null) {
-                               PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " The PDP Id Authentication File Property is not valid: "
-                                       + XACMLRestProperties.PROP_PDP_IDFILE);
-                               throw new PAPException("The PDP Id Authentication File Property :"+ XACMLRestProperties.PROP_PDP_IDFILE+ " is not Valid. ");
-                       }
                        // Create an IntegrityMonitor
                        im = IntegrityMonitor.getInstance(papResourceName,properties);
                        // Create an IntegrityAudit
                        ia = new IntegrityAudit(papResourceName, AUDIT_PAP_PERSISTENCE_UNIT, properties);
                        ia.startAuditThread();
                        // Create the entity manager factory
-                       emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT, properties);
-                       if (emf == null) {
-                               PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Error creating entity manager factory with persistence unit: "
-                                               + PERSISTENCE_UNIT);
-                               throw new ServletException("Unable to create Entity Manager Factory");
-                       }
+                       setEMF(properties);
                        // we are about to call the PDPs and give them their configuration.
                        // To do that we need to have the URL of this PAP so we can construct the Policy file URLs
-                       XACMLPapServlet.papURL = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL);
+                       setPAPURL(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL));
                        //Create the policyDBDao
-                       policyDBDao = PolicyDBDao.getPolicyDBDaoInstance(getEmf());
+                       setPolicyDBDao();
                        // Load our PAP engine, first create a factory
                        ONAPPapEngineFactory factory = ONAPPapEngineFactory.newInstance(XACMLProperties.getProperty(XACMLProperties.PROP_PAP_PAPENGINEFACTORY));
                        // The factory knows how to go about creating a PAP Engine
-                       XACMLPapServlet.papEngine = (PAPPolicyEngine) factory.newEngine();
+                       setPAPEngine((PAPPolicyEngine) factory.newEngine());
                        PolicyDBDaoTransaction addNewGroup = null;
                        try{
                                if(((org.onap.policy.xacml.std.pap.StdEngine)papEngine).wasDefaultGroupJustAdded){
@@ -381,7 +300,6 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                                }
                        }
                        policyDBDao.setPapEngine((PAPPolicyEngine) XACMLPapServlet.papEngine);
-                       //boolean performFileToDatabaseAudit = false;
                if (Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_RUN_AUDIT_FLAG))){
                        //get an AuditTransaction to lock out all other transactions
                        PolicyDBDaoTransaction auditTrans = policyDBDao.getNewAuditTransaction();
@@ -397,13 +315,10 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                        // Configurable - have the PAP servlet initiate sending the latest PDP policy/pip configuration
                        // to all its known PDP nodes.
                        if (Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_INITIATE_PDP_CONFIG))) {
-                               this.initiateThread = new Thread(this);
-                               this.initiateThread.start();
+                           startInitiateThreadService(new Thread(this));
                        }
                        // After startup, the PAP does Heartbeat's to each of the PDPs periodically
-                       XACMLPapServlet.heartbeat = new Heartbeat((PAPPolicyEngine) XACMLPapServlet.papEngine);
-                       XACMLPapServlet.heartbeatThread = new Thread(XACMLPapServlet.heartbeat);
-                       XACMLPapServlet.heartbeatThread.start();
+                       startHeartBeatService(new Heartbeat((PAPPolicyEngine) XACMLPapServlet.papEngine));
 
                } catch (FactoryException | PAPException e) {
                        PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", " Failed to create engine");
@@ -414,7 +329,114 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                }
        }
 
-       /**
+       private static void startInitiateThreadService(Thread thread) {
+           initiateThread = thread;
+        initiateThread.start();
+    }
+
+    private static void startHeartBeatService(Heartbeat heartbeat) {
+           XACMLPapServlet.heartbeat = heartbeat;
+        XACMLPapServlet.heartbeatThread = new Thread(XACMLPapServlet.heartbeat);
+        XACMLPapServlet.heartbeatThread.start();
+    }
+
+    private static void setPolicyDBDao() throws ServletException {
+           try {
+            policyDBDao = PolicyDBDao.getPolicyDBDaoInstance(getEmf());
+        } catch (Exception e) {
+            throw new ServletException("Unable to Create Policy DBDao Instance",e);
+        }
+    }
+
+    private static void setEMF(Properties properties) throws ServletException {
+           emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT, properties);
+        if (emf == null) {
+            PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " Error creating entity manager factory with persistence unit: "
+                    + PERSISTENCE_UNIT);
+            throw new ServletException("Unable to create Entity Manager Factory");
+        }
+    }
+
+    private static void setPAPURL(String papURL) {
+           XACMLPapServlet.papURL = papURL;
+    }
+
+    private static void setPAPEngine(PAPPolicyEngine newEngine) {
+           XACMLPapServlet.papEngine = newEngine;
+    }
+
+    private static void setPAPDependencyGroups(String papDependencyGroups) throws PAPException {
+           try{
+            //Now we have flattened the array into a simple comma-separated list
+            papDependencyGroupsFlatArray = papDependencyGroups.split("[;,]");
+            //clean up the entries
+            for (int i = 0 ; i < papDependencyGroupsFlatArray.length ; i ++){
+                papDependencyGroupsFlatArray[i] = papDependencyGroupsFlatArray[i].trim();
+            }
+            try{
+                if(XACMLProperties.getProperty(XACMLRestProperties.PAP_INTEGRITY_AUDIT_PERIOD_SECONDS) != null){
+                    papIntegrityAuditPeriodSeconds = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PAP_INTEGRITY_AUDIT_PERIOD_SECONDS).trim());
+                }
+            }catch(Exception e){
+                String msg = "integrity_audit_period_seconds ";
+                LOGGER.error("\n\nERROR: " + msg + "Bad property entry: " + e.getMessage() + "\n");
+                PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "XACMLPapServlet", " ERROR: " + msg +"Bad property entry");
+                throw e;
+            }
+        }catch(Exception e){
+            PolicyLogger.error(MessageCodes.EXCEPTION_ERROR, e, "XACMLPapServlet", " ERROR: Bad property entry");
+            throw new PAPException(e);
+        }
+    }
+
+    private static void setCommonProperties() throws PAPException {
+           setConfigHome();
+        setActionHome();
+        papDbDriver = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_DRIVER);
+        if(papDbDriver == null){
+            PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papDbDriver property entry");
+            throw new PAPException("papDbDriver is null");
+        }
+        setPapDbDriver(papDbDriver);
+        papDbUrl = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_URL);
+        if(papDbUrl == null){
+            PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papDbUrl property entry");
+            throw new PAPException("papDbUrl is null");
+        }
+        setPapDbUrl(papDbUrl);
+        papDbUser = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_USER);
+        if(papDbUser == null){
+            PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papDbUser property entry");
+            throw new PAPException("papDbUser is null");
+        }
+        setPapDbUser(papDbUser);
+        papDbPassword = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_DB_PASSWORD);
+        if(papDbPassword == null){
+            PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papDbPassword property entry");
+            throw new PAPException("papDbPassword is null");
+        }
+        setPapDbPassword(papDbPassword);
+        papResourceName = XACMLProperties.getProperty(XACMLRestProperties.PAP_RESOURCE_NAME);
+        if(papResourceName == null){
+            PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE,"XACMLPapServlet", " ERROR: Bad papResourceName property entry");
+            throw new PAPException("papResourceName is null");
+        }
+        environment = XACMLProperties.getProperty("ENVIRONMENT", "DEVL");
+        //Micro Service Properties
+        msOnapName=XACMLProperties.getProperty("xacml.policy.msOnapName");
+        setMsOnapName(msOnapName);
+        msPolicyName=XACMLProperties.getProperty("xacml.policy.msPolicyName");
+        setMsPolicyName(msPolicyName);
+        // PDPId File location 
+        XACMLPapServlet.pdpFile = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_IDFILE);
+        if (XACMLPapServlet.pdpFile == null) {
+            PolicyLogger.error(MessageCodes.ERROR_DATA_ISSUE + " The PDP Id Authentication File Property is not valid: "
+                + XACMLRestProperties.PROP_PDP_IDFILE);
+            throw new PAPException("The PDP Id Authentication File Property :"+ XACMLRestProperties.PROP_PDP_IDFILE+ " is not Valid. ");
+        }
+    }
+
+    /**
         * Thread used only during PAP startup to initiate change messages to all known PDPs.
         * This must be on a separate thread so that any GET requests from the PDPs during this update can be serviced.
         */
@@ -430,6 +452,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
         * Depending on how this servlet is run, we may or may not care about cleaning up the resources.
         * For now we assume that we do care.
         */
+       @Override
        public void destroy() {
                // Make sure our threads are destroyed
                if (XACMLPapServlet.heartbeatThread != null) {
@@ -441,14 +464,16 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                                XACMLPapServlet.heartbeatThread.interrupt();
                                XACMLPapServlet.heartbeatThread.join();
                        } catch (InterruptedException e) {
+                           XACMLPapServlet.heartbeatThread.interrupt();
                                PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", " Error stopping heartbeat");
                        }
                }
-               if (this.initiateThread != null) {
+               if (initiateThread != null) {
                        try {
-                               this.initiateThread.interrupt();
-                               this.initiateThread.join();
+                               initiateThread.interrupt();
+                               initiateThread.join();
                        } catch (InterruptedException e) {
+                           initiateThread.interrupt();
                                PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "XACMLPapServlet", " Error stopping thread");
                        }
                }
@@ -479,21 +504,19 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                        String message = "POST interface called for PAP " + papResourceName + " but it has an Administrative"
                                        + " state of " + im.getStateManager().getAdminState()
                                        + "\n Exception Message: " + ae.getMessage();
-                       LOGGER.info(message);
-                       PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message);
+                       LOGGER.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message, ae);
                        loggingContext.transactionEnded();
                        PolicyLogger.audit("Transaction Failed - See Error.log");
-                       response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message);
+                       setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message);
                        return;
                }catch (StandbyStatusException se) {
                        String message = "POST interface called for PAP " + papResourceName + " but it has a Standby Status"
                                        + " of " + im.getStateManager().getStandbyStatus()
                                        + "\n Exception Message: " + se.getMessage();
-                       LOGGER.info(message);
-                       PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message);
+                       LOGGER.error(MessageCodes.ERROR_SYSTEM_ERROR + " " + message, se);
                        loggingContext.transactionEnded();
                        PolicyLogger.audit("Transaction Failed - See Error.log");
-                       response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message);
+                       setResponseError(response,HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message);
                        return;
                }
                try {
@@ -649,7 +672,16 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                im.endTransaction();
        }
 
-       /**
+       private void setResponseError(HttpServletResponse response,int responseCode, String message) {
+           try {
+            response.sendError(responseCode, message);
+        } catch (IOException e) {
+            LOGGER.error("Error setting Error response Header ", e);
+        }
+           return;
+    }
+
+    /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
@@ -827,7 +859,6 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
         */
        protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                ONAPLoggingContext loggingContext = ONAPLoggingUtils.getLoggingContextForRequest(request, baseLoggingContext);
-               storedRequestId = loggingContext.getRequestID();
                loggingContext.transactionStarted();
                loggingContext.setServiceName("PAP.put");
                if ((loggingContext.getRequestID() == null) || (loggingContext.getRequestID() == "")){
@@ -1269,7 +1300,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
 
                        if (policy != null && ((policy.getId().contains("Config_MS_")) || (policy.getId().contains("BRMS_Param")))) {
                                PushPolicyHandler pushPolicyHandler = PushPolicyHandler.getInstance();
-                               if (pushPolicyHandler.preSafetyCheck(policy, CONFIG_HOME)) {
+                               if (pushPolicyHandler.preSafetyCheck(policy, configHome)) {
                                        LOGGER.debug("Precheck Successful.");
                                }
                        }
@@ -1813,7 +1844,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                                
                                PushPolicyHandler pushPolicyHandler = PushPolicyHandler.getInstance();  
                                OnapPDPGroup updatedGroup = (StdPDPGroup)objectFromJSON;        
-                               if (pushPolicyHandler.preSafetyCheck(updatedGroup, CONFIG_HOME)) {              
+                               if (pushPolicyHandler.preSafetyCheck(updatedGroup, configHome)) {               
                                        LOGGER.debug("Precheck Successful.");
                                }
                                
@@ -2196,7 +2227,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                // kick off a thread to do an event notification for each PDP.
                // This needs to be on a separate thread so that PDPs that do not respond (down, non-existent, etc)
                // do not block the PSP response to the AC, which would freeze the GUI until all PDPs sequentially respond or time-out.
-               Thread t = new Thread(new UpdatePDPThread(pdp, storedRequestId));
+               Thread t = new Thread(new UpdatePDPThread(pdp));
                if(CheckPDP.validateID(pdp.getId())){
                        t.start();
                }
@@ -2206,9 +2237,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                private OnapPDP pdp;
                private String requestId;
 
-               public UpdatePDPThread(OnapPDP pdp, String storedRequestId) {
+               public UpdatePDPThread(OnapPDP pdp) {
                        this.pdp = pdp;
-                       requestId = storedRequestId;
                }
 
                public void run() {
@@ -2246,7 +2276,6 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                                }
                                connection.setRequestProperty("Content-Type", "text/x-java-properties");
                                connection.setRequestProperty("X-ECOMP-RequestID", loggingContext.getRequestID());
-                               storedRequestId = null;
                                connection.setInstanceFollowRedirects(true);
                                connection.setDoOutput(true);
                                try (OutputStream os = connection.getOutputStream()) {
@@ -2474,7 +2503,7 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
        }
 
        private static void loadWebapps() throws PAPException{
-               if(ACTION_HOME == null || CONFIG_HOME == null){
+               if(actionHome == null || configHome == null){
                        Path webappsPath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS));
                        //Sanity Check
                        if (webappsPath == null) {
@@ -2499,8 +2528,8 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                                                        + webappsPathAction.toAbsolutePath().toString(), e);
                                }
                        }
-                       ACTION_HOME = webappsPathAction.toString();
-                       CONFIG_HOME = webappsPathConfig.toString();
+                       actionHome = webappsPathAction.toString();
+                       configHome = webappsPathConfig.toString();
                }
        }
 
@@ -2510,7 +2539,11 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                } catch (PAPException e) {
                        return null;
                }
-               return CONFIG_HOME;
+               return configHome;
+       }
+       
+       private static void setConfigHome(){
+           configHome = getConfigHome();
        }
 
        public static String getActionHome(){
@@ -2519,7 +2552,11 @@ public class XACMLPapServlet extends HttpServlet implements StdItemSetChangeList
                } catch (PAPException e) {
                        return null;
                }
-               return ACTION_HOME;
+               return actionHome;
+       }
+       
+       private static void setActionHome(){
+           actionHome = getActionHome();
        }
 
        public static EntityManagerFactory getEmf() {
index cee07fd..7ac322e 100644 (file)
@@ -26,6 +26,7 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.NoSuchElementException;
+import java.util.Objects;
 import java.util.Properties;
 
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
@@ -35,343 +36,371 @@ import org.onap.policy.rest.XACMLRestProperties;
 import com.att.research.xacml.util.XACMLProperties;
 
 public class PapUrlResolver {
-       private static final Logger LOGGER = FlexLogger.getLogger(PapUrlResolver.class);
-       //how long to keep a pap failed before making it un-failed, in milli-seconds
-       private static final long FAIL_TIMEOUT = 18000000;
-       
-       //thread locks
-       public static final Object propertyLock = new Object();
-       
-       //keeping this here for backward compatibility
-       public static String extractIdFromUrl(String url){
-               return extractQuery(url);
-       }
-       public static String extractQuery(String url){
-               try{
-                       return URI.create(url).getQuery();
-               } catch(Exception e){
-                       LOGGER.error("Exception occured while extracting query. So, empty string is returned"+e);
-                       return "";
-               }
-       }
-       public static String modifyUrl(String idUrl, String serverUrl){
-               URI one = URI.create(idUrl);
-               String host = one.getPath()+one.getQuery();
-               URI two = URI.create(serverUrl);
-               two.resolve(host);
-               return two.toString();
-       }
-
-       //get an instance of a new PapUrlResolver, using XACMLProperties to get the url lists
-       public static PapUrlResolver getInstance(){
-               return new PapUrlResolver(null,null,null,true);
-       }
-       
-       //get an instance of a new PapUrlResolver, using the provides strings for the url lists
-       public static PapUrlResolver getInstance(String urlList, String failedList, String succeededList){
-               return new PapUrlResolver(urlList, failedList, succeededList,false);
-       }
-
-       //keeps track of our current location in the list of urls, allows for iterating
-       private int pointer;
-       
-       //should the XACML property lists be updated after anything changes or should we wait for the update
-       //method to be called.
-       private boolean autoUpdateProperties;
-       
-       //this list keeps the sorted, priority of PAP URLs
-       private PapUrlNode[] sortedUrlNodes;
-       //this list keeps the original list of nodes so that they can be entered into the property list correctly
-       private PapUrlNode[] originalUrlNodes;
-       
-       //private constructor to make an instance of a PapUrlResolver, called by static method getInstance.
-       //If the list property strings are not defined, we get the values from XACMLProperties.
-       //The instance acts as an iterator, with hasNext and next methods, but does not implement Iterable,
-       //because it is used for a difference purpose.
-       private PapUrlResolver(String urlList, String failedList, String succeededList, boolean autoUpdateProperties){  
-               this.autoUpdateProperties = autoUpdateProperties;
-               String papUrlLists = urlList;
-               String papUrlFailedList = failedList;
-               String papUrlSuccessList = succeededList;
-               if(papUrlLists == null){
-                       papUrlLists = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URLS);
-                       if(papUrlLists == null){
-                               papUrlLists = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL);
-                       }
-                       papUrlFailedList = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS);
-                       papUrlSuccessList = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS);
-               }
-               
-               String[] urls = papUrlLists.split(",");
-               if(urls.length == 0){           
-                       //log error
-               }
-               String[] failed = emptyOrSplit(papUrlFailedList,urls.length);
-               String[] succeeded = emptyOrSplit(papUrlSuccessList,urls.length);
-               
-               sortedUrlNodes = new PapUrlNode[urls.length];
-               for(int i=0;i<urls.length;i++){
-               
-                       String userId = null;
-                       String pass = null;
-                       userId = XACMLProperties.getProperty(urls[i]+"."+XACMLRestProperties.PROP_PAP_USERID);                                  
-                       pass = XACMLProperties.getProperty(urls[i]+"."+XACMLRestProperties.PROP_PAP_PASS);
-                       if(userId == null || pass == null){
-                               userId = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_USERID);
-                               pass = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_PASS);
-                       }
-                       if(userId == null || pass == null){
-                               userId = "";
-                               pass = "";
-                       }
-                       PapUrlNode newNode = new PapUrlNode(urls[i],userId,pass);
-                       newNode.setFailedTime(failed[i]);
-                       newNode.setSucceededTime(succeeded[i]);
-                       if(sortedUrlNodes[i] == null){
-                               sortedUrlNodes[i] = newNode;
-                       }
-               }
-               originalUrlNodes = sortedUrlNodes.clone();
-               sort(sortedUrlNodes);
-               pointer = 0;
-       }
-       
-       
-       //either split a list by commas, or fill an array to the expected length, if the property list is not long enough
-       private String[] emptyOrSplit(String list,int expectedLength){
-               String[] ret;
-               if(list == null){
-                       ret = new String[expectedLength];
-                       for(int i=0;i<expectedLength;i++){
-                               ret[i] = "-1";
-                       }
-               } else {
-                       ret = list.split(",");
-                       if(ret.length != expectedLength){
-                               ret = emptyOrSplit(null,expectedLength);
-                       }
-               }
-               return ret;
-       }
-       
-       private void sort(PapUrlNode[] array){
-               
-               //O(n^2) double-loop most likely the best in this case, since number of records will be VERY small
-               for(int i=0;i<array.length;i++){
-                       for(int j=i;j<array.length;j++){
-                               if(array[j].compareTo(array[i])<0){
-                                       PapUrlNode temp = array[i];
-                                       array[i] = array[j];
-                                       array[j] = temp;
-                               }
-                       }
-               }
-       }
-       
-       //returns whether this PapUrlResolver object has more PAP urls that can be tried
-       public boolean hasMoreUrls(){
-               return pointer < sortedUrlNodes.length;
-       }
-       
-       //sets the current PAP url as being failed
-       //this will set the failed time to now and remove any succeeded time
-       public void failed(){
-               LOGGER.error("PAP Server FAILED: "+sortedUrlNodes[pointer].getUrl());
-
-               sortedUrlNodes[pointer].setFailedTime(new Date());
-               sortedUrlNodes[pointer].setSucceededTime(null);
-               propertiesUpdated();
-       }
-       
-       //sets the current PAP url as being working
-       //this will set the succeeded time to now and remove any failed time
-       //Also, this will cause hasMoreUrls to return false, since a working one has been found
-       
-       public void succeeded(){
-               registered();
-               pointer = sortedUrlNodes.length;
-       }
-       public void registered(){
-               sortedUrlNodes[pointer].setFailedTime(null);
-               sortedUrlNodes[pointer].setSucceededTime(new Date());
-               LOGGER.info("PAP server SUCCEEDED "+sortedUrlNodes[pointer].getUrl());
-               propertiesUpdated();
-       }
-       
-       //returns a properties object with the properties that pertain to PAP urls
-       public Properties getProperties(){
-               String failedPropertyString = "";
-               String succeededPropertyString = "";
-               String urlPropertyString = "";
-               for(int i=0;i<originalUrlNodes.length;i++){
-                       failedPropertyString = failedPropertyString.concat(",").concat(originalUrlNodes[i].getFailedTime());
-                       succeededPropertyString = succeededPropertyString.concat(",").concat(originalUrlNodes[i].getSucceededTime());
-                       urlPropertyString = urlPropertyString.concat(",").concat(originalUrlNodes[i].getUrl());
-               }
-               Properties prop = new Properties();
-               failedPropertyString = failedPropertyString.substring(1);
-               succeededPropertyString = succeededPropertyString.substring(1);
-               urlPropertyString = urlPropertyString.substring(1);
-               prop.setProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS,failedPropertyString);
-               prop.setProperty(XACMLRestProperties.PROP_PAP_URLS,urlPropertyString);
-               prop.setProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS,succeededPropertyString);
-               return prop;
-       }
-       
-       //saves the updates urls to the correct properties
-       private void propertiesUpdated(){
-               if(!autoUpdateProperties){
-                       return;
-               }
-               Properties prop = getProperties();
-
-               LOGGER.debug("Failed PAP Url List: "+prop.getProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS));
-               LOGGER.debug("Succeeded PAP Url List: "+prop.getProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS));
-               XACMLProperties.setProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS,prop.getProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS));
-               XACMLProperties.setProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS,prop.getProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS));
-       }
-       
-       //iterates to the next available PAP url, according to the priority order
-       public void getNext(){
-               pointer++;
-       }
-       
-       //returns the url of the current PAP server that we are iterating over
-       //will append the provided policy id to the url
-       public String getUrl(String query){
-               if(sortedUrlNodes[pointer]== null){
-                       throw new NoSuchElementException();
-               } else {
-                       return sortedUrlNodes[pointer].getUrl().concat("?").concat(query);
-               }
-       }
-       
-       //returns the url of the current PAP server that we are iterating over
-       //Just returns the url, with no id appended to it
-       public String getUrl(){
-               if(sortedUrlNodes[pointer]== null){
-                       throw new NoSuchElementException();
-               } else {        
-                       
-                       return sortedUrlNodes[pointer].getUrl();
-               }
-       }
-       public String getUserId(){
-               if(sortedUrlNodes[pointer]== null){
-                       throw new NoSuchElementException();
-               } else {        
-                       
-                       return sortedUrlNodes[pointer].getUserId();
-               }
-       }
-       public String getPass(){
-               if(sortedUrlNodes[pointer]== null){
-                       throw new NoSuchElementException();
-               } else {        
-                       
-                       return sortedUrlNodes[pointer].getPass();
-               }
-       }
-
-       
-       //This is the class to hold the details of a single PAP URL
-       //including: the url itself, the last time it failed, and the last time it succeeded
-       //It also includes the custom comparer which can compare based on failed and succeeded times, and takes into account
-       //the timeout on failures.
-       private class PapUrlNode implements Comparable<PapUrlNode> {
-               private String papUrl;
-               private Date failedTime;
-               private Date succeededTime;
-               private String userId;
-               private String pass;
-               
-               public PapUrlNode(String url,String userId,String pass){
-                       this.papUrl = url;
-                       failedTime = null;
-                       this.succeededTime = null;
-                       this.userId = userId;
-                       this.pass = pass;
-                       
-               }
-               public String getUserId(){
-                       return this.userId;
-               }
-               public String getPass(){
-                       return this.pass;
-               }
-               
-               public void setFailedTime(Object time){
-                       Date failedTimeAsDate = setHandler(time);
-                       if(failedTimeAsDate == null){
-                               this.failedTime = null;
-                       } else {
-                               long timeDifference = new Date().getTime() - failedTimeAsDate.getTime();
-                               if(timeDifference < FAIL_TIMEOUT){
-                                       this.failedTime = failedTimeAsDate;
-                               } else {
-                                       this.failedTime = null;
-                               }
-                       }
-               }
-               
-               //set the time that this url succeeded at
-               public void setSucceededTime(Object time){
-                       this.succeededTime = setHandler(time);
-               }
-               
-               //parses string into a date or a null date, if the url never failed/succeeded (since -1 will be in the property)
-               private Date setHandler(Object time){
-                       if(time instanceof String){
-                               if("-1".equals((String)time)){
-                                       return null;
-                               }
-                               try {
-                                       DateFormat df = new SimpleDateFormat();
-                                       return df.parse((String)time);
-                               } catch (ParseException e) {                                    
-                                       return null;
-                               }
-                       }
-                       if(time instanceof Date){
-                               return (Date)time;
-                       }
-                       return null;
-               }
-               
-               
-               public String getFailedTime(){
-                       return formatTime(this.failedTime);
-               }
-               
-               public String getSucceededTime(){
-                       return formatTime(this.succeededTime);
-               }
-               
-               //formats a Date into a string or a -1 if there is not date (-1 is used in properties for no date)
-               private String formatTime(Date d){
-                       if(d == null){
-                               return "-1";
-                       }
-                       DateFormat df = new SimpleDateFormat();
-                       return df.format(d);
-               }
-               
-               public String getUrl(){
-                       return papUrl;
-               }
-               
-               @Override
-               public int compareTo(PapUrlNode other){
-                       if(this.failedTime == null && other.failedTime != null){
-                               return -1;
-                       }
-                       if(this.failedTime != null && other.failedTime == null){
-                               return 1;
-                       }
-                       if(this.failedTime != null){
-                               return this.failedTime.compareTo(other.failedTime);
-                       }
-                       return 0;
-               }
-       }
+    private static final Logger LOGGER = FlexLogger.getLogger(PapUrlResolver.class);
+    // how long to keep a pap failed before making it un-failed, in milli-seconds
+    private static final long FAIL_TIMEOUT = 18000000;
+
+    // thread locks
+    public static final Object propertyLock = new Object();
+
+    // keeping this here for backward compatibility
+    public static String extractIdFromUrl(String url) {
+        return extractQuery(url);
+    }
+
+    public static String extractQuery(String url) {
+        try {
+            return URI.create(url).getQuery();
+        } catch (Exception e) {
+            LOGGER.error("Exception occured while extracting query. So, empty string is returned" + e);
+            return "";
+        }
+    }
+
+    public static String modifyUrl(String idUrl, String serverUrl) {
+        URI one = URI.create(idUrl);
+        String host = one.getPath() + one.getQuery();
+        URI two = URI.create(serverUrl);
+        two.resolve(host);
+        return two.toString();
+    }
+
+    // get an instance of a new PapUrlResolver, using XACMLProperties to get the url lists
+    public static PapUrlResolver getInstance() {
+        return new PapUrlResolver(null, null, null, true);
+    }
+
+    // get an instance of a new PapUrlResolver, using the provides strings for the url lists
+    public static PapUrlResolver getInstance(String urlList, String failedList, String succeededList) {
+        return new PapUrlResolver(urlList, failedList, succeededList, false);
+    }
+
+    // keeps track of our current location in the list of urls, allows for iterating
+    private int pointer;
+
+    // should the XACML property lists be updated after anything changes or should we wait for the update
+    // method to be called.
+    private boolean autoUpdateProperties;
+
+    // this list keeps the sorted, priority of PAP URLs
+    private PapUrlNode[] sortedUrlNodes;
+    // this list keeps the original list of nodes so that they can be entered into the property list correctly
+    private PapUrlNode[] originalUrlNodes;
+
+    // private constructor to make an instance of a PapUrlResolver, called by static method getInstance.
+    // If the list property strings are not defined, we get the values from XACMLProperties.
+    // The instance acts as an iterator, with hasNext and next methods, but does not implement Iterable,
+    // because it is used for a difference purpose.
+    private PapUrlResolver(String urlList, String failedList, String succeededList, boolean autoUpdateProperties) {
+        this.autoUpdateProperties = autoUpdateProperties;
+        String papUrlLists = urlList;
+        String papUrlFailedList = failedList;
+        String papUrlSuccessList = succeededList;
+        if (papUrlLists == null) {
+            papUrlLists = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URLS);
+            if (papUrlLists == null) {
+                papUrlLists = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_URL);
+            }
+            papUrlFailedList = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS);
+            papUrlSuccessList = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS);
+        }
+
+        String[] urls = papUrlLists.split(",");
+        if (urls.length == 0) {
+            // log error
+        }
+        String[] failed = emptyOrSplit(papUrlFailedList, urls.length);
+        String[] succeeded = emptyOrSplit(papUrlSuccessList, urls.length);
+
+        sortedUrlNodes = new PapUrlNode[urls.length];
+        for (int i = 0; i < urls.length; i++) {
+
+            String userId = null;
+            String pass = null;
+            userId = XACMLProperties.getProperty(urls[i] + "." + XACMLRestProperties.PROP_PAP_USERID);
+            pass = XACMLProperties.getProperty(urls[i] + "." + XACMLRestProperties.PROP_PAP_PASS);
+            if (userId == null || pass == null) {
+                userId = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_USERID);
+                pass = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_PASS);
+            }
+            if (userId == null || pass == null) {
+                userId = "";
+                pass = "";
+            }
+            PapUrlNode newNode = new PapUrlNode(urls[i], userId, pass);
+            newNode.setFailedTime(failed[i]);
+            newNode.setSucceededTime(succeeded[i]);
+            if (sortedUrlNodes[i] == null) {
+                sortedUrlNodes[i] = newNode;
+            }
+        }
+        originalUrlNodes = sortedUrlNodes.clone();
+        sort(sortedUrlNodes);
+        pointer = 0;
+    }
+
+    // either split a list by commas, or fill an array to the expected length, if the property list is not long enough
+    private String[] emptyOrSplit(String list, int expectedLength) {
+        String[] ret;
+        if (list == null) {
+            ret = new String[expectedLength];
+            for (int i = 0; i < expectedLength; i++) {
+                ret[i] = "-1";
+            }
+        } else {
+            ret = list.split(",");
+            if (ret.length != expectedLength) {
+                ret = emptyOrSplit(null, expectedLength);
+            }
+        }
+        return ret;
+    }
+
+    private void sort(PapUrlNode[] array) {
+
+        // O(n^2) double-loop most likely the best in this case, since number of records will be VERY small
+        for (int i = 0; i < array.length; i++) {
+            for (int j = i; j < array.length; j++) {
+                if (array[j].compareTo(array[i]) < 0) {
+                    PapUrlNode temp = array[i];
+                    array[i] = array[j];
+                    array[j] = temp;
+                }
+            }
+        }
+    }
+
+    // returns whether this PapUrlResolver object has more PAP urls that can be tried
+    public boolean hasMoreUrls() {
+        return pointer < sortedUrlNodes.length;
+    }
+
+    // sets the current PAP url as being failed
+    // this will set the failed time to now and remove any succeeded time
+    public void failed() {
+        LOGGER.error("PAP Server FAILED: " + sortedUrlNodes[pointer].getUrl());
+
+        sortedUrlNodes[pointer].setFailedTime(new Date());
+        sortedUrlNodes[pointer].setSucceededTime(null);
+        propertiesUpdated();
+    }
+
+    // sets the current PAP url as being working
+    // this will set the succeeded time to now and remove any failed time
+    // Also, this will cause hasMoreUrls to return false, since a working one has been found
+
+    public void succeeded() {
+        registered();
+        pointer = sortedUrlNodes.length;
+    }
+
+    public void registered() {
+        sortedUrlNodes[pointer].setFailedTime(null);
+        sortedUrlNodes[pointer].setSucceededTime(new Date());
+        LOGGER.info("PAP server SUCCEEDED " + sortedUrlNodes[pointer].getUrl());
+        propertiesUpdated();
+    }
+
+    // returns a properties object with the properties that pertain to PAP urls
+    public Properties getProperties() {
+        String failedPropertyString = "";
+        String succeededPropertyString = "";
+        String urlPropertyString = "";
+        for (int i = 0; i < originalUrlNodes.length; i++) {
+            failedPropertyString = failedPropertyString.concat(",").concat(originalUrlNodes[i].getFailedTime());
+            succeededPropertyString = succeededPropertyString.concat(",")
+                    .concat(originalUrlNodes[i].getSucceededTime());
+            urlPropertyString = urlPropertyString.concat(",").concat(originalUrlNodes[i].getUrl());
+        }
+        Properties prop = new Properties();
+        failedPropertyString = failedPropertyString.substring(1);
+        succeededPropertyString = succeededPropertyString.substring(1);
+        urlPropertyString = urlPropertyString.substring(1);
+        prop.setProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS, failedPropertyString);
+        prop.setProperty(XACMLRestProperties.PROP_PAP_URLS, urlPropertyString);
+        prop.setProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS, succeededPropertyString);
+        return prop;
+    }
+
+    // saves the updates urls to the correct properties
+    private void propertiesUpdated() {
+        if (!autoUpdateProperties) {
+            return;
+        }
+        Properties prop = getProperties();
+
+        LOGGER.debug("Failed PAP Url List: " + prop.getProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS));
+        LOGGER.debug("Succeeded PAP Url List: " + prop.getProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS));
+        XACMLProperties.setProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS,
+                prop.getProperty(XACMLRestProperties.PROP_PAP_FAILED_URLS));
+        XACMLProperties.setProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS,
+                prop.getProperty(XACMLRestProperties.PROP_PAP_SUCCEEDED_URLS));
+    }
+
+    // iterates to the next available PAP url, according to the priority order
+    public void getNext() {
+        pointer++;
+    }
+
+    // returns the url of the current PAP server that we are iterating over
+    // will append the provided policy id to the url
+    public String getUrl(String query) {
+        if (sortedUrlNodes[pointer] == null) {
+            throw new NoSuchElementException();
+        } else {
+            return sortedUrlNodes[pointer].getUrl().concat("?").concat(query);
+        }
+    }
+
+    // returns the url of the current PAP server that we are iterating over
+    // Just returns the url, with no id appended to it
+    public String getUrl() {
+        if (sortedUrlNodes[pointer] == null) {
+            throw new NoSuchElementException();
+        } else {
+
+            return sortedUrlNodes[pointer].getUrl();
+        }
+    }
+
+    public String getUserId() {
+        if (sortedUrlNodes[pointer] == null) {
+            throw new NoSuchElementException();
+        } else {
+
+            return sortedUrlNodes[pointer].getUserId();
+        }
+    }
+
+    public String getPass() {
+        if (sortedUrlNodes[pointer] == null) {
+            throw new NoSuchElementException();
+        } else {
+
+            return sortedUrlNodes[pointer].getPass();
+        }
+    }
+
+    // This is the class to hold the details of a single PAP URL
+    // including: the url itself, the last time it failed, and the last time it succeeded
+    // It also includes the custom comparer which can compare based on failed and succeeded times, and takes into
+    // account
+    // the timeout on failures.
+    private class PapUrlNode implements Comparable<PapUrlNode> {
+        private String papUrl;
+        private Date failedTime;
+        private Date succeededTime;
+        private String userId;
+        private String pass;
+
+        public PapUrlNode(String url, String userId, String pass) {
+            this.papUrl = url;
+            failedTime = null;
+            this.succeededTime = null;
+            this.userId = userId;
+            this.pass = pass;
+
+        }
+
+        public String getUserId() {
+            return this.userId;
+        }
+
+        public String getPass() {
+            return this.pass;
+        }
+
+        public void setFailedTime(Object time) {
+            Date failedTimeAsDate = setHandler(time);
+            if (failedTimeAsDate == null) {
+                this.failedTime = null;
+            } else {
+                long timeDifference = new Date().getTime() - failedTimeAsDate.getTime();
+                if (timeDifference < FAIL_TIMEOUT) {
+                    this.failedTime = failedTimeAsDate;
+                } else {
+                    this.failedTime = null;
+                }
+            }
+        }
+
+        // set the time that this url succeeded at
+        public void setSucceededTime(Object time) {
+            this.succeededTime = setHandler(time);
+        }
+
+        // parses string into a date or a null date, if the url never failed/succeeded (since -1 will be in the
+        // property)
+        private Date setHandler(Object time) {
+            if (time instanceof String) {
+                if ("-1".equals((String) time)) {
+                    return null;
+                }
+                try {
+                    DateFormat df = new SimpleDateFormat();
+                    return df.parse((String) time);
+                } catch (ParseException e) {
+                    return null;
+                }
+            }
+            if (time instanceof Date) {
+                return (Date) time;
+            }
+            return null;
+        }
+
+        public String getFailedTime() {
+            return formatTime(this.failedTime);
+        }
+
+        public String getSucceededTime() {
+            return formatTime(this.succeededTime);
+        }
+
+        // formats a Date into a string or a -1 if there is not date (-1 is used in properties for no date)
+        private String formatTime(Date d) {
+            if (d == null) {
+                return "-1";
+            }
+            DateFormat df = new SimpleDateFormat();
+            return df.format(d);
+        }
+
+        public String getUrl() {
+            return papUrl;
+        }
+
+        @Override
+        public int compareTo(PapUrlNode other) {
+            if (this.failedTime == null && other.failedTime != null) {
+                return -1;
+            }
+            if (this.failedTime != null && other.failedTime == null) {
+                return 1;
+            }
+            if (this.failedTime != null) {
+                return this.failedTime.compareTo(other.failedTime);
+            }
+            return 0;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (obj == this) {
+                return true;
+            }
+            if (!(obj instanceof PapUrlNode)) {
+                return false;
+            }
+            PapUrlNode papUrlNode = (PapUrlNode) obj;
+            return Objects.equals(papUrlNode.papUrl, papUrl) && Objects.equals(papUrlNode.failedTime, failedTime)
+                    && Objects.equals(papUrlNode.succeededTime, succeededTime)
+                    && Objects.equals(papUrlNode.userId, userId) && Objects.equals(papUrlNode.pass, pass);
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(papUrl, failedTime, succeededTime, userId, pass);
+        }
+    }
 }
index d57e884..18c2017 100644 (file)
@@ -130,8 +130,8 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable {
        // This thread may getting invoked on startup, to let the PAP know
        // that we are up and running.
        //
-       private Thread registerThread = null;
-       private XACMLPdpRegisterThread registerRunnable = null;
+       private static transient Thread registerThread = null;
+       private static transient XACMLPdpRegisterThread registerRunnable = null;
        //
        // This is our PDP engine pointer. There is a synchronized lock used
        // for access to the pointer. In case we are servicing PEP requests while
@@ -176,10 +176,10 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable {
        // This is our configuration thread that attempts to load
        // a new configuration request.
        //
-       private Thread configThread = null;
-       private volatile boolean configThreadTerminate = false;
-       private ONAPLoggingContext baseLoggingContext = null;
-       private IntegrityMonitor im;
+       private static transient Thread configThread = null;
+       private static volatile boolean configThreadTerminate = false;
+       private transient ONAPLoggingContext baseLoggingContext = null;
+       private transient IntegrityMonitor im;
        /**
         * Default constructor. 
         */
@@ -198,16 +198,12 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable {
                // Initialize
                //
                XACMLRest.xacmlInit(config);
-               // Load the Notification Delay. 
-               try{
-                       XACMLPdpServlet.notificationDelay = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_DELAY));
-               }catch(Exception e){
-                       logger.info("Notification Delay Not set. Keeping it 0 as default."+e);
-               }
+               // Load the Notification Delay.
+               setNotificationDelay();
                // Load Queue size. 
                int queueSize = 5; // Set default Queue Size here. 
                queueSize = Integer.parseInt(XACMLProperties.getProperty("REQUEST_BUFFER_SIZE",String.valueOf(queueSize)));
-               queue = new LinkedBlockingQueue<PutRequest>(queueSize);
+               initQueue(queueSize);
                // Load our engine - this will use the latest configuration
                // that was saved to disk and set our initial status object.
                //
@@ -250,25 +246,14 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable {
                        }
                        PolicyLogger.info("\n Properties Given : \n" + properties.toString());
                }
-               pdpResourceName = properties.getProperty(XACMLRestProperties.PDP_RESOURCE_NAME);
-               if(pdpResourceName == null){
-                       PolicyLogger.error(MessageCodes.MISS_PROPERTY_ERROR, XACMLRestProperties.PDP_RESOURCE_NAME, "xacml.pdp");
-                       throw new ServletException("pdpResourceName is null");
-               }
-
+               setPDPResourceName(properties);
                dependencyGroups = properties.getProperty(IntegrityMonitorProperties.DEPENDENCY_GROUPS);
                if(dependencyGroups == null){
                        PolicyLogger.error(MessageCodes.MISS_PROPERTY_ERROR, IntegrityMonitorProperties.DEPENDENCY_GROUPS, "xacml.pdp");
                        throw new ServletException("dependency_groups is null");
                }
-               // dependency_groups is a semicolon-delimited list of groups, and
-               // each group is a comma-separated list of nodes. For our purposes
-               // we just need a list of dependencies without regard to grouping,
-               // so split the list into nodes separated by either comma or semicolon.
-               dependencyNodes = dependencyGroups.split("[;,]");
-               for (int i = 0 ; i < dependencyNodes.length ; i++){
-                       dependencyNodes[i] = dependencyNodes[i].trim();
-               }
+               setDependencyNodes(dependencyGroups);
+               
 
                // CreateUpdatePolicy ResourceName  
                createUpdateResourceName = properties.getProperty("createUpdatePolicy.impl.className", CREATE_UPDATE_POLICY_SERVICE);
@@ -282,25 +267,59 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable {
                        PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "Failed to create IntegrityMonitor" +e);
                        throw new ServletException(e);
                }
-
-               environment = XACMLProperties.getProperty("ENVIRONMENT", "DEVL");
-               //
-               // Kick off our thread to register with the PAP servlet.
-               //
-               if (Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_REGISTER))) {
-                       this.registerRunnable = new XACMLPdpRegisterThread(baseLoggingContext);
-                       this.registerThread = new Thread(this.registerRunnable);
-                       this.registerThread.start();
-               }
-               //
-               // This is our thread that manages incoming configuration
-               // changes.
-               //
-               this.configThread = new Thread(this);
-               this.configThread.start();
+               startThreads(baseLoggingContext, new Thread(this));
        }
 
-       /**
+       private static void startThreads(ONAPLoggingContext baseLoggingContext, Thread thread) {
+           environment = XACMLProperties.getProperty("ENVIRONMENT", "DEVL");
+        //
+        // Kick off our thread to register with the PAP servlet.
+        //
+        if (Boolean.parseBoolean(XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_REGISTER))) {
+            XACMLPdpServlet.registerRunnable = new XACMLPdpRegisterThread(baseLoggingContext);
+            XACMLPdpServlet.registerThread = new Thread(XACMLPdpServlet.registerRunnable);
+            XACMLPdpServlet.registerThread.start();
+        }
+        //
+        // This is our thread that manages incoming configuration
+        // changes.
+        //
+        XACMLPdpServlet.configThread = thread;
+        XACMLPdpServlet.configThread.start();
+    }
+
+    private static void setDependencyNodes(String dependencyGroups) {
+           // dependency_groups is a semicolon-delimited list of groups, and
+        // each group is a comma-separated list of nodes. For our purposes
+        // we just need a list of dependencies without regard to grouping,
+        // so split the list into nodes separated by either comma or semicolon.
+        dependencyNodes = dependencyGroups.split("[;,]");
+        for (int i = 0 ; i < dependencyNodes.length ; i++){
+            dependencyNodes[i] = dependencyNodes[i].trim();
+        }
+    }
+
+    private static void setPDPResourceName(Properties properties) throws ServletException {
+           pdpResourceName = properties.getProperty(XACMLRestProperties.PDP_RESOURCE_NAME);
+        if(pdpResourceName == null){
+            PolicyLogger.error(MessageCodes.MISS_PROPERTY_ERROR, XACMLRestProperties.PDP_RESOURCE_NAME, "xacml.pdp");
+            throw new ServletException("pdpResourceName is null");
+        }
+    }
+
+    private static void initQueue(int queueSize) {
+           queue = new LinkedBlockingQueue<>(queueSize);
+    }
+
+    private static void setNotificationDelay() {
+        try{
+            XACMLPdpServlet.notificationDelay = Integer.parseInt(XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_DELAY));
+        }catch(NumberFormatException e){
+            logger.error("Error in notification delay format, Taking the default value.", e);
+        }
+    }
+
+    /**
         * @see Servlet#destroy()
         */
        @Override
@@ -310,33 +329,39 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable {
                //
                // Make sure the register thread is not running
                //
-               if (this.registerRunnable != null) {
+               if (XACMLPdpServlet.registerRunnable != null) {
                        try {
-                               this.registerRunnable.terminate();
-                               if (this.registerThread != null) {
-                                       this.registerThread.interrupt();
-                                       this.registerThread.join();
+                               XACMLPdpServlet.registerRunnable.terminate();
+                               if (XACMLPdpServlet.registerThread != null) {
+                                       XACMLPdpServlet.registerThread.interrupt();
+                                       XACMLPdpServlet.registerThread.join();
                                }
                        } catch (InterruptedException e) {
                                logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
                                PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "");
+                               XACMLPdpServlet.registerThread.interrupt();
                        }
                }
                //
                // Make sure the configure thread is not running
                //
-               this.configThreadTerminate = true;
+               setConfigThreadTerminate(true);
                try {
-                       this.configThread.interrupt();
-                       this.configThread.join();
+                       XACMLPdpServlet.configThread.interrupt();
+                       XACMLPdpServlet.configThread.join();
                } catch (InterruptedException e) {
                        logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
                        PolicyLogger.error(MessageCodes.ERROR_SYSTEM_ERROR, e, "");
+                       XACMLPdpServlet.configThread.interrupt();
                }
                logger.info("Destroyed.");
        }
 
-       /**
+       private static void setConfigThreadTerminate(boolean value) {
+           XACMLPdpServlet.configThreadTerminate = value;
+    }
+
+    /**
         * PUT - The PAP engine sends configuration information using HTTP PUT request.
         * 
         * One parameter is expected:
@@ -937,7 +962,13 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable {
                        // Read in the string
                        //
                        StringBuilder buffer = new StringBuilder();
-                       BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
+                       BufferedReader reader = null;
+                       try{
+                           reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
+                       }catch(IOException e){
+                           logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error during reading input stream",e);
+                           return;
+                       }
                        String line;
                        try{
                                while((line = reader.readLine()) != null){
@@ -1198,7 +1229,7 @@ public class XACMLPdpServlet extends HttpServlet implements Runnable {
                //
                try {
                        // variable not used, but constructor has needed side-effects so don't remove:
-                       while (! this.configThreadTerminate) {
+                       while (! XACMLPdpServlet.configThreadTerminate) {
                                PutRequest request = XACMLPdpServlet.queue.take();
                                StdPDPStatus newStatus = new StdPDPStatus();
                                
index e7216e1..f7c175c 100644 (file)
@@ -227,112 +227,96 @@ public class PAPServices {
         String [] parameters = {"apiflag=version","policyScope="+policyScope, "filePrefix="+filePrefix, "policyName="+policyName};
         if (paps == null || paps.isEmpty()) {
             LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "PAPs List is Empty.");
-            try {
-                throw new Exception(XACMLErrorConstants.ERROR_DATA_ISSUE +"PAPs List is empty.");
-            } catch (Exception e) {
-                LOGGER.error(e.getMessage() + e);
-            }
-            }else {
-                int papsCount = 0;
-                boolean connected = false;
-                while (papsCount < paps.size()) {
-                    try {
-                        String fullURL = getPAP();
-                        if (parameters != null && parameters.length > 0) {
-                            String queryString = "";
-                            for (String p : parameters) {
-                                queryString += "&" + p;
-                            }
-                            fullURL += "?" + queryString.substring(1);
+        }else {
+            int papsCount = 0;
+            boolean connected = false;
+            while (papsCount < paps.size()) {
+                try {
+                    String fullURL = getPAP();
+                    if (parameters != null && parameters.length > 0) {
+                        String queryString = "";
+                        for (String p : parameters) {
+                            queryString += "&" + p;
                         }
-        
-                        URL url = new URL (fullURL);
-                        
-                        //Open the connection
-                        connection = (HttpURLConnection)url.openConnection();
-                        
-                        // Setting Content-Type
-                        connection.setRequestProperty("Content-Type",
-                                "application/json");
-                        
-                        // Adding Authorization
-                        connection.setRequestProperty("Authorization", "Basic "
-                                + getPAPEncoding());
-                        
-                        connection.setRequestProperty("Environment", environment);
-                        connection.setRequestProperty("ClientScope", clientScope);
+                        fullURL += "?" + queryString.substring(1);
+                    }
 
-                        
-                        //set the method and headers
-                        connection.setRequestMethod("GET");
-                        connection.setUseCaches(false);
-                        connection.setInstanceFollowRedirects(false);
-                        connection.setDoOutput(true);
-                        connection.setDoInput(true);
-                        connection.setRequestProperty("X-ECOMP-RequestID", requestID.toString());
-  
-                        //DO the connect
-                        connection.connect();
-        
-                        // If Connected to PAP then break from the loop and continue with the Request 
-                        if (connection.getResponseCode() > 0) {
-                            connected = true;
-                            break;
+                    URL url = new URL (fullURL);
 
-                        } else {
-                            LOGGER.debug(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "PAP connection Error");
-                        }
-                    } catch (Exception e) {
-                        // This means that the PAP is not working 
-                        LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "PAP connection Error : " + e);
-                        rotatePAPList();
+                    //Open the connection
+                    connection = (HttpURLConnection)url.openConnection();
+
+                    // Setting Content-Type
+                    connection.setRequestProperty("Content-Type",
+                            "application/json");
+
+                    // Adding Authorization
+                    connection.setRequestProperty("Authorization", "Basic "
+                            + getPAPEncoding());
+
+                    connection.setRequestProperty("Environment", environment);
+                    connection.setRequestProperty("ClientScope", clientScope);
+
+
+                    //set the method and headers
+                    connection.setRequestMethod("GET");
+                    connection.setUseCaches(false);
+                    connection.setInstanceFollowRedirects(false);
+                    connection.setDoOutput(true);
+                    connection.setDoInput(true);
+                    connection.setRequestProperty("X-ECOMP-RequestID", requestID.toString());
+
+                    //DO the connect
+                    connection.connect();
+
+                    // If Connected to PAP then break from the loop and continue with the Request 
+                    if (connection.getResponseCode() > 0) {
+                        connected = true;
+                        break;
+
+                    } else {
+                        LOGGER.debug(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "PAP connection Error");
                     }
-                    papsCount++;
+                } catch (Exception e) {
+                    // This means that the PAP is not working 
+                    LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "PAP connection Error : " + e);
+                    rotatePAPList();
                 }
-        
-                if (connected) {
-                    //Read the Response
-                    LOGGER.debug("connected to the PAP : " + getPAP());
-                    LOGGER.debug("--- Response: ---");
-                    Map<String, List<String>> headers = connection.getHeaderFields();
-                    for (String key : headers.keySet()) {
-                        LOGGER.debug("Header :" + key + "  Value: " + headers.get(key));
-                    }
-                    try {
-                        if (connection.getResponseCode() == 200) {
-                            // Check for successful creation of policy
-                            version = connection.getHeaderField("version");
-                            LOGGER.debug("ActiveVersion from the Header: " + version);
-                        } else if (connection.getResponseCode() == 403) {
-                            LOGGER.error(XACMLErrorConstants.ERROR_PERMISSIONS + "response code of the URL is " 
-                                    + connection.getResponseCode() + ". PEP is not Authorized for making this Request!! \n Contact Administrator for this Scope. ");
-                            version = "pe100";
-                        } else if (connection.getResponseCode() == 404) {
-                            LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "response code of the URL is " 
-                                        + connection.getResponseCode() + ". This indicates a problem with getting the version from the PAP");
-                            version = "pe300";
-                        } else {
-                            LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "BAD REQUEST:  Error occured while getting the version from the PAP. The request may be incorrect.");
-                        }
-                    } catch (IOException e) {
-                        LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
-                        try {
-                            throw new Exception(XACMLErrorConstants.ERROR_DATA_ISSUE +"ERROR in connecting to the PAP ", e);
-                        } catch (Exception e1) {
-                            LOGGER.error(e1.getMessage() + e1);
-                        }
-                    } 
-        
-                } else {
-                    LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Unable to get valid response from PAP(s) " + paps);
-                    try {
-                        throw new Exception(XACMLErrorConstants.ERROR_DATA_ISSUE +"ERROR in connecting to the PAP ");
-                    } catch (Exception e) {
-                        LOGGER.error(e.getMessage() + e);
-                    }
-                }   
+                papsCount++;
             }
-            return version;
+
+            if (connected) {
+                //Read the Response
+                LOGGER.debug("connected to the PAP : " + getPAP());
+                LOGGER.debug("--- Response: ---");
+                Map<String, List<String>> headers = connection.getHeaderFields();
+                for (String key : headers.keySet()) {
+                    LOGGER.debug("Header :" + key + "  Value: " + headers.get(key));
+                }
+                try {
+                    if (connection.getResponseCode() == 200) {
+                        // Check for successful creation of policy
+                        version = connection.getHeaderField("version");
+                        LOGGER.debug("ActiveVersion from the Header: " + version);
+                    } else if (connection.getResponseCode() == 403) {
+                        LOGGER.error(XACMLErrorConstants.ERROR_PERMISSIONS + "response code of the URL is " 
+                                + connection.getResponseCode() + ". PEP is not Authorized for making this Request!! \n Contact Administrator for this Scope. ");
+                        version = "pe100";
+                    } else if (connection.getResponseCode() == 404) {
+                        LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "response code of the URL is " 
+                                + connection.getResponseCode() + ". This indicates a problem with getting the version from the PAP");
+                        version = "pe300";
+                    } else {
+                        LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "BAD REQUEST:  Error occured while getting the version from the PAP. The request may be incorrect.");
+                    }
+                } catch (IOException e) {
+                    LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
+                } 
+            } else {
+                LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Unable to get valid response from PAP(s) " + paps);
+            }   
+        }
+        return version;
     }
     
     private String checkResponse(HttpURLConnection connection, UUID requestID) throws IOException {
index e495c99..efaa5c1 100644 (file)
@@ -21,10 +21,10 @@ package org.onap.policy.pdp.rest.api.services;
 
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringWriter;
-import java.net.MalformedURLException;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -37,6 +37,7 @@ import javax.json.JsonReader;
 import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
@@ -65,6 +66,7 @@ import com.att.research.xacml.api.Request;
 import com.att.research.xacml.api.Response;
 import com.att.research.xacml.api.Result;
 import com.att.research.xacml.api.pdp.PDPEngine;
+import com.att.research.xacml.api.pdp.PDPException;
 import com.att.research.xacml.std.json.JSONRequest;
 import com.att.research.xacml.std.json.JSONResponse;
 import com.att.research.xacml.util.XACMLProperties;
@@ -333,7 +335,7 @@ public class PDPServices {
        return treatment;
     }
 
-    private PDPResponse configCall(String pdpConfigLocation) throws Exception{
+    private PDPResponse configCall(String pdpConfigLocation) throws PDPException, IOException{
         PDPResponse pdpResponse = new PDPResponse();
         if(pdpConfigLocation.contains("/")){
             pdpConfigLocation = pdpConfigLocation.replace("/", File.separator);
@@ -366,7 +368,7 @@ public class PDPServices {
                         pdpResponse.setConfig(writer.toString());
                     } catch (Exception e) {
                         LOGGER.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID+ e);
-                        throw new Exception(XACMLErrorConstants.ERROR_SCHEMA_INVALID+ "Unable to parse the XML config", e);
+                        throw new PDPException(XACMLErrorConstants.ERROR_SCHEMA_INVALID+ "Unable to parse the XML config", e);
                     }
                 } else if (pdpConfigLocation.endsWith("properties")) {
                     pdpResponse.setType(PolicyType.PROPERTIES);
@@ -394,14 +396,14 @@ public class PDPServices {
                         PolicyResponseStatus.NO_ACTION_REQUIRED,
                         PolicyConfigStatus.CONFIG_RETRIEVED);
                 return pdpResponse;
-            } catch (IOException e) {
+            } catch (IOException | ParserConfigurationException e) {
                 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + e);
-                throw new Exception(XACMLErrorConstants.ERROR_PROCESS_FLOW +
+                throw new PDPException(XACMLErrorConstants.ERROR_PROCESS_FLOW +
                         "Cannot open a connection to the configURL", e);
             }
-        } catch (MalformedURLException e) {
+        } catch (FileNotFoundException e) {
             LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
-            throw new Exception(XACMLErrorConstants.ERROR_DATA_ISSUE + "Error in ConfigURL", e);
+            throw new PDPException(XACMLErrorConstants.ERROR_DATA_ISSUE + "Error in ConfigURL", e);
         }finally{
                if(inputStream != null){
                inputStream.close();
@@ -409,8 +411,7 @@ public class PDPServices {
         }
     }
 
-    private Response callPDP(Request request,
-            UUID requestID) throws Exception{
+    private Response callPDP(Request request, UUID requestID){
         Response response = null;
         // Get the PDPEngine
         if (requestID == null) {
index 2d8af54..d0649d7 100644 (file)
@@ -62,7 +62,7 @@ public class PolicyEngineImportService {
                     requestUUID = UUID.fromString(requestID);
                 } catch (IllegalArgumentException e) {
                     requestUUID = UUID.randomUUID();
-                    LOGGER.info("Generated Random UUID: " + requestUUID.toString());
+                    LOGGER.info("Generated Random UUID: " + requestUUID.toString(), e);
                 }
             }else{
                 requestUUID = UUID.randomUUID();
index c130657..9027e27 100644 (file)
@@ -44,186 +44,205 @@ import com.att.research.xacml.util.XACMLProperties;
 @SuppressWarnings("deprecation")
 public class ManualNotificationUpdateThread implements Runnable {
 
-       private static final Logger LOGGER      = FlexLogger.getLogger(ManualNotificationUpdateThread.class);
-
-       private static String topic = null;
-       private static CambriaConsumer CConsumer = null;
-       private static String clusterList = null;
-       private static String update = null;
-       private static BusConsumer dmaapConsumer = null;
-       private static List<String> dmaapList = null;
-       private static String propNotificationType = null;
-       private static String aafLogin = null;
-       private static String aafPassword = null;
-       
-       public volatile boolean isRunning = false;
-       
-       public synchronized boolean isRunning() {
-               return this.isRunning;
-       }
-       
-       public synchronized void terminate() {
-               this.isRunning = false;
-       }
-       
-       /**
-        * 
-        * This is our thread that runs on startup if the system is configured to UEB to accept manual update requests
-        * 
-        */
-       @Override
-       public void run() {
-               synchronized(this) {
-                       this.isRunning = true;
-               }
-               
-               URL aURL = null;
-               String group =  UUID.randomUUID ().toString ();
-               String id = "0";
-               String returnTopic = null;
-               propNotificationType = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_TYPE);
-               if ("ueb".equals(propNotificationType)){
-                       try {
-                               clusterList = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_SERVERS).trim();
-                               String url = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_ID);
-                               aURL = new URL(url);
-                               topic = aURL.getHost() + aURL.getPort();
-                       } catch (NumberFormatException e) {
-                               LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Unable to get UEB cluster list or pdp url: ", e);
-                               this.isRunning = false;
-                       } catch (MalformedURLException e) {
-                               LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Error in processing URL to create topic for Notification ", e);
-                       }
-                       if(aURL != null){
-                               String consumerTopic = aURL.getHost() + aURL.getPort() + "UpdateRequest";
-                               SendMessage(consumerTopic, "Starting-Topic");
-                               final LinkedList<String> urlList = new LinkedList<> ();
-                               for ( String u : clusterList.split ( "," ) ){
-                                       urlList.add ( u );
-                               }
-
-                               try {
-                                       CConsumer = CambriaClientFactory.createConsumer ( null, urlList, consumerTopic , group, id, 20*1000, 1000 );
-                               } catch (MalformedURLException | GeneralSecurityException e1) {
-                                       LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Unable to create UEB Consumer: ", e1);
-                               }
-
-                               while (this.isRunning()) {
-                                       LOGGER.debug("While loop test _ take out ");
-                                       try {
-                                               for ( String msg : CConsumer.fetch () ){                
-                                                       LOGGER.debug("Manual Notification Recieved Message " + msg + " from UEB cluster : ");
-                                                       returnTopic = processMessage(msg);
-                                                       if(returnTopic != null){
-                                                               SendMessage(returnTopic, update);
-                                                       }
-                                               }
-                                       } catch (IOException e) {
-                                               LOGGER.debug(XACMLErrorConstants.ERROR_DATA_ISSUE + "Error in processing UEB message" + e);
-                                       }
-                               }
-                               LOGGER.debug("Stopping UEB Consumer loop will no longer fetch messages from the cluster");      
-                       }
-               } else if ("dmaap".equals(propNotificationType)) {
-                       String dmaapServers = null;
-                       try {
-                               dmaapServers = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_SERVERS);
-                               topic = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_TOPIC);
-                               aafLogin = XACMLProperties.getProperty("DMAAP_AAF_LOGIN");
-                               aafPassword = XACMLProperties.getProperty("DMAAP_AAF_PASSWORD");
-                       } catch (Exception e) {
-                               LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Unable to get DMaaP servers list:", e);
-                               this.isRunning = false;
-                       } 
-                       
-                       if(dmaapServers==null || topic==null){
-                               LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "DMaaP properties are missing from the property file ");
-                               try {
-                                       throw new Exception(XACMLErrorConstants.ERROR_DATA_ISSUE + "DMaaP properties are missing from the property file ");
-                               } catch (Exception e) {
-                                       LOGGER.error(e);
-                               }
-                       }
-                       
-                       dmaapServers.trim();
-                       topic.trim();
-                       aafLogin.trim();
-                       aafPassword.trim();
-                       
-                       String consumerTopic = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_TOPIC).trim();
-                       SendMessage(consumerTopic, "Starting-Topic");
-                       dmaapList = new ArrayList<>();
-                       for ( String u : dmaapServers.split ( "," ) ){
-                               dmaapList.add ( u );
-                       }
-                       
-                       try {
-                               
-                               dmaapConsumer = new BusConsumer.DmaapConsumerWrapper(dmaapList, consumerTopic, aafLogin, aafPassword, group, id, 20*1000, 1000);
-                       } catch (Exception e1) {
-                               LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Unable to create DMaaP Consumer: ", e1);
-                       }
-
-                       while (this.isRunning()) {
-                               LOGGER.debug("While loop test _ take out ");
-                               try {
-                                       for ( String msg : dmaapConsumer.fetch () ){            
-                                               LOGGER.debug("Manual Notification Recieved Message " + msg + " from DMaaP server : ");
-                                               returnTopic = processMessage(msg);
-                                               if(returnTopic != null){
-                                                       SendMessage(returnTopic, update);
-                                               }
-                                       }
-                               }catch (Exception e) {
-                                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Error in processing DMaaP message: ", e);                          }
-                       }
-                       LOGGER.debug("Stopping DMaaP Consumer loop will no longer fetch messages from the servers");    
-               }
-       }
-
-       private void SendMessage( String topic, String message) {
-               CambriaPublisher pub = null;
-               BusPublisher publisher = null;
-               try {
-                       if ("ueb".equals(propNotificationType)) {
-                               pub = CambriaClientFactory.createSimplePublisher (null, clusterList, topic );
-                               pub.send( "pdpReturnMessage", message );
-                               LOGGER.debug("Sending Message to UEB topic: " + topic);
-                               pub.close();
-                               
-                       } else if ("dmaap".equals(propNotificationType)){
-                               publisher = new BusPublisher.DmaapPublisherWrapper(dmaapList,topic,aafLogin,aafPassword);
-                               publisher.send( "pdpReturnMessage", message );
-                               LOGGER.debug("Sending to Message to DMaaP topic: " + topic);
-                               publisher.close();
-                       }
-
-               } catch (Exception e) {
-                       LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+ "Error sending notification update: ", e);
-               }
-               if(pub != null){
-                       try {
-                               pub.send( "pdpReturnMessage", message );
-                               LOGGER.debug("Sending to Message to tpoic" + topic);
-                               pub.close();
-                       } catch (IOException e) {
-                               LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW+ "Error sending notification update" +e);
-                       }       
-               }               
-       }
-
-       private String processMessage(String msg) {
-               LOGGER.debug("notification message:  " + msg);
-               String[] UID = msg.split("=")[1].split("\"");
-               
-               String returnTopic = topic + UID[0];
-               if(msg.contains("Starting-Topic")){
-                       return null;
-               }
-               return returnTopic;
-       }
-       public static void setUpdate(String update) {
-               ManualNotificationUpdateThread.update = update;
-       }
-       
+    private static final Logger LOGGER = FlexLogger.getLogger(ManualNotificationUpdateThread.class);
+
+    private String topic = null;
+    private CambriaConsumer cConsumer = null;
+    private static String clusterList = null;
+    private static String update = null;
+    private BusConsumer dmaapConsumer = null;
+    private List<String> dmaapList = null;
+    private static String propNotificationType = null;
+    private static String aafLogin = null;
+    private static String aafPassword = null;
+
+    public volatile boolean isRunning = false;
+
+    public synchronized boolean isRunning() {
+        return this.isRunning;
+    }
+
+    public synchronized void terminate() {
+        this.isRunning = false;
+    }
+
+    /**
+     * 
+     * This is our thread that runs on startup if the system is configured to UEB to accept manual update requests
+     * 
+     */
+    @Override
+    public void run() {
+        synchronized (this) {
+            this.isRunning = true;
+        }
+
+        URL aURL = null;
+        String group = UUID.randomUUID().toString();
+        String id = "0";
+        String returnTopic = null;
+        setPropNotification();
+        if ("ueb".equals(propNotificationType)) {
+            try {
+                setCluster();
+                String url = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_ID);
+                aURL = new URL(url);
+                topic = aURL.getHost() + aURL.getPort();
+            } catch (NumberFormatException e) {
+                LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Unable to get UEB cluster list or pdp url: ", e);
+                this.isRunning = false;
+            } catch (MalformedURLException e) {
+                LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE
+                        + "Error in processing URL to create topic for Notification ", e);
+            }
+            if (aURL != null) {
+                String consumerTopic = aURL.getHost() + aURL.getPort() + "UpdateRequest";
+                sendMessage(consumerTopic, "Starting-Topic");
+                final LinkedList<String> urlList = new LinkedList<>();
+                for (String u : clusterList.split(",")) {
+                    urlList.add(u);
+                }
+
+                try {
+                    cConsumer = CambriaClientFactory.createConsumer(null, urlList, consumerTopic, group, id, 20 * 1000,
+                            1000);
+                } catch (MalformedURLException | GeneralSecurityException e1) {
+                    LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Unable to create UEB Consumer: ", e1);
+                }
+
+                while (this.isRunning()) {
+                    LOGGER.debug("While loop test _ take out ");
+                    try {
+                        for (String msg : cConsumer.fetch()) {
+                            LOGGER.debug("Manual Notification Recieved Message " + msg + " from UEB cluster : ");
+                            returnTopic = processMessage(msg);
+                            if (returnTopic != null) {
+                                sendMessage(returnTopic, update);
+                            }
+                        }
+                    } catch (IOException e) {
+                        LOGGER.debug(XACMLErrorConstants.ERROR_DATA_ISSUE + "Error in processing UEB message" + e);
+                    }
+                }
+                LOGGER.debug("Stopping UEB Consumer loop will no longer fetch messages from the cluster");
+            }
+        } else if ("dmaap".equals(propNotificationType)) {
+            String dmaapServers = null;
+            try {
+                dmaapServers = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_SERVERS);
+                topic = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_TOPIC);
+                setAAFCreds();
+            } catch (Exception e) {
+                LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Unable to get DMaaP servers list:", e);
+                this.isRunning = false;
+            }
+
+            if (dmaapServers == null || topic == null) {
+                LOGGER.error(
+                        XACMLErrorConstants.ERROR_DATA_ISSUE + "DMaaP properties are missing from the property file ");
+            }
+
+            dmaapServers = dmaapServers.trim();
+            topic = topic.trim();
+
+            String consumerTopic = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_TOPIC).trim();
+            sendMessage(consumerTopic, "Starting-Topic");
+            dmaapList = new ArrayList<>();
+            for (String u : dmaapServers.split(",")) {
+                dmaapList.add(u);
+            }
+
+            try {
+                dmaapConsumer = new BusConsumer.DmaapConsumerWrapper(dmaapList, consumerTopic, aafLogin, aafPassword,
+                        group, id, 20 * 1000, 1000);
+            } catch (Exception e1) {
+                LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Unable to create DMaaP Consumer: ", e1);
+            }
+
+            while (this.isRunning()) {
+                LOGGER.debug("While loop test _ take out ");
+                try {
+                    for (String msg : dmaapConsumer.fetch()) {
+                        LOGGER.debug("Manual Notification Recieved Message " + msg + " from DMaaP server : ");
+                        returnTopic = processMessage(msg);
+                        if (returnTopic != null) {
+                            sendMessage(returnTopic, update);
+                        }
+                    }
+                } catch (Exception e) {
+                    LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Error in processing DMaaP message: ", e);
+                }
+            }
+            LOGGER.debug("Stopping DMaaP Consumer loop will no longer fetch messages from the servers");
+        }
+    }
+
+    private static void setAAFCreds() {
+        aafLogin = XACMLProperties.getProperty("DMAAP_AAF_LOGIN");
+        aafPassword = XACMLProperties.getProperty("DMAAP_AAF_PASSWORD");
+        if (aafLogin != null) {
+            aafLogin = aafLogin.trim();
+        }
+        if (aafPassword != null) {
+            aafPassword = aafPassword.trim();
+        }
+    }
+
+    private static void setCluster() {
+        clusterList = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_SERVERS);
+        if (clusterList != null) {
+            clusterList = clusterList.trim();
+        }
+    }
+
+    private static void setPropNotification() {
+        propNotificationType = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_TYPE);
+    }
+
+    private void sendMessage(String topic, String message) {
+        CambriaPublisher pub = null;
+        BusPublisher publisher = null;
+        try {
+            if ("ueb".equals(propNotificationType)) {
+                pub = CambriaClientFactory.createSimplePublisher(null, clusterList, topic);
+                pub.send("pdpReturnMessage", message);
+                LOGGER.debug("Sending Message to UEB topic: " + topic);
+                pub.close();
+
+            } else if ("dmaap".equals(propNotificationType)) {
+                publisher = new BusPublisher.DmaapPublisherWrapper(dmaapList, topic, aafLogin, aafPassword);
+                publisher.send("pdpReturnMessage", message);
+                LOGGER.debug("Sending to Message to DMaaP topic: " + topic);
+                publisher.close();
+            }
+
+        } catch (Exception e) {
+            LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error sending notification update: ", e);
+        }
+        if (pub != null) {
+            try {
+                pub.send("pdpReturnMessage", message);
+                LOGGER.debug("Sending to Message to tpoic" + topic);
+                pub.close();
+            } catch (IOException e) {
+                LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error sending notification update" + e);
+            }
+        }
+    }
+
+    private String processMessage(String msg) {
+        LOGGER.debug("notification message:  " + msg);
+        String[] uID = msg.split("=")[1].split("\"");
+
+        String returnTopic = topic + uID[0];
+        if (msg.contains("Starting-Topic")) {
+            return null;
+        }
+        return returnTopic;
+    }
+
+    public static void setUpdate(String update) {
+        ManualNotificationUpdateThread.update = update;
+    }
+
 }
index 109d421..577d5b3 100644 (file)
@@ -59,284 +59,301 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectWriter;
 
 /**
- * NotificationController Checks for the Updated and Removed policies. It
- * notifies the Server to send Notifications to the Client.
+ * NotificationController Checks for the Updated and Removed policies. It notifies the Server to send Notifications to
+ * the Client.
  * 
  * @version 0.2
  *
  */
 public class NotificationController {
-       private static final Logger LOGGER = FlexLogger.getLogger(NotificationController.class);
-       private static Notification record = new Notification();
-       private PDPStatus oldStatus = null;
-       private Removed removed = null;
-       private Updated updated = null;
-       private ManualNotificationUpdateThread registerMaunualNotificationRunnable = null;
-       private Thread manualNotificationThread = null;
-       private boolean manualThreadStarted = false;
-       
-       private static String notificationJSON = null;
-       private static String propNotificationType = null;
-       private static String pdpURL = null;
-       private static Boolean notificationFlag = false; 
-       
-       public void check(PDPStatus newStatus,Map<String, PolicyDef> policyContainer) {
-               boolean updated = false;
-               boolean removed = false;
-               Notification notification = new Notification();
-               HashSet<Removed> removedPolicies = new HashSet<>();
-               HashSet<Updated> updatedPolicies = new HashSet<>();
+    private static final Logger LOGGER = FlexLogger.getLogger(NotificationController.class);
+    private static Notification record = new Notification();
+    private PDPStatus oldStatus = null;
+    private Removed removed = null;
+    private Updated updated = null;
+    private ManualNotificationUpdateThread registerMaunualNotificationRunnable = null;
+    private Thread manualNotificationThread = null;
+    private boolean manualThreadStarted = false;
 
-               if (oldStatus == null) {
-                       oldStatus = newStatus;
-               }
-               // Debugging purpose only.
-               LOGGER.debug("old config Status :" + oldStatus.getStatus());
-               LOGGER.debug("new config Status :" + newStatus.getStatus());
+    private static String notificationJSON = null;
+    private static String propNotificationType = null;
+    private static String pdpURL = null;
+    private static Boolean notificationFlag = false;
 
-               // Depending on the above condition taking the Change as an Update.
-               if (oldStatus.getStatus().toString() != newStatus.getStatus().toString()) {
-                       LOGGER.info("There is an Update to the PDP");
-                       LOGGER.debug(oldStatus.getLoadedPolicies());
-                       LOGGER.debug(newStatus.getLoadedPolicies());
-                       // Check if there is an Update/additions in the policy.
-                       for (PDPPolicy newPolicy : newStatus.getLoadedPolicies()) {
-                               boolean change = true;
-                               for (PDPPolicy oldPolicy : oldStatus.getLoadedPolicies()) {
-                                       // Check if there are same policies.
-                                       if (oldPolicy.getId().equals(newPolicy.getId())) {
-                                               // Check if they have same version.
-                                               if (oldPolicy.getVersion().equals(newPolicy.getVersion())) {
-                                                       change = false;
-                                               }
-                                       }
-                               }
-                               // if there is a change Send the notifications to the Client.
-                               if (change) {
-                                       sendUpdate(newPolicy, policyContainer);
-                                       updated = true;
-                                       updatedPolicies.add(this.updated);
-                               }
-                       }
-                       // Check if there is any removal of policy.
-                       for (PDPPolicy oldPolicy : oldStatus.getLoadedPolicies()) {
-                               boolean change = true;
-                               for (PDPPolicy newPolicy : newStatus.getLoadedPolicies()) {
-                                       // Check if there are same policies.
-                                       if (oldPolicy.getId().equals(newPolicy.getId())) {
-                                               // Check if they have same version.
-                                               if (oldPolicy.getVersion().equals(newPolicy.getVersion())) {
-                                                       change = false;
-                                               }
-                                       }
-                               }
-                               // if there is a change Send the notifications to the Client.
-                               if (change) {
-                                       sendremove(oldPolicy);
-                                       removed = true;
-                                       removedPolicies.add(this.removed);
-                               }
-                       }
-               }
-               // At the end the oldStatus must be updated with the newStatus.
-               oldStatus = newStatus;
-               // Sending Notification to the Server to pass over to the clients
-               if (updated || removed) {
-                       // Call the Notification Server..
-                       notification.setRemovedPolicies(removedPolicies);
-                       notification.setLoadedPolicies(updatedPolicies);
-                       notification = setUpdateTypes(updated, removed, notification);
-                       ObjectWriter om = new ObjectMapper().writer();
-                       try {
-                               notificationJSON = om.writeValueAsString(notification);
-                               LOGGER.info(notificationJSON);
-                               // NotificationServer Method here.
-                               propNotificationType = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_TYPE);
-                               pdpURL = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_ID);
-                               if (("ueb".equals(propNotificationType)||"dmaap".equals(propNotificationType)) && !manualThreadStarted) {
-                                       LOGGER.debug("Starting  Thread to accept UEB or DMAAP notfications.");
-                                       this.registerMaunualNotificationRunnable = new ManualNotificationUpdateThread();
-                                       this.manualNotificationThread = new Thread(this.registerMaunualNotificationRunnable);
-                                       this.manualNotificationThread.start();
-                                       manualThreadStarted = true;
-                               }
-                               String notificationJSON= null;
-                               notificationFlag = true;
-                               try{
-                                       notificationJSON= record(notification);
-                               }catch(Exception e){
-                                       LOGGER.error(e);
-                               }
-                               NotificationServer.setUpdate(notificationJSON);
-                               ManualNotificationUpdateThread.setUpdate(notificationJSON);
-                       } catch (JsonProcessingException e) {
-                               LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getMessage() +e);
-                       }
-               }
-       }
-       
-       public static void sendNotification(){
-               if(notificationFlag){
-                       try {
-                               NotificationServer.sendNotification(notificationJSON, propNotificationType, pdpURL);
-                       } catch (Exception e) {
-                               LOGGER.info(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error in sending the Event Notification: "+ e.getMessage() + e);
-                       }
-                       notificationFlag = false;
-               }
-       }
-       
-       private void sendremove(PDPPolicy oldPolicy) {
-               removed = new Removed();
-               // Want to know what is removed ?
-               LOGGER.info("Policy removed: " + oldPolicy.getId()+ " with version number: " + oldPolicy.getVersion());
-               removed.setPolicyName(oldPolicy.getId());
-               removed.setVersionNo(oldPolicy.getVersion());
-               removeFile(oldPolicy);
-       }
+    public void check(PDPStatus newStatus, Map<String, PolicyDef> policyContainer) {
+        boolean updated = false;
+        boolean removed = false;
+        Notification notification = new Notification();
+        HashSet<Removed> removedPolicies = new HashSet<>();
+        HashSet<Updated> updatedPolicies = new HashSet<>();
 
-       private void sendUpdate(PDPPolicy newPolicy,Map<String, PolicyDef> policyContainer) {
-               updated = new Updated();
-               // Want to know what is new ?
-               LOGGER.info("The new Policy is: " + newPolicy.getId());
-               LOGGER.info("The version no. is: " + newPolicy.getVersion());
-               updated.setPolicyName(newPolicy.getId());
-               updated.setVersionNo(newPolicy.getVersion());
-               updated.setUpdateType(UpdateType.NEW);
-               // If the policy is of Config type then retrieve its matches.
-               if (newPolicy.getName().contains(".Config_")) {
-                       // Take a Configuration copy to PDP webapps. 
-                       final String urlStart = "attributeId=URLID,expression";
-                       final String urlEnd = "}}},{";
-                       String policy = policyContainer.get(newPolicy.getId()).toString(); 
-                       if(policy.contains(urlStart)){
-                               String urlFinePartOne = policy.substring(policy.indexOf(urlStart)+urlStart.length());
-                               String urlFinePart = urlFinePartOne.substring(0,urlFinePartOne.indexOf(urlEnd));
-                               String urlString = urlFinePart.substring(urlFinePart.indexOf("value=$URL")+6); 
-                               callPap(urlString, "Config");
-                       }
-                       Iterator<AnyOf> anyOfs = policyContainer.get(newPolicy.getId()).getTarget().getAnyOfs();
-                       while (anyOfs.hasNext()) {
-                               AnyOf anyOf = anyOfs.next();
-                               Iterator<AllOf> allOfs = anyOf.getAllOfs();
-                               while (allOfs.hasNext()) {
-                                       AllOf allOf = allOfs.next();
-                                       Iterator<Match> matches = allOf.getMatches();
-                                       HashMap<String, String> matchValues = new HashMap<>();
-                                       while (matches.hasNext()) {
-                                               Match match = matches.next();
-                                               LOGGER.info("Attribute Value is: "+ match.getAttributeValue().getValue().toString());
-                                               String[] result = match.getAttributeRetrievalBase().toString().split("attributeId=");
-                                               result[1] = result[1].replaceAll("}", "");
-                                               if (!result[1].equals("urn:oasis:names:tc:xacml:1.0:subject:subject-id")) {
-                                                       LOGGER.info("Attribute id is: " + result[1]);
-                                               }
-                                               matchValues.put(result[1], match.getAttributeValue().getValue().toString());
-                                               LOGGER.info("Match is : "+ result[1]+ " , "     + match.getAttributeValue().getValue().toString());
-                                       }
-                                       updated.setMatches(matchValues);
-                               }
-                       }
-               }else if(newPolicy.getName().contains(".Action_")){
-                       // Take Configuration copy to PDP Webapps.
-                       // Action policies have .json as extension. 
-                       String urlString = "$URL/Action/" + newPolicy.getId().substring(0, newPolicy.getId().lastIndexOf(".")) + ".json";
-                       callPap(urlString, "Action");
-               }
-       }
+        if (oldStatus == null) {
+            oldStatus = newStatus;
+        }
+        // Debugging purpose only.
+        LOGGER.debug("old config Status :" + oldStatus.getStatus());
+        LOGGER.debug("new config Status :" + newStatus.getStatus());
+
+        // Depending on the above condition taking the Change as an Update.
+        if (oldStatus.getStatus().toString() != newStatus.getStatus().toString()) {
+            LOGGER.info("There is an Update to the PDP");
+            LOGGER.debug(oldStatus.getLoadedPolicies());
+            LOGGER.debug(newStatus.getLoadedPolicies());
+            // Check if there is an Update/additions in the policy.
+            for (PDPPolicy newPolicy : newStatus.getLoadedPolicies()) {
+                boolean change = true;
+                for (PDPPolicy oldPolicy : oldStatus.getLoadedPolicies()) {
+                    // Check if there are same policies.
+                    if (oldPolicy.getId().equals(newPolicy.getId())) {
+                        // Check if they have same version.
+                        if (oldPolicy.getVersion().equals(newPolicy.getVersion())) {
+                            change = false;
+                        }
+                    }
+                }
+                // if there is a change Send the notifications to the Client.
+                if (change) {
+                    sendUpdate(newPolicy, policyContainer);
+                    updated = true;
+                    updatedPolicies.add(this.updated);
+                }
+            }
+            // Check if there is any removal of policy.
+            for (PDPPolicy oldPolicy : oldStatus.getLoadedPolicies()) {
+                boolean change = true;
+                for (PDPPolicy newPolicy : newStatus.getLoadedPolicies()) {
+                    // Check if there are same policies.
+                    if (oldPolicy.getId().equals(newPolicy.getId())) {
+                        // Check if they have same version.
+                        if (oldPolicy.getVersion().equals(newPolicy.getVersion())) {
+                            change = false;
+                        }
+                    }
+                }
+                // if there is a change Send the notifications to the Client.
+                if (change) {
+                    sendremove(oldPolicy);
+                    removed = true;
+                    removedPolicies.add(this.removed);
+                }
+            }
+        }
+        // At the end the oldStatus must be updated with the newStatus.
+        oldStatus = newStatus;
+        // Sending Notification to the Server to pass over to the clients
+        if (updated || removed) {
+            // Call the Notification Server..
+            notification.setRemovedPolicies(removedPolicies);
+            notification.setLoadedPolicies(updatedPolicies);
+            notification = setUpdateTypes(updated, removed, notification);
+            ObjectWriter om = new ObjectMapper().writer();
+            try {
+                setNotificationJSON(om.writeValueAsString(notification));
+                LOGGER.info(notificationJSON);
+                // NotificationServer Method here.
+                setPropNotification();
+                if (("ueb".equals(propNotificationType) || "dmaap".equals(propNotificationType))
+                        && !manualThreadStarted) {
+                    LOGGER.debug("Starting  Thread to accept UEB or DMAAP notfications.");
+                    this.registerMaunualNotificationRunnable = new ManualNotificationUpdateThread();
+                    this.manualNotificationThread = new Thread(this.registerMaunualNotificationRunnable);
+                    this.manualNotificationThread.start();
+                    manualThreadStarted = true;
+                }
+                String notificationJSONString = null;
+                setNotificationFlag(true);
+                try {
+                    notificationJSONString = record(notification);
+                } catch (Exception e) {
+                    LOGGER.error(e);
+                }
+                NotificationServer.setUpdate(notificationJSONString);
+                ManualNotificationUpdateThread.setUpdate(notificationJSONString);
+            } catch (JsonProcessingException e) {
+                LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getMessage() + e);
+            }
+        }
+    }
+
+    private void setNotificationFlag(boolean value) {
+        notificationFlag = value;
+    }
+
+    private static void setNotificationJSON(String message) {
+        notificationJSON = message;
+    }
+
+    private static void setPropNotification() {
+        propNotificationType = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_TYPE);
+        pdpURL = XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_ID);
+    }
+
+    public static void sendNotification() {
+        if (notificationFlag) {
+            try {
+                NotificationServer.sendNotification(notificationJSON, propNotificationType, pdpURL);
+            } catch (Exception e) {
+                LOGGER.info(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error in sending the Event Notification: "
+                        + e.getMessage() + e);
+            }
+            notificationFlag = false;
+        }
+    }
+
+    private void sendremove(PDPPolicy oldPolicy) {
+        removed = new Removed();
+        // Want to know what is removed ?
+        LOGGER.info("Policy removed: " + oldPolicy.getId() + " with version number: " + oldPolicy.getVersion());
+        removed.setPolicyName(oldPolicy.getId());
+        removed.setVersionNo(oldPolicy.getVersion());
+        removeFile(oldPolicy);
+    }
+
+    private void sendUpdate(PDPPolicy newPolicy, Map<String, PolicyDef> policyContainer) {
+        updated = new Updated();
+        // Want to know what is new ?
+        LOGGER.info("The new Policy is: " + newPolicy.getId());
+        LOGGER.info("The version no. is: " + newPolicy.getVersion());
+        updated.setPolicyName(newPolicy.getId());
+        updated.setVersionNo(newPolicy.getVersion());
+        updated.setUpdateType(UpdateType.NEW);
+        // If the policy is of Config type then retrieve its matches.
+        if (newPolicy.getName().contains(".Config_")) {
+            // Take a Configuration copy to PDP webapps.
+            final String urlStart = "attributeId=URLID,expression";
+            final String urlEnd = "}}},{";
+            String policy = policyContainer.get(newPolicy.getId()).toString();
+            if (policy.contains(urlStart)) {
+                String urlFinePartOne = policy.substring(policy.indexOf(urlStart) + urlStart.length());
+                String urlFinePart = urlFinePartOne.substring(0, urlFinePartOne.indexOf(urlEnd));
+                String urlString = urlFinePart.substring(urlFinePart.indexOf("value=$URL") + 6);
+                callPap(urlString, "Config");
+            }
+            Iterator<AnyOf> anyOfs = policyContainer.get(newPolicy.getId()).getTarget().getAnyOfs();
+            while (anyOfs.hasNext()) {
+                AnyOf anyOf = anyOfs.next();
+                Iterator<AllOf> allOfs = anyOf.getAllOfs();
+                while (allOfs.hasNext()) {
+                    AllOf allOf = allOfs.next();
+                    Iterator<Match> matches = allOf.getMatches();
+                    HashMap<String, String> matchValues = new HashMap<>();
+                    while (matches.hasNext()) {
+                        Match match = matches.next();
+                        LOGGER.info("Attribute Value is: " + match.getAttributeValue().getValue().toString());
+                        String[] result = match.getAttributeRetrievalBase().toString().split("attributeId=");
+                        result[1] = result[1].replaceAll("}", "");
+                        if (!result[1].equals("urn:oasis:names:tc:xacml:1.0:subject:subject-id")) {
+                            LOGGER.info("Attribute id is: " + result[1]);
+                        }
+                        matchValues.put(result[1], match.getAttributeValue().getValue().toString());
+                        LOGGER.info(
+                                "Match is : " + result[1] + " , " + match.getAttributeValue().getValue().toString());
+                    }
+                    updated.setMatches(matchValues);
+                }
+            }
+        } else if (newPolicy.getName().contains(".Action_")) {
+            // Take Configuration copy to PDP Webapps.
+            // Action policies have .json as extension.
+            String urlString = "$URL/Action/" + newPolicy.getId().substring(0, newPolicy.getId().lastIndexOf("."))
+                    + ".json";
+            callPap(urlString, "Action");
+        }
+    }
+
+    // Adding this for Recording the changes to serve Polling requests..
+    private static String record(Notification notification) {
+        // Initialization with updates.
+        if (record.getRemovedPolicies() == null || record.getLoadedPolicies() == null) {
+            record.setRemovedPolicies(notification.getRemovedPolicies());
+            record.setLoadedPolicies(notification.getLoadedPolicies());
+        } else {
+            // Check if there is anything new and update the record..
+            if (record.getLoadedPolicies() != null || record.getRemovedPolicies() != null) {
+                HashSet<Removed> removedPolicies = (HashSet<Removed>) record.getRemovedPolicies();
+                HashSet<Updated> updatedPolicies = (HashSet<Updated>) record.getLoadedPolicies();
 
-       // Adding this for Recording the changes to serve Polling requests..
-       private static String record(Notification notification) throws Exception {
-               // Initialization with updates.
-               if (record.getRemovedPolicies() == null || record.getLoadedPolicies() == null) {
-                       record.setRemovedPolicies(notification.getRemovedPolicies());
-                       record.setLoadedPolicies(notification.getLoadedPolicies());
-               } else {
-                       // Check if there is anything new and update the record..
-                       if (record.getLoadedPolicies() != null  || record.getRemovedPolicies() != null) {
-                               HashSet<Removed> removedPolicies = (HashSet<Removed>) record.getRemovedPolicies();
-                               HashSet<Updated> updatedPolicies = (HashSet<Updated>) record.getLoadedPolicies();
+                // Checking with New updated policies.
+                if (notification.getLoadedPolicies() != null && !notification.getLoadedPolicies().isEmpty()) {
+                    for (Updated newUpdatedPolicy : notification.getLoadedPolicies()) {
+                        // If it was removed earlier then we need to remove from our record
+                        Iterator<Removed> oldRemovedPolicy = removedPolicies.iterator();
+                        while (oldRemovedPolicy.hasNext()) {
+                            Removed policy = oldRemovedPolicy.next();
+                            if (newUpdatedPolicy.getPolicyName().equals(policy.getPolicyName())) {
+                                if (newUpdatedPolicy.getVersionNo().equals(policy.getVersionNo())) {
+                                    oldRemovedPolicy.remove();
+                                }
+                            }
+                        }
+                        // If it was previously updated need to Overwrite it to the record.
+                        Iterator<Updated> oldUpdatedPolicy = updatedPolicies.iterator();
+                        while (oldUpdatedPolicy.hasNext()) {
+                            Updated policy = oldUpdatedPolicy.next();
+                            if (newUpdatedPolicy.getPolicyName().equals(policy.getPolicyName())) {
+                                if (newUpdatedPolicy.getVersionNo().equals(policy.getVersionNo())) {
+                                    oldUpdatedPolicy.remove();
+                                }
+                            }
+                        }
+                        updatedPolicies.add(newUpdatedPolicy);
+                    }
+                }
+                // Checking with New Removed policies.
+                if (notification.getRemovedPolicies() != null && !notification.getRemovedPolicies().isEmpty()) {
+                    for (Removed newRemovedPolicy : notification.getRemovedPolicies()) {
+                        // If it was previously removed Overwrite it to the record.
+                        Iterator<Removed> oldRemovedPolicy = removedPolicies.iterator();
+                        while (oldRemovedPolicy.hasNext()) {
+                            Removed policy = oldRemovedPolicy.next();
+                            if (newRemovedPolicy.getPolicyName().equals(policy.getPolicyName())) {
+                                if (newRemovedPolicy.getVersionNo().equals(policy.getVersionNo())) {
+                                    oldRemovedPolicy.remove();
+                                }
+                            }
+                        }
+                        // If it was added earlier then we need to remove from our record.
+                        Iterator<Updated> oldUpdatedPolicy = updatedPolicies.iterator();
+                        while (oldUpdatedPolicy.hasNext()) {
+                            Updated policy = oldUpdatedPolicy.next();
+                            if (newRemovedPolicy.getPolicyName().equals(policy.getPolicyName())) {
+                                if (newRemovedPolicy.getVersionNo().equals(policy.getVersionNo())) {
+                                    oldUpdatedPolicy.remove();
+                                }
+                            }
+                        }
+                        removedPolicies.add(newRemovedPolicy);
+                    }
+                }
+                record.setRemovedPolicies(removedPolicies);
+                record.setLoadedPolicies(updatedPolicies);
+            }
+        }
+        // Send the Result to the caller.
+        ObjectWriter om = new ObjectMapper().writer();
+        String json = null;
+        try {
+            json = om.writeValueAsString(record);
+        } catch (JsonProcessingException e) {
+            LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getMessage() + e);
+        }
+        LOGGER.info(json);
+        return json;
+    }
 
-                               // Checking with New updated policies.
-                               if (notification.getLoadedPolicies() != null && !notification.getLoadedPolicies().isEmpty()) {
-                                       for (Updated newUpdatedPolicy : notification.getLoadedPolicies()) {
-                                               // If it was removed earlier then we need to remove from our record
-                                               Iterator<Removed> oldRemovedPolicy = removedPolicies.iterator();
-                                               while (oldRemovedPolicy.hasNext()) {
-                                                       Removed policy = oldRemovedPolicy.next();
-                                                       if (newUpdatedPolicy.getPolicyName().equals(policy.getPolicyName())) {
-                                                               if (newUpdatedPolicy.getVersionNo().equals(policy.getVersionNo())) {
-                                                                       oldRemovedPolicy.remove();
-                                                               }
-                                                       }
-                                               }
-                                               // If it was previously updated need to Overwrite it to the record.
-                                               Iterator<Updated> oldUpdatedPolicy = updatedPolicies.iterator();
-                                               while (oldUpdatedPolicy.hasNext()) {
-                                                       Updated policy = oldUpdatedPolicy.next();
-                                                       if (newUpdatedPolicy.getPolicyName().equals(policy.getPolicyName())) {
-                                                               if (newUpdatedPolicy.getVersionNo().equals(policy.getVersionNo())) {
-                                                                       oldUpdatedPolicy.remove();
-                                                               }
-                                                       }
-                                               }
-                                               updatedPolicies.add(newUpdatedPolicy);
-                                       }
-                               }
-                               // Checking with New Removed policies.
-                               if (notification.getRemovedPolicies() != null && !notification.getRemovedPolicies().isEmpty()) {
-                                       for (Removed newRemovedPolicy : notification.getRemovedPolicies()) {
-                                               // If it was previously removed Overwrite it to the record.
-                                               Iterator<Removed> oldRemovedPolicy = removedPolicies.iterator();
-                                               while (oldRemovedPolicy.hasNext()) {
-                                                       Removed policy = oldRemovedPolicy.next();
-                                                       if (newRemovedPolicy.getPolicyName().equals(policy.getPolicyName())) {
-                                                               if (newRemovedPolicy.getVersionNo().equals(policy.getVersionNo())) {
-                                                                       oldRemovedPolicy.remove();
-                                                               }
-                                                       }
-                                               }
-                                               // If it was added earlier then we need to remove from our record.
-                                               Iterator<Updated> oldUpdatedPolicy = updatedPolicies.iterator();
-                                               while (oldUpdatedPolicy.hasNext()) {
-                                                       Updated policy = oldUpdatedPolicy.next();
-                                                       if (newRemovedPolicy.getPolicyName().equals(policy.getPolicyName())) {
-                                                               if (newRemovedPolicy.getVersionNo().equals(policy.getVersionNo())) {
-                                                                       oldUpdatedPolicy.remove();
-                                                               }
-                                                       }
-                                               }
-                                               removedPolicies.add(newRemovedPolicy);
-                                       }
-                               }
-                               record.setRemovedPolicies(removedPolicies);
-                               record.setLoadedPolicies(updatedPolicies);
-                       }
-               }
-               // Send the Result to the caller.
-               ObjectWriter om = new ObjectMapper().writer();
-               String json = null;
-               try {
-                       json = om.writeValueAsString(record);
-               } catch (JsonProcessingException e) {
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e.getMessage() + e);
-               }
-               LOGGER.info(json);
-               return json;
-       }
-       
-       private static Notification setUpdateTypes(boolean updated, boolean removed, Notification notification) {
-        if(notification!=null){
-            if(updated && removed){
+    private static Notification setUpdateTypes(boolean updated, boolean removed, Notification notification) {
+        if (notification != null) {
+            if (updated && removed) {
                 notification.setNotificationType(NotificationType.BOTH);
-                if(notification.getLoadedPolicies()!=null){
-                    HashSet<Updated> updatedPolicies = new HashSet<>(); 
-                    for(Updated oldUpdatedPolicy: notification.getLoadedPolicies()){
+                if (notification.getLoadedPolicies() != null) {
+                    HashSet<Updated> updatedPolicies = new HashSet<>();
+                    for (Updated oldUpdatedPolicy : notification.getLoadedPolicies()) {
                         Updated updatePolicy = oldUpdatedPolicy;
-                        if(notification.getRemovedPolicies()!=null){
-                            for(RemovedPolicy removedPolicy: notification.getRemovedPolicies()){
+                        if (notification.getRemovedPolicies() != null) {
+                            for (RemovedPolicy removedPolicy : notification.getRemovedPolicies()) {
                                 String regex = ".(\\d)*.xml";
-                                if(removedPolicy.getPolicyName().replaceAll(regex, "").equals(oldUpdatedPolicy.getPolicyName().replaceAll(regex, ""))){
+                                if (removedPolicy.getPolicyName().replaceAll(regex, "")
+                                        .equals(oldUpdatedPolicy.getPolicyName().replaceAll(regex, ""))) {
                                     updatePolicy.setUpdateType(UpdateType.UPDATE);
                                     break;
                                 }
@@ -346,70 +363,76 @@ public class NotificationController {
                     }
                     notification.setLoadedPolicies(updatedPolicies);
                 }
-            }else if(updated){
+            } else if (updated) {
                 notification.setNotificationType(NotificationType.UPDATE);
-            }else if(removed){
+            } else if (removed) {
                 notification.setNotificationType(NotificationType.REMOVE);
             }
         }
         return notification;
     }
-       
-       private void removeFile(PDPPolicy oldPolicy) {
-               try{
-                       Path removedPolicyFile = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_CONFIG)+File.separator+oldPolicy.getId());
-                       Files.deleteIfExists(removedPolicyFile);
-                       boolean delete=false;
-                       File dir= null;
-                       if(oldPolicy.getName().contains(".Config_")){
-                               delete = true;
-                               dir = new File(XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_WEBAPPS)+File.separator+"Config");
-                       }else if(oldPolicy.getName().contains(".Action_")){
-                               delete = true;
-                               dir = new File(XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_WEBAPPS)+File.separator+"Action");
-                       }
-                       if(delete){
-                               FileFilter fileFilter = new WildcardFileFilter(oldPolicy.getId().substring(0, oldPolicy.getId().lastIndexOf("."))+".*");
-                               File[] configFile = dir.listFiles(fileFilter);
-                               if(configFile.length==1){
-                                       Files.deleteIfExists(configFile[0].toPath());
-                               }
-                       }
-               }catch(Exception e){
-                       LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Couldn't remove the policy/config file " + oldPolicy.getName() + e);
-               }
-       }
-       
-       private void callPap(String urlString, String type) {
-               Path configLocation = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_WEBAPPS)+File.separator+type);
-               if(Files.notExists(configLocation)){
-                       try {
-                               Files.createDirectories(configLocation);
-                       } catch (IOException e) {
-                               LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW +"Failed to create config directory: " + configLocation.toAbsolutePath().toString(), e);
-                       }
-               }
-               PapUrlResolver papUrls = PapUrlResolver.getInstance();
-               while(papUrls.hasMoreUrls()){
-                       String papPath = papUrls.getUrl();
-                       papPath = papPath.substring(0, papPath.lastIndexOf("/pap"));
-                       String papAddress= urlString.replace("$URL", papPath);
-                       String fileName = papAddress.substring(papAddress.lastIndexOf("/")+1);
-                       String fileLocation = configLocation.toString() + File.separator + fileName;
-                       try {
-                               URL papURL = new URL(papAddress);
-                               LOGGER.info("Calling " +papAddress + " for Configuration Copy.");
-                               URLConnection urlConnection = papURL.openConnection();
-                               File file= new File(fileLocation);
-                               try (InputStream is = urlConnection.getInputStream();
-                                               OutputStream os = new FileOutputStream(file)) {
-                                       IOUtils.copy(is, os);
-                                       break;
-                               }
-                       } catch (Exception e) {
-                               LOGGER.error(e + e.getMessage());
-                       }
-                       papUrls.getNext();
-               }
-       }
+
+    private void removeFile(PDPPolicy oldPolicy) {
+        try {
+            Path removedPolicyFile = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_CONFIG)
+                    + File.separator + oldPolicy.getId());
+            Files.deleteIfExists(removedPolicyFile);
+            boolean delete = false;
+            File dir = null;
+            if (oldPolicy.getName().contains(".Config_")) {
+                delete = true;
+                dir = new File(
+                        XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_WEBAPPS) + File.separator + "Config");
+            } else if (oldPolicy.getName().contains(".Action_")) {
+                delete = true;
+                dir = new File(
+                        XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_WEBAPPS) + File.separator + "Action");
+            }
+            if (delete) {
+                FileFilter fileFilter = new WildcardFileFilter(
+                        oldPolicy.getId().substring(0, oldPolicy.getId().lastIndexOf(".")) + ".*");
+                File[] configFile = dir.listFiles(fileFilter);
+                if (configFile.length == 1) {
+                    Files.deleteIfExists(configFile[0].toPath());
+                }
+            }
+        } catch (Exception e) {
+            LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Couldn't remove the policy/config file "
+                    + oldPolicy.getName() + e);
+        }
+    }
+
+    private void callPap(String urlString, String type) {
+        Path configLocation = Paths
+                .get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PDP_WEBAPPS) + File.separator + type);
+        if (Files.notExists(configLocation)) {
+            try {
+                Files.createDirectories(configLocation);
+            } catch (IOException e) {
+                LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to create config directory: "
+                        + configLocation.toAbsolutePath().toString(), e);
+            }
+        }
+        PapUrlResolver papUrls = PapUrlResolver.getInstance();
+        while (papUrls.hasMoreUrls()) {
+            String papPath = papUrls.getUrl();
+            papPath = papPath.substring(0, papPath.lastIndexOf("/pap"));
+            String papAddress = urlString.replace("$URL", papPath);
+            String fileName = papAddress.substring(papAddress.lastIndexOf("/") + 1);
+            String fileLocation = configLocation.toString() + File.separator + fileName;
+            try {
+                URL papURL = new URL(papAddress);
+                LOGGER.info("Calling " + papAddress + " for Configuration Copy.");
+                URLConnection urlConnection = papURL.openConnection();
+                File file = new File(fileLocation);
+                try (InputStream is = urlConnection.getInputStream(); OutputStream os = new FileOutputStream(file)) {
+                    IOUtils.copy(is, os);
+                    break;
+                }
+            } catch (Exception e) {
+                LOGGER.error(e + e.getMessage());
+            }
+            papUrls.getNext();
+        }
+    }
 }
index 690d8c5..2f3d582 100644 (file)
@@ -38,6 +38,7 @@ import javax.websocket.OnOpen;
 import javax.websocket.Session;
 import javax.websocket.server.ServerEndpoint;
 
+import org.onap.policy.api.PolicyEngineException;
 import org.onap.policy.common.logging.eelf.MessageCodes;
 import org.onap.policy.common.logging.eelf.PolicyLogger;
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
@@ -66,8 +67,6 @@ public class NotificationServer {
        private static final Logger LOGGER      = FlexLogger.getLogger(NotificationServer.class);
        private static Queue<Session> queue = new ConcurrentLinkedQueue<>();
        private static String update = null;
-       private static  String hosts = null;
-       private static URL aURL = null;
        
        @OnOpen
        public void openConnection(Session session) {
@@ -88,7 +87,7 @@ public class NotificationServer {
        }
        
        @OnMessage
-       public void Message(String message, Session session) {
+       public void message(String message, Session session) {
                
                if(message.equalsIgnoreCase("Manual")) {
                        try {
@@ -101,14 +100,14 @@ public class NotificationServer {
                }
        }
 
-       public static void sendNotification(String notification, String propNotificationType, String pdpURL) throws Exception {
+       public static void sendNotification(String notification, String propNotificationType, String pdpURL) throws PolicyEngineException, IOException, InterruptedException {
 
                LOGGER.debug("Notification set to " + propNotificationType);
                if (propNotificationType.equals("ueb")){
 
                        String topic = null;
                        try {
-                               aURL = new URL(pdpURL);
+                               URL aURL = new URL(pdpURL);
                                topic = aURL.getHost() + aURL.getPort();
                        } catch (MalformedURLException e1) {
                                pdpURL = pdpURL.replace("/", "");
@@ -116,7 +115,7 @@ public class NotificationServer {
                                LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error in parsing out pdpURL for UEB notfication ");
                                PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e1, "Error in parsing out pdpURL for UEB notfication ");
                        }
-                       hosts = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_SERVERS);
+                       String hosts = XACMLProperties.getProperty(XACMLRestProperties.PROP_NOTIFICATION_SERVERS);
                        String apiKey = XACMLProperties.getProperty(XACMLRestProperties.PROP_UEB_API_KEY);
                        String apiSecret = XACMLProperties.getProperty(XACMLRestProperties.PROP_UEB_API_SECRET);
 
@@ -125,13 +124,13 @@ public class NotificationServer {
                        try {
                                if(hosts==null || topic==null || apiKey==null || apiSecret==null){
                                        LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "UEB properties are missing from the property file ");
-                                       throw new Exception(XACMLErrorConstants.ERROR_DATA_ISSUE + "UEB properties are missing from the property file ");
+                                       throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE + "UEB properties are missing from the property file ");
                                }
 
-                               hosts.trim();
-                               topic.trim();
-                               apiKey.trim();
-                               apiSecret.trim();
+                               hosts = hosts.trim();
+                               topic = topic.trim();
+                               apiKey = apiKey.trim();
+                               apiSecret = apiSecret.trim();
                                pub = new CambriaClientBuilders.PublisherBuilder ()
                                                .usingHosts ( hosts )
                                                .onTopic ( topic )
@@ -175,13 +174,13 @@ public class NotificationServer {
                        try {
                                if(dmaapServers==null || topic==null){
                                        LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "DMaaP properties are missing from the property file ");
-                                       throw new Exception(XACMLErrorConstants.ERROR_DATA_ISSUE + "DMaaP properties are missing from the property file ");
+                                       throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE + "DMaaP properties are missing from the property file ");
                                }
                                
-                               dmaapServers.trim();
-                               topic.trim();
-                               aafLogin.trim();
-                               aafPassword.trim();
+                               dmaapServers= dmaapServers.trim();
+                               topic= topic.trim();
+                               aafLogin= aafLogin.trim();
+                               aafPassword= aafPassword.trim();
                                
                                List<String> dmaapList = null;
                                if(dmaapServers.contains(",")) {
index aa55a2a..fe4ce05 100644 (file)
@@ -195,6 +195,9 @@ public class PolicyEngineServicesTest {
        
        @Test
        public void getNotificationTopicValidPassTest() throws Exception{
+           XACMLProperties.reloadProperties();
+        System.setProperty(XACMLProperties.XACML_PROPERTIES_NAME, "src/test/resources/notification.xacml.pdp.properties");
+        XACMLProperties.getProperties();
                // Add a Topic. 
                mockMvc.perform(post("/getNotification").headers(headers).header(UUIDHEADER, "123").content("test")).andExpect(status().isOk());
                // Try to add same topic should fail.  
diff --git a/ONAP-PDP-REST/src/test/resources/notification.xacml.pdp.properties b/ONAP-PDP-REST/src/test/resources/notification.xacml.pdp.properties
new file mode 100644 (file)
index 0000000..9ca1bba
--- /dev/null
@@ -0,0 +1,171 @@
+###
+# ============LICENSE_START=======================================================
+# ONAP-PDP-REST
+# ================================================================================
+# Copyright (C) 2017 AT&T 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=========================================================
+###
+
+# Default XACML Properties File for PDP RESTful servlet
+#
+# Standard API Factories
+#
+xacml.dataTypeFactory=com.att.research.xacml.std.StdDataTypeFactory
+xacml.pdpEngineFactory=com.att.research.xacmlatt.pdp.ATTPDPEngineFactory
+xacml.pepEngineFactory=com.att.research.xacml.std.pep.StdEngineFactory
+# NOT USED SEE BELOW xacml.pipFinderFactory=org.onap.policy.xacml.std.pip.StdPIPFinderFactory
+xacml.traceEngineFactory=com.att.research.xacml.std.trace.LoggingTraceEngineFactory
+#
+# AT&T PDP Implementation Factories
+#
+xacml.att.evaluationContextFactory=com.att.research.xacmlatt.pdp.std.StdEvaluationContextFactory
+xacml.att.combiningAlgorithmFactory=com.att.research.xacmlatt.pdp.std.StdCombiningAlgorithmFactory
+xacml.att.functionDefinitionFactory=org.onap.policy.xacml.custom.OnapFunctionDefinitionFactory
+# NOT USED SEE BELOW xacml.att.policyFinderFactory=org.onap.policy.pdp.std.StdPolicyFinderFactory
+# creteUpdate Policy Implementation Class details. 
+createUpdatePolicy.impl.className=org.onap.policy.pdp.rest.api.services.CreateUpdatePolicyServiceImpl
+# AAF Implementation class details
+aafClient.impl.className=org.onap.policy.utils.AAFPolicyClientImpl
+#
+# AT&T RESTful PDP Implementation Factories
+#
+xacml.pipFinderFactory=org.onap.policy.pdp.rest.impl.XACMLPdpPIPFinderFactory
+xacml.att.policyFinderFactory=org.onap.policy.pdp.rest.XACMLPdpPolicyFinderFactory
+#
+# When set to true, this flag tells the StdPolicyFinderFactory to combined all the root policy files into
+# into one PolicySet and use the given Policy Algorithm.
+#
+xacml.att.policyFinderFactory.combineRootPolicies=urn:com:att:xacml:3.0:policy-combining-algorithm:combined-permit-overrides
+#
+# PDP RESTful API properties
+# 
+# Set this to the address where the XACML-PAP-REST servlet is running
+xacml.rest.pap.url=http://localhost:8070/pap/
+
+#if multiple paps exist, the xacml.rest.pap.url can be removed and they can be defined like this:
+#xacml.rest.pap.urls=http://localhost:9090/pap/,http://localhost:9091/pap/
+
+#
+# Give the running PDP an ID for the PAP. The url that its running as is a good choice.
+# The PAP identifies PDP's using the URL of the PDP.
+#
+xacml.rest.pdp.id=http://localhost:8082/pdp/
+
+# Give the port number used for the PDP
+
+xacml.jmx.port=0
+
+
+# Notification Properties
+# Notifcation type: websocket, ueb or dmaap... if left blank websocket is the default
+NOTIFICATION_TYPE=websocket
+NOTIFICATION_SERVERS=test
+NOTIFICATION_TOPIC=test
+NOTIFICATION_DELAY=5000
+UEB_API_KEY=
+UEB_API_SECRET=
+DMAAP_AAF_LOGIN=test
+DMAAP_AAF_PASSWORD=test
+
+#
+# Set the directory where the PDP holds its Policy Cache and PIP Configuration
+#
+xacml.rest.pdp.config=config
+
+xacml.rest.pdp.webapps=/home/users/PolicyEngine/webapps/ConfigPAP/
+#
+# Initialize register with PAP servlet
+#
+xacml.rest.pdp.register=true
+#
+# Sleep period in seconds between register attempts
+#
+xacml.rest.pdp.register.sleep=15
+#
+# number of attempts to register. -1 means keep trying forever.
+#
+xacml.rest.pdp.register.retries=-1
+#
+# max number of bytes in a POST of a XML/JSON request
+# old value #32767
+xacml.rest.pdp.maxcontent=99999999 
+#
+# Set UserID here
+xacml.rest.pdp.userid=testpdp
+# Set Password here
+xacml.rest.pdp.password=alpha456
+
+# id PAP
+xacml.rest.pap.userid=testpap
+#if multiple paps have different logins, they can be defined like this:
+#http\://localhost\:9090/pap/.xacml.rest.pap.userid=testpap
+
+# pass PAP
+xacml.rest.pap.password=alpha123
+#http\://localhost\:9090/pap/.xacml.rest.pap.password=alpha123
+
+# Delay for Notifications Don't change this. Value in milliSec.  
+xacml.rest.notification.delay=30
+# Buffer Size. 
+REQUEST_BUFFER_SIZE=15
+
+#properties for MySql xacml database:  PLEASE DO NOT REMOVE... NEEDED FOR APIs
+javax.persistence.jdbc.driver=com.mysql.jdbc.Driver
+javax.persistence.jdbc.url=jdbc:mysql://localhost:3306/xacml
+javax.persistence.jdbc.user=policy_user
+javax.persistence.jdbc.password=policy_user
+
+
+#***Properties for IntegrityMonitor integration defined in XACMLRestProperties.java***
+
+#The name of the PDP.  Must be unique across the system
+xacml.rest.pdp.resource.name=site_1.pdp_1
+
+#***Properties for IntegrityMonitor integration defined in IntegrityMonitorProperties.java***
+
+#Interval between forward progress counter updates in seconds
+fp_monitor_interval=30
+
+#Number of forward progress counter failures before failover
+failed_counter_threshold=3
+
+#Interval in seconds between test transactions if there is no other traffic
+test_trans_interval=10
+
+#Interval in seconds between updates of the forward progress counter in the DB
+write_fpc_interval=5
+
+#Name of the site
+site_name=site_1
+
+#Node type
+node_type=pdp_xacml
+
+#Dependency groups are groups of resources upon which a node operational state is dependent upon). 
+#Each group is a comma-separated list of resource names and groups are separated by a semicolon.
+#A group may contain one or more members. Resource names must match the resource names defined
+#in the respective servers' properties files
+dependency_groups=site_1.pdplp_1;site_1.astragw_1;site_1.brmsgw_1
+
+# this can be DEVL, TEST, PROD 
+ENVIRONMENT=DEVL
+xacml.rest.pep.idfile = src/test/resources/client.properties
+
+#AAF Policy Name space
+#Not Mandatory for Open Onap
+policy.aaf.namespace = 
+policy.aaf.resource = 
+#
+DMAAP_AAF_LOGIN =
index 5c84496..73cb0f0 100644 (file)
@@ -95,7 +95,6 @@ public class XACMLRestProperties extends XACMLProperties {
        public static final String PROP_PAP_URLS = "xacml.rest.pap.urls";
        public static final String PROP_PAP_FAILED_URLS = "xacml.rest.pap.failedUrls";
        public static final String PROP_PAP_SUCCEEDED_URLS = "xacml.rest.pap.succeededUrls";
-       //public static final String PROP_PAP_FAILED_URL_TIME = "xacml.rest.pap.failedUrlTime";
        
        /**
         * Upon startup, have the PAP servlet send latest configuration information
index c8dc719..c29e176 100644 (file)
@@ -52,7 +52,7 @@ public class XacmlAdminAuthorization {
                return userId;
        }
 
-       public void setUserId(UserInfo userId) {
+       public static void setUserId(UserInfo userId) {
                XacmlAdminAuthorization.userId = userId;
        }
 
@@ -66,6 +66,7 @@ public class XacmlAdminAuthorization {
                AdminAction(String a) {
                        this.action = a;
                }
+               @Override
                public String toString() {
                        return this.action;
                }
@@ -84,6 +85,7 @@ public class XacmlAdminAuthorization {
                AdminResource(String r) {
                        this.resource = r;
                }
+               @Override
                public String toString() {
                        return this.resource;
                }
@@ -102,6 +104,7 @@ public class XacmlAdminAuthorization {
                Role(String a) {
                        this.userRole = a;
                }
+               @Override
                public String toString() {
                        return this.userRole;
                }
index 57daf7e..6c7b8cf 100644 (file)
@@ -317,8 +317,8 @@ public class PolicyEntity implements Serializable {
                                version == p.version &&
                                policyVersion == p.policyVersion &&
                                policyData.equals(p.policyData) &&
-                               ((configurationDataEntity == null && p.configurationDataEntity == null) || configurationDataEntity.equals(p.configurationDataEntity)) &&
-                               ((actionBodyEntity == null && p.actionBodyEntity == null) || actionBodyEntity.equals(p.actionBodyEntity)) &&
+                               ((configurationDataEntity == null && p.configurationDataEntity == null) || (configurationDataEntity!=null && configurationDataEntity.equals(p.configurationDataEntity))) &&
+                               ((actionBodyEntity == null && p.actionBodyEntity == null) || (actionBodyEntity!=null && actionBodyEntity.equals(p.actionBodyEntity))) &&
                                createdBy.equals(p.createdBy) &&
                                createdDate.equals(p.createdDate) &&
                                description.equals(p.description) &&
index 2a6571e..c79ee1e 100644 (file)
@@ -62,7 +62,7 @@ public class PolicyManagement implements Serializable {
        private String configName;
        
        @Column(name="XML", nullable=false)
-       private Clob xml;
+       private transient Clob xml;
        
        @Column(name="CREATE_DATE_TIME", nullable=false)
        private Timestamp createDateTime;
index 908078f..1fb8ec5 100644 (file)
@@ -30,6 +30,8 @@ import org.apache.commons.logging.LogFactory;
 import org.onap.policy.rest.XACMLRestProperties;
 
 import org.onap.policy.xacml.api.XACMLErrorConstants;
+
+import com.att.research.xacml.api.pap.PAPException;
 import com.att.research.xacml.util.XACMLProperties;
 
 import org.onap.policy.common.logging.eelf.MessageCodes;
@@ -46,8 +48,8 @@ public class Webapps {
        public static String getConfigHome(){
                try {
                        loadWebapps();
-               } catch (Exception e) {
-                       logger.error("Exception Occured while loading webapps"+e);
+               } catch (PAPException e) {
+                       logger.error("Exception Occured while loading webapps",e);
                        return null;
                }
                return configHome;
@@ -56,14 +58,14 @@ public class Webapps {
        public static String getActionHome(){
                try {
                        loadWebapps();
-               } catch (Exception e) {
-                       logger.error("Exception Occured while loading webapps"+e);
+               } catch (PAPException e) {
+                       logger.error("Exception Occured while loading webapps",e);
                        return null;
                }
                return actionHome;
        }
        
-       private static void loadWebapps() throws Exception{
+       private static void loadWebapps() throws PAPException{
                String errorMessageName = "Invalid Webapps Path Location property :";
                if(actionHome == null || configHome == null){
                        Path webappsPath = Paths.get(XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_WEBAPPS));
@@ -71,7 +73,7 @@ public class Webapps {
                        if (webappsPath == null) {
                                logger.error(errorMessageName + XACMLRestProperties.PROP_PAP_WEBAPPS);
                                PolicyLogger.error(errorMessageName + XACMLRestProperties.PROP_PAP_WEBAPPS);
-                               throw new Exception(errorMessageName + XACMLRestProperties.PROP_PAP_WEBAPPS);
+                               throw new PAPException(errorMessageName + XACMLRestProperties.PROP_PAP_WEBAPPS);
                        }
                        Path webappsPathConfig;
                        Path webappsPathAction;
index 91ed598..1b6397c 100644 (file)
@@ -28,6 +28,7 @@ import org.openecomp.portalsdk.core.auth.LoginStrategy;
 import org.openecomp.portalsdk.core.conf.AppConfig;
 import org.openecomp.portalsdk.core.conf.Configurable;
 import org.openecomp.portalsdk.core.objectcache.AbstractCacheManager;
+import org.openecomp.portalsdk.core.onboarding.exception.PortalAPIException;
 import org.openecomp.portalsdk.core.service.DataAccessService;
 import org.openecomp.portalsdk.core.util.CacheManager;
 import org.openecomp.portalsdk.core.util.SystemProperties;
@@ -135,11 +136,15 @@ public class ExternalAppConfig extends AppConfig implements Configurable {
         */
        // @Bean // ANNOTATION COMMENTED OUT
        // APPLICATIONS REQUIRING QUARTZ SHOULD RESTORE ANNOTATION
-       public SchedulerFactoryBean schedulerFactoryBean() throws Exception {
+       public SchedulerFactoryBean schedulerFactoryBean() throws PortalAPIException {
                SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
                scheduler.setTriggers(schedulerRegistryAdapter.getTriggers());
                scheduler.setConfigLocation(appApplicationContext.getResource("WEB-INF/conf/quartz.properties"));
-               scheduler.setDataSource(dataSource());
+               try{
+                   scheduler.setDataSource(dataSource());
+               }catch(Exception e){
+                   throw new PortalAPIException(e);
+               }
                return scheduler;
        }
 
index a4b6847..13d8836 100644 (file)
@@ -14,60 +14,63 @@ import org.openecomp.portalsdk.core.onboarding.util.PortalApiProperties;
 import org.springframework.web.servlet.ModelAndView;
 
 public class LoginStrategyImpl extends LoginStrategy {
-       
-       private static final Logger LOGGER      = FlexLogger.getLogger(LoginStrategyImpl.class);
-       
-       @Override
-       public ModelAndView doLogin(HttpServletRequest request, HttpServletResponse response) throws Exception {
-               //'login' for opensource is same as 'external' login.
-               return doExternalLogin(request, response);
-       }
-       
-       @Override
-       public String getUserId(HttpServletRequest request) throws PortalAPIException {
-               // Check ONAP Portal cookie
-               if (!isLoginCookieExist(request))
-                       return null;
 
-               String userid = null;
-               try {
-                       userid = getUserIdFromCookie(request);
-               } catch (Exception e) {
-                       LOGGER.error("Exception Occured"+e);
-               }
-               return userid;  
-       }
+    private static final Logger LOGGER = FlexLogger.getLogger(LoginStrategyImpl.class);
 
-       private static String getUserIdFromCookie(HttpServletRequest request) throws Exception {
-               String userId = "";
-               Cookie[] cookies = request.getCookies();
-               Cookie userIdcookie = null;
-               if (cookies != null)
-                       for (Cookie cookie : cookies)
-                               if (cookie.getName().equals(USER_ID))
-                                       userIdcookie = cookie;
-               if(userIdcookie!=null){
-                       userId = CipherUtil.decrypt(userIdcookie.getValue(),
-                                       PortalApiProperties.getProperty(PortalApiConstants.Decryption_Key));
-               }
-               return userId;
-       
-       }
-       
-       private static boolean isLoginCookieExist(HttpServletRequest request) {
-               Cookie ep = getCookie(request, EP_SERVICE);
-               return (ep != null);
-       }
-       
-       private static Cookie getCookie(HttpServletRequest request, String cookieName) {
-               Cookie[] cookies = request.getCookies();
-               if (cookies != null)
-                       for (Cookie cookie : cookies)
-                               if (cookie.getName().equals(cookieName))
-                                       return cookie;
+    @Override
+    public ModelAndView doLogin(HttpServletRequest request, HttpServletResponse response) throws Exception {
+        // 'login' for opensource is same as 'external' login.
+        return doExternalLogin(request, response);
+    }
 
-               return null;
-       }
+    @Override
+    public String getUserId(HttpServletRequest request) throws PortalAPIException {
+        // Check ONAP Portal cookie
+        if (!isLoginCookieExist(request))
+            return null;
+
+        String userid = null;
+        try {
+            userid = getUserIdFromCookie(request);
+        } catch (Exception e) {
+            LOGGER.error("Exception Occured" + e);
+        }
+        return userid;
+    }
+
+    private static String getUserIdFromCookie(HttpServletRequest request) throws PortalAPIException {
+        String userId = "";
+        Cookie[] cookies = request.getCookies();
+        Cookie userIdcookie = null;
+        if (cookies != null)
+            for (Cookie cookie : cookies)
+                if (cookie.getName().equals(USER_ID))
+                    userIdcookie = cookie;
+        if (userIdcookie != null) {
+            try {
+                userId = CipherUtil.decrypt(userIdcookie.getValue(),
+                        PortalApiProperties.getProperty(PortalApiConstants.Decryption_Key));
+            } catch (Exception e) {
+                throw new PortalAPIException(e);
+            }
+        }
+        return userId;
+
+    }
+
+    private static boolean isLoginCookieExist(HttpServletRequest request) {
+        Cookie ep = getCookie(request, EP_SERVICE);
+        return (ep != null);
+    }
+
+    private static Cookie getCookie(HttpServletRequest request, String cookieName) {
+        Cookie[] cookies = request.getCookies();
+        if (cookies != null)
+            for (Cookie cookie : cookies)
+                if (cookie.getName().equals(cookieName))
+                    return cookie;
+
+        return null;
+    }
 
-       
 }
index 3132b8c..14d7c7f 100644 (file)
@@ -69,10 +69,10 @@ public class StdEngine extends StdPDPItemSetChangeNotifier implements PAPPolicyE
 
        private static Log      logger  = LogFactory.getLog(StdEngine.class);
 
-       public static String    PROP_PAP_REPO = "xacml.pap.pdps";
-       public static String    PROP_PAP_GROUPS = "xacml.pap.groups";
-       public static String    PROP_PAP_GROUPS_DEFAULT = "xacml.pap.groups.default";
-       public static String    PROP_PAP_GROUPS_DEFAULT_NAME = "default";
+       public static final String      PROP_PAP_REPO = "xacml.pap.pdps";
+       public static final String      PROP_PAP_GROUPS = "xacml.pap.groups";
+       public static final String      PROP_PAP_GROUPS_DEFAULT = "xacml.pap.groups.default";
+       public static final String      PROP_PAP_GROUPS_DEFAULT_NAME = "default";
        //this value will be accessed from XacmlPapServlet so that we know if a default group did not exist
        //and was just added. This way, we can add the new group to the database.
        public boolean wasDefaultGroupJustAdded = false;
@@ -892,7 +892,7 @@ public class StdEngine extends StdPDPItemSetChangeNotifier implements PAPPolicyE
                        try {
                                ((StdPDPGroup)group).saveGroupConfiguration();
                        } catch (IOException e) {
-                               throw new PAPException("Unable to save new configuration for '" + group.getName() + "': " + e.getMessage());
+                               throw new PAPException("Unable to save new configuration for '" + group.getName() + "': " + e.getMessage(), e);
                        }
                        // update the group in the set by simply replacing the old instance with the new one
                        this.groups.remove(existingGroup);
@@ -923,13 +923,13 @@ public class StdEngine extends StdPDPItemSetChangeNotifier implements PAPPolicyE
                                }
                        } catch (Exception e) {
                                PolicyLogger.error(MessageCodes.ERROR_PROCESS_FLOW, e, "StdEngine", "Unable to rename directory");
-                               throw new PAPException("Unable to move directory from '" + oldPath + "' to '" + newPath + "': " + e.getMessage());
+                               throw new PAPException("Unable to move directory from '" + oldPath + "' to '" + newPath + "': " + e.getMessage(),e);
                        }
                        // update the disk
                        try {
                                ((StdPDPGroup)group).saveGroupConfiguration();
                        } catch (IOException e) {
-                               throw new PAPException("Unable to save new configuration for '" + group.getName() + "': " + e.getMessage());
+                               throw new PAPException("Unable to save new configuration for '" + group.getName() + "': " + e.getMessage(), e);
                        }
                        
                        // save the new group into the Set
index d69f38d..56676f3 100644 (file)
@@ -42,7 +42,7 @@ public class StdPAPPolicy implements OnapPAPPolicy, Serializable{
        private List<String> dynamicRuleAlgorithmCombo;
        private List<String> dynamicRuleAlgorithmField1;
        private List<String> dynamicRuleAlgorithmField2;
-       private List<Object> dynamicVariableList;
+       private transient List<Object> dynamicVariableList;
        private List<String> dataTypeList;
        private String configBodyData = null;
        private String policyID = null;
index 20dbfae..4c1f4aa 100644 (file)
@@ -45,11 +45,11 @@ public class StdPDP extends StdPDPItemSetChangeNotifier implements OnapPDP, Comp
        
        private Integer jmxport = 0;
        
-       private PDPStatus status = new StdPDPStatus();
+       private transient PDPStatus status = new StdPDPStatus();
        
-       private Set<PDPPolicy> policies = new HashSet<>();
+       private transient Set<PDPPolicy> policies = new HashSet<>();
        
-       private Set<PDPPIPConfig> pipConfigs = new HashSet<>();
+       private transient Set<PDPPIPConfig> pipConfigs = new HashSet<>();
        
        public StdPDP() {
                
@@ -89,7 +89,6 @@ public class StdPDP extends StdPDPItemSetChangeNotifier implements OnapPDP, Comp
                                } else if (key.toString().endsWith(".description")) {
                                        this.description = properties.getProperty(key.toString());
                                }else if (key.toString().endsWith(".jmxport")) {
-                                       //todo fix this hackjob
                                        if (properties.getProperty(key.toString()) != null && properties.getProperty(key.toString()).trim().length() > 0){
                                                logger.debug("initialize before: " + this.jmxport);
                                                this.jmxport = Integer.valueOf( properties.getProperty(key.toString()));
index 63cc4b4..28f6a4d 100644 (file)
@@ -70,20 +70,20 @@ public class StdPDPGroup extends StdPDPItemSetChangeNotifier implements OnapPDPG
        
        private String description;
        
-       private StdPDPGroupStatus status = new StdPDPGroupStatus(Status.UNKNOWN);
+       private transient StdPDPGroupStatus status = new StdPDPGroupStatus(Status.UNKNOWN);
        
-       private Set<OnapPDP>    pdps = new HashSet<>();
+       private transient Set<OnapPDP>  pdps = new HashSet<>();
        
-       private Set<PDPPolicy> policies = new HashSet<>();
+       private transient Set<PDPPolicy> policies = new HashSet<>();
        
-       private Set<PDPPolicy> selectedPolicies = new HashSet<>();
+       private transient Set<PDPPolicy> selectedPolicies = new HashSet<>();
        
-       private Set<PDPPIPConfig> pipConfigs = new HashSet<>();
+       private transient Set<PDPPIPConfig> pipConfigs = new HashSet<>();
        
        private String operation;
        
        @JsonIgnore
-       private  Path directory;
+       private  transient Path directory;
        
        @JsonIgnore
        private Integer jmxport;
@@ -187,7 +187,7 @@ public class StdPDPGroup extends StdPDPItemSetChangeNotifier implements OnapPDPG
                        try (OutputStream os = Files.newOutputStream(file)) {
                                policyProperties.store(os, "");
                        } catch (Exception e) {
-                               throw new PAPException("Failed to create new default policy properties file '" + file +"'");
+                               throw new PAPException("Failed to create new default policy properties file '" + file +"'", e);
                        }
                } else {
                        // load previously existing file
@@ -225,13 +225,13 @@ public class StdPDPGroup extends StdPDPItemSetChangeNotifier implements OnapPDPG
                                        pipProperties.store(os, "");
                                }
                        } catch (Exception e) {
-                               throw new PAPException("Failed to create new default pip properties file '" + file +"'");
+                               throw new PAPException("Failed to create new default pip properties file '" + file +"'", e);
                        }
                        //Even if we create a new pip file, we still need to parse and load the properties
                        try{
                                this.readPIPProperties(directory, pipProperties);
                        }catch(Exception e){
-                               throw new PAPException("Failed to load the new pip properties file");
+                               throw new PAPException("Failed to load the new pip properties file", e);
                        }
                } else {
                        try {
index d23501f..cc80b62 100644 (file)
@@ -41,7 +41,7 @@ public class StdPDPItemSetChangeNotifier {
        
        public void addItemSetChangeListener(StdItemSetChangeListener listener) {
                if (this.listeners == null) {
-                       this.listeners = new LinkedList<StdItemSetChangeListener>();
+                       this.listeners = new LinkedList<>();
                }
                this.listeners.add(listener);
        }
index f875995..5349f83 100644 (file)
@@ -38,15 +38,15 @@ public class StdPDPStatus implements Serializable, PDPStatus {
        
        private Set<String> loadWarnings = new HashSet<>();
        
-       private Set<PDPPolicy> loadedPolicies = new HashSet<>();
+       private transient Set<PDPPolicy> loadedPolicies = new HashSet<>();
        
-       private Set<PDPPolicy> loadedRootPolicies = new HashSet<>();
+       private transient Set<PDPPolicy> loadedRootPolicies = new HashSet<>();
        
-       private Set<PDPPolicy> failedPolicies = new HashSet<>();
+       private transient Set<PDPPolicy> failedPolicies = new HashSet<>();
        
-       private Set<PDPPIPConfig>       loadedPIPConfigs = new HashSet<>();
+       private transient Set<PDPPIPConfig>     loadedPIPConfigs = new HashSet<>();
        
-       private Set<PDPPIPConfig>       failedPIPConfigs = new HashSet<>();
+       private transient Set<PDPPIPConfig>     failedPIPConfigs = new HashSet<>();
        
        public StdPDPStatus() {
        }
index e99f35b..7234a3b 100644 (file)
@@ -361,7 +361,7 @@ public class PolicyRestController extends RestrictedBaseController{
        }
        
        @RequestMapping(value={"/saveDictionary/*/*"}, method={RequestMethod.POST})
-       public ModelAndView saveDictionaryController(HttpServletRequest request, HttpServletResponse response) throws Exception{
+       public ModelAndView saveDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException{
                String uri = request.getRequestURI().replace("/saveDictionary", "");
                if(uri.contains(importDictionary)){
                        String userId = UserUtils.getUserSession(request).getOrgUserId();
@@ -373,7 +373,7 @@ public class PolicyRestController extends RestrictedBaseController{
        }
        
        @RequestMapping(value={"/deleteDictionary/*/*"}, method={RequestMethod.POST})
-       public ModelAndView deletetDictionaryController(HttpServletRequest request, HttpServletResponse response) throws Exception{
+       public ModelAndView deletetDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException {
                String uri = request.getRequestURI().replace("/deleteDictionary", "");
                String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim());
                response.getWriter().write(body);
@@ -381,7 +381,7 @@ public class PolicyRestController extends RestrictedBaseController{
        }
        
        @RequestMapping(value={"/searchDictionary"}, method={RequestMethod.POST})
-       public ModelAndView searchDictionaryController(HttpServletRequest request, HttpServletResponse response) throws Exception{
+       public ModelAndView searchDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException {
                Object resultList = null;
                String uri = request.getRequestURI();
                try{
@@ -410,7 +410,7 @@ public class PolicyRestController extends RestrictedBaseController{
        }
        
        @RequestMapping(value={"/searchPolicy"}, method={RequestMethod.POST})
-       public ModelAndView searchPolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{
+       public ModelAndView searchPolicy(HttpServletRequest request, HttpServletResponse response) throws IOException{
                Object resultList = null;
                String uri = request.getRequestURI()+"?action=search";
                String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim());
index 0a98504..c8b7a96 100644 (file)
@@ -20,7 +20,6 @@
 
 package org.onap.policy.controller;
 
-
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -36,7 +35,6 @@ import org.openecomp.portalsdk.core.controller.RestrictedBaseController;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 
-
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.AllOfType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.AnyOfType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.ApplyType;
@@ -50,219 +48,227 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.ObligationExpressionsType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.PolicyType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.RuleType;
 import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType;
-import org.onap.policy.common.logging.flexlogger.FlexLogger; 
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 
 @Controller
-@RequestMapping({"/"})
-public class ActionPolicyController extends RestrictedBaseController{
-       private static final Logger LOGGER = FlexLogger.getLogger(ActionPolicyController.class);
-       
-       public ActionPolicyController(){
-               //Default Constructor
-       }
+@RequestMapping({ "/" })
+public class ActionPolicyController extends RestrictedBaseController {
+    private static final Logger LOGGER = FlexLogger.getLogger(ActionPolicyController.class);
+
+    public ActionPolicyController() {
+        // Default Constructor
+    }
 
-       private ArrayList<Object> attributeList;
-       protected  LinkedList<Integer> ruleAlgoirthmTracker;
-       public static final String PERFORMER_ATTRIBUTEID = "performer";
-       protected  Map<String, String> performer = new HashMap<>();
-       private  ArrayList<Object>  ruleAlgorithmList;
+    private ArrayList<Object> attributeList;
+    protected LinkedList<Integer> ruleAlgoirthmTracker;
+    public static final String PERFORMER_ATTRIBUTEID = "performer";
+    protected Map<String, String> performer = new HashMap<>();
+    private ArrayList<Object> ruleAlgorithmList;
 
-       public void prePopulateActionPolicyData(PolicyRestAdapter policyAdapter, PolicyEntity entity) {
-               attributeList = new ArrayList<>();
-               ruleAlgorithmList = new ArrayList<>();
-               performer.put("PDP", "PDPAction");
-               performer.put("PEP", "PEPAction");
+    public void prePopulateActionPolicyData(PolicyRestAdapter policyAdapter, PolicyEntity entity) {
+        attributeList = new ArrayList<>();
+        ruleAlgorithmList = new ArrayList<>();
+        performer.put("PDP", "PDPAction");
+        performer.put("PEP", "PEPAction");
 
-               if (policyAdapter.getPolicyData() instanceof PolicyType) {
-                       Object policyData = policyAdapter.getPolicyData();
-                       PolicyType policy = (PolicyType) policyData;
-                       policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName());
-                       String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("_") + 1);
-                       policyAdapter.setPolicyName(policyNameValue);
-                       String description = "";
-                       try{
-                               description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:"));
-                       }catch(Exception e){
-                               description = policy.getDescription();
-                       }
-                       policyAdapter.setPolicyDescription(description);
-                       // Get the target data under policy for Action.
-                       TargetType target = policy.getTarget();
-                       if (target != null) {
-                               // under target we have AnyOFType
-                               List<AnyOfType> anyOfList = target.getAnyOf();
-                               if (anyOfList != null) {
-                                       Iterator<AnyOfType> iterAnyOf = anyOfList.iterator();
-                                       while (iterAnyOf.hasNext()) {
-                                               AnyOfType anyOf = iterAnyOf.next();
-                                               // Under AntOfType we have AllOfType
-                                               List<AllOfType> allOfList = anyOf.getAllOf();
-                                               if (allOfList != null) {
-                                                       Iterator<AllOfType> iterAllOf = allOfList.iterator();
-                                                       while (iterAllOf.hasNext()) {
-                                                               AllOfType allOf = iterAllOf.next();
-                                                               // Under AllOfType we have Mathch.
-                                                               List<MatchType> matchList = allOf.getMatch();
-                                                               if (matchList != null) {
-                                                                       Iterator<MatchType> iterMatch = matchList.iterator();
-                                                                       while (iterMatch.hasNext()) {
-                                                                               MatchType match = iterMatch.next();
-                                                                               //
-                                                                               // Under the match we have attributevalue and
-                                                                               // attributeDesignator. So,finally down to the actual attribute.
-                                                                               //
-                                                                               AttributeValueType attributeValue = match.getAttributeValue();
-                                                                               String value = (String) attributeValue.getContent().get(0);
-                                                                               AttributeDesignatorType designator = match.getAttributeDesignator();
-                                                                               String attributeId = designator.getAttributeId();
-                                                                               // Component attributes are saved under Target here we are fetching them back.
-                                                                               // One row is default so we are not adding dynamic component at index 0.
-                                                                               Map<String, String> attribute = new HashMap<>();
-                                                                               attribute.put("key", attributeId);
-                                                                               attribute.put("value", value);
-                                                                               attributeList.add(attribute);   
-                                                                       }
-                                                               }
-                                                               policyAdapter.setAttributes(attributeList);
-                                                       }
-                                               }
-                                       }       
-                               }
+        if (policyAdapter.getPolicyData() instanceof PolicyType) {
+            Object policyData = policyAdapter.getPolicyData();
+            PolicyType policy = (PolicyType) policyData;
+            policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName());
+            String policyNameValue = policyAdapter.getPolicyName()
+                    .substring(policyAdapter.getPolicyName().indexOf("_") + 1);
+            policyAdapter.setPolicyName(policyNameValue);
+            String description = "";
+            try {
+                description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:"));
+            } catch (Exception e) {
+                LOGGER.error("Error while collecting the desciption tag in ActionPolicy " + policyNameValue, e);
+                description = policy.getDescription();
+            }
+            policyAdapter.setPolicyDescription(description);
+            // Get the target data under policy for Action.
+            TargetType target = policy.getTarget();
+            if (target != null) {
+                // under target we have AnyOFType
+                List<AnyOfType> anyOfList = target.getAnyOf();
+                if (anyOfList != null) {
+                    Iterator<AnyOfType> iterAnyOf = anyOfList.iterator();
+                    while (iterAnyOf.hasNext()) {
+                        AnyOfType anyOf = iterAnyOf.next();
+                        // Under AntOfType we have AllOfType
+                        List<AllOfType> allOfList = anyOf.getAllOf();
+                        if (allOfList != null) {
+                            Iterator<AllOfType> iterAllOf = allOfList.iterator();
+                            while (iterAllOf.hasNext()) {
+                                AllOfType allOf = iterAllOf.next();
+                                // Under AllOfType we have Mathch.
+                                List<MatchType> matchList = allOf.getMatch();
+                                if (matchList != null) {
+                                    Iterator<MatchType> iterMatch = matchList.iterator();
+                                    while (iterMatch.hasNext()) {
+                                        MatchType match = iterMatch.next();
+                                        //
+                                        // Under the match we have attributevalue and
+                                        // attributeDesignator. So,finally down to the actual attribute.
+                                        //
+                                        AttributeValueType attributeValue = match.getAttributeValue();
+                                        String value = (String) attributeValue.getContent().get(0);
+                                        AttributeDesignatorType designator = match.getAttributeDesignator();
+                                        String attributeId = designator.getAttributeId();
+                                        // Component attributes are saved under Target here we are fetching them back.
+                                        // One row is default so we are not adding dynamic component at index 0.
+                                        Map<String, String> attribute = new HashMap<>();
+                                        attribute.put("key", attributeId);
+                                        attribute.put("value", value);
+                                        attributeList.add(attribute);
+                                    }
+                                }
+                                policyAdapter.setAttributes(attributeList);
+                            }
+                        }
+                    }
+                }
 
-                               List<Object> ruleList = policy.getCombinerParametersOrRuleCombinerParametersOrVariableDefinition();
-                               // Under rule we have Condition and obligation.
-                               for (Object o : ruleList) {
-                                       if (o instanceof RuleType) {
-                                               ConditionType condition = ((RuleType) o).getCondition();
-                                               ObligationExpressionsType obligations = ((RuleType) o).getObligationExpressions();
-                                               if (condition != null) {
-                                                       int index = 0;
-                                                       ApplyType actionApply = (ApplyType) condition.getExpression().getValue();
-                                                       ruleAlgoirthmTracker = new LinkedList<>();
-                                                       // Populating Rule Algorithms starting from compound.
-                                                       prePopulateCompoundRuleAlgorithm(index, actionApply);
-                                               }
-                                               policyAdapter.setRuleAlgorithmschoices(ruleAlgorithmList);
-                                               // get the Obligation data under the rule for Form elements.
-                                               if (obligations != null) {
-                                                       // Under the obligationExpressions we have obligationExpression.
-                                                       List<ObligationExpressionType> obligationList = obligations.getObligationExpression();
-                                                       if (obligationList != null) {
-                                                               Iterator<ObligationExpressionType> iterObligation = obligationList.iterator();
-                                                               while (iterObligation.hasNext()) {
-                                                                       ObligationExpressionType obligation = iterObligation.next();
-                                                                       policyAdapter.setActionAttributeValue(obligation.getObligationId());
-                                                                       // Under the obligationExpression we have attributeAssignmentExpression.
-                                                                       List<AttributeAssignmentExpressionType> attributeAssignmentExpressionList = obligation.getAttributeAssignmentExpression();
-                                                                       if (attributeAssignmentExpressionList != null) {
-                                                                               Iterator<AttributeAssignmentExpressionType> iterAttributeAssignmentExpression = attributeAssignmentExpressionList.iterator();
-                                                                               while (iterAttributeAssignmentExpression.hasNext()) {
-                                                                                       AttributeAssignmentExpressionType attributeAssignmentExpression = iterAttributeAssignmentExpression.next();
-                                                                                       String attributeID = attributeAssignmentExpression.getAttributeId();
-                                                                                       AttributeValueType attributeValue = (AttributeValueType) attributeAssignmentExpression.getExpression().getValue();
-                                                                                       if (attributeID.equals(PERFORMER_ATTRIBUTEID)) {
-                                                                                               for (String key : performer.keySet()) {
-                                                                                                       String keyValue = performer.get(key);
-                                                                                                       if (keyValue.equals(attributeValue.getContent().get(0))) {
-                                                                                                               policyAdapter.setActionPerformer(key);
-                                                                                                       }
-                                                                                               }
-                                                                                       }
-                                                                               }
-                                                                       }
-                                                               }
-                                                       }
-                                               } 
-                                       }
-                               }
-                       }
-               }               
-       }
+                List<Object> ruleList = policy.getCombinerParametersOrRuleCombinerParametersOrVariableDefinition();
+                // Under rule we have Condition and obligation.
+                for (Object o : ruleList) {
+                    if (o instanceof RuleType) {
+                        ConditionType condition = ((RuleType) o).getCondition();
+                        ObligationExpressionsType obligations = ((RuleType) o).getObligationExpressions();
+                        if (condition != null) {
+                            int index = 0;
+                            ApplyType actionApply = (ApplyType) condition.getExpression().getValue();
+                            ruleAlgoirthmTracker = new LinkedList<>();
+                            // Populating Rule Algorithms starting from compound.
+                            prePopulateCompoundRuleAlgorithm(index, actionApply);
+                        }
+                        policyAdapter.setRuleAlgorithmschoices(ruleAlgorithmList);
+                        // get the Obligation data under the rule for Form elements.
+                        if (obligations != null) {
+                            // Under the obligationExpressions we have obligationExpression.
+                            List<ObligationExpressionType> obligationList = obligations.getObligationExpression();
+                            if (obligationList != null) {
+                                Iterator<ObligationExpressionType> iterObligation = obligationList.iterator();
+                                while (iterObligation.hasNext()) {
+                                    ObligationExpressionType obligation = iterObligation.next();
+                                    policyAdapter.setActionAttributeValue(obligation.getObligationId());
+                                    // Under the obligationExpression we have attributeAssignmentExpression.
+                                    List<AttributeAssignmentExpressionType> attributeAssignmentExpressionList = obligation
+                                            .getAttributeAssignmentExpression();
+                                    if (attributeAssignmentExpressionList != null) {
+                                        Iterator<AttributeAssignmentExpressionType> iterAttributeAssignmentExpression = attributeAssignmentExpressionList
+                                                .iterator();
+                                        while (iterAttributeAssignmentExpression.hasNext()) {
+                                            AttributeAssignmentExpressionType attributeAssignmentExpression = iterAttributeAssignmentExpression
+                                                    .next();
+                                            String attributeID = attributeAssignmentExpression.getAttributeId();
+                                            AttributeValueType attributeValue = (AttributeValueType) attributeAssignmentExpression
+                                                    .getExpression().getValue();
+                                            if (attributeID.equals(PERFORMER_ATTRIBUTEID)) {
+                                                for (String key : performer.keySet()) {
+                                                    String keyValue = performer.get(key);
+                                                    if (keyValue.equals(attributeValue.getContent().get(0))) {
+                                                        policyAdapter.setActionPerformer(key);
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
 
-       private int prePopulateCompoundRuleAlgorithm(int index, ApplyType actionApply) {
-               boolean isCompoundRule = true;
-               List<JAXBElement<?>> jaxbActionTypes = actionApply.getExpression();
-               for (JAXBElement<?> jaxbElement : jaxbActionTypes) {
-                       // If There is Attribute Value under Action Type that means we came to the final child
-                       if (LOGGER.isDebugEnabled()) {
-                               LOGGER.debug("Prepopulating rule algoirthm: " + index);
-                       }
-                       // Check to see if Attribute Value exists, if yes then it is not a compound rule
-                       if (jaxbElement.getValue() instanceof AttributeValueType) {
-                               prePopulateRuleAlgorithms(index, actionApply, jaxbActionTypes);
-                               ruleAlgoirthmTracker.addLast(index);
-                               isCompoundRule = false;
-                               index++;
-                       }
-               }
-               if (isCompoundRule) {
-                       // As it's compound rule, Get the Apply types
-                       for (JAXBElement<?> jaxbElement : jaxbActionTypes) {
-                               ApplyType innerActionApply = (ApplyType) jaxbElement.getValue();
-                               index = prePopulateCompoundRuleAlgorithm(index, innerActionApply);
-                       }
-                       // Populate combo box
-                       if (LOGGER.isDebugEnabled()) {
-                               LOGGER.debug("Prepopulating Compound rule algorithm: " + index);
-                       }
-                       Map<String, String> rule = new HashMap<String, String>();
-                       for (String key : PolicyController.getDropDownMap().keySet()) {
-                               String keyValue = PolicyController.getDropDownMap().get(key);
-                               if (keyValue.equals(actionApply.getFunctionId())) {
-                                       rule.put("dynamicRuleAlgorithmCombo", key);
-                               }
-                       }
-                       rule.put("id", "A" + (index +1));
-                       // Populate Key and values for Compound Rule
-                       rule.put("dynamicRuleAlgorithmField1", "A" + (ruleAlgoirthmTracker.getLast() + 1 ));
-                       ruleAlgoirthmTracker.removeLast();
-                       rule.put("dynamicRuleAlgorithmField2", "A" + (ruleAlgoirthmTracker.getLast() + 1));
-                       ruleAlgoirthmTracker.removeLast();
-                       ruleAlgoirthmTracker.addLast(index);
-                       ruleAlgorithmList.add(rule);
-                       index++;
-               }
-               return index;
-       }
+    private int prePopulateCompoundRuleAlgorithm(int index, ApplyType actionApply) {
+        boolean isCompoundRule = true;
+        List<JAXBElement<?>> jaxbActionTypes = actionApply.getExpression();
+        for (JAXBElement<?> jaxbElement : jaxbActionTypes) {
+            // If There is Attribute Value under Action Type that means we came to the final child
+            if (LOGGER.isDebugEnabled()) {
+                LOGGER.debug("Prepopulating rule algoirthm: " + index);
+            }
+            // Check to see if Attribute Value exists, if yes then it is not a compound rule
+            if (jaxbElement.getValue() instanceof AttributeValueType) {
+                prePopulateRuleAlgorithms(index, actionApply, jaxbActionTypes);
+                ruleAlgoirthmTracker.addLast(index);
+                isCompoundRule = false;
+                index++;
+            }
+        }
+        if (isCompoundRule) {
+            // As it's compound rule, Get the Apply types
+            for (JAXBElement<?> jaxbElement : jaxbActionTypes) {
+                ApplyType innerActionApply = (ApplyType) jaxbElement.getValue();
+                index = prePopulateCompoundRuleAlgorithm(index, innerActionApply);
+            }
+            // Populate combo box
+            if (LOGGER.isDebugEnabled()) {
+                LOGGER.debug("Prepopulating Compound rule algorithm: " + index);
+            }
+            Map<String, String> rule = new HashMap<String, String>();
+            for (String key : PolicyController.getDropDownMap().keySet()) {
+                String keyValue = PolicyController.getDropDownMap().get(key);
+                if (keyValue.equals(actionApply.getFunctionId())) {
+                    rule.put("dynamicRuleAlgorithmCombo", key);
+                }
+            }
+            rule.put("id", "A" + (index + 1));
+            // Populate Key and values for Compound Rule
+            rule.put("dynamicRuleAlgorithmField1", "A" + (ruleAlgoirthmTracker.getLast() + 1));
+            ruleAlgoirthmTracker.removeLast();
+            rule.put("dynamicRuleAlgorithmField2", "A" + (ruleAlgoirthmTracker.getLast() + 1));
+            ruleAlgoirthmTracker.removeLast();
+            ruleAlgoirthmTracker.addLast(index);
+            ruleAlgorithmList.add(rule);
+            index++;
+        }
+        return index;
+    }
 
-       private void prePopulateRuleAlgorithms(int index, ApplyType actionApply, List<JAXBElement<?>> jaxbActionTypes) {
-               Map<String, String> ruleMap = new HashMap<String, String>();
-               ruleMap.put("id", "A" + (index +1));
-               // Populate combo box
-               Map<String, String> dropDownMap = PolicyController.getDropDownMap();
-               for (String key : dropDownMap.keySet()) {
-                       String keyValue = dropDownMap.get(key);
-                       if (keyValue.equals(actionApply.getFunctionId())) {
-                               ruleMap.put("dynamicRuleAlgorithmCombo", key);
-                       }
-               }
-               // Populate the key and value fields
-               // Rule Attribute added as key
-               if ((jaxbActionTypes.get(0).getValue()) instanceof ApplyType) {
-                       // Get from Attribute Designator
-                       ApplyType innerActionApply = (ApplyType) jaxbActionTypes.get(0).getValue();
-                       List<JAXBElement<?>> jaxbInnerActionTypes = innerActionApply.getExpression();
-                       AttributeDesignatorType attributeDesignator = (AttributeDesignatorType) jaxbInnerActionTypes.get(0).getValue();
-                       ruleMap.put("dynamicRuleAlgorithmField1", attributeDesignator.getAttributeId());
+    private void prePopulateRuleAlgorithms(int index, ApplyType actionApply, List<JAXBElement<?>> jaxbActionTypes) {
+        Map<String, String> ruleMap = new HashMap<String, String>();
+        ruleMap.put("id", "A" + (index + 1));
+        // Populate combo box
+        Map<String, String> dropDownMap = PolicyController.getDropDownMap();
+        for (String key : dropDownMap.keySet()) {
+            String keyValue = dropDownMap.get(key);
+            if (keyValue.equals(actionApply.getFunctionId())) {
+                ruleMap.put("dynamicRuleAlgorithmCombo", key);
+            }
+        }
+        // Populate the key and value fields
+        // Rule Attribute added as key
+        if ((jaxbActionTypes.get(0).getValue()) instanceof ApplyType) {
+            // Get from Attribute Designator
+            ApplyType innerActionApply = (ApplyType) jaxbActionTypes.get(0).getValue();
+            List<JAXBElement<?>> jaxbInnerActionTypes = innerActionApply.getExpression();
+            AttributeDesignatorType attributeDesignator = (AttributeDesignatorType) jaxbInnerActionTypes.get(0)
+                    .getValue();
+            ruleMap.put("dynamicRuleAlgorithmField1", attributeDesignator.getAttributeId());
 
-                       // Get from Attribute Value
-                       AttributeValueType actionConditionAttributeValue = (AttributeValueType) jaxbActionTypes.get(1).getValue();
-                       String attributeValue = (String) actionConditionAttributeValue.getContent().get(0);
-                       ruleMap.put("dynamicRuleAlgorithmField2", attributeValue);
-               }
-               // Rule Attribute added as value
-               else if (((jaxbActionTypes.get(0).getValue()) instanceof AttributeValueType)) {
-                       AttributeValueType actionConditionAttributeValue = (AttributeValueType) jaxbActionTypes.get(0).getValue();
-                       String attributeValue = (String) actionConditionAttributeValue.getContent().get(0);
-                       ruleMap.put("dynamicRuleAlgorithmField2", attributeValue);
+            // Get from Attribute Value
+            AttributeValueType actionConditionAttributeValue = (AttributeValueType) jaxbActionTypes.get(1).getValue();
+            String attributeValue = (String) actionConditionAttributeValue.getContent().get(0);
+            ruleMap.put("dynamicRuleAlgorithmField2", attributeValue);
+        }
+        // Rule Attribute added as value
+        else if (((jaxbActionTypes.get(0).getValue()) instanceof AttributeValueType)) {
+            AttributeValueType actionConditionAttributeValue = (AttributeValueType) jaxbActionTypes.get(0).getValue();
+            String attributeValue = (String) actionConditionAttributeValue.getContent().get(0);
+            ruleMap.put("dynamicRuleAlgorithmField2", attributeValue);
 
-                       ApplyType innerActionApply = (ApplyType) jaxbActionTypes.get(1).getValue();
-                       List<JAXBElement<?>> jaxbInnerActionTypes = innerActionApply.getExpression();
-                       AttributeDesignatorType attributeDesignator = (AttributeDesignatorType) jaxbInnerActionTypes.get(0).getValue();
-                       ruleMap.put("dynamicRuleAlgorithmField1", attributeDesignator.getAttributeId());
-               }
-               ruleAlgorithmList.add(ruleMap);
-       }
+            ApplyType innerActionApply = (ApplyType) jaxbActionTypes.get(1).getValue();
+            List<JAXBElement<?>> jaxbInnerActionTypes = innerActionApply.getExpression();
+            AttributeDesignatorType attributeDesignator = (AttributeDesignatorType) jaxbInnerActionTypes.get(0)
+                    .getValue();
+            ruleMap.put("dynamicRuleAlgorithmField1", attributeDesignator.getAttributeId());
+        }
+        ruleAlgorithmList.add(ruleMap);
+    }
 
 }
index 820a1eb..3b88f84 100644 (file)
@@ -21,6 +21,7 @@
 package org.onap.policy.controller;
 
 
+import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.HashMap;
 import java.util.Map;
@@ -86,7 +87,7 @@ public class AdminTabController extends RestrictedBaseController{
        }
        
        @RequestMapping(value={"/adminTabController/save_LockDownValue.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
-       public ModelAndView saveAdminTabLockdownValue(HttpServletRequest request, HttpServletResponse response) throws Exception{
+       public ModelAndView saveAdminTabLockdownValue(HttpServletRequest request, HttpServletResponse response) throws IOException{
                try {
                        ObjectMapper mapper = new ObjectMapper();
                        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
index b72993f..c1468e3 100644 (file)
@@ -177,7 +177,7 @@ public class AutoPushController extends RestrictedBaseController{
        }
 
        @RequestMapping(value={"/auto_Push/PushPolicyToPDP.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
-       public ModelAndView PushPolicyToPDPGroup(HttpServletRequest request, HttpServletResponse response) throws Exception {
+       public ModelAndView pushPolicyToPDPGroup(HttpServletRequest request, HttpServletResponse response) throws IOException {
                try {
                        ArrayList<Object> selectedPDPS = new ArrayList<>();
                        ArrayList<String> selectedPoliciesInUI = new ArrayList<>();
@@ -256,7 +256,7 @@ public class AutoPushController extends RestrictedBaseController{
                                                // Create the policy
                                                selectedPolicy = new StdPDPPolicy(name, true, id, selectedURI);
                                        } catch (IOException e) {
-                                               logger.error("Unable to create policy '" + name + "': "+ e.getMessage());
+                                               logger.error("Unable to create policy '" + name + "': "+ e.getMessage(), e);
                                        }
                                        StdPDPGroup selectedGroup = (StdPDPGroup) pdpDestinationGroupId;
                                        if (selectedPolicy != null) {
@@ -319,7 +319,7 @@ public class AutoPushController extends RestrictedBaseController{
                                refreshGroups();
                                JsonMessage msg = new JsonMessage(mapper.writeValueAsString(groups));
                                JSONObject j = new JSONObject(msg);
-                               out.write(j.toString());      
+                               out.write(j.toString());
                                return null;
                        }
                }
@@ -327,6 +327,7 @@ public class AutoPushController extends RestrictedBaseController{
                        response.setCharacterEncoding("UTF-8");
                        request.setCharacterEncoding("UTF-8");
                        PrintWriter out = response.getWriter();
+                       logger.error(e);
                        out.write(e.getMessage());
                }
                return null;
@@ -334,7 +335,7 @@ public class AutoPushController extends RestrictedBaseController{
 
        @SuppressWarnings("unchecked")
        @RequestMapping(value={"/auto_Push/remove_GroupPolicies.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
-       public ModelAndView removePDPGroup(HttpServletRequest request, HttpServletResponse response) throws Exception {
+       public ModelAndView removePDPGroup(HttpServletRequest request, HttpServletResponse response) throws IOException {
                try {
                        PolicyController controller = getPolicyControllerInstance();
                        this.container = new PDPGroupContainer(controller.getPapEngine());
@@ -376,6 +377,7 @@ public class AutoPushController extends RestrictedBaseController{
                        response.setCharacterEncoding("UTF-8");
                        request.setCharacterEncoding("UTF-8");
                        PrintWriter out = response.getWriter();
+                       logger.error(e);
                        out.write(e.getMessage());
                }
                return null;
index a7ce45e..e7740c3 100644 (file)
@@ -279,6 +279,7 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController{
                                        }
                                }
                        } catch(Exception e){
+                           policyLogger.warn("Error during callTrap" , e);
                                return "(" + trap + ")";
                        }
                }else{
@@ -316,7 +317,7 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController{
                                                attrib  = getVarbindOID(attrib);
                                                attributes = attributes + "("+ URLEncoder.encode(attrib, "UTF-8")+ ")";
                                        } catch (UnsupportedEncodingException e1) {
-                                               //logger.error("Caused Exception while Encoding Varbind Dictionary Values"+e1);
+                                               policyLogger.error("Caused Exception while Encoding Varbind Dictionary Values",e1);
                                        }
                                }
                        }else{
@@ -324,7 +325,7 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController{
                                        attrib  = getVarbindOID(attrib);
                                        attributes = attributes + "("+ URLEncoder.encode(attrib, "UTF-8")+ ")";
                                } catch (UnsupportedEncodingException e) {
-                                       //logger.error("Caused Exception while Encoding Varbind Dictionary Values"+e);
+                                       policyLogger.error("Caused Exception while Encoding Varbind Dictionary Values",e);
                                }
                        }
                }else{
@@ -348,7 +349,7 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController{
                                                attrib  = getVarbindOID(attrib);
                                                attributes = attributes + "("+ URLEncoder.encode(attrib, "UTF-8") + ")";
                                        } catch (UnsupportedEncodingException e1) {
-                                               //logger.error("Caused Exception while Encoding Varbind Dictionary Values"+e1);
+                                               policyLogger.error("Caused Exception while Encoding Varbind Dictionary Values",e1);
                                        }
                                }
                        }else{
@@ -356,7 +357,7 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController{
                                        attrib  = getVarbindOID(attrib);
                                        attributes = attributes + "("+ URLEncoder.encode(attrib, "UTF-8") + ")";
                                } catch (UnsupportedEncodingException e) {
-                                       //logger.error("Caused Exception while Encoding Varbind Dictionary Values"+e);
+                                       policyLogger.error("Caused Exception while Encoding Varbind Dictionary Values",e);
                                }
                        }
                }
@@ -369,6 +370,7 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController{
                         varbindId = (VarbindDictionary) commonclassdao.getEntityItem(VarbindDictionary.class, "varbindName", attrib);
                         return varbindId.getVarbindOID();
                }catch(Exception e){
+                   policyLogger.error("Error during retrieving varbindName " + attrib, e);
                        return attrib;
                }
        }
@@ -511,6 +513,7 @@ public class CreateClosedLoopFaultController extends RestrictedBaseController{
                        try{
                                description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:"));
                        }catch(Exception e){
+                           policyLogger.error("Error during collecting the description tag info for createClosedLoopFault " + policyNameValue , e);
                                description = policy.getDescription();
                        }
                        policyAdapter.setPolicyDescription(description);
index 609a45c..815b88f 100644 (file)
@@ -55,6 +55,7 @@ import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.compress.utils.IOUtils;
 import org.apache.commons.fileupload.FileItem;
+import org.apache.commons.fileupload.FileUploadException;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 import org.apache.commons.io.FileUtils;
@@ -850,7 +851,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController {
        }
        
        @RequestMapping(value={"/policyController/getDCAEMSTemplateData.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
-       public ModelAndView getDCAEMSTemplateData(HttpServletRequest request, HttpServletResponse response) throws Exception{
+       public ModelAndView getDCAEMSTemplateData(HttpServletRequest request, HttpServletResponse response) throws IOException{
                ObjectMapper mapper = new ObjectMapper();
                mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
                JsonNode root = mapper.readTree(request.getReader());
@@ -980,7 +981,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController {
 
        
        @RequestMapping(value={"/policyController/getModelServiceVersioneData.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
-       public ModelAndView getModelServiceVersionData(HttpServletRequest request, HttpServletResponse response) throws Exception{
+       public ModelAndView getModelServiceVersionData(HttpServletRequest request, HttpServletResponse response) throws IOException{
                ObjectMapper mapper = new ObjectMapper();
                mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
                JsonNode root = mapper.readTree(request.getReader());
@@ -1068,6 +1069,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController {
                        try{
                                description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:"));
                        }catch(Exception e){
+                           LOGGER.error("Error while collecting the desciption tag in ActionPolicy " + policyNameValue ,e);
                                description = policy.getDescription();
                        }
                        policyAdapter.setPolicyDescription(description);
@@ -1270,7 +1272,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController {
        }
        
        @RequestMapping(value={"/ms_dictionary/set_MSModelData"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
-       public void SetMSModelData(HttpServletRequest request, HttpServletResponse response) throws Exception{
+       public void SetMSModelData(HttpServletRequest request, HttpServletResponse response) throws IOException, FileUploadException{
                List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
                boolean zip = false;
                boolean yml= false;
@@ -1425,7 +1427,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController {
                        }
                    }
            } catch (IOException e) {
-               LOGGER.error("Failed to unzip model file " + zipFile);
+               LOGGER.error("Failed to unzip model file " + zipFile, e);
                }finally{
                        try {
                                if(zip != null)
@@ -1470,7 +1472,7 @@ public class CreateDcaeMicroServiceController extends RestrictedBaseController {
             try {
                 FileUtils.forceDelete(new File(path));
             } catch (IOException e) {
-               LOGGER.error("Failed to delete folder " + path);
+               LOGGER.error("Failed to delete folder " + path, e);
             }  
         }
     }
index 9c07876..4506fb8 100644 (file)
@@ -27,6 +27,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.rest.adapter.PolicyRestAdapter;
 import org.onap.policy.rest.jpa.PolicyEntity;
 import org.openecomp.portalsdk.core.controller.RestrictedBaseController;
@@ -45,7 +47,7 @@ import oasis.names.tc.xacml._3_0.core.schema.wd_17.TargetType;
 @Controller
 @RequestMapping("/")
 public class CreatePolicyController extends RestrictedBaseController{
-
+    private static Logger policyLogger = FlexLogger.getLogger(CreatePolicyController.class);
        protected PolicyRestAdapter policyAdapter = null;
        private ArrayList<Object> attributeList;
        boolean isValidForm = false;
@@ -74,12 +76,13 @@ public class CreatePolicyController extends RestrictedBaseController{
                        policyAdapter.setOldPolicyFileName(policyAdapter.getPolicyName());
                        policyAdapter.setConfigType(entity.getConfigurationData().getConfigType());
                        policyAdapter.setConfigBodyData(entity.getConfigurationData().getConfigBody());
-                       String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf("_") + 1);
+                       String policyNameValue = policyAdapter.getPolicyName().substring(policyAdapter.getPolicyName().indexOf(' ') + 1);
                        policyAdapter.setPolicyName(policyNameValue);
                        String description = "";
                        try{
                                description = policy.getDescription().substring(0, policy.getDescription().indexOf("@CreatedBy:"));
                        }catch(Exception e){
+                           policyLogger.error("Error while collecting the desciption tag in ActionPolicy " + policyNameValue ,e);
                                description = policy.getDescription();
                        }
                        policyAdapter.setPolicyDescription(description);
index f40587d..bb06cb3 100644 (file)
@@ -34,11 +34,13 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.json.JSONObject;
+import org.onap.policy.admin.RESTfulPAPEngine;
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.model.PDPGroupContainer;
 import org.onap.policy.xacml.api.XACMLErrorConstants;
 import org.onap.policy.xacml.api.pap.OnapPDPGroup;
+import org.onap.policy.xacml.api.pap.PAPPolicyEngine;
 import org.onap.policy.xacml.std.pap.StdPDP;
 import org.onap.policy.xacml.std.pap.StdPDPGroup;
 import org.openecomp.policy.model.Roles;
@@ -106,6 +108,9 @@ public class PDPController extends RestrictedBaseController {
                                                }
                                        }       
                                }
+                               if(!junit&& controller.getPapEngine()==null){
+                                   setPAPEngine(request);
+                               }
                                if (roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR) || roles.contains(SUPERGUEST) ) {
                                        if(!junit){
                                                this.groups.addAll(controller.getPapEngine().getOnapPDPGroups());
@@ -156,7 +161,19 @@ public class PDPController extends RestrictedBaseController {
                }
        }
 
-       @RequestMapping(value={"/get_PDPGroupData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
+       private void setPAPEngine(HttpServletRequest request) {
+           String myRequestURL = request.getRequestURL().toString();
+        try {
+            //
+            // Set the URL for the RESTful PAP Engine
+            //
+            PolicyController.setPapEngine((PAPPolicyEngine) new RESTfulPAPEngine(myRequestURL));
+        }catch(Exception e){
+            policyLogger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR+"Exception Occured while loading PAP",e);
+        }
+    }
+
+    @RequestMapping(value={"/get_PDPGroupData"}, method={org.springframework.web.bind.annotation.RequestMethod.GET} , produces=MediaType.APPLICATION_JSON_VALUE)
        public void getPDPGroupEntityData(HttpServletRequest request, HttpServletResponse response){
                try{
                        ObjectMapper mapper = new ObjectMapper();
index 35b9b95..4a6c230 100644 (file)
@@ -40,6 +40,8 @@ import javax.servlet.http.HttpServletResponse;
 import org.json.JSONObject;
 import org.onap.policy.admin.PolicyNotificationMail;
 import org.onap.policy.admin.RESTfulPAPEngine;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.model.PDPGroupContainer;
 import org.onap.policy.rest.XACMLRestProperties;
 import org.onap.policy.rest.XacmlAdminAuthorization;
@@ -49,6 +51,8 @@ import org.onap.policy.rest.jpa.FunctionDefinition;
 import org.onap.policy.rest.jpa.PolicyEntity;
 import org.onap.policy.rest.jpa.PolicyVersion;
 import org.onap.policy.rest.jpa.UserInfo;
+import org.onap.policy.xacml.api.XACMLErrorConstants;
+import org.onap.policy.xacml.api.pap.PAPPolicyEngine;
 import org.openecomp.policy.model.Roles;
 import org.openecomp.portalsdk.core.controller.RestrictedBaseController;
 import org.openecomp.portalsdk.core.web.support.JsonMessage;
@@ -60,15 +64,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.servlet.ModelAndView;
 
-import org.onap.policy.xacml.api.XACMLErrorConstants;
-import org.onap.policy.xacml.api.pap.PAPPolicyEngine;
-
 import com.att.research.xacml.util.XACMLProperties;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-import org.onap.policy.common.logging.flexlogger.FlexLogger;
-import org.onap.policy.common.logging.flexlogger.Logger;
-
 
 @Controller
 @RequestMapping("/")
@@ -321,7 +319,7 @@ public class PolicyController extends RestrictedBaseController {
        }
 
        //Policy tabs Model and View
-       @RequestMapping(value= {"/policy", "/policy/Editor" } , method = RequestMethod.GET)
+    @RequestMapping(value= {"/policy", "/policy/Editor" } , method = RequestMethod.GET)
        public ModelAndView view(HttpServletRequest request){
                String myRequestURL = request.getRequestURL().toString();
                try {
@@ -341,7 +339,7 @@ public class PolicyController extends RestrictedBaseController {
                return papEngine;
        }
 
-       public void setPapEngine(PAPPolicyEngine papEngine) {
+       public static void setPapEngine(PAPPolicyEngine papEngine) {
                PolicyController.papEngine = papEngine;
        }
 
index bb6f38b..a6c6bf6 100644 (file)
@@ -24,6 +24,7 @@ package org.onap.policy.controller;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
+import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -116,7 +117,7 @@ public class PolicyExportAndImportController extends RestrictedBaseController {
        public PolicyExportAndImportController(){}
 
        @RequestMapping(value={"/policy_download/exportPolicy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
-       public void exportPolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{
+       public void exportPolicy(HttpServletRequest request, HttpServletResponse response) throws IOException{
                try{
                        String file = null;
                        selectedPolicy = new ArrayList<>();
@@ -202,7 +203,7 @@ public class PolicyExportAndImportController extends RestrictedBaseController {
        }
 
        //Policy Import 
-       public JSONObject importRepositoryFile(String file, HttpServletRequest request) throws Exception{
+       public JSONObject importRepositoryFile(String file, HttpServletRequest request) throws IOException{
                boolean configExists = false;
                boolean actionExists = false;
                String configName = null;
index 7312175..21f3793 100644 (file)
@@ -25,6 +25,7 @@ package org.onap.policy.controller;
  * 
  * */
 import java.io.File;
+import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.List;
 
@@ -33,6 +34,8 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.json.JSONObject;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.rest.dao.CommonClassDao;
 import org.onap.policy.rest.jpa.WatchPolicyNotificationTable;
 import org.openecomp.portalsdk.core.controller.RestrictedBaseController;
@@ -50,12 +53,13 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
 @Controller
 @RequestMapping({"/"})
 public class PolicyNotificationController extends RestrictedBaseController {
+    private static Logger logger = FlexLogger.getLogger(PolicyNotificationController.class);
 
        @Autowired
        CommonClassDao commonClassDao;
        
        @RequestMapping(value={"/watchPolicy"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
-       public ModelAndView watchPolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{
+       public ModelAndView watchPolicy(HttpServletRequest request, HttpServletResponse response) throws IOException{
                String path = "";
                String responseValue = "";
                try {
@@ -118,6 +122,7 @@ public class PolicyNotificationController extends RestrictedBaseController {
                }catch(Exception e){
                        response.setCharacterEncoding("UTF-8");
                        request.setCharacterEncoding("UTF-8");
+                       logger.error("Error druing watchPolicy function " + e);
                        PrintWriter out = response.getWriter();
                        out.write(e.getMessage());
                }
index 5fb0c1a..d1fba38 100644 (file)
@@ -22,6 +22,7 @@ package org.onap.policy.controller;
 
 
 import java.io.ByteArrayInputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintWriter;
 import java.io.StringReader;
@@ -97,7 +98,7 @@ public class PolicyValidationController extends RestrictedBaseController {
        CommonClassDao commonClassDao;
 
        @RequestMapping(value={"/policyController/validate_policy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST})
-       public ModelAndView validatePolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{
+       public ModelAndView validatePolicy(HttpServletRequest request, HttpServletResponse response) throws IOException{
                try{
                        boolean valid = true;
                        StringBuilder responseString = new StringBuilder();
@@ -266,6 +267,7 @@ public class PolicyValidationController extends RestrictedBaseController {
                                                        valid = false; 
                                                }
                                        }catch(Exception e){
+                                           LOGGER.error("ERROR in ClosedLoop_PM PolicyName" , e);
                                                responseString.append("<b>ServiceType PolicyName</b>:<i>ServiceType PolicyName is required</i><br>");
                                                valid = false;
                                        }
index 336c42c..946f90a 100644 (file)
@@ -27,6 +27,7 @@ import java.util.Map;
 import javax.script.SimpleBindings;
 
 import org.hibernate.Criteria;
+import org.hibernate.HibernateException;
 import org.hibernate.Query;
 import org.hibernate.Session;
 import org.hibernate.SessionFactory;
@@ -277,9 +278,8 @@ public class CommonClassDaoImpl implements CommonClassDao{
                }finally{
                        try{
                                session.close();
-                       }catch(Exception e1){
+                       }catch(HibernateException e1){
                                LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error While Closing Connection/Statement"+e1);
-                               throw e1;
                        }
                }
                return data;
index ae2144b..c05a674 100644 (file)
@@ -40,66 +40,64 @@ import org.onap.policy.xacml.api.pap.PAPPolicyEngine;
 
 import com.att.research.xacml.api.pap.PAPException;
 import com.att.research.xacml.api.pap.PDP;
-//import com.att.research.xacml.api.pap.PDP;
-//import com.att.research.xacml.api.pap.PDPGroup;
 import com.att.research.xacml.api.pap.PDPPIPConfig;
 import com.att.research.xacml.api.pap.PDPPolicy;
 
 public class PDPGroupContainer extends PolicyItemSetChangeNotifier implements PolicyContainer.Indexed, PolicyContainer.ItemSetChangeNotifier {
        private static final long serialVersionUID = 1L;
-       private static Logger LOGGER    = FlexLogger.getLogger(PDPGroupContainer.class);
+       private static final Logger LOGGER      = FlexLogger.getLogger(PDPGroupContainer.class);
        
     /**
      * String identifier of a file's "Id" property.
      */
-       private static String PROPERTY_ID = "Id";
+       private static final String PROPERTY_ID = "Id";
 
    /**
      * String identifier of a file's "name" property.
      */
-       private static String PROPERTY_NAME = "Name";
+       private static final String PROPERTY_NAME = "Name";
 
     /**
      * String identifier of a file's "Description" property.
      */
-       private static String PROPERTY_DESCRIPTION = "Description";
+       private static final String PROPERTY_DESCRIPTION = "Description";
 
     /**
      * String identifier of a file's "Default" property.
      */
-       private static String PROPERTY_DEFAULT = "Default";
+       private static final String PROPERTY_DEFAULT = "Default";
     /**
      * String identifier of a file's "Status" property.
      */
-       private static String PROPERTY_STATUS = "Status";
+       private static final String PROPERTY_STATUS = "Status";
 
     /**
      * String identifier of a file's "PDPs" property.
      */
-       private static String PROPERTY_PDPS = "PDPs";
+       private static final String PROPERTY_PDPS = "PDPs";
 
     /**
      * String identifier of a file's "Policies" property.
      */
-       private static String PROPERTY_POLICIES = "Policies";
+       private static final String PROPERTY_POLICIES = "Policies";
 
     /**
      * String identifier of a file's "PIP Configurations" property.
      */
-       private static String PROPERTY_PIPCONFIG = "PIP Configurations";
+       private static final String PROPERTY_PIPCONFIG = "PIP Configurations";
     
     /**
      * String identifier of a file's "Selected" property.
      */
-       private static String PROPERTY_SELECTED = "Selected";
+       private static final String PROPERTY_SELECTED = "Selected";
 
     /**
      * List of the string identifiers for the available properties.
      */
-       private static Collection<String> PDP_PROPERTIES;
+       private static Collection<String> pDPProperties;
 
-       private PAPPolicyEngine papEngine = null;
-       protected List<OnapPDPGroup> groups = Collections.synchronizedList(new ArrayList<OnapPDPGroup>());
+       private transient PAPPolicyEngine papEngine = null;
+       protected transient List<OnapPDPGroup> groups = Collections.synchronizedList(new ArrayList<OnapPDPGroup>());
        
     public PDPGroupContainer(PAPPolicyEngine papPolicyEngine) {
                super();
@@ -107,7 +105,7 @@ public class PDPGroupContainer extends PolicyItemSetChangeNotifier implements Po
                //
                //
                //
-               this.papEngine = (PAPPolicyEngine) papPolicyEngine;
+               this.papEngine = papPolicyEngine;
                //
                //
                //
@@ -197,7 +195,7 @@ public class PDPGroupContainer extends PolicyItemSetChangeNotifier implements Po
        
        @Override
        public Collection<?> getContainerPropertyIds() {
-               return PDP_PROPERTIES;
+               return pDPProperties;
        }
 
        @Override
index 8640784..a3e3e28 100644 (file)
@@ -27,67 +27,68 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.utils.PolicyContainer;
 import org.onap.policy.utils.PolicyItemSetChangeNotifier;
-import org.onap.policy.common.logging.flexlogger.*;
-
 import org.onap.policy.xacml.api.XACMLErrorConstants;
+import org.onap.policy.xacml.std.pap.StdPDPPolicy;
+
 import com.att.research.xacml.api.pap.PDP;
 import com.att.research.xacml.api.pap.PDPGroup;
 import com.att.research.xacml.api.pap.PDPPolicy;
-import org.onap.policy.xacml.std.pap.StdPDPPolicy;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 public class PDPPolicyContainer extends PolicyItemSetChangeNotifier implements PolicyContainer.Indexed {
        private static final long serialVersionUID = 1L;
-       private static Logger LOGGER    = FlexLogger.getLogger(PDPPolicyContainer.class);
+       private static final Logger LOGGER      = FlexLogger.getLogger(PDPPolicyContainer.class);
        
         /**
      * String identifier of a file's "Id" property.
      */
-       private static String PROPERTY_ID = "Id";
+       private static final String PROPERTY_ID = "Id";
 
    /**
      * String identifier of a file's "name" property.
      */
-       private static String PROPERTY_NAME = "Name";
+       private static final String PROPERTY_NAME = "Name";
 
     /**
       * String identifier of a file's "name" property.
       */
-       private static String PROPERTY_VERSION = "Version";
+       private static final String PROPERTY_VERSION = "Version";
      
     /**
      * String identifier of a file's "Description" property.
      */
-       private static String PROPERTY_DESCRIPTION = "Description";
+       private static final String PROPERTY_DESCRIPTION = "Description";
     
     /**
      * String identifier of a file's "IsRoot" property.
      */
-       private static String PROPERTY_ISROOT = "Root";
+       private static final String PROPERTY_ISROOT = "Root";
 
     /**
      * List of the string identifiers for the available properties.
      */
-       private static Collection<String> PDPPOLICY_PROPERTIES;
+       private static Collection<String> pDPPolicyProperties;
  
-    private final Object data;
-    private List<PDPPolicy> policies;
+    private final transient Object data;
+    private transient List<PDPPolicy> policies;
     
        @SuppressWarnings("unchecked")
        public PDPPolicyContainer(Object data) {
                super();
                this.data = data;
                if (this.data instanceof PDPGroup) {
-                       policies = new ArrayList<PDPPolicy> (((PDPGroup) this.data).getPolicies());
+                       policies = new ArrayList<> (((PDPGroup) this.data).getPolicies());
                }
                if (this.data instanceof PDP) {
-                       policies = new ArrayList<PDPPolicy> (((PDP) this.data).getPolicies());
+                       policies = new ArrayList<> (((PDP) this.data).getPolicies());
                }
                if (this.data instanceof Set) {
-                       policies = new ArrayList<PDPPolicy> ((Set<PDPPolicy>)data);
+                       policies = new ArrayList<> ((Set<PDPPolicy>)data);
                }
                if (this.policies == null) {
                        LOGGER.info("NULL policies");
@@ -172,7 +173,7 @@ public class PDPPolicyContainer extends PolicyItemSetChangeNotifier implements P
 
        @Override
        public Collection<?> getContainerPropertyIds() {
-               return PDPPOLICY_PROPERTIES;
+               return pDPPolicyProperties;
        }
 
        @Override
index 3699bfc..d031868 100644 (file)
@@ -10,123 +10,131 @@ import org.onap.policy.api.PDPNotification;
 import org.onap.policy.common.logging.flexlogger.FlexLogger;
 import org.onap.policy.common.logging.flexlogger.Logger;
 import org.onap.policy.utils.BusConsumer;
+import org.onap.policy.utils.BusConsumer.DmaapConsumerWrapper;
 import org.onap.policy.xacml.api.XACMLErrorConstants;
 
 public class AutoClientDMAAP implements Runnable {
-       private static StdPDPNotification notification = null;
-       private static NotificationScheme scheme = null;
-       private static NotificationHandler handler = null;
-       private static String topic = null;
-       private static boolean status = false; 
-       private static Logger logger = FlexLogger.getLogger(AutoClientDMAAP.class.getName());
-       private static String notficatioinType = null;
-       private static BusConsumer dmaapConsumer = null;
-       private static List<String> dmaapList = null; 
-       private static String aafLogin = null;
-       private static String aafPassword = null;
-       public volatile boolean isRunning = false;
-    
-
-       public AutoClientDMAAP(List<String> dmaapList, String topic, String aafLogin, String aafPassword) {
-              AutoClientDMAAP.topic = topic;
-              AutoClientDMAAP.dmaapList = dmaapList;
-              AutoClientDMAAP.aafLogin = aafLogin;
-              AutoClientDMAAP.aafPassword = aafPassword;
-       }
-
-       public void setAuto(NotificationScheme scheme,
-                       NotificationHandler handler) {
-               AutoClientDMAAP.scheme = scheme;
-               AutoClientDMAAP.handler = handler;
-       }
-
-       public static void setScheme(NotificationScheme scheme) {
-               AutoClientDMAAP.scheme = scheme;
-       }
-       
-       public static boolean getStatus(){
-               return AutoClientDMAAP.status;
-       }
-
-       public static String getTopic() {
-               return AutoClientDMAAP.topic;
-       }
-       
-       public static String getNotficationType(){
-               return AutoClientDMAAP.notficatioinType;
-       }
-
-       public synchronized boolean isRunning() {
-               return this.isRunning;
-       }
-       
-       public synchronized void terminate() {
-               this.isRunning = false;
-       }
-       
-       @Override
-       public void run() {
-               synchronized(this) {
-                       this.isRunning = true;
-               }
-               String group =  UUID.randomUUID ().toString ();
-               String id = "0";
-
-               // Stop and Start needs to be done.
-               if (scheme != null && handler!=null) {
-                       if (scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS) || scheme.equals(NotificationScheme.AUTO_NOTIFICATIONS)) {
-                                       
-                               // create a loop to listen for messages from DMaaP server
-                               try {
-                                       dmaapConsumer = new BusConsumer.DmaapConsumerWrapper(dmaapList, topic, aafLogin, aafPassword, group, id, 15*1000, 1000 );
-                               } catch (Exception e) {
-                                       logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Unable to create DMaaP Consumer: ", e);
-                               } 
-                               
-                               while (this.isRunning() )
-                               {
-                                       try {
-                                               for ( String msg : dmaapConsumer.fetch () )
-                                               {               
-                                                       logger.debug("Auto Notification Recieved Message " + msg + " from DMAAP server : " + dmaapList.toString());
-                                                       notification = NotificationUnMarshal.notificationJSON(msg);
-                                                       callHandler();
-                                               }
-                                       } catch (Exception e) {
-                                               logger.debug("Error in processing DMAAP message");
-                                       }
-
-                               }
-                               logger.debug("Stopping DMAAP Consumer loop will no longer fetch messages from the servers");
-                       }
-               }
-       }
-
-       private static void callHandler() {
-               if (handler != null && scheme != null) {
-                       if (scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS)) {
-                               boolean removed = false, updated = false;
-                               if (notification.getRemovedPolicies() != null && !notification.getRemovedPolicies().isEmpty()) {
-                                       removed = true;
-                               }
-                               if (notification.getLoadedPolicies() != null && !notification.getLoadedPolicies().isEmpty()) {
-                                       updated = true;
-                               }
-                               if (removed && updated) {
-                                       notification.setNotificationType(NotificationType.BOTH);
-                               } else if (removed) {
-                                       notification.setNotificationType(NotificationType.REMOVE);
-                               } else if (updated) {
-                                       notification.setNotificationType(NotificationType.UPDATE);
-                               }
-                               handler.notificationReceived(notification);
-                       } else if (scheme.equals(NotificationScheme.AUTO_NOTIFICATIONS)) {
-                               PDPNotification newNotification = MatchStore.checkMatch(notification);
-                               if (newNotification.getNotificationType() != null) {
-                                       handler.notificationReceived(newNotification);
-                               }
-                       }
-               }
-       }
+    private static StdPDPNotification notification = null;
+    private static NotificationScheme scheme = null;
+    private static NotificationHandler handler = null;
+    private static String topic = null;
+    private static boolean status = false;
+    private static Logger logger = FlexLogger.getLogger(AutoClientDMAAP.class.getName());
+    private static String notficatioinType = null;
+    private static BusConsumer dmaapConsumer = null;
+    private static List<String> dmaapList = null;
+    private static String aafLogin = null;
+    private static String aafPassword = null;
+    private volatile boolean running = false;
+
+    public AutoClientDMAAP(List<String> dmaapList, String topic, String aafLogin, String aafPassword) {
+        AutoClientDMAAP.topic = topic;
+        AutoClientDMAAP.dmaapList = dmaapList;
+        AutoClientDMAAP.aafLogin = aafLogin;
+        AutoClientDMAAP.aafPassword = aafPassword;
+    }
+
+    public static void setAuto(NotificationScheme scheme, NotificationHandler handler) {
+        AutoClientDMAAP.scheme = scheme;
+        AutoClientDMAAP.handler = handler;
+    }
+
+    public static void setScheme(NotificationScheme scheme) {
+        AutoClientDMAAP.scheme = scheme;
+    }
+
+    public static boolean getStatus() {
+        return AutoClientDMAAP.status;
+    }
+
+    public static String getTopic() {
+        return AutoClientDMAAP.topic;
+    }
+
+    public static String getNotficationType() {
+        return AutoClientDMAAP.notficatioinType;
+    }
+
+    public synchronized boolean isRunning() {
+        return this.running;
+    }
+
+    public synchronized void terminate() {
+        this.running = false;
+    }
+
+    @Override
+    public void run() {
+        synchronized (this) {
+            this.running = true;
+        }
+        String group = UUID.randomUUID().toString();
+        String id = "0";
+
+        // Stop and Start needs to be done.
+        if (scheme != null && handler != null) {
+            if (scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS)
+                    || scheme.equals(NotificationScheme.AUTO_NOTIFICATIONS)) {
+
+                // create a loop to listen for messages from DMaaP server
+                try {
+                    setDmaapCosumer(new BusConsumer.DmaapConsumerWrapper(dmaapList, topic, aafLogin, aafPassword, group,
+                            id, 15 * 1000, 1000));
+                } catch (Exception e) {
+                    logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Unable to create DMaaP Consumer: ", e);
+                }
+
+                while (this.isRunning()) {
+                    try {
+                        for (String msg : dmaapConsumer.fetch()) {
+                            logger.debug("Auto Notification Recieved Message " + msg + " from DMAAP server : "
+                                    + dmaapList.toString());
+                            setNotification(NotificationUnMarshal.notificationJSON(msg));
+                            callHandler();
+                        }
+                    } catch (Exception e) {
+                        logger.debug("Error in processing DMAAP message", e);
+                    }
+
+                }
+                logger.debug("Stopping DMAAP Consumer loop will no longer fetch messages from the servers");
+            }
+        }
+    }
+
+    private void setNotification(StdPDPNotification notificationJSON) {
+        notification = notificationJSON;
+    }
+
+    private static void setDmaapCosumer(DmaapConsumerWrapper dmaapConsumerWrapper) {
+        dmaapConsumer = dmaapConsumerWrapper;
+    }
+
+    private static void callHandler() {
+        if (handler != null && scheme != null) {
+            if (scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS)) {
+                boolean removed = false, updated = false;
+                if (notification.getRemovedPolicies() != null && !notification.getRemovedPolicies().isEmpty()) {
+                    removed = true;
+                }
+                if (notification.getLoadedPolicies() != null && !notification.getLoadedPolicies().isEmpty()) {
+                    updated = true;
+                }
+                if (removed && updated) {
+                    notification.setNotificationType(NotificationType.BOTH);
+                } else if (removed) {
+                    notification.setNotificationType(NotificationType.REMOVE);
+                } else if (updated) {
+                    notification.setNotificationType(NotificationType.UPDATE);
+                }
+                handler.notificationReceived(notification);
+            } else if (scheme.equals(NotificationScheme.AUTO_NOTIFICATIONS)) {
+                PDPNotification newNotification = MatchStore.checkMatch(notification);
+                if (newNotification.getNotificationType() != null) {
+                    handler.notificationReceived(newNotification);
+                }
+            }
+        }
+    }
 
 }
index 976b570..f0d99d0 100644 (file)
@@ -32,19 +32,14 @@ import javax.websocket.OnMessage;
 import javax.websocket.OnOpen;
 import javax.websocket.Session;
 
-//import org.apache.log4j.Logger;
 import org.glassfish.tyrus.client.ClientManager;
 import org.onap.policy.api.NotificationHandler;
 import org.onap.policy.api.NotificationScheme;
 import org.onap.policy.api.NotificationType;
 import org.onap.policy.api.PDPNotification;
-import org.onap.policy.std.NotificationStore;
-import org.onap.policy.std.StdPDPNotification;
-
-import org.onap.policy.xacml.api.XACMLErrorConstants;
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import org.onap.policy.common.logging.flexlogger.*; 
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
+import org.onap.policy.xacml.api.XACMLErrorConstants; 
 
 @ClientEndpoint
 public class AutoClientEnd {
@@ -99,12 +94,10 @@ public class AutoClientEnd {
                                                        // The URL's will be in Sync according to design Spec. 
                                                        ManualClientEnd.start(AutoClientEnd.url);
                                                        StdPDPNotification notification = NotificationStore.getDeltaNotification((StdPDPNotification)ManualClientEnd.result(NotificationScheme.MANUAL_ALL_NOTIFICATIONS));
-                                                       if(notification.getNotificationType()!=null){
-                                                               if(oldNotification!=notification){
-                                                                       oldNotification= notification;
-                                                                       AutoClientEnd.notification = notification;
-                                                                       callHandler();
-                                                               }
+                                                       if(notification.getNotificationType()!=null&&oldNotification!=notification){
+                                                           oldNotification= notification;
+                                                           AutoClientEnd.notification = notification;
+                                                           callHandler();
                                                        }
                                                        error = false;
                                                }
@@ -136,7 +129,7 @@ public class AutoClientEnd {
                                        session.close();
                                        session = null;
                                } catch (IOException e) {
-                                       //
+                                       logger.error("Error closing websocket connection", e);
                                }
                        }
                        client = null;
@@ -148,7 +141,8 @@ public class AutoClientEnd {
        private static void callHandler() {
                if (handler != null && scheme != null) {
                        if (scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS)) {
-                               boolean removed = false, updated = false;
+                               boolean removed = false;
+                               boolean updated = false;
                                if (notification.getRemovedPolicies() != null && !notification.getRemovedPolicies().isEmpty()) {
                                        removed = true;
                                }
@@ -182,9 +176,7 @@ public class AutoClientEnd {
 
        // WebSockets Code..
        @OnOpen
-       public void onOpen(Session session) throws IOException {
-               // session.getBasicRemote().sendText("Connected to Client with Session: "
-               // + session.getId());
+       public static void onOpen(Session session){
                logger.debug("Auto Notification Session Started... " + session.getId());
                if(AutoClientEnd.session == null){
                        AutoClientEnd.session = session;
@@ -192,10 +184,9 @@ public class AutoClientEnd {
        }
 
        @OnError
-       public void onError(Session session, Throwable e) {
+       public static void onError(Session session, Throwable e) {
                // trying to Restart by self.
                logger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Session Error.. "+ session.getId() + "\n Error is : " + e );
-               // logger.error("Exception Occured"+e);
                stop();
                if (url != null) {
                        client = null;
@@ -206,7 +197,7 @@ public class AutoClientEnd {
        }
 
        @OnClose
-       public void onClose(Session session) {
+       public static void onClose(Session session) {
                logger.info("Session ended with "+ session.getId());
                if(!stop && !message){
                        // This Block of code is executed if there is any Network Failure or if the Notification is Down. 
@@ -222,7 +213,7 @@ public class AutoClientEnd {
        }
 
        @OnMessage
-       public void onMessage(String message, Session session) throws JsonParseException, JsonMappingException, IOException {
+       public static void onMessage(String message, Session session) throws IOException {
                AutoClientEnd.message = true;
                logger.debug("Auto Notification Recieved Message " + message + " Session info is : " + session.getId());
                try {
index 37413f4..f84568a 100644 (file)
@@ -51,11 +51,11 @@ public class AutoClientUEB implements Runnable  {
        private static boolean status = false; 
        private static Logger logger = FlexLogger.getLogger(AutoClientUEB.class.getName());
        private static String notficatioinType = null;
-       private static CambriaConsumer CConsumer = null;
+       private static CambriaConsumer cConsumer = null;
        private static String apiKey = null;
        private static String apiSecret = null;
        private static List<String> uebURLList = null; 
-       public volatile boolean isRunning = false;
+       private volatile boolean running = false;
     
 
        public AutoClientUEB(String url, List<String> uebURLList, String apiKey, String apiSecret) {
@@ -65,7 +65,7 @@ public class AutoClientUEB implements Runnable  {
               AutoClientUEB.apiKey = apiKey;
        }
 
-       public void setAuto(NotificationScheme scheme,
+       public static void setAuto(NotificationScheme scheme,
                        NotificationHandler handler) {
                AutoClientUEB.scheme = scheme;
                AutoClientUEB.handler = handler;
@@ -88,34 +88,31 @@ public class AutoClientUEB implements Runnable  {
        }
 
        public synchronized boolean isRunning() {
-               return this.isRunning;
+               return this.running;
        }
        
        public synchronized void terminate() {
-               this.isRunning = false;
+               this.running = false;
        }
        
        @Override
        public void run() {
                synchronized(this) {
-                       this.isRunning = true;
+                       this.running = true;
                }
                String group =  UUID.randomUUID ().toString ();
                String id = "0";
-               //String topic = null;
                // Stop and Start needs to be done.
                if (scheme != null && handler!=null) {
                        if (scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS) || scheme.equals(NotificationScheme.AUTO_NOTIFICATIONS)) {
                                URL aURL;
                                try {
                                        aURL = new URL(AutoClientUEB.topic);
-                                       topic = aURL.getHost() + aURL.getPort();
+                                       setTopic(aURL.getHost() + aURL.getPort());
                                } catch (MalformedURLException e) {
-                                       topic = AutoClientUEB.url.replace("[:/]", "");
+                                       setTopic(AutoClientUEB.url.replace("[:/]", ""));
                                }
-                                       
                                try {
-                                       //CConsumer = CambriaClientFactory.createConsumer ( null, uebURLList, topic, group, id, 15*1000, 1000 );
                                        ConsumerBuilder builder = new CambriaClientBuilders.ConsumerBuilder();
                                        builder.knownAs(group, id)
                                        .usingHosts(uebURLList)
@@ -123,35 +120,46 @@ public class AutoClientUEB implements Runnable  {
                                        .waitAtServer(15*1000)
                                        .receivingAtMost(1000)
                                        .authenticatedBy(apiKey, apiSecret);
-                                       
-                                        CConsumer = builder.build();
-                                       
+                                       setConsumer(builder.build()); 
                                } catch (Exception e1) {
                                        logger.error("Exception Occured" + e1);
                                } 
-                               while (this.isRunning() )
-                               {
-                                       try {
-                                               for ( String msg : CConsumer.fetch () )
-                                               {               
-                                                       logger.debug("Auto Notification Recieved Message " + msg + " from UEB cluster : " + uebURLList.toString());
-                                                       notification = NotificationUnMarshal.notificationJSON(msg);
-                                                       callHandler();
-                                               }
-                                       } catch (Exception e) {
-                                               logger.debug(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Error in processing UEB message" + e.getMessage());
-                                       }
+                while (this.isRunning()) {
+                    try {
+                        for (String msg : cConsumer.fetch()) {
+                            logger.debug("Auto Notification Recieved Message " + msg + " from UEB cluster : "
+                                    + uebURLList.toString());
+                            setNotification(NotificationUnMarshal.notificationJSON(msg));
+                            callHandler();
+                        }
+                    } catch (Exception e) {
+                        logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Error in processing UEB message"
+                                + e.getMessage(), e);
+                    }
 
-                               }
+                }
                                logger.debug("Stopping UEB Consumer loop will not logger fetch messages from the cluster");
                        }
                }
        }
 
-       private static void callHandler() {
+       private static void setNotification(StdPDPNotification notificationJSON) {
+           notification = notificationJSON;
+    }
+
+    private static void setConsumer(CambriaConsumer build) {
+           cConsumer = build;
+    }
+
+    private static void setTopic(String topic) {
+           AutoClientUEB.topic = topic;
+    }
+
+    private static void callHandler() {
                if (handler != null && scheme != null) {
                        if (scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS)) {
-                               boolean removed = false, updated = false;
+                               boolean removed = false;
+                               boolean updated = false;
                                if (notification.getRemovedPolicies() != null && !notification.getRemovedPolicies().isEmpty()) {
                                        removed = true;
                                }
index 7e4ba07..db3fdf1 100644 (file)
@@ -33,7 +33,6 @@ import javax.websocket.OnMessage;
 import javax.websocket.OnOpen;
 import javax.websocket.Session;
 
-//import org.apache.log4j.Logger;
 import org.glassfish.tyrus.client.ClientManager;
 import org.onap.policy.api.NotificationScheme;
 import org.onap.policy.api.NotificationType;
@@ -62,9 +61,7 @@ public class ManualClientEnd {
                try {
                        client.connectToServer(ManualClientEnd.class, new URI(url+"notifications"));
                        latch.await();
-               } catch (DeploymentException | URISyntaxException | InterruptedException e) {
-                       logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
-               } catch (IOException e) {
+               } catch (DeploymentException | URISyntaxException | InterruptedException |IOException e) {
                        logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
                }
        }
@@ -75,7 +72,8 @@ public class ManualClientEnd {
                        return null;
                } else {
                        if(scheme.equals(NotificationScheme.MANUAL_ALL_NOTIFICATIONS)) {
-                               boolean removed = false, updated = false; 
+                               boolean removed = false;
+                               boolean updated = false; 
                                if(notification.getRemovedPolicies()!=null && !notification.getRemovedPolicies().isEmpty()){
                                        removed = true;
                                }
@@ -118,7 +116,7 @@ public class ManualClientEnd {
        }
        
        @OnMessage
-       public void onMessage(String message, Session session){
+       public static void onMessage(String message, Session session){
                logger.debug(" Manual Notification Recieved Message : " + message +" Session info is : "+ session.getId());
                resultJson = message;
                try {
index dcd86eb..29c85a2 100644 (file)
@@ -145,13 +145,12 @@ public class ManualClientEndUEB {
                                                logger.debug("Manual Notification Recieved Message " + msg + " from UEB cluster : " + uebURLList.toString());
                                                resultJson = msg;
                                                if (!msg.contains("UEB Update")){
-//                                                     System.out.println("Manual Notification Recieved Message " + msg + " from UEB cluster : " + uebURLList.toString());
                                                        notification = NotificationUnMarshal.notificationJSON(msg);
                                                        count = 4;
                                                }
                                        }
                                }catch (Exception e) {
-                                       
+                                       logger.error("Error in Manual CLient UEB notification ", e);
                                } 
                                count++;
                        }               
index 2ec174c..447e7cb 100644 (file)
 
 package org.onap.policy.std;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 
 import org.onap.policy.api.LoadedPolicy;
 import org.onap.policy.api.RemovedPolicy;
 import org.onap.policy.api.UpdateType;
-import org.onap.policy.std.StdLoadedPolicy;
-import org.onap.policy.std.StdPDPNotification;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 public class NotificationUnMarshal {
-       private static StdPDPNotification notification;
        
-       public static StdPDPNotification notificationJSON(String json) throws Exception{
+       public static StdPDPNotification notificationJSON(String json) throws IOException{
                ObjectMapper mapper = new ObjectMapper();
-               notification = mapper.readValue(json, StdPDPNotification.class);
-               if(notification!=null){
-                       if(notification.getLoadedPolicies()!=null){
-                               Collection<StdLoadedPolicy> stdLoadedPolicies = new ArrayList<>();
-                               for(LoadedPolicy loadedPolicy: notification.getLoadedPolicies()){
-                                       StdLoadedPolicy stdLoadedPolicy = (StdLoadedPolicy) loadedPolicy;
-                                       if(notification.getRemovedPolicies()!=null){
-                                               Boolean updated = false;
-                                               for(RemovedPolicy removedPolicy: notification.getRemovedPolicies()){
-                                                       String regex = ".(\\d)*.xml";
-                                                       if(removedPolicy.getPolicyName().replaceAll(regex, "").equals(stdLoadedPolicy.getPolicyName().replaceAll(regex, ""))){
-                                                               updated  = true;
-                                                               break;
-                                                       }
-                                               }
-                                               if(updated){
-                                                       stdLoadedPolicy.setUpdateType(UpdateType.UPDATE);
-                                               }else{
-                                                       stdLoadedPolicy.setUpdateType(UpdateType.NEW);
-                                               }
-                                       }else{
-                                               stdLoadedPolicy.setUpdateType(UpdateType.NEW);
-                                       }
-                                       stdLoadedPolicies.add(stdLoadedPolicy);
-                               }
-                               notification.setLoadedPolicies(stdLoadedPolicies);
-                       }
+               StdPDPNotification notification = mapper.readValue(json, StdPDPNotification.class);
+               if(notification!=null&&notification.getLoadedPolicies()!=null){
+                   Collection<StdLoadedPolicy> stdLoadedPolicies = new ArrayList<>();
+                   for(LoadedPolicy loadedPolicy: notification.getLoadedPolicies()){
+                       StdLoadedPolicy stdLoadedPolicy = (StdLoadedPolicy) loadedPolicy;
+                       if(notification.getRemovedPolicies()!=null){
+                           Boolean updated = false;
+                           for(RemovedPolicy removedPolicy: notification.getRemovedPolicies()){
+                               String regex = ".(\\d)*.xml";
+                               if(removedPolicy.getPolicyName().replaceAll(regex, "").equals(stdLoadedPolicy.getPolicyName().replaceAll(regex, ""))){
+                                   updated  = true;
+                                   break;
+                               }
+                           }
+                           if(updated){
+                               stdLoadedPolicy.setUpdateType(UpdateType.UPDATE);
+                           }else{
+                               stdLoadedPolicy.setUpdateType(UpdateType.NEW);
+                           }
+                       }else{
+                           stdLoadedPolicy.setUpdateType(UpdateType.NEW);
+                       }
+                       stdLoadedPolicies.add(stdLoadedPolicy);
+                   }
+                   notification.setLoadedPolicies(stdLoadedPolicies);
                }
                return notification;
        }
index 8a6c6c6..4e904b6 100644 (file)
@@ -18,7 +18,6 @@
  * ============LICENSE_END=========================================================
  */
 
-
 package org.onap.policy.std;
 
 import java.io.FileInputStream;
@@ -107,184 +106,189 @@ import com.google.gson.GsonBuilder;
  * @version 1.0
  */
 public class StdPolicyEngine {
-       private static final String ERROR_AUTH_GET_PERM = "You are not allowed to Make this Request. Please contact PolicyAdmin to give access to: ";
-       private static final String DEFAULT_NOTIFICATION = "websocket";
-       
-       private String propertyFilePath = null;
-       private String clientEncoding = null;
-       private String contentType = null;
-       private static List<String> pdps = null;
-       private static String environment= null; 
-       private static String userName = null;
-       private static String pass = null; 
-       private static List<String> encoding = null;
-       private static boolean junit = false;
-       private List<String> pdpDefault = null;
-       private List<String> typeDefault = null;
-       private List<String> notificationType = new ArrayList<String>();
-       private List<String> notificationURLList = new ArrayList<String>();
-       private NotificationScheme scheme = null;
-       private NotificationHandler handler = null;
-       private AutoClientUEB uebClientThread = null;
-       private Thread registerUEBThread = null;
-       private boolean uebThread = false;
-       private AutoClientDMAAP dmaapClientThread = null;
-       private Thread registerDMAAPThread = null;
-       private boolean dmaapThread = false;
-       private String topic = null;
-       private String apiKey = null;
-       private String apiSecret = null;
-
-       private static final String UNIQUEID = UUID.randomUUID ().toString ();
-       private static final Logger LOGGER = FlexLogger.getLogger(StdPolicyConfig.class.getName());
-       
-       /*
-        * Taking the Property file even if it null.
-        */
-       public StdPolicyEngine(String propertyFilePath, String clientKey) throws PolicyEngineException {
-               setProperty(propertyFilePath, clientKey);
-       }
-
-       /*
-        * Taking the Notification Constructor.
-        */
-       public StdPolicyEngine(String propertyFilePath,
-                                                  NotificationScheme scheme,
-                                                  NotificationHandler handler) throws PolicyEngineException {
-               setProperty(propertyFilePath, null);
-               this.scheme = scheme;
-               this.handler = handler;
-               if ((!"ueb".equals(notificationType.get(0)))||(!"dmaap".equals(notificationType.get(0)))){
-                       AutoClientEnd.setAuto(scheme, handler);
-               }
-               notification(scheme, handler);
-       }
-
-       /*
-        * Taking the Notification Constructor.
-        */
-       public StdPolicyEngine(String propertyFilePath, NotificationScheme scheme) throws PolicyEngineException {
-               setProperty(propertyFilePath, null);
-               this.scheme = scheme;
-               setScheme(scheme);
-       }
-
-       /*
-        * sendEvent API Implementation
-        */
-       public Collection<PolicyResponse> sendEvent(Map<String, String> eventAttributes, UUID requestID) throws PolicyEventException {
-               return sendEventImpl(eventAttributes, requestID);
-       }
-       
-       /*
-        * sendEvent API Implementation for eventRequestParameters 
-        */
-       public Collection<PolicyResponse> sendEvent(EventRequestParameters eventRequestParameters) throws PolicyEventException{
-               if(eventRequestParameters==null){
-                       String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No event Request Parameters Given. ";
-                       LOGGER.error(message);
-                       throw new PolicyEventException(message);
-               }
-               return sendEventImpl(eventRequestParameters.getEventAttributes(), eventRequestParameters.getRequestID());
-       }
-
-       /*
-        * getConfig using configRequestParameters Implementation 
-        */
-       public Collection<PolicyConfig> getConfig(ConfigRequestParameters configRequestParameters) throws PolicyConfigException{
-               return getConfigImpl(configRequestParameters);
-       }
-       
-       /*
-        * listPolicies using configRequestParameters Implementation
-        */
-       public Collection<String> listConfig(ConfigRequestParameters listPolicyRequestParameters) throws PolicyConfigException{
-               return listConfigImpl(listPolicyRequestParameters);
-       }
-
-       /*
-        * getDecision using the decision Attributes.
-        */
-       public DecisionResponse getDecision(String onapName, Map<String, String> decisionAttributes, UUID requestID) throws PolicyDecisionException {
-               return getDecisionImpl(onapName, decisionAttributes, requestID);
-       }
-       
-       /*
-        * getDecision Using decisionRequestParameters.  
-        */
-       public DecisionResponse getDecision(DecisionRequestParameters decisionRequestParameters) throws PolicyDecisionException{
-               if(decisionRequestParameters==null){
-                       String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Decision Request Parameters Given. ";
-                       LOGGER.error(message);
-                       throw new PolicyDecisionException(message);
-               }
-               return getDecisionImpl(decisionRequestParameters.getOnapName(), decisionRequestParameters.getDecisionAttributes(), decisionRequestParameters.getRequestID());
-       }
-       
-       /*
-        * getMetrics using metricsRequestParameters
-        */
-       public MetricsResponse getMetrics(MetricsRequestParameters parameters) throws PolicyException{
-               return getMetricsImpl(parameters);
-       }
-       
-       public MetricsResponse getMetricsImpl(MetricsRequestParameters parameters) throws PolicyException{
-               StdMetricsResponse response = new StdMetricsResponse();
-               String resource = "getMetrics";
-               String body = new String();
-               
-               //  Create the Request
-               try {
-                       if (parameters!=null) {
-                               body = PolicyUtils.objectToJsonString(parameters);
-                       }
-               } catch (JsonProcessingException e) {
-                       String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e;
-                       LOGGER.error(message);
-                       throw new PolicyException(message, e);
-               }
-        // Get Response. 
+    private static final String ERROR_AUTH_GET_PERM = "You are not allowed to Make this Request. Please contact PolicyAdmin to give access to: ";
+    private static final String DEFAULT_NOTIFICATION = "websocket";
+
+    private String clientEncoding = null;
+    private String contentType = null;
+    private static List<String> pdps = null;
+    private static String environment = null;
+    private static String userName = null;
+    private static String pass = null;
+    private static List<String> encoding = null;
+    private static boolean junit = false;
+    private List<String> pdpDefault = null;
+    private List<String> typeDefault = null;
+    private List<String> notificationType = new ArrayList<>();
+    private List<String> notificationURLList = new ArrayList<>();
+    private NotificationScheme scheme = null;
+    private NotificationHandler handler = null;
+    private AutoClientUEB uebClientThread = null;
+    private Thread registerUEBThread = null;
+    private boolean uebThread = false;
+    private AutoClientDMAAP dmaapClientThread = null;
+    private Thread registerDMAAPThread = null;
+    private boolean dmaapThread = false;
+    private String topic = null;
+    private String apiKey = null;
+    private String apiSecret = null;
+
+    private static final String UNIQUEID = UUID.randomUUID().toString();
+    private static final Logger LOGGER = FlexLogger.getLogger(StdPolicyConfig.class.getName());
+
+    /*
+     * Taking the Property file even if it null.
+     */
+    public StdPolicyEngine(String propertyFilePath, String clientKey) throws PolicyEngineException {
+        setProperty(propertyFilePath, clientKey);
+    }
+
+    /*
+     * Taking the Notification Constructor.
+     */
+    public StdPolicyEngine(String propertyFilePath, NotificationScheme scheme, NotificationHandler handler)
+            throws PolicyEngineException {
+        setProperty(propertyFilePath, null);
+        this.scheme = scheme;
+        this.handler = handler;
+        if ((!"ueb".equals(notificationType.get(0))) || (!"dmaap".equals(notificationType.get(0)))) {
+            AutoClientEnd.setAuto(scheme, handler);
+        }
+        notification(scheme, handler);
+    }
+
+    /*
+     * Taking the Notification Constructor.
+     */
+    public StdPolicyEngine(String propertyFilePath, NotificationScheme scheme) throws PolicyEngineException {
+        setProperty(propertyFilePath, null);
+        this.scheme = scheme;
+        setScheme(scheme);
+    }
+
+    /*
+     * sendEvent API Implementation
+     */
+    public Collection<PolicyResponse> sendEvent(Map<String, String> eventAttributes, UUID requestID)
+            throws PolicyEventException {
+        return sendEventImpl(eventAttributes, requestID);
+    }
+
+    /*
+     * sendEvent API Implementation for eventRequestParameters
+     */
+    public Collection<PolicyResponse> sendEvent(EventRequestParameters eventRequestParameters)
+            throws PolicyEventException {
+        if (eventRequestParameters == null) {
+            String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No event Request Parameters Given. ";
+            LOGGER.error(message);
+            throw new PolicyEventException(message);
+        }
+        return sendEventImpl(eventRequestParameters.getEventAttributes(), eventRequestParameters.getRequestID());
+    }
+
+    /*
+     * getConfig using configRequestParameters Implementation
+     */
+    public Collection<PolicyConfig> getConfig(ConfigRequestParameters configRequestParameters)
+            throws PolicyConfigException {
+        return getConfigImpl(configRequestParameters);
+    }
+
+    /*
+     * listPolicies using configRequestParameters Implementation
+     */
+    public Collection<String> listConfig(ConfigRequestParameters listPolicyRequestParameters)
+            throws PolicyConfigException {
+        return listConfigImpl(listPolicyRequestParameters);
+    }
+
+    /*
+     * getDecision using the decision Attributes.
+     */
+    public DecisionResponse getDecision(String onapName, Map<String, String> decisionAttributes, UUID requestID)
+            throws PolicyDecisionException {
+        return getDecisionImpl(onapName, decisionAttributes, requestID);
+    }
+
+    /*
+     * getDecision Using decisionRequestParameters.
+     */
+    public DecisionResponse getDecision(DecisionRequestParameters decisionRequestParameters)
+            throws PolicyDecisionException {
+        if (decisionRequestParameters == null) {
+            String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Decision Request Parameters Given. ";
+            LOGGER.error(message);
+            throw new PolicyDecisionException(message);
+        }
+        return getDecisionImpl(decisionRequestParameters.getOnapName(),
+                decisionRequestParameters.getDecisionAttributes(), decisionRequestParameters.getRequestID());
+    }
+
+    /*
+     * getMetrics using metricsRequestParameters
+     */
+    public MetricsResponse getMetrics(MetricsRequestParameters parameters) throws PolicyException {
+        return getMetricsImpl(parameters);
+    }
+
+    public MetricsResponse getMetricsImpl(MetricsRequestParameters parameters) throws PolicyException {
+        StdMetricsResponse response = new StdMetricsResponse();
+        String resource = "getMetrics";
+        String body = null;
+        // Create the Request
+        try {
+            if (parameters != null) {
+                body = PolicyUtils.objectToJsonString(parameters);
+            }
+        } catch (JsonProcessingException e) {
+            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e;
+            LOGGER.error(message);
+            throw new PolicyException(message, e);
+        }
+        // Get Response.
         try {
             ResponseEntity<String> result = callNewPDP(resource, HttpMethod.GET, body, String.class);
             // Process response
             response.setResponseMessage(result.getBody());
             response.setResponseCode(result.getStatusCode().value());
         } catch (PolicyException exception) {
-           if(exception.getCause()!=null && exception.getCause() instanceof HttpClientErrorException){
+            if (exception.getCause() != null && exception.getCause() instanceof HttpClientErrorException) {
                 LOGGER.error(exception);
                 HttpClientErrorException ex = (HttpClientErrorException) exception.getCause();
                 response.setResponseCode(ex.getRawStatusCode());
                 response.setResponseMessage(exception.getMessage());
                 return response;
-            }else{
-                String message = XACMLErrorConstants.ERROR_SYSTEM_ERROR+ "Error while processing results. please check logs.";
+            } else {
+                String message = XACMLErrorConstants.ERROR_SYSTEM_ERROR
+                        + "Error while processing results. please check logs.";
                 LOGGER.error(message, exception);
                 throw new PolicyException(message, exception);
-            }         
+            }
         }
-               return response;
-       }
-       
-       /*
-        * PushPolicy using pushPolicyParameters. 
-        */
-       public PolicyChangeResponse pushPolicy(PushPolicyParameters pushPolicyParameters) throws PolicyException{
-               return pushPolicyImpl(pushPolicyParameters);
-       }
-       
-       public PolicyChangeResponse pushPolicyImpl(PushPolicyParameters pushPolicyParameters) throws PolicyException{
-               StdPolicyChangeResponse response = new StdPolicyChangeResponse();
-               String resource= "pushPolicy";
-        String body = new String();
-        // Create Request. 
+        return response;
+    }
+
+    /*
+     * PushPolicy using pushPolicyParameters.
+     */
+    public PolicyChangeResponse pushPolicy(PushPolicyParameters pushPolicyParameters) throws PolicyException {
+        return pushPolicyImpl(pushPolicyParameters);
+    }
+
+    public PolicyChangeResponse pushPolicyImpl(PushPolicyParameters pushPolicyParameters) throws PolicyException {
+        StdPolicyChangeResponse response = new StdPolicyChangeResponse();
+        String resource = "pushPolicy";
+        String body = null;
+        // Create Request.
         try {
             body = PolicyUtils.objectToJsonString(pushPolicyParameters);
         } catch (JsonProcessingException e) {
-            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e; 
+            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e;
             LOGGER.error(message);
             throw new PolicyException(message, e);
         }
-        // Get Response. 
+        // Get Response.
         try {
             ResponseEntity<String> result = callNewPDP(resource, HttpMethod.PUT, body, String.class);
             // Process response
@@ -294,28 +298,28 @@ public class StdPolicyEngine {
             return processException(exception);
         }
         return response;
-       }
-       
-       /*
-        * Delete a Policy using deletePolicyParameters
-        */
-       public PolicyChangeResponse deletePolicy(DeletePolicyParameters parameters) throws PolicyException {
-               return deletePolicyImpl(parameters);
-       }
-       
-       public PolicyChangeResponse deletePolicyImpl(DeletePolicyParameters parameters) throws PolicyException {
-               StdPolicyChangeResponse response = new StdPolicyChangeResponse();
-               String resource= "deletePolicy";
-               String body = new String();
-        // Create Request. 
+    }
+
+    /*
+     * Delete a Policy using deletePolicyParameters
+     */
+    public PolicyChangeResponse deletePolicy(DeletePolicyParameters parameters) throws PolicyException {
+        return deletePolicyImpl(parameters);
+    }
+
+    public PolicyChangeResponse deletePolicyImpl(DeletePolicyParameters parameters) throws PolicyException {
+        StdPolicyChangeResponse response = new StdPolicyChangeResponse();
+        String resource = "deletePolicy";
+        String body = null;
+        // Create Request.
         try {
             body = PolicyUtils.objectToJsonString(parameters);
         } catch (JsonProcessingException e) {
-            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e; 
+            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e;
             LOGGER.error(message);
             throw new PolicyException(message, e);
         }
-        // Get Response. 
+        // Get Response.
         try {
             ResponseEntity<String> result = callNewPDP(resource, HttpMethod.DELETE, body, String.class);
             // Process response
@@ -325,61 +329,64 @@ public class StdPolicyEngine {
             return processException(exception);
         }
         return response;
-       }
-
-       /*
-        * getDictionaryItem Using dictionaryParameters
-        */
-       public DictionaryResponse getDictionaryItem(DictionaryParameters parameters) throws PolicyException {
-               return getDictionaryItemImpl(parameters);
-       }
-       
-       public DictionaryResponse getDictionaryItemImpl(DictionaryParameters parameters) throws PolicyException{
-               StdDictionaryResponse response = new StdDictionaryResponse();
-               String resource="getDictionaryItems";
-               String body = "{}";
-               // Create Request. 
+    }
+
+    /*
+     * getDictionaryItem Using dictionaryParameters
+     */
+    public DictionaryResponse getDictionaryItem(DictionaryParameters parameters) throws PolicyException {
+        return getDictionaryItemImpl(parameters);
+    }
+
+    public DictionaryResponse getDictionaryItemImpl(DictionaryParameters parameters) throws PolicyException {
+        StdDictionaryResponse response = new StdDictionaryResponse();
+        String resource = "getDictionaryItems";
+        String body = "{}";
+        // Create Request.
         try {
             body = PolicyUtils.objectToJsonString(parameters);
         } catch (JsonProcessingException e) {
-            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e; 
+            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e;
             LOGGER.error(message);
             throw new PolicyException(message, e);
         }
-        // Get Response. 
+        // Get Response.
         try {
-            ResponseEntity<APIDictionaryResponse> result = callNewPDP(resource, HttpMethod.POST, body, APIDictionaryResponse.class);
+            ResponseEntity<APIDictionaryResponse> result = callNewPDP(resource, HttpMethod.POST, body,
+                    APIDictionaryResponse.class);
             // Process response
             response = dictionaryResult(result.getBody());
         } catch (Exception exception) {
-            if(exception.getCause().getMessage().contains("401")){
+            if (exception.getCause().getMessage().contains("401")) {
                 String message = XACMLErrorConstants.ERROR_PERMISSIONS + ERROR_AUTH_GET_PERM + resource;
                 LOGGER.error(message);
                 response.setResponseMessage(message);
                 response.setResponseCode(401);
                 return response;
-            }if(exception.getCause().getMessage().contains("400")){
+            }
+            if (exception.getCause().getMessage().contains("400")) {
                 String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Invalid Data is given.";
                 response.setResponseMessage(message);
                 response.setResponseCode(400);
                 return response;
             }
-            String message = XACMLErrorConstants.ERROR_PERMISSIONS+ "Unable to get valid Response from  PDP(s) " + pdps;
+            String message = XACMLErrorConstants.ERROR_PERMISSIONS + "Unable to get valid Response from  PDP(s) "
+                    + pdps;
             LOGGER.error(message, exception);
             response.setResponseMessage(message);
             response.setResponseCode(500);
             return response;
         }
-        return response;               
-       }
-       
-       @SuppressWarnings("unchecked")
+        return response;
+    }
+
+    @SuppressWarnings("unchecked")
     private StdDictionaryResponse dictionaryResult(APIDictionaryResponse body) {
         StdDictionaryResponse response = new StdDictionaryResponse();
         response.setResponseCode(body.getResponseCode());
         response.setResponseMessage(body.getResponseMessage());
         response.setDictionaryData((Map<String, String>) body.getDictionaryData());
-        if(body.getDictionaryJson()!=null){
+        if (body.getDictionaryJson() != null) {
             Gson objGson = new GsonBuilder().create();
             String mapToJson = objGson.toJson(body.getDictionaryJson());
             JsonReader jsonReader = Json.createReader(new StringReader(mapToJson));
@@ -391,35 +398,36 @@ public class StdPolicyEngine {
     }
 
     /*
-        * createDictinaryItem Using dictionaryParameters. 
-        */
-       public PolicyChangeResponse createDictionaryItem(DictionaryParameters parameters) throws PolicyException{
-               return createUpdateDictionaryItemImpl(parameters, false);
-       }
-       
-       /*
-        * updateDictinaryItem Using dictionaryParameters. 
-        */
-       public PolicyChangeResponse updateDictionaryItem(DictionaryParameters parameters) throws PolicyException{
-               return createUpdateDictionaryItemImpl(parameters, true);
-       }
-       
-       public PolicyChangeResponse createUpdateDictionaryItemImpl(DictionaryParameters parameters, boolean updateFlag) throws PolicyException{
-               StdPolicyChangeResponse response = new StdPolicyChangeResponse();
-               String resource = "createDictionaryItem";
-               if(updateFlag){
-                   resource = "updateDictionaryItem";
-               }
-               String body = new String();
-        // Create Request. 
+     * createDictinaryItem Using dictionaryParameters.
+     */
+    public PolicyChangeResponse createDictionaryItem(DictionaryParameters parameters) throws PolicyException {
+        return createUpdateDictionaryItemImpl(parameters, false);
+    }
+
+    /*
+     * updateDictinaryItem Using dictionaryParameters.
+     */
+    public PolicyChangeResponse updateDictionaryItem(DictionaryParameters parameters) throws PolicyException {
+        return createUpdateDictionaryItemImpl(parameters, true);
+    }
+
+    public PolicyChangeResponse createUpdateDictionaryItemImpl(DictionaryParameters parameters, boolean updateFlag)
+            throws PolicyException {
+        StdPolicyChangeResponse response = new StdPolicyChangeResponse();
+        String resource = "createDictionaryItem";
+        if (updateFlag) {
+            resource = "updateDictionaryItem";
+        }
+        String body = null;
+        // Create Request.
         try {
             body = PolicyUtils.objectToJsonString(parameters);
         } catch (JsonProcessingException e) {
-            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e; 
+            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e;
             LOGGER.error(message);
             throw new PolicyException(message, e);
         }
-        // Get Response. 
+        // Get Response.
         try {
             ResponseEntity<String> result = callNewPDP(resource, HttpMethod.PUT, body, String.class);
             // Process response
@@ -429,31 +437,31 @@ public class StdPolicyEngine {
             return processException(exception);
         }
         return response;
-       }
-       
-       /*
-        * PolicyEngine Import  
-        */
-       public PolicyChangeResponse policyEngineImport(ImportParameters importParameters) throws PolicyException {
-               return policyEngineImportImpl(importParameters);
-       }
-       
-       public PolicyChangeResponse policyEngineImportImpl(ImportParameters importParameters) throws PolicyException {
-               StdPolicyChangeResponse response = new StdPolicyChangeResponse();
-               String resource= "policyEngineImport";
-               LinkedMultiValueMap<String, Object> parameters = new LinkedMultiValueMap<String, Object>();
-        // Create Request. 
+    }
+
+    /*
+     * PolicyEngine Import
+     */
+    public PolicyChangeResponse policyEngineImport(ImportParameters importParameters) throws PolicyException {
+        return policyEngineImportImpl(importParameters);
+    }
+
+    public PolicyChangeResponse policyEngineImportImpl(ImportParameters importParameters) throws PolicyException {
+        StdPolicyChangeResponse response = new StdPolicyChangeResponse();
+        String resource = "policyEngineImport";
+        LinkedMultiValueMap<String, Object> parameters = new LinkedMultiValueMap<String, Object>();
+        // Create Request.
         try {
             String body = PolicyUtils.objectToJsonString(importParameters);
             parameters.set("importParametersJson", body);
             parameters.set("file", new FileSystemResource(importParameters.getFilePath()));
         } catch (Exception e) {
-            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e; 
+            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e;
             LOGGER.error(message);
             throw new PolicyException(message, e);
         }
         contentType = MediaType.MULTIPART_FORM_DATA_VALUE;
-        // Get Response. 
+        // Get Response.
         try {
             ResponseEntity<String> result = callNewPDP(resource, HttpMethod.POST, parameters, String.class);
             // Process response
@@ -461,42 +469,43 @@ public class StdPolicyEngine {
             response.setResponseCode(result.getStatusCode().value());
         } catch (PolicyException exception) {
             return processException(exception);
-        } finally{
+        } finally {
             contentType = null;
         }
         return response;
-       }
-       
-       /*
-        * createPolicy Using policyParameters. 
-        */
-       public PolicyChangeResponse createPolicy(PolicyParameters policyParameters) throws PolicyException{
-               return createUpdatePolicyImpl(policyParameters, false);
-       }
-       
-       /*
-        * updatePolicy using policyParameters. 
-        */
-       public PolicyChangeResponse updatePolicy(PolicyParameters policyParameters) throws PolicyException{
-               return createUpdatePolicyImpl(policyParameters, true);
-       }
-       
-       public PolicyChangeResponse createUpdatePolicyImpl(PolicyParameters policyParameters, boolean updateFlag) throws PolicyException{
-               StdPolicyChangeResponse response = new StdPolicyChangeResponse();
-               String resource= "createPolicy";
-               if(updateFlag){
-                   resource="updatePolicy";
-               }
-               String body = new String();
-        // Create Request. 
+    }
+
+    /*
+     * createPolicy Using policyParameters.
+     */
+    public PolicyChangeResponse createPolicy(PolicyParameters policyParameters) throws PolicyException {
+        return createUpdatePolicyImpl(policyParameters, false);
+    }
+
+    /*
+     * updatePolicy using policyParameters.
+     */
+    public PolicyChangeResponse updatePolicy(PolicyParameters policyParameters) throws PolicyException {
+        return createUpdatePolicyImpl(policyParameters, true);
+    }
+
+    public PolicyChangeResponse createUpdatePolicyImpl(PolicyParameters policyParameters, boolean updateFlag)
+            throws PolicyException {
+        StdPolicyChangeResponse response = new StdPolicyChangeResponse();
+        String resource = "createPolicy";
+        if (updateFlag) {
+            resource = "updatePolicy";
+        }
+        String body = null;
+        // Create Request.
         try {
             body = PolicyUtils.objectToJsonString(policyParameters);
         } catch (JsonProcessingException e) {
-            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e; 
+            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e;
             LOGGER.error(message);
             throw new PolicyException(message, e);
         }
-        // Get Response. 
+        // Get Response.
         try {
             ResponseEntity<String> result = callNewPDP(resource, HttpMethod.PUT, body, String.class);
             // Process response
@@ -506,30 +515,30 @@ public class StdPolicyEngine {
             return processException(exception);
         }
         return response;
-       }
-       
-       private PolicyChangeResponse processException(PolicyException exception) throws PolicyException {
-           StdPolicyChangeResponse response = new StdPolicyChangeResponse();
-           if(exception.getCause()!=null && exception.getCause() instanceof HttpClientErrorException){
+    }
+
+    private PolicyChangeResponse processException(PolicyException exception) throws PolicyException {
+        StdPolicyChangeResponse response = new StdPolicyChangeResponse();
+        if (exception.getCause() != null && exception.getCause() instanceof HttpClientErrorException) {
             LOGGER.error(exception);
             HttpClientErrorException ex = (HttpClientErrorException) exception.getCause();
             response.setResponseCode(ex.getRawStatusCode());
             response.setResponseMessage(exception.getMessage());
             return response;
-        }else{
-            String message = XACMLErrorConstants.ERROR_SYSTEM_ERROR+ "Error while processing results. please check logs.";
+        } else {
+            String message = XACMLErrorConstants.ERROR_SYSTEM_ERROR
+                    + "Error while processing results. please check logs.";
             LOGGER.error(message, exception);
             throw new PolicyException(message, exception);
         }
     }
 
-    public DecisionResponse getDecisionImpl(String onapName,
-                                                                                       Map<String, String> decisionAttributes,
-                                                                                       UUID requestID) throws PolicyDecisionException {
-               String resource= "getDecision";
-               StdDecisionResponse response = new StdDecisionResponse();
-        String body = new String();
-        // Create Request. 
+    public DecisionResponse getDecisionImpl(String onapName, Map<String, String> decisionAttributes, UUID requestID)
+            throws PolicyDecisionException {
+        String resource = "getDecision";
+        StdDecisionResponse response = new StdDecisionResponse();
+        String body = null;
+        // Create Request.
         try {
             DecisionRequestParameters decisionRequestParameters = new DecisionRequestParameters();
             decisionRequestParameters.setDecisionAttributes(decisionAttributes);
@@ -537,70 +546,77 @@ public class StdPolicyEngine {
             decisionRequestParameters.setRequestID(requestID);
             body = PolicyUtils.objectToJsonString(decisionRequestParameters);
         } catch (JsonProcessingException e) {
-            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e; 
+            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e;
             LOGGER.error(message);
             throw new PolicyDecisionException(message, e);
         }
-        // Get Response. 
+        // Get Response.
         try {
-            ResponseEntity<StdDecisionResponse> result = callNewPDP(resource, HttpMethod.POST, body, StdDecisionResponse.class);
+            ResponseEntity<StdDecisionResponse> result = callNewPDP(resource, HttpMethod.POST, body,
+                    StdDecisionResponse.class);
             // Process response
             response = result.getBody();
         } catch (Exception exception) {
-            if(exception.getCause().getMessage().contains("401")){
+            if (exception.getCause().getMessage().contains("401")) {
                 String message = XACMLErrorConstants.ERROR_PERMISSIONS + ERROR_AUTH_GET_PERM + resource;
                 LOGGER.error(message);
                 throw new PolicyDecisionException(message, exception);
-            }if(exception.getCause().getMessage().contains("400")){
+            }
+            if (exception.getCause().getMessage().contains("400")) {
                 String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Invalid Data is given.";
                 LOGGER.error(message);
                 throw new PolicyDecisionException(message, exception);
             }
-            String message = XACMLErrorConstants.ERROR_PERMISSIONS+ "Unable to get valid Response from  PDP(s) " + pdps;
+            String message = XACMLErrorConstants.ERROR_PERMISSIONS + "Unable to get valid Response from  PDP(s) "
+                    + pdps;
             LOGGER.error(message, exception);
             throw new PolicyDecisionException(message, exception);
         }
         return response;
-       }
-       
-    public Collection<PolicyConfig> getConfigImpl(ConfigRequestParameters configRequestParameters) throws PolicyConfigException{
-           String resource= "getConfig";
-               ArrayList<PolicyConfig> response = new ArrayList<>();
-               String body = new String();
-               // Create Request. 
-               try {
+    }
+
+    public Collection<PolicyConfig> getConfigImpl(ConfigRequestParameters configRequestParameters)
+            throws PolicyConfigException {
+        String resource = "getConfig";
+        ArrayList<PolicyConfig> response = new ArrayList<>();
+        String body = null;
+        // Create Request.
+        try {
             body = PolicyUtils.objectToJsonString(configRequestParameters);
         } catch (JsonProcessingException e) {
-            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e; 
+            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e;
             LOGGER.error(message);
             throw new PolicyConfigException(message, e);
         }
-               // Get Response. 
-               try {
-            ResponseEntity<APIPolicyConfigResponse[]> result = callNewPDP(resource, HttpMethod.POST, body, APIPolicyConfigResponse[].class);
+        // Get Response.
+        try {
+            ResponseEntity<APIPolicyConfigResponse[]> result = callNewPDP(resource, HttpMethod.POST, body,
+                    APIPolicyConfigResponse[].class);
             // Process Response
             response = configResult(result.getBody());
         } catch (Exception exception) {
-            if(exception.getCause().getMessage().contains("401")){
+            if (exception.getCause().getMessage().contains("401")) {
                 String message = XACMLErrorConstants.ERROR_PERMISSIONS + ERROR_AUTH_GET_PERM + resource;
                 LOGGER.error(message);
                 throw new PolicyConfigException(message, exception);
-            }if(exception.getCause().getMessage().contains("400")){
+            }
+            if (exception.getCause().getMessage().contains("400")) {
                 String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Invalid Data is given.";
                 LOGGER.error(message);
                 throw new PolicyConfigException(message, exception);
             }
-            String message = XACMLErrorConstants.ERROR_PROCESS_FLOW+ "Unable to get valid Response from  PDP(s) " + pdps;
+            String message = XACMLErrorConstants.ERROR_PROCESS_FLOW + "Unable to get valid Response from  PDP(s) "
+                    + pdps;
             LOGGER.error(message, exception);
             throw new PolicyConfigException(message, exception);
         }
-               return response;
-       }
-    
+        return response;
+    }
+
     private ArrayList<PolicyConfig> configResult(APIPolicyConfigResponse[] response) throws PolicyConfigException {
         ArrayList<PolicyConfig> result = new ArrayList<>();
-        if(response!=null && response.length>0){
-            for(APIPolicyConfigResponse policyConfigResponse: response){
+        if (response != null && response.length > 0) {
+            for (APIPolicyConfigResponse policyConfigResponse : response) {
                 StdPolicyConfig policyConfig = new StdPolicyConfig();
                 policyConfig.setConfigStatus(policyConfigResponse.getPolicyConfigMessage());
                 policyConfig.setMatchingConditions(policyConfigResponse.getMatchingConditions());
@@ -610,11 +626,12 @@ public class StdPolicyEngine {
                 policyConfig.setPolicyVersion(policyConfigResponse.getPolicyVersion());
                 policyConfig.setResponseAttributes(policyConfigResponse.getResponseAttributes());
                 setMatches(policyConfig.getMatchingConditions());
-                if(policyConfigResponse.getType()!=null){
+                if (policyConfigResponse.getType() != null) {
                     try {
                         switch (policyConfigResponse.getType()) {
                             case JSON:
-                                JsonReader jsonReader = Json.createReader(new StringReader(policyConfigResponse.getConfig()));
+                                JsonReader jsonReader = Json
+                                        .createReader(new StringReader(policyConfigResponse.getConfig()));
                                 JsonObject object = jsonReader.readObject();
                                 jsonReader.close();
                                 policyConfig.setJsonObject(object);
@@ -631,12 +648,14 @@ public class StdPolicyEngine {
                                 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                                 DocumentBuilder builder;
                                 builder = factory.newDocumentBuilder();
-                                policyConfig.setDocument(builder.parse(new InputSource(new StringReader(policyConfigResponse.getConfig()))));
+                                policyConfig.setDocument(builder
+                                        .parse(new InputSource(new StringReader(policyConfigResponse.getConfig()))));
                                 break;
                         }
                     } catch (Exception e) {
-                        LOGGER.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID+ e);
-                        throw new PolicyConfigException(XACMLErrorConstants.ERROR_SCHEMA_INVALID+ "Unable to parse the config", e);
+                        LOGGER.error(XACMLErrorConstants.ERROR_SCHEMA_INVALID + e);
+                        throw new PolicyConfigException(
+                                XACMLErrorConstants.ERROR_SCHEMA_INVALID + "Unable to parse the config", e);
                     }
                 }
                 result.add(policyConfig);
@@ -648,72 +667,74 @@ public class StdPolicyEngine {
     private void setMatches(Map<String, String> matchingConditions) {
         Matches match = new Matches();
         HashMap<String, String> configAttributes = new HashMap<>();
-        try{
-            for(String key: matchingConditions.keySet()){
-                if(key.equalsIgnoreCase("ONAPName")){
+        try {
+            for (String key : matchingConditions.keySet()) {
+                if (key.equalsIgnoreCase("ONAPName")) {
                     match.setOnapName(matchingConditions.get(key));
-                }else if(key.equalsIgnoreCase("ConfigName")){
+                } else if (key.equalsIgnoreCase("ConfigName")) {
                     match.setConfigName(matchingConditions.get(key));
-                }else{
+                } else {
                     configAttributes.put(key, matchingConditions.get(key));
                 }
             }
-            if(!configAttributes.isEmpty()){
+            if (!configAttributes.isEmpty()) {
                 match.setConfigAttributes(configAttributes);
             }
             MatchStore.storeMatch(match);
-        }catch(Exception e){
-            LOGGER.info("StoreMatch failed for Onap:"
-                    + match.getOnapName() + " Config: "
-                    + match.getConfigName());
+        } catch (Exception e) {
+            LOGGER.error("StoreMatch failed for Onap:" + match.getOnapName() + " Config: " + match.getConfigName(), e);
         }
     }
 
     /*
-     * Generic Rest Client to call PDP services. 
+     * Generic Rest Client to call PDP services.
      */
-    private <T> ResponseEntity<T> callNewPDP(String resource,
-            HttpMethod method, Object body, Class<T> responseType) throws PolicyException{
+    private <T> ResponseEntity<T> callNewPDP(String resource, HttpMethod method, Object body, Class<T> responseType)
+            throws PolicyException {
         RestTemplate restTemplate = new RestTemplate();
         HttpEntity<?> requestEntity = new HttpEntity<>(body, getHeaders());
         ResponseEntity<T> result = null;
         HttpClientErrorException exception = null;
         int pdpsCount = 0;
-        while(pdpsCount < pdps.size()){
-            try{
-                result = restTemplate.exchange(pdps.get(0)+"/api/" + resource, method, requestEntity, responseType);
-            }catch(HttpClientErrorException e){
+        while (pdpsCount < pdps.size()) {
+            try {
+                result = restTemplate.exchange(pdps.get(0) + "/api/" + resource, method, requestEntity, responseType);
+            } catch (HttpClientErrorException e) {
                 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while connecting to " + pdps.get(0), e);
                 exception = e;
-            }catch(Exception e){
+            } catch (Exception e) {
                 LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while connecting to " + pdps.get(0), e);
                 exception = new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage());
             }
-            if(result == null){
-                       Collections.rotate(pdps, -1);
-                       Collections.rotate(encoding, -1);
-                       pdpsCount++;
-               }else{
-                       break;
-               }
+            if (result == null) {
+                Collections.rotate(pdps, -1);
+                Collections.rotate(encoding, -1);
+                pdpsCount++;
+            } else {
+                break;
+            }
         }
-        if(exception != null && exception.getStatusCode()!=null){
-            if(exception.getStatusCode().equals(HttpStatus.UNAUTHORIZED)){
-                String message = XACMLErrorConstants.ERROR_PERMISSIONS +":"+exception.getStatusCode()+":" +ERROR_AUTH_GET_PERM + resource;
+        if (exception != null && exception.getStatusCode() != null) {
+            if (exception.getStatusCode().equals(HttpStatus.UNAUTHORIZED)) {
+                String message = XACMLErrorConstants.ERROR_PERMISSIONS + ":" + exception.getStatusCode() + ":"
+                        + ERROR_AUTH_GET_PERM + resource;
                 LOGGER.error(message);
                 throw new PolicyException(message, exception);
             }
-            if(exception.getStatusCode().equals(HttpStatus.BAD_REQUEST)){
-                String message = XACMLErrorConstants.ERROR_DATA_ISSUE + ":"+exception.getStatusCode()+":" + exception.getResponseBodyAsString();
+            if (exception.getStatusCode().equals(HttpStatus.BAD_REQUEST)) {
+                String message = XACMLErrorConstants.ERROR_DATA_ISSUE + ":" + exception.getStatusCode() + ":"
+                        + exception.getResponseBodyAsString();
                 LOGGER.error(message);
                 throw new PolicyException(message, exception);
             }
-            if(exception.getStatusCode().equals(HttpStatus.NOT_FOUND)){
-                String message = XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while connecting to " + pdps + exception;
+            if (exception.getStatusCode().equals(HttpStatus.NOT_FOUND)) {
+                String message = XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while connecting to " + pdps
+                        + exception;
                 LOGGER.error(message);
                 throw new PolicyException(message, exception);
             }
-            String message = XACMLErrorConstants.ERROR_PROCESS_FLOW + ":"+exception.getStatusCode()+":" + exception.getResponseBodyAsString();
+            String message = XACMLErrorConstants.ERROR_PROCESS_FLOW + ":" + exception.getStatusCode() + ":"
+                    + exception.getResponseBodyAsString();
             LOGGER.error(message);
             throw new PolicyException(message, exception);
         }
@@ -724,9 +745,9 @@ public class StdPolicyEngine {
         HttpHeaders headers = new HttpHeaders();
         headers.set("ClientAuth", "Basic " + clientEncoding);
         headers.set("Authorization", "Basic " + encoding.get(0));
-        if(contentType!=null){
+        if (contentType != null) {
             headers.set("Content-Type", contentType.toString());
-        }else{
+        } else {
             headers.set("Content-Type", MediaType.APPLICATION_JSON_VALUE);
         }
         headers.set("Environment", environment);
@@ -735,520 +756,558 @@ public class StdPolicyEngine {
 
     private void setClientEncoding() {
         Base64.Encoder encoder = Base64.getEncoder();
-        clientEncoding = encoder.encodeToString((userName+":"+pass).getBytes(StandardCharsets.UTF_8));
+        clientEncoding = encoder.encodeToString((userName + ":" + pass).getBytes(StandardCharsets.UTF_8));
+    }
+
+    public Collection<String> listConfigImpl(ConfigRequestParameters listRequestParameters)
+            throws PolicyConfigException {
+        Collection<String> policyList = new ArrayList<>();
+        if (junit) {
+            policyList.add("Policy Name: listConfigTest");
+            return policyList;
+        }
+        Collection<PolicyConfig> policyConfig = getConfigImpl(listRequestParameters);
+        for (PolicyConfig policy : policyConfig) {
+            if (policy.getPolicyConfigMessage() != null && policy.getPolicyConfigMessage().contains("PE300")) {
+                policyList.add(policy.getPolicyConfigMessage());
+            } else {
+                policyList.add("Policy Name: " + policy.getPolicyName());
+            }
+        }
+        return policyList;
     }
 
-    public Collection<String> listConfigImpl(ConfigRequestParameters listRequestParameters) throws PolicyConfigException{
-               Collection<String> policyList = new ArrayList<>();
-               if (junit){
-                       policyList.add("Policy Name: listConfigTest");
-                       return policyList;
-               }
-               Collection<PolicyConfig> policyConfig = getConfigImpl(listRequestParameters);
-               for(PolicyConfig policy : policyConfig){
-                       if(policy.getPolicyConfigMessage()!=null && policy.getPolicyConfigMessage().contains("PE300")){
-                               policyList.add(policy.getPolicyConfigMessage());
-                       } else {
-                               policyList.add("Policy Name: " + policy.getPolicyName());
-                       }
-               }
-               return policyList;
-       }
-       
-       public Collection<PolicyResponse> sendEventImpl(Map<String, String> eventAttributes, UUID requestID) throws PolicyEventException {
-               String resource= "sendEvent";
+    public Collection<PolicyResponse> sendEventImpl(Map<String, String> eventAttributes, UUID requestID)
+            throws PolicyEventException {
+        String resource = "sendEvent";
         ArrayList<PolicyResponse> response = new ArrayList<PolicyResponse>();
         String body = new String();
-        // Create Request. 
+        // Create Request.
         try {
-            // Long way here, can be shortened and will be done. 
+            // Long way here, can be shortened and will be done.
             EventRequestParameters eventRequestParameters = new EventRequestParameters();
             eventRequestParameters.setEventAttributes(eventAttributes);
             eventRequestParameters.setRequestID(requestID);
             body = PolicyUtils.objectToJsonString(eventRequestParameters);
         } catch (JsonProcessingException e) {
-            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e; 
+            String message = XACMLErrorConstants.ERROR_SCHEMA_INVALID + e;
             LOGGER.error(message);
             throw new PolicyEventException(message, e);
         }
-        // Get Response. 
+        // Get Response.
         try {
-            ResponseEntity<StdPolicyResponse[]> result = callNewPDP(resource, HttpMethod.POST, body, StdPolicyResponse[].class);
+            ResponseEntity<StdPolicyResponse[]> result = callNewPDP(resource, HttpMethod.POST, body,
+                    StdPolicyResponse[].class);
             // Process Response
             response = eventResult(result.getBody());
         } catch (Exception exception) {
-            if(exception.getCause().getMessage().contains("401")){
+            if (exception.getCause().getMessage().contains("401")) {
                 String message = XACMLErrorConstants.ERROR_PERMISSIONS + ERROR_AUTH_GET_PERM + resource;
                 LOGGER.error(message);
                 throw new PolicyEventException(message, exception);
-            }if(exception.getCause().getMessage().contains("400")){
+            }
+            if (exception.getCause().getMessage().contains("400")) {
                 String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "Invalid Data is given.";
                 LOGGER.error(message);
                 throw new PolicyEventException(message, exception);
             }
-            String message = XACMLErrorConstants.ERROR_PERMISSIONS+ "Unable to get valid Response from  PDP(s) " + pdps;
+            String message = XACMLErrorConstants.ERROR_PERMISSIONS + "Unable to get valid Response from  PDP(s) "
+                    + pdps;
             LOGGER.error(message, exception);
             throw new PolicyEventException(message, exception);
         }
         return response;
-       }
+    }
 
-       private ArrayList<PolicyResponse> eventResult(StdPolicyResponse[] response) throws PolicyEventException{
+    private ArrayList<PolicyResponse> eventResult(StdPolicyResponse[] response) throws PolicyEventException {
         ArrayList<PolicyResponse> eventResult = new ArrayList<>();
-        if(response!=null && response.length>0){
-            for(StdPolicyResponse policyConfigResponse: response){
+        if (response != null && response.length > 0) {
+            for (StdPolicyResponse policyConfigResponse : response) {
                 eventResult.add(policyConfigResponse);
             }
         }
         return eventResult;
     }
 
-       private void setProperty(String propertyFilePath, String clientKey)
-                       throws PolicyEngineException {
-               this.propertyFilePath = propertyFilePath;
-               if (this.propertyFilePath == null) {
-                       throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE + "Error NO PropertyFile Path provided");
-               } else {
-                       // Adding logic for remote Properties file.
-                       Properties prop = new Properties();
-                       if (propertyFilePath.startsWith("http")) {
-                               URL configURL;
-                               try {
-                                       configURL = new URL(propertyFilePath);
-                                       URLConnection connection = null;
-                                       connection = configURL.openConnection();
-                                       prop.load(connection.getInputStream());
-                               } catch (IOException e) {
-                                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
-                                       throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE + "Maformed property URL "+ e.getMessage());
-                               }
-                       } else {
-                               Path file = Paths.get(propertyFilePath);
-                               if (Files.notExists(file)) {
-                                       throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE + "File doesn't exist in the specified Path "      + file.toString());
-                               } 
-                               if (file.toString().endsWith(".properties")) {
-                                       InputStream in;
-                                       prop = new Properties();
-                                       try {
-                                               in = new FileInputStream(file.toFile());
-                                               prop.load(in);
-                                       } catch (IOException e) {
-                                               LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
-                                               throw new PolicyEngineException(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Cannot Load the Properties file", e);
-                                       }
-                               } else {
-                                       LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Not a .properties file " + propertyFilePath);
-                                       throw new PolicyEngineException(XACMLErrorConstants.ERROR_SYSTEM_ERROR  + "Not a .properties file");
-                               }
-                       }
-                       // UEB and DMAAP Settings
-                       String check_type = prop.getProperty("NOTIFICATION_TYPE");
-                       String serverList = prop.getProperty("NOTIFICATION_SERVERS");
-                       topic = prop.getProperty("NOTIFICATION_TOPIC");
-                       apiKey = prop.getProperty("UEB_API_KEY");
-                       apiSecret = prop.getProperty("UEB_API_SECRET");
-                       
-                       if(check_type==null) {
-                               notificationType.add(DEFAULT_NOTIFICATION);
-                               LOGGER.info("Properties file doesn't have the NOTIFICATION_TYPE parameter system will use defualt websockets"); 
-                       }else{
-                               check_type = check_type.trim();
-                               if(check_type.contains(",")) {
-                                       typeDefault = new ArrayList<String>(Arrays.asList(prop.getProperty("NOTIFICATION_TYPE").split(",")));
-                                       notificationType = typeDefault; 
-                               } else {
-                                               notificationType = new ArrayList<>();
-                                               notificationType.add(check_type);
-                               }
-                       }
-                       if(serverList==null) {
-                               notificationType.clear();
-                               notificationType.add(DEFAULT_NOTIFICATION);
-                               LOGGER.info("Properties file doesn't have the NOTIFICATION_SERVERS parameter system will use defualt websockets");      
-                       }else{
-                               serverList = serverList.trim();
-                               if(serverList.contains(",")) {
-                                       notificationURLList = new ArrayList<String>(Arrays.asList(serverList.split(","))); 
-                               } else {
-                                       notificationURLList = new ArrayList<>();
-                                       notificationURLList.add(serverList);
-                               }
-                       }
-                       
-                       if(topic!=null) {
-                               topic = topic.trim();
-                       } else {
-                               LOGGER.error("Properties file doesn't have the NOTIFICATION_TOPIC parameter.");
-                       }
-                       
-                       // Client ID Authorization Settings. 
-                       String clientID = prop.getProperty("CLIENT_ID");
-                       if(clientKey==null){
-                               clientKey = prop.getProperty("CLIENT_KEY");
-                               try {
-                                       clientKey = PolicyUtils.decode(clientKey);
-                               } catch (UnsupportedEncodingException|IllegalArgumentException e) {
-                                       LOGGER.error(XACMLErrorConstants.ERROR_PERMISSIONS+" Cannot Decode the given Password Proceeding with given Password!!");
-                               }
-                       }
-                       if(clientID ==null || clientKey == null || clientID.isEmpty() || clientKey.isEmpty()){
-                               LOGGER.error(XACMLErrorConstants.ERROR_PERMISSIONS+" Cannot proceed without the CLIENT_KEY and CLIENT_ID values !!");
-                               throw new PolicyEngineException(XACMLErrorConstants.ERROR_PERMISSIONS+ " Cannot proceed without the CLIENT_KEY and CLIENT_ID values !!");
-                       }else{
-                               userName = clientID.trim();
-                               pass = clientKey.trim();
-                       }
-                       setClientEncoding();
-                       environment = prop.getProperty("ENVIRONMENT", AAFEnvironment.DEVL.toString());
-                       if(environment.equalsIgnoreCase(AAFEnvironment.TEST.toString())){
-                               environment = AAFEnvironment.TEST.toString();
-                       }else if(environment.equalsIgnoreCase(AAFEnvironment.PROD.toString())){
-                               environment = AAFEnvironment.PROD.toString();
-                       }else{
-                               environment = AAFEnvironment.DEVL.toString();
-                       }
-                       // Initializing the values.
-                       pdps = new ArrayList<>();
-                       encoding = new ArrayList<>();
-                       // Check the Keys for PDP_URLs
-                       Collection<Object> unsorted = prop.keySet();
-                       @SuppressWarnings({ "rawtypes", "unchecked" })
-                       List<String> sorted = new ArrayList(unsorted);
-                       Collections.sort(sorted);
-                       for (String propKey : sorted) {
-                               if (propKey.startsWith("PDP_URL")) {
-                                       String check_val = prop.getProperty(propKey);
-                                       if (check_val == null) {
-                                               throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE + "Properties file doesn't have the PDP_URL parameter");
-                                       }
-                                       if (check_val.contains(";")) {
-                                               pdpDefault = new ArrayList<String>(Arrays.asList(check_val.split("\\s*;\\s*")));
-                                               int pdpCount = 0;
-                                               while (pdpCount < pdpDefault.size()) {
-                                                       String pdpVal = pdpDefault.get(pdpCount);
-                                                       readPDPParam(pdpVal);
-                                                       pdpCount++;
-                                               }
-                                       } else {
-                                               readPDPParam(check_val);
-                                       }
-                               }
-                       }
-                       if (pdps == null || pdps.isEmpty()) {
-                               LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Cannot Proceed without PDP_URLs");
-                               throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE + "Cannot Proceed without PDP_URLs");
-                       }
-                       
-                       // Get JUNIT property from properties file when running tests
-                       String junit = prop.getProperty("JUNIT");
-                       if(junit == null || junit.isEmpty()){
-                               LOGGER.info("No JUNIT property provided, this will not be executed as a test.");
-                       }else{
-                               if(junit.equalsIgnoreCase("test")){
-                                       StdPolicyEngine.junit = true;
-                               } else {
-                                       StdPolicyEngine.junit = false;
-                               }
-                       }
-               }
-       }
-       
-       /*
-        * Read the PDP_URL parameter
-        */
-       private void readPDPParam(String pdpVal) throws PolicyEngineException{
-               if(pdpVal.contains(",")){
-                       List<String> pdpValues = new ArrayList<String>(Arrays.asList(pdpVal.split("\\s*,\\s*")));
-                       if(pdpValues.size()==3){
-                               // 0 - PDPURL
-                               pdps.add(pdpValues.get(0));
-                               // 1:2 will be UserID:Password
-                               String userID = pdpValues.get(1);
-                               String pass = pdpValues.get(2);
-                               Base64.Encoder encoder = Base64.getEncoder();
-                               encoding.add(encoder.encodeToString((userID+":"+pass).getBytes(StandardCharsets.UTF_8)));
-                       }else{
-                               LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "No Credentials to send Request: " + pdpValues);
-                               throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE + "No enough Credentials to send Request. " + pdpValues);
-                       }
-               }else{
-                       LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "PDP value is improper/missing required values: " + pdpVal);
-                       throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE + "PDP value is improper/missing required values.");
-               }
-       }
-       /*
-        * Allowing changes to the scheme and Handler.
-        */
-       public void notification(NotificationScheme scheme, NotificationHandler handler) {
-               this.scheme = scheme;
-               this.handler = handler;
-               LOGGER.debug("Scheme is : " + scheme.toString());
-               LOGGER.debug("Handler is : " + handler.getClass().getName());
-                               
-               if (notificationType.get(0).equals("ueb")){
-                       if (this.uebThread) {
-                               uebClientThread.setAuto(scheme, handler);
-                               this.uebThread = registerUEBThread.isAlive();
-                       }
-               } else if (notificationType.get(0).equals("dmaap")){
-                       if (this.dmaapThread) {
-                               dmaapClientThread.setAuto(scheme, handler);
-                               this.dmaapThread = registerDMAAPThread.isAlive();
-                       }
-               } else {
-                       AutoClientEnd.setAuto(scheme, handler);
-               }
-               
-               if(junit){
-                   return;
-               }
-               
-               if(pdps!=null){
-                       if (notificationType.get(0).equals("ueb")  && !this.uebThread){
-                               this.uebClientThread = new AutoClientUEB(pdps.get(0), notificationURLList, apiKey, apiSecret); 
-                               this.uebClientThread.setAuto(scheme, handler);
-                               this.registerUEBThread = new Thread(this.uebClientThread);
-                               this.registerUEBThread.start();
-                               this.uebThread = true;
-                       }else if (notificationType.get(0).equals("dmaap") && !this.dmaapThread){
-                               this.dmaapClientThread = new AutoClientDMAAP(notificationURLList,topic,userName,pass);
-                               this.dmaapClientThread.setAuto(scheme, handler);
-                               this.registerDMAAPThread = new Thread(this.dmaapClientThread);
-                               this.registerDMAAPThread.start();
-                               this.dmaapThread = true;
-                       }else{
-                               if(pdps.get(0)!=null){
-                                       if(AutoClientEnd.getURL()==null){
-                                               AutoClientEnd.start(pdps.get(0));
-                                       }else {
-                                               AutoClientEnd.stop();
-                                               AutoClientEnd.start(pdps.get(0));
-                                       }
-                               }
-                       }
-               }
-       }
-
-       /*
-        * Gets the Notification if one exists. Used only for Manual Polling
-        * purposes.
-        */
-       public PDPNotification getNotification(){
-               //Check if there is proper scheme.. 
-               PDPNotification notification = null;
-               if(this.scheme.equals(NotificationScheme.MANUAL_ALL_NOTIFICATIONS) || this.scheme.equals(NotificationScheme.MANUAL_NOTIFICATIONS)) {
-                       if (notificationType.get(0).equals("ueb")){
-                               ManualClientEndUEB.start(pdps.get(0), notificationURLList, UNIQUEID);
-                               notification = ManualClientEndUEB.result(scheme);
-                       }else if (notificationType.get(0).equals("dmaap")){
-                               ManualClientEndDMAAP.start(notificationURLList, topic, UNIQUEID, userName, pass);
-                               notification = ManualClientEndDMAAP.result(scheme);
-                       }else{
-                               ManualClientEnd.start(pdps.get(0));
-                               LOGGER.debug("manual notification requested.. : " + scheme.toString());
-                               notification = ManualClientEnd.result(scheme);
-                       }
-                       if (notification == null){
-                               LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "No Notification yet..");
-                               return null;
-                       } else {
-                               return notification;
-                       }
-               }else {
-                       return null;
-               }
-       }
-
-       /*
-        * Setting the Scheme.
-        */
-       public void setScheme(NotificationScheme scheme) {
-               this.scheme = scheme;
-               if (notificationType.get(0).equals("ueb")){
-                       AutoClientUEB.setScheme(this.scheme);
-                       if (this.scheme.equals(NotificationScheme.MANUAL_ALL_NOTIFICATIONS)){
-                               ManualClientEndUEB.createTopic(pdps.get(0), UNIQUEID, notificationURLList);
-                       }
-               }else if (notificationType.get(0).equals("dmaap")){
-                       AutoClientDMAAP.setScheme(this.scheme);
-                       if (this.scheme.equals(NotificationScheme.MANUAL_ALL_NOTIFICATIONS)){
-                               ManualClientEndDMAAP.createTopic(topic, UNIQUEID, notificationURLList, userName, pass);
-                       }
-               }else{
-                       AutoClientEnd.setScheme(this.scheme);
-               }       
-       }
-
-       /*
-        * Returns the Scheme
-        */
-       public NotificationScheme getScheme() {
-               return this.scheme;
-       }
-
-       /*
-        * Returns the NotificationHandler
-        */
-       public NotificationHandler getNotificationHandler() {
-               return this.handler;
-       }
-
-       /*
-        * Stop the Notification Service if its running.
-        */
-       public void stopNotification() {
-               if (this.scheme != null && this.handler != null) {
-                       if (this.scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS)
-                                       || this.scheme
-                                                       .equals(NotificationScheme.AUTO_NOTIFICATIONS)) {
-                               LOGGER.info("Clear Notification called.. ");
-                               if (notificationType.get(0).equals("ueb")){
-                                       this.uebClientThread.terminate();
-                                       this.uebThread = false;
-                               }else if (notificationType.get(0).equals("dmaap")){
-                                       this.dmaapClientThread.terminate();
-                                       this.dmaapThread = false;
-                               }else{
-                                       AutoClientEnd.stop();
-                               }
-                       }
-               }
-       }
-       
-       /*
-        * Push a policy to the PDP API implementation
-        */
-       public String pushPolicy(String policyScope, String policyName, String policyType, String pdpGroup, UUID requestID) throws PolicyException {
-               PushPolicyParameters pushPolicyParameters = new PushPolicyParameters();
-               if(policyScope==null|| policyScope.trim().isEmpty()){
-                       String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Scope given.";
-                       LOGGER.error(message);
-                       throw new PolicyException(message);
-               }
-               if(policyName==null|| policyName.trim().isEmpty()){
-                       String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Name given.";
-                       LOGGER.error(message);
-                       throw new PolicyException(message);
-               }
-               pushPolicyParameters.setPolicyName(policyScope+"."+policyName);
-               pushPolicyParameters.setPolicyType(policyType);
-               pushPolicyParameters.setPdpGroup(pdpGroup);
-               pushPolicyParameters.setRequestID(requestID);
-               return pushPolicyImpl(pushPolicyParameters).getResponseMessage();
-       }
-       
-       public String createUpdateConfigPolicy(String policyName, String policyDescription, String onapName, String configName,
-                       Map<String, String> configAttributes, String configType, String body, String policyScope, UUID requestID,
-                       String riskLevel, String riskType, String guard, String ttlDate, boolean updateFlag) throws PolicyException {
-               return createUpdateConfigPolicyImpl(policyName, policyDescription, onapName, configName,
-                               configAttributes, configType, body, policyScope, requestID,
-                               riskLevel, riskType, guard, ttlDate, updateFlag);
-       }
-       
-       /*
-        * Create Config Policy API Implementation
-        */
-       public String createUpdateConfigPolicyImpl(String policyName, String policyDescription, String onapName, String configName,
-                       Map<String, String> configAttributes, String configType, String body, String policyScope, UUID requestID,
-                       String riskLevel, String riskType, String guard, String ttlDate, boolean updateFlag) throws PolicyException {
-               PolicyParameters policyParameters = new PolicyParameters();
-               policyParameters.setPolicyClass(PolicyClass.Config);
-               policyParameters.setPolicyConfigType(PolicyConfigType.Base);
-               if(policyScope==null|| policyScope.trim().isEmpty()){
-                       String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Scope given.";
-                       LOGGER.error(message);
-                       throw new PolicyException(message);
-               }
-               if(policyName==null|| policyName.trim().isEmpty()){
-                       String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Name given.";
-                       LOGGER.error(message);
-                       throw new PolicyException(message);
-               }
-               policyParameters.setPolicyName(policyScope+"."+policyName);
-               policyParameters.setPolicyDescription(policyDescription);
-               policyParameters.setOnapName(onapName);
-               policyParameters.setConfigName(configName);
-               Map<AttributeType, Map<String, String>> attributes = new HashMap<AttributeType, Map<String, String>>();
-               attributes.put(AttributeType.MATCHING, configAttributes);
-               policyParameters.setAttributes(attributes);
-               policyParameters.setConfigBodyType(PolicyType.valueOf(configType));
-               policyParameters.setConfigBody(body);
-               policyParameters.setRequestID(requestID);
-               policyParameters.setRiskLevel(riskLevel);
-               policyParameters.setRiskType(riskType);
-               policyParameters.setGuard(Boolean.parseBoolean(guard));
-               try {
-                       policyParameters.setTtlDate(new SimpleDateFormat("dd-MM-yyyy").parse(ttlDate));
-               } catch (ParseException e) {
-                       LOGGER.warn("Error Parsing date given " + ttlDate);
-                       policyParameters.setTtlDate(null);
-               }
-               return createUpdatePolicyImpl(policyParameters, updateFlag).getResponseMessage();
-       }
-       
-       public String createUpdateConfigFirewallPolicy(String policyName, JsonObject firewallJson, String policyScope, UUID requestID,
-                       String riskLevel, String riskType, String guard, String ttlDate, boolean updateFlag) throws PolicyException {
-               return createUpdateConfigFirewallPolicyImpl(policyName, firewallJson, policyScope, requestID,
-                               riskLevel, riskType, guard, ttlDate, updateFlag);
-       }
-       
-       /*
-        * Create Update Config Firewall Policy API implementation
-        */
-       public String createUpdateConfigFirewallPolicyImpl(String policyName, JsonObject firewallJson, String policyScope, UUID requestID,
-                       String riskLevel, String riskType, String guard, String ttlDate, boolean updateFlag) throws PolicyException {
-               PolicyParameters policyParameters = new PolicyParameters();
-               policyParameters.setPolicyClass(PolicyClass.Config);
-               policyParameters.setPolicyConfigType(PolicyConfigType.Firewall);
-               if(policyScope==null|| policyScope.trim().isEmpty()){
-                       String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Scope given.";
-                       LOGGER.error(message);
-                       throw new PolicyException(message);
-               }
-               if(policyName==null|| policyName.trim().isEmpty()){
-                       String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Name given.";
-                       LOGGER.error(message);
-                       throw new PolicyException(message);
-               }
-               policyParameters.setPolicyName(policyScope+"."+policyName);
-               policyParameters.setConfigBody(firewallJson.toString());
-               policyParameters.setRequestID(requestID);
-               policyParameters.setRiskLevel(riskLevel);
-               policyParameters.setRiskType(riskType);
-               policyParameters.setGuard(Boolean.parseBoolean(guard));
-               try {
-                       policyParameters.setTtlDate(new SimpleDateFormat("dd-MM-yyyy").parse(ttlDate));
-               } catch (NullPointerException | ParseException e) {
-                       LOGGER.warn("Error Parsing date given " + ttlDate);
-                       policyParameters.setTtlDate(null);
-               }
-               return createUpdatePolicyImpl(policyParameters, updateFlag).getResponseMessage();
-       }
-       
-       public void setClientKey(String clientKey){
-               if(clientKey!=null && !clientKey.isEmpty()){
-                       StdPolicyEngine.pass = clientKey;
-                       setClientEncoding();
-               }
-       }
-       /*
-        * Get the Environment. 
-        */
-       public static String getEnvironment() {
-               return environment;
-       } 
-       /*
-        * Rotate the PDP list upon WEBsocket Failures
-        */
-       public static void rotatePDPList() {
-               Collections.rotate(pdps, -1);
-               Collections.rotate(encoding, -1);
-       }
-       /*
-        * Get the latest PDP
-        */
-       public static String getPDPURL() {
-               return pdps.get(0);
-       }
+    private void setProperty(String propertyFilePath, String clientKey) throws PolicyEngineException {
+        if (propertyFilePath == null) {
+            throw new PolicyEngineException(
+                    XACMLErrorConstants.ERROR_DATA_ISSUE + "Error NO PropertyFile Path provided");
+        } else {
+            // Adding logic for remote Properties file.
+            Properties prop = new Properties();
+            if (propertyFilePath.startsWith("http")) {
+                URL configURL;
+                try {
+                    configURL = new URL(propertyFilePath);
+                    URLConnection connection = null;
+                    connection = configURL.openConnection();
+                    prop.load(connection.getInputStream());
+                } catch (IOException e) {
+                    LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + e);
+                    throw new PolicyEngineException(
+                            XACMLErrorConstants.ERROR_DATA_ISSUE + "Maformed property URL " + e.getMessage());
+                }
+            } else {
+                Path file = Paths.get(propertyFilePath);
+                if (Files.notExists(file)) {
+                    throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE
+                            + "File doesn't exist in the specified Path " + file.toString());
+                }
+                if (file.toString().endsWith(".properties")) {
+                    InputStream in;
+                    prop = new Properties();
+                    try {
+                        in = new FileInputStream(file.toFile());
+                        prop.load(in);
+                    } catch (IOException e) {
+                        LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + e);
+                        throw new PolicyEngineException(
+                                XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Cannot Load the Properties file", e);
+                    }
+                } else {
+                    LOGGER.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Not a .properties file " + propertyFilePath);
+                    throw new PolicyEngineException(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Not a .properties file");
+                }
+            }
+            // UEB and DMAAP Settings
+            String checkType = prop.getProperty("NOTIFICATION_TYPE");
+            String serverList = prop.getProperty("NOTIFICATION_SERVERS");
+            topic = prop.getProperty("NOTIFICATION_TOPIC");
+            apiKey = prop.getProperty("UEB_API_KEY");
+            apiSecret = prop.getProperty("UEB_API_SECRET");
+
+            if (checkType == null) {
+                notificationType.add(DEFAULT_NOTIFICATION);
+                LOGGER.info(
+                        "Properties file doesn't have the NOTIFICATION_TYPE parameter system will use defualt websockets");
+            } else {
+                checkType = checkType.trim();
+                if (checkType.contains(",")) {
+                    typeDefault = new ArrayList<>(Arrays.asList(prop.getProperty("NOTIFICATION_TYPE").split(",")));
+                    notificationType = typeDefault;
+                } else {
+                    notificationType = new ArrayList<>();
+                    notificationType.add(checkType);
+                }
+            }
+            if (serverList == null) {
+                notificationType.clear();
+                notificationType.add(DEFAULT_NOTIFICATION);
+                LOGGER.info(
+                        "Properties file doesn't have the NOTIFICATION_SERVERS parameter system will use defualt websockets");
+            } else {
+                serverList = serverList.trim();
+                if (serverList.contains(",")) {
+                    notificationURLList = new ArrayList<String>(Arrays.asList(serverList.split(",")));
+                } else {
+                    notificationURLList = new ArrayList<>();
+                    notificationURLList.add(serverList);
+                }
+            }
+
+            if (topic != null) {
+                topic = topic.trim();
+            } else {
+                LOGGER.error("Properties file doesn't have the NOTIFICATION_TOPIC parameter.");
+            }
+
+            // Client ID Authorization Settings.
+            String clientID = prop.getProperty("CLIENT_ID");
+            if (clientKey == null) {
+                clientKey = prop.getProperty("CLIENT_KEY");
+                try {
+                    clientKey = PolicyUtils.decode(clientKey);
+                } catch (UnsupportedEncodingException | IllegalArgumentException e) {
+                    LOGGER.error(XACMLErrorConstants.ERROR_PERMISSIONS
+                            + " Cannot Decode the given Password Proceeding with given Password!!", e);
+                }
+            }
+            if (clientID == null || clientKey == null || clientID.isEmpty() || clientKey.isEmpty()) {
+                LOGGER.error(XACMLErrorConstants.ERROR_PERMISSIONS
+                        + " Cannot proceed without the CLIENT_KEY and CLIENT_ID values !!");
+                throw new PolicyEngineException(XACMLErrorConstants.ERROR_PERMISSIONS
+                        + " Cannot proceed without the CLIENT_KEY and CLIENT_ID values !!");
+            } else {
+                setClientId(clientID.trim());
+                setClientKey(clientKey.trim());
+            }
+            setEnvironment(prop);
+            // Initializing the values.
+            init();
+            // Check the Keys for PDP_URLs
+            Collection<Object> unsorted = prop.keySet();
+            @SuppressWarnings({ "rawtypes", "unchecked" })
+            List<String> sorted = new ArrayList(unsorted);
+            Collections.sort(sorted);
+            for (String propKey : sorted) {
+                if (propKey.startsWith("PDP_URL")) {
+                    String checkVal = prop.getProperty(propKey);
+                    if (checkVal == null) {
+                        throw new PolicyEngineException(XACMLErrorConstants.ERROR_DATA_ISSUE
+                                + "Properties file doesn't have the PDP_URL parameter");
+                    }
+                    if (checkVal.contains(";")) {
+                        pdpDefault = new ArrayList<>(Arrays.asList(checkVal.split("\\s*;\\s*")));
+                        int pdpCount = 0;
+                        while (pdpCount < pdpDefault.size()) {
+                            String pdpVal = pdpDefault.get(pdpCount);
+                            readPDPParam(pdpVal);
+                            pdpCount++;
+                        }
+                    } else {
+                        readPDPParam(checkVal);
+                    }
+                }
+            }
+            if (pdps == null || pdps.isEmpty()) {
+                LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Cannot Proceed without PDP_URLs");
+                throw new PolicyEngineException(
+                        XACMLErrorConstants.ERROR_DATA_ISSUE + "Cannot Proceed without PDP_URLs");
+            }
+            // Get JUNIT property from properties file when running tests
+            checkJunit(prop);
+        }
+    }
+
+    private static void checkJunit(Properties prop) {
+        String junitFlag = prop.getProperty("JUNIT");
+        if (junitFlag == null || junitFlag.isEmpty()) {
+            LOGGER.info("No JUNIT property provided, this will not be executed as a test.");
+        } else {
+            if (junitFlag.equalsIgnoreCase("test")) {
+                StdPolicyEngine.junit = true;
+            } else {
+                StdPolicyEngine.junit = false;
+            }
+        }
+    }
+
+    private static void init() {
+        pdps = new ArrayList<>();
+        encoding = new ArrayList<>();
+    }
+
+    private static void setEnvironment(Properties prop) {
+        environment = prop.getProperty("ENVIRONMENT", AAFEnvironment.DEVL.toString());
+        if (environment.equalsIgnoreCase(AAFEnvironment.TEST.toString())) {
+            environment = AAFEnvironment.TEST.toString();
+        } else if (environment.equalsIgnoreCase(AAFEnvironment.PROD.toString())) {
+            environment = AAFEnvironment.PROD.toString();
+        } else {
+            environment = AAFEnvironment.DEVL.toString();
+        }
+    }
+
+    private static void setClientId(String clientID) {
+        userName = clientID;
+    }
+
+    /*
+     * Read the PDP_URL parameter
+     */
+    private void readPDPParam(String pdpVal) throws PolicyEngineException {
+        if (pdpVal.contains(",")) {
+            List<String> pdpValues = new ArrayList<String>(Arrays.asList(pdpVal.split("\\s*,\\s*")));
+            if (pdpValues.size() == 3) {
+                // 0 - PDPURL
+                pdps.add(pdpValues.get(0));
+                // 1:2 will be UserID:Password
+                String userID = pdpValues.get(1);
+                String pass = pdpValues.get(2);
+                Base64.Encoder encoder = Base64.getEncoder();
+                encoding.add(encoder.encodeToString((userID + ":" + pass).getBytes(StandardCharsets.UTF_8)));
+            } else {
+                LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "No Credentials to send Request: " + pdpValues);
+                throw new PolicyEngineException(
+                        XACMLErrorConstants.ERROR_DATA_ISSUE + "No enough Credentials to send Request. " + pdpValues);
+            }
+        } else {
+            LOGGER.error(
+                    XACMLErrorConstants.ERROR_DATA_ISSUE + "PDP value is improper/missing required values: " + pdpVal);
+            throw new PolicyEngineException(
+                    XACMLErrorConstants.ERROR_DATA_ISSUE + "PDP value is improper/missing required values.");
+        }
+    }
+
+    /*
+     * Allowing changes to the scheme and Handler.
+     */
+    public void notification(NotificationScheme scheme, NotificationHandler handler) {
+        this.scheme = scheme;
+        this.handler = handler;
+        LOGGER.debug("Scheme is : " + scheme.toString());
+        LOGGER.debug("Handler is : " + handler.getClass().getName());
+
+        if (notificationType.get(0).equals("ueb")) {
+            if (this.uebThread) {
+                AutoClientUEB.setAuto(scheme, handler);
+                this.uebThread = registerUEBThread.isAlive();
+            }
+        } else if (notificationType.get(0).equals("dmaap")) {
+            if (this.dmaapThread) {
+                AutoClientDMAAP.setAuto(scheme, handler);
+                this.dmaapThread = registerDMAAPThread.isAlive();
+            }
+        } else {
+            AutoClientEnd.setAuto(scheme, handler);
+        }
+
+        if (junit) {
+            return;
+        }
+
+        if (pdps != null) {
+            if (notificationType.get(0).equals("ueb") && !this.uebThread) {
+                this.uebClientThread = new AutoClientUEB(pdps.get(0), notificationURLList, apiKey, apiSecret);
+                AutoClientUEB.setAuto(scheme, handler);
+                this.registerUEBThread = new Thread(this.uebClientThread);
+                this.registerUEBThread.start();
+                this.uebThread = true;
+            } else if (notificationType.get(0).equals("dmaap") && !this.dmaapThread) {
+                this.dmaapClientThread = new AutoClientDMAAP(notificationURLList, topic, userName, pass);
+                AutoClientDMAAP.setAuto(scheme, handler);
+                this.registerDMAAPThread = new Thread(this.dmaapClientThread);
+                this.registerDMAAPThread.start();
+                this.dmaapThread = true;
+            } else {
+                if (pdps.get(0) != null) {
+                    if (AutoClientEnd.getURL() == null) {
+                        AutoClientEnd.start(pdps.get(0));
+                    } else {
+                        AutoClientEnd.stop();
+                        AutoClientEnd.start(pdps.get(0));
+                    }
+                }
+            }
+        }
+    }
+
+    /*
+     * Gets the Notification if one exists. Used only for Manual Polling purposes.
+     */
+    public PDPNotification getNotification() {
+        // Check if there is proper scheme..
+        PDPNotification notification = null;
+        if (this.scheme.equals(NotificationScheme.MANUAL_ALL_NOTIFICATIONS)
+                || this.scheme.equals(NotificationScheme.MANUAL_NOTIFICATIONS)) {
+            if (notificationType.get(0).equals("ueb")) {
+                ManualClientEndUEB.start(pdps.get(0), notificationURLList, UNIQUEID);
+                notification = ManualClientEndUEB.result(scheme);
+            } else if (notificationType.get(0).equals("dmaap")) {
+                ManualClientEndDMAAP.start(notificationURLList, topic, UNIQUEID, userName, pass);
+                notification = ManualClientEndDMAAP.result(scheme);
+            } else {
+                ManualClientEnd.start(pdps.get(0));
+                LOGGER.debug("manual notification requested.. : " + scheme.toString());
+                notification = ManualClientEnd.result(scheme);
+            }
+            if (notification == null) {
+                LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "No Notification yet..");
+                return null;
+            } else {
+                return notification;
+            }
+        } else {
+            return null;
+        }
+    }
+
+    /*
+     * Setting the Scheme.
+     */
+    public void setScheme(NotificationScheme scheme) {
+        this.scheme = scheme;
+        if (notificationType.get(0).equals("ueb")) {
+            AutoClientUEB.setScheme(this.scheme);
+            if (this.scheme.equals(NotificationScheme.MANUAL_ALL_NOTIFICATIONS)) {
+                ManualClientEndUEB.createTopic(pdps.get(0), UNIQUEID, notificationURLList);
+            }
+        } else if (notificationType.get(0).equals("dmaap")) {
+            AutoClientDMAAP.setScheme(this.scheme);
+            if (this.scheme.equals(NotificationScheme.MANUAL_ALL_NOTIFICATIONS)) {
+                ManualClientEndDMAAP.createTopic(topic, UNIQUEID, notificationURLList, userName, pass);
+            }
+        } else {
+            AutoClientEnd.setScheme(this.scheme);
+        }
+    }
+
+    /*
+     * Returns the Scheme
+     */
+    public NotificationScheme getScheme() {
+        return this.scheme;
+    }
+
+    /*
+     * Returns the NotificationHandler
+     */
+    public NotificationHandler getNotificationHandler() {
+        return this.handler;
+    }
+
+    /*
+     * Stop the Notification Service if its running.
+     */
+    public void stopNotification() {
+        if (this.scheme != null && this.handler != null) {
+            if (this.scheme.equals(NotificationScheme.AUTO_ALL_NOTIFICATIONS)
+                    || this.scheme.equals(NotificationScheme.AUTO_NOTIFICATIONS)) {
+                LOGGER.info("Clear Notification called.. ");
+                if (notificationType.get(0).equals("ueb")) {
+                    this.uebClientThread.terminate();
+                    this.uebThread = false;
+                } else if (notificationType.get(0).equals("dmaap")) {
+                    this.dmaapClientThread.terminate();
+                    this.dmaapThread = false;
+                } else {
+                    AutoClientEnd.stop();
+                }
+            }
+        }
+    }
+
+    /*
+     * Push a policy to the PDP API implementation
+     */
+    public String pushPolicy(String policyScope, String policyName, String policyType, String pdpGroup, UUID requestID)
+            throws PolicyException {
+        PushPolicyParameters pushPolicyParameters = new PushPolicyParameters();
+        if (policyScope == null || policyScope.trim().isEmpty()) {
+            String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Scope given.";
+            LOGGER.error(message);
+            throw new PolicyException(message);
+        }
+        if (policyName == null || policyName.trim().isEmpty()) {
+            String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Name given.";
+            LOGGER.error(message);
+            throw new PolicyException(message);
+        }
+        pushPolicyParameters.setPolicyName(policyScope + "." + policyName);
+        pushPolicyParameters.setPolicyType(policyType);
+        pushPolicyParameters.setPdpGroup(pdpGroup);
+        pushPolicyParameters.setRequestID(requestID);
+        return pushPolicyImpl(pushPolicyParameters).getResponseMessage();
+    }
+
+    public String createUpdateConfigPolicy(String policyName, String policyDescription, String onapName,
+            String configName, Map<String, String> configAttributes, String configType, String body, String policyScope,
+            UUID requestID, String riskLevel, String riskType, String guard, String ttlDate, boolean updateFlag)
+            throws PolicyException {
+        return createUpdateConfigPolicyImpl(policyName, policyDescription, onapName, configName, configAttributes,
+                configType, body, policyScope, requestID, riskLevel, riskType, guard, ttlDate, updateFlag);
+    }
+
+    /*
+     * Create Config Policy API Implementation
+     */
+    public String createUpdateConfigPolicyImpl(String policyName, String policyDescription, String onapName,
+            String configName, Map<String, String> configAttributes, String configType, String body, String policyScope,
+            UUID requestID, String riskLevel, String riskType, String guard, String ttlDate, boolean updateFlag)
+            throws PolicyException {
+        PolicyParameters policyParameters = new PolicyParameters();
+        policyParameters.setPolicyClass(PolicyClass.Config);
+        policyParameters.setPolicyConfigType(PolicyConfigType.Base);
+        if (policyScope == null || policyScope.trim().isEmpty()) {
+            String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Scope given.";
+            LOGGER.error(message);
+            throw new PolicyException(message);
+        }
+        if (policyName == null || policyName.trim().isEmpty()) {
+            String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Name given.";
+            LOGGER.error(message);
+            throw new PolicyException(message);
+        }
+        policyParameters.setPolicyName(policyScope + "." + policyName);
+        policyParameters.setPolicyDescription(policyDescription);
+        policyParameters.setOnapName(onapName);
+        policyParameters.setConfigName(configName);
+        Map<AttributeType, Map<String, String>> attributes = new HashMap<AttributeType, Map<String, String>>();
+        attributes.put(AttributeType.MATCHING, configAttributes);
+        policyParameters.setAttributes(attributes);
+        policyParameters.setConfigBodyType(PolicyType.valueOf(configType));
+        policyParameters.setConfigBody(body);
+        policyParameters.setRequestID(requestID);
+        policyParameters.setRiskLevel(riskLevel);
+        policyParameters.setRiskType(riskType);
+        policyParameters.setGuard(Boolean.parseBoolean(guard));
+        try {
+            policyParameters.setTtlDate(new SimpleDateFormat("dd-MM-yyyy").parse(ttlDate));
+        } catch (ParseException e) {
+            LOGGER.warn("Error Parsing date given " + ttlDate);
+            policyParameters.setTtlDate(null);
+        }
+        return createUpdatePolicyImpl(policyParameters, updateFlag).getResponseMessage();
+    }
+
+    public String createUpdateConfigFirewallPolicy(String policyName, JsonObject firewallJson, String policyScope,
+            UUID requestID, String riskLevel, String riskType, String guard, String ttlDate, boolean updateFlag)
+            throws PolicyException {
+        return createUpdateConfigFirewallPolicyImpl(policyName, firewallJson, policyScope, requestID, riskLevel,
+                riskType, guard, ttlDate, updateFlag);
+    }
+
+    /*
+     * Create Update Config Firewall Policy API implementation
+     */
+    public String createUpdateConfigFirewallPolicyImpl(String policyName, JsonObject firewallJson, String policyScope,
+            UUID requestID, String riskLevel, String riskType, String guard, String ttlDate, boolean updateFlag)
+            throws PolicyException {
+        PolicyParameters policyParameters = new PolicyParameters();
+        policyParameters.setPolicyClass(PolicyClass.Config);
+        policyParameters.setPolicyConfigType(PolicyConfigType.Firewall);
+        if (policyScope == null || policyScope.trim().isEmpty()) {
+            String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Scope given.";
+            LOGGER.error(message);
+            throw new PolicyException(message);
+        }
+        if (policyName == null || policyName.trim().isEmpty()) {
+            String message = XACMLErrorConstants.ERROR_DATA_ISSUE + "No Policy Name given.";
+            LOGGER.error(message);
+            throw new PolicyException(message);
+        }
+        policyParameters.setPolicyName(policyScope + "." + policyName);
+        policyParameters.setConfigBody(firewallJson.toString());
+        policyParameters.setRequestID(requestID);
+        policyParameters.setRiskLevel(riskLevel);
+        policyParameters.setRiskType(riskType);
+        policyParameters.setGuard(Boolean.parseBoolean(guard));
+        try {
+            policyParameters.setTtlDate(new SimpleDateFormat("dd-MM-yyyy").parse(ttlDate));
+        } catch (NullPointerException | ParseException e) {
+            LOGGER.warn("Error Parsing date given " + ttlDate);
+            policyParameters.setTtlDate(null);
+        }
+        return createUpdatePolicyImpl(policyParameters, updateFlag).getResponseMessage();
+    }
+
+    public void setClientKey(String clientKey) {
+        if (clientKey != null && !clientKey.isEmpty()) {
+            StdPolicyEngine.pass = clientKey;
+            setClientEncoding();
+        }
+    }
+
+    /*
+     * Get the Environment.
+     */
+    public static String getEnvironment() {
+        return environment;
+    }
+
+    /*
+     * Rotate the PDP list upon WEBsocket Failures
+     */
+    public static void rotatePDPList() {
+        Collections.rotate(pdps, -1);
+        Collections.rotate(encoding, -1);
+    }
+
+    /*
+     * Get the latest PDP
+     */
+    public static String getPDPURL() {
+        return pdps.get(0);
+    }
 }
\ No newline at end of file
index 94c2ac7..eef76bd 100644 (file)
@@ -119,369 +119,6 @@ public class AutoClientUEBTest {
                assertNotNull(result);
        }
 
-       /**
-        * Run the boolean isRunning() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testIsRunning_1()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(), "", "");
-               fixture.isRunning = true;
-
-               boolean result = fixture.isRunning();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-               assertTrue(result);
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_1()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(), "", "");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_2()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(), "", "");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_3()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(), "", "");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_4()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(), "", "");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_5()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(),"","");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_6()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(),"","");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_7()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(),"","");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_8()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(),"","");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_9()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(),"","");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_10()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(),"","");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_11()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(),"","");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_12()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(),"","");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_13()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(),"","");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_14()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(),"","");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_15()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(),"","");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void run() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testRun_16()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(),"","");
-               fixture.isRunning = true;
-
-               fixture.run();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
-       /**
-        * Run the void setAuto(NotificationScheme,NotificationHandler) method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testSetAuto_1()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(),"","");
-               fixture.isRunning = true;
-               NotificationScheme scheme = NotificationScheme.AUTO_ALL_NOTIFICATIONS;
-               NotificationHandler handler = null;
-
-               fixture.setAuto(scheme, handler);
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
        /**
         * Run the void setScheme(NotificationScheme) method test.
         *
@@ -501,26 +138,6 @@ public class AutoClientUEBTest {
                //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
        }
 
-       /**
-        * Run the void terminate() method test.
-        *
-        * @throws Exception
-        *
-        * @generatedBy CodePro at 6/1/16 1:40 PM
-        */
-       @Test
-       public void testTerminate_1()
-               throws Exception {
-               AutoClientUEB fixture = new AutoClientUEB("", new LinkedList<String>(),"","");
-               fixture.isRunning = true;
-
-               fixture.terminate();
-
-               // add additional test code here
-               // An unexpected exception was thrown in user code while executing this test:
-               //    java.lang.NoClassDefFoundError: Could not initialize class org.onap.policy.std.AutoClientUEB
-       }
-
        /**
         * Perform pre-test initialization.
         *
@@ -535,9 +152,10 @@ public class AutoClientUEBTest {
                // add set up code here
                List<String> urlList = new LinkedList<String>();
                urlList.add("test2.com");
-               AutoClientUEB client = new AutoClientUEB("test.com", urlList, "testKey", "testSecret");
+               @SuppressWarnings("unused")
+        AutoClientUEB client = new AutoClientUEB("test.com", urlList, "testKey", "testSecret");
                NotificationHandler handler = null;
-               client.setAuto(NotificationScheme.AUTO_ALL_NOTIFICATIONS, handler);
+               AutoClientUEB.setAuto(NotificationScheme.AUTO_ALL_NOTIFICATIONS, handler);
        }
 
        /**
index a662564..ae971b4 100644 (file)
@@ -51,7 +51,7 @@ public class ActionPolicyApiTest extends TestCase {
        PolicyParameters policyParameters = new PolicyParameters();
        
        @Before
-       protected void setUp() throws Exception {
+       public void setUp() throws Exception {
                try {
                        policyEngine = new PolicyEngine("Test/config_pass.properties");
                } catch (PolicyEngineException e) {
@@ -80,7 +80,7 @@ public class ActionPolicyApiTest extends TestCase {
         policyParameters.setRequestID(UUID.randomUUID());
        }
 
-       protected void tearDown() throws Exception {
+       public void tearDown() throws Exception {
                super.tearDown();
        }
        
index 5d5a076..b5fb75c 100644 (file)
@@ -64,7 +64,7 @@ public class ConfigBasePolicyTest extends TestCase {
         *
         * @see TestCase#setUp()
         */
-       protected void setUp() throws Exception {
+       public void setUp() throws Exception {
                try {
                        policyEngine = new PolicyEngine("Test/config_pass.properties");
                } catch (PolicyEngineException e) {
@@ -102,7 +102,7 @@ public class ConfigBasePolicyTest extends TestCase {
         *
         * @see TestCase#tearDown()
         */
-       protected void tearDown() throws Exception {
+       public void tearDown() throws Exception {
                super.tearDown();
                // Add additional tear down code here
        }
index 78ae249..c50b3de 100644 (file)
@@ -59,7 +59,7 @@ public class ConfigFirewallPolicyTest extends TestCase {
         *
         * @see TestCase#setUp()
         */
-       protected void setUp() throws Exception {
+       public void setUp() throws Exception {
                try {
                        policyEngine = new PolicyEngine("Test/config_pass.properties");
                } catch (PolicyEngineException e) {
@@ -101,7 +101,7 @@ public class ConfigFirewallPolicyTest extends TestCase {
         *
         * @see TestCase#tearDown()
         */
-       protected void tearDown() throws Exception {
+       public void tearDown() throws Exception {
                super.tearDown();
                // Add additional tear down code here
        }
index a800934..7c9eb3e 100644 (file)
@@ -63,7 +63,7 @@ public class DecisionPolicyApiTest extends TestCase {
         *
         * @see TestCase#setUp()
         */
-       protected void setUp() throws Exception {
+       public void setUp() throws Exception {
                try {
                        policyEngine = new PolicyEngine("Test/config_pass.properties");
                } catch (PolicyEngineException e) {
@@ -106,7 +106,7 @@ public class DecisionPolicyApiTest extends TestCase {
         *
         * @see TestCase#tearDown()
         */
-       protected void tearDown() throws Exception {
+       public void tearDown() throws Exception {
                super.tearDown();
                // Add additional tear down code here
        }
index be9e0e7..2adf3b0 100644 (file)
@@ -104,7 +104,7 @@ public class PolicyEngineInterfaceTest extends TestCase {
         *
         * @see TestCase#setUp()
         */
-       protected void setUp() throws Exception {
+       public void setUp() throws Exception {
                try {
                        policyEngine = new PolicyEngine("Test/config_pass.properties");
                } catch (PolicyEngineException e) {
@@ -126,7 +126,7 @@ public class PolicyEngineInterfaceTest extends TestCase {
         *
         * @see TestCase#tearDown()
         */
-       protected void tearDown() throws Exception {
+       public void tearDown() throws Exception {
                super.tearDown();
                // Add additional tear down code here
        }
index 04be785..8e0e5f4 100644 (file)
@@ -40,9 +40,9 @@
                        <version>1.1</version>
                </dependency>
                <dependency>
-                        <groupId>org.apache.httpcomponents</groupId>
-                        <artifactId>httpclient</artifactId>
-                       <version>4.5</version>
+                       <groupId>org.apache.httpcomponents</groupId>
+                       <artifactId>httpclient</artifactId>
+                       <version>4.5</version>
                </dependency>
        </dependencies>
        <build>
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policyEngine;
+package org.onap.policyengine;
 
 import org.onap.policy.api.DeletePolicyCondition;
 import org.onap.policy.api.DeletePolicyParameters;
@@ -28,7 +28,7 @@
  *              Unpublished and Not for Publication
  *                     All Rights Reserved
  */
-package org.onap.policyEngine;
+package org.onap.policyengine;
 
 import java.io.FileNotFoundException;
 import java.io.FileReader;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policyEngine;
+package org.onap.policyengine;
 
 import java.util.Collection;
 
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policyEngine;
+package org.onap.policyengine;
 
 import java.io.IOException;
 import java.io.OutputStream;
@@ -28,7 +28,7 @@
  *              Unpublished and Not for Publication
  *                     All Rights Reserved
  */
-package org.onap.policyEngine;
+package org.onap.policyengine;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.policyEngine;
+package org.onap.policyengine;
 
 import org.onap.policy.api.PolicyChangeResponse;
 import org.onap.policy.api.PolicyEngine;
index 6fff797..d4f1116 100644 (file)
@@ -40,6 +40,7 @@ import org.onap.policy.jpa.BackUpMonitorEntity;
 import org.onap.policy.std.NotificationStore;
 import org.onap.policy.std.StdPDPNotification;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.github.fge.jackson.JsonLoader;
 import com.github.fge.jsonpatch.JsonPatch;
@@ -47,376 +48,404 @@ import com.github.fge.jsonpatch.JsonPatchException;
 import com.github.fge.jsonpatch.diff.JsonDiff;
 
 /**
- * BackUp Monitor checks Backup Status with the Database and maintains Redundancy for Gateway Applications. 
+ * BackUp Monitor checks Backup Status with the Database and maintains Redundancy for Gateway Applications.
  * 
  */
 public class BackUpMonitor {
-       private static final Logger LOGGER = Logger.getLogger(BackUpMonitor.class.getName());
-       private static final int DEFAULT_PING = 15000; // Value is in milliseconds. 
+    private static final Logger LOGGER = Logger.getLogger(BackUpMonitor.class.getName());
+    private static final int DEFAULT_PING = 15000; // Value is in milliseconds.
 
-       private static BackUpMonitor instance = null;
-       private static String resourceName = null;
-       private static String resourceNodeName = null;
-       private static String notificationRecord = null;
-       private static String lastMasterNotification= null;
-       private static int pingInterval = DEFAULT_PING;
-       private static Boolean masterFlag = false;
-       private static Object lock = new Object();
-       private static Object notificationLock = new Object();
-       private static BackUpHandler handler= null;
-       private EntityManager em;
-       private EntityManagerFactory emf;
+    private static BackUpMonitor instance = null;
+    private static String resourceName = null;
+    private static String resourceNodeName = null;
+    private static String notificationRecord = null;
+    private static String lastMasterNotification = null;
+    private static int pingInterval = DEFAULT_PING;
+    private static Boolean masterFlag = false;
+    private static Object lock = new Object();
+    private static Object notificationLock = new Object();
+    private static BackUpHandler handler = null;
+    private EntityManager em;
+    private EntityManagerFactory emf;
 
-       /*
-        * Enumeration for the Resource Node Naming. Add here if required. 
-        */
-       public enum ResourceNode{
-               BRMS,
-               ASTRA
-       }
+    /*
+     * Enumeration for the Resource Node Naming. Add here if required.
+     */
+    public enum ResourceNode {
+        BRMS, ASTRA
+    }
 
-       private BackUpMonitor(String resourceNodeName, String resourceName, Properties properties, BackUpHandler handler) throws Exception{
-               if(instance == null){
-                       instance = this;
-               }
-               BackUpMonitor.resourceNodeName = resourceNodeName;
-               BackUpMonitor.resourceName = resourceName;
-               BackUpMonitor.handler = handler; 
-               // Create Persistence Entity
-               properties.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistencePU.xml");
-               emf = Persistence.createEntityManagerFactory("PolicyEngineUtils", properties);
-               if(emf==null){
-                       LOGGER.error("Unable to create Entity Manger Factory ");
-                       throw new Exception("Unable to create Entity Manger Factory");
-               }
-               em = emf.createEntityManager();
+    private BackUpMonitor(String resourceNodeName, String resourceName, Properties properties, BackUpHandler handler)
+            throws BackUpMonitorException {
+        if (instance == null) {
+            instance = this;
+        }
+        BackUpMonitor.resourceNodeName = resourceNodeName;
+        BackUpMonitor.resourceName = resourceName;
+        BackUpMonitor.handler = handler;
+        // Create Persistence Entity
+        properties.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, "META-INF/persistencePU.xml");
+        emf = Persistence.createEntityManagerFactory("PolicyEngineUtils", properties);
+        if (emf == null) {
+            LOGGER.error("Unable to create Entity Manger Factory ");
+            throw new BackUpMonitorException("Unable to create Entity Manger Factory");
+        }
+        em = emf.createEntityManager();
 
-               // Check Database if this is Master or Slave.
-               checkDataBase();
+        // Check Database if this is Master or Slave.
+        checkDataBase();
 
-               // Start thread.
-               Thread t = new Thread(new BMonitor());
-               t.start();
-       }
+        // Start thread.
+        Thread t = new Thread(new BMonitor());
+        t.start();
+    }
 
-       /**
-        * Gets the BackUpMonitor Instance if given proper resourceName and properties. Else returns null. 
-        * 
-        * @param resourceNodeName String format of the Resource Node to which the resource Belongs to. 
-        * @param resourceName String format of the ResourceName. This needs to be Unique. 
-        * @param properties Properties format of the properties file. 
-        * @return BackUpMonitor instance. 
-        */
-       public static synchronized BackUpMonitor getInstance(String resourceNodeName, String resourceName, Properties properties, BackUpHandler handler) throws Exception {
-               if(resourceNodeName==null || resourceNodeName.trim().equals("") ||resourceName==null|| resourceName.trim().equals("") || properties == null || handler==null){
-                       LOGGER.error("Error while getting Instance. Please check resourceName and/or properties file");
-                       return null;
-               }else if((resourceNodeName.equals(ResourceNode.ASTRA.toString()) || resourceNodeName.equals(ResourceNode.BRMS.toString())) && validate(properties) && instance==null){
-                       LOGGER.info("Creating Instance of BackUpMonitor");
-                       instance = new BackUpMonitor(resourceNodeName, resourceName, properties, handler);
-               }
-               return instance;
-       }
+    /**
+     * Gets the BackUpMonitor Instance if given proper resourceName and properties. Else returns null.
+     * 
+     * @param resourceNodeName
+     *            String format of the Resource Node to which the resource Belongs to.
+     * @param resourceName
+     *            String format of the ResourceName. This needs to be Unique.
+     * @param properties
+     *            Properties format of the properties file.
+     * @return BackUpMonitor instance.
+     */
+    public static synchronized BackUpMonitor getInstance(String resourceNodeName, String resourceName,
+            Properties properties, BackUpHandler handler) throws BackUpMonitorException {
+        if (resourceNodeName == null || resourceNodeName.trim().equals("") || resourceName == null
+                || resourceName.trim().equals("") || properties == null || handler == null) {
+            LOGGER.error("Error while getting Instance. Please check resourceName and/or properties file");
+            return null;
+        } else if ((resourceNodeName.equals(ResourceNode.ASTRA.toString())
+                || resourceNodeName.equals(ResourceNode.BRMS.toString())) && validate(properties) && instance == null) {
+            LOGGER.info("Creating Instance of BackUpMonitor");
+            instance = new BackUpMonitor(resourceNodeName, resourceName, properties, handler);
+        }
+        return instance;
+    }
 
-       // This is to validate given Properties with required values. 
-       private static Boolean validate(Properties properties){
-               if(properties.getProperty("javax.persistence.jdbc.driver")==null ||properties.getProperty("javax.persistence.jdbc.driver").trim().equals("")){
-                       LOGGER.error("javax.persistence.jdbc.driver property is empty");
-                       return false;
-               }
-               if(properties.getProperty("javax.persistence.jdbc.url")==null || properties.getProperty("javax.persistence.jdbc.url").trim().equals("")){
-                       LOGGER.error("javax.persistence.jdbc.url property is empty");
-                       return false;
-               }
-               if(properties.getProperty("javax.persistence.jdbc.user")==null || properties.getProperty("javax.persistence.jdbc.user").trim().equals("")){
-                       LOGGER.error("javax.persistence.jdbc.user property is empty");
-                       return false;
-               }
-               if(properties.getProperty("javax.persistence.jdbc.password")==null || properties.getProperty("javax.persistence.jdbc.password").trim().equals("")){
-                       LOGGER.error("javax.persistence.jdbc.password property is empty");
-                       return false;
-               }
-               if(properties.getProperty("ping_interval")==null || properties.getProperty("ping_interval").trim().equals("")){
-                       LOGGER.info("ping_interval property not specified. Taking default value");
-               }else{
-                       try{
-                               pingInterval = Integer.parseInt(properties.getProperty("ping_interval").trim());
-                       }catch(NumberFormatException e){
-                               LOGGER.warn("Ignored invalid proeprty ping_interval. Taking default value: " + pingInterval);
-                               pingInterval = DEFAULT_PING;
-                       }
-               }
-               return true;
-       }
+    // This is to validate given Properties with required values.
+    private static Boolean validate(Properties properties) {
+        if (properties.getProperty("javax.persistence.jdbc.driver") == null
+                || properties.getProperty("javax.persistence.jdbc.driver").trim().equals("")) {
+            LOGGER.error("javax.persistence.jdbc.driver property is empty");
+            return false;
+        }
+        if (properties.getProperty("javax.persistence.jdbc.url") == null
+                || properties.getProperty("javax.persistence.jdbc.url").trim().equals("")) {
+            LOGGER.error("javax.persistence.jdbc.url property is empty");
+            return false;
+        }
+        if (properties.getProperty("javax.persistence.jdbc.user") == null
+                || properties.getProperty("javax.persistence.jdbc.user").trim().equals("")) {
+            LOGGER.error("javax.persistence.jdbc.user property is empty");
+            return false;
+        }
+        if (properties.getProperty("javax.persistence.jdbc.password") == null
+                || properties.getProperty("javax.persistence.jdbc.password").trim().equals("")) {
+            LOGGER.error("javax.persistence.jdbc.password property is empty");
+            return false;
+        }
+        if (properties.getProperty("ping_interval") == null
+                || properties.getProperty("ping_interval").trim().equals("")) {
+            LOGGER.info("ping_interval property not specified. Taking default value");
+        } else {
+            try {
+                pingInterval = Integer.parseInt(properties.getProperty("ping_interval").trim());
+            } catch (NumberFormatException e) {
+                LOGGER.warn("Ignored invalid proeprty ping_interval. Taking default value: " + pingInterval);
+                pingInterval = DEFAULT_PING;
+            }
+        }
+        return true;
+    }
 
-       // Sets the Flag for masterFlag to either True or False. 
-       private static void setFlag(Boolean flag){
-               synchronized (lock) {
-                       masterFlag = flag;
-               }
-       }
+    // Sets the Flag for masterFlag to either True or False.
+    private static void setFlag(Boolean flag) {
+        synchronized (lock) {
+            masterFlag = flag;
+        }
+    }
 
-       /**
-        * Gets the Boolean value of Master(True) or Slave mode (False)
-        * 
-        * @return Boolean flag which if True means that the operation needs to be performed(Master mode) or if false the operation is in slave mode. 
-        */
-       public Boolean getFlag(){
-               synchronized (lock) {
-                       return masterFlag;
-               }
-       }
+    /**
+     * Gets the Boolean value of Master(True) or Slave mode (False)
+     * 
+     * @return Boolean flag which if True means that the operation needs to be performed(Master mode) or if false the
+     *         operation is in slave mode.
+     */
+    public Boolean getFlag() {
+        synchronized (lock) {
+            return masterFlag;
+        }
+    }
 
-       // BackUpMonitor Thread 
-       private class BMonitor implements Runnable{
-               @Override
-               public void run() {
-                       LOGGER.info("Starting BackUpMonitor Thread.. ");
-                       while(true){
-                               try {
-                                       TimeUnit.MILLISECONDS.sleep(pingInterval);
-                                       checkDataBase();
-                               } catch (Exception e) {
-                                       LOGGER.error("Error during Thread execution " + e.getMessage());
-                               }
-                       }
-               }
-       }
+    // BackUpMonitor Thread
+    private class BMonitor implements Runnable {
+        @Override
+        public void run() {
+            LOGGER.info("Starting BackUpMonitor Thread.. ");
+            while (true) {
+                try {
+                    TimeUnit.MILLISECONDS.sleep(pingInterval);
+                    checkDataBase();
+                } catch (Exception e) {
+                    LOGGER.error("Error during Thread execution " + e.getMessage(), e);
+                }
+            }
+        }
+    }
 
-       // Set Master 
-       private static BackUpMonitorEntity setMaster(BackUpMonitorEntity bMEntity){
-               bMEntity.setFlag("MASTER");
-               setFlag(true);
-               return bMEntity;
-       }
+    // Set Master
+    private static BackUpMonitorEntity setMaster(BackUpMonitorEntity bMEntity) {
+        bMEntity.setFlag("MASTER");
+        setFlag(true);
+        return bMEntity;
+    }
 
-       // Set Slave 
-       private static BackUpMonitorEntity setSlave(BackUpMonitorEntity bMEntity){
-               bMEntity.setFlag("SLAVE");
-               setFlag(false);
-               return bMEntity;
-       }
+    // Set Slave
+    private static BackUpMonitorEntity setSlave(BackUpMonitorEntity bMEntity) {
+        bMEntity.setFlag("SLAVE");
+        setFlag(false);
+        return bMEntity;
+    }
 
-       // Check Database and set the Flag. 
-       private void checkDataBase() throws Exception {
-               EntityTransaction et = em.getTransaction();
-               notificationRecord = PolicyUtils.objectToJsonString(NotificationStore.getNotificationRecord());
-               // Clear Cache. 
-               LOGGER.info("Clearing Cache");
-               em.getEntityManagerFactory().getCache().evictAll();
-               try{
-                       LOGGER.info("Checking Datatbase for BackUpMonitor.. ");
-                       et.begin();
-                       Query query = em.createQuery("select b from BackUpMonitorEntity b where b.resourceNodeName = :nn");
-                       if(resourceNodeName.equals(ResourceNode.ASTRA.toString())){
-                               query.setParameter("nn", ResourceNode.ASTRA.toString());
-                       }else if(resourceNodeName.equals(ResourceNode.BRMS.toString())){
-                               query.setParameter("nn", ResourceNode.BRMS.toString());
-                       }
-                       List<?> bMList = query.getResultList();
-                       if(bMList.isEmpty()){
-                               // This is New. create an entry as Master. 
-                               LOGGER.info("Adding resource " + resourceName + " to Database");
-                               BackUpMonitorEntity bMEntity = new BackUpMonitorEntity();
-                               bMEntity.setResoruceNodeName(resourceNodeName);
-                               bMEntity.setResourceName(resourceName);
-                               bMEntity = setMaster(bMEntity);
-                               bMEntity.setTimeStamp(new Date());
-                               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.setResoruceNodeName(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.size()==0){
-                                               // 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 = 0;
-                                                               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.");
-                                               }
-                                       }
-                               }
-                       }
-                       et.commit();
-               }catch(Exception e){
-                       LOGGER.error("failed Database Operation " + e.getMessage());
-                       if(et.isActive()){
-                               et.rollback();
-                       }
-                       throw new Exception(e);
-               }
-       }
+    // Check Database and set the Flag.
+    private void checkDataBase() throws BackUpMonitorException {
+        EntityTransaction et = em.getTransaction();
+        setNotificationRecord();
+        // Clear Cache.
+        LOGGER.info("Clearing Cache");
+        em.getEntityManagerFactory().getCache().evictAll();
+        try {
+            LOGGER.info("Checking Datatbase for BackUpMonitor.. ");
+            et.begin();
+            Query query = em.createQuery("select b from BackUpMonitorEntity b where b.resourceNodeName = :nn");
+            if (resourceNodeName.equals(ResourceNode.ASTRA.toString())) {
+                query.setParameter("nn", ResourceNode.ASTRA.toString());
+            } else if (resourceNodeName.equals(ResourceNode.BRMS.toString())) {
+                query.setParameter("nn", ResourceNode.BRMS.toString());
+            }
+            List<?> bMList = query.getResultList();
+            if (bMList.isEmpty()) {
+                // This is New. create an entry as Master.
+                LOGGER.info("Adding resource " + resourceName + " to Database");
+                BackUpMonitorEntity bMEntity = new BackUpMonitorEntity();
+                bMEntity.setResoruceNodeName(resourceNodeName);
+                bMEntity.setResourceName(resourceName);
+                bMEntity = setMaster(bMEntity);
+                bMEntity.setTimeStamp(new Date());
+                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.setResoruceNodeName(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 = 0;
+                                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.");
+                        }
+                    }
+                }
+            }
+            et.commit();
+        } catch (Exception e) {
+            LOGGER.error("failed Database Operation " + e.getMessage(), e);
+            if (et.isActive()) {
+                et.rollback();
+            }
+            throw new BackUpMonitorException(e);
+        }
+    }
 
-       // Calculate Patch and return String JsonPatch of the notification Delta. 
-       private synchronized String calculatePatch(String oldNotificationRecord) {
-               try{
-                       JsonNode notification = JsonLoader.fromString(notificationRecord);
-                       JsonNode oldNotification = JsonLoader.fromString(oldNotificationRecord);
-                       JsonNode patchNode = JsonDiff.asJson(oldNotification, notification);
-                       LOGGER.info("Generated JSON Patch is " + patchNode.toString());
-                       JsonPatch patch = JsonPatch.fromJson(patchNode);
-                       try {
-                               JsonNode patched = patch.apply(oldNotification);
-                               LOGGER.info("Generated New Notification is : " + patched.toString());
-                               return patched.toString();
-                       } catch (JsonPatchException e) {
-                               LOGGER.error("Error generating Patched "  +e.getMessage());
-                               return null;
-                       }
-               }catch(IOException e){
-                       LOGGER.error("Error generating Patched "  +e.getMessage());
-                       return null;
-               }
-       }
+    private static void setNotificationRecord() throws BackUpMonitorException {
+        try {
+            notificationRecord = PolicyUtils.objectToJsonString(NotificationStore.getNotificationRecord());
+        } catch (JsonProcessingException e1) {
+            LOGGER.error("Error retrieving notification record failed. ", e1);
+            throw new BackUpMonitorException(e1);
+        }
+    }
 
-       /**
-        * Updates Notification in the Database while Performing the health check. 
-        * 
-        * @param notification String format of notification record to store in the Database. 
-        * @throws Exception 
-        */
-       public synchronized void updateNotification() throws Exception{
-               checkDataBase();
-       }
+    // Calculate Patch and return String JsonPatch of the notification Delta.
+    private synchronized String calculatePatch(String oldNotificationRecord) {
+        try {
+            JsonNode notification = JsonLoader.fromString(notificationRecord);
+            JsonNode oldNotification = JsonLoader.fromString(oldNotificationRecord);
+            JsonNode patchNode = JsonDiff.asJson(oldNotification, notification);
+            LOGGER.info("Generated JSON Patch is " + patchNode.toString());
+            JsonPatch patch = JsonPatch.fromJson(patchNode);
+            try {
+                JsonNode patched = patch.apply(oldNotification);
+                LOGGER.info("Generated New Notification is : " + patched.toString());
+                return patched.toString();
+            } catch (JsonPatchException e) {
+                LOGGER.error("Error generating Patched " + e.getMessage(), e);
+                return null;
+            }
+        } catch (IOException e) {
+            LOGGER.error("Error generating Patched " + e.getMessage(), e);
+            return null;
+        }
+    }
 
-       // Take in string notification and send the record delta to Handler. 
-       private static void callHandler(String notification){
-               if(handler!=null){
-                       try {
-                               PDPNotification notificationObject = PolicyUtils.jsonStringToObject(notification, StdPDPNotification.class);
-                               if(notificationObject.getNotificationType()!=null){
-                                       LOGGER.info("Performing Patched notification ");
-                                       try{
-                                               handler.runOnNotification(notificationObject);
-                                               notificationRecord = lastMasterNotification;
-                                       }catch (Exception e){
-                                               LOGGER.error("Error in Clients Handler Object : " + e.getMessage());
-                                       }
-                               }
-                       } catch (IOException e) {
-                               LOGGER.info("Error while notification Conversion " + e.getMessage());
-                       }
-               }
-       }
+    /**
+     * Updates Notification in the Database while Performing the health check.
+     * 
+     * @param notification
+     *            String format of notification record to store in the Database.
+     * @throws Exception
+     */
+    public synchronized void updateNotification() throws BackUpMonitorException {
+        checkDataBase();
+    }
 
-       // Used to set LastMasterNotification Record. 
-       private static void setLastNotification(String notification){
-               synchronized(notificationLock){
-                       lastMasterNotification = notification;
-                       if(lastMasterNotification!=null && !lastMasterNotification.equals("\"notificationType\":null")){
-                               if(lastMasterNotification.equals(notificationRecord)){
-                                       return;
-                               }
-                               callHandler(notification);
-                       }
-               }
-       }
+    // Take in string notification and send the record delta to Handler.
+    private static void callHandler(String notification) {
+        if (handler != null) {
+            try {
+                PDPNotification notificationObject = PolicyUtils.jsonStringToObject(notification,
+                        StdPDPNotification.class);
+                if (notificationObject.getNotificationType() != null) {
+                    LOGGER.info("Performing Patched notification ");
+                    try {
+                        handler.runOnNotification(notificationObject);
+                        notificationRecord = lastMasterNotification;
+                    } catch (Exception e) {
+                        LOGGER.error("Error in Clients Handler Object : " + e.getMessage(), e);
+                    }
+                }
+            } catch (IOException e) {
+                LOGGER.info("Error while notification Conversion " + e.getMessage(), e);
+            }
+        }
+    }
+
+    // Used to set LastMasterNotification Record.
+    private static void setLastNotification(String notification) {
+        synchronized (notificationLock) {
+            lastMasterNotification = notification;
+            if (lastMasterNotification != null && !lastMasterNotification.equals("\"notificationType\":null")) {
+                if (lastMasterNotification.equals(notificationRecord)) {
+                    return;
+                }
+                callHandler(notification);
+            }
+        }
+    }
 }
diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitorException.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitorException.java
new file mode 100644 (file)
index 0000000..b12e780
--- /dev/null
@@ -0,0 +1,44 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * PolicyEngineUtils
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.policy.utils;
+
+public class BackUpMonitorException extends Exception{
+    private static final long serialVersionUID = 6778134503685443473L;
+    
+    public BackUpMonitorException() {
+    }
+    
+    public BackUpMonitorException(String message) {
+        super(message);
+    }
+    
+    public BackUpMonitorException(Throwable cause){
+        super(cause);
+    }
+    
+    public BackUpMonitorException(String message, Throwable cause) {
+        super(message, cause);
+    }
+    
+    public BackUpMonitorException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
+        super(message, cause, enableSuppression, writableStackTrace);
+    }
+}
index bf92835..1b31394 100644 (file)
@@ -1,8 +1,30 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * PolicyEngineUtils
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.policy.utils;
 
+import java.net.MalformedURLException;
 import java.util.List;
 import java.util.Properties;
 
+import com.att.nsa.mr.client.MRClient.MRApiException;
 import com.att.nsa.mr.client.impl.MRConsumerImpl;
 import com.att.nsa.mr.test.clients.ProtocolTypeConstants;
 
@@ -12,9 +34,9 @@ public interface BusConsumer {
         * fetch messages
         * 
         * @return list of messages
-        * @throws Exception when error encountered by underlying libraries
+        * @throws MRApiException when error encountered by underlying libraries
         */
-       public Iterable<String> fetch() throws Exception;
+       public Iterable<String> fetch() throws MRApiException;
        
        /**
         * close underlying library consumer
@@ -48,8 +70,7 @@ public interface BusConsumer {
                public DmaapConsumerWrapper(List<String> servers, String topic, 
                                                                String aafLogin, String aafPassword,
                                                                String consumerGroup, String consumerInstance,
-                                                               int fetchTimeout, int fetchLimit) 
-               throws Exception {
+                                                               int fetchTimeout, int fetchLimit)  throws MalformedURLException{
                                        
                        this.consumer = new MRConsumerImpl(servers, topic, 
                                                                                           consumerGroup, consumerInstance, 
@@ -70,8 +91,12 @@ public interface BusConsumer {
                /**
                 * {@inheritDoc}
                 */
-               public Iterable<String> fetch() throws Exception {
-                       return this.consumer.fetch();
+               public Iterable<String> fetch() throws MRApiException {
+                       try {
+                return this.consumer.fetch();
+            } catch (Exception e) {
+                throw new MRApiException("Error during MR consumer Fetch ",e);
+            }
                }
                
                /**
index 792c389..3190aa0 100644 (file)
@@ -1,3 +1,23 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * PolicyEngineUtils
+ * ================================================================================
+ * Copyright (C) 2017 AT&T 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.policy.utils;
 
 import java.util.ArrayList;
@@ -6,6 +26,8 @@ import java.util.Properties;
 import java.util.concurrent.TimeUnit;
 
 import org.onap.policy.common.logging.eelf.PolicyLogger;
+import org.onap.policy.common.logging.flexlogger.FlexLogger;
+import org.onap.policy.common.logging.flexlogger.Logger;
 
 import com.att.nsa.mr.client.impl.MRSimplerBatchPublisher;
 import com.att.nsa.mr.test.clients.ProtocolTypeConstants;
@@ -31,6 +53,7 @@ public interface BusPublisher {
         * DmaapClient library wrapper
         */
        public static class DmaapPublisherWrapper implements BusPublisher {
+           private static Logger logger = FlexLogger.getLogger(DmaapPublisherWrapper.class);
                /**
                 * MR based Publisher
                 */             
@@ -74,16 +97,16 @@ public interface BusPublisher {
                 */
                @Override
                public void close() {
-                       if (PolicyLogger.isInfoEnabled())
-                               PolicyLogger.info(DmaapPublisherWrapper.class.getName(), 
+                       if (logger.isInfoEnabled())
+                           logger.info(DmaapPublisherWrapper.class.getName()+ 
                                                  "CREATION: " + this);
                        
                        try {
                                this.publisher.close(1, TimeUnit.SECONDS);
                        } catch (Exception e) {
-                               PolicyLogger.warn(DmaapPublisherWrapper.class.getName(), 
+                           logger.warn(DmaapPublisherWrapper.class.getName()+ 
                                                  "CLOSE: " + this + " because of " + 
-                                                                 e.getMessage());
+                                                                 e.getMessage(), e);
                        }
                }
                
index 82340c1..8bc83dc 100644 (file)
@@ -70,7 +70,7 @@ public class PolicyUtils {
                } 
        }
        
-       public static String[] decodeBasicEncoding(String encodedValue) throws Exception{
+       public static String[] decodeBasicEncoding(String encodedValue) throws UnsupportedEncodingException {
                if(encodedValue!=null && encodedValue.contains("Basic ")){
                        String encodedUserPassword = encodedValue.replaceFirst("Basic"  + " ", "");
                        String usernameAndPassword = null;