Author: raintang
Date: 2009-08-20 03:51:18 +0200 (Thu, 20 Aug 2009)
New Revision: 38051

Removed:
   
CMSContainer/trunk/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AbstractUploadAction.java
Modified:
   
CMSContainer/trunk/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/AssetElementUtil.java
   
CMSContainer/trunk/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AssetUploadAction.java
Log:
CMSC-1472  Improve bulk image and attachment upload to show failed files in 
branch1.6 and trunk

Modified: 
CMSContainer/trunk/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/AssetElementUtil.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/AssetElementUtil.java
  2009-08-20 01:47:25 UTC (rev 38050)
+++ 
CMSContainer/trunk/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/AssetElementUtil.java
  2009-08-20 01:51:18 UTC (rev 38051)
@@ -7,19 +7,28 @@
  */
 package com.finalist.cmsc.repository;
 
+import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Properties;
+import java.util.Set;
 
 import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.struts.upload.FormFile;
 import org.mmbase.bridge.Cloud;
 import org.mmbase.bridge.Field;
 import org.mmbase.bridge.Node;
+import org.mmbase.bridge.NodeList;
 import org.mmbase.bridge.NodeManager;
 import org.mmbase.bridge.NodeManagerList;
 import org.mmbase.bridge.NodeQuery;
@@ -31,9 +40,15 @@
 import org.mmbase.storage.search.CompositeConstraint;
 import org.mmbase.storage.search.Constraint;
 import org.mmbase.storage.search.FieldCompareConstraint;
+import org.mmbase.util.transformers.ByteToCharTransformer;
+import org.mmbase.util.transformers.ChecksumFactory;
 
 import com.finalist.cmsc.mmbase.PropertiesUtil;
 import com.finalist.cmsc.security.SecurityUtil;
