Package org.camunda.bpm.engine.rest.mapper

Source Code of org.camunda.bpm.engine.rest.mapper.MultipartFormData$FormPart

/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.camunda.bpm.engine.rest.mapper;

import org.apache.commons.fileupload.FileItemStream;
import org.camunda.bpm.engine.impl.util.IoUtil;
import org.camunda.bpm.engine.rest.exception.RestException;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response.Status;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
* Custom implementation of Multipart Form Data which can be used for handling requests.
*<p>
* Provides access to the form parts via {@link #getNamedPart(String)}.
*
* @author Daniel Meyer
*
*/
public class MultipartFormData {

  protected Map<String, FormPart> formParts = new HashMap<String, FormPart>();

  public void addPart(FormPart formPart) {
    formParts.put(formPart.getFieldName(), formPart);
  }

  public FormPart getNamedPart(String name) {
    return  formParts.get(name);
  }

  public Set<String> getPartNames() {
    return formParts.keySet();
  }

  /**
   * Dto representing a part in a multipart form.
   *
   */
  public static class FormPart {

    protected String fieldName;
    protected String contentType;
    protected String textContent;
    protected String fileName;
    protected byte[] binaryContent;

    public FormPart(FileItemStream stream) {
      fieldName = stream.getFieldName();
      contentType = stream.getContentType();
      binaryContent = readBinaryContent(stream);
      fileName = stream.getName();

      if(contentType == null || contentType.contains(MediaType.TEXT_PLAIN)) {
        textContent = new String(binaryContent);
      }
    }

    public FormPart() {
    }

    protected byte[] readBinaryContent(FileItemStream stream) {
      InputStream inputStream = getInputStream(stream);
      return IoUtil.readInputStream(inputStream, stream.getFieldName());
    }

    protected InputStream getInputStream(FileItemStream stream) {
      try {
        return stream.openStream();
      } catch (IOException e) {
        throw new RestException(Status.INTERNAL_SERVER_ERROR, e);
      }
    }

    public String getFieldName() {
      return fieldName;
    }

    public String getContentType() {
      return contentType;
    }

    public String getTextContent() {
      return textContent;
    }

    public byte[] getBinaryContent() {
      return binaryContent;
    }

    public String getFileName() {
      return fileName;
    }

  }

}
TOP

Related Classes of org.camunda.bpm.engine.rest.mapper.MultipartFormData$FormPart

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.