package org.jboss.resteasy.plugins.providers.multipart;
import org.apache.james.mime4j.field.ContentTypeField;
import org.apache.james.mime4j.field.FieldName;
import org.apache.james.mime4j.message.BodyPart;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.Providers;
import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* Implements {@link MultipartRelatedInput} by extending
* {@link MultipartInputImpl} and adding multipart/related functionality.
*
* @author Attila Kiraly
* @version $Revision: 1 $
*/
public class MultipartRelatedInputImpl extends MultipartInputImpl implements
MultipartRelatedInput {
private Map<String, InputPart> relatedMap = new LinkedHashMap<String, InputPart>();
private String start;
private String startInfo;
private String type;
private InputPart rootPart;
public MultipartRelatedInputImpl(MediaType contentType, Providers workers) {
super(contentType, workers);
}
@Override
public void parse(InputStream is) throws IOException {
super.parse(is);
ContentTypeField contentTypeField = (ContentTypeField) mimeMessage
.getHeader().getField(FieldName.CONTENT_TYPE);
start = contentTypeField.getParameter("start");
startInfo = contentTypeField.getParameter("start-info");
type = contentTypeField.getParameter("type");
rootPart = start == null ? getParts().get(0) : relatedMap.get(start);
}
@Override
protected InputPart extractPart(BodyPart bodyPart) throws IOException {
InputPart inputPart = super.extractPart(bodyPart);
relatedMap
.put(inputPart.getHeaders().getFirst("Content-ID"), inputPart);
return inputPart;
}
public Map<String, InputPart> getRelatedMap() {
return relatedMap;
}
public InputPart getRootPart() {
return rootPart;
}
public String getStart() {
return start;
}
public String getStartInfo() {
return startInfo;
}
public String getType() {
return type;
}
}