package net.autosauler.ballance.server;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.autosauler.ballance.server.model.Configuration;
import net.autosauler.ballance.shared.UserRole;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.allen_sauer.gwt.log.client.Log;
public class ConfigurationServlet extends HttpServlet {
private static final long serialVersionUID = 1475747129190231475L;
private boolean isMultipart;
/** The file items. */
private List<FileItem> items = null;
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
UserRole role = getRole(req);
if (role.isAdmin()) {
String cmd = req.getParameter("cmd");
if (cmd.equals("download")) {
downloadConfiguration(req, resp);
}
}
}
@SuppressWarnings("unchecked")
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
UserRole role = getRole(req);
String domain = getDomain(req);
if (role.isAdmin()) {
isMultipart = ServletFileUpload.isMultipartContent(req);
if (isMultipart) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
items = upload.parseRequest(req);
} catch (FileUploadException e) {
Log.error(e.getMessage());
}
String cmd = get(req, "cmd");
if (cmd.equals("upload")) {
uploadConfiguration(domain, items, resp);
}
}
}
}
private void downloadConfiguration(HttpServletRequest req,
HttpServletResponse resp) throws IOException {
ServletOutputStream outStream = resp.getOutputStream();
resp.setContentType("application/octet-stream");
Configuration conf = new Configuration(getDomain(req));
conf.createDownloadFile();
resp.setHeader("Content-Disposition",
"attachment;filename=" + conf.getDownloadFileName());
resp.setContentLength(conf.getDownloadFileSize());
File f = conf.getFile();
FileInputStream fileIn = null;
try {
fileIn = new FileInputStream(f);
byte[] outputByte = new byte[4096];
// copy binary contect to output stream
int n = 0;
while ((n = fileIn.read(outputByte, 0, 4096)) != -1) {
outStream.write(outputByte, 0, n);
}
fileIn.close();
outStream.flush();
outStream.close();
} catch (FileNotFoundException e) {
try {
resp.sendError(500);
} catch (IOException e1) {
}
} catch (IOException e) {
try {
resp.sendError(500);
} catch (IOException e1) {
}
}
if (f != null) {
f.delete();
}
}
/**
* Gets the.
*
* @param param
* the param
* @return the string
*/
private String get(HttpServletRequest req, String param) {
String text = "";
if (isMultipart) {
if (items != null) {
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
if (item.isFormField()) {
String name = item.getFieldName();
String val = item.getString();
if (name.equals(param)) {
text = val;
}
}
}
}
} else {
text = req.getParameter(param);
}
return text;
}
/**
* Gets the domain.
*
* @return the domain
*/
private String getDomain(HttpServletRequest req) {
HttpSession httpSession = req.getSession();
String domain = HttpUtilities.getUserDomain(httpSession);
return domain;
}
/**
* Gets the role.
*
* @return the role
*/
private UserRole getRole(HttpServletRequest req) {
HttpSession httpSession = req.getSession();
UserRole role = HttpUtilities.getUserRole(httpSession);
return role;
}
private FileItem getUploadedFileItem(String param) {
if (isMultipart) {
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
String name = item.getFieldName();
if (name.equals(param)) {
return item;
}
}
}
return null;
}
private void uploadConfiguration(String domain, List<FileItem> items2,
HttpServletResponse resp) {
FileItem item = getUploadedFileItem("f");
if (item != null) {
File file;
try {
Configuration conf = new Configuration(domain);
file = File.createTempFile("uploadconfiguration", ".zip");
item.write(file);
conf.updateConfiguration(file);
} catch (IOException e) {
Log.error(e.getMessage());
} catch (Exception e) {
Log.error(e.getMessage());
}
}
}
}