2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.pap.xacml.rest.service;
23 import java.io.BufferedWriter;
25 import java.io.FileOutputStream;
26 import java.io.IOException;
27 import java.io.InputStream;
28 import java.io.OutputStreamWriter;
29 import java.io.Writer;
30 import java.util.HashMap;
32 import java.util.UUID;
33 import javax.servlet.ServletInputStream;
34 import javax.servlet.http.HttpServletRequest;
35 import javax.servlet.http.HttpServletResponse;
36 import org.onap.policy.common.logging.eelf.PolicyLogger;
37 import org.onap.policy.common.logging.flexlogger.FlexLogger;
38 import org.onap.policy.common.logging.flexlogger.Logger;
39 import org.onap.policy.pap.xacml.rest.components.CreateBRMSRuleTemplate;
40 import org.onap.policy.pap.xacml.rest.components.CreateNewMicroServiceModel;
41 import org.onap.policy.pap.xacml.rest.components.CreateNewOptimizationModel;
43 public class ImportService {
44 private static final Logger logger = FlexLogger.getLogger(ImportService.class);
45 private static String errorMessage = "Error in reading in file from API call";
46 private static String errorMsg = "error";
47 private static String operation = "operation";
48 private static String importHeader = "import";
49 private static String service = "service";
50 private static String extractDir = "ExtractDir";
51 private static String successMessage = "success";
52 private static String invalidServiceName = "Invalid ServiceName";
53 private static final String REGEX = "[0-9a-zA-Z._ ]*";
54 private static final String MISSING = "missing";
56 public void doImportMicroServicePut(HttpServletRequest request, HttpServletResponse response) {
57 String importServiceCreation = request.getParameter("importService");
58 String fileName = request.getParameter("fileName");
59 String version = request.getParameter("version");
60 String serviceName = request.getParameter("serviceName");
62 if (serviceName == null || serviceName.isEmpty() || !serviceName.matches(REGEX)) {
63 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
64 response.addHeader(errorMsg, MISSING);
65 response.addHeader(operation, importHeader);
66 response.addHeader(service, invalidServiceName);
70 String description = request.getParameter("description");
71 Map<String, String> successMap = new HashMap<>();
72 if (("BRMSPARAM").equals(importServiceCreation)) {
73 StringBuilder builder = new StringBuilder();
76 ServletInputStream stream = request.getInputStream();
77 while ((ch = stream.read()) != -1) {
78 builder.append((char) ch);
80 } catch (IOException e) {
82 PolicyLogger.error(errorMessage);
83 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
84 response.addHeader(errorMsg, MISSING);
85 response.addHeader(operation, importHeader);
86 response.addHeader(service, serviceName);
88 CreateBRMSRuleTemplate brmsRuleTemplate = new CreateBRMSRuleTemplate();
89 successMap = brmsRuleTemplate.addRule(builder.toString(), serviceName, description, "API");
90 } else if (("MICROSERVICE").equals(importServiceCreation)) {
91 CreateNewMicroServiceModel newMS = null;
92 String randomID = UUID.randomUUID().toString();
94 if (fileName != null) {
95 File extracDir = new File(extractDir);
96 if (!extracDir.exists()) {
99 if (fileName.contains(".xmi") || fileName.contains(".yml")) {
100 if (fileName.contains(".yml")) {
103 // get the request content into a String
105 java.util.Scanner scanner;
107 scanner = new java.util.Scanner(request.getInputStream());
108 scanner.useDelimiter("\\A");
109 xmi = scanner.hasNext() ? scanner.next() : "";
111 } catch (IOException e1) {
113 PolicyLogger.error(errorMessage);
116 PolicyLogger.info("Request from API to import new Service");
117 try (Writer writer = new BufferedWriter(new OutputStreamWriter(
118 new FileOutputStream(extractDir + File.separator + randomID + type), "utf-8"))) {
120 } catch (IOException e) {
122 PolicyLogger.error(errorMessage);
126 InputStream inputStream = null;
127 try (FileOutputStream outputStream =
128 new FileOutputStream(extractDir + File.separator + randomID + ".zip")) {
129 inputStream = request.getInputStream();
130 byte[] buffer = new byte[4096];
132 while ((bytesRead = inputStream.read(buffer)) != -1) {
133 outputStream.write(buffer, 0, bytesRead);
135 } catch (IOException e) {
136 PolicyLogger.error("Error in reading in Zip File from API call" + e);
140 if (inputStream != null) {
143 } catch (IOException e) {
144 PolicyLogger.error("Exception Occured while closing the input/output stream" + e);
149 newMS = new CreateNewMicroServiceModel(fileName, serviceName, "API", version, randomID);
151 successMap = newMS.addValuesToNewModel(type);
153 if (successMap.containsKey(successMessage)) {
155 successMap = newMS.saveImportService();
158 } else if (("OPTIMIZATION").equals(importServiceCreation)) {
159 CreateNewOptimizationModel newOOF = null;
160 String randomID = UUID.randomUUID().toString();
161 if (fileName != null) {
162 File extracDir = new File(extractDir);
163 if (!extracDir.exists()) {
167 String type = ".yml";
169 // get the request content into a String
171 try (java.util.Scanner scanner = new java.util.Scanner(request.getInputStream());) {
172 scanner.useDelimiter("\\A");
173 yml = scanner.hasNext() ? scanner.next() : "";
174 } catch (IOException e1) {
176 PolicyLogger.error(errorMessage);
179 PolicyLogger.info("Request from API to import new Optimization Service Model");
180 try (Writer writer = new BufferedWriter(new OutputStreamWriter(
181 new FileOutputStream(extractDir + File.separator + randomID + type), "utf-8"))) {
183 } catch (IOException e) {
185 PolicyLogger.error(errorMessage);
189 newOOF = new CreateNewOptimizationModel(fileName, serviceName, "API Import Service", version, randomID);
190 successMap = newOOF.addValuesToNewModel();
191 if (successMap.containsKey(successMessage)) {
193 successMap = newOOF.saveImportService();
198 // return a response to the PAP
199 if (successMap.containsKey(successMessage)) {
200 response.setStatus(HttpServletResponse.SC_OK);
201 response.addHeader("successMapKey", successMessage);
202 response.addHeader(operation, importHeader);
203 response.addHeader(service, serviceName);
204 } else if (successMap.containsKey("DBError")) {
205 if (successMap.get("DBError").contains("EXISTS")) {
206 response.setStatus(HttpServletResponse.SC_CONFLICT);
207 response.addHeader(service, serviceName);
208 response.addHeader(errorMsg, "modelExistsDB");
210 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
211 response.addHeader(errorMsg, "importDB");
213 response.addHeader(operation, importHeader);
214 response.addHeader(service, serviceName);
215 } else if (successMap.get(errorMsg).contains("MISSING")) {
216 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
217 response.addHeader(errorMsg, MISSING);
218 response.addHeader(operation, importHeader);
219 response.addHeader(service, serviceName);
220 } else if (successMap.get(errorMsg).contains("VALIDATION")) {
221 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
222 response.addHeader(errorMsg, "validation");
223 response.addHeader(operation, importHeader);
224 response.addHeader(service, serviceName);