X-Git-Url: https://gerrit.onap.org/r/gitweb?p=policy%2Fengine.git;a=blobdiff_plain;f=POLICY-SDK-APP%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fcontroller%2FPolicyExportAndImportController.java;h=8f508ca3133a6f9cfb4bc36166ae9cc762839445;hp=bb6f38b8ea5ed0ab7f4cc02852abea2abfbff273;hb=1e61676b77dd09659027b8984f050df7e8538526;hpb=5458362a7dd96b54916ea3a9a7d0a63a0122e4c2 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..8f508ca31 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,14 +2,14 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 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. @@ -20,13 +20,18 @@ package org.onap.policy.controller; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; -import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; @@ -42,347 +47,731 @@ 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; import org.onap.policy.rest.dao.CommonClassDao; import org.onap.policy.rest.jpa.ActionBodyEntity; import org.onap.policy.rest.jpa.ConfigurationDataEntity; +import org.onap.policy.rest.jpa.DCAEuuid; +import org.onap.policy.rest.jpa.GroupPolicyScopeList; +import org.onap.policy.rest.jpa.MicroServiceConfigName; +import org.onap.policy.rest.jpa.MicroServiceLocation; +import org.onap.policy.rest.jpa.MicroServiceModels; import org.onap.policy.rest.jpa.PolicyEditorScopes; 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.utils.PolicyUtils; +import org.onap.policy.utils.UserUtils.Pair; import org.onap.policy.xacml.api.XACMLErrorConstants; -import org.openecomp.policy.model.Roles; -import org.openecomp.portalsdk.core.controller.RestrictedBaseController; -import org.openecomp.portalsdk.core.web.support.UserUtils; -import org.springframework.beans.factory.annotation.Autowired; +import org.onap.portalsdk.core.controller.RestrictedBaseController; +import org.onap.portalsdk.core.web.support.UserUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - - @Controller @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 Workbook workbook; - - private HSSFWorkbook workBook2; - - private PolicyController policyController; - public PolicyController getPolicyController() { - return policyController; - } - - public void setPolicyController(PolicyController policyController) { - this.policyController = policyController; - } - - public static CommonClassDao getCommonClassDao() { - return commonClassDao; - } - - public static void setCommonClassDao(CommonClassDao commonClassDao) { - PolicyExportAndImportController.commonClassDao = commonClassDao; - } - - @Autowired - private PolicyExportAndImportController(CommonClassDao commonClassDao){ - PolicyExportAndImportController.commonClassDao = commonClassDao; - } - - 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{ - try{ - String file = null; - 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 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(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"); - - short rowNo = 1; - for (Object object : entityData) { - PolicyEntity policyEntity = (PolicyEntity) object; - HSSFRow row = sheet.createRow(rowNo); - row.createCell(0).setCellValue(policyEntity.getPolicyName()); - row.createCell(1).setCellValue(policyEntity.getScope()); - row.createCell(2).setCellValue(policyEntity.getVersion()); - row.createCell(3).setCellValue(policyEntity.getPolicyData()); - 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()); - } - if(policyEntity.getActionBodyEntity() != null){ - row.createCell(5).setCellValue(policyEntity.getActionBodyEntity().getActionBody()); - row.createCell(6).setCellValue(policyEntity.getActionBodyEntity().getActionBodyName()); - } - }else{ - row.createCell(5).setCellValue(""); - row.createCell(6).setCellValue(""); - } - rowNo++; - } - - 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(); - } - File temPath = new File(tmp); - if(!temPath.exists()){ - temPath.mkdir(); - } - - file = temPath + File.separator + "PolicyExport.xls"; - File filepath = new File(file); - FileOutputStream fos = new FileOutputStream(filepath); - workBook2.write(fos); - fos.flush(); - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - - PrintWriter out = response.getWriter(); - String successMap = file.toString().substring(file.toString().lastIndexOf("webapps")+8); - String responseString = mapper.writeValueAsString(successMap); - JSONObject j = new JSONObject("{data: " + responseString + "}"); - out.write(j.toString()); - }catch(Exception e){ - logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR+"Exception Occured while Exporting Policies"+e); - } - } - - //Policy Import - public JSONObject importRepositoryFile(String file, HttpServletRequest request) throws Exception{ - boolean configExists = false; - boolean actionExists = false; - String configName = null; - String scope = null; - boolean finalColumn = false; - PolicyController controller = policyController != null ? getPolicyController() : new PolicyController(); - 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); - roles = new ArrayList<>(); - scopes = new HashSet<>(); - for(Object role: userRoles){ - Roles userRole = (Roles) role; - roles.add(userRole.getRole()); - if(userRole.getScope() != null){ - if(userRole.getScope().contains(",")){ - String[] multipleScopes = userRole.getScope().split(","); - for(int i =0; i < multipleScopes.length; i++){ - scopes.add(multipleScopes[i]); - } - }else{ - scopes.add(userRole.getScope()); - } - } - } - FileInputStream excelFile = new FileInputStream(new File(file)); - workbook = new HSSFWorkbook(excelFile); - Sheet datatypeSheet = workbook.getSheetAt(0); - Iterator rowIterator = datatypeSheet.iterator(); - - while (rowIterator.hasNext()) { - 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 (getCellHeaderName(cell).equalsIgnoreCase("policyName")) { - policyEntity.setPolicyName(cell.getStringCellValue()); - } - if (getCellHeaderName(cell).equalsIgnoreCase("scope")) { - policyEntity.setScope(cell.getStringCellValue()); - } - if (getCellHeaderName(cell).equalsIgnoreCase("policyData")) { - policyEntity.setPolicyData(cell.getStringCellValue()); - } - if (getCellHeaderName(cell).equalsIgnoreCase("description")) { - policyEntity.setDescription(cell.getStringCellValue()); - } - if (getCellHeaderName(cell).equalsIgnoreCase("configurationbody")) { - if(policyEntity.getPolicyName().contains("Config_")){ - configExists = true; - configurationDataEntity.setConfigBody(cell.getStringCellValue()); - }else if(policyEntity.getPolicyName().contains("Action_")){ - actionExists = true; - actionBodyEntity.setActionBody(cell.getStringCellValue()); - } - } - if (getCellHeaderName(cell).equalsIgnoreCase("configurationName")) { - finalColumn = true; - configName = cell.getStringCellValue(); - if(policyEntity.getPolicyName().contains("Config_")){ - configurationDataEntity.setConfigurationName(cell.getStringCellValue()); - }else if(policyEntity.getPolicyName().contains("Action_")){ - actionBodyEntity.setActionBodyName(cell.getStringCellValue()); - } - } - - 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; - } - 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 (roles.contains(ADMIN) || roles.contains(EDITOR)) { - if(scopes.isEmpty()){ - //return 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); - } - if(actionExists){ - actionBodyEntity.setDeleted(false); - actionBodyEntity.setCreatedBy(userId); - actionBodyEntity.setModifiedBy(userId); - commonClassDao.save(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); - } - } - 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); - } - } - } - return null; - } - - //return the column header name value - private String getCellHeaderName(Cell cell){ - String cellHeaderName = cell.getSheet().getRow(0).getCell(cell.getColumnIndex()).getRichStringCellValue().toString(); - return cellHeaderName; - } + + private static Logger logger = FlexLogger.getLogger(PolicyExportAndImportController.class); + + 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 static final String CONFIG_MS = "Config_MS_"; + private static final String NOTVALID = " is not valid."; + private static final String POLICY = "Policy:"; + private static final String BODYSIZE = "bodySize"; + private static final String DECISION_MS = "Decision_MS_"; + private static final String ACTION = "Action_"; + private static CommonClassDao commonClassDao; + + private PolicyController policyController; + + public PolicyController getPolicyController() { + return policyController; + } + + public void setPolicyController(PolicyController policyController) { + this.policyController = policyController; + } + + public static CommonClassDao getCommonClassDao() { + return commonClassDao; + } + + public static void setCommonClassDao(CommonClassDao commonClassDao) { + PolicyExportAndImportController.commonClassDao = commonClassDao; + } + + public PolicyExportAndImportController() { + // Empty constructor + } + + /** + * This is for downloading existing policy. + * + * @param request HttpServletRequest + * @param response HttpServletResponse + * @throws IOException error out + */ + @RequestMapping( + value = {"/policy_download/exportPolicy.htm"}, + method = {org.springframework.web.bind.annotation.RequestMethod.POST}) + public void exportPolicy(HttpServletRequest request, HttpServletResponse response) throws IOException { + try (HSSFWorkbook workBook2 = new HSSFWorkbook()) { + 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 scope = policyWithScope.substring(0, policyWithScope.lastIndexOf(File.separator)) + .replace(File.separator, "."); + String policyNamel = policyWithScope.substring(policyWithScope.lastIndexOf(File.separator) + 1); + selectedPolicy.add(policyNamel + ":" + scope); + } + + HSSFSheet sheet = workBook2.createSheet("PolicyEntity"); + HSSFRow headingRow = sheet.createRow(0); + 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(configurationName); + headingRow.createCell(6).setCellValue(BODYSIZE); + headingRow.createCell(7).setCellValue(configurationbody); + + List entityData = commonClassDao.getMultipleDataOnAddingConjunction(PolicyEntity.class, + "policyName:scope", selectedPolicy); + processEntityData(entityData, sheet, headingRow); // + 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()) { + logger.info("Deleted the file from system before exporting a new file."); + } + File temPath = new File(tmp); + if (!temPath.exists()) { + temPath.mkdir(); + } + + String file = temPath + File.separator + "PolicyExport.xls"; + File filepath = new File(file); + FileOutputStream fos = new FileOutputStream(filepath); + workBook2.write(fos); + fos.flush(); + + response.setContentType(PolicyUtils.APPLICATION_JSON); + request.setCharacterEncoding(PolicyUtils.CHARACTER_ENCODING); + + PrintWriter out = response.getWriter(); + String successMap = file.substring(file.lastIndexOf("webapps") + 8); + String responseString = mapper.writeValueAsString(successMap); + JSONObject json = new JSONObject("{data: " + responseString + "}"); + out.write(json.toString()); + } catch (Exception e) { + logger.error(XACMLErrorConstants.ERROR_SYSTEM_ERROR + "Exception Occured while Exporting Policies" + e); + } + } + + private void processEntityData(List entityData, HSSFSheet sheet, HSSFRow headingRow) { + + short rowNo = 1; + for (Object object : entityData) { + PolicyEntity policyEntity = (PolicyEntity) object; + HSSFRow row = sheet.createRow(rowNo); + row.createCell(0).setCellValue(policyEntity.getPolicyName()); + row.createCell(1).setCellValue(policyEntity.getScope()); + row.createCell(2).setCellValue(policyEntity.getVersion()); + row.createCell(3).setCellValue(policyEntity.getPolicyData()); + row.createCell(4).setCellValue(policyEntity.getDescription()); + if (policyEntity.getPolicyName().contains(DECISION_MS) + || !policyEntity.getPolicyName().contains("Decision_")) { + if (policyEntity.getConfigurationData() != null) { + row.createCell(5).setCellValue(policyEntity.getConfigurationData().getConfigurationName()); + String body = policyEntity.getConfigurationData().getConfigBody(); + row = populateConfigParam(policyEntity, row, headingRow, body); + } + populateActionBodyEntity(policyEntity, row); + } else { + row.createCell(5).setCellValue(""); + row.createCell(6).setCellValue(0); + row.createCell(7).setCellValue(""); + } + rowNo++; + } + } + + private HSSFRow populateActionBodyEntity(PolicyEntity policyEntity, HSSFRow row) { + if (policyEntity.getActionBodyEntity() != null) { + row.createCell(5).setCellValue(policyEntity.getActionBodyEntity().getActionBodyName()); + row.createCell(6).setCellValue(0); + row.createCell(7).setCellValue(policyEntity.getActionBodyEntity().getActionBody()); + } + return row; + } + + private HSSFRow populateConfigParam(PolicyEntity policyEntity, HSSFRow row, HSSFRow headingRow, String body) { + + 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); + } + return row; + } + + /** + * This is to upload a policy and save it to database. + * + * @param file String + * @param request HttpServletRequest + * @return JSONObject + * @throws IOException error out + */ + public JSONObject importRepositoryFile(String file, HttpServletRequest request) throws IOException { + boolean configExists = false; + boolean actionExists = false; + String configName = null; + boolean finalColumn; + PolicyController controller = policyController != null ? getPolicyController() : new PolicyController(); + 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); + List roles = pair.second; + Set scopes = pair.first; + + try (FileInputStream excelFile = new FileInputStream(new File(file)); + HSSFWorkbook workbook = new HSSFWorkbook(excelFile)) { + Sheet datatypeSheet = workbook.getSheetAt(0); + Iterator rowIterator = datatypeSheet.iterator(); + + while (rowIterator.hasNext()) { + finalColumn = false; + PolicyEntity policyEntity = new PolicyEntity(); + ConfigurationDataEntity configurationDataEntity = new ConfigurationDataEntity(); + ActionBodyEntity actionBodyEntity = new ActionBodyEntity(); + 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; + } + policyEntity = populatePolicyEntity(cell, policyEntity); + setBodySize = getSetBodySize(policyEntity, cell, setBodySize); + finalColumn = isFinalColumn(policyEntity, cell, setBodySize, setBodySize, finalColumn); + configurationBodySet = + isConfigurationBodySet(policyEntity, cell, setBodySize, setBodySize, configurationBodySet); + configExists = isConfigExists(policyEntity, cell, configExists); + body = addCellValue(policyEntity, cell, body); + actionExists = isActionExists(policyEntity, cell, actionExists); + actionBodyEntity = setActionBodyObject(policyEntity, actionBodyEntity, cell); + bodySize = getBobySize(bodySize, cell); // + configName = getConfigName(cell, configName); + configurationDataEntity = + populateConfigurationDataEntity(policyEntity, configurationDataEntity, cell); + actionBodyEntity = populateActionBodyObject(policyEntity, actionBodyEntity, cell); + JSONObject response = validatRequiredValue(policyEntity, body, finalColumn, configurationBodySet); + if (response != null) { + return response; + } + savePolicyEntiies(finalColumn, configurationBodySet, configurationDataEntity, policyEntity, + controller, roles, userInfo, scopes, configName, userId, configExists, actionExists, + actionBodyEntity, body); + + } + } + } 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(); + } + + /** + * This is to validate all matching required fields. + * + * @param policyName String + * @param jsonString String + * @return String + */ + public String validatMatchRequiredFields(String policyName, String jsonString) { + + try { + JSONObject jsonObject = new JSONObject(jsonString); + String configName = jsonObject.getString("configName"); + String uuid = jsonObject.getString("uuid"); + String erorMsg = validConfigName(configName); + if (erorMsg != null) { + return erorMsg; + } + erorMsg = validUuid(uuid); + if (erorMsg != null) { + return erorMsg; + } + String location = jsonObject.getString("location"); + erorMsg = validLocation(location); + if (erorMsg != null) { + return erorMsg; + } + String policyScope = jsonObject.getString("policyScope"); + erorMsg = validPolicyScope(policyScope); + if (erorMsg != null) { + return erorMsg; + } + String msVersion = jsonObject.getString("version"); + String msService = jsonObject.getString("service"); + if (!isAttributeObjectFound(msService, msVersion)) { + return POLICY + policyName + " MS Service: " + msService + " and MS Version: " + msVersion + NOTVALID; + } + + } catch (Exception e) { + logger.error("Exception Occured While validating required fields", e); + } + + return null; + } + + private JSONObject validatRequiredValue(PolicyEntity policyEntity, StringBuilder body, boolean finalColumn, + boolean configurationBodySet) { + if (finalColumn && configurationBodySet && (policyEntity.getPolicyName().contains(CONFIG_MS))) { + String errorMsg = validatMatchRequiredFields(policyEntity.getPolicyName(), body.toString()); + if (errorMsg != null) { + logger.error("errorMsg => " + errorMsg); + JSONObject response = new JSONObject(); + response.append("error", errorMsg); + return response; + } + } + return null; + } + + private String validConfigName(String configName) { + String message = null; + if (configName != null) { + List configNames = commonClassDao.getDataByColumn(MicroServiceConfigName.class, "name"); + if (configNames != null + && (!(configNames.stream().filter(o -> o.equals(configName)).findFirst().isPresent()))) { + message = POLICY + policyName + " configName: " + configName + NOTVALID; + } + } else { + message = POLICY + policyName + "configName is null"; + } + return message; + } + + private String validUuid(String uuid) { + String message = null; + if (uuid != null) { + List uuids = commonClassDao.getDataByColumn(DCAEuuid.class, "name"); + if (uuids != null && !(uuids.stream().filter(o -> o.equals(uuid)).findFirst().isPresent())) { + message = POLICY + policyName + " uuid: " + uuid + NOTVALID; + } + } else { + message = POLICY + policyName + "uuid is null"; + } + return message; + } + + private String validLocation(String location) { + String message = null; + if (location != null) { + List locations = commonClassDao.getDataByColumn(MicroServiceLocation.class, "name"); + if ((locations != null && !(locations.stream().filter(o -> o.equals(location)).findFirst().isPresent()))) { + message = POLICY + policyName + " location: " + location + NOTVALID; + } + } else { + message = POLICY + policyName + "location is null"; + } + return message; + } + + private String validPolicyScope(String policyScope) { + String message = null; + if (policyScope != null) { + List foundData = + commonClassDao.checkDuplicateEntry(policyScope, "groupList", GroupPolicyScopeList.class); + if (foundData == null || foundData.isEmpty()) { + message = POLICY + policyName + " policyScope: " + policyScope + NOTVALID; + } + } else { + message = POLICY + policyName + "policyScope is null"; + } + return message; + } + + private boolean isAttributeObjectFound(String msService, String msVersion) { + if (msService == null) { + return false; + } + + if (msVersion == null) { + return false; + } + MicroServiceModels workingModel = null; + List microServiceModelsData = + commonClassDao.getDataById(MicroServiceModels.class, "modelName", msService); + if (microServiceModelsData != null) { + for (int i = 0; i < microServiceModelsData.size(); i++) { + workingModel = (MicroServiceModels) microServiceModelsData.get(i); + if (workingModel != null && workingModel.getVersion() != null + && workingModel.getVersion().equals(msVersion)) { + return true; + } + } + } + return false; + } + + private PolicyEntity populatePolicyEntity(Cell cell, PolicyEntity policyEntityObject) { + + if (policyEntityObject == null) { + return null; + } + + PolicyEntity policyEntity = policyEntityObject; + 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()); + } + + return policyEntity; + } + + private void saveConfigurePolicy(String configName, ConfigurationDataEntity configurationDataEntity, String userId, + boolean configExists) { + 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); + } + } + + private void saveActionPolicy(ActionBodyEntity actionBodyEntity, String userId, boolean actionExists) { + if (actionExists) { + actionBodyEntity.setDeleted(false); + actionBodyEntity.setCreatedBy(userId); + actionBodyEntity.setModifiedBy(userId); + commonClassDao.save(actionBodyEntity); + writeActionBodyFile(actionBodyEntity); + } + } + + private boolean isContinue(List roles, String scope, UserInfo userInfo) { + 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 + return true; + } + } + } + return false; + } + + @SuppressWarnings("rawtypes") + private boolean isContinue(List roles, String scope, UserInfo userInfo, Set scopes) { + 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 { + return true; + } + } else { + return true; + } + } + } + return false; + } + + private boolean isContinue(List queryData, List roles, String scope, UserInfo userInfo, + Set scopes) { + if (!queryData.isEmpty()) { + return true; + } + if (isContinue(roles, scope, userInfo)) { + return true; + } + return isContinue(roles, scope, userInfo, scopes); + } + + private void savePolicyEntity(PolicyEntity policyEntity, String configName, String userId) { + if (configName != null) { + if (configName.contains(config) || configName.contains(DECISION_MS)) { + 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); + } + + private void saveVersion(PolicyEntity policyEntity, String scope, String userId) { + PolicyVersion policyVersion = new PolicyVersion(); + String policyNamel = policyEntity.getPolicyName().replace(".xml", ""); + int version = Integer.parseInt(policyNamel.substring(policyNamel.lastIndexOf('.') + 1)); + policyNamel = policyNamel.substring(0, policyNamel.lastIndexOf('.')); + + policyVersion.setPolicyName(scope.replace(".", File.separator) + File.separator + policyNamel); + policyVersion.setActiveVersion(version); + policyVersion.setHigherVersion(version); + policyVersion.setCreatedBy(userId); + policyVersion.setModifiedBy(userId); + commonClassDao.save(policyVersion); + } + + private int getSetBodySize(PolicyEntity policyEntity, Cell cell, int setBodySize) { + int setBodySizel = setBodySize; + if (configurationbody.equalsIgnoreCase(getCellHeaderName(cell)) + && ((policyEntity.getPolicyName().contains(config) + || policyEntity.getPolicyName().contains(DECISION_MS)) + && (policyEntity.getPolicyName().contains("Config_BRMS_Param_")))) { + setBodySizel += 1; + } + return setBodySizel; + } + + private boolean isFinalColumn(PolicyEntity policyEntity, Cell cell, int setBodySize, int bodySize, + boolean finalColumn) { + boolean finalColumnl = finalColumn; + if (configurationbody.equalsIgnoreCase(getCellHeaderName(cell)) + && (policyEntity.getPolicyName().contains(config) || policyEntity.getPolicyName().contains(DECISION_MS)) + && setBodySize == bodySize) { + finalColumnl = true; + } + if (BODYSIZE.equalsIgnoreCase(getCellHeaderName(cell)) && cell.getNumericCellValue() < 1) { + finalColumnl = true; + } + return finalColumnl; + } + + private boolean isConfigurationBodySet(PolicyEntity policyEntity, Cell cell, int setBodySize, int bodySize, + boolean configurationBodySet) { + boolean configurationBodySetl = configurationBodySet; + if (configurationbody.equalsIgnoreCase(getCellHeaderName(cell)) + && (policyEntity.getPolicyName().contains(config) || policyEntity.getPolicyName().contains(DECISION_MS)) + && (setBodySize == bodySize)) { + configurationBodySetl = true; + } + if (configurationbody.equalsIgnoreCase(getCellHeaderName(cell)) + && (policyEntity.getPolicyName().contains(config) || policyEntity.getPolicyName().contains(DECISION_MS)) + && (setBodySize == 0)) { + configurationBodySetl = true; + } + return configurationBodySetl; + } + + private boolean isConfigExists(PolicyEntity policyEntity, Cell cell, boolean configExists) { + boolean configExistsl = configExists; + if (configurationbody.equalsIgnoreCase(getCellHeaderName(cell)) + && (policyEntity.getPolicyName().contains(config) + || policyEntity.getPolicyName().contains(DECISION_MS))) { + configExistsl = true; + } + return configExistsl; + } + + private boolean isActionExists(PolicyEntity policyEntity, Cell cell, boolean actionExists) { + boolean actionExistsl = actionExists; + if (configurationbody.equalsIgnoreCase(getCellHeaderName(cell)) + && policyEntity.getPolicyName().contains(ACTION)) { + actionExistsl = true; + } + return actionExistsl; + } + + private int getBobySize(int bodySize, Cell cell) { + int bodySizel = bodySize; + if (BODYSIZE.equalsIgnoreCase(getCellHeaderName(cell)) && cell.getNumericCellValue() >= 1) { + bodySizel = (int) cell.getNumericCellValue(); + } + return bodySizel; + } + + private StringBuilder addCellValue(PolicyEntity policyEntity, Cell cell, StringBuilder body) { + if (configurationbody.equalsIgnoreCase(getCellHeaderName(cell)) + && (policyEntity.getPolicyName().contains(config) + || policyEntity.getPolicyName().contains(DECISION_MS))) { + body.append(cell.getStringCellValue()); + } + + return body; + } + + private ActionBodyEntity setActionBodyObject(PolicyEntity policyEntity, ActionBodyEntity actionBodyEntity, + Cell cell) { + if (configurationbody.equalsIgnoreCase(getCellHeaderName(cell)) + && (policyEntity.getPolicyName().contains(ACTION))) { + actionBodyEntity.setActionBody(cell.getStringCellValue()); + } + return actionBodyEntity; + } + + private ActionBodyEntity populateActionBodyObject(PolicyEntity policyEntity, ActionBodyEntity actionBodyEntity, + Cell cell) { + if (configurationName.equalsIgnoreCase(getCellHeaderName(cell)) + && policyEntity.getPolicyName().contains(ACTION)) { + actionBodyEntity.setActionBodyName(cell.getStringCellValue()); + } + return actionBodyEntity; + } + + private ConfigurationDataEntity populateConfigurationDataEntity(PolicyEntity policyEntity, + ConfigurationDataEntity configurationDataEntity, Cell cell) { + if (configurationName.equalsIgnoreCase(getCellHeaderName(cell)) + && (policyEntity.getPolicyName().contains(config) + || policyEntity.getPolicyName().contains(DECISION_MS))) { + configurationDataEntity.setConfigurationName(cell.getStringCellValue()); + } + return configurationDataEntity; + } + + private String getConfigName(Cell cell, String configName) { + String configNameL = configName; + if (configurationName.equalsIgnoreCase(getCellHeaderName(cell))) { + configNameL = cell.getStringCellValue(); + } + return configNameL; + } + + private void savePolicyEntiies(boolean finalColumn, boolean configurationBodySet, + ConfigurationDataEntity configurationDataEntity, PolicyEntity policyEntity, PolicyController controller, + List roles, UserInfo userInfo, Set scopes, String configName, String userId, + boolean configExists, boolean actionExists, ActionBodyEntity actionBodyEntity, StringBuilder body) { + + if (finalColumn && configurationBodySet) { + configurationDataEntity.setConfigBody(body.toString()); + String 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 (isContinue(queryData, roles, scope, userInfo, scopes)) { + return; + } + saveConfigurePolicy(configName, configurationDataEntity, userId, configExists); // + saveActionPolicy(actionBodyEntity, userId, actionExists); // + savePolicyEntity(policyEntity, configName, userId);// + saveVersion(policyEntity, scope, userId); // + // Notify Other paps regarding Export Policy. + PolicyRestController restController = new PolicyRestController(); + restController.notifyOtherPapsToUpdateConfigurations("exportPolicy", configName, null); + } + } }