CosMultipartHandler.java :  » MVC » nestframework » org » nestframework » core » Java Open Source

Java Open Source » MVC » nestframework 
nestframework » org » nestframework » core » CosMultipartHandler.java
/**
 * 
 */
package org.nestframework.core;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.nestframework.action.FileItem;
import org.nestframework.action.FileUploadLimitExceededException;

import com.oreilly.servlet.MultipartRequest;

/**
 * Multipart handler using cos.
 * 
 * @author audin
 *
 */
@SuppressWarnings("unchecked")
public class CosMultipartHandler implements IMultipartHandler {
  
  /** Pattern used to parse useful info out of the IOException cos throws. */
  private static Pattern EXCEPTION_PATTERN = Pattern
      .compile("Posted content length of (\\d*) exceeds limit of (\\d*)");
  
  private static final String FILENAME_SEPERATOR = "\\$";
  
  /* (non-Javadoc)
   * @see org.nestframework.core.IMultipartHandler#processMultipart(org.nestframework.core.ExecuteContext, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
   */
  public void processMultipart(ExecuteContext context,
      File tempDir, int maxPostSize,
      HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    try {
      MultipartRequest mreq = new MultipartRequest(req, tempDir
          .getAbsolutePath(), maxPostSize, req.getCharacterEncoding());

      // handle parameters
      Map<String, String[]> params = new HashMap<String, String[]>();
      Enumeration<String> parameterNames = mreq.getParameterNames();
      while (parameterNames.hasMoreElements()) {
        String paramName = parameterNames.nextElement();
        params.put(paramName, mreq.getParameterValues(paramName));
      }
      context.setParams(params);

      // handle files
      Map<String, List<FileItem>> files = new HashMap<String, List<FileItem>>();
      Map<String, FileItem[]> fileItems = new HashMap<String, FileItem[]>();
      Enumeration<String> fileNames = mreq.getFileNames();
      while (fileNames.hasMoreElements()) {
        String fileName = fileNames.nextElement();
        String[] fNames = fileName.split(FILENAME_SEPERATOR);
        List<FileItem> fList = files.get(fNames[0]);
        if (fList == null) {
          fList = new ArrayList<FileItem>();
          files.put(fNames[0], fList);
        }
        fList.add(new FileItem(mreq.getFile(fileName),
            mreq.getContentType(fileName), mreq
                .getOriginalFileName(fileName)));
        
//        fileItems.put(fileName, new FileItem(mreq.getFile(fileName),
//            mreq.getContentType(fileName), mreq
//                .getOriginalFileName(fileName)));
      }
      for (String fileName : files.keySet()) {
        fileItems.put(fileName, files.get(fileName).toArray(new FileItem[0]));
      }
      
      context.setUploadedFiles(fileItems);
    } catch (IOException e) {
      Matcher matcher = EXCEPTION_PATTERN.matcher(e.getMessage());

      if (matcher.matches()) {
        throw new FileUploadLimitExceededException(Long
            .parseLong(matcher.group(2)), Long.parseLong(matcher
            .group(1)));
      } else {
        throw e;
      }
    }
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.