package org.solmix.fmk.upload;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemHeaders;
import org.solmix.commons.io.ByteCountingOutputStream;
import org.solmix.commons.io.IByteCounter;
import org.solmix.commons.util.IOUtils;
public class UploadItem implements FileItem
{
private static final long serialVersionUID = 5709803430443515506L;
private FileItemHeaders header;
public UploadItem(String fieldName)
{
expectedSize = -1L;
this.fieldName = fieldName;
}
public UploadItem(String fieldName, String contentType, boolean isFormField, String fileName, IByteCounter byteCounter)
{
this(fieldName);
this.contentType = contentType;
this.isFormField = isFormField;
this.fileName = fileName;
this.byteCounter = byteCounter;
}
@Override
public void delete() {
}
@Override
public byte[] get() {
return data.toByteArray();
}
@Override
public String getContentType() {
return contentType;
}
@Override
public String getFieldName() {
return fieldName;
}
@Override
public void setFieldName(String name) {
fieldName = name;
}
@Override
public String getName() {
return fileName;
}
@Override
public InputStream getInputStream() {
return new ByteArrayInputStream(get());
}
@Override
public OutputStream getOutputStream() throws IOException {
if (os == null) {
data = new ByteArrayOutputStream();
os = data;
if (byteCounter != null)
os = new ByteCountingOutputStream(data, byteCounter);
}
return os;
}
@Override
public long getSize() {
return data.size();
}
@Override
public String getString() {
return new String(get());
}
@Override
public String getString(String encoding) throws UnsupportedEncodingException {
return new String(get(), encoding);
}
@Override
public boolean isFormField() {
return isFormField;
}
@Override
public void setFormField(boolean state) {
isFormField = state;
}
@Override
public boolean isInMemory() {
return true;
}
@Override
public void write(File file) throws Exception {
IOUtils.copyStreams(getInputStream(), new FileOutputStream(file));
}
public void setTotalSize(long size) {
expectedSize = size;
}
public long getTotalSize() {
if (expectedSize == -1L && byteCounter != null)
setTotalSize(byteCounter.getTotalBytes());
return expectedSize;
}
public String getFileName() {
return getName();
}
public void setFileName(String name) {
fileName = name;
}
public String getShortFileName() {
return shortFileName;
}
public void setShortFileName(String name) {
shortFileName = name;
}
@SuppressWarnings("rawtypes")
public void setErrors(List errors) {
byteCounter.setErrors(errors);
}
@SuppressWarnings("rawtypes")
public List getErrors() {
return byteCounter.getErrors();
}
String fieldName;
String contentType;
boolean isFormField;
String fileName;
OutputStream os;
ByteArrayOutputStream data;
IByteCounter byteCounter;
long expectedSize;
String shortFileName;
/**
* {@inheritDoc}
*
* @see org.apache.commons.fileupload.FileItemHeadersSupport#getHeaders()
*/
@Override
public FileItemHeaders getHeaders() {
return header;
}
/**
* {@inheritDoc}
*
* @see org.apache.commons.fileupload.FileItemHeadersSupport#setHeaders(org.apache.commons.fileupload.FileItemHeaders)
*/
@Override
public void setHeaders(FileItemHeaders arg0) {
this.header=arg0;
}
}