/**
* Copyright 2008-2016 Qualogy Solutions B.V.
*
* 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.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.qualogy.qafe.web.upload;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.logging.Logger;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.qualogy.qafe.core.datastore.ApplicationLocalStore;
import com.qualogy.qafe.core.datastore.DataStore;
import com.qualogy.qafe.service.DocumentService;
import com.qualogy.qafe.service.DocumentServiceImpl;
import com.qualogy.qafe.service.domain.DocumentOutput;
import com.qualogy.qafe.service.domain.DocumentParameter;
import com.qualogy.qafe.util.ExceptionHelper;
public class DatagridUploadServlet extends HttpServlet {
private static final long serialVersionUID = -5162541603503766940L;
private static final Logger LOG = Logger.getLogger(DatagridUploadServlet.class.getName());
public static final String FORM_PARAMETER_DELIMITER = "delimiter";
public static final String FORM_PARAMETER_ISFIRSTLINEHEADER = "isFirstLineHeader";
private DocumentService documentService = new DocumentServiceImpl();
private void writeLog(String text) {
log(text);
LOG.info(text);
}
@SuppressWarnings("unchecked")
private void writeUploadInfo(HttpServletRequest request) {
writeLog("Document Upload!");
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
Object name = headerNames.nextElement();
if (name != null) {
writeLog("Header - " + name + " : " + request.getHeader((String) name));
}
}
writeLog("ServletRemoteAddr: " + request.getRemoteAddr());
writeLog("Remote Host: " + request.getRemoteHost());
writeLog("Remote User: " + request.getRemoteUser());
writeLog("Protocol: " + request.getProtocol());
writeLog("Server Name: " + request.getServerName());
writeLog("Server Port: " + request.getServerPort());
writeLog("Request URL: " + request.getRequestURL());
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
byte[] filecontent = null;
ServletFileUpload upload = new ServletFileUpload();
InputStream inputStream = null;
ByteArrayOutputStream outputStream = null;
boolean isFirstLineHeader = false;
String delimiter = ",";
writeUploadInfo(request);
log(request.getHeader("User-Agent"));
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try {
FileItemIterator fileItemIterator = upload.getItemIterator(request);
while (fileItemIterator.hasNext()) {
FileItemStream item = fileItemIterator.next();
inputStream = item.openStream();
// Read the file into a byte array.
outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[8192];
int len = 0;
while (-1 != (len = inputStream.read(buffer))) {
outputStream.write(buffer, 0, len);
}
if (filecontent == null) {
filecontent = outputStream.toByteArray();
}
if (FORM_PARAMETER_DELIMITER.equals(item.getFieldName())) {
delimiter = outputStream.toString();
} else if (FORM_PARAMETER_ISFIRSTLINEHEADER.equals(item.getFieldName())) {
if ("on".equals(outputStream.toString())) {
isFirstLineHeader = true;
}
}
}
inputStream.close();
outputStream.close();
} catch (FileUploadException e) {
ExceptionHelper.printStackTrace(e);
} catch (RuntimeException e) {
out.print("Conversion failed. Please check the file. Message :" + e.getMessage());
}
DocumentParameter dp = new DocumentParameter();
dp.setDelimiter(delimiter);
dp.setFirstFieldHeader(isFirstLineHeader);
dp.setData(filecontent);
try {
DocumentOutput dout = documentService.processExcelUpload(dp);
String uploadUUID = DataStore.KEY_LOOKUP_DATA + dout.getUuid();
ApplicationLocalStore.getInstance().store(uploadUUID, uploadUUID, dout.getData());
out.print("UUID=" + uploadUUID);
} catch (Exception e) {
out.print("Conversion failed. Please check the file (" + e.getMessage() + ")");
}
}
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
}
}