aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTej, Tarun <tt3868@att.com>2017-08-21 20:00:50 -0400
committerTarun Tej Velaga <tt3868@att.com>2017-08-23 17:29:35 +0000
commit80f072f60509ef3a35369a60857fe05f6c2a993a (patch)
tree7dca6266b225be3f192623fdc859ca80f4d1d493
parentc53fa990ea27ec074859eb94bcb7ec6deaa2157b (diff)
Fixes for sonar critical issues
Fixes for critical and blocker issues reported in sonar. Issue-Id: POLICY-113 Change-Id: I50969fe93a94b0497f3fb30864a6c45e63208fe6 Signed-off-by: Tej, Tarun <tt3868@att.com>
-rw-r--r--BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSGateway.java101
-rw-r--r--BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSHandler.java6
-rw-r--r--BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSPush.java1865
-rw-r--r--ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/XACMLPapServlet.java313
-rw-r--r--ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/PapUrlResolver.java707
-rw-r--r--ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpServlet.java141
-rw-r--r--ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PAPServices.java184
-rw-r--r--ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PDPServices.java19
-rw-r--r--ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PolicyEngineImportService.java2
-rw-r--r--ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/ManualNotificationUpdateThread.java383
-rw-r--r--ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationController.java673
-rw-r--r--ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationServer.java31
-rw-r--r--ONAP-PDP-REST/src/test/java/org/onap/policy/pdp/rest/api/test/PolicyEngineServicesTest.java3
-rw-r--r--ONAP-PDP-REST/src/test/resources/notification.xacml.pdp.properties171
-rw-r--r--ONAP-REST/src/main/java/org/onap/policy/rest/XACMLRestProperties.java1
-rw-r--r--ONAP-REST/src/main/java/org/onap/policy/rest/XacmlAdminAuthorization.java5
-rw-r--r--ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyEntity.java4
-rw-r--r--ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyManagement.java2
-rw-r--r--ONAP-REST/src/main/java/org/onap/policy/rest/util/Webapps.java14
-rw-r--r--ONAP-SDK-APP/src/main/java/org/openecomp/portalapp/conf/ExternalAppConfig.java9
-rw-r--r--ONAP-SDK-APP/src/main/java/org/openecomp/portalapp/login/LoginStrategyImpl.java107
-rw-r--r--ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdEngine.java14
-rw-r--r--ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPAPPolicy.java2
-rw-r--r--ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDP.java7
-rw-r--r--ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPGroup.java18
-rw-r--r--ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPItemSetChangeNotifier.java2
-rw-r--r--ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPStatus.java10
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java8
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/controller/ActionPolicyController.java416
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AdminTabController.java3
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AutoPushController.java10
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopFaultController.java11
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java12
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreatePolicyController.java7
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PDPController.java19
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java14
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyExportAndImportController.java5
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyNotificationController.java7
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyValidationController.java4
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/daoImp/CommonClassDaoImpl.java4
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/model/PDPGroupContainer.java32
-rw-r--r--POLICY-SDK-APP/src/main/java/org/onap/policy/model/PDPPolicyContainer.java33
-rw-r--r--PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientDMAAP.java238
-rw-r--r--PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java37
-rw-r--r--PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientUEB.java66
-rw-r--r--PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java10
-rw-r--r--PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEndUEB.java3
-rw-r--r--PolicyEngineAPI/src/main/java/org/onap/policy/std/NotificationUnMarshal.java58
-rw-r--r--PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java1711
-rw-r--r--PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientUEBTest.java388
-rw-r--r--PolicyEngineAPI/src/test/java/org/onap/policy/test/ActionPolicyApiTest.java4
-rw-r--r--PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigBasePolicyTest.java4
-rw-r--r--PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigFirewallPolicyTest.java4
-rw-r--r--PolicyEngineAPI/src/test/java/org/onap/policy/test/DecisionPolicyApiTest.java4
-rw-r--r--PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineInterfaceTest.java4
-rw-r--r--PolicyEngineClient/pom.xml6
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/ActionPolicyClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/ActionPolicyClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/BrmsParamPolicyClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/BrmsParamPolicyClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/BrmsRawPolicyClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/BrmsRawPolicyClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/ClosedLoopPolicyClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/ClosedLoopPolicyClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/ClosedLoopPolicyPerformanceMetricClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/ClosedLoopPolicyPerformanceMetricClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/ConfigBasePolicyClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/ConfigBasePolicyClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/ConfigFirewallPolicyClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/ConfigFirewallPolicyClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/DecisionPolicyClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/DecisionPolicyClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/DeletePolicyClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/DeletePolicyClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/GeneralTestClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/GeneralTestClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/GetConfigSample.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/GetConfigSample.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/Handler.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/Handler.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/ImportBRMSTemplate.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/ImportBRMSTemplate.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/ImportMicroServiceClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/ImportMicroServiceClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/ListConfigPoliciesClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/ListConfigPoliciesClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/MainClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/MainClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/MicroServicesPolicyClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/MicroServicesPolicyClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/PolicyEngineTestClient.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/PolicyEngineTestClient.java)2
-rw-r--r--PolicyEngineClient/src/test/java/org/onap/policyengine/PushPoliciesToPDP.java (renamed from PolicyEngineClient/src/main/java/org/onap/policyEngine/PushPoliciesToPDP.java)2
-rw-r--r--PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java733
-rw-r--r--PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitorException.java44
-rw-r--r--PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusConsumer.java37
-rw-r--r--PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusPublisher.java31
-rw-r--r--PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java2
80 files changed, 4491 insertions, 4310 deletions
diff --git a/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSGateway.java b/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSGateway.java
index 0b4058d59..c4fcf5454 100644
--- a/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSGateway.java
+++ b/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSGateway.java
@@ -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;
+ }
}
diff --git a/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSHandler.java b/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSHandler.java
index 305f64de1..43031861b 100644
--- a/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSHandler.java
+++ b/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSHandler.java
@@ -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);
}
}
}
diff --git a/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSPush.java b/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSPush.java
index c24493882..f6f7c1214 100644
--- a/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSPush.java
+++ b/BRMSGateway/src/main/java/org/onap/policy/brmsInterface/BRMSPush.java
@@ -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;
+ }
}
diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/XACMLPapServlet.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/XACMLPapServlet.java
index 53d801b5b..e11538c4e 100644
--- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/XACMLPapServlet.java
+++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/XACMLPapServlet.java
@@ -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() {
diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/PapUrlResolver.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/PapUrlResolver.java
index cee07fd9f..7ac322ec9 100644
--- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/PapUrlResolver.java
+++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/PapUrlResolver.java
@@ -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);
+ }
+ }
}
diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpServlet.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpServlet.java
index d57e88498..18c201737 100644
--- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpServlet.java
+++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/XACMLPdpServlet.java
@@ -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();
diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PAPServices.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PAPServices.java
index e7216e152..f7c175c0c 100644
--- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PAPServices.java
+++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PAPServices.java
@@ -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 {
diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PDPServices.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PDPServices.java
index e495c9950..efaa5c167 100644
--- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PDPServices.java
+++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PDPServices.java
@@ -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) {
diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PolicyEngineImportService.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PolicyEngineImportService.java
index 2d8af54c5..d0649d78a 100644
--- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PolicyEngineImportService.java
+++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/api/services/PolicyEngineImportService.java
@@ -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();
diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/ManualNotificationUpdateThread.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/ManualNotificationUpdateThread.java
index c1306572f..9027e27a5 100644
--- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/ManualNotificationUpdateThread.java
+++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/ManualNotificationUpdateThread.java
@@ -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;
+ }
+
}
diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationController.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationController.java
index 109d421f8..577d5b347 100644
--- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationController.java
+++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationController.java
@@ -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();
+ }
+ }
}
diff --git a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationServer.java b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationServer.java
index 690d8c517..2f3d58203 100644
--- a/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationServer.java
+++ b/ONAP-PDP-REST/src/main/java/org/onap/policy/pdp/rest/notifications/NotificationServer.java
@@ -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(",")) {
diff --git a/ONAP-PDP-REST/src/test/java/org/onap/policy/pdp/rest/api/test/PolicyEngineServicesTest.java b/ONAP-PDP-REST/src/test/java/org/onap/policy/pdp/rest/api/test/PolicyEngineServicesTest.java
index aa55a2a14..fe4ce0599 100644
--- a/ONAP-PDP-REST/src/test/java/org/onap/policy/pdp/rest/api/test/PolicyEngineServicesTest.java
+++ b/ONAP-PDP-REST/src/test/java/org/onap/policy/pdp/rest/api/test/PolicyEngineServicesTest.java
@@ -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
index 000000000..9ca1bba9c
--- /dev/null
+++ b/ONAP-PDP-REST/src/test/resources/notification.xacml.pdp.properties
@@ -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 =
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/XACMLRestProperties.java b/ONAP-REST/src/main/java/org/onap/policy/rest/XACMLRestProperties.java
index 5c8449603..73cb0f07e 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/XACMLRestProperties.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/XACMLRestProperties.java
@@ -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
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/XacmlAdminAuthorization.java b/ONAP-REST/src/main/java/org/onap/policy/rest/XacmlAdminAuthorization.java
index c8dc71918..c29e17637 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/XacmlAdminAuthorization.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/XacmlAdminAuthorization.java
@@ -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;
}
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyEntity.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyEntity.java
index 57daf7ed8..6c7b8cf6f 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyEntity.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyEntity.java
@@ -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) &&
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyManagement.java b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyManagement.java
index 2a6571e52..c79ee1e82 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyManagement.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/jpa/PolicyManagement.java
@@ -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;
diff --git a/ONAP-REST/src/main/java/org/onap/policy/rest/util/Webapps.java b/ONAP-REST/src/main/java/org/onap/policy/rest/util/Webapps.java
index 908078f73..1fb8ec531 100644
--- a/ONAP-REST/src/main/java/org/onap/policy/rest/util/Webapps.java
+++ b/ONAP-REST/src/main/java/org/onap/policy/rest/util/Webapps.java
@@ -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;
diff --git a/ONAP-SDK-APP/src/main/java/org/openecomp/portalapp/conf/ExternalAppConfig.java b/ONAP-SDK-APP/src/main/java/org/openecomp/portalapp/conf/ExternalAppConfig.java
index 91ed598cf..1b6397c05 100644
--- a/ONAP-SDK-APP/src/main/java/org/openecomp/portalapp/conf/ExternalAppConfig.java
+++ b/ONAP-SDK-APP/src/main/java/org/openecomp/portalapp/conf/ExternalAppConfig.java
@@ -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;
}
diff --git a/ONAP-SDK-APP/src/main/java/org/openecomp/portalapp/login/LoginStrategyImpl.java b/ONAP-SDK-APP/src/main/java/org/openecomp/portalapp/login/LoginStrategyImpl.java
index a4b684719..13d8836ea 100644
--- a/ONAP-SDK-APP/src/main/java/org/openecomp/portalapp/login/LoginStrategyImpl.java
+++ b/ONAP-SDK-APP/src/main/java/org/openecomp/portalapp/login/LoginStrategyImpl.java
@@ -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;
+ }
-
}
diff --git a/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdEngine.java b/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdEngine.java
index 3132b8cac..14d7c7f62 100644
--- a/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdEngine.java
+++ b/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdEngine.java
@@ -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
diff --git a/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPAPPolicy.java b/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPAPPolicy.java
index d69f38d95..56676f38b 100644
--- a/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPAPPolicy.java
+++ b/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPAPPolicy.java
@@ -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;
diff --git a/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDP.java b/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDP.java
index 20dbfae07..4c1f4aadc 100644
--- a/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDP.java
+++ b/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDP.java
@@ -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()));
diff --git a/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPGroup.java b/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPGroup.java
index 63cc4b4fc..28f6a4d03 100644
--- a/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPGroup.java
+++ b/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPGroup.java
@@ -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 {
diff --git a/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPItemSetChangeNotifier.java b/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPItemSetChangeNotifier.java
index d23501f26..cc80b62c2 100644
--- a/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPItemSetChangeNotifier.java
+++ b/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPItemSetChangeNotifier.java
@@ -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);
}
diff --git a/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPStatus.java b/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPStatus.java
index f8759956c..5349f8340 100644
--- a/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPStatus.java
+++ b/ONAP-XACML/src/main/java/org/onap/policy/xacml/std/pap/StdPDPStatus.java
@@ -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() {
}
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java
index e99f35bde..7234a3b6a 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java
@@ -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());
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/ActionPolicyController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/ActionPolicyController.java
index 0a985045d..c8b7a9630 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/ActionPolicyController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/ActionPolicyController.java
@@ -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);
+ }
}
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AdminTabController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AdminTabController.java
index 820a1ebd9..3b88f8472 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AdminTabController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AdminTabController.java
@@ -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);
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AutoPushController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AutoPushController.java
index b72993f19..c1468e365 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AutoPushController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/AutoPushController.java
@@ -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;
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopFaultController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopFaultController.java
index a7ce45ec4..e7740c336 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopFaultController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateClosedLoopFaultController.java
@@ -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);
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java
index 609a45c20..815b88f70 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreateDcaeMicroServiceController.java
@@ -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);
}
}
}
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreatePolicyController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreatePolicyController.java
index 9c07876c1..4506fb84c 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreatePolicyController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/CreatePolicyController.java
@@ -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);
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PDPController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PDPController.java
index f40587d4b..bb06cb3fe 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PDPController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PDPController.java
@@ -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();
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java
index 35b9b959d..4a6c230c1 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyController.java
@@ -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;
}
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyExportAndImportController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyExportAndImportController.java
index bb6f38b8e..a6c6bf6ac 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyExportAndImportController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyExportAndImportController.java
@@ -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;
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyNotificationController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyNotificationController.java
index 731217573..21f3793f1 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyNotificationController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyNotificationController.java
@@ -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());
}
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyValidationController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyValidationController.java
index 5fb0c1a7e..d1fba383f 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyValidationController.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyValidationController.java
@@ -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;
}
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/daoImp/CommonClassDaoImpl.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/daoImp/CommonClassDaoImpl.java
index 336c42ca8..946f90ac7 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/daoImp/CommonClassDaoImpl.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/daoImp/CommonClassDaoImpl.java
@@ -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;
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/model/PDPGroupContainer.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/model/PDPGroupContainer.java
index ae2144b10..c05a67441 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/model/PDPGroupContainer.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/model/PDPGroupContainer.java
@@ -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
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/model/PDPPolicyContainer.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/model/PDPPolicyContainer.java
index 864078439..a3e3e28ad 100644
--- a/POLICY-SDK-APP/src/main/java/org/onap/policy/model/PDPPolicyContainer.java
+++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/model/PDPPolicyContainer.java
@@ -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
diff --git a/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientDMAAP.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientDMAAP.java
index 3699bfcfb..d031868f0 100644
--- a/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientDMAAP.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientDMAAP.java
@@ -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);
+ }
+ }
+ }
+ }
}
diff --git a/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java
index 976b57058..f0d99d09e 100644
--- a/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientEnd.java
@@ -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 {
diff --git a/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientUEB.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientUEB.java
index 37413f416..f84568aba 100644
--- a/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientUEB.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/AutoClientUEB.java
@@ -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;
}
diff --git a/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java
index 7e4ba07e8..db3fdf194 100644
--- a/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEnd.java
@@ -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 {
diff --git a/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEndUEB.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEndUEB.java
index dcd86eb1f..29c85a2ad 100644
--- a/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEndUEB.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/ManualClientEndUEB.java
@@ -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++;
}
diff --git a/PolicyEngineAPI/src/main/java/org/onap/policy/std/NotificationUnMarshal.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/NotificationUnMarshal.java
index 2ec174c84..447e7cb26 100644
--- a/PolicyEngineAPI/src/main/java/org/onap/policy/std/NotificationUnMarshal.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/NotificationUnMarshal.java
@@ -20,49 +20,45 @@
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;
}
diff --git a/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java
index 8a6c6c668..4e904b6e1 100644
--- a/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java
+++ b/PolicyEngineAPI/src/main/java/org/onap/policy/std/StdPolicyEngine.java
@@ -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
diff --git a/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientUEBTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientUEBTest.java
index 94c2ac781..eef76bdd7 100644
--- a/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientUEBTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/std/test/AutoClientUEBTest.java
@@ -120,369 +120,6 @@ public class AutoClientUEBTest {
}
/**
- * 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.
*
* @throws Exception
@@ -502,26 +139,6 @@ public class AutoClientUEBTest {
}
/**
- * 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.
*
* @throws Exception
@@ -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);
}
/**
diff --git a/PolicyEngineAPI/src/test/java/org/onap/policy/test/ActionPolicyApiTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ActionPolicyApiTest.java
index a66256432..ae971b405 100644
--- a/PolicyEngineAPI/src/test/java/org/onap/policy/test/ActionPolicyApiTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ActionPolicyApiTest.java
@@ -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();
}
diff --git a/PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigBasePolicyTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigBasePolicyTest.java
index 5d5a076ae..b5fb75c42 100644
--- a/PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigBasePolicyTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigBasePolicyTest.java
@@ -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
}
diff --git a/PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigFirewallPolicyTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigFirewallPolicyTest.java
index 78ae2493b..c50b3de47 100644
--- a/PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigFirewallPolicyTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/ConfigFirewallPolicyTest.java
@@ -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
}
diff --git a/PolicyEngineAPI/src/test/java/org/onap/policy/test/DecisionPolicyApiTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/DecisionPolicyApiTest.java
index a80093470..7c9eb3e10 100644
--- a/PolicyEngineAPI/src/test/java/org/onap/policy/test/DecisionPolicyApiTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/DecisionPolicyApiTest.java
@@ -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
}
diff --git a/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineInterfaceTest.java b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineInterfaceTest.java
index be9e0e7e8..2adf3b0bf 100644
--- a/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineInterfaceTest.java
+++ b/PolicyEngineAPI/src/test/java/org/onap/policy/test/PolicyEngineInterfaceTest.java
@@ -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
}
diff --git a/PolicyEngineClient/pom.xml b/PolicyEngineClient/pom.xml
index 04be78565..8e0e5f4ec 100644
--- a/PolicyEngineClient/pom.xml
+++ b/PolicyEngineClient/pom.xml
@@ -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>
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ActionPolicyClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/ActionPolicyClient.java
index fa04668ca..94c6043c5 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ActionPolicyClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/ActionPolicyClient.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.util.Arrays;
import java.util.HashMap;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/BrmsParamPolicyClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/BrmsParamPolicyClient.java
index 04cfdb84a..33ceedf7f 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/BrmsParamPolicyClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/BrmsParamPolicyClient.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.text.SimpleDateFormat;
import java.util.Date;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/BrmsRawPolicyClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/BrmsRawPolicyClient.java
index bf8fea59f..18d404dc2 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/BrmsRawPolicyClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/BrmsRawPolicyClient.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.io.BufferedReader;
import java.io.File;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ClosedLoopPolicyClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/ClosedLoopPolicyClient.java
index 2240f0b73..29a0f4363 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ClosedLoopPolicyClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/ClosedLoopPolicyClient.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.io.File;
import java.io.FileInputStream;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ClosedLoopPolicyPerformanceMetricClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/ClosedLoopPolicyPerformanceMetricClient.java
index e3b5fde60..eaee2a325 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ClosedLoopPolicyPerformanceMetricClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/ClosedLoopPolicyPerformanceMetricClient.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.io.File;
import java.io.FileInputStream;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ConfigBasePolicyClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/ConfigBasePolicyClient.java
index 20a5bd359..b8dfdc1f6 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ConfigBasePolicyClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/ConfigBasePolicyClient.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.text.SimpleDateFormat;
import java.util.Date;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ConfigFirewallPolicyClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/ConfigFirewallPolicyClient.java
index a261761f5..37ec9fabd 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ConfigFirewallPolicyClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/ConfigFirewallPolicyClient.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.io.File;
import java.io.FileInputStream;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/DecisionPolicyClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/DecisionPolicyClient.java
index 8c16e0e40..2ef2d3b1a 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/DecisionPolicyClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/DecisionPolicyClient.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.util.Arrays;
import java.util.HashMap;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/DeletePolicyClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/DeletePolicyClient.java
index ec4959550..c66067942 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/DeletePolicyClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/DeletePolicyClient.java
@@ -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;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/GeneralTestClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/GeneralTestClient.java
index 423ade2c2..e81939be6 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/GeneralTestClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/GeneralTestClient.java
@@ -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;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/GetConfigSample.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/GetConfigSample.java
index 59225ce6f..94cc69fd7 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/GetConfigSample.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/GetConfigSample.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.util.Collection;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/Handler.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/Handler.java
index 4a78db615..12fca6e93 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/Handler.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/Handler.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.util.Collection;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ImportBRMSTemplate.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/ImportBRMSTemplate.java
index 053c524b6..ef9ec3136 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ImportBRMSTemplate.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/ImportBRMSTemplate.java
@@ -1,4 +1,4 @@
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.io.File;
import java.util.UUID;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ImportMicroServiceClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/ImportMicroServiceClient.java
index 671eb6c80..86439583a 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ImportMicroServiceClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/ImportMicroServiceClient.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.util.UUID;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ListConfigPoliciesClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/ListConfigPoliciesClient.java
index dd5c97ba1..9973ce70c 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/ListConfigPoliciesClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/ListConfigPoliciesClient.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.util.Collection;
import java.util.HashMap;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/MainClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/MainClient.java
index 0be702c13..210499ca1 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/MainClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/MainClient.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.io.IOException;
import java.io.OutputStream;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/MicroServicesPolicyClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/MicroServicesPolicyClient.java
index 99f9551cb..b05e44726 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/MicroServicesPolicyClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/MicroServicesPolicyClient.java
@@ -18,7 +18,7 @@
* ============LICENSE_END=========================================================
*/
-package org.onap.policyEngine;
+package org.onap.policyengine;
import java.io.File;
import java.io.FileInputStream;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/PolicyEngineTestClient.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/PolicyEngineTestClient.java
index 4f782c8c9..39346eaea 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/PolicyEngineTestClient.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/PolicyEngineTestClient.java
@@ -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;
diff --git a/PolicyEngineClient/src/main/java/org/onap/policyEngine/PushPoliciesToPDP.java b/PolicyEngineClient/src/test/java/org/onap/policyengine/PushPoliciesToPDP.java
index 05d736464..880af0610 100644
--- a/PolicyEngineClient/src/main/java/org/onap/policyEngine/PushPoliciesToPDP.java
+++ b/PolicyEngineClient/src/test/java/org/onap/policyengine/PushPoliciesToPDP.java
@@ -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;
diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java
index 6fff797a6..d4f111637 100644
--- a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java
+++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitor.java
@@ -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
index 000000000..b12e780a0
--- /dev/null
+++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BackUpMonitorException.java
@@ -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);
+ }
+}
diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusConsumer.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusConsumer.java
index bf92835c6..1b31394d0 100644
--- a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusConsumer.java
+++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusConsumer.java
@@ -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);
+ }
}
/**
diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusPublisher.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusPublisher.java
index 792c389ab..3190aa035 100644
--- a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusPublisher.java
+++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/BusPublisher.java
@@ -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);
}
}
diff --git a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java
index 82340c13c..8bc83dcb8 100644
--- a/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java
+++ b/PolicyEngineUtils/src/main/java/org/onap/policy/utils/PolicyUtils.java
@@ -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;