+import com.finalist.cmsc.services.versioning.Versioning;
+import com.finalist.cmsc.services.versioning.VersioningException;
+import com.finalist.cmsc.services.workflow.Workflow;
+import com.finalist.util.http.BulkUploadUtil;
 
 public final class AssetElementUtil {
 
@@ -58,14 +73,18 @@
 
    private static final String PROPERTY_HIDDEN_ASSET_TYPES = 
"system.assettypes.hide";
 
+   public static final String CONFIGURATION_RESOURCE_NAME = 
"/com/finalist/util/http/util.properties";
+   protected static Set<String> supportedImages;
+   protected static final Log log = LogFactory.getLog(AssetElementUtil.class);
+
    private AssetElementUtil() {
       // utility
    }
-   
+
    public static NodeManager getNodeManager(Cloud cloud) {
       return cloud.getNodeManager(ASSETELEMENT);
    }
-   
+
    public static List<NodeManager> getAssetTypes(Cloud cloud) {
       List<NodeManager> result = new ArrayList<NodeManager>();
       NodeManagerList nml = cloud.getNodeManagers();
@@ -135,9 +154,9 @@
 
    /**
     * Add owner
-    *
-    * @param asset -
-    *           asset
+    * 
+    * @param asset
+    *           - asset
     */
    public static void addOwner(Node asset) {
       Cloud cloud = asset.getCloud();
@@ -149,9 +168,9 @@
 
    /**
     * Check if a assetnode has an owner
-    *
-    * @param asset -
-    *           Asset Node
+    * 
+    * @param asset
+    *           - Asset Node
     * @return true if the node has a related workflowitem
     */
    public static boolean hasOwner(Node asset) {
@@ -249,7 +268,7 @@
       }
       return list;
    }
-   
+
    public static List<Node> findAssetRelatedNodes(Node node) {
 
       List<Node> nodes = new ArrayList<Node>();
@@ -262,4 +281,115 @@
       }
       return nodes;
    }
+
+   protected static void initSupportedImages() {
+      supportedImages = new HashSet<String>();
+      Properties properties = new Properties();
+      String images = ".bmp,.jpg,.jpeg,.gif,.png,.svg,.tiff,.tif";
+      try {
+         
properties.load(BulkUploadUtil.class.getResourceAsStream(CONFIGURATION_RESOURCE_NAME));
+         images = (String) properties.get("supportedImages");
+      } catch (IOException ex) {
+         log.warn("Could not load properties from " + 
CONFIGURATION_RESOURCE_NAME + ", using defaults", ex);
+      }
+      for (String image : images.split(",")) {
+         supportedImages.add(image.trim());
+      }
+   }
+
+   /**
+    * Determine whether the file is an image file
+    * 
+    * @param fileName
+    * @return
+    */
+   protected static boolean isImage(String fileName) {
+      if (StringUtils.isBlank(fileName)) {
+         return false;
+      }
+      if (supportedImages == null) {
+         initSupportedImages();
+      }
+      return 
supportedImages.contains(getFilenameExtension(fileName).toLowerCase());
+   }
+
+   /**
+    * 
+    * @param fileName
+    * @return
+    */
+   protected static String getFilenameExtension(String fileName) {
+      if (StringUtils.isBlank(fileName)) {
+         return null;
+      }
+      int index = fileName.lastIndexOf('.');
+      if (index < 0) {
+         return null;
+      }
+      return fileName.substring(index);
+   }
+
+   /**
+    * Determine whether the file is already in the system
+    * 
+    * @param file
+    * @param manager
+    * @return
+    */
+   public static boolean isNewFile(FormFile file, NodeManager manager) {
+      ChecksumFactory checksumFactory = new ChecksumFactory();
+      ByteToCharTransformer transformer = (ByteToCharTransformer) 
checksumFactory.createTransformer(checksumFactory
+            .createParameters());
+      String checkSum = null;
+      try {
+         checkSum = transformer.transform(file.getFileData());
+      } catch (FileNotFoundException e) {
+         log.warn("Uploading file is not found!");
+         e.printStackTrace();
+      } catch (IOException e) {
+         e.printStackTrace();
+      }
+      NodeQuery query = manager.createQuery();
+      SearchUtil.addEqualConstraint(query, manager.getField("checksum"), 
checkSum);
+      NodeList assets = query.getList();
+      return (assets.size() == 0);
+   }
+
+   /**
+    * 
+    * @param nodes
+    * @param cloud
+    * @throws NotFoundException
+    * @throws VersioningException
+    */
+   public static void addRelationsForNodes(List<Integer> nodes, Cloud cloud) 
throws NotFoundException,
+         VersioningException {
+      if (nodes != null && nodes.size() > 0) {
+         for (Integer node : nodes) {
+            Node assetNode = cloud.getNode(node);
+            if (!Workflow.hasWorkflow(assetNode)) {
+               Workflow.create(assetNode, "");
+            } else {
+               Workflow.addUserToWorkflow(assetNode);
+            }
+            Versioning.addVersion(cloud.getNode(node));
+         }
+      }
+   }
+
+   /**
+    * determine the type of an asset file
+    * 
+    * @param fileName
+    * @return
+    */
+   public static String judgeAssetType(String fileName) {
+      String assetType = "";
+      if (isImage(fileName)) {
+         assetType = "images";
+      } else {
+         assetType = "attachments";
+      }
+      return assetType;
+   }
 }

Deleted: 
CMSContainer/trunk/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AbstractUploadAction.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AbstractUploadAction.java
        2009-08-20 01:47:25 UTC (rev 38050)
+++ 
CMSContainer/trunk/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AbstractUploadAction.java
        2009-08-20 01:51:18 UTC (rev 38051)
