[POLICY-67] Add new Rainy Day Decision Policy
[policy/engine.git] / ECOMP-PAP-REST / src / main / java / org / openecomp / policy / pap / xacml / rest / policycontroller / PolicyCreation.java
index a987e9a..0d84519 100644 (file)
@@ -29,6 +29,7 @@ import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.lang.StringUtils;
 import org.openecomp.policy.common.logging.eelf.PolicyLogger;
 import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
 import org.openecomp.policy.common.logging.flexlogger.Logger;
@@ -81,6 +82,14 @@ public class PolicyCreation extends AbstractPolicyCreation{
        
        private static CommonClassDao commonClassDao;
        
+       public static CommonClassDao getCommonClassDao() {
+               return commonClassDao;
+       }
+
+       public static void setCommonClassDao(CommonClassDao commonClassDao) {
+               PolicyCreation.commonClassDao = commonClassDao;
+       }
+
        @Autowired
        public PolicyCreation(CommonClassDao commonClassDao){
                PolicyCreation.commonClassDao = commonClassDao;
@@ -93,8 +102,8 @@ public class PolicyCreation extends AbstractPolicyCreation{
        public ResponseEntity<String> savePolicy(@RequestBody PolicyRestAdapter policyData, HttpServletResponse response) throws Exception{
                String body = null;
                HttpStatus status = HttpStatus.BAD_REQUEST;
-               Map<String, String> successMap = new HashMap<String, String>();
-               Map<String, String> attributeMap = new HashMap<String, String>();
+               Map<String, String> successMap = new HashMap<>();
+               Map<String, String> attributeMap = new HashMap<>();
                PolicyVersion policyVersionDao;
                try {
                
@@ -161,8 +170,8 @@ public class PolicyCreation extends AbstractPolicyCreation{
                                highestVersion = policyVersion.getHigherVersion();
                        }
                        
-                       if(highestVersion != 0){
-                               if(policyData.isEditPolicy){
+                       if(highestVersion != 0 && policyVersion != null){
+                               if(policyData.isEditPolicy()){
                                        version = highestVersion +1;
                                        if(userId ==null){
                                                modifiedBy = "API";
@@ -239,7 +248,7 @@ public class PolicyCreation extends AbstractPolicyCreation{
                                }else if (policyConfigType.equalsIgnoreCase("BRMS_Param")) {
                                        policyData.setEcompName("DROOLS");
                                        policyData.setConfigName("BRMS_PARAM_RULE");
-                                       Map<String, String> drlRuleAndUIParams = new HashMap<String, String>();
+                                       Map<String, String> drlRuleAndUIParams = new HashMap<>();
                                        if(policyData.getApiflag() == null){
                                                // If there is any dynamic field create the matches here
                                                String key="templateName";
@@ -288,10 +297,10 @@ public class PolicyCreation extends AbstractPolicyCreation{
                                }
                        }else if(policyType.equalsIgnoreCase("Action")) {
                                if(policyData.getApiflag() == null){
-                                       List<String> dynamicRuleAlgorithmLabels = new LinkedList<String>();
-                                       List<String> dynamicRuleAlgorithmCombo = new LinkedList<String>();
-                                       List<String> dynamicRuleAlgorithmField1 = new LinkedList<String>();
-                                       List<String> dynamicRuleAlgorithmField2 = new LinkedList<String>();
+                                       List<String> dynamicRuleAlgorithmLabels = new LinkedList<>();
+                                       List<String> dynamicRuleAlgorithmCombo = new LinkedList<>();
+                                       List<String> dynamicRuleAlgorithmField1 = new LinkedList<>();
+                                       List<String> dynamicRuleAlgorithmField2 = new LinkedList<>();
 
 
                                        if(policyData.getRuleAlgorithmschoices().size() > 0){
@@ -332,13 +341,16 @@ public class PolicyCreation extends AbstractPolicyCreation{
                                newPolicy = new ActionPolicy(policyData);
                        } else if (policyType.equalsIgnoreCase("Decision")) {
                                if(policyData.getApiflag() == null){
-                                       Map<String, String> settingsMap = new HashMap<String, String>();
-                                       List<String> dynamicRuleAlgorithmLabels = new LinkedList<String>();
-                                       List<String> dynamicRuleAlgorithmCombo = new LinkedList<String>();
-                                       List<String> dynamicRuleAlgorithmField1 = new LinkedList<String>();
-                                       List<String> dynamicRuleAlgorithmField2 = new LinkedList<String>();
-                                       List<Object> dynamicVariableList = new LinkedList<Object>();
-                                       List<String> dataTypeList = new LinkedList<String>();
+                                       Map<String, String> settingsMap = new HashMap<>();
+                                       Map<String, String> treatmentMap = new HashMap<>();
+                                       List<String> dynamicRuleAlgorithmLabels = new LinkedList<>();
+                                       List<String> dynamicRuleAlgorithmCombo = new LinkedList<>();
+                                       List<String> dynamicRuleAlgorithmField1 = new LinkedList<>();
+                                       List<String> dynamicRuleAlgorithmField2 = new LinkedList<>();
+                                       List<Object> dynamicVariableList = new LinkedList<>();
+                                       List<String> dataTypeList = new LinkedList<>();
+                                       List<String> errorCodeList = new LinkedList<>();
+                                       List<String> treatmentList = new LinkedList<>();
 
                                        if(policyData.getSettings().size() > 0){
                                                for(Object settingsData : policyData.getSettings()){
@@ -349,7 +361,7 @@ public class PolicyCreation extends AbstractPolicyCreation{
                                                        }
                                                }
                                        }
-                                       if(policyData.getRuleAlgorithmschoices().size() > 0){
+                                       if(policyData.getRuleAlgorithmschoices()!=null && policyData.getRuleAlgorithmschoices().size() > 0){
                                                for(Object attribute : policyData.getRuleAlgorithmschoices()){
                                                        if(attribute instanceof LinkedHashMap<?, ?>){
                                                                String label = ((LinkedHashMap<?, ?>) attribute).get("id").toString();
@@ -363,7 +375,36 @@ public class PolicyCreation extends AbstractPolicyCreation{
                                                        }
                                                }
                                        }
-
+                                       if(policyData.getRuleProvider()!=null && (policyData.getRuleProvider().equals(DecisionPolicy.GUARD_YAML)|| policyData.getRuleProvider().equals(DecisionPolicy.GUARD_BL_YAML)) 
+                                                       && policyData.getYamlparams()!=null){
+                                               attributeMap.put("actor", policyData.getYamlparams().getActor());
+                                               attributeMap.put("recipe", policyData.getYamlparams().getRecipe());
+                                               attributeMap.put("limit", policyData.getYamlparams().getLimit());
+                                               attributeMap.put("timeWindow", policyData.getYamlparams().getTimeWindow());
+                                               attributeMap.put("guardActiveStart", policyData.getYamlparams().getGuardActiveStart());
+                                               attributeMap.put("guardActiveEnd", policyData.getYamlparams().getGuardActiveEnd());
+                                               if(policyData.getYamlparams().getBlackList()!=null){
+                                                       String blackList = StringUtils.join(policyData.getYamlparams().getBlackList(), ",");
+                                                       attributeMap.put("blackList", blackList);
+                                               }
+                                       }
+                                       if(policyData.getRuleProvider()!=null && policyData.getRuleProvider().equals(DecisionPolicy.RAINY_DAY)){
+                                               attributeMap.put("ServiceType", policyData.getRainyday().getServiceType());
+                                               attributeMap.put("VNFType", policyData.getRainyday().getVnfType());
+                                               attributeMap.put("BB_ID", policyData.getRainyday().getBbid());
+                                               attributeMap.put("WorkStep", policyData.getRainyday().getWorkstep());
+                                               
+                                               if(policyData.getRainyday().getTreatmentTableChoices()!=null && policyData.getRainyday().getTreatmentTableChoices().size() > 0){
+                                                       for (Object table : policyData.getRainyday().getTreatmentTableChoices()){
+                                                               if(table instanceof LinkedHashMap<?,?>){
+                                                                       String errorcode = ((LinkedHashMap<?,?>) table).get("errorcode").toString();
+                                                                       String treatment = ((LinkedHashMap<?,?>) table).get("treatment").toString();
+                                                                       treatmentMap.put(errorcode, treatment);
+                                                               }
+                                                       }
+                                               }
+                                       }
+                                       
                                        policyData.setDynamicRuleAlgorithmLabels(dynamicRuleAlgorithmLabels);
                                        policyData.setDynamicRuleAlgorithmCombo(dynamicRuleAlgorithmCombo);
                                        policyData.setDynamicRuleAlgorithmField1(dynamicRuleAlgorithmField1);
@@ -372,11 +413,22 @@ public class PolicyCreation extends AbstractPolicyCreation{
                                        policyData.setDynamicSettingsMap(settingsMap);
                                        policyData.setDynamicFieldConfigAttributes(attributeMap);
                                        policyData.setDataTypeList(dataTypeList);
+                                       policyData.setRainydayMap(treatmentMap);
+                                       policyData.setErrorCodeList(errorCodeList);
+                                       policyData.setTreatmentList(treatmentList);
                                }
                                newPolicy = new DecisionPolicy(policyData);
                        }
 
-                       newPolicy.prepareToSave();
+                       if(newPolicy != null){
+                               newPolicy.prepareToSave();
+                       }else{
+                               body = "error";
+                               status = HttpStatus.INTERNAL_SERVER_ERROR;
+                               response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);                                                               
+                               response.addHeader("error", "error");
+                               return new ResponseEntity<String>(body, status);
+                       }
                        
                        PolicyDBDaoTransaction policyDBDaoTransaction = null;
                        try{
@@ -386,7 +438,7 @@ public class PolicyCreation extends AbstractPolicyCreation{
                                successMap = newPolicy.savePolicies();
                                if(successMap.containsKey("success")){
                                        policyDBDaoTransaction.commitTransaction();
-                                       if(policyData.isEditPolicy){
+                                       if(policyData.isEditPolicy()){
                                                commonClassDao.update(policyVersionDao);
                                        }else{
                                                commonClassDao.save(policyVersionDao);
@@ -454,12 +506,13 @@ public class PolicyCreation extends AbstractPolicyCreation{
                                        response.addHeader("error", "error");                                                   
                                }
                        }catch(Exception e){
-                               policyDBDaoTransaction.rollbackTransaction();
+                               if(policyDBDaoTransaction != null){
+                                       policyDBDaoTransaction.rollbackTransaction();
+                               }
                        }
-
                }
                catch (Exception e){
-                       e.printStackTrace();
+                       LOGGER.error("Exception Occured : "+e);
                }
                return new ResponseEntity<String>(body, status);
        }