2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 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;
41 import org.onap.policy.pap.xacml.rest.model.PDPPolicyContainer;
43 public class ImportService {
44 private static final Logger logger = FlexLogger.getLogger(ImportService.class);
45 public void doImportMicroServicePut(HttpServletRequest request, HttpServletResponse response) {
46 String importServiceCreation = request.getParameter("importService");;
47 String fileName = request.getParameter("fileName");
48 String version = request.getParameter("version");
49 String serviceName = request.getParameter("serviceName");
50 String description = request.getParameter("description");
51 Map<String, String> successMap = new HashMap<>();
52 switch(importServiceCreation){
54 StringBuilder builder = new StringBuilder();
57 while((ch = request.getInputStream().read()) != -1){
58 builder.append((char)ch);
60 } catch (IOException e) {
62 PolicyLogger.error("Error in reading in file from API call");
63 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
64 response.addHeader("error", "missing");
65 response.addHeader("operation", "import");
66 response.addHeader("service", serviceName);
68 CreateBRMSRuleTemplate brmsRuleTemplate = new CreateBRMSRuleTemplate();
69 successMap = brmsRuleTemplate.addRule(builder.toString(), serviceName, description, "API");
72 CreateNewMicroServiceModel newMS = null;
73 String randomID = UUID.randomUUID().toString();
74 if ( fileName != null) {
75 File extracDir = new File("ExtractDir");
76 if (!extracDir.exists()){
79 if (fileName.contains(".xmi")){
80 // get the request content into a String
82 java.util.Scanner scanner;
84 scanner = new java.util.Scanner(request.getInputStream());
85 scanner.useDelimiter("\\A");
86 xmi = scanner.hasNext() ? scanner.next() : "";
88 } catch (IOException e1) {
90 PolicyLogger.error("Error in reading in file from API call");
93 PolicyLogger.info("XML request from API for import new Service");
94 try (Writer writer = new BufferedWriter(new OutputStreamWriter(
95 new FileOutputStream("ExtractDir" + File.separator + randomID+".xmi"), "utf-8"))) {
97 } catch (IOException e) {
99 PolicyLogger.error("Error in reading in file from API call");
103 InputStream inputStream = null;
104 try(FileOutputStream outputStream = new FileOutputStream("ExtractDir" + File.separator + randomID+".zip")) {
105 inputStream = request.getInputStream();
106 byte[] buffer = new byte[4096];
108 while ((bytesRead = inputStream.read(buffer)) != -1) {
109 outputStream.write(buffer, 0, bytesRead) ;
111 } catch (IOException e) {
112 PolicyLogger.error("Error in reading in Zip File from API call"+e);
116 if(inputStream != null){
119 } catch (IOException e) {
120 PolicyLogger.error("Exception Occured while closing the input/output stream"+e);
124 newMS = new CreateNewMicroServiceModel(fileName, serviceName, "API", version, randomID);
125 successMap = newMS.addValuesToNewModel();
126 if (successMap.containsKey("success")) {
128 successMap = newMS.saveImportService();
133 // return a response to the PAP
134 if (successMap.containsKey("success")) {
135 response.setStatus(HttpServletResponse.SC_OK);
136 response.addHeader("successMapKey", "success");
137 response.addHeader("operation", "import");
138 response.addHeader("service", serviceName);
139 } else if (successMap.containsKey("DBError")) {
140 if (successMap.get("DBError").contains("EXISTS")){
141 response.setStatus(HttpServletResponse.SC_CONFLICT);
142 response.addHeader("service", serviceName);
143 response.addHeader("error", "modelExistsDB");
145 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
146 response.addHeader("error", "importDB");
148 response.addHeader("operation", "import");
149 response.addHeader("service", serviceName);
150 }else if (successMap.get("error").contains("MISSING")){
151 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
152 response.addHeader("error", "missing");
153 response.addHeader("operation", "import");
154 response.addHeader("service", serviceName);
155 }else if (successMap.get("error").contains("VALIDATION")){
156 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
157 response.addHeader("error", "validation");
158 response.addHeader("operation", "import");
159 response.addHeader("service", serviceName);