@@ -1,115 +0,0 @@
-package com.finalist.cmsc.repository.forms;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.upload.FormFile;
-import org.mmbase.bridge.Cloud;
-import org.mmbase.bridge.Node;
-import org.mmbase.bridge.NodeList;
-import org.mmbase.bridge.NodeManager;
-import org.mmbase.bridge.NodeQuery;
-import org.mmbase.bridge.NotFoundException;
-import org.mmbase.bridge.util.SearchUtil;
-import org.mmbase.util.transformers.ByteToCharTransformer;
-import org.mmbase.util.transformers.ChecksumFactory;
-
-import com.finalist.cmsc.services.versioning.Versioning;
-import com.finalist.cmsc.services.versioning.VersioningException;
-import com.finalist.cmsc.services.workflow.Workflow;
-import com.finalist.cmsc.struts.MMBaseAction;
-import com.finalist.util.http.BulkUploadUtil;
-
-public abstract class AbstractUploadAction extends MMBaseAction {
-
-   public static final String CONFIGURATION_RESOURCE_NAME = 
"/com/finalist/util/http/util.properties";
-   protected static Set<String> supportedImages;
-
-   protected static final Log log = 
LogFactory.getLog(AbstractUploadAction.class);
-
-   @Override
-   public abstract ActionForward execute(ActionMapping mapping, ActionForm 
form, HttpServletRequest request,
-         HttpServletResponse response, Cloud cloud) throws Exception;
-
-   protected static void initSupportedImages() {
-      supportedImages = new HashSet<String>();
-      Properties properties = new Properties();
-      String images = ".bmp,.jpg,.jpeg,.gif,.png,.svg,.tiff,.tif";
-      try {
-         
properties.load(BulkUploadUtil.class.getResourceAsStream(CONFIGURATION_RESOURCE_NAME));
-         images = (String) properties.get("supportedImages");
-      } catch (IOException ex) {
-         log.warn("Could not load properties from " + 
CONFIGURATION_RESOURCE_NAME + ", using defaults", ex);
-      }
-      for (String image : images.split(",")) {
-         supportedImages.add(image.trim());
-      }
-   }
-
-   protected static boolean isImage(String fileName) {
-      if (StringUtils.isBlank(fileName)) {
-         return false;
-      }
-      if (supportedImages == null) {
-         initSupportedImages();
-      }
-      return 
supportedImages.contains(getFilenameExtension(fileName).toLowerCase());
-   }
-
-   protected static String getFilenameExtension(String fileName) {
-      if (StringUtils.isBlank(fileName)) {
-         return null;
-      }
-      int index = fileName.lastIndexOf('.');
-      if (index < 0) {
-         return null;
-      }
-      return fileName.substring(index);
-   }
-
-   public boolean isNewFile(FormFile file, NodeManager manager) {
-      ChecksumFactory checksumFactory = new ChecksumFactory();
-      ByteToCharTransformer transformer = (ByteToCharTransformer) 
checksumFactory.createTransformer(checksumFactory
-            .createParameters());
-      String checkSum = null;
-      try {
-         checkSum = transformer.transform(file.getFileData());
-      } catch (FileNotFoundException e) {
-         log.warn("Uploading file is not found!");
-         e.printStackTrace();
-      } catch (IOException e) {
-         e.printStackTrace();
-      }
-      NodeQuery query = manager.createQuery();
-      SearchUtil.addEqualConstraint(query, manager.getField("checksum"), 
checkSum);
-      NodeList assets = query.getList();
-      return (assets.size() == 0);
-   }
-
-   public void addRelationsForNodes(List<Integer> nodes, Cloud cloud) throws 
NotFoundException, VersioningException {
-      if (nodes != null && nodes.size() > 0) {
-         for (Integer node : nodes) {
-            Node assetNode = cloud.getNode(node);
-            if (!Workflow.hasWorkflow(assetNode)) {
-               Workflow.create(assetNode, "");
-            } else {
-               Workflow.addUserToWorkflow(assetNode);
-            }
-            Versioning.addVersion(cloud.getNode(node));
-         }
-      }
-   }
-}

Modified: 
CMSContainer/trunk/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AssetUploadAction.java
===================================================================
--- 
CMSContainer/trunk/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AssetUploadAction.java
   2009-08-20 01:47:25 UTC (rev 38050)
+++ 
CMSContainer/trunk/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AssetUploadAction.java
   2009-08-20 01:51:18 UTC (rev 38051)
