X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=POLICY-SDK-APP%2Fsrc%2Fmain%2Fjava%2Forg%2Fopenecomp%2Fpolicy%2Fadmin%2FPolicyManagerServlet.java;h=639e29e3d578f3ac0d6faed9c25091a2b1bcf5ac;hb=fc5c07705edc4dcb7083b39116a43844bb6a1490;hp=6c60c58c2cab32d30f1e22e2f83d7264bf1211a1;hpb=dda032f8bb161d54eb1f59de2b4a3efb774fc4d1;p=policy%2Fengine.git diff --git a/POLICY-SDK-APP/src/main/java/org/openecomp/policy/admin/PolicyManagerServlet.java b/POLICY-SDK-APP/src/main/java/org/openecomp/policy/admin/PolicyManagerServlet.java index 6c60c58c2..639e29e3d 100644 --- a/POLICY-SDK-APP/src/main/java/org/openecomp/policy/admin/PolicyManagerServlet.java +++ b/POLICY-SDK-APP/src/main/java/org/openecomp/policy/admin/PolicyManagerServlet.java @@ -95,6 +95,15 @@ public class PolicyManagerServlet extends HttpServlet { LIST, RENAME, COPY, DELETE, EDITFILE, ADDFOLDER, DESCRIBEPOLICYFILE, VIEWPOLICY, ADDSUBSCOPE, SWITCHVERSION, EXPORT, SEARCHLIST } + private PolicyController policyController; + public PolicyController getPolicyController() { + return policyController; + } + + public void setPolicyController(PolicyController policyController) { + this.policyController = policyController; + } + private static String CONTENTTYPE = "application/json"; private static String SUPERADMIN = "super-admin"; private static String SUPEREDITOR = "super-editor"; @@ -106,6 +115,7 @@ public class PolicyManagerServlet extends HttpServlet { private static Path closedLoopJsonLocation; private static JsonArray policyNames; + private String testUserId = null; public static JsonArray getPolicyNames() { return policyNames; @@ -115,7 +125,7 @@ public class PolicyManagerServlet extends HttpServlet { PolicyManagerServlet.policyNames = policyNames; } - private static List serviceTypeNamesList = new ArrayList(); + private static List serviceTypeNamesList = new ArrayList<>(); private List policyData; public static List getServiceTypeNamesList() { @@ -139,23 +149,33 @@ public class PolicyManagerServlet extends HttpServlet { closedLoopJsonLocation = Paths.get(XACMLProperties .getProperty(XACMLRestProperties.PROP_ADMIN_CLOSEDLOOP)); FileInputStream inputStream = null; + JsonReader jsonReader = null; String location = closedLoopJsonLocation.toString(); try { inputStream = new FileInputStream(location); + if (location.endsWith("json")) { + jsonReader = Json.createReader(inputStream); + policyNames = jsonReader.readArray(); + serviceTypeNamesList = new ArrayList<>(); + for (int i = 0; i < policyNames.size(); i++) { + javax.json.JsonObject policyName = policyNames.getJsonObject(i); + String name = policyName.getJsonString("serviceTypePolicyName").getString(); + serviceTypeNamesList.add(name); + } + } } catch (FileNotFoundException e) { - e.printStackTrace(); - } - if (location.endsWith("json")) { - JsonReader jsonReader = null; - jsonReader = Json.createReader(inputStream); - policyNames = jsonReader.readArray(); - serviceTypeNamesList = new ArrayList(); - for (int i = 0; i < policyNames.size(); i++) { - javax.json.JsonObject policyName = policyNames.getJsonObject(i); - String name = policyName.getJsonString("serviceTypePolicyName").getString(); - serviceTypeNamesList.add(name); + LOGGER.error("Exception Occured while initializing the JSONConfig file"+e); + }finally{ + try { + if(inputStream != null){ + inputStream.close(); + } + if(jsonReader != null){ + jsonReader.close(); + } + } catch (IOException e) { + LOGGER.error("Exception Occured while closing the File InputStream"+e); } - jsonReader.close(); } } @@ -185,6 +205,7 @@ public class PolicyManagerServlet extends HttpServlet { out.print(responseJsonObject); out.flush(); } catch (Exception x) { + LOGGER.error("Exception Occured"+x); response.sendError(HttpStatus.SC_INTERNAL_SERVER_ERROR, x.getMessage()); } } @@ -193,7 +214,7 @@ public class PolicyManagerServlet extends HttpServlet { private void uploadFile(HttpServletRequest request, HttpServletResponse response) throws ServletException { try { String newFile; - Map files = new HashMap(); + Map files = new HashMap<>(); List items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); for (FileItem item : items) { @@ -201,9 +222,10 @@ public class PolicyManagerServlet extends HttpServlet { // Process form file field (input type="file"). files.put(item.getName(), item.getInputStream()); if(item.getName().endsWith(".xls")){ + OutputStream outputStream = null; try{ File file = new File(item.getName()); - OutputStream outputStream = new FileOutputStream(file); + outputStream = new FileOutputStream(file); IOUtils.copy(item.getInputStream(), outputStream); outputStream.close(); newFile = file.toString(); @@ -211,6 +233,10 @@ public class PolicyManagerServlet extends HttpServlet { importController.importRepositoryFile(newFile, request); }catch(Exception e){ LOGGER.error("Upload error : " + e); + }finally{ + if(outputStream != null){ + outputStream.close(); + } } } } @@ -218,7 +244,7 @@ public class PolicyManagerServlet extends HttpServlet { JSONObject responseJsonObject = null; responseJsonObject = this.success(); - response.setContentType("application/json"); + response.setContentType(CONTENTTYPE); PrintWriter out = response.getWriter(); out.print(responseJsonObject); out.flush(); @@ -286,7 +312,7 @@ public class PolicyManagerServlet extends HttpServlet { LOGGER.error(XACMLErrorConstants.ERROR_DATA_ISSUE + "Exception Occured While doing File Operation" + e); responseJsonObject = error(e.getMessage()); } - response.setContentType("application/json"); + response.setContentType(CONTENTTYPE); PrintWriter out = response.getWriter(); out.print(responseJsonObject); out.flush(); @@ -295,20 +321,20 @@ public class PolicyManagerServlet extends HttpServlet { private JSONObject searchPolicyList(JSONObject params, HttpServletRequest request) { Set scopes = null; List roles = null; - policyData = null; + policyData = new ArrayList<>(); JSONArray policyList = null; if(params.has("policyList")){ policyList = (JSONArray) params.get("policyList"); } - PolicyController controller = new PolicyController(); - List resultList = new ArrayList(); + PolicyController controller = getPolicyControllerInstance(); + List resultList = new ArrayList<>(); try { //Get the Login Id of the User from Request String userId = UserUtils.getUserSession(request).getOrgUserId(); //Check if the Role and Scope Size are Null get the values from db. - List userRoles = PolicyController.getRoles(userId); - roles = new ArrayList(); - scopes = new HashSet(); + List userRoles = controller.getRoles(userId); + roles = new ArrayList<>(); + scopes = new HashSet<>(); for(Object role: userRoles){ Roles userRole = (Roles) role; roles.add(userRole.getRole()); @@ -327,6 +353,16 @@ public class PolicyManagerServlet extends HttpServlet { if(scopes.isEmpty()){ return error("No Scopes has been Assigned to the User. Please, Contact Super-Admin"); } + Set tempScopes = scopes; + for(String scope : tempScopes){ + List scopesList = queryPolicyEditorScopes(scope); + if(!scopesList.isEmpty()){ + for(int i = 0; i < scopesList.size(); i++){ + PolicyEditorScopes tempScope = (PolicyEditorScopes) scopesList.get(i); + scopes.add(tempScope.getScopeName()); + } + } + } } if(policyList!= null){ for(int i = 0; i < policyList.length(); i++){ @@ -352,15 +388,19 @@ public class PolicyManagerServlet extends HttpServlet { } } }else{ - if (roles.contains("super-admin") || roles.contains("super-editor") || roles.contains("super-guest") ){ + if (roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR) || roles.contains(SUPERGUEST) ){ policyData = controller.getData(PolicyVersion.class); }else{ List filterdatas = controller.getData(PolicyVersion.class); for(Object filter : filterdatas){ PolicyVersion filterdata = (PolicyVersion) filter; - String scopeName = filterdata.getPolicyName().substring(0, filterdata.getPolicyName().lastIndexOf(File.separator)); - if(scopes.contains(scopeName)){ - policyData.add(filterdata); + try{ + String scopeName = filterdata.getPolicyName().substring(0, filterdata.getPolicyName().lastIndexOf(File.separator)); + if(scopes.contains(scopeName)){ + policyData.add(filterdata); + } + }catch(Exception e){ + LOGGER.error("Exception occured while filtering policyversion data"+e); } } } @@ -405,7 +445,7 @@ public class PolicyManagerServlet extends HttpServlet { } String activePolicy = null; - PolicyController controller = new PolicyController(); + PolicyController controller = getPolicyControllerInstance(); if(params.toString().contains("activeVersion")){ String activeVersion = params.getString("activeVersion"); String highestVersion = params.get("highestVersion").toString(); @@ -470,6 +510,7 @@ public class PolicyManagerServlet extends HttpServlet { path = path.replace("/", "."); }else{ path = path.replace("/", "."); + policyName = path; } if(path.contains("Config_")){ path = path.replace(".Config_", ":Config_"); @@ -478,23 +519,33 @@ public class PolicyManagerServlet extends HttpServlet { }else if(path.contains("Decision_")){ path = path.replace(".Decision_", ":Decision_"); } - PolicyController controller = new PolicyController(); + PolicyController controller = getPolicyControllerInstance(); String[] split = path.split(":"); String query = "FROM PolicyEntity where policyName = '"+split[1]+"' and scope ='"+split[0]+"'"; List queryData = controller.getDataByQuery(query); if(!queryData.isEmpty()){ PolicyEntity entity = (PolicyEntity) queryData.get(0); File temp = null; + BufferedWriter bw = null; try { temp = File.createTempFile(policyName, ".tmp"); - BufferedWriter bw = new BufferedWriter(new FileWriter(temp)); + bw = new BufferedWriter(new FileWriter(temp)); bw.write(entity.getPolicyData()); bw.close(); object = HumanPolicyComponent.DescribePolicy(temp); } catch (IOException e) { - e.printStackTrace(); + LOGGER.error("Exception Occured while Describing the Policy"+e); }finally{ - temp.delete(); + if(temp != null){ + temp.delete(); + } + if(bw != null){ + try { + bw.close(); + } catch (IOException e) { + LOGGER.error("Exception Occured while Closing the File Writer"+e); + } + } } }else{ return error("Error Occured while Describing the Policy"); @@ -508,12 +559,14 @@ public class PolicyManagerServlet extends HttpServlet { Set scopes = null; List roles = null; try { + PolicyController controller = getPolicyControllerInstance(); //Get the Login Id of the User from Request - String userId = UserUtils.getUserSession(request).getOrgUserId(); + String testUserID = getTestUserId(); + String userId = testUserID != null ? testUserID : UserUtils.getUserSession(request).getOrgUserId(); //Check if the Role and Scope Size are Null get the values from db. - List userRoles = PolicyController.getRoles(userId); - roles = new ArrayList(); - scopes = new HashSet(); + List userRoles = controller.getRoles(userId); + roles = new ArrayList<>(); + scopes = new HashSet<>(); for(Object role: userRoles){ Roles userRole = (Roles) role; roles.add(userRole.getRole()); @@ -528,20 +581,26 @@ public class PolicyManagerServlet extends HttpServlet { } } } - if (roles.contains(ADMIN) || roles.contains(EDITOR) || roles.contains(GUEST) ) { - if(scopes.isEmpty()){ - return error("No Scopes has been Assigned to the User. Please, Contact Super-Admin"); - } - } - List resultList = new ArrayList(); + List resultList = new ArrayList<>(); boolean onlyFolders = params.getBoolean("onlyFolders"); String path = params.getString("path"); if(path.contains("..xml")){ path = path.replaceAll("..xml", "").trim(); } - + if (roles.contains(ADMIN) || roles.contains(EDITOR) || roles.contains(GUEST) ) { + if(scopes.isEmpty()){ + return error("No Scopes has been Assigned to the User. Please, Contact Super-Admin"); + }else{ + if(!"/".equals(path)){ + String tempScope = path.substring(1, path.length()); + tempScope = tempScope.replace("/", File.separator); + scopes.add(tempScope); + } + } + } + if("/".equals(path)){ if(roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR) || roles.contains(SUPERGUEST)){ List scopesList = queryPolicyEditorScopes(null); @@ -562,14 +621,16 @@ public class PolicyManagerServlet extends HttpServlet { for(Object scope : scopes){ JSONObject el = new JSONObject(); List scopesList = queryPolicyEditorScopes(scope.toString()); - PolicyEditorScopes scopeById = (PolicyEditorScopes) scopesList.get(0); - el.put("name", scopeById.getScopeName()); - el.put("date", scopeById.getCreatedDate()); - el.put("size", ""); - el.put("type", "dir"); - el.put("createdBy", scopeById.getUserCreatedBy().getUserName()); - el.put("modifiedBy", scopeById.getUserModifiedBy().getUserName()); - resultList.add(el); + if(!scopesList.isEmpty()){ + PolicyEditorScopes scopeById = (PolicyEditorScopes) scopesList.get(0); + el.put("name", scopeById.getScopeName()); + el.put("date", scopeById.getCreatedDate()); + el.put("size", ""); + el.put("type", "dir"); + el.put("createdBy", scopeById.getUserCreatedBy().getUserName()); + el.put("modifiedBy", scopeById.getUserModifiedBy().getUserName()); + resultList.add(el); + } } } }else{ @@ -593,24 +654,24 @@ public class PolicyManagerServlet extends HttpServlet { if(scopeName == null){ scopeNamequery = "from PolicyEditorScopes"; }else{ - scopeNamequery = "from PolicyEditorScopes where SCOPENAME like'" +scopeName+"'"; + scopeNamequery = "from PolicyEditorScopes where SCOPENAME like'" +scopeName+"%'"; } - PolicyController controller = new PolicyController(); + PolicyController controller = getPolicyControllerInstance(); List scopesList = controller.getDataByQuery(scopeNamequery); return scopesList; } //Get Active Policy List based on Scope Selection form Policy Version table private void activePolicyList(String scopeName, List resultList, List roles, Set scopes, boolean onlyFolders){ - PolicyController controller = new PolicyController(); + PolicyController controller = getPolicyControllerInstance(); if(scopeName.contains("/")){ scopeName = scopeName.replace("/", File.separator); } if(scopeName.contains("\\")){ scopeName = scopeName.replace("\\", "\\\\\\\\"); } - String query = "from PolicyVersion where POLICY_NAME like'" +scopeName+"%'"; - String scopeNamequery = "from PolicyEditorScopes where SCOPENAME like'" +scopeName+"%'"; + String query = "from PolicyVersion where POLICY_NAME like '" +scopeName+"%'"; + String scopeNamequery = "from PolicyEditorScopes where SCOPENAME like '" +scopeName+"%'"; List activePolicies = controller.getDataByQuery(query); List scopesList = controller.getDataByQuery(scopeNamequery); for(Object list : scopesList){ @@ -677,21 +738,30 @@ public class PolicyManagerServlet extends HttpServlet { } private String getUserName(String loginId){ - PolicyController controller = new PolicyController(); + PolicyController controller = getPolicyControllerInstance(); UserInfo userInfo = (UserInfo) controller.getEntityItem(UserInfo.class, "userLoginId", loginId); + if(userInfo == null){ + return SUPERADMIN; + } return userInfo.getUserName(); } //Rename Policy private JSONObject rename(JSONObject params, HttpServletRequest request) throws ServletException { try { + boolean isActive = false; + List policyActiveInPDP = new ArrayList<>(); + Set scopeOfPolicyActiveInPDP = new HashSet<>(); String userId = UserUtils.getUserSession(request).getOrgUserId(); String oldPath = params.getString("path"); String newPath = params.getString("newPath"); oldPath = oldPath.substring(oldPath.indexOf("/")+1); newPath = newPath.substring(newPath.indexOf("/")+1); if(oldPath.endsWith(".xml")){ - policyRename(oldPath, newPath, userId); + JSONObject result = policyRename(oldPath, newPath, userId); + if(!(Boolean)(result.getJSONObject("result").get("success"))){ + return result; + } }else{ String scopeName = oldPath; String newScopeName = newPath; @@ -703,7 +773,7 @@ public class PolicyManagerServlet extends HttpServlet { scopeName = scopeName.replace("\\", "\\\\\\\\"); newScopeName = newScopeName.replace("\\", "\\\\\\\\"); } - PolicyController controller = new PolicyController(); + PolicyController controller = getPolicyControllerInstance(); String query = "from PolicyVersion where POLICY_NAME like'" +scopeName+"%'"; String scopeNamequery = "from PolicyEditorScopes where SCOPENAME like'" +scopeName+"%'"; List activePolicies = controller.getDataByQuery(query); @@ -712,18 +782,36 @@ public class PolicyManagerServlet extends HttpServlet { PolicyVersion activeVersion = (PolicyVersion) object; String policyOldPath = activeVersion.getPolicyName().replace(File.separator, "/") + "." + activeVersion.getActiveVersion() + ".xml"; String policyNewPath = policyOldPath.replace(oldPath, newPath); - policyRename(policyOldPath, policyNewPath, userId); + JSONObject result = policyRename(policyOldPath, policyNewPath, userId); + if(!(Boolean)(result.getJSONObject("result").get("success"))){ + isActive = true; + policyActiveInPDP.add(policyOldPath); + String scope = policyOldPath.substring(0, policyOldPath.lastIndexOf("/")); + scopeOfPolicyActiveInPDP.add(scope.replace("/", File.separator)); + } + } + boolean rename = false; + if(activePolicies.size() != policyActiveInPDP.size()){ + rename = true; } - for(Object object : scopesList){ - PolicyEditorScopes editorScopeEntity = (PolicyEditorScopes) object; - if(scopeName.contains("\\\\\\\\")){ - scopeName = scopeName.replace("\\\\\\\\", File.separator); - newScopeName = newScopeName.replace("\\\\\\\\", File.separator); + + UserInfo userInfo = new UserInfo(); + userInfo.setUserLoginId(userId); + if(policyActiveInPDP.size() == 0){ + renameScope(scopesList, scopeName, newScopeName, controller); + }else if(rename){ + renameScope(scopesList, scopeName, newScopeName, controller); + for(String scope : scopeOfPolicyActiveInPDP){ + PolicyEditorScopes editorScopeEntity = new PolicyEditorScopes(); + editorScopeEntity.setScopeName(scope.replace("\\", "\\\\\\\\")); + editorScopeEntity.setUserCreatedBy(userInfo); + editorScopeEntity.setUserModifiedBy(userInfo); + controller.saveData(editorScopeEntity); } - String scope = editorScopeEntity.getScopeName().replace(scopeName, newScopeName); - editorScopeEntity.setScopeName(scope); - controller.updateData(editorScopeEntity); } + if(isActive){ + return error("The Following policies rename failed. Since they are active in PDP Groups" +policyActiveInPDP); + } } return success(); } catch (Exception e) { @@ -732,11 +820,24 @@ public class PolicyManagerServlet extends HttpServlet { } } + private void renameScope(List scopesList, String scopeName, String newScopeName, PolicyController controller){ + for(Object object : scopesList){ + PolicyEditorScopes editorScopeEntity = (PolicyEditorScopes) object; + if(scopeName.contains("\\\\\\\\")){ + scopeName = scopeName.replace("\\\\\\\\", File.separator); + newScopeName = newScopeName.replace("\\\\\\\\", File.separator); + } + String scope = editorScopeEntity.getScopeName().replace(scopeName, newScopeName); + editorScopeEntity.setScopeName(scope); + controller.updateData(editorScopeEntity); + } + } + private JSONObject policyRename(String oldPath, String newPath, String userId) throws ServletException { try { PolicyEntity entity = null; - PolicyController controller = new PolicyController(); - + PolicyController controller = getPolicyControllerInstance(); + String policyVersionName = newPath.replace(".xml", ""); String policyName = policyVersionName.substring(0, policyVersionName.lastIndexOf(".")).replace("/", File.separator); @@ -764,49 +865,42 @@ public class PolicyManagerServlet extends HttpServlet { oldPolicyCheck = oldPolicyCheck.replace(".Decision_", ":Decision_"); } String[] oldPolicySplit = oldPolicyCheck.split(":"); - + //Check PolicyEntity table with newPolicy Name String policyEntityquery = "FROM PolicyEntity where policyName = '"+newPolicySplit[1]+"' and scope ='"+newPolicySplit[0]+"'"; - System.out.println(policyEntityquery); List queryData = controller.getDataByQuery(policyEntityquery); if(!queryData.isEmpty()){ entity = (PolicyEntity) queryData.get(0); + return error("Policy rename failed. Since, the policy with same name already exists."); } - - if(entity != null){ - //if a policy exists with new name check if it is deleted or not - if(entity.isDeleted()){ - //Check Policy Group Entity table if policy has been pushed or not - String query = "from PolicyGroupEntity where policyid = '"+entity.getPolicyId()+"'"; - List object = controller.getDataByQuery(query); - if(object.isEmpty()){ - //if PolicyGroupEntity data is empty delete the entry from database - controller.deleteData(entity); - //Query the Policy Entity with oldPolicy Name - String oldpolicyEntityquery = "FROM PolicyEntity where policyName = '"+oldPolicySplit[1]+"' and scope ='"+oldPolicySplit[0]+"'"; - System.out.println(oldpolicyEntityquery); - List oldEntityData = controller.getDataByQuery(oldpolicyEntityquery); - if(!oldEntityData.isEmpty()){ - entity = (PolicyEntity) oldEntityData.get(0); - } - checkOldPolicyEntryAndUpdate(entity, newPolicySplit[0], newPolicySplit[1], oldPolicySplit[0], oldPolicySplit[1], policyName, newpolicyName, oldpolicyName, userId); + + //Query the Policy Entity with oldPolicy Name + String policyEntityCheck = oldPolicySplit[1].substring(0, oldPolicySplit[1].indexOf(".")); + String oldpolicyEntityquery = "FROM PolicyEntity where policyName like '"+policyEntityCheck+"%' and scope ='"+oldPolicySplit[0]+"'"; + List oldEntityData = controller.getDataByQuery(oldpolicyEntityquery); + if(!oldEntityData.isEmpty()){ + String groupQuery = "FROM PolicyGroupEntity where ("; + for(int i=0; i oldEntityData = controller.getDataByQuery(oldpolicyEntityquery); - if(!oldEntityData.isEmpty()){ - entity = (PolicyEntity) oldEntityData.get(0); + groupQuery = groupQuery + ")"; + List groupEntityData = controller.getDataByQuery(groupQuery); + if(groupEntityData.size() > 0){ + return error("Policy rename failed. Since the policy or its version is active in PDP Groups."); + } + for(int i=0; i object = controller.getDataByQuery(query); - if(object.isEmpty()){ - String oldPolicyNameWithoutExtension = removeoldPolicyExtension; - String newPolicyNameWithoutExtension = removenewPolicyExtension; - if(removeoldPolicyExtension.endsWith(".xml")){ - oldPolicyNameWithoutExtension = oldPolicyNameWithoutExtension.substring(0, oldPolicyNameWithoutExtension.indexOf(".")); - newPolicyNameWithoutExtension = newPolicyNameWithoutExtension.substring(0, newPolicyNameWithoutExtension.indexOf(".")); - } - entity.setPolicyName(entity.getPolicyName().replace(removeoldPolicyExtension, removenewPolicyExtension)); - entity.setPolicyData(entity.getPolicyData().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension)); - entity.setScope(newScope); - entity.setModifiedBy(userId); - String oldConfigRemoveExtension = removeoldPolicyExtension.replace(".xml", ""); - String newConfigRemoveExtension = removenewPolicyExtension.replace(".xml", ""); - if(newpolicyName.contains("Config_")){ - configEntity.setConfigurationName(configEntity.getConfigurationName().replace(oldScope +"."+oldConfigRemoveExtension, newScope+"."+newConfigRemoveExtension)); - controller.updateData(configEntity); - }else if(newpolicyName.contains("Action_")){ - actionEntity.setActionBody(actionEntity.getActionBody().replace(oldScope +"."+oldConfigRemoveExtension, newScope+"."+newConfigRemoveExtension)); - controller.updateData(actionEntity); - } - controller.updateData(entity); - }else{ - //Mark as Deleted in PolicyEntiy table - entity.setDeleted(true); - controller.updateData(entity); - //Mark as Deleted in ConfigurationDataEntity table - configEntity.setDeleted(true); - controller.updateData(configEntity); - //Mark as Deleted in ActionDataEntity table - actionEntity.setDeleted(true); - controller.updateData(actionEntity); - //Clone New Copy - cloneRecord(newpolicyName, oldScope, removeoldPolicyExtension, newScope, removenewPolicyExtension, entity, userId); - } + ConfigurationDataEntity configEntity = entity.getConfigurationData(); + ActionBodyEntity actionEntity = entity.getActionBodyEntity(); + PolicyController controller = getPolicyControllerInstance(); - PolicyVersion versionEntity = (PolicyVersion) controller.getEntityItem(PolicyVersion.class, "policyName", oldpolicyName); - versionEntity.setPolicyName(policyName); - versionEntity.setModifiedBy(userId); - controller.updateData(versionEntity); - String movePolicyCheck = policyName.substring(policyName.lastIndexOf(File.separator)+1); - String moveOldPolicyCheck = oldpolicyName.substring(oldpolicyName.lastIndexOf(File.separator)+1); - if(movePolicyCheck.equals(moveOldPolicyCheck)){ - controller.watchPolicyFunction(versionEntity, oldpolicyName, "Move"); - }else{ - controller.watchPolicyFunction(versionEntity, oldpolicyName, "Rename"); + String oldPolicyNameWithoutExtension = removeoldPolicyExtension; + String newPolicyNameWithoutExtension = removenewPolicyExtension; + if(removeoldPolicyExtension.endsWith(".xml")){ + oldPolicyNameWithoutExtension = oldPolicyNameWithoutExtension.substring(0, oldPolicyNameWithoutExtension.indexOf(".")); + newPolicyNameWithoutExtension = newPolicyNameWithoutExtension.substring(0, newPolicyNameWithoutExtension.indexOf(".")); + } + entity.setPolicyName(entity.getPolicyName().replace(oldPolicyNameWithoutExtension, newPolicyNameWithoutExtension)); + entity.setPolicyData(entity.getPolicyData().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension)); + entity.setScope(newScope); + entity.setModifiedBy(userId); + if(newpolicyName.contains("Config_")){ + String oldConfigurationName = configEntity.getConfigurationName(); + configEntity.setConfigurationName(configEntity.getConfigurationName().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension)); + controller.updateData(configEntity); + String 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(); + actionEntity.setActionBody(actionEntity.getActionBody().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension)); + controller.updateData(actionEntity); + String newConfigurationName = actionEntity.getActionBodyName(); + File file = new File(PolicyController.getActionHome() + File.separator + oldConfigurationName); + if(file.exists()){ + File renamefile = new File(PolicyController.getActionHome() + File.separator + newConfigurationName); + file.renameTo(renamefile); + } + } + controller.updateData(entity); + + PolicyVersion versionEntity = (PolicyVersion) controller.getEntityItem(PolicyVersion.class, "policyName", oldpolicyName); + versionEntity.setPolicyName(policyName); + versionEntity.setModifiedBy(userId); + controller.updateData(versionEntity); + String movePolicyCheck = policyName.substring(policyName.lastIndexOf(File.separator)+1); + String moveOldPolicyCheck = oldpolicyName.substring(oldpolicyName.lastIndexOf(File.separator)+1); + if(movePolicyCheck.equals(moveOldPolicyCheck)){ + controller.watchPolicyFunction(versionEntity, oldpolicyName, "Move"); + }else{ + controller.watchPolicyFunction(versionEntity, oldpolicyName, "Rename"); } return success(); } catch (Exception e) { - e.printStackTrace(); + LOGGER.error("Exception Occured"+e); return error(e.getMessage()); } } private JSONObject cloneRecord(String newpolicyName, String oldScope, String removeoldPolicyExtension, String newScope, String removenewPolicyExtension, PolicyEntity entity, String userId) throws ServletException{ + FileWriter fw = null; String queryEntityName = null; - PolicyController controller = new PolicyController(); + PolicyController controller = getPolicyControllerInstance(); PolicyEntity cloneEntity = new PolicyEntity(); cloneEntity.setPolicyName(newpolicyName); removeoldPolicyExtension = removeoldPolicyExtension.replace(".xml", ""); @@ -903,6 +990,15 @@ public class PolicyManagerServlet extends HttpServlet { controller.saveData(configurationDataEntity); ConfigurationDataEntity configEntiy = (ConfigurationDataEntity) controller.getEntityItem(ConfigurationDataEntity.class, "configurationName", queryEntityName); cloneEntity.setConfigurationData(configEntiy); + String newConfigurationName = configEntiy.getConfigurationName(); + try { + fw = new FileWriter(PolicyController.getConfigHome() + File.separator + newConfigurationName); + BufferedWriter bw = new BufferedWriter(fw); + bw.write(configEntiy.getConfigBody()); + bw.close(); + } catch (IOException e) { + LOGGER.error("Exception Occured While cloning the configuration file"+e); + } }else if(newpolicyName.contains("Action_")){ ActionBodyEntity actionBodyEntity = new ActionBodyEntity(); actionBodyEntity.setActionBodyName(entity.getActionBodyEntity().getActionBodyName().replace(oldScope+"."+oldConfigRemoveExtension, newScope+"."+newConfigRemoveExtension)); @@ -914,6 +1010,22 @@ 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 { + fw = new FileWriter(PolicyController.getActionHome() + File.separator + newConfigurationName); + BufferedWriter bw = new BufferedWriter(fw); + bw.write(actionEntiy.getActionBody()); + bw.close(); + } catch (IOException e) { + LOGGER.error("Exception Occured While cloning the configuration file"+e); + } + } + if(fw != null){ + try { + fw.close(); + } catch (IOException e) { + LOGGER.error("Exception Occured While closing the File input stream"+e); + } } cloneEntity.setDeleted(entity.isDeleted()); cloneEntity.setCreatedBy(userId); @@ -960,57 +1072,29 @@ public class PolicyManagerServlet extends HttpServlet { } String[] oldPolicySplit = oldPolicyCheck.split(":"); - PolicyController controller = new PolicyController(); + PolicyController controller = getPolicyControllerInstance(); PolicyEntity entity = null; boolean success = false; //Check PolicyEntity table with newPolicy Name String policyEntityquery = "FROM PolicyEntity where policyName = '"+newPolicySplit[1]+"' and scope ='"+newPolicySplit[0]+"'"; - System.out.println(policyEntityquery); List queryData = controller.getDataByQuery(policyEntityquery); + if(!queryData.isEmpty()){ + return error("Policy already exists with same name"); + } + + //Query the Policy Entity with oldPolicy Name + policyEntityquery = "FROM PolicyEntity where policyName = '"+oldPolicySplit[1]+"' and scope ='"+oldPolicySplit[0]+"'"; + queryData = controller.getDataByQuery(policyEntityquery); if(!queryData.isEmpty()){ entity = (PolicyEntity) queryData.get(0); } if(entity != null){ - //if a policy exists with new name check if it is deleted or not - if(entity.isDeleted()){ - //Check Policy Group Entity table if policy has been pushed or not - String query = "from PolicyGroupEntity where policyid = '"+entity.getPolicyId()+"'"; - List object = controller.getDataByQuery(query); - if(object == null){ - //if PolicyGroupEntity data is empty delete the entry from database - controller.deleteData(entity); - //Query the Policy Entity with oldPolicy Name - policyEntityquery = "FROM PolicyEntity where policyName = '"+oldPolicySplit[1]+"' and scope ='"+oldPolicySplit[0]+"'"; - System.out.println(policyEntityquery); - queryData = controller.getDataByQuery(policyEntityquery); - if(!queryData.isEmpty()){ - entity = (PolicyEntity) queryData.get(0); - } - if(entity != null){ - cloneRecord(newPolicySplit[1], oldPolicySplit[0], oldPolicySplit[1], newPolicySplit[0], newPolicySplit[1], entity, userId); - success = true; - } - }else{ - return error("Policy Clone failed due to policy with new name existing in PDP Group."); - } - }else{ - return error("Policy Clone failed due to same name existing."); - } - }else{ - //Query the Policy Entity with oldPolicy Name - policyEntityquery = "FROM PolicyEntity where policyName = '"+oldPolicySplit[1]+"' and scope ='"+oldPolicySplit[0]+"'"; - System.out.println(policyEntityquery); - queryData = controller.getDataByQuery(policyEntityquery); - if(!queryData.isEmpty()){ - entity = (PolicyEntity) queryData.get(0); - } - if(entity != null){ - cloneRecord(newPolicySplit[1], oldPolicySplit[0], oldPolicySplit[1], newPolicySplit[0], newPolicySplit[1], entity, userId); - success = true; - } + cloneRecord(newPolicySplit[1], oldPolicySplit[0], oldPolicySplit[1], newPolicySplit[0], newPolicySplit[1], entity, userId); + success = true; } + if(success){ PolicyVersion entityItem = new PolicyVersion(); entityItem.setActiveVersion(Integer.parseInt(version)); @@ -1021,7 +1105,7 @@ public class PolicyManagerServlet extends HttpServlet { controller.saveData(entityItem); } - LOGGER.debug("copy from: {} to: {}" + oldPath +newPath); + LOGGER.debug("copy from: {} to: {}" + oldPath +newPath); return success(); } catch (Exception e) { @@ -1032,7 +1116,7 @@ public class PolicyManagerServlet extends HttpServlet { //Delete Policy or Scope Functionality private JSONObject delete(JSONObject params, HttpServletRequest request) throws ServletException { - PolicyController controller = new PolicyController(); + PolicyController controller = getPolicyControllerInstance(); PolicyRestController restController = new PolicyRestController(); PolicyEntity policyEntity = null; String policyNamewithoutExtension; @@ -1225,6 +1309,9 @@ public class PolicyManagerServlet extends HttpServlet { String policyScopeQuery = "delete PolicyEditorScopes where SCOPENAME like '"+path.replace("\\", "\\\\")+"%' and id >0"; controller.executeQuery(policyScopeQuery); } + }else{ + String policyScopeQuery = "delete PolicyEditorScopes where SCOPENAME like '"+path.replace("\\", "\\\\")+"%' and id >0"; + controller.executeQuery(policyScopeQuery); } } return success(); @@ -1238,7 +1325,7 @@ public class PolicyManagerServlet extends HttpServlet { private JSONObject editFile(JSONObject params) throws ServletException { // get content try { - PolicyController controller = new PolicyController(); + PolicyController controller = getPolicyControllerInstance(); String mode = params.getString("mode"); String path = params.getString("path"); LOGGER.debug("editFile path: {}"+ path); @@ -1299,7 +1386,7 @@ public class PolicyManagerServlet extends HttpServlet { //Add Scopes private JSONObject addFolder(JSONObject params, HttpServletRequest request) throws ServletException { - PolicyController controller = new PolicyController(); + PolicyController controller = getPolicyControllerInstance(); String name = ""; try { String userId = UserUtils.getUserSession(request).getOrgUserId(); @@ -1330,18 +1417,15 @@ public class PolicyManagerServlet extends HttpServlet { } LOGGER.debug("addFolder path: {} name: {}" + path +name); if(!name.equals("")){ + if(name.startsWith(File.separator)){ + name = name.substring(1); + } PolicyEditorScopes entity = (PolicyEditorScopes) controller.getEntityItem(PolicyEditorScopes.class, "scopeName", name); if(entity == null){ UserInfo userInfo = new UserInfo(); userInfo.setUserLoginId(userId); PolicyEditorScopes newScope = new PolicyEditorScopes(); - String scopeName = null; - if(name.startsWith(File.separator)){ - scopeName = name.substring(1); - }else{ - scopeName = name; - } - newScope.setScopeName(scopeName); + newScope.setScopeName(name); newScope.setUserCreatedBy(userInfo); newScope.setUserModifiedBy(userInfo); controller.saveData(newScope); @@ -1379,4 +1463,16 @@ public class PolicyManagerServlet extends HttpServlet { throw new ServletException(e); } } -} + + private PolicyController getPolicyControllerInstance(){ + return policyController != null ? getPolicyController() : new PolicyController(); + } + + public String getTestUserId() { + return testUserId; + } + + public void setTestUserId(String testUserId) { + this.testUserId = testUserId; + } +} \ No newline at end of file