diff options
author | rb7147 <rb7147@att.com> | 2018-02-06 09:07:12 -0500 |
---|---|---|
committer | rb7147 <rb7147@att.com> | 2018-02-06 10:33:49 -0500 |
commit | 695d88bd7a987a06173fc4fa13f4135916a79a86 (patch) | |
tree | 60ee9acba76fd3e4333e72bfde2e342313e62dd5 /POLICY-SDK-APP/src/main | |
parent | 6425d452d8507e9eeeb4da2f9f7051e602af541e (diff) |
Policy Resiliency Code Fixes
Resolved the issue on updating the configuration files when
rename/clone/export/move actions are done through GUI.
Fixed the PolicyManagerServlet code.
Added test cases for newly added files.
Issue-ID: POLICY-609
Change-Id: I9d14f19fe20bbc0e3b3844f85d81f26e34bb26ec
Signed-off-by: rb7147 <rb7147@att.com>
Diffstat (limited to 'POLICY-SDK-APP/src/main')
3 files changed, 314 insertions, 202 deletions
diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyManagerServlet.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyManagerServlet.java index 16a8ff7a9..9498529af 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyManagerServlet.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyManagerServlet.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2018 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. @@ -653,7 +653,7 @@ public class PolicyManagerServlet extends HttpServlet { scopeName = scopeName.replace("/", File.separator); } if(scopeName.contains("\\")){ - scopeName = scopeName.replace("\\", "\\\\\\\\"); + scopeName = scopeName.replace("\\", "\\\\"); } String query = "from PolicyVersion where POLICY_NAME like :scopeName"; String scopeNamequery = "from PolicyEditorScopes where SCOPENAME like :scopeName"; @@ -751,7 +751,14 @@ public class PolicyManagerServlet extends HttpServlet { String newPath = params.getString("newPath"); oldPath = oldPath.substring(oldPath.indexOf('/')+1); newPath = newPath.substring(newPath.indexOf('/')+1); + String checkValidation = null; if(oldPath.endsWith(".xml")){ + checkValidation = newPath.replace(".xml", ""); + checkValidation = checkValidation.substring(checkValidation.indexOf('_') + 1, checkValidation.lastIndexOf(".")); + checkValidation = checkValidation.substring(checkValidation.lastIndexOf("/")+1); + if(!PolicyUtils.policySpecialCharValidator(checkValidation).contains("success")){ + return error("Policy Rename Failed. The Name contains special characters."); + } JSONObject result = policyRename(oldPath, newPath, userId); if(!(Boolean)(result.getJSONObject("result").get("success"))){ return result; @@ -763,10 +770,14 @@ public class PolicyManagerServlet extends HttpServlet { scopeName = scopeName.replace("/", File.separator); newScopeName = newScopeName.replace("/", File.separator); } - if(scopeName.contains("\\")){ - scopeName = scopeName.replace("\\", "\\\\\\\\"); - newScopeName = newScopeName.replace("\\", "\\\\\\\\"); - } + checkValidation = newScopeName.substring(newScopeName.lastIndexOf(File.separator)+1); + if(scopeName.contains("\\")){ + scopeName = scopeName.replace("\\", "\\\\\\\\"); + newScopeName = newScopeName.replace("\\", "\\\\\\\\"); + } + if(!PolicyUtils.policySpecialCharValidator(checkValidation).contains("success")){ + return error("Scope Rename Failed. The Name contains special characters."); + } PolicyController controller = getPolicyControllerInstance(); String query = "from PolicyVersion where POLICY_NAME like :scopeName"; String scopeNamequery = "from PolicyEditorScopes where SCOPENAME like :scopeName"; @@ -901,7 +912,12 @@ public class PolicyManagerServlet extends HttpServlet { } for(int i=0; i<oldEntityData.size(); i++){ entity = (PolicyEntity) oldEntityData.get(i); - checkOldPolicyEntryAndUpdate(entity, newPolicySplit[0] , newPolicySplit[1], oldPolicySplit[0], oldPolicySplit[1], policyName, newpolicyName, oldpolicyName, userId); + String checkEntityName = entity.getPolicyName().replace(".xml", ""); + checkEntityName = checkEntityName.substring(0, checkEntityName.lastIndexOf('.')); + String originalPolicyName = oldpolicyName.substring(oldpolicyName.lastIndexOf(File.separator)+1); + if(checkEntityName.equals(originalPolicyName)){ + checkOldPolicyEntryAndUpdate(entity, newPolicySplit[0] , newPolicySplit[1], oldPolicySplit[0], oldPolicySplit[1], policyName, newpolicyName, oldpolicyName, userId); + } } }else{ return error("Policy rename failed due to policy not able to retrieve from database. Please, contact super-admin."); @@ -931,21 +947,24 @@ public class PolicyManagerServlet extends HttpServlet { entity.setPolicyData(entity.getPolicyData().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension)); entity.setScope(newScope); entity.setModifiedBy(userId); + + String oldConfigurationName = null; + String newConfigurationName = null; if(newpolicyName.contains("Config_")){ - String oldConfigurationName = configEntity.getConfigurationName(); + oldConfigurationName = configEntity.getConfigurationName(); configEntity.setConfigurationName(configEntity.getConfigurationName().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension)); controller.updateData(configEntity); - String newConfigurationName = configEntity.getConfigurationName(); + newConfigurationName = configEntity.getConfigurationName(); File file = new File(PolicyController.getConfigHome() + File.separator + oldConfigurationName); if(file.exists()){ File renamefile = new File(PolicyController.getConfigHome() + File.separator + newConfigurationName); file.renameTo(renamefile); } }else if(newpolicyName.contains("Action_")){ - String oldConfigurationName = actionEntity.getActionBodyName(); + oldConfigurationName = actionEntity.getActionBodyName(); actionEntity.setActionBody(actionEntity.getActionBody().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension)); controller.updateData(actionEntity); - String newConfigurationName = actionEntity.getActionBodyName(); + newConfigurationName = actionEntity.getActionBodyName(); File file = new File(PolicyController.getActionHome() + File.separator + oldConfigurationName); if(file.exists()){ File renamefile = new File(PolicyController.getActionHome() + File.separator + newConfigurationName); @@ -954,6 +973,8 @@ public class PolicyManagerServlet extends HttpServlet { } controller.updateData(entity); + PolicyRestController restController = new PolicyRestController(); + restController.notifyOtherPAPSToUpdateConfigurations("rename", newConfigurationName, oldConfigurationName); PolicyVersion versionEntity = (PolicyVersion) controller.getEntityItem(PolicyVersion.class, "policyName", oldpolicyName); versionEntity.setPolicyName(policyName); versionEntity.setModifiedBy(userId); @@ -972,18 +993,20 @@ public class PolicyManagerServlet extends HttpServlet { } } - private JSONObject cloneRecord(String newpolicyName, String oldScope, String inRemoveoldPolicyExtension, String newScope, String removenewPolicyExtension, PolicyEntity entity, String userId) throws ServletException{ + private JSONObject cloneRecord(String newpolicyName, String oldScope, String inRemoveoldPolicyExtension, String newScope, String inRemovenewPolicyExtension, PolicyEntity entity, String userId) throws ServletException{ String queryEntityName; PolicyController controller = getPolicyControllerInstance(); PolicyEntity cloneEntity = new PolicyEntity(); cloneEntity.setPolicyName(newpolicyName); String removeoldPolicyExtension = inRemoveoldPolicyExtension; + String removenewPolicyExtension = inRemovenewPolicyExtension; removeoldPolicyExtension = removeoldPolicyExtension.replace(".xml", ""); removenewPolicyExtension = removenewPolicyExtension.replace(".xml", ""); cloneEntity.setPolicyData(entity.getPolicyData().replace(oldScope+"."+removeoldPolicyExtension, newScope+"."+removenewPolicyExtension)); cloneEntity.setScope(entity.getScope()); String oldConfigRemoveExtension = removeoldPolicyExtension.replace(".xml", ""); String newConfigRemoveExtension = removenewPolicyExtension.replace(".xml", ""); + String newConfigurationName = null; if(newpolicyName.contains("Config_")){ ConfigurationDataEntity configurationDataEntity = new ConfigurationDataEntity(); configurationDataEntity.setConfigurationName(entity.getConfigurationData().getConfigurationName().replace(oldScope+"."+oldConfigRemoveExtension, newScope+"."+newConfigRemoveExtension)); @@ -996,7 +1019,7 @@ public class PolicyManagerServlet extends HttpServlet { controller.saveData(configurationDataEntity); ConfigurationDataEntity configEntiy = (ConfigurationDataEntity) controller.getEntityItem(ConfigurationDataEntity.class, "configurationName", queryEntityName); cloneEntity.setConfigurationData(configEntiy); - String newConfigurationName = configEntiy.getConfigurationName(); + newConfigurationName = configEntiy.getConfigurationName(); try (FileWriter fw = new FileWriter(PolicyController.getConfigHome() + File.separator + newConfigurationName); BufferedWriter bw = new BufferedWriter(fw)){ bw.write(configEntiy.getConfigBody()); @@ -1014,19 +1037,23 @@ public class PolicyManagerServlet extends HttpServlet { controller.saveData(actionBodyEntity); ActionBodyEntity actionEntiy = (ActionBodyEntity) controller.getEntityItem(ActionBodyEntity.class, "actionBodyName", queryEntityName); cloneEntity.setActionBodyEntity(actionEntiy); - String newConfigurationName = actionEntiy.getActionBodyName(); - try (FileWriter fw = new FileWriter(PolicyController.getActionHome() + File.separator + newConfigurationName); - BufferedWriter bw = new BufferedWriter(fw)){ - bw.write(actionEntiy.getActionBody()); - } catch (IOException e) { + newConfigurationName = actionEntiy.getActionBodyName(); + try (FileWriter fw = new FileWriter(PolicyController.getActionHome() + File.separator + newConfigurationName); + BufferedWriter bw = new BufferedWriter(fw)){ + bw.write(actionEntiy.getActionBody()); + } catch (IOException e) { LOGGER.error("Exception Occured While cloning the configuration file"+e); } } + cloneEntity.setDeleted(entity.isDeleted()); cloneEntity.setCreatedBy(userId); cloneEntity.setModifiedBy(userId); controller.saveData(cloneEntity); + //Notify others paps regarding clone policy. + PolicyRestController restController = new PolicyRestController(); + restController.notifyOtherPAPSToUpdateConfigurations("clonePolicy", newConfigurationName, null); return success(); } @@ -1055,8 +1082,17 @@ public class PolicyManagerServlet extends HttpServlet { }else if(newPolicyCheck.contains("Decision_")){ newPolicyCheck = newPolicyCheck.replace(".Decision_", ":Decision_"); } + if(!newPolicyCheck.contains(":")){ + return error("Policy Clone Failed. The Name contains special characters."); + } String[] newPolicySplit = newPolicyCheck.split(":"); + String checkValidation = newPolicySplit[1].replace(".xml", ""); + checkValidation = checkValidation.substring(checkValidation.indexOf('_') + 1, checkValidation.lastIndexOf(".")); + if(!PolicyUtils.policySpecialCharValidator(checkValidation).contains("success")){ + return error("Policy Clone Failed. The Name contains special characters."); + } + String oldPolicyCheck = orignalPolicyName; if(oldPolicyCheck.contains("Config_")){ oldPolicyCheck = oldPolicyCheck.replace(".Config_", ":Config_"); @@ -1182,9 +1218,11 @@ public class PolicyManagerServlet extends HttpServlet { if(policyNamewithoutExtension.contains("Config_")){ Files.deleteIfExists(Paths.get(PolicyController.getConfigHome() + File.separator + policyEntity.getConfigurationData().getConfigurationName())); controller.deleteData(policyEntity.getConfigurationData()); + restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getConfigurationData().getConfigurationName()); }else if(policyNamewithoutExtension.contains("Action_")){ Files.deleteIfExists(Paths.get(PolicyController.getActionHome() + File.separator + policyEntity.getActionBodyEntity().getActionBodyName())); controller.deleteData(policyEntity.getActionBodyEntity()); + restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getActionBodyEntity().getActionBodyName()); } } } @@ -1237,9 +1275,11 @@ public class PolicyManagerServlet extends HttpServlet { if(policyNamewithoutExtension.contains("Config_")){ Files.deleteIfExists(Paths.get(PolicyController.getConfigHome() + File.separator + policyEntity.getConfigurationData().getConfigurationName())); controller.deleteData(policyEntity.getConfigurationData()); + restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getConfigurationData().getConfigurationName()); }else if(policyNamewithoutExtension.contains("Action_")){ Files.deleteIfExists(Paths.get(PolicyController.getActionHome() + File.separator + policyEntity.getActionBodyEntity().getActionBodyName())); controller.deleteData(policyEntity.getActionBodyEntity()); + restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getActionBodyEntity().getActionBodyName()); } if(version > 1){ @@ -1262,7 +1302,12 @@ public class PolicyManagerServlet extends HttpServlet { entity.setModifiedBy(userId); controller.watchPolicyFunction(entity, policyNamewithExtension, "DeleteOne"); - String updatequery = "update PolicyVersion set active_version='"+highestVersion+"' , highest_version='"+highestVersion+"' where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"'"; + String updatequery = ""; + if(highestVersion != 0){ + updatequery = "update PolicyVersion set active_version='"+highestVersion+"' , highest_version='"+highestVersion+"' where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"'"; + }else{ + updatequery = "delete from PolicyVersion where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"' and id >0"; + } controller.executeQuery(updatequery); }else{ String policyVersionQuery = "delete from PolicyVersion where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"' and id >0"; @@ -1297,9 +1342,11 @@ public class PolicyManagerServlet extends HttpServlet { if(policyNamewithoutExtension.contains("Config_")){ Files.deleteIfExists(Paths.get(PolicyController.getConfigHome() + File.separator + policyEntity.getConfigurationData().getConfigurationName())); controller.deleteData(policyEntity.getConfigurationData()); + restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getConfigurationData().getConfigurationName()); }else if(policyNamewithoutExtension.contains("Action_")){ Files.deleteIfExists(Paths.get(PolicyController.getActionHome() + File.separator + policyEntity.getActionBodyEntity().getActionBodyName())); controller.deleteData(policyEntity.getActionBodyEntity()); + restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getActionBodyEntity().getActionBodyName()); } } } 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 63d0cb298..507f19820 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 @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2018 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. @@ -384,7 +384,7 @@ public class PolicyRestController extends RestrictedBaseController{ } @RequestMapping(value={"/saveDictionary/*/*"}, method={RequestMethod.POST}) - public ModelAndView saveDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException{ + public void saveDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException{ String userId = ""; String uri = request.getRequestURI().replace("/saveDictionary", ""); if(uri.startsWith("/")){ @@ -401,12 +401,15 @@ public class PolicyRestController extends RestrictedBaseController{ policyLogger.info("***********************************************************************************************************************************"); String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim()); - response.getWriter().write(body); - return null; + if(body != null && !body.isEmpty()){ + response.getWriter().write(body); + }else{ + response.getWriter().write("Failed"); + } } @RequestMapping(value={"/deleteDictionary/*/*"}, method={RequestMethod.POST}) - public ModelAndView deletetDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException { + public void deletetDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException { String uri = request.getRequestURI().replace("/deleteDictionary", ""); if(uri.startsWith("/")){ uri = uri.substring(uri.indexOf('/')+1); @@ -419,8 +422,11 @@ public class PolicyRestController extends RestrictedBaseController{ policyLogger.info("*************************************************************************************************************************************"); String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim()); - response.getWriter().write(body); - return null; + if(body != null && !body.isEmpty()){ + response.getWriter().write(body); + }else{ + response.getWriter().write("Failed"); + } } @RequestMapping(value={"/searchDictionary"}, method={RequestMethod.POST}) @@ -471,7 +477,9 @@ public class PolicyRestController extends RestrictedBaseController{ resultList = json.get("policyresult"); }catch(Exception e){ List<String> data = new ArrayList<>(); - data.add("Elastic Search Server is down"); + resultList = json.get("data"); + data.add("Exception"); + data.add(resultList.toString()); resultList = data; policyLogger.error("Exception Occured while searching for Policy in Elastic Database" +e); } @@ -490,5 +498,10 @@ public class PolicyRestController extends RestrictedBaseController{ String uri = "searchPolicy?action=delete&policyName='"+fileName+"'"; callPAP(null, "POST", uri.trim()); } + + public String notifyOtherPAPSToUpdateConfigurations(String mode, String newName, String oldName){ + String uri = "onap/notifyOtherPAPs?action="+mode+"&newPolicyName="+newName+"&oldPolicyName="+oldName+""; + return callPAP(null, "POST", uri.trim()); + } } 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 5365af18c..40056d995 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 @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2018 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. @@ -44,8 +44,8 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; import org.json.JSONObject; +import org.onap.policy.admin.PolicyRestController; import org.onap.policy.common.logging.flexlogger.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; import org.onap.policy.rest.adapter.PolicyExportAdapter; @@ -73,25 +73,18 @@ import com.fasterxml.jackson.databind.ObjectMapper; @RequestMapping("/") public class PolicyExportAndImportController extends RestrictedBaseController { private static Logger logger = FlexLogger.getLogger(PolicyExportAndImportController.class); - - private ArrayList<String> selectedPolicy; - private Set<String> scopes = null; - private List<String> roles = null; - private static String SUPERADMIN = "super-admin"; - private static String SUPEREDITOR = "super-editor"; - private static String ADMIN = "admin"; - private static String EDITOR = "editor"; - - private static CommonClassDao commonClassDao; - private PolicyEntity policyEntity; - private ConfigurationDataEntity configurationDataEntity; - private ActionBodyEntity actionBodyEntity; - private PolicyVersion policyVersion; + private static String superAdmin = "super-admin"; + private static String superEditor = "super-editor"; + private static String admin = "admin"; + private static String editor = "editor"; + private static String policyName = "policyName"; + private static String configurationName = "configurationName"; + private static String configurationbody = "configurationbody"; + private static String config = "Config_"; - private Workbook workbook; + private static CommonClassDao commonClassDao; - private HSSFWorkbook workBook2; private PolicyController policyController; public PolicyController getPolicyController() { @@ -121,33 +114,33 @@ public class PolicyExportAndImportController extends RestrictedBaseController { @RequestMapping(value={"/policy_download/exportPolicy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) public void exportPolicy(HttpServletRequest request, HttpServletResponse response) throws IOException{ - try{ + try(HSSFWorkbook workBook2 = new HSSFWorkbook()){ String file; - selectedPolicy = new ArrayList<>(); + ArrayList<String> selectedPolicy = new ArrayList<>(); ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); JsonNode root = mapper.readTree(request.getReader()); PolicyExportAdapter adapter = mapper.readValue(root.get("exportData").toString(), PolicyExportAdapter.class); for (Object policyId : adapter.getPolicyDatas()) { LinkedHashMap<?, ?> selected = (LinkedHashMap<?, ?>)policyId; - String policyWithScope = selected.get("policyName").toString() + "." + selected.get("activeVersion").toString() + ".xml"; + String policyWithScope = selected.get(policyName).toString() + "." + selected.get("activeVersion").toString() + ".xml"; String scope = policyWithScope.substring(0 , policyWithScope.lastIndexOf(File.separator)).replace(File.separator, "."); String policyName = policyWithScope.substring(policyWithScope.lastIndexOf(File.separator)+1); selectedPolicy.add(policyName+":"+scope); } List<Object> entityData = commonClassDao.getMultipleDataOnAddingConjunction(PolicyEntity.class, "policyName:scope", selectedPolicy); - workBook2 = new HSSFWorkbook(); HSSFSheet sheet = workBook2.createSheet("PolicyEntity"); HSSFRow headingRow = sheet.createRow(0); - headingRow.createCell(0).setCellValue("policyName"); + headingRow.createCell(0).setCellValue(policyName); headingRow.createCell(1).setCellValue("scope"); headingRow.createCell(2).setCellValue("version"); headingRow.createCell(3).setCellValue("policyData"); headingRow.createCell(4).setCellValue("description"); - headingRow.createCell(5).setCellValue("configurationbody"); - headingRow.createCell(6).setCellValue("configurationName"); + headingRow.createCell(5).setCellValue(configurationName); + headingRow.createCell(6).setCellValue("bodySize"); + headingRow.createCell(7).setCellValue(configurationbody); short rowNo = 1; for (Object object : entityData) { @@ -160,16 +153,36 @@ public class PolicyExportAndImportController extends RestrictedBaseController { row.createCell(4).setCellValue(policyEntity.getDescription()); if(!policyEntity.getPolicyName().contains("Decision_")){ if(policyEntity.getConfigurationData() != null){ - row.createCell(5).setCellValue(policyEntity.getConfigurationData().getConfigBody()); - row.createCell(6).setCellValue(policyEntity.getConfigurationData().getConfigurationName()); + row.createCell(5).setCellValue(policyEntity.getConfigurationData().getConfigurationName()); + String body = policyEntity.getConfigurationData().getConfigBody(); + if(policyEntity.getPolicyName().contains("Config_BRMS_Param_")){ + int index = 0; + int arraySize = 0; + while (index < body.length()) { + if(arraySize == 0){ + row.createCell(7).setCellValue(body.substring(index, Math.min(index + 30000, body.length()))); + }else{ + headingRow.createCell(7 + arraySize).setCellValue(configurationbody+arraySize); + row.createCell(7 + arraySize).setCellValue(body.substring(index, Math.min(index + 30000, body.length()))); + } + index += 30000; + arraySize += 1; + } + row.createCell(6).setCellValue(arraySize); + }else{ + row.createCell(6).setCellValue(0); + row.createCell(7).setCellValue(body); + } } if(policyEntity.getActionBodyEntity() != null){ - row.createCell(5).setCellValue(policyEntity.getActionBodyEntity().getActionBody()); - row.createCell(6).setCellValue(policyEntity.getActionBodyEntity().getActionBodyName()); + row.createCell(5).setCellValue(policyEntity.getActionBodyEntity().getActionBodyName()); + row.createCell(6).setCellValue(0); + row.createCell(7).setCellValue(policyEntity.getActionBodyEntity().getActionBody()); } }else{ row.createCell(5).setCellValue(""); - row.createCell(6).setCellValue(""); + row.createCell(6).setCellValue(0); + row.createCell(7).setCellValue(""); } rowNo++; } @@ -177,8 +190,8 @@ public class PolicyExportAndImportController extends RestrictedBaseController { String tmp = System.getProperty("catalina.base") + File.separator + "webapps" + File.separator + "temp"; String deleteCheckPath = tmp + File.separator + "PolicyExport.xls"; File deleteCheck = new File(deleteCheckPath); - if(deleteCheck.exists()){ - deleteCheck.delete(); + if(deleteCheck.exists() && deleteCheck.delete()){ + logger.info("Deleted the file from system before exporting a new file."); } File temPath = new File(tmp); if(!temPath.exists()){ @@ -216,178 +229,217 @@ public class PolicyExportAndImportController extends RestrictedBaseController { String userId = UserUtils.getUserSession(request).getOrgUserId(); UserInfo userInfo = (UserInfo) commonClassDao.getEntityItem(UserInfo.class, "userLoginId", userId); + //Check if the Role and Scope Size are Null get the values from db. List<Object> userRoles = controller.getRoles(userId); Pair<Set<String>, List<String>> pair = org.onap.policy.utils.UserUtils.checkRoleAndScope(userRoles); - roles = pair.u; - scopes = pair.t; + List<String> roles = pair.u; + Set<String> scopes = pair.t; - FileInputStream excelFile = new FileInputStream(new File(file)); - workbook = new HSSFWorkbook(excelFile); - Sheet datatypeSheet = workbook.getSheetAt(0); - Iterator<Row> rowIterator = datatypeSheet.iterator(); - - while (rowIterator.hasNext()) { - finalColumn = false; - policyEntity = new PolicyEntity(); - configurationDataEntity = new ConfigurationDataEntity(); - actionBodyEntity = new ActionBodyEntity(); - policyVersion = new PolicyVersion(); - Row currentRow = rowIterator.next(); - if (currentRow.getRowNum() == 0) { - continue; - } - Iterator<Cell> cellIterator = currentRow.cellIterator(); - while (cellIterator.hasNext()) { - Cell cell = cellIterator.next(); - if ("policyName".equalsIgnoreCase(getCellHeaderName(cell))) { - policyEntity.setPolicyName(cell.getStringCellValue()); - } - if ("scope".equalsIgnoreCase(getCellHeaderName(cell))) { - policyEntity.setScope(cell.getStringCellValue()); - } - if ("policyData".equalsIgnoreCase(getCellHeaderName(cell))) { - policyEntity.setPolicyData(cell.getStringCellValue()); - } - if ("description".equalsIgnoreCase(getCellHeaderName(cell))) { - policyEntity.setDescription(cell.getStringCellValue()); - } - if ("configurationbody".equalsIgnoreCase(getCellHeaderName(cell))) { - if(policyEntity.getPolicyName().contains("Config_")){ - configExists = true; - configurationDataEntity.setConfigBody(cell.getStringCellValue()); - }else if(policyEntity.getPolicyName().contains("Action_")){ - actionExists = true; - actionBodyEntity.setActionBody(cell.getStringCellValue()); - } - } - if ("configurationName".equalsIgnoreCase(getCellHeaderName(cell))) { - finalColumn = true; - configName = cell.getStringCellValue(); - if(policyEntity.getPolicyName().contains("Config_")){ - configurationDataEntity.setConfigurationName(cell.getStringCellValue()); - }else if(policyEntity.getPolicyName().contains("Action_")){ - actionBodyEntity.setActionBodyName(cell.getStringCellValue()); - } - } + try(FileInputStream excelFile = new FileInputStream(new File(file)); HSSFWorkbook workbook = new HSSFWorkbook(excelFile)){ + Sheet datatypeSheet = workbook.getSheetAt(0); + Iterator<Row> rowIterator = datatypeSheet.iterator(); - if(finalColumn){ - scope = policyEntity.getScope().replace(".", File.separator); - String query = "FROM PolicyEntity where policyName = :policyName and scope = :policyScope"; - SimpleBindings params = new SimpleBindings(); - params.put("policyName", policyEntity.getPolicyName()); - params.put("policyScope", policyEntity.getScope()); - List<Object> queryData = controller.getDataByQuery(query, params); - if(!queryData.isEmpty()){ - continue; + while (rowIterator.hasNext()) { + finalColumn = false; + PolicyEntity policyEntity = new PolicyEntity(); + ConfigurationDataEntity configurationDataEntity = new ConfigurationDataEntity(); + ActionBodyEntity actionBodyEntity = new ActionBodyEntity(); + PolicyVersion policyVersion = new PolicyVersion(); + Row currentRow = rowIterator.next(); + if (currentRow.getRowNum() == 0) { + continue; + } + Iterator<Cell> cellIterator = currentRow.cellIterator(); + StringBuilder body = new StringBuilder(); + int bodySize = 0; + int setBodySize = 0; + boolean configurationBodySet = false; + while (cellIterator.hasNext()) { + Cell cell = cellIterator.next(); + if (policyName.equalsIgnoreCase(getCellHeaderName(cell))) { + policyEntity.setPolicyName(cell.getStringCellValue()); + finalColumn = false; + configurationBodySet = false; + configExists = false; + actionExists = false; } - if (roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR)) { - //1. if Role contains super admin create scope. - //2. if Role contains super editor don't create new scope and add to list to show to user. - - PolicyEditorScopes policyEditorScope = (PolicyEditorScopes) commonClassDao.getEntityItem(PolicyEditorScopes.class, "scopeName", scope); - if(policyEditorScope == null){ - if(roles.contains(SUPERADMIN)){ - PolicyEditorScopes policyEditorScopeEntity = new PolicyEditorScopes(); - policyEditorScopeEntity.setScopeName(scope); - policyEditorScopeEntity.setUserCreatedBy(userInfo); - policyEditorScopeEntity.setUserModifiedBy(userInfo); - commonClassDao.save(policyEditorScopeEntity); - }else{ - //Add Error Message a new Scope Exists, contact super-admin to create a new scope - continue; + if ("scope".equalsIgnoreCase(getCellHeaderName(cell))) { + policyEntity.setScope(cell.getStringCellValue()); + } + if ("policyData".equalsIgnoreCase(getCellHeaderName(cell))) { + policyEntity.setPolicyData(cell.getStringCellValue()); + } + if ("description".equalsIgnoreCase(getCellHeaderName(cell))) { + policyEntity.setDescription(cell.getStringCellValue()); + } + if (configurationbody.equalsIgnoreCase(getCellHeaderName(cell))) { + if(policyEntity.getPolicyName().contains(config)){ + if(policyEntity.getPolicyName().contains("Config_BRMS_Param_")){ + setBodySize += 1; } - } + if(setBodySize == bodySize){ + finalColumn = true; + configurationBodySet = true; + }else if(setBodySize == 0){ + configurationBodySet = true; + } + configExists = true; + body.append(cell.getStringCellValue()); + }else if(policyEntity.getPolicyName().contains("Action_")){ + actionExists = true; + actionBodyEntity.setActionBody(cell.getStringCellValue()); + } } - if (roles.contains(ADMIN) || roles.contains(EDITOR)) { - if(scopes.isEmpty()){ - logger.error("No Scopes has been Assigned to the User. Please, Contact Super-Admin"); + if ("bodySize".equalsIgnoreCase(getCellHeaderName(cell))) { + if(cell.getNumericCellValue() < 1){ + finalColumn = true; }else{ - //1. if Role contains admin, then check if parent scope has role admin, if not don't create a scope and add to list. - if(roles.contains(ADMIN)){ - String scopeCheck = scope.substring(0, scope.lastIndexOf('.')); - if(scopes.contains(scopeCheck)){ + bodySize = (int) cell.getNumericCellValue(); + } + } + if (configurationName.equalsIgnoreCase(getCellHeaderName(cell))) { + configName = cell.getStringCellValue(); + if(policyEntity.getPolicyName().contains(config)){ + configurationDataEntity.setConfigurationName(cell.getStringCellValue()); + }else if(policyEntity.getPolicyName().contains("Action_")){ + actionBodyEntity.setActionBodyName(cell.getStringCellValue()); + } + } + + if(finalColumn && configurationBodySet){ + configurationDataEntity.setConfigBody(body.toString()); + scope = policyEntity.getScope().replace(".", File.separator); + String query = "FROM PolicyEntity where policyName = :policyName and scope = :policyScope"; + SimpleBindings params = new SimpleBindings(); + params.put(policyName, policyEntity.getPolicyName()); + params.put("policyScope", policyEntity.getScope()); + List<Object> queryData = controller.getDataByQuery(query, params); + if(!queryData.isEmpty()){ + continue; + } + if (roles.contains(superAdmin) || roles.contains(superEditor)) { + //1. if Role contains super admin create scope. + //2. if Role contains super editor don't create new scope and add to list to show to user. + + PolicyEditorScopes policyEditorScope = (PolicyEditorScopes) commonClassDao.getEntityItem(PolicyEditorScopes.class, "scopeName", scope); + if(policyEditorScope == null){ + if(roles.contains(superAdmin)){ PolicyEditorScopes policyEditorScopeEntity = new PolicyEditorScopes(); policyEditorScopeEntity.setScopeName(scope); policyEditorScopeEntity.setUserCreatedBy(userInfo); policyEditorScopeEntity.setUserModifiedBy(userInfo); commonClassDao.save(policyEditorScopeEntity); }else{ + //Add Error Message a new Scope Exists, contact super-admin to create a new scope continue; } - }else{ - continue; } } - } - - if(configExists){ - if(configName.endsWith("json")){ - configurationDataEntity.setConfigType("JSON"); - }else if(configName.endsWith("txt")){ - configurationDataEntity.setConfigType("OTHER"); - }else if(configName.endsWith("xml")){ - configurationDataEntity.setConfigType("XML"); - }else if(configName.endsWith("properties")){ - configurationDataEntity.setConfigType("PROPERTIES"); - } - configurationDataEntity.setDeleted(false); - configurationDataEntity.setCreatedBy(userId); - configurationDataEntity.setModifiedBy(userId); - commonClassDao.save(configurationDataEntity); - try(FileWriter fw = new FileWriter(PolicyController.getConfigHome() + File.separator + configName)){ - BufferedWriter bw = new BufferedWriter(fw); - bw.write(configurationDataEntity.getConfigBody()); - bw.close(); - } catch (IOException e) { - logger.error("Exception Occured While cloning the configuration file",e); + if (roles.contains(admin) || roles.contains(editor)) { + if(scopes.isEmpty()){ + logger.error("No Scopes has been Assigned to the User. Please, Contact Super-Admin"); + }else{ + //1. if Role contains admin, then check if parent scope has role admin, if not don't create a scope and add to list. + if(roles.contains(admin)){ + String scopeCheck = scope.substring(0, scope.lastIndexOf('.')); + if(scopes.contains(scopeCheck)){ + PolicyEditorScopes policyEditorScopeEntity = new PolicyEditorScopes(); + policyEditorScopeEntity.setScopeName(scope); + policyEditorScopeEntity.setUserCreatedBy(userInfo); + policyEditorScopeEntity.setUserModifiedBy(userInfo); + commonClassDao.save(policyEditorScopeEntity); + }else{ + continue; + } + }else{ + continue; + } + } + } + + if(configExists){ + if(configName.endsWith("json")){ + configurationDataEntity.setConfigType("JSON"); + }else if(configName.endsWith("txt")){ + configurationDataEntity.setConfigType("OTHER"); + }else if(configName.endsWith("xml")){ + configurationDataEntity.setConfigType("XML"); + }else if(configName.endsWith("properties")){ + configurationDataEntity.setConfigType("PROPERTIES"); + } + configurationDataEntity.setDeleted(false); + configurationDataEntity.setCreatedBy(userId); + configurationDataEntity.setModifiedBy(userId); + commonClassDao.save(configurationDataEntity); + writeConfigurationFile(configurationDataEntity); } - } - if(actionExists){ - actionBodyEntity.setDeleted(false); - actionBodyEntity.setCreatedBy(userId); - actionBodyEntity.setModifiedBy(userId); - commonClassDao.save(actionBodyEntity); - try(FileWriter fw = new FileWriter(PolicyController.getActionHome() + File.separator + actionBodyEntity.getActionBodyName())) { - BufferedWriter bw = new BufferedWriter(fw); - bw.write(actionBodyEntity.getActionBody()); - bw.close(); - } catch (IOException e) { - logger.error("Exception Occured While cloning the configuration file",e); + if(actionExists){ + actionBodyEntity.setDeleted(false); + actionBodyEntity.setCreatedBy(userId); + actionBodyEntity.setModifiedBy(userId); + commonClassDao.save(actionBodyEntity); + writeActionBodyFile(actionBodyEntity); } - } - if(configName != null){ - if(configName.contains("Config_")){ - ConfigurationDataEntity configuration = (ConfigurationDataEntity) commonClassDao.getEntityItem(ConfigurationDataEntity.class, "configurationName", configName); - policyEntity.setConfigurationData(configuration); - }else{ - ActionBodyEntity actionBody = (ActionBodyEntity) commonClassDao.getEntityItem(ActionBodyEntity.class, "actionBodyName", configName); - policyEntity.setActionBodyEntity(actionBody); + if(configName != null){ + if(configName.contains(config)){ + ConfigurationDataEntity configuration = (ConfigurationDataEntity) commonClassDao.getEntityItem(ConfigurationDataEntity.class, configurationName, configName); + policyEntity.setConfigurationData(configuration); + }else{ + ActionBodyEntity actionBody = (ActionBodyEntity) commonClassDao.getEntityItem(ActionBodyEntity.class, "actionBodyName", configName); + policyEntity.setActionBodyEntity(actionBody); + } } + policyEntity.setCreatedBy(userId); + policyEntity.setModifiedBy(userId); + policyEntity.setDeleted(false); + commonClassDao.save(policyEntity); + + policyVersion = new PolicyVersion(); + String policyName = policyEntity.getPolicyName().replace(".xml", ""); + int version = Integer.parseInt(policyName.substring(policyName.lastIndexOf('.')+1)); + policyName = policyName.substring(0, policyName.lastIndexOf('.')); + + policyVersion.setPolicyName(scope.replace(".", File.separator) + File.separator + policyName); + policyVersion.setActiveVersion(version); + policyVersion.setHigherVersion(version); + policyVersion.setCreatedBy(userId); + policyVersion.setModifiedBy(userId); + commonClassDao.save(policyVersion); + + //Notify Other paps regarding Export Policy. + PolicyRestController restController = new PolicyRestController(); + restController.notifyOtherPAPSToUpdateConfigurations("exportPolicy", configName, null); } - policyEntity.setCreatedBy(userId); - policyEntity.setModifiedBy(userId); - policyEntity.setDeleted(false); - commonClassDao.save(policyEntity); - - policyVersion = new PolicyVersion(); - String policyName = policyEntity.getPolicyName().replace(".xml", ""); - int version = Integer.parseInt(policyName.substring(policyName.lastIndexOf('.')+1)); - policyName = policyName.substring(0, policyName.lastIndexOf('.')); - - policyVersion.setPolicyName(scope.replace(".", File.separator) + File.separator + policyName); - policyVersion.setActiveVersion(version); - policyVersion.setHigherVersion(version); - policyVersion.setCreatedBy(userId); - policyVersion.setModifiedBy(userId); - commonClassDao.save(policyVersion); } } + }catch(IOException e){ + logger.error("Exception Occured While importing the Policy"+e); } return null; } + private void writeConfigurationFile(ConfigurationDataEntity configurationDataEntity){ + try(FileWriter fw = new FileWriter(PolicyController.getConfigHome() + File.separator + configurationDataEntity.getConfigurationName())){ + BufferedWriter bw = new BufferedWriter(fw); + bw.write(configurationDataEntity.getConfigBody()); + bw.close(); + } catch (IOException e) { + logger.error("Exception Occured While cloning the configuration file",e); + } + } + + private void writeActionBodyFile(ActionBodyEntity actionBodyEntity){ + try(FileWriter fw = new FileWriter(PolicyController.getActionHome() + File.separator + actionBodyEntity.getActionBodyName())) { + BufferedWriter bw = new BufferedWriter(fw); + bw.write(actionBodyEntity.getActionBody()); + bw.close(); + } catch (IOException e) { + logger.error("Exception Occured While cloning the configuration file",e); + } + } + //return the column header name value private String getCellHeaderName(Cell cell){ return cell.getSheet().getRow(0).getCell(cell.getColumnIndex()).getRichStringCellValue().toString(); } -} +}
\ No newline at end of file |