@@ -1,75 +1,74 @@
-package com.finalist.cmsc.repository.forms;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.struts.action.ActionForm;
-import org.apache.struts.action.ActionForward;
-import org.apache.struts.action.ActionMapping;
-import org.apache.struts.upload.FormFile;
-import org.mmbase.bridge.Cloud;
-import org.mmbase.bridge.NodeManager;
-import com.finalist.util.http.BulkUploadUtil;
-
-public class AssetUploadAction extends AbstractUploadAction {
-
-   @Override
-   public ActionForward execute(ActionMapping mapping, ActionForm form, 
HttpServletRequest request,
-         HttpServletResponse response, Cloud cloud) throws Exception {
-
-      AssetUploadForm assetUploadForm = (AssetUploadForm) form;
-      String parentchannel = assetUploadForm.getParentchannel();
-      FormFile file = assetUploadForm.getFile();
-
-      String url = "";
-      int fileSize = file.getFileSize();
-      int failed = 0;
-      int uploaded = 0;
-      List<String> notUploadedFiles = new ArrayList<String>();
-      List<String> uploadedFiles = new ArrayList<String>();
-
-      if ((BulkUploadUtil.maxFileSizeBiggerThan(fileSize) || 
BulkUploadUtil.isZipFile(file.getContentType(), file
-            .getFileName()))
-            && fileSize != 0 && StringUtils.isNotEmpty(file.getFileName())) {
-         String assetType = "";
-         if (isImage(file.getFileName())) {
-            assetType = "images";
-         } else {
-            assetType = "attachments";
-         }
-
-         NodeManager manager = cloud.getNodeManager(assetType);
-
-         if (isNewFile(file, manager)) {
-            List<Integer> nodes = null;
-            nodes = BulkUploadUtil.store(cloud, manager, parentchannel, file, 
notUploadedFiles, uploadedFiles);
-            // to archive the upload asset
-            if (nodes != null) {
-               addRelationsForNodes(nodes, cloud);
-               uploaded = nodes.size();
-            }
-         } else {
-            notUploadedFiles.add(file.getFileName());
-         }
-      }
-      failed = notUploadedFiles.size();
-      uploaded = uploadedFiles.size();
-
-      if (notUploadedFiles != null) {
-         request.getSession().setAttribute("notUploadedFiles", 
notUploadedFiles);
-      }
-      if (uploadedFiles != null) {
-         request.getSession().setAttribute("uploadedFiles", uploadedFiles);
-      }
-      request.getSession().setAttribute("uploadingDone", "yes");
-
-      url = mapping.findForward(SUCCESS).getPath() + 
"?type=asset&direction=down" + "&parentchannel=" + parentchannel
-            + "&failed=" + failed + "&uploaded=" + uploaded;
-
-      return new ActionForward(url, true);
-   }
-}
+package com.finalist.cmsc.repository.forms;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
+import org.apache.struts.upload.FormFile;
+import org.mmbase.bridge.Cloud;
+import org.mmbase.bridge.NodeManager;
+
+import com.finalist.cmsc.repository.AssetElementUtil;
+import com.finalist.cmsc.struts.MMBaseAction;
+import com.finalist.util.http.BulkUploadUtil;
+
+public class AssetUploadAction extends MMBaseAction {
+
+   @Override
+   public ActionForward execute(ActionMapping mapping, ActionForm form, 
HttpServletRequest request,
+         HttpServletResponse response, Cloud cloud) throws Exception {
+
+      AssetUploadForm assetUploadForm = (AssetUploadForm) form;
+      String parentchannel = assetUploadForm.getParentchannel();
+      FormFile file = assetUploadForm.getFile();
+
+      List<String> notUploadedFiles = new ArrayList<String>();
+      List<String> uploadedFiles = new ArrayList<String>();
+
+      if (isValidFile(file)) {
+         String assetType = 
AssetElementUtil.judgeAssetType(file.getFileName());
+         NodeManager manager = cloud.getNodeManager(assetType);
+
+         if (AssetElementUtil.isNewFile(file, manager)) {
+            List<Integer> nodes = BulkUploadUtil.store(cloud, manager, 
parentchannel, file, notUploadedFiles,
+                  uploadedFiles);
+            // to archive the upload asset
+            if (nodes != null) {
+               AssetElementUtil.addRelationsForNodes(nodes, cloud);
+            }
+         } else {
+            notUploadedFiles.add(file.getFileName());
+         }
+      }
+      addToSession(request, "notUploadedFiles", notUploadedFiles);
+      addToSession(request, "uploadedFiles", uploadedFiles);
+      addToSession(request, "uploadingDone", "yes");
+
+      String url = mapping.findForward(SUCCESS).getPath() + 
"?type=asset&direction=down" + "&parentchannel="
+            + parentchannel + "&failed=" + notUploadedFiles.size() + 
"&uploaded=" + uploadedFiles.size();
+
+      return new ActionForward(url, true);
+   }
+
+   private boolean isValidFile(FormFile file) {
+      return (BulkUploadUtil.maxFileSizeBiggerThan(file.getFileSize()) || 
BulkUploadUtil.isZipFile(file
+            .getContentType(), file.getFileName()))
+            && file.getFileSize() != 0 && 
StringUtils.isNotEmpty(file.getFileName());
+   }
+
+   public static void addToSession(HttpServletRequest request, String name, 
List<String> value) {
+      if (value != null) {
+         request.getSession().setAttribute(name, value);
+      }
+   }
+
+   public static void addToSession(HttpServletRequest request, String name, 
String value) {
+      request.getSession().setAttribute(name, value);
+   }
+}

_______________________________________________
Cvs mailing list
Cvs@lists.mmbase.org
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to