X-Git-Url: https://gerrit.onap.org/r/gitweb?p=policy%2Fengine.git;a=blobdiff_plain;f=ONAP-PAP-REST%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fpolicy%2Fpap%2Fxacml%2Frest%2Fservice%2FImportService.java;h=d4801dfcf485f2fbd30b2055bce5c8b9c3dc7cdc;hp=16672071405de3db877de434a2245cb2011b0897;hb=1e61676b77dd09659027b8984f050df7e8538526;hpb=6f2b3f2dd0e80895acd0f77aa5784e717be33696 diff --git a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/service/ImportService.java b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/service/ImportService.java index 166720714..d4801dfcf 100644 --- a/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/service/ImportService.java +++ b/ONAP-PAP-REST/src/main/java/org/onap/policy/pap/xacml/rest/service/ImportService.java @@ -2,14 +2,14 @@ * ============LICENSE_START======================================================= * ONAP-PAP-REST * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -17,6 +17,7 @@ * limitations under the License. * ============LICENSE_END========================================================= */ + package org.onap.policy.pap.xacml.rest.service; import java.io.BufferedWriter; @@ -38,126 +39,190 @@ import org.onap.policy.common.logging.flexlogger.FlexLogger; import org.onap.policy.common.logging.flexlogger.Logger; import org.onap.policy.pap.xacml.rest.components.CreateBRMSRuleTemplate; import org.onap.policy.pap.xacml.rest.components.CreateNewMicroServiceModel; -import org.onap.policy.pap.xacml.rest.model.PDPPolicyContainer; +import org.onap.policy.pap.xacml.rest.components.CreateNewOptimizationModel; public class ImportService { - private static final Logger logger = FlexLogger.getLogger(ImportService.class); - public void doImportMicroServicePut(HttpServletRequest request, HttpServletResponse response) { - String importServiceCreation = request.getParameter("importService");; - String fileName = request.getParameter("fileName"); - String version = request.getParameter("version"); - String serviceName = request.getParameter("serviceName"); - String description = request.getParameter("description"); - Map successMap = new HashMap<>(); - switch(importServiceCreation){ - case "BRMSPARAM": - StringBuilder builder = new StringBuilder(); - int ch; - try { - while((ch = request.getInputStream().read()) != -1){ - builder.append((char)ch); - } - } catch (IOException e) { - logger.error(e); - PolicyLogger.error("Error in reading in file from API call"); - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.addHeader("error", "missing"); - response.addHeader("operation", "import"); - response.addHeader("service", serviceName); - } - CreateBRMSRuleTemplate brmsRuleTemplate = new CreateBRMSRuleTemplate(); - successMap = brmsRuleTemplate.addRule(builder.toString(), serviceName, description, "API"); - break; - case "MICROSERVICE": - CreateNewMicroServiceModel newMS = null; - String randomID = UUID.randomUUID().toString(); - if ( fileName != null) { - File extracDir = new File("ExtractDir"); - if (!extracDir.exists()){ - extracDir.mkdirs(); - } - if (fileName.contains(".xmi")){ - // get the request content into a String - String xmi = null; - java.util.Scanner scanner; - try { - scanner = new java.util.Scanner(request.getInputStream()); - scanner.useDelimiter("\\A"); - xmi = scanner.hasNext() ? scanner.next() : ""; - scanner.close(); - } catch (IOException e1) { - logger.error(e1); - PolicyLogger.error("Error in reading in file from API call"); - return; - } - PolicyLogger.info("XML request from API for import new Service"); - try (Writer writer = new BufferedWriter(new OutputStreamWriter( - new FileOutputStream("ExtractDir" + File.separator + randomID+".xmi"), "utf-8"))) { - writer.write(xmi); - } catch (IOException e) { - logger.error(e); - PolicyLogger.error("Error in reading in file from API call"); - return; - } - }else{ - InputStream inputStream = null; - try(FileOutputStream outputStream = new FileOutputStream("ExtractDir" + File.separator + randomID+".zip")) { - inputStream = request.getInputStream(); - byte[] buffer = new byte[4096]; - int bytesRead = -1 ; - while ((bytesRead = inputStream.read(buffer)) != -1) { - outputStream.write(buffer, 0, bytesRead) ; - } - } catch (IOException e) { - PolicyLogger.error("Error in reading in Zip File from API call"+e); - return; - }finally{ - try { - if(inputStream != null){ - inputStream.close(); - } - } catch (IOException e) { - PolicyLogger.error("Exception Occured while closing the input/output stream"+e); - } - } - } - newMS = new CreateNewMicroServiceModel(fileName, serviceName, "API", version, randomID); - successMap = newMS.addValuesToNewModel(); - if (successMap.containsKey("success")) { - successMap.clear(); - successMap = newMS.saveImportService(); - } - } - break; - } - // return a response to the PAP - if (successMap.containsKey("success")) { - response.setStatus(HttpServletResponse.SC_OK); - response.addHeader("successMapKey", "success"); - response.addHeader("operation", "import"); - response.addHeader("service", serviceName); - } else if (successMap.containsKey("DBError")) { - if (successMap.get("DBError").contains("EXISTS")){ - response.setStatus(HttpServletResponse.SC_CONFLICT); - response.addHeader("service", serviceName); - response.addHeader("error", "modelExistsDB"); - }else{ - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.addHeader("error", "importDB"); - } - response.addHeader("operation", "import"); - response.addHeader("service", serviceName); - }else if (successMap.get("error").contains("MISSING")){ - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.addHeader("error", "missing"); - response.addHeader("operation", "import"); - response.addHeader("service", serviceName); - }else if (successMap.get("error").contains("VALIDATION")){ - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - response.addHeader("error", "validation"); - response.addHeader("operation", "import"); - response.addHeader("service", serviceName); - } - } + private static final Logger logger = FlexLogger.getLogger(ImportService.class); + private static String errorMessage = "Error in reading in file from API call"; + private static String errorMsg = "error"; + private static String operation = "operation"; + private static String importHeader = "import"; + private static String service = "service"; + private static String extractDir = "ExtractDir"; + private static String successMessage = "success"; + private static String invalidServiceName = "Invalid ServiceName"; + private static final String REGEX = "[0-9a-zA-Z._ ]*"; + private static final String MISSING = "missing"; + + public void doImportMicroServicePut(HttpServletRequest request, HttpServletResponse response) { + String importServiceCreation = request.getParameter("importService"); + String fileName = request.getParameter("fileName"); + String version = request.getParameter("version"); + String serviceName = request.getParameter("serviceName"); + + if (serviceName == null || serviceName.isEmpty() || !serviceName.matches(REGEX)) { + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + response.addHeader(errorMsg, MISSING); + response.addHeader(operation, importHeader); + response.addHeader(service, invalidServiceName); + return; + } + + String description = request.getParameter("description"); + Map successMap = new HashMap<>(); + if (("BRMSPARAM").equals(importServiceCreation)) { + StringBuilder builder = new StringBuilder(); + int ch; + try { + while ((ch = request.getInputStream().read()) != -1) { + builder.append((char) ch); + } + } catch (IOException e) { + logger.error(e); + PolicyLogger.error(errorMessage); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + response.addHeader(errorMsg, MISSING); + response.addHeader(operation, importHeader); + response.addHeader(service, serviceName); + } + CreateBRMSRuleTemplate brmsRuleTemplate = new CreateBRMSRuleTemplate(); + successMap = brmsRuleTemplate.addRule(builder.toString(), serviceName, description, "API"); + } else if (("MICROSERVICE").equals(importServiceCreation)) { + CreateNewMicroServiceModel newMS = null; + String randomID = UUID.randomUUID().toString(); + String type = ".xmi"; + if (fileName != null) { + File extracDir = new File(extractDir); + if (!extracDir.exists()) { + extracDir.mkdirs(); + } + if (fileName.contains(".xmi") || fileName.contains(".yml")) { + if (fileName.contains(".yml")) { + type = ".yml"; + } + // get the request content into a String + String xmi = null; + java.util.Scanner scanner; + try { + scanner = new java.util.Scanner(request.getInputStream()); + scanner.useDelimiter("\\A"); + xmi = scanner.hasNext() ? scanner.next() : ""; + scanner.close(); + } catch (IOException e1) { + logger.error(e1); + PolicyLogger.error(errorMessage); + return; + } + PolicyLogger.info("Request from API to import new Service"); + try (Writer writer = new BufferedWriter(new OutputStreamWriter( + new FileOutputStream(extractDir + File.separator + randomID + type), "utf-8"))) { + writer.write(xmi); + } catch (IOException e) { + logger.error(e); + PolicyLogger.error(errorMessage); + return; + } + } else { + InputStream inputStream = null; + try (FileOutputStream outputStream = + new FileOutputStream(extractDir + File.separator + randomID + ".zip")) { + inputStream = request.getInputStream(); + byte[] buffer = new byte[4096]; + int bytesRead = -1; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + } catch (IOException e) { + PolicyLogger.error("Error in reading in Zip File from API call" + e); + return; + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + } catch (IOException e) { + PolicyLogger.error("Exception Occured while closing the input/output stream" + e); + } + } + } + + newMS = new CreateNewMicroServiceModel(fileName, serviceName, "API", version, randomID); + + successMap = newMS.addValuesToNewModel(type); + + if (successMap.containsKey(successMessage)) { + successMap.clear(); + successMap = newMS.saveImportService(); + } + } + } else if (("OPTIMIZATION").equals(importServiceCreation)) { + CreateNewOptimizationModel newOOF = null; + String randomID = UUID.randomUUID().toString(); + if (fileName != null) { + File extracDir = new File(extractDir); + if (!extracDir.exists()) { + extracDir.mkdirs(); + } + + String type = ".yml"; + + // get the request content into a String + String yml = null; + try (java.util.Scanner scanner = new java.util.Scanner(request.getInputStream());) { + scanner.useDelimiter("\\A"); + yml = scanner.hasNext() ? scanner.next() : ""; + } catch (IOException e1) { + logger.error(e1); + PolicyLogger.error(errorMessage); + return; + } + PolicyLogger.info("Request from API to import new Optimization Service Model"); + try (Writer writer = new BufferedWriter(new OutputStreamWriter( + new FileOutputStream(extractDir + File.separator + randomID + type), "utf-8"))) { + writer.write(yml); + } catch (IOException e) { + logger.error(e); + PolicyLogger.error(errorMessage); + return; + } + + newOOF = new CreateNewOptimizationModel(fileName, serviceName, "API Import Service", version, randomID); + successMap = newOOF.addValuesToNewModel(); + if (successMap.containsKey(successMessage)) { + successMap.clear(); + successMap = newOOF.saveImportService(); + } + } + } + + // return a response to the PAP + if (successMap.containsKey(successMessage)) { + response.setStatus(HttpServletResponse.SC_OK); + response.addHeader("successMapKey", successMessage); + response.addHeader(operation, importHeader); + response.addHeader(service, serviceName); + } else if (successMap.containsKey("DBError")) { + if (successMap.get("DBError").contains("EXISTS")) { + response.setStatus(HttpServletResponse.SC_CONFLICT); + response.addHeader(service, serviceName); + response.addHeader(errorMsg, "modelExistsDB"); + } else { + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + response.addHeader(errorMsg, "importDB"); + } + response.addHeader(operation, importHeader); + response.addHeader(service, serviceName); + } else if (successMap.get(errorMsg).contains("MISSING")) { + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + response.addHeader(errorMsg, MISSING); + response.addHeader(operation, importHeader); + response.addHeader(service, serviceName); + } else if (successMap.get(errorMsg).contains("VALIDATION")) { + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + response.addHeader(errorMsg, "validation"); + response.addHeader(operation, importHeader); + response.addHeader(service, serviceName); + } + } }