X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=POLICY-SDK-APP%2Fsrc%2Fmain%2Fjava%2Forg%2Fopenecomp%2Fpolicy%2Fadmin%2FPolicyRestController.java;h=08ef99f94450abf6c5b8b4c1ac6fb0da09a282eb;hb=4ca818fdfb9b807562166800a086b413593d6894;hp=75e3d0b8a0f48aa1de5363883d428fd5852e4e82;hpb=7e547eaa55920dfbc9691eab33bb728395b50cf2;p=policy%2Fengine.git diff --git a/POLICY-SDK-APP/src/main/java/org/openecomp/policy/admin/PolicyRestController.java b/POLICY-SDK-APP/src/main/java/org/openecomp/policy/admin/PolicyRestController.java index 75e3d0b8a..08ef99f94 100644 --- a/POLICY-SDK-APP/src/main/java/org/openecomp/policy/admin/PolicyRestController.java +++ b/POLICY-SDK-APP/src/main/java/org/openecomp/policy/admin/PolicyRestController.java @@ -77,76 +77,76 @@ import com.fasterxml.jackson.databind.SerializationFeature; @RequestMapping("/") public class PolicyRestController extends RestrictedBaseController{ - private static final Logger LOGGER = FlexLogger.getLogger(PolicyRestController.class); + private static final Logger policyLogger = FlexLogger.getLogger(PolicyRestController.class); - private String boundary = null; + private static final String modal = "model"; + private static final String importDictionary = "import_dictionary"; @Autowired CommonClassDao commonClassDao; @RequestMapping(value={"/policycreation/save_policy"}, method={RequestMethod.POST}) - public ModelAndView policyCreationController(HttpServletRequest request, HttpServletResponse response) throws Exception{ - + public void policyCreationController(HttpServletRequest request, HttpServletResponse response) { String userId = UserUtils.getUserSession(request).getOrgUserId(); ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - JsonNode root = mapper.readTree(request.getReader()); - - PolicyRestAdapter policyData = (PolicyRestAdapter)mapper.readValue(root.get("policyData").get("policy").toString(), PolicyRestAdapter.class); - - if(root.get("policyData").get("model").get("type").toString().replace("\"", "").equals("file")){ - policyData.isEditPolicy = true; - } - if(root.get("policyData").get("model").get("path").size() != 0){ - String dirName = ""; - for(int i = 0; i < root.get("policyData").get("model").get("path").size(); i++){ - dirName = dirName.replace("\"", "") + root.get("policyData").get("model").get("path").get(i).toString().replace("\"", "") + File.separator; + try{ + JsonNode root = mapper.readTree(request.getReader()); + + PolicyRestAdapter policyData = mapper.readValue(root.get(PolicyController.getPolicydata()).get("policy").toString(), PolicyRestAdapter.class); + + if("file".equals(root.get(PolicyController.getPolicydata()).get(modal).get("type").toString().replace("\"", ""))){ + policyData.setEditPolicy(true); } - if(policyData.isEditPolicy){ - policyData.setDomainDir(dirName.substring(0, dirName.lastIndexOf(File.separator))); + if(root.get(PolicyController.getPolicydata()).get(modal).get("path").size() != 0){ + String dirName = ""; + for(int i = 0; i < root.get(PolicyController.getPolicydata()).get(modal).get("path").size(); i++){ + dirName = dirName.replace("\"", "") + root.get(PolicyController.getPolicydata()).get(modal).get("path").get(i).toString().replace("\"", "") + File.separator; + } + if(policyData.isEditPolicy()){ + policyData.setDomainDir(dirName.substring(0, dirName.lastIndexOf(File.separator))); + }else{ + policyData.setDomainDir(dirName + root.get(PolicyController.getPolicydata()).get(modal).get("name").toString().replace("\"", "")); + } }else{ - policyData.setDomainDir(dirName + root.get("policyData").get("model").get("name").toString().replace("\"", "")); - } - }else{ - String domain = root.get("policyData").get("model").get("name").toString(); - if(domain.contains("/")){ - domain = domain.substring(0, domain.lastIndexOf("/")).replace("/", File.separator); + String domain = root.get(PolicyController.getPolicydata()).get("model").get("name").toString(); + if(domain.contains("/")){ + domain = domain.substring(0, domain.lastIndexOf('/')).replace("/", File.separator); + } + domain = domain.replace("\"", ""); + policyData.setDomainDir(domain); } - domain = domain.replace("\"", ""); - policyData.setDomainDir(domain); - } - - if(policyData.getConfigPolicyType() != null){ - if(policyData.getConfigPolicyType().equalsIgnoreCase("ClosedLoop_Fault")){ - CreateClosedLoopFaultController faultController = new CreateClosedLoopFaultController(); - policyData = faultController.setDataToPolicyRestAdapter(policyData, root); - }else if(policyData.getConfigPolicyType().equalsIgnoreCase("Firewall Config")){ - CreateFirewallController fwController = new CreateFirewallController(); - policyData = fwController.setDataToPolicyRestAdapter(policyData); - }else if(policyData.getConfigPolicyType().equalsIgnoreCase("Micro Service")){ - CreateDcaeMicroServiceController msController = new CreateDcaeMicroServiceController(); - policyData = msController.setDataToPolicyRestAdapter(policyData, root); + + if(policyData.getConfigPolicyType() != null){ + if("ClosedLoop_Fault".equalsIgnoreCase(policyData.getConfigPolicyType())){ + CreateClosedLoopFaultController faultController = new CreateClosedLoopFaultController(); + policyData = faultController.setDataToPolicyRestAdapter(policyData, root); + }else if("Firewall Config".equalsIgnoreCase(policyData.getConfigPolicyType())){ + CreateFirewallController fwController = new CreateFirewallController(); + policyData = fwController.setDataToPolicyRestAdapter(policyData); + }else if("Micro Service".equalsIgnoreCase(policyData.getConfigPolicyType())){ + CreateDcaeMicroServiceController msController = new CreateDcaeMicroServiceController(); + policyData = msController.setDataToPolicyRestAdapter(policyData, root); + } } - } - - policyData.setUserId(userId); - - String result; - String body = PolicyUtils.objectToJsonString(policyData); - String uri = request.getRequestURI(); - ResponseEntity responseEntity = sendToPAP(body, uri, request, HttpMethod.POST); - if(responseEntity.getBody().equals(HttpServletResponse.SC_CONFLICT)){ - result = "PolicyExists"; - }else{ - result = responseEntity.getBody().toString(); - String policyName = responseEntity.getHeaders().get("policyName").get(0).toString(); - if(policyData.isEditPolicy){ - if(result.equalsIgnoreCase("success")){ + + policyData.setUserId(userId); + + String result; + String body = PolicyUtils.objectToJsonString(policyData); + String uri = request.getRequestURI(); + ResponseEntity responseEntity = sendToPAP(body, uri, HttpMethod.POST); + if(responseEntity != null && responseEntity.getBody().equals(HttpServletResponse.SC_CONFLICT)){ + result = "PolicyExists"; + }else if(responseEntity != null){ + result = responseEntity.getBody().toString(); + String policyName = responseEntity.getHeaders().get("policyName").get(0); + if(policyData.isEditPolicy() && "success".equalsIgnoreCase(result)){ PolicyNotificationMail email = new PolicyNotificationMail(); String mode = "EditPolicy"; String watchPolicyName = policyName.replace(".xml", ""); - String version = watchPolicyName.substring(watchPolicyName.lastIndexOf(".")+1); - watchPolicyName = watchPolicyName.substring(0, watchPolicyName.lastIndexOf(".")).replace(".", File.separator); + String version = watchPolicyName.substring(watchPolicyName.lastIndexOf('.')+1); + watchPolicyName = watchPolicyName.substring(0, watchPolicyName.lastIndexOf('.')).replace(".", File.separator); String policyVersionName = watchPolicyName.replace(".", File.separator); watchPolicyName = watchPolicyName + "." + version + ".xml"; PolicyVersion entityItem = new PolicyVersion(); @@ -155,34 +155,34 @@ public class PolicyRestController extends RestrictedBaseController{ entityItem.setModifiedBy(userId); email.sendMail(entityItem, watchPolicyName, mode, commonClassDao); } + }else{ + result = "Response is null from PAP"; } - } - - - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); - request.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - String responseString = mapper.writeValueAsString(result); - JSONObject j = new JSONObject("{policyData: " + responseString + "}"); - out.write(j.toString()); - return null; + response.setCharacterEncoding(PolicyController.getCharacterencoding()); + response.setContentType(PolicyController.getContenttype()); + request.setCharacterEncoding(PolicyController.getCharacterencoding()); + PrintWriter out = response.getWriter(); + String responseString = mapper.writeValueAsString(result); + JSONObject j = new JSONObject("{policyData: " + responseString + "}"); + out.write(j.toString()); + }catch(Exception e){ + policyLogger.error("Exception Occured while saving policy" , e); + } } - private ResponseEntity sendToPAP(String body, String requestURI, HttpServletRequest request, HttpMethod method) throws Exception{ - String papUrl = PolicyController.papUrl; + private ResponseEntity sendToPAP(String body, String requestURI, HttpMethod method){ + String papUrl = PolicyController.getPapUrl(); String papID = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_USERID); String papPass = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_PASS); - LOGGER.info("User Id is " + papID + "Pass is: " + papPass); Base64.Encoder encoder = Base64.getEncoder(); String encoding = encoder.encodeToString((papID+":"+papPass).getBytes(StandardCharsets.UTF_8)); HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", "Basic " + encoding); - headers.set("Content-Type", "application/json"); + headers.set("Content-Type", PolicyController.getContenttype()); RestTemplate restTemplate = new RestTemplate(); HttpEntity requestEntity = new HttpEntity<>(body, headers); @@ -190,55 +190,52 @@ public class PolicyRestController extends RestrictedBaseController{ HttpClientErrorException exception = null; try{ - result = ((ResponseEntity) restTemplate.exchange(papUrl + requestURI, method, requestEntity, String.class)); + result = restTemplate.exchange(papUrl + requestURI, method, requestEntity, String.class); }catch(Exception e){ - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while connecting to " + papUrl, e); + policyLogger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while connecting to " + papUrl, e); exception = new HttpClientErrorException(HttpStatus.INTERNAL_SERVER_ERROR, e.getMessage()); - if(e.getMessage().equals("409 Conflict")){ - return (ResponseEntity) ResponseEntity.ok(HttpServletResponse.SC_CONFLICT); + if("409 Conflict".equals(e.getMessage())){ + return ResponseEntity.ok(HttpServletResponse.SC_CONFLICT); } } if(exception != null && exception.getStatusCode()!=null){ if(exception.getStatusCode().equals(HttpStatus.UNAUTHORIZED)){ String message = XACMLErrorConstants.ERROR_PERMISSIONS +":"+exception.getStatusCode()+":" + "ERROR_AUTH_GET_PERM" ; - LOGGER.error(message); - throw new Exception(message, exception); + policyLogger.error(message); } if(exception.getStatusCode().equals(HttpStatus.BAD_REQUEST)){ String message = XACMLErrorConstants.ERROR_DATA_ISSUE + ":"+exception.getStatusCode()+":" + exception.getResponseBodyAsString(); - LOGGER.error(message); - throw new Exception(message, exception); + policyLogger.error(message); } if(exception.getStatusCode().equals(HttpStatus.NOT_FOUND)){ String message = XACMLErrorConstants.ERROR_PROCESS_FLOW + "Error while connecting to " + papUrl + exception; - LOGGER.error(message); - throw new Exception(message, exception); + policyLogger.error(message); } String message = XACMLErrorConstants.ERROR_PROCESS_FLOW + ":"+exception.getStatusCode()+":" + exception.getResponseBodyAsString(); - LOGGER.error(message); - throw new Exception(message, exception); + policyLogger.error(message); } return result; } - private String callPAP(HttpServletRequest request, HttpServletResponse response, String method, String uri){ - String papUrl = PolicyController.papUrl; + private String callPAP(HttpServletRequest request , String method, String uriValue){ + String uri = uriValue; + String boundary = null; + String papUrl = PolicyController.getPapUrl(); String papID = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_USERID); String papPass = XACMLProperties.getProperty(XACMLRestProperties.PROP_PAP_PASS); - LOGGER.info("User Id is " + papID + "Pass is: " + papPass); - + Base64.Encoder encoder = Base64.getEncoder(); String encoding = encoder.encodeToString((papID+":"+papPass).getBytes(StandardCharsets.UTF_8)); HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", "Basic " + encoding); - headers.set("Content-Type", "application/json"); + headers.set("Content-Type", PolicyController.getContenttype()); HttpURLConnection connection = null; List items; FileItem item = null; File file = null; - if(uri.contains("import_dictionary")){ + if(uri.contains(importDictionary)){ try { items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); item = items.get(0); @@ -246,7 +243,7 @@ public class PolicyRestController extends RestrictedBaseController{ String newFile = file.toString(); uri = uri +"&dictionaryName="+newFile; } catch (Exception e2) { - e2.printStackTrace(); + policyLogger.error("Exception Occured while calling PAP with import dictionary request"+e2); } } @@ -262,15 +259,15 @@ public class PolicyRestController extends RestrictedBaseController{ if(!uri.contains("searchPolicy?action=delete&")){ - if(!(uri.endsWith("set_BRMSParamData") || uri.contains("import_dictionary"))){ - connection.setRequestProperty("Content-Type","application/json"); + if(!(uri.endsWith("set_BRMSParamData") || uri.contains(importDictionary))){ + connection.setRequestProperty("Content-Type",PolicyController.getContenttype()); ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); JsonNode root = null; try { root = mapper.readTree(request.getReader()); }catch (Exception e1) { - e1.printStackTrace(); + policyLogger.error("Exception Occured while calling PAP"+e1); } ObjectMapper mapper1 = new ObjectMapper(); @@ -281,18 +278,18 @@ public class PolicyRestController extends RestrictedBaseController{ Object content = new ByteArrayInputStream(json.getBytes()); - if (content != null && (content instanceof InputStream)) { + if (content instanceof InputStream) { // send current configuration try (OutputStream os = connection.getOutputStream()) { int count = IOUtils.copy((InputStream) content, os); - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("copied to output, bytes=" + count); + if (policyLogger.isDebugEnabled()) { + policyLogger.debug("copied to output, bytes=" + count); } } } }else{ if(uri.endsWith("set_BRMSParamData")){ - connection.setRequestProperty("Content-Type","application/json"); + connection.setRequestProperty("Content-Type",PolicyController.getContenttype()); try (OutputStream os = connection.getOutputStream()) { IOUtils.copy((InputStream) request.getInputStream(), os); } @@ -300,7 +297,9 @@ public class PolicyRestController extends RestrictedBaseController{ boundary = "===" + System.currentTimeMillis() + "==="; connection.setRequestProperty("Content-Type","multipart/form-data; boundary=" + boundary); try (OutputStream os = connection.getOutputStream()) { - IOUtils.copy((InputStream) item.getInputStream(), os); + if(item != null){ + IOUtils.copy((InputStream) item.getInputStream(), os); + } } } } @@ -317,34 +316,26 @@ public class PolicyRestController extends RestrictedBaseController{ scanner.useDelimiter("\\A"); responseJson = scanner.hasNext() ? scanner.next() : ""; scanner.close(); - LOGGER.info("JSON response from PAP: " + responseJson); + policyLogger.info("JSON response from PAP: " + responseJson); return responseJson; } } catch (Exception e) { - LOGGER.error("Exception Occured"+e); + policyLogger.error("Exception Occured"+e); }finally{ - if(file != null){ - if(file.exists()){ - file.delete(); - } + if(file != null && file.exists() && file.delete()){ + policyLogger.info("File Deleted Successfully"); } if (connection != null) { try { // For some reason trying to get the inputStream from the connection // throws an exception rather than returning null when the InputStream does not exist. - InputStream is = null; - try { - is = connection.getInputStream(); - } catch (Exception e1) { - // ignore this - } + InputStream is = connection.getInputStream(); if (is != null) { is.close(); } - } catch (IOException ex) { - LOGGER.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to close connection: " + ex, ex); + policyLogger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Failed to close connection: " + ex, ex); } connection.disconnect(); } @@ -353,20 +344,30 @@ public class PolicyRestController extends RestrictedBaseController{ } @RequestMapping(value={"/getDictionary/*"}, method={RequestMethod.GET}) - public void getDictionaryController(HttpServletRequest request, HttpServletResponse response) throws Exception{ + public void getDictionaryController(HttpServletRequest request, HttpServletResponse response){ String uri = request.getRequestURI().replace("/getDictionary", ""); - String body = sendToPAP(null, uri, request, HttpMethod.GET).getBody().toString(); - response.getWriter().write(body); + String body = null; + ResponseEntity responseEntity = sendToPAP(null, uri, HttpMethod.GET); + if(responseEntity != null){ + body = responseEntity.getBody().toString(); + }else{ + body = ""; + } + try { + response.getWriter().write(body); + } catch (IOException e) { + policyLogger.error("Exception occured while getting Dictionary entries", e); + } } @RequestMapping(value={"/saveDictionary/*/*"}, method={RequestMethod.POST}) public ModelAndView saveDictionaryController(HttpServletRequest request, HttpServletResponse response) throws Exception{ String uri = request.getRequestURI().replace("/saveDictionary", ""); - if(uri.contains("import_dictionary")){ + if(uri.contains(importDictionary)){ String userId = UserUtils.getUserSession(request).getOrgUserId(); uri = uri+ "?userId=" +userId; } - String body = callPAP(request, response, "POST", uri.replaceFirst("/", "").trim()); + String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim()); response.getWriter().write(body); return null; } @@ -374,7 +375,7 @@ public class PolicyRestController extends RestrictedBaseController{ @RequestMapping(value={"/deleteDictionary/*/*"}, method={RequestMethod.POST}) public ModelAndView deletetDictionaryController(HttpServletRequest request, HttpServletResponse response) throws Exception{ String uri = request.getRequestURI().replace("/deleteDictionary", ""); - String body = callPAP(request, response, "POST", uri.replaceFirst("/", "").trim()); + String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim()); response.getWriter().write(body); return null; } @@ -383,18 +384,25 @@ public class PolicyRestController extends RestrictedBaseController{ public ModelAndView searchDictionaryController(HttpServletRequest request, HttpServletResponse response) throws Exception{ Object resultList = null; String uri = request.getRequestURI(); - String body = callPAP(request, response, "POST", uri.replaceFirst("/", "").trim()); - if(body.contains("CouldNotConnectException")){ - List data = new ArrayList(); + try{ + String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim()); + if(body.contains("CouldNotConnectException")){ + List data = new ArrayList<>(); + data.add("Elastic Search Server is down"); + resultList = data; + }else{ + JSONObject json = new JSONObject(body); + resultList = json.get("policyresult"); + } + }catch(Exception e){ + policyLogger.error(XACMLErrorConstants.ERROR_PROCESS_FLOW + "Exception Occured while querying Elastic Search: " + e); + List data = new ArrayList<>(); data.add("Elastic Search Server is down"); resultList = data; - }else{ - JSONObject json = new JSONObject(body); - resultList = json.get("policyresult"); } - response.setCharacterEncoding("UTF-8"); - response.setContentType("application / json"); + response.setCharacterEncoding(PolicyController.getCharacterencoding()); + response.setContentType(PolicyController.getContenttype()); PrintWriter out = response.getWriter(); JSONObject j = new JSONObject("{result: " + resultList + "}"); out.write(j.toString()); @@ -405,15 +413,16 @@ public class PolicyRestController extends RestrictedBaseController{ public ModelAndView searchPolicy(HttpServletRequest request, HttpServletResponse response) throws Exception{ Object resultList = null; String uri = request.getRequestURI()+"?action=search"; - String body = callPAP(request, response, "POST", uri.replaceFirst("/", "").trim()); + String body = callPAP(request, "POST", uri.replaceFirst("/", "").trim()); JSONObject json = new JSONObject(body); try{ resultList = json.get("policyresult"); }catch(Exception e){ - List data = new ArrayList(); + List data = new ArrayList<>(); data.add("Elastic Search Server is down"); resultList = data; + policyLogger.error("Exception Occured while searching for Policy in Elastic Database" +e); } response.setCharacterEncoding("UTF-8"); @@ -428,7 +437,7 @@ public class PolicyRestController extends RestrictedBaseController{ public void deleteElasticData(String fileName){ String uri = "searchPolicy?action=delete&policyName='"+fileName+"'"; - callPAP(null, null, "POST", uri.trim()); + callPAP(null, "POST", uri.trim()); } } \ No newline at end of file