diff options
author | rb7147 <rb7147@att.com> | 2018-02-06 09:07:12 -0500 |
---|---|---|
committer | rb7147 <rb7147@att.com> | 2018-02-06 10:33:49 -0500 |
commit | 695d88bd7a987a06173fc4fa13f4135916a79a86 (patch) | |
tree | 60ee9acba76fd3e4333e72bfde2e342313e62dd5 | |
parent | 6425d452d8507e9eeeb4da2f9f7051e602af541e (diff) |
Policy Resiliency Code Fixes
Resolved the issue on updating the configuration files when
rename/clone/export/move actions are done through GUI.
Fixed the PolicyManagerServlet code.
Added test cases for newly added files.
Issue-ID: POLICY-609
Change-Id: I9d14f19fe20bbc0e3b3844f85d81f26e34bb26ec
Signed-off-by: rb7147 <rb7147@att.com>
8 files changed, 773 insertions, 204 deletions
diff --git a/ONAP-PAP-REST/pom.xml b/ONAP-PAP-REST/pom.xml index 760229448..f0e3f334f 100644 --- a/ONAP-PAP-REST/pom.xml +++ b/ONAP-PAP-REST/pom.xml @@ -3,7 +3,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. @@ -332,7 +332,19 @@ <artifactId>tomcat-dbcp</artifactId> <version>8.5.9</version> </dependency> - + <!-- https://mvnrepository.com/artifact/org.powermock/powermock-api-mockito --> + <dependency> + <groupId>org.powermock</groupId> + <artifactId>powermock-api-mockito</artifactId> + <version>1.7.3</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.powermock</groupId> + <artifactId>powermock-module-junit4</artifactId> + <version>1.7.3</version> + <scope>test</scope> + </dependency> </dependencies> <properties> <springframework.version>4.2.0.RELEASE</springframework.version> diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/UpdateOthersPAPS.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/UpdateOthersPAPS.java new file mode 100644 index 000000000..c1891b352 --- /dev/null +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/UpdateOthersPAPS.java @@ -0,0 +1,240 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP-PAP-REST + * ================================================================================ + * Copyright (C) 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. + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.policy.pap.xacml.rest; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Base64; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.json.JSONObject; +import org.onap.policy.common.logging.flexlogger.FlexLogger; +import org.onap.policy.common.logging.flexlogger.Logger; +import org.onap.policy.pap.xacml.rest.adapters.UpdateObjectData; +import org.onap.policy.pap.xacml.rest.components.Policy; +import org.onap.policy.pap.xacml.rest.util.JsonMessage; +import org.onap.policy.rest.XACMLRestProperties; +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.PolicyDBDaoEntity; +import org.onap.policy.utils.CryptoUtils; +import org.onap.policy.xacml.api.XACMLErrorConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.RestTemplate; + +import com.fasterxml.jackson.databind.ObjectMapper; + +@Controller +public class UpdateOthersPAPS { + + private static final Logger policyLogger = FlexLogger.getLogger(UpdateOthersPAPS.class); + + private static CommonClassDao commonClassDao; + + private static final String contentType = "application/json"; + private static String configType =".Config_"; + private static String actionType =".Action_"; + private static String error ="error"; + public static CommonClassDao getCommonClassDao() { + return commonClassDao; + } + + public static void setCommonClassDao(CommonClassDao commonClassDao) { + UpdateOthersPAPS.commonClassDao = commonClassDao; + } + + @Autowired + private UpdateOthersPAPS(CommonClassDao commonClassDao){ + UpdateOthersPAPS.commonClassDao = commonClassDao; + } + + public UpdateOthersPAPS() { + //Empty Constructor + } + + @RequestMapping(value="/notifyOtherPAPs", method= RequestMethod.POST) + public void notifyOthersPAPsToUpdateConfigurations(HttpServletRequest request, HttpServletResponse response){ + Map<String, Object> model = new HashMap<>(); + ObjectMapper mapper = new ObjectMapper(); + UpdateObjectData body = new UpdateObjectData(); + body.setAction(request.getParameter("action")); + body.setNewPolicyName(request.getParameter("newPolicyName")); + body.setOldPolicyName(request.getParameter("oldPolicyName")); + + String currentPap = XACMLRestProperties.getProperty("xacml.rest.pap.url"); + List<Object> getPAPUrls = commonClassDao.getData(PolicyDBDaoEntity.class); + if(getPAPUrls != null && !getPAPUrls.isEmpty()){ + for(int i = 0; i < getPAPUrls.size(); i++){ + PolicyDBDaoEntity papId = (PolicyDBDaoEntity) getPAPUrls.get(i); + String papUrl = papId.getPolicyDBDaoUrl(); + if(!papUrl.equals(currentPap)){ + String userName = papId.getUsername(); + String password = papId.getPassword(); + Base64.Encoder encoder = Base64.getEncoder(); + String txt; + try{ + txt = new String(CryptoUtils.decryptTxt(password), StandardCharsets.UTF_8); + } catch(Exception e){ + policyLogger.debug(e); + //if we can't decrypt, might as well try it anyway + txt = password; + } + String encoding = encoder.encodeToString((userName+":"+txt).getBytes(StandardCharsets.UTF_8)); + HttpHeaders headers = new HttpHeaders(); + headers.set("Authorization", "Basic " + encoding); + headers.set("Content-Type", contentType); + + RestTemplate restTemplate = new RestTemplate(); + HttpEntity<?> requestEntity = new HttpEntity<>(body, headers); + HttpClientErrorException exception = null; + + try{ + restTemplate.exchange(papUrl + "onap/updateConfiguration", HttpMethod.POST, requestEntity, String.class); + }catch(Exception e){ + policyLogger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while connecting to " + papUrl, e); + exception = new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage()); + if("409 Conflict".equals(e.getMessage())){ + policyLogger.error(e.getMessage()); + response.addHeader(error, e.getMessage()); + } + } + if(exception != null && exception.getStatusCode()!=null){ + String message; + if(exception.getStatusCode().equals(HttpStatus.UNAUTHORIZED)){ + message = XACMLErrorConstants.ERROR_PERMISSIONS +":"+exception.getStatusCode()+":" + "ERROR_AUTH_GET_PERM" ; + policyLogger.error(message); + }else if(exception.getStatusCode().equals(HttpStatus.BAD_REQUEST)){ + message = XACMLErrorConstants.ERROR_DATA_ISSUE + ":"+exception.getStatusCode()+":" + exception.getResponseBodyAsString(); + policyLogger.error(message); + }else if(exception.getStatusCode().equals(HttpStatus.NOT_FOUND)){ + message = XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while connecting to " + papUrl + exception; + policyLogger.error(message); + }else{ + message = XACMLErrorConstants.ERROR_PROCESS_FLOW + ":"+exception.getStatusCode()+":" + exception.getResponseBodyAsString(); + policyLogger.error(message); + } + model.put(papUrl, message); + }else{ + model.put(papUrl, "Success"); + } + } + } + JsonMessage msg; + try { + msg = new JsonMessage(mapper.writeValueAsString(model)); + JSONObject j = new JSONObject(msg); + response.getWriter().write(j.toString()); + } catch (Exception e) { + policyLogger.error("Exception Occured"+e); + } + } + } + + @RequestMapping(value="/updateConfiguration", method= RequestMethod.POST) + @ResponseBody + public void updateConfiguration(@RequestBody UpdateObjectData data, HttpServletResponse response){ + String action = data.getAction(); + String newPolicyName = data.getNewPolicyName(); + String oldPolicyName = data.getOldPolicyName(); + try{ + if("rename".equals(action)){ + if(oldPolicyName.contains(configType) || oldPolicyName.contains(actionType)){ + File file; + if(oldPolicyName.contains(configType)){ + file = new File(Policy.getConfigHome() + File.separator + oldPolicyName); + }else{ + file = new File(Policy.getActionHome() + File.separator + oldPolicyName); + } + if(file.exists()){ + File renamefile; + if(oldPolicyName.contains(configType)){ + renamefile = new File(Policy.getConfigHome() + File.separator + newPolicyName); + }else{ + renamefile = new File(Policy.getActionHome() + File.separator + newPolicyName); + } + if(file.renameTo(renamefile)){ + policyLogger.info("Policy has been renamed Successfully"+newPolicyName); + response.addHeader("rename", "Success"); + }else{ + response.addHeader("rename", "Failure"); + } + } + } + }else if("delete".equals(action)){ + if(oldPolicyName.contains(configType)){ + Files.deleteIfExists(Paths.get(Policy.getConfigHome() + File.separator + oldPolicyName)); + }else if(oldPolicyName.contains("Action_")){ + Files.deleteIfExists(Paths.get(Policy.getActionHome() + File.separator + oldPolicyName)); + } + }else if("clonePolicy".equals(action) || "exportPolicy".equals(action)){ + if(newPolicyName.contains(configType)){ + ConfigurationDataEntity configEntiy = (ConfigurationDataEntity) commonClassDao.getEntityItem(ConfigurationDataEntity.class, "configurationName", newPolicyName); + saveConfigurationData(configEntiy, newPolicyName); + }else if(newPolicyName.contains(actionType)){ + ActionBodyEntity actionEntiy = (ActionBodyEntity) commonClassDao.getEntityItem(ActionBodyEntity.class, "actionBodyName", newPolicyName); + saveActionBodyData(actionEntiy, newPolicyName); + } + } + } catch (IOException e) { + policyLogger.error("Exception Occured While updating Configuration"+e); + } + } + + private void saveConfigurationData(ConfigurationDataEntity configEntiy, String newPolicyName){ + try(FileWriter fw = new FileWriter(Policy.getConfigHome() + File.separator + newPolicyName)){ + BufferedWriter bw = new BufferedWriter(fw); + bw.write(configEntiy.getConfigBody()); + bw.close(); + }catch (IOException e) { + policyLogger.error("Exception Occured While closing the File input stream"+e); + } + } + + private void saveActionBodyData(ActionBodyEntity actionEntiy , String newPolicyName){ + try(FileWriter fw = new FileWriter(Policy.getActionHome() + File.separator + newPolicyName)){ + BufferedWriter bw = new BufferedWriter(fw); + bw.write(actionEntiy.getActionBody()); + bw.close(); + }catch (IOException e) { + policyLogger.error("Exception Occured While closing the File input stream"+e); + } + } +}
\ No newline at end of file diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/adapters/UpdateObjectData.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/adapters/UpdateObjectData.java new file mode 100644 index 000000000..04006f320 --- /dev/null +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/adapters/UpdateObjectData.java @@ -0,0 +1,50 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP-PAP-REST + * ================================================================================ + * Copyright (C) 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. + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.policy.pap.xacml.rest.adapters; + +public class UpdateObjectData { + private String oldPolicyName; + private String newPolicyName; + private String action; + + public String getOldPolicyName() { + return oldPolicyName; + } + + public void setOldPolicyName(String oldPolicyName) { + this.oldPolicyName = oldPolicyName; + } + + public String getNewPolicyName() { + return newPolicyName; + } + + public void setNewPolicyName(String newPolicyName) { + this.newPolicyName = newPolicyName; + } + + public String getAction() { + return action; + } + + public void setAction(String action) { + this.action = action; + } +} diff --git a/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/test/UpdateOthersPAPSTest.java b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/test/UpdateOthersPAPSTest.java new file mode 100644 index 000000000..f9ed0ac70 --- /dev/null +++ b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/test/UpdateOthersPAPSTest.java @@ -0,0 +1,116 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP-PAP-REST + * ================================================================================ + * Copyright (C) 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. + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.policy.pap.test; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import org.json.JSONObject; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Matchers; +import org.mockito.Mockito; +import org.onap.policy.common.logging.flexlogger.FlexLogger; +import org.onap.policy.common.logging.flexlogger.Logger; +import org.onap.policy.pap.xacml.rest.UpdateOthersPAPS; +import org.onap.policy.pap.xacml.rest.adapters.UpdateObjectData; +import org.onap.policy.pap.xacml.rest.components.Policy; +import org.onap.policy.rest.dao.CommonClassDao; +import org.onap.policy.rest.jpa.PolicyDBDaoEntity; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.springframework.mock.web.MockHttpServletResponse; + +@RunWith(PowerMockRunner.class) +public class UpdateOthersPAPSTest { + + private static Logger logger = FlexLogger.getLogger(UpdateOthersPAPSTest.class); + private static CommonClassDao commonClassDao; + private HttpServletRequest request; + private MockHttpServletResponse response; + + @Before + public void setUp() throws Exception { + logger.info("setUp: Entering"); + commonClassDao = mock(CommonClassDao.class); + + request = mock(HttpServletRequest.class); + response = new MockHttpServletResponse(); + List<Object> data = new ArrayList<>(); + PolicyDBDaoEntity entity = new PolicyDBDaoEntity(); + entity.setPolicyDBDaoUrl("http://localhost:8070/pap"); + entity.setUsername("test"); + entity.setPassword("test"); + + PolicyDBDaoEntity entity1 = new PolicyDBDaoEntity(); + entity1.setPolicyDBDaoUrl("http://localhost:8071/pap"); + entity1.setUsername("test"); + entity1.setPassword("test"); + + data.add(entity); + data.add(entity1); + System.setProperty("xacml.rest.pap.url","http://localhost:8070/pap"); + when(commonClassDao.getData(PolicyDBDaoEntity.class)).thenReturn(data); + } + + @Test + public void testNotifyOthersPAPsToUpdateConfigurations(){ + UpdateOthersPAPS updateOtherPaps = new UpdateOthersPAPS(); + UpdateOthersPAPS.setCommonClassDao(commonClassDao); + when(request.getParameter("action")).thenReturn("rename"); + when(request.getParameter("newPolicyName")).thenReturn("com.Config_newTest.1.json"); + when(request.getParameter("oldPolicyName")).thenReturn("com.Config_Test.1.json"); + updateOtherPaps.notifyOthersPAPsToUpdateConfigurations(request, response); + try { + JSONObject responseString = new JSONObject(response.getContentAsString()); + assertTrue(responseString.get("data").toString().contains("http://localhost:8071/pap")); + } catch (Exception e) { + fail(); + } + } + + @PrepareForTest({Policy.class}) + @Test + public void testUpdateConfiguration() throws Exception{ + UpdateOthersPAPS updateOtherPaps = new UpdateOthersPAPS(); + UpdateObjectData data = new UpdateObjectData(); + PowerMockito.mockStatic(Policy.class); + data.setNewPolicyName("com.Config_newTest.1.json"); + data.setOldPolicyName("com.Config_Test.1.json"); + data.setAction("rename"); + when(Policy.getConfigHome()).thenReturn("test"); + when(Policy.getActionHome()).thenReturn("test"); + File mockedFile = Mockito.mock(File.class); + Mockito.when(mockedFile.exists()).thenReturn(true); + PowerMockito.whenNew(File.class).withParameterTypes(String.class).withArguments(Matchers.anyString()).thenReturn(mockedFile); + updateOtherPaps.updateConfiguration(data, response); + assertTrue(response.getStatus() == 200); + } +} diff --git a/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/adapters/UpdateObjectDataTest.java b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/adapters/UpdateObjectDataTest.java new file mode 100644 index 000000000..2c1bc1c53 --- /dev/null +++ b/ONAP-PAP-REST/src/test/java/org/onap/policy/pap/xacml/rest/adapters/UpdateObjectDataTest.java @@ -0,0 +1,39 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP Policy Engine + * ================================================================================ + * Copyright (C) 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. + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.policy.pap.xacml.rest.adapters; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +public class UpdateObjectDataTest { + + @Test + public void testClosedLoopFaultTrapDatas(){ + UpdateObjectData updateObject = new UpdateObjectData(); + updateObject.setAction("Rename"); + assertTrue("Rename".equals(updateObject.getAction())); + updateObject.setNewPolicyName("com.Config_test1.1.json"); + assertTrue("com.Config_test1.1.json".equals(updateObject.getNewPolicyName())); + updateObject.setOldPolicyName("com.Config_test.1.json"); + assertTrue("com.Config_test.1.json".equals(updateObject.getOldPolicyName())); + } + +} diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyManagerServlet.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyManagerServlet.java index 16a8ff7a9..9498529af 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyManagerServlet.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyManagerServlet.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -653,7 +653,7 @@ public class PolicyManagerServlet extends HttpServlet { scopeName = scopeName.replace("/", File.separator); } if(scopeName.contains("\\")){ - scopeName = scopeName.replace("\\", "\\\\\\\\"); + scopeName = scopeName.replace("\\", "\\\\"); } String query = "from PolicyVersion where POLICY_NAME like :scopeName"; String scopeNamequery = "from PolicyEditorScopes where SCOPENAME like :scopeName"; @@ -751,7 +751,14 @@ public class PolicyManagerServlet extends HttpServlet { String newPath = params.getString("newPath"); oldPath = oldPath.substring(oldPath.indexOf('/')+1); newPath = newPath.substring(newPath.indexOf('/')+1); + String checkValidation = null; if(oldPath.endsWith(".xml")){ + checkValidation = newPath.replace(".xml", ""); + checkValidation = checkValidation.substring(checkValidation.indexOf('_') + 1, checkValidation.lastIndexOf(".")); + checkValidation = checkValidation.substring(checkValidation.lastIndexOf("/")+1); + if(!PolicyUtils.policySpecialCharValidator(checkValidation).contains("success")){ + return error("Policy Rename Failed. The Name contains special characters."); + } JSONObject result = policyRename(oldPath, newPath, userId); if(!(Boolean)(result.getJSONObject("result").get("success"))){ return result; @@ -763,10 +770,14 @@ public class PolicyManagerServlet extends HttpServlet { scopeName = scopeName.replace("/", File.separator); newScopeName = newScopeName.replace("/", File.separator); } - if(scopeName.contains("\\")){ - scopeName = scopeName.replace("\\", "\\\\\\\\"); - newScopeName = newScopeName.replace("\\", "\\\\\\\\"); - } + checkValidation = newScopeName.substring(newScopeName.lastIndexOf(File.separator)+1); + if(scopeName.contains("\\")){ + scopeName = scopeName.replace("\\", "\\\\\\\\"); + newScopeName = newScopeName.replace("\\", "\\\\\\\\"); + } + if(!PolicyUtils.policySpecialCharValidator(checkValidation).contains("success")){ + return error("Scope Rename Failed. The Name contains special characters."); + } PolicyController controller = getPolicyControllerInstance(); String query = "from PolicyVersion where POLICY_NAME like :scopeName"; String scopeNamequery = "from PolicyEditorScopes where SCOPENAME like :scopeName"; @@ -901,7 +912,12 @@ public class PolicyManagerServlet extends HttpServlet { } for(int i=0; i<oldEntityData.size(); i++){ entity = (PolicyEntity) oldEntityData.get(i); - checkOldPolicyEntryAndUpdate(entity, newPolicySplit[0] , newPolicySplit[1], oldPolicySplit[0], oldPolicySplit[1], policyName, newpolicyName, oldpolicyName, userId); + String checkEntityName = entity.getPolicyName().replace(".xml", ""); + checkEntityName = checkEntityName.substring(0, checkEntityName.lastIndexOf('.')); + String originalPolicyName = oldpolicyName.substring(oldpolicyName.lastIndexOf(File.separator)+1); + if(checkEntityName.equals(originalPolicyName)){ + checkOldPolicyEntryAndUpdate(entity, newPolicySplit[0] , newPolicySplit[1], oldPolicySplit[0], oldPolicySplit[1], policyName, newpolicyName, oldpolicyName, userId); + } } }else{ return error("Policy rename failed due to policy not able to retrieve from database. Please, contact super-admin."); @@ -931,21 +947,24 @@ public class PolicyManagerServlet extends HttpServlet { entity.setPolicyData(entity.getPolicyData().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension)); entity.setScope(newScope); entity.setModifiedBy(userId); + + String oldConfigurationName = null; + String newConfigurationName = null; if(newpolicyName.contains("Config_")){ - String oldConfigurationName = configEntity.getConfigurationName(); + oldConfigurationName = configEntity.getConfigurationName(); configEntity.setConfigurationName(configEntity.getConfigurationName().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension)); controller.updateData(configEntity); - String newConfigurationName = configEntity.getConfigurationName(); + newConfigurationName = configEntity.getConfigurationName(); File file = new File(PolicyController.getConfigHome() + File.separator + oldConfigurationName); if(file.exists()){ File renamefile = new File(PolicyController.getConfigHome() + File.separator + newConfigurationName); file.renameTo(renamefile); } }else if(newpolicyName.contains("Action_")){ - String oldConfigurationName = actionEntity.getActionBodyName(); + oldConfigurationName = actionEntity.getActionBodyName(); actionEntity.setActionBody(actionEntity.getActionBody().replace(oldScope +"."+oldPolicyNameWithoutExtension, newScope+"."+newPolicyNameWithoutExtension)); controller.updateData(actionEntity); - String newConfigurationName = actionEntity.getActionBodyName(); + newConfigurationName = actionEntity.getActionBodyName(); File file = new File(PolicyController.getActionHome() + File.separator + oldConfigurationName); if(file.exists()){ File renamefile = new File(PolicyController.getActionHome() + File.separator + newConfigurationName); @@ -954,6 +973,8 @@ public class PolicyManagerServlet extends HttpServlet { } controller.updateData(entity); + PolicyRestController restController = new PolicyRestController(); + restController.notifyOtherPAPSToUpdateConfigurations("rename", newConfigurationName, oldConfigurationName); PolicyVersion versionEntity = (PolicyVersion) controller.getEntityItem(PolicyVersion.class, "policyName", oldpolicyName); versionEntity.setPolicyName(policyName); versionEntity.setModifiedBy(userId); @@ -972,18 +993,20 @@ public class PolicyManagerServlet extends HttpServlet { } } - private JSONObject cloneRecord(String newpolicyName, String oldScope, String inRemoveoldPolicyExtension, String newScope, String removenewPolicyExtension, PolicyEntity entity, String userId) throws ServletException{ + private JSONObject cloneRecord(String newpolicyName, String oldScope, String inRemoveoldPolicyExtension, String newScope, String inRemovenewPolicyExtension, PolicyEntity entity, String userId) throws ServletException{ String queryEntityName; PolicyController controller = getPolicyControllerInstance(); PolicyEntity cloneEntity = new PolicyEntity(); cloneEntity.setPolicyName(newpolicyName); String removeoldPolicyExtension = inRemoveoldPolicyExtension; + String removenewPolicyExtension = inRemovenewPolicyExtension; removeoldPolicyExtension = removeoldPolicyExtension.replace(".xml", ""); removenewPolicyExtension = removenewPolicyExtension.replace(".xml", ""); cloneEntity.setPolicyData(entity.getPolicyData().replace(oldScope+"."+removeoldPolicyExtension, newScope+"."+removenewPolicyExtension)); cloneEntity.setScope(entity.getScope()); String oldConfigRemoveExtension = removeoldPolicyExtension.replace(".xml", ""); String newConfigRemoveExtension = removenewPolicyExtension.replace(".xml", ""); + String newConfigurationName = null; if(newpolicyName.contains("Config_")){ ConfigurationDataEntity configurationDataEntity = new ConfigurationDataEntity(); configurationDataEntity.setConfigurationName(entity.getConfigurationData().getConfigurationName().replace(oldScope+"."+oldConfigRemoveExtension, newScope+"."+newConfigRemoveExtension)); @@ -996,7 +1019,7 @@ public class PolicyManagerServlet extends HttpServlet { controller.saveData(configurationDataEntity); ConfigurationDataEntity configEntiy = (ConfigurationDataEntity) controller.getEntityItem(ConfigurationDataEntity.class, "configurationName", queryEntityName); cloneEntity.setConfigurationData(configEntiy); - String newConfigurationName = configEntiy.getConfigurationName(); + newConfigurationName = configEntiy.getConfigurationName(); try (FileWriter fw = new FileWriter(PolicyController.getConfigHome() + File.separator + newConfigurationName); BufferedWriter bw = new BufferedWriter(fw)){ bw.write(configEntiy.getConfigBody()); @@ -1014,19 +1037,23 @@ public class PolicyManagerServlet extends HttpServlet { controller.saveData(actionBodyEntity); ActionBodyEntity actionEntiy = (ActionBodyEntity) controller.getEntityItem(ActionBodyEntity.class, "actionBodyName", queryEntityName); cloneEntity.setActionBodyEntity(actionEntiy); - String newConfigurationName = actionEntiy.getActionBodyName(); - try (FileWriter fw = new FileWriter(PolicyController.getActionHome() + File.separator + newConfigurationName); - BufferedWriter bw = new BufferedWriter(fw)){ - bw.write(actionEntiy.getActionBody()); - } catch (IOException e) { + newConfigurationName = actionEntiy.getActionBodyName(); + try (FileWriter fw = new FileWriter(PolicyController.getActionHome() + File.separator + newConfigurationName); + BufferedWriter bw = new BufferedWriter(fw)){ + bw.write(actionEntiy.getActionBody()); + } catch (IOException e) { LOGGER.error("Exception Occured While cloning the configuration file"+e); } } + cloneEntity.setDeleted(entity.isDeleted()); cloneEntity.setCreatedBy(userId); cloneEntity.setModifiedBy(userId); controller.saveData(cloneEntity); + //Notify others paps regarding clone policy. + PolicyRestController restController = new PolicyRestController(); + restController.notifyOtherPAPSToUpdateConfigurations("clonePolicy", newConfigurationName, null); return success(); } @@ -1055,8 +1082,17 @@ public class PolicyManagerServlet extends HttpServlet { }else if(newPolicyCheck.contains("Decision_")){ newPolicyCheck = newPolicyCheck.replace(".Decision_", ":Decision_"); } + if(!newPolicyCheck.contains(":")){ + return error("Policy Clone Failed. The Name contains special characters."); + } String[] newPolicySplit = newPolicyCheck.split(":"); + String checkValidation = newPolicySplit[1].replace(".xml", ""); + checkValidation = checkValidation.substring(checkValidation.indexOf('_') + 1, checkValidation.lastIndexOf(".")); + if(!PolicyUtils.policySpecialCharValidator(checkValidation).contains("success")){ + return error("Policy Clone Failed. The Name contains special characters."); + } + String oldPolicyCheck = orignalPolicyName; if(oldPolicyCheck.contains("Config_")){ oldPolicyCheck = oldPolicyCheck.replace(".Config_", ":Config_"); @@ -1182,9 +1218,11 @@ public class PolicyManagerServlet extends HttpServlet { if(policyNamewithoutExtension.contains("Config_")){ Files.deleteIfExists(Paths.get(PolicyController.getConfigHome() + File.separator + policyEntity.getConfigurationData().getConfigurationName())); controller.deleteData(policyEntity.getConfigurationData()); + restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getConfigurationData().getConfigurationName()); }else if(policyNamewithoutExtension.contains("Action_")){ Files.deleteIfExists(Paths.get(PolicyController.getActionHome() + File.separator + policyEntity.getActionBodyEntity().getActionBodyName())); controller.deleteData(policyEntity.getActionBodyEntity()); + restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getActionBodyEntity().getActionBodyName()); } } } @@ -1237,9 +1275,11 @@ public class PolicyManagerServlet extends HttpServlet { if(policyNamewithoutExtension.contains("Config_")){ Files.deleteIfExists(Paths.get(PolicyController.getConfigHome() + File.separator + policyEntity.getConfigurationData().getConfigurationName())); controller.deleteData(policyEntity.getConfigurationData()); + restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getConfigurationData().getConfigurationName()); }else if(policyNamewithoutExtension.contains("Action_")){ Files.deleteIfExists(Paths.get(PolicyController.getActionHome() + File.separator + policyEntity.getActionBodyEntity().getActionBodyName())); controller.deleteData(policyEntity.getActionBodyEntity()); + restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getActionBodyEntity().getActionBodyName()); } if(version > 1){ @@ -1262,7 +1302,12 @@ public class PolicyManagerServlet extends HttpServlet { entity.setModifiedBy(userId); controller.watchPolicyFunction(entity, policyNamewithExtension, "DeleteOne"); - String updatequery = "update PolicyVersion set active_version='"+highestVersion+"' , highest_version='"+highestVersion+"' where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"'"; + String updatequery = ""; + if(highestVersion != 0){ + updatequery = "update PolicyVersion set active_version='"+highestVersion+"' , highest_version='"+highestVersion+"' where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"'"; + }else{ + updatequery = "delete from PolicyVersion where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"' and id >0"; + } controller.executeQuery(updatequery); }else{ String policyVersionQuery = "delete from PolicyVersion where policy_name ='" +policyNamewithoutExtension.replace("\\", "\\\\")+"' and id >0"; @@ -1297,9 +1342,11 @@ public class PolicyManagerServlet extends HttpServlet { if(policyNamewithoutExtension.contains("Config_")){ Files.deleteIfExists(Paths.get(PolicyController.getConfigHome() + File.separator + policyEntity.getConfigurationData().getConfigurationName())); controller.deleteData(policyEntity.getConfigurationData()); + restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getConfigurationData().getConfigurationName()); }else if(policyNamewithoutExtension.contains("Action_")){ Files.deleteIfExists(Paths.get(PolicyController.getActionHome() + File.separator + policyEntity.getActionBodyEntity().getActionBodyName())); controller.deleteData(policyEntity.getActionBodyEntity()); + restController.notifyOtherPAPSToUpdateConfigurations("delete", null, policyEntity.getActionBodyEntity().getActionBodyName()); } } } diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java index 63d0cb298..507f19820 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/admin/PolicyRestController.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -384,7 +384,7 @@ public class PolicyRestController extends RestrictedBaseController{ } @RequestMapping(value={"/saveDictionary/*/*"}, method={RequestMethod.POST}) - public ModelAndView saveDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException{ + public void saveDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException{ String userId = ""; String uri = request.getRequestURI().replace("/saveDictionary", ""); if(uri.startsWith("/")){ @@ -401,12 +401,15 @@ public class PolicyRestController extends RestrictedBaseController{ policyLogger.info("***********************************************************************************************************************************"); String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim()); - response.getWriter().write(body); - return null; + if(body != null && !body.isEmpty()){ + response.getWriter().write(body); + }else{ + response.getWriter().write("Failed"); + } } @RequestMapping(value={"/deleteDictionary/*/*"}, method={RequestMethod.POST}) - public ModelAndView deletetDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException { + public void deletetDictionaryController(HttpServletRequest request, HttpServletResponse response) throws IOException { String uri = request.getRequestURI().replace("/deleteDictionary", ""); if(uri.startsWith("/")){ uri = uri.substring(uri.indexOf('/')+1); @@ -419,8 +422,11 @@ public class PolicyRestController extends RestrictedBaseController{ policyLogger.info("*************************************************************************************************************************************"); String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim()); - response.getWriter().write(body); - return null; + if(body != null && !body.isEmpty()){ + response.getWriter().write(body); + }else{ + response.getWriter().write("Failed"); + } } @RequestMapping(value={"/searchDictionary"}, method={RequestMethod.POST}) @@ -471,7 +477,9 @@ public class PolicyRestController extends RestrictedBaseController{ resultList = json.get("policyresult"); }catch(Exception e){ List<String> data = new ArrayList<>(); - data.add("Elastic Search Server is down"); + resultList = json.get("data"); + data.add("Exception"); + data.add(resultList.toString()); resultList = data; policyLogger.error("Exception Occured while searching for Policy in Elastic Database" +e); } @@ -490,5 +498,10 @@ public class PolicyRestController extends RestrictedBaseController{ String uri = "searchPolicy?action=delete&policyName='"+fileName+"'"; callPAP(null, "POST", uri.trim()); } + + public String notifyOtherPAPSToUpdateConfigurations(String mode, String newName, String oldName){ + String uri = "onap/notifyOtherPAPs?action="+mode+"&newPolicyName="+newName+"&oldPolicyName="+oldName+""; + return callPAP(null, "POST", uri.trim()); + } } diff --git a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyExportAndImportController.java b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyExportAndImportController.java index 5365af18c..40056d995 100644 --- a/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyExportAndImportController.java +++ b/POLICY-SDK-APP/src/main/java/org/onap/policy/controller/PolicyExportAndImportController.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP Policy Engine * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -44,8 +44,8 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; import org.json.JSONObject; +import org.onap.policy.admin.PolicyRestController; import org.onap.policy.common.logging.flexlogger.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; import org.onap.policy.rest.adapter.PolicyExportAdapter; @@ -73,25 +73,18 @@ import com.fasterxml.jackson.databind.ObjectMapper; @RequestMapping("/") public class PolicyExportAndImportController extends RestrictedBaseController { private static Logger logger = FlexLogger.getLogger(PolicyExportAndImportController.class); - - private ArrayList<String> selectedPolicy; - private Set<String> scopes = null; - private List<String> roles = null; - private static String SUPERADMIN = "super-admin"; - private static String SUPEREDITOR = "super-editor"; - private static String ADMIN = "admin"; - private static String EDITOR = "editor"; - - private static CommonClassDao commonClassDao; - private PolicyEntity policyEntity; - private ConfigurationDataEntity configurationDataEntity; - private ActionBodyEntity actionBodyEntity; - private PolicyVersion policyVersion; + private static String superAdmin = "super-admin"; + private static String superEditor = "super-editor"; + private static String admin = "admin"; + private static String editor = "editor"; + private static String policyName = "policyName"; + private static String configurationName = "configurationName"; + private static String configurationbody = "configurationbody"; + private static String config = "Config_"; - private Workbook workbook; + private static CommonClassDao commonClassDao; - private HSSFWorkbook workBook2; private PolicyController policyController; public PolicyController getPolicyController() { @@ -121,33 +114,33 @@ public class PolicyExportAndImportController extends RestrictedBaseController { @RequestMapping(value={"/policy_download/exportPolicy.htm"}, method={org.springframework.web.bind.annotation.RequestMethod.POST}) public void exportPolicy(HttpServletRequest request, HttpServletResponse response) throws IOException{ - try{ + try(HSSFWorkbook workBook2 = new HSSFWorkbook()){ String file; - selectedPolicy = new ArrayList<>(); + ArrayList<String> selectedPolicy = new ArrayList<>(); ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); JsonNode root = mapper.readTree(request.getReader()); PolicyExportAdapter adapter = mapper.readValue(root.get("exportData").toString(), PolicyExportAdapter.class); for (Object policyId : adapter.getPolicyDatas()) { LinkedHashMap<?, ?> selected = (LinkedHashMap<?, ?>)policyId; - String policyWithScope = selected.get("policyName").toString() + "." + selected.get("activeVersion").toString() + ".xml"; + String policyWithScope = selected.get(policyName).toString() + "." + selected.get("activeVersion").toString() + ".xml"; String scope = policyWithScope.substring(0 , policyWithScope.lastIndexOf(File.separator)).replace(File.separator, "."); String policyName = policyWithScope.substring(policyWithScope.lastIndexOf(File.separator)+1); selectedPolicy.add(policyName+":"+scope); } List<Object> entityData = commonClassDao.getMultipleDataOnAddingConjunction(PolicyEntity.class, "policyName:scope", selectedPolicy); - workBook2 = new HSSFWorkbook(); HSSFSheet sheet = workBook2.createSheet("PolicyEntity"); HSSFRow headingRow = sheet.createRow(0); - headingRow.createCell(0).setCellValue("policyName"); + headingRow.createCell(0).setCellValue(policyName); headingRow.createCell(1).setCellValue("scope"); headingRow.createCell(2).setCellValue("version"); headingRow.createCell(3).setCellValue("policyData"); headingRow.createCell(4).setCellValue("description"); - headingRow.createCell(5).setCellValue("configurationbody"); - headingRow.createCell(6).setCellValue("configurationName"); + headingRow.createCell(5).setCellValue(configurationName); + headingRow.createCell(6).setCellValue("bodySize"); + headingRow.createCell(7).setCellValue(configurationbody); short rowNo = 1; for (Object object : entityData) { @@ -160,16 +153,36 @@ public class PolicyExportAndImportController extends RestrictedBaseController { row.createCell(4).setCellValue(policyEntity.getDescription()); if(!policyEntity.getPolicyName().contains("Decision_")){ if(policyEntity.getConfigurationData() != null){ - row.createCell(5).setCellValue(policyEntity.getConfigurationData().getConfigBody()); - row.createCell(6).setCellValue(policyEntity.getConfigurationData().getConfigurationName()); + row.createCell(5).setCellValue(policyEntity.getConfigurationData().getConfigurationName()); + String body = policyEntity.getConfigurationData().getConfigBody(); + if(policyEntity.getPolicyName().contains("Config_BRMS_Param_")){ + int index = 0; + int arraySize = 0; + while (index < body.length()) { + if(arraySize == 0){ + row.createCell(7).setCellValue(body.substring(index, Math.min(index + 30000, body.length()))); + }else{ + headingRow.createCell(7 + arraySize).setCellValue(configurationbody+arraySize); + row.createCell(7 + arraySize).setCellValue(body.substring(index, Math.min(index + 30000, body.length()))); + } + index += 30000; + arraySize += 1; + } + row.createCell(6).setCellValue(arraySize); + }else{ + row.createCell(6).setCellValue(0); + row.createCell(7).setCellValue(body); + } } if(policyEntity.getActionBodyEntity() != null){ - row.createCell(5).setCellValue(policyEntity.getActionBodyEntity().getActionBody()); - row.createCell(6).setCellValue(policyEntity.getActionBodyEntity().getActionBodyName()); + row.createCell(5).setCellValue(policyEntity.getActionBodyEntity().getActionBodyName()); + row.createCell(6).setCellValue(0); + row.createCell(7).setCellValue(policyEntity.getActionBodyEntity().getActionBody()); } }else{ row.createCell(5).setCellValue(""); - row.createCell(6).setCellValue(""); + row.createCell(6).setCellValue(0); + row.createCell(7).setCellValue(""); } rowNo++; } @@ -177,8 +190,8 @@ public class PolicyExportAndImportController extends RestrictedBaseController { String tmp = System.getProperty("catalina.base") + File.separator + "webapps" + File.separator + "temp"; String deleteCheckPath = tmp + File.separator + "PolicyExport.xls"; File deleteCheck = new File(deleteCheckPath); - if(deleteCheck.exists()){ - deleteCheck.delete(); + if(deleteCheck.exists() && deleteCheck.delete()){ + logger.info("Deleted the file from system before exporting a new file."); } File temPath = new File(tmp); if(!temPath.exists()){ @@ -216,178 +229,217 @@ public class PolicyExportAndImportController extends RestrictedBaseController { String userId = UserUtils.getUserSession(request).getOrgUserId(); UserInfo userInfo = (UserInfo) commonClassDao.getEntityItem(UserInfo.class, "userLoginId", userId); + //Check if the Role and Scope Size are Null get the values from db. List<Object> userRoles = controller.getRoles(userId); Pair<Set<String>, List<String>> pair = org.onap.policy.utils.UserUtils.checkRoleAndScope(userRoles); - roles = pair.u; - scopes = pair.t; + List<String> roles = pair.u; + Set<String> scopes = pair.t; - FileInputStream excelFile = new FileInputStream(new File(file)); - workbook = new HSSFWorkbook(excelFile); - Sheet datatypeSheet = workbook.getSheetAt(0); - Iterator<Row> rowIterator = datatypeSheet.iterator(); - - while (rowIterator.hasNext()) { - finalColumn = false; - policyEntity = new PolicyEntity(); - configurationDataEntity = new ConfigurationDataEntity(); - actionBodyEntity = new ActionBodyEntity(); - policyVersion = new PolicyVersion(); - Row currentRow = rowIterator.next(); - if (currentRow.getRowNum() == 0) { - continue; - } - Iterator<Cell> cellIterator = currentRow.cellIterator(); - while (cellIterator.hasNext()) { - Cell cell = cellIterator.next(); - if ("policyName".equalsIgnoreCase(getCellHeaderName(cell))) { - policyEntity.setPolicyName(cell.getStringCellValue()); - } - if ("scope".equalsIgnoreCase(getCellHeaderName(cell))) { - policyEntity.setScope(cell.getStringCellValue()); - } - if ("policyData".equalsIgnoreCase(getCellHeaderName(cell))) { - policyEntity.setPolicyData(cell.getStringCellValue()); - } - if ("description".equalsIgnoreCase(getCellHeaderName(cell))) { - policyEntity.setDescription(cell.getStringCellValue()); - } - if ("configurationbody".equalsIgnoreCase(getCellHeaderName(cell))) { - if(policyEntity.getPolicyName().contains("Config_")){ - configExists = true; - configurationDataEntity.setConfigBody(cell.getStringCellValue()); - }else if(policyEntity.getPolicyName().contains("Action_")){ - actionExists = true; - actionBodyEntity.setActionBody(cell.getStringCellValue()); - } - } - if ("configurationName".equalsIgnoreCase(getCellHeaderName(cell))) { - finalColumn = true; - configName = cell.getStringCellValue(); - if(policyEntity.getPolicyName().contains("Config_")){ - configurationDataEntity.setConfigurationName(cell.getStringCellValue()); - }else if(policyEntity.getPolicyName().contains("Action_")){ - actionBodyEntity.setActionBodyName(cell.getStringCellValue()); - } - } + try(FileInputStream excelFile = new FileInputStream(new File(file)); HSSFWorkbook workbook = new HSSFWorkbook(excelFile)){ + Sheet datatypeSheet = workbook.getSheetAt(0); + Iterator<Row> rowIterator = datatypeSheet.iterator(); - if(finalColumn){ - scope = policyEntity.getScope().replace(".", File.separator); - String query = "FROM PolicyEntity where policyName = :policyName and scope = :policyScope"; - SimpleBindings params = new SimpleBindings(); - params.put("policyName", policyEntity.getPolicyName()); - params.put("policyScope", policyEntity.getScope()); - List<Object> queryData = controller.getDataByQuery(query, params); - if(!queryData.isEmpty()){ - continue; + while (rowIterator.hasNext()) { + finalColumn = false; + PolicyEntity policyEntity = new PolicyEntity(); + ConfigurationDataEntity configurationDataEntity = new ConfigurationDataEntity(); + ActionBodyEntity actionBodyEntity = new ActionBodyEntity(); + PolicyVersion policyVersion = new PolicyVersion(); + Row currentRow = rowIterator.next(); + if (currentRow.getRowNum() == 0) { + continue; + } + Iterator<Cell> cellIterator = currentRow.cellIterator(); + StringBuilder body = new StringBuilder(); + int bodySize = 0; + int setBodySize = 0; + boolean configurationBodySet = false; + while (cellIterator.hasNext()) { + Cell cell = cellIterator.next(); + if (policyName.equalsIgnoreCase(getCellHeaderName(cell))) { + policyEntity.setPolicyName(cell.getStringCellValue()); + finalColumn = false; + configurationBodySet = false; + configExists = false; + actionExists = false; } - if (roles.contains(SUPERADMIN) || roles.contains(SUPEREDITOR)) { - //1. if Role contains super admin create scope. - //2. if Role contains super editor don't create new scope and add to list to show to user. - - PolicyEditorScopes policyEditorScope = (PolicyEditorScopes) commonClassDao.getEntityItem(PolicyEditorScopes.class, "scopeName", scope); - if(policyEditorScope == null){ - if(roles.contains(SUPERADMIN)){ - PolicyEditorScopes policyEditorScopeEntity = new PolicyEditorScopes(); - policyEditorScopeEntity.setScopeName(scope); - policyEditorScopeEntity.setUserCreatedBy(userInfo); - policyEditorScopeEntity.setUserModifiedBy(userInfo); - commonClassDao.save(policyEditorScopeEntity); - }else{ - //Add Error Message a new Scope Exists, contact super-admin to create a new scope - continue; + if ("scope".equalsIgnoreCase(getCellHeaderName(cell))) { + policyEntity.setScope(cell.getStringCellValue()); + } + if ("policyData".equalsIgnoreCase(getCellHeaderName(cell))) { + policyEntity.setPolicyData(cell.getStringCellValue()); + } + if ("description".equalsIgnoreCase(getCellHeaderName(cell))) { + policyEntity.setDescription(cell.getStringCellValue()); + } + if (configurationbody.equalsIgnoreCase(getCellHeaderName(cell))) { + if(policyEntity.getPolicyName().contains(config)){ + if(policyEntity.getPolicyName().contains("Config_BRMS_Param_")){ + setBodySize += 1; } - } + if(setBodySize == bodySize){ + finalColumn = true; + configurationBodySet = true; + }else if(setBodySize == 0){ + configurationBodySet = true; + } + configExists = true; + body.append(cell.getStringCellValue()); + }else if(policyEntity.getPolicyName().contains("Action_")){ + actionExists = true; + actionBodyEntity.setActionBody(cell.getStringCellValue()); + } } - if (roles.contains(ADMIN) || roles.contains(EDITOR)) { - if(scopes.isEmpty()){ - logger.error("No Scopes has been Assigned to the User. Please, Contact Super-Admin"); + if ("bodySize".equalsIgnoreCase(getCellHeaderName(cell))) { + if(cell.getNumericCellValue() < 1){ + finalColumn = true; }else{ - //1. if Role contains admin, then check if parent scope has role admin, if not don't create a scope and add to list. - if(roles.contains(ADMIN)){ - String scopeCheck = scope.substring(0, scope.lastIndexOf('.')); - if(scopes.contains(scopeCheck)){ + bodySize = (int) cell.getNumericCellValue(); + } + } + if (configurationName.equalsIgnoreCase(getCellHeaderName(cell))) { + configName = cell.getStringCellValue(); + if(policyEntity.getPolicyName().contains(config)){ + configurationDataEntity.setConfigurationName(cell.getStringCellValue()); + }else if(policyEntity.getPolicyName().contains("Action_")){ + actionBodyEntity.setActionBodyName(cell.getStringCellValue()); + } + } + + if(finalColumn && configurationBodySet){ + configurationDataEntity.setConfigBody(body.toString()); + scope = policyEntity.getScope().replace(".", File.separator); + String query = "FROM PolicyEntity where policyName = :policyName and scope = :policyScope"; + SimpleBindings params = new SimpleBindings(); + params.put(policyName, policyEntity.getPolicyName()); + params.put("policyScope", policyEntity.getScope()); + List<Object> queryData = controller.getDataByQuery(query, params); + if(!queryData.isEmpty()){ + continue; + } + if (roles.contains(superAdmin) || roles.contains(superEditor)) { + //1. if Role contains super admin create scope. + //2. if Role contains super editor don't create new scope and add to list to show to user. + + PolicyEditorScopes policyEditorScope = (PolicyEditorScopes) commonClassDao.getEntityItem(PolicyEditorScopes.class, "scopeName", scope); + if(policyEditorScope == null){ + if(roles.contains(superAdmin)){ PolicyEditorScopes policyEditorScopeEntity = new PolicyEditorScopes(); policyEditorScopeEntity.setScopeName(scope); policyEditorScopeEntity.setUserCreatedBy(userInfo); policyEditorScopeEntity.setUserModifiedBy(userInfo); commonClassDao.save(policyEditorScopeEntity); }else{ + //Add Error Message a new Scope Exists, contact super-admin to create a new scope continue; } - }else{ - continue; } } - } - - if(configExists){ - if(configName.endsWith("json")){ - configurationDataEntity.setConfigType("JSON"); - }else if(configName.endsWith("txt")){ - configurationDataEntity.setConfigType("OTHER"); - }else if(configName.endsWith("xml")){ - configurationDataEntity.setConfigType("XML"); - }else if(configName.endsWith("properties")){ - configurationDataEntity.setConfigType("PROPERTIES"); - } - configurationDataEntity.setDeleted(false); - configurationDataEntity.setCreatedBy(userId); - configurationDataEntity.setModifiedBy(userId); - commonClassDao.save(configurationDataEntity); - try(FileWriter fw = new FileWriter(PolicyController.getConfigHome() + File.separator + configName)){ - BufferedWriter bw = new BufferedWriter(fw); - bw.write(configurationDataEntity.getConfigBody()); - bw.close(); - } catch (IOException e) { - logger.error("Exception Occured While cloning the configuration file",e); + if (roles.contains(admin) || roles.contains(editor)) { + if(scopes.isEmpty()){ + logger.error("No Scopes has been Assigned to the User. Please, Contact Super-Admin"); + }else{ + //1. if Role contains admin, then check if parent scope has role admin, if not don't create a scope and add to list. + if(roles.contains(admin)){ + String scopeCheck = scope.substring(0, scope.lastIndexOf('.')); + if(scopes.contains(scopeCheck)){ + PolicyEditorScopes policyEditorScopeEntity = new PolicyEditorScopes(); + policyEditorScopeEntity.setScopeName(scope); + policyEditorScopeEntity.setUserCreatedBy(userInfo); + policyEditorScopeEntity.setUserModifiedBy(userInfo); + commonClassDao.save(policyEditorScopeEntity); + }else{ + continue; + } + }else{ + continue; + } + } + } + + if(configExists){ + if(configName.endsWith("json")){ + configurationDataEntity.setConfigType("JSON"); + }else if(configName.endsWith("txt")){ + configurationDataEntity.setConfigType("OTHER"); + }else if(configName.endsWith("xml")){ + configurationDataEntity.setConfigType("XML"); + }else if(configName.endsWith("properties")){ + configurationDataEntity.setConfigType("PROPERTIES"); + } + configurationDataEntity.setDeleted(false); + configurationDataEntity.setCreatedBy(userId); + configurationDataEntity.setModifiedBy(userId); + commonClassDao.save(configurationDataEntity); + writeConfigurationFile(configurationDataEntity); } - } - if(actionExists){ - actionBodyEntity.setDeleted(false); - actionBodyEntity.setCreatedBy(userId); - actionBodyEntity.setModifiedBy(userId); - commonClassDao.save(actionBodyEntity); - try(FileWriter fw = new FileWriter(PolicyController.getActionHome() + File.separator + actionBodyEntity.getActionBodyName())) { - BufferedWriter bw = new BufferedWriter(fw); - bw.write(actionBodyEntity.getActionBody()); - bw.close(); - } catch (IOException e) { - logger.error("Exception Occured While cloning the configuration file",e); + if(actionExists){ + actionBodyEntity.setDeleted(false); + actionBodyEntity.setCreatedBy(userId); + actionBodyEntity.setModifiedBy(userId); + commonClassDao.save(actionBodyEntity); + writeActionBodyFile(actionBodyEntity); } - } - if(configName != null){ - if(configName.contains("Config_")){ - ConfigurationDataEntity configuration = (ConfigurationDataEntity) commonClassDao.getEntityItem(ConfigurationDataEntity.class, "configurationName", configName); - policyEntity.setConfigurationData(configuration); - }else{ - ActionBodyEntity actionBody = (ActionBodyEntity) commonClassDao.getEntityItem(ActionBodyEntity.class, "actionBodyName", configName); - policyEntity.setActionBodyEntity(actionBody); + if(configName != null){ + if(configName.contains(config)){ + ConfigurationDataEntity configuration = (ConfigurationDataEntity) commonClassDao.getEntityItem(ConfigurationDataEntity.class, configurationName, configName); + policyEntity.setConfigurationData(configuration); + }else{ + ActionBodyEntity actionBody = (ActionBodyEntity) commonClassDao.getEntityItem(ActionBodyEntity.class, "actionBodyName", configName); + policyEntity.setActionBodyEntity(actionBody); + } } + policyEntity.setCreatedBy(userId); + policyEntity.setModifiedBy(userId); + policyEntity.setDeleted(false); + commonClassDao.save(policyEntity); + + policyVersion = new PolicyVersion(); + String policyName = policyEntity.getPolicyName().replace(".xml", ""); + int version = Integer.parseInt(policyName.substring(policyName.lastIndexOf('.')+1)); + policyName = policyName.substring(0, policyName.lastIndexOf('.')); + + policyVersion.setPolicyName(scope.replace(".", File.separator) + File.separator + policyName); + policyVersion.setActiveVersion(version); + policyVersion.setHigherVersion(version); + policyVersion.setCreatedBy(userId); + policyVersion.setModifiedBy(userId); + commonClassDao.save(policyVersion); + + //Notify Other paps regarding Export Policy. + PolicyRestController restController = new PolicyRestController(); + restController.notifyOtherPAPSToUpdateConfigurations("exportPolicy", configName, null); } - policyEntity.setCreatedBy(userId); - policyEntity.setModifiedBy(userId); - policyEntity.setDeleted(false); - commonClassDao.save(policyEntity); - - policyVersion = new PolicyVersion(); - String policyName = policyEntity.getPolicyName().replace(".xml", ""); - int version = Integer.parseInt(policyName.substring(policyName.lastIndexOf('.')+1)); - policyName = policyName.substring(0, policyName.lastIndexOf('.')); - - policyVersion.setPolicyName(scope.replace(".", File.separator) + File.separator + policyName); - policyVersion.setActiveVersion(version); - policyVersion.setHigherVersion(version); - policyVersion.setCreatedBy(userId); - policyVersion.setModifiedBy(userId); - commonClassDao.save(policyVersion); } } + }catch(IOException e){ + logger.error("Exception Occured While importing the Policy"+e); } return null; } + private void writeConfigurationFile(ConfigurationDataEntity configurationDataEntity){ + try(FileWriter fw = new FileWriter(PolicyController.getConfigHome() + File.separator + configurationDataEntity.getConfigurationName())){ + BufferedWriter bw = new BufferedWriter(fw); + bw.write(configurationDataEntity.getConfigBody()); + bw.close(); + } catch (IOException e) { + logger.error("Exception Occured While cloning the configuration file",e); + } + } + + private void writeActionBodyFile(ActionBodyEntity actionBodyEntity){ + try(FileWriter fw = new FileWriter(PolicyController.getActionHome() + File.separator + actionBodyEntity.getActionBodyName())) { + BufferedWriter bw = new BufferedWriter(fw); + bw.write(actionBodyEntity.getActionBody()); + bw.close(); + } catch (IOException e) { + logger.error("Exception Occured While cloning the configuration file",e); + } + } + //return the column header name value private String getCellHeaderName(Cell cell){ return cell.getSheet().getRow(0).getCell(cell.getColumnIndex()).getRichStringCellValue().toString(); } -} +}
\ No newline at end of file |