Package org.jboss.resteasy.plugins.providers.multipart

Source Code of org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInputImpl

package org.jboss.resteasy.plugins.providers.multipart;

import java.io.IOException;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.Providers;

import org.apache.james.mime4j.field.ContentDispositionField;
import org.apache.james.mime4j.field.FieldName;
import org.apache.james.mime4j.message.BodyPart;
import org.apache.james.mime4j.parser.Field;
import org.jboss.resteasy.util.GenericType;

/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class MultipartFormDataInputImpl extends MultipartInputImpl implements
    MultipartFormDataInput {
  protected Map<String, InputPart> formData = new HashMap<String, InputPart>();
  protected Map<String, List<InputPart>> formDataMap = new HashMap<String, List<InputPart>>();

  public MultipartFormDataInputImpl(MediaType contentType, Providers workers) {
    super(contentType, workers);
  }

  @Deprecated
  public Map<String, InputPart> getFormData() {
    return formData;
  }

  public Map<String, List<InputPart>> getFormDataMap() {
    return formDataMap;
  }

  public <T> T getFormDataPart(String key, Class<T> rawType, Type genericType)
      throws IOException {
    List<InputPart> list = getFormDataMap().get(key);
    if (list == null || list.isEmpty())
      return null;
    InputPart part = list.get(0);
    if (part == null)
      return null;
    return part.getBody(rawType, genericType);
  }

  public <T> T getFormDataPart(String key, GenericType<T> type)
      throws IOException {
    List<InputPart> list = getFormDataMap().get(key);
    if (list == null || list.isEmpty())
      return null;
    InputPart part = list.get(0);
    if (part == null)
      return null;
    return part.getBody(type);
  }

  @Override
  protected InputPart extractPart(BodyPart bodyPart) throws IOException {
    InputPart currPart = super.extractPart(bodyPart);
    Field disposition = bodyPart.getHeader().getField(
        FieldName.CONTENT_DISPOSITION);
    if (disposition == null)
      throw new RuntimeException(
          "Could find no Content-Disposition header within part");
    if (disposition instanceof ContentDispositionField) {
      String name = ((ContentDispositionField) disposition)
          .getParameter("name");
      List<InputPart> list = formDataMap.get(name);
      if (list == null) {
        list = new LinkedList<InputPart>();
        formData.put(name, currPart);
        formDataMap.put(name, list);
      }
      list.add(currPart);
    } else {
      throw new RuntimeException(
          "Could not parse Content-Disposition for MultipartFormData: "
              + disposition);
    }

    return currPart;
  }

}
TOP

Related Classes of org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInputImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.