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=2c04bc66dd36f2f9f3b5268d786f0460947ddd72;hb=fc5c07705edc4dcb7083b39116a43844bb6a1490;hp=c40f0da0c3aba22bc28d32f10f63ad434549432f;hpb=dda032f8bb161d54eb1f59de2b4a3efb774fc4d1;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 c40f0da0c..2c04bc66d 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 @@ -28,6 +28,7 @@ import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.Base64; import java.util.List; @@ -76,9 +77,10 @@ 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; @@ -91,38 +93,38 @@ public class PolicyRestController extends RestrictedBaseController{ 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); + PolicyRestAdapter policyData = mapper.readValue(root.get(PolicyController.getPolicydata()).get("policy").toString(), PolicyRestAdapter.class); - if(root.get("policyData").get("model").get("type").toString().replace("\"", "").equals("file")){ - policyData.isEditPolicy = true; + if("file".equals(root.get(PolicyController.getPolicydata()).get(modal).get("type").toString().replace("\"", ""))){ + policyData.setEditPolicy(true); } - if(root.get("policyData").get("model").get("path").size() != 0){ + if(root.get(PolicyController.getPolicydata()).get(modal).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; + 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){ + if(policyData.isEditPolicy()){ policyData.setDomainDir(dirName.substring(0, dirName.lastIndexOf(File.separator))); }else{ - policyData.setDomainDir(dirName + root.get("policyData").get("model").get("name").toString().replace("\"", "")); + policyData.setDomainDir(dirName + root.get(PolicyController.getPolicydata()).get(modal).get("name").toString().replace("\"", "")); } }else{ - String domain = root.get("policyData").get("model").get("name").toString(); + 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.substring(0, domain.lastIndexOf('/')).replace("/", File.separator); } domain = domain.replace("\"", ""); policyData.setDomainDir(domain); } if(policyData.getConfigPolicyType() != null){ - if(policyData.getConfigPolicyType().equalsIgnoreCase("ClosedLoop_Fault")){ + if("ClosedLoop_Fault".equalsIgnoreCase(policyData.getConfigPolicyType())){ CreateClosedLoopFaultController faultController = new CreateClosedLoopFaultController(); policyData = faultController.setDataToPolicyRestAdapter(policyData, root); - }else if(policyData.getConfigPolicyType().equalsIgnoreCase("Firewall Config")){ + }else if("Firewall Config".equalsIgnoreCase(policyData.getConfigPolicyType())){ CreateFirewallController fwController = new CreateFirewallController(); policyData = fwController.setDataToPolicyRestAdapter(policyData); - }else if(policyData.getConfigPolicyType().equalsIgnoreCase("Micro Service")){ + }else if("Micro Service".equalsIgnoreCase(policyData.getConfigPolicyType())){ CreateDcaeMicroServiceController msController = new CreateDcaeMicroServiceController(); policyData = msController.setDataToPolicyRestAdapter(policyData, root); } @@ -133,34 +135,34 @@ public class PolicyRestController extends RestrictedBaseController{ 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)){ + ResponseEntity responseEntity = sendToPAP(body, uri, HttpMethod.POST); + if(responseEntity != null && responseEntity.getBody().equals(HttpServletResponse.SC_CONFLICT)){ result = "PolicyExists"; - }else{ + }else if(responseEntity != null){ result = responseEntity.getBody().toString(); - String policyName = responseEntity.getHeaders().get("policyName").get(0).toString(); - if(policyData.isEditPolicy){ - if(result.equalsIgnoreCase("success")){ - 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 policyVersionName = watchPolicyName.replace(".", File.separator); - watchPolicyName = watchPolicyName + "." + version + ".xml"; - PolicyVersion entityItem = new PolicyVersion(); - entityItem.setPolicyName(policyVersionName); - entityItem.setActiveVersion(Integer.parseInt(version)); - entityItem.setModifiedBy(userId); - email.sendMail(entityItem, watchPolicyName, mode, commonClassDao); - } + 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 policyVersionName = watchPolicyName.replace(".", File.separator); + watchPolicyName = watchPolicyName + "." + version + ".xml"; + PolicyVersion entityItem = new PolicyVersion(); + entityItem.setPolicyName(policyVersionName); + entityItem.setActiveVersion(Integer.parseInt(version)); + 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"); + response.setCharacterEncoding(PolicyController.getCharacterencoding()); + response.setContentType(PolicyController.getContenttype()); + request.setCharacterEncoding(PolicyController.getCharacterencoding()); PrintWriter out = response.getWriter(); String responseString = mapper.writeValueAsString(result); @@ -171,17 +173,16 @@ public class PolicyRestController extends RestrictedBaseController{ } - 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); @@ -189,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); @@ -245,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); } } @@ -261,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(); @@ -280,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); } @@ -299,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); + } } } } @@ -316,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) { - e.printStackTrace(); + 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(); } @@ -354,18 +346,24 @@ public class PolicyRestController extends RestrictedBaseController{ @RequestMapping(value={"/getDictionary/*"}, method={RequestMethod.GET}) public void getDictionaryController(HttpServletRequest request, HttpServletResponse response) throws Exception{ String uri = request.getRequestURI().replace("/getDictionary", ""); - String body = sendToPAP(null, uri, request, HttpMethod.GET).getBody().toString(); + String body = null; + ResponseEntity responseEntity = sendToPAP(null, uri, HttpMethod.GET); + if(responseEntity != null){ + body = responseEntity.getBody().toString(); + }else{ + body = ""; + } response.getWriter().write(body); } @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; } @@ -373,18 +371,56 @@ 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; } + @RequestMapping(value={"/searchDictionary"}, method={RequestMethod.POST}) + public ModelAndView searchDictionaryController(HttpServletRequest request, HttpServletResponse response) throws Exception{ + Object resultList = null; + String uri = request.getRequestURI(); + 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; + } + + response.setCharacterEncoding(PolicyController.getCharacterencoding()); + response.setContentType(PolicyController.getContenttype()); + PrintWriter out = response.getWriter(); + JSONObject j = new JSONObject("{result: " + resultList + "}"); + out.write(j.toString()); + return null; + } + @RequestMapping(value={"/searchPolicy"}, method={RequestMethod.POST}) 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); - Object resultList = json.get("policyresult"); - + try{ + resultList = json.get("policyresult"); + }catch(Exception e){ + 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"); response.setContentType("application / json"); request.setCharacterEncoding("UTF-8"); @@ -397,7 +433,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