- for(LoadedPolicy updatedPolicy: notification.getLoadedPolicies()){
- logger.info("policyName : " + updatedPolicy.getPolicyName());
- logger.info("policyVersion :" + updatedPolicy.getVersionNo());
- logger.info("Matches: " + updatedPolicy.getMatches());
- // Checking the Name is correct or not.
- if(updatedPolicy.getPolicyName().contains("_BRMS_")){
- try{
- PolicyEngine policyEngine = getPolicyEngine();
- if(policyEngine!=null){
- ConfigRequestParameters configRequestParameters = new ConfigRequestParameters();
- configRequestParameters.setPolicyName(updatedPolicy.getPolicyName());
- Collection<PolicyConfig> policyConfigs = policyEngine.getConfig(configRequestParameters);
- for(PolicyConfig policyConfig: policyConfigs){
- if(policyConfig.getPolicyConfigStatus().equals(PolicyConfigStatus.CONFIG_RETRIEVED)){
- logger.info("Policy Retrieved with this Name notified: " + policyConfig.getPolicyName());
- bRMSPush.addRule(policyConfig.getPolicyName(),policyConfig.toOther(),policyConfig.getResponseAttributes());
- }else{
- logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR +"Fail to retrieve policy so rule will not be pushed to PolicyRepo !!!!\n\n");
- }
+ ArrayList<PolicyConfig> brmsPolicies = addedPolicies(notification);
+ Boolean successFlag = false;
+ for(int i=0; !successFlag && i< bRMSPush.URLListSize(); i++){
+ successFlag = false;
+ if(i!=0 && !successFlag){
+ for(PolicyConfig policyConfig: brmsPolicies){
+ logger.info("Policy Retry with this Name notified: " + policyConfig.getPolicyName());
+ bRMSPush.addRule(policyConfig.getPolicyName(),policyConfig.toOther(),policyConfig.getResponseAttributes());
+ }
+ }
+ try{
+ bRMSPush.pushRules();
+ successFlag = true;
+ }catch(PolicyException e){
+ //Upon Notification failure
+ successFlag = false;
+ bRMSPush.rotateURLs();
+ }
+ }
+ }
+ }
+
+ /*
+ * Executed when a policy is added to PDP.
+ */
+ private ArrayList<PolicyConfig> addedPolicies(PDPNotification notification) {
+ ArrayList<PolicyConfig> result = new ArrayList<PolicyConfig>();
+ for(LoadedPolicy updatedPolicy: notification.getLoadedPolicies()){
+ logger.info("policyName : " + updatedPolicy.getPolicyName());
+ logger.info("policyVersion :" + updatedPolicy.getVersionNo());
+ logger.info("Matches: " + updatedPolicy.getMatches());
+ // Checking the Name is correct or not.
+ if(updatedPolicy.getPolicyName().contains("_BRMS_")){
+ try{
+ PolicyEngine policyEngine = getPolicyEngine();
+ if(policyEngine!=null){
+ ConfigRequestParameters configRequestParameters = new ConfigRequestParameters();
+ configRequestParameters.setPolicyName(updatedPolicy.getPolicyName());
+ Collection<PolicyConfig> policyConfigs = policyEngine.getConfig(configRequestParameters);
+ for(PolicyConfig policyConfig: policyConfigs){
+ if(policyConfig.getPolicyConfigStatus().equals(PolicyConfigStatus.CONFIG_RETRIEVED)){
+ logger.info("Policy Retrieved with this Name notified: " + policyConfig.getPolicyName());
+ result.add(policyConfig);
+ bRMSPush.addRule(policyConfig.getPolicyName(),policyConfig.toOther(),policyConfig.getResponseAttributes());
+ }else{
+ logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR +"Fail to retrieve policy so rule will not be pushed to PolicyRepo !!!!\n\n");