package com.kth.baasio.entity.file.multipart;
import com.kth.baasio.exception.BaasioError;
import org.apache.http.util.ByteArrayBuffer;
import org.apache.http.util.EncodingUtils;
import java.io.UnsupportedEncodingException;
/**
* Parent class for FilePart and StringPart.
*
* @author <a href="mailto:vit at cleverua.com">Vitaliy Khudenko</a>
*/
/* package */abstract class BasePart implements Part {
protected static final byte[] CRLF = EncodingUtils.getAsciiBytes(MultipartEntity.CRLF);
protected interface IHeadersProvider {
public String getContentDisposition();
public String getContentType();
public String getContentTransferEncoding();
}
protected IHeadersProvider headersProvider; // must be initialized in
// descendant constructor
private byte[] header;
protected byte[] getHeader(Boundary boundary) {
if (header == null) {
header = generateHeader(boundary); // lazy init
}
return header;
}
private byte[] generateHeader(Boundary boundary) {
if (headersProvider == null) {
throw new RuntimeException(BaasioError.ERROR_FILE_MULTIPART_FORM_UNINIT_HEADERSPROVIDER); //$NON-NLS-1$
}
final ByteArrayBuffer buf = new ByteArrayBuffer(256);
append(buf, boundary.getStartingBoundary());
try {
append(buf, headersProvider.getContentDisposition().getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
append(buf, headersProvider.getContentDisposition());
}
append(buf, CRLF);
append(buf, headersProvider.getContentType());
append(buf, CRLF);
append(buf, headersProvider.getContentTransferEncoding());
append(buf, CRLF);
append(buf, CRLF);
return buf.toByteArray();
}
private static void append(ByteArrayBuffer buf, String data) {
append(buf, EncodingUtils.getAsciiBytes(data));
}
private static void append(ByteArrayBuffer buf, byte[] data) {
buf.append(data, 0, data.length);
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("\n");
builder.append(headersProvider.getContentDisposition());
builder.append("\n");
builder.append(headersProvider.getContentType());
builder.append("\n");
builder.append(headersProvider.getContentTransferEncoding());
builder.append("\n");
return builder.toString();
}
}