PreferenceAction.java :  » Wiki-Engine » ocwiki » org » ocwiki » controller » action » user » Java Open Source

Java Open Source » Wiki Engine » ocwiki 
ocwiki » org » ocwiki » controller » action » user » PreferenceAction.java
package org.ocwiki.controller.action.user;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;

import org.ocwiki.conf.Config;
import org.ocwiki.controller.OcwikiApp;
import org.ocwiki.controller.action.AbstractAction;
import org.ocwiki.controller.action.ActionException;
import org.ocwiki.db.dao.UserDAO;
import org.ocwiki.util.ImageUtils;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;

@SuppressWarnings("rawtypes")
public class PreferenceAction extends AbstractAction {
  private static final String DEST_DIR = "/avatar";
  private File destDir;

  @Override
  protected void performImpl() throws IOException, ServletException {
    title("Tu chn ca " + getUser().getFullname());
    
    String realPath = super.getController().getServletContext()
        .getRealPath(Config.get().getUploadDir() + DEST_DIR);

    destDir = new File(realPath);
    if (!destDir.isDirectory()) {
      throw new ActionException(Config.get().getUploadDir() + DEST_DIR
          + " khong ton tai");
    }

    DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
    diskFileItemFactory.setSizeThreshold((int) Config.get().getMaxAvatarFileBytes());
    diskFileItemFactory.setRepository(OcwikiApp.get().getTemporaryDirectory());
    ServletFileUpload uploadHandler = new ServletFileUpload(
        diskFileItemFactory);
    uploadHandler.setSizeMax(Config.get().getMaxAvatarFileBytes());

    try {
      List itemsList = uploadHandler.parseRequest(request);
      Iterator itr = itemsList.iterator();

      while (itr.hasNext()) {
        FileItem item = (FileItem) itr.next();
        if (!item.isFormField() && check(item)) {
          File uploadedFile = saveImageFile(item);
          getUser().setAvatar(uploadedFile.getName());
          UserDAO.persist(getUser());
        }
        else
          this.addError("File Error", "File khng hp l");
      }
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
  
  public boolean check(FileItem file) {
    // Get filename
    String fileName = file.getName();
    String fileExt = FilenameUtils.getExtension(fileName);
    long fileSize = file.getSize();
    return (fileExt.equalsIgnoreCase("png")
        || fileExt.equalsIgnoreCase("jpg")
        || fileExt.equalsIgnoreCase("jpeg")
        || fileExt.equalsIgnoreCase("gif"))
        && fileSize <= Config.get().getMaxAvatarFileBytes();
  }  

  private File saveImageFile(FileItem originalFileItem)
      throws IOException {
    InputStream inputStream = originalFileItem.getInputStream();
    BufferedImage image = ImageIO.read(inputStream);
    image = ImageUtils.ensureMaxSize(image, Config.get()
        .getMaxAvatarDimension(), Config.get()
        .getMaxAvatarDimension());
    // Java chi ho tro ghi dinh dang png va jpg nen thong nhat luon la
    // png
    String fileName = String.valueOf(getUser().getId() + ".png");
    final File imageFile = new File(destDir + "/" + fileName);
    ImageIO.write(image, "png", imageFile);

    BufferedImage thumbnail = ImageUtils.ensureMaxSize(image, Config.get()
        .getAvatarThumbnailSize(), Config.get()
        .getAvatarThumbnailSize());
    final File thumbnailFile = new File(destDir + "/thumbnail/" + fileName);
    ImageIO.write(thumbnail, "PNG", thumbnailFile);
    
    return imageFile;
  }
}
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.