2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017-2018 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=========================================================
20 package org.onap.policy.pap.xacml.rest.service;
22 import java.io.BufferedWriter;
24 import java.io.FileOutputStream;
25 import java.io.IOException;
26 import java.io.InputStream;
27 import java.io.OutputStreamWriter;
28 import java.io.Writer;
29 import java.util.HashMap;
31 import java.util.UUID;
33 import javax.servlet.http.HttpServletRequest;
34 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;
42 public class ImportService {
43 private static final Logger logger = FlexLogger.getLogger(ImportService.class);
44 private static String errorMessage = "Error in reading in file from API call";
45 private static String errorMsg = "error";
46 private static String operation = "operation";
47 private static String importHeader = "import";
48 private static String service = "service";
49 private static String extractDir = "ExtractDir";
50 private static String successMessage = "success";
51 private static String invalidServiceName = "Invalid ServiceName";
52 private static final String REGEX = "[0-9a-zA-Z._ ]*";
54 public void doImportMicroServicePut(HttpServletRequest request, HttpServletResponse response) {
55 String importServiceCreation = request.getParameter("importService");
56 String fileName = request.getParameter("fileName");
57 String version = request.getParameter("version");
58 String serviceName = request.getParameter("serviceName");
60 if(serviceName == null || serviceName.isEmpty() || !serviceName.matches(REGEX)){
61 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
62 response.addHeader(errorMsg, "missing");
63 response.addHeader(operation, importHeader);
64 response.addHeader(service, invalidServiceName);
68 String description = request.getParameter("description");
69 Map<String, String> successMap = new HashMap<>();
70 if(("BRMSPARAM").equals(importServiceCreation)){
71 StringBuilder builder = new StringBuilder();
74 while((ch = request.getInputStream().read()) != -1){
75 builder.append((char)ch);
77 } catch (IOException e) {
79 PolicyLogger.error(errorMessage);
80 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
81 response.addHeader(errorMsg, "missing");
82 response.addHeader(operation, importHeader);
83 response.addHeader(service, serviceName);
85 CreateBRMSRuleTemplate brmsRuleTemplate = new CreateBRMSRuleTemplate();
86 successMap = brmsRuleTemplate.addRule(builder.toString(), serviceName, description, "API");
88 else if(("MICROSERVICE").equals(importServiceCreation)){
89 CreateNewMicroServiceModel newMS = null;
90 String randomID = UUID.randomUUID().toString();
91 if ( fileName != null) {
92 File extracDir = new File(extractDir);
93 if (!extracDir.exists()){
96 if (fileName.contains(".xmi")){
97 // get the request content into a String
99 java.util.Scanner scanner;
101 scanner = new java.util.Scanner(request.getInputStream());
102 scanner.useDelimiter("\\A");
103 xmi = scanner.hasNext() ? scanner.next() : "";
105 } catch (IOException e1) {
107 PolicyLogger.error(errorMessage);
110 PolicyLogger.info("XML request from API for import new Service");
111 try (Writer writer = new BufferedWriter(new OutputStreamWriter(
112 new FileOutputStream(extractDir + File.separator + randomID+".xmi"), "utf-8"))) {
114 } catch (IOException e) {
116 PolicyLogger.error(errorMessage);
120 InputStream inputStream = null;
121 try(FileOutputStream outputStream = new FileOutputStream(extractDir + File.separator + randomID+".zip")) {
122 inputStream = request.getInputStream();
123 byte[] buffer = new byte[4096];
125 while ((bytesRead = inputStream.read(buffer)) != -1) {
126 outputStream.write(buffer, 0, bytesRead) ;
128 } catch (IOException e) {
129 PolicyLogger.error("Error in reading in Zip File from API call"+e);
133 if(inputStream != null){
136 } catch (IOException e) {
137 PolicyLogger.error("Exception Occured while closing the input/output stream"+e);
141 newMS = new CreateNewMicroServiceModel(fileName, serviceName, "API", version, randomID);
142 successMap = newMS.addValuesToNewModel();
143 if (successMap.containsKey(successMessage)) {
145 successMap = newMS.saveImportService();
150 // return a response to the PAP
151 if (successMap.containsKey(successMessage)) {
152 response.setStatus(HttpServletResponse.SC_OK);
153 response.addHeader("successMapKey", successMessage);
154 response.addHeader(operation, importHeader);
155 response.addHeader(service, serviceName);
156 } else if (successMap.containsKey("DBError")) {
157 if (successMap.get("DBError").contains("EXISTS")){
158 response.setStatus(HttpServletResponse.SC_CONFLICT);
159 response.addHeader(service, serviceName);
160 response.addHeader(errorMsg, "modelExistsDB");
162 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
163 response.addHeader(errorMsg, "importDB");
165 response.addHeader(operation, importHeader);
166 response.addHeader(service, serviceName);
167 }else if (successMap.get(errorMsg).contains("MISSING")){
168 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
169 response.addHeader(errorMsg, "missing");
170 response.addHeader(operation, importHeader);
171 response.addHeader(service, serviceName);
172 }else if (successMap.get(errorMsg).contains("VALIDATION")){
173 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
174 response.addHeader(errorMsg, "validation");
175 response.addHeader(operation, importHeader);
176 response.addHeader(service, serviceName);