Package juzu.plugin.upload

Source Code of juzu.plugin.upload.FileUploadUnmarshaller

/*
* Copyright 2013 eXo Platform SAS
*
* 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 juzu.plugin.upload;

import juzu.impl.request.ContextualParameter;
import juzu.impl.request.EntityUnmarshaller;
import juzu.request.ClientContext;
import juzu.request.RequestParameter;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* @author Julien Viet
*/
public class FileUploadUnmarshaller extends EntityUnmarshaller {

  @Override
  public boolean accept(String mediaType) {
    return mediaType.startsWith("multipart/");
  }

  @Override
  public void unmarshall(
      String mediaType,
      final ClientContext context,
      Iterable<Map.Entry<ContextualParameter, Object>> contextualArguments,
      Map<String, RequestParameter> parameterArguments) throws IOException {

    org.apache.commons.fileupload.RequestContext ctx = new org.apache.commons.fileupload.RequestContext() {
      public String getCharacterEncoding() {
        return context.getCharacterEncoding();
      }
      public String getContentType() {
        return context.getContentType();
      }
      public int getContentLength() {
        return context.getContentLenth();
      }
      public InputStream getInputStream() throws IOException {
        return context.getInputStream();
      }
    };

    //
    FileUpload upload = new FileUpload(new DiskFileItemFactory());
    try {
      List<FileItem> list = (List<FileItem>)upload.parseRequest(ctx);
      HashMap<String, FileItem> files = new HashMap<String, FileItem>();
      for (FileItem file : list) {
        String name = file.getFieldName();
        if (file.isFormField()) {
          RequestParameter parameterArg = parameterArguments.get(name);
          if (parameterArg == null) {
            parameterArguments.put(name, RequestParameter.create(name, file.getString()));
          } else {
            parameterArguments.put(name, parameterArg.append(new String[]{file.getString()}));
          }
        } else {
          files.put(name, file);
        }
      }
      for (Map.Entry<ContextualParameter, Object> argument : contextualArguments) {
        ContextualParameter contextualParam = argument.getKey();
        FileItem file = files.get(contextualParam.getName());
        if (file != null && FileItem.class.isAssignableFrom(contextualParam.getType())) {
          argument.setValue(file);
        }
      }
    }
    catch (FileUploadException e) {
      throw new IOException(e);
    }
  }
}
TOP

Related Classes of juzu.plugin.upload.FileUploadUnmarshaller

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.