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