Package com.dotmarketing.servlets.image

Source Code of com.dotmarketing.servlets.image.ImageToolAjaxServlet

package com.dotmarketing.servlets.image;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;

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

import com.dotcms.enterprise.LicenseUtil;
import com.dotcms.util.SecurityUtils;
import com.dotmarketing.beans.Host;
import com.dotmarketing.beans.Identifier;
import com.dotmarketing.business.APILocator;
import com.dotmarketing.business.DotStateException;
import com.dotmarketing.business.PermissionAPI;
import com.dotmarketing.business.web.WebAPILocator;
import com.dotmarketing.cache.WorkingCache;
import com.dotmarketing.cms.factories.PublicEncryptionFactory;
import com.dotmarketing.portlets.contentlet.model.Contentlet;
import com.dotmarketing.portlets.fileassets.business.FileAssetAPI;
import com.dotmarketing.portlets.files.business.FileAPI;
import com.dotmarketing.portlets.files.model.File;
import com.dotmarketing.portlets.folders.model.Folder;
import com.dotmarketing.servlets.AjaxFileUploadListener;
import com.dotmarketing.servlets.AjaxFileUploadListener.FileUploadStats;
import com.dotmarketing.util.Config;
import com.dotmarketing.util.Constants;
import com.dotmarketing.util.InodeUtils;
import com.dotmarketing.util.Logger;
import com.dotmarketing.util.UtilMethods;
import com.dotmarketing.util.WebKeys;
import com.liferay.portal.model.User;
import com.liferay.util.FileUtil;

/**
* This servlet resize an image proportionally without placing that image into a
* box background. The image generated is with the .png extension
*
* @author WE
*
*/
public class ImageToolAjaxServlet extends HttpServlet {
    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = 1L;
    private static PermissionAPI permissionAPI = APILocator.getPermissionAPI();

    /* This is a thread safe date formatter */
       /**
     * resize an image proportionally without placing that image into a box
     * background. The image generated is with the .png extension
     */
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
     
     
        User user = null;
    try {
      user = com.liferay.portal.util.PortalUtil.getUser(request);
    } catch (Exception e) {
      Logger.warn(this.getClass(), "Unauthorized access to ImageToolAjax from IP + "+ request.getRemoteAddr() +", no user found");
    }
      if(user ==null || "100".equals(LicenseUtil.getLevel())){
        response.getWriter().println("Unauthorized");
        return;
      }

     
      String fileUrl = request.getParameter("fileUrl");
      String inode = request.getParameter("inode");
      String action = request.getParameter("action");
      String fileName = request.getParameter("fileName");
      String binaryFieldId = request.getParameter("binaryFieldId");
     
