package org.sothis.mvc.http.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.Part;
import org.apache.commons.io.IOUtils;
public class Servlet31Attachments extends ServletAttachments {
private final Map<String, Object> attachments;
public Servlet31Attachments(HttpServletRequest request) throws IOException, ServletException {
this.attachments = new HashMap<>();
for (Part part : request.getParts()) {
List<ServletPart> parts = (List<ServletPart>) this.attachments.get(part.getName());
if (null == parts) {
parts = new ArrayList<ServletPart>();
this.attachments.put(part.getName(), parts);
}
parts.add(new Servlet31PartWrapper(part));
}
}
@Override
protected Map<String, Object> getAttachments() {
return attachments;
}
private class Servlet31PartWrapper implements ServletPart {
private final Part part;
public Servlet31PartWrapper(Part part) {
super();
this.part = part;
}
@Override
public InputStream getInputStream() throws IOException {
return part.getInputStream();
}
@Override
public String getContentType() {
return part.getContentType();
}
@Override
public String getName() {
return part.getName();
}
@Override
public long getSize() {
return part.getSize();
}
@Override
public void write(String fileName) throws IOException {
part.write(fileName);
}
@Override
public void delete() throws IOException {
part.delete();
}
@Override
public String getHeader(String name) {
return part.getHeader(name);
}
@Override
public Collection<String> getHeaders(String name) {
return part.getHeaders(name);
}
@Override
public Collection<String> getHeaderNames() {
return part.getHeaderNames();
}
@Override
public String getSubmittedFileName() {
return part.getSubmittedFileName();
}
@Override
public boolean isFormField() {
return part.getContentType() == null;
}
@Override
public String getString(String charset) throws IOException {
return IOUtils.toString(part.getInputStream(), charset);
}
}
}