X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=POLICY-SDK-APP%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fcontroller%2FPolicyExportAndImportController.java;fp=POLICY-SDK-APP%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fcontroller%2FPolicyExportAndImportController.java;h=40056d995623262b1decbca68332e20923c3f78c;hb=695d88bd7a987a06173fc4fa13f4135916a79a86;hp=5365af18cc32423e38ff575794a5503e8eaa0834;hpb=6425d452d8507e9eeeb4da2f9f7051e602af541e;p=policy%2Fengine.git 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 selectedPolicy; - private Set scopes = null; - private List 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 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 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 userRoles = controller.getRoles(userId); Pair, List> pair = org.onap.policy.utils.UserUtils.checkRoleAndScope(userRoles); - roles = pair.u; - scopes = pair.t; + List roles = pair.u; + Set scopes = pair.t; - FileInputStream excelFile = new FileInputStream(new File(file)); - workbook = new HSSFWorkbook(excelFile); - Sheet datatypeSheet = workbook.getSheetAt(0); - Iterator 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 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 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 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 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 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