      if("reset".equals(action)){
      request.getSession().removeAttribute(WebKeys.IMAGE_TOOL_SAVE_FILES);
        return ;
      }else if("download".equals(action)){
        doDownload(fileUrl, request, response);
        return ;
      }
    else if("saveAs".equals(action)){
        doSaveAs(request, response, inode, fileName);
      }
      else if("save".equals(action)){
        doSave(request, response, inode, binaryFieldId, fileName);
      }
      else if("setClipboard".equals(action)){
        setClipboard(fileUrl, request, response);
      }
      else if("getClipboard".equals(action)){
        getClipboard(fileUrl, request, response);
      }
  
    }
   
   
    private void setClipboard(String fileUrl, HttpServletRequest request, HttpServletResponse response) throws IOException{
     
      List<String> list = (List<String>) request.getSession().getAttribute(WebKeys.IMAGE_TOOL_CLIPBOARD);
      if(list ==null){
        list = new ArrayList<String>();
      }
      // we only show nine images in clipboard
      if(list.size()>8){
        list = list.subList(0, 8);
      }

      if(list.contains(fileUrl)){
        list.remove(fileUrl);
      }
      list.add(0, fileUrl);
     
     
      request.getSession().setAttribute(WebKeys.IMAGE_TOOL_CLIPBOARD, list);
     

     
      response.getWriter().println("success");
      response.getWriter().println(fileUrl);
    return;
    }
    private void getClipboard(String fileUrl, HttpServletRequest request, HttpServletResponse response) throws IOException{
      List<String> list = (List<String>) request.getSession().getAttribute(WebKeys.IMAGE_TOOL_CLIPBOARD);
      if(list ==null){
        list = new ArrayList<String>();
      }
    return;
    }
   
    private void doDownload(String fileUrl, HttpServletRequest request, HttpServletResponse response) throws IOException{
    fileUrl+=(fileUrl.indexOf("?") < 0) ? "?":"&";
    fileUrl+= "force_download=true&r" +new Random( 1756547574 ).nextInt();
    System.out.println(fileUrl);
    response.sendRedirect(SecurityUtils.stripReferer(request, fileUrl));
    return;
     
     
     
    }
   
    private void doSave(HttpServletRequest request,HttpServletResponse response, String inode, String fieldId, String fileName) throws IOException{
     
     
    String userId = request.getSession().getAttribute("USER_ID").toString();
    //see if we have anything in session from the image tool
    @SuppressWarnings("unchecked")
    java.io.File binaryFile = null;
    String imgToolFile = request.getParameter( WebKeys.IMAGE_TOOL_SAVE_FILES);
    if(UtilMethods.isSet(imgToolFile)){
      String x = PublicEncryptionFactory.decryptString(imgToolFile);
      if(UtilMethods.isSet(x)){
        binaryFile = new java.io.File(x);
        if(binaryFile != null && binaryFile.exists() && binaryFile.length()>0){
          java.io.File tempUserFolder = new java.io.File(APILocator.getFileAPI().getRealAssetPathTmpBinary() + java.io.File.separator + userId +
              java.io.File.separator + fieldId);
          if (!tempUserFolder.exists())
            tempUserFolder.mkdirs();
         
          java.io.File dest = new java.io.File(tempUserFolder.getCanonicalPath() + java.io.File.separator + fileName);
          if(dest.exists())
            dest.delete();
         
          FileUtil.copyFile(binaryFile, dest);
          binaryFile.delete();
          AjaxFileUploadListener listener = new AjaxFileUploadListener(dest.length());
          FileUploadStats fus = listener.getFileUploadStats();
          fus.setBytesRead(dest.length());
          fus.setCurrentStatus("done");
          request.getSession().setAttribute("FILE_UPLOAD_STATS_" + fieldId, null);
          response.getWriter().println("success.  File Saved");
        }
      }
    }
     
     
     
     
    }
   
    private void doSaveAs(HttpServletRequest request, HttpServletResponse response, String inode, String fileName){
     
    if(!UtilMethods.isSet(inode)){
      throw new DotStateException("Cannot find underlying file to 'save as' ");
    }
      User user;
    try {
     
        Map<String, String> imgToolFile = (Map<String, String>) request.getSession().getAttribute(WebKeys.IMAGE_TOOL_SAVE_FILES);
      if(imgToolFile  ==null){
        throw new DotStateException("Cannot find underlying file to 'save as' ");
      }
      java.io.File saveAsIOFile = null;
      if(imgToolFile != null){
       
        for (Map.Entry<String, String> entry : imgToolFile.entrySet()){
          if(WebKeys.EDITED_IMAGE_FILE_ASSET.equals(entry.getKey())){
            saveAsIOFile = new java.io.File(entry.getValue());
            request.getSession().removeAttribute(WebKeys.IMAGE_TOOL_SAVE_FILES);
            break;
          }
        }
      }
      if(saveAsIOFile ==null || ! saveAsIOFile.exists() || saveAsIOFile.length() <60){
        response.getWriter().println("failure.  No Save as file found");
        return;
      }
      java.io.File temp = java.io.File.createTempFile(saveAsIOFile.getName(),UtilMethods.getFileExtension(saveAsIOFile.getName()));
      temp.deleteOnExit();
      FileUtil.copyFile(saveAsIOFile, temp);
     
     
      FileAPI fAPI = APILocator.getFileAPI();
      user = WebAPILocator.getUserWebAPI().getLoggedInUser(request);
      Identifier ident = APILocator.getIdentifierAPI().findFromInode(inode);
        if(ident!=null && InodeUtils.isSet(ident.getId()) && ident.getAssetType().equals("contentlet")){
          Contentlet cont = APILocator.getContentletAPI().findContentletByIdentifier(ident.getId(), true, APILocator.getLanguageAPI().getDefaultLanguage().getId(), user, false);
          if(cont!=null && InodeUtils.isSet(cont.getInode())){
            Host h = APILocator.getHostAPI().find(cont.getHost(), user, false);
          Folder folder = APILocator.getFolderAPI().findFolderByPath(ident.getParentPath(), h, user, false);
          if(APILocator.getFileAssetAPI().fileNameExists(h, folder, fileName, cont.getIdentifier())){
            response.getWriter().println("failure.  fileAlreadyExists");
            return;
          }
          Contentlet fileAsset = new Contentlet();
          fileAsset.setStructureInode(folder.getDefaultFileType());
          fileAsset.setStringProperty(FileAssetAPI.TITLE_FIELD, UtilMethods.getFileName(fileName));
          fileAsset.setFolder(folder.getInode());
          fileAsset.setHost(h.getIdentifier());
          fileAsset.setBinary(FileAssetAPI.BINARY_FIELD, temp);
          APILocator.getContentletAPI().checkin(fileAsset, user,false);
          }
         
        }else{
          File src = fAPI.get(inode,user, false );
          Identifier fileId = APILocator.getIdentifierAPI().find(src.getIdentifier());
        Host h = APILocator.getHostAPI().find(fileId.getHostId(), user, false);
        Folder folder = APILocator.getFileAPI().getFileFolder(src, h, user, false);
        File copiedFile = new File();
        copiedFile.setFileName(fileName);
        copiedFile.setAuthor(user.getFullName());
        copiedFile.setModUser(user.getUserId());
        copiedFile.setFriendlyName(src.getFriendlyName());
        copiedFile.setMimeType(APILocator.getFileAPI().getMimeType(fileName));
        String x = WorkingCache.getPathFromCache(APILocator.getIdentifierAPI().find(folder).getPath() + fileName, h);

       
       
        if(UtilMethods.isSet(x)){
          response.getWriter().println("failure.  fileAlreadyExists");
         
          return;
        }
       


        fAPI.saveFile(copiedFile, temp, folder, user, false);

        }
   
 
      response.getWriter().println("success.  File Saved");
     
      return;
    } catch (Exception e) {
      Logger.error(this.getClass(), e.getMessage());
      Logger.debug(this.getClass(), e.getMessage(), e);
      throw new DotStateException("Error in 'save as' " +e.getMessage() );
    }
    finally{
      request.getSession().removeAttribute(WebKeys.IMAGE_TOOL_SAVE_FILES);
    }
   
     
    }
}
TOP

Related Classes of com.dotmarketing.servlets.image.ImageToolAjaxServlet

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.