Author: raintang Date: 2009-08-20 03:52:13 +0200 (Thu, 20 Aug 2009) New Revision: 38052
Removed: CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AbstractUploadAction.java Modified: CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/AssetElementUtil.java CMSContainer/branches/b1_6/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/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/AssetElementUtil.java =================================================================== --- CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/AssetElementUtil.java 2009-08-20 01:51:18 UTC (rev 38051) +++ CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/AssetElementUtil.java 2009-08-20 01:52:13 UTC (rev 38052) @@ -1,267 +1,395 @@ -/* - * - * This software is OSI Certified Open Source Software. OSI Certified is a certification mark of the Open Source - * Initiative. - * - * The license (Mozilla version 1.0) can be read at the MMBase site. See http://www.MMBase.org/license - */ -package com.finalist.cmsc.repository; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.Iterator; -import java.util.List; - -import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory; - -import org.apache.commons.lang.StringUtils; -import org.mmbase.bridge.Cloud; -import org.mmbase.bridge.Field; -import org.mmbase.bridge.Node; -import org.mmbase.bridge.NodeIterator; -import org.mmbase.bridge.NodeManager; -import org.mmbase.bridge.NodeManagerList; -import org.mmbase.bridge.NodeQuery; -import org.mmbase.bridge.NotFoundException; -import org.mmbase.bridge.Relation; -import org.mmbase.bridge.RelationIterator; -import org.mmbase.bridge.RelationManager; -import org.mmbase.bridge.util.SearchUtil; -import org.mmbase.storage.search.CompositeConstraint; -import org.mmbase.storage.search.Constraint; -import org.mmbase.storage.search.FieldCompareConstraint; - -import com.finalist.cmsc.mmbase.PropertiesUtil; -import com.finalist.cmsc.security.SecurityUtil; - -public final class AssetElementUtil { - - private static final String DESTINATION = "DESTINATION"; - - public static final String NUMBER_FIELD = "number"; - public static final String TITLE_FIELD = "title"; - public static final String NAME_FIELD = "name"; - public static final String CREATIONDATE_FIELD = "creationdate"; - public static final String PUBLISHDATE_FIELD = "publishdate"; - public static final String EXPIREDATE_FIELD = "expiredate"; - public static final String USE_EXPIRY_FIELD = "use_expirydate"; - public static final String LASTMODIFIEDDATE_FIELD = "lastmodifieddate"; - public static final String CREATOR_FIELD = "creator"; - public static final String LASTMODIFIER_FIELD = "lastmodifier"; - public static final String ARCHIVEDATE_FIELD = "archivedate"; - - public static final String ASSETELEMENT = "assetelement"; - public static final String USER = SecurityUtil.USER; - - public static final String OWNERREL = "ownerrel"; - - private static final String PROPERTY_HIDDEN_ASSET_TYPES = "system.assettypes.hide"; - - 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(); - Iterator<NodeManager> v = nml.iterator(); - while (v.hasNext()) { - NodeManager nm = v.next(); - if (AssetElementUtil.isAssetType(nm)) { - result.add(nm); - } - } - Collections.sort(result, new Comparator<NodeManager>() { - public int compare(NodeManager o1, NodeManager o2) { - return o1.getGUIName().compareTo(o2.getGUIName()); - } - }); - - return result; - } - - /** - * Is element from one of the asset types - * - * @param element - * node to check - * @return is asset type - */ - public static boolean isAssetElement(Node element) { - NodeManager nm = element.getNodeManager(); - return isAssetType(nm); - } - - /** - * Is ModeManager of the asset types - * - * @param nm - * NodeManager to check - * @return is content type - */ - public static boolean isAssetType(NodeManager nm) { - if (ASSETELEMENT.equals(nm.getName())) { - // assetelement manager is not a assettent type - return false; - } - try { - NodeManager nmTemp = nm.getParent(); - while (!ASSETELEMENT.equals(nmTemp.getName())) { - nmTemp = nmTemp.getParent(); - } - return true; - } catch (NotFoundException nfe) { - // Ran out of NodeManager parents - } - return false; - } - - /** - * Is type of asset type - * - * @param type - * to check - * @return is asset type - */ - public static boolean isAssetType(String type) { - NodeManager nm = CloudProviderFactory.getCloudProvider().getAnonymousCloud().getNodeManager(type); - return isAssetType(nm); - } - - /** - * Add owner - * - * @param asset - - * asset - */ - public static void addOwner(Node asset) { - Cloud cloud = asset.getCloud(); - Node user = SecurityUtil.getUserNode(cloud); - RelationManager author = cloud.getRelationManager(ASSETELEMENT, USER, OWNERREL); - Relation ownerrel = asset.createRelation(user, author); - ownerrel.commit(); - } - - /** - * Check if a assetnode has an owner - * - * @param asset - - * Asset Node - * @return true if the node has a related workflowitem - */ - public static boolean hasOwner(Node asset) { - int count = asset.countRelatedNodes(asset.getCloud().getNodeManager(USER), OWNERREL, DESTINATION); - return count > 0; - } - - public static void addLifeCycleConstraint(NodeQuery query, long date) { - NodeManager assetManager = query.getCloud().getNodeManager(ASSETELEMENT); - - Constraint useExpire = getUseExpireConstraint(query, assetManager, Boolean.FALSE); - Constraint expirydate = getExpireConstraint(query, date, assetManager, true); - Constraint publishdate = getPublishConstraint(query, date, assetManager, false); - - Constraint lifecycleComposite = query.createConstraint(expirydate, CompositeConstraint.LOGICAL_AND, publishdate); - - Constraint composite = query.createConstraint(useExpire, CompositeConstraint.LOGICAL_OR, lifecycleComposite); - SearchUtil.addConstraint(query, composite); - } - - public static void addLifeCycleInverseConstraint(NodeQuery query, long date) { - NodeManager assetManager = query.getCloud().getNodeManager(ASSETELEMENT); - - Constraint useExpire = getUseExpireConstraint(query, assetManager, Boolean.TRUE); - Constraint expirydate = getExpireConstraint(query, date, assetManager, false); - Constraint publishdate = getPublishConstraint(query, date, assetManager, true); - - Constraint lifecycleComposite = query.createConstraint(expirydate, CompositeConstraint.LOGICAL_OR, publishdate); - - Constraint composite = query.createConstraint(useExpire, CompositeConstraint.LOGICAL_AND, lifecycleComposite); - SearchUtil.addConstraint(query, composite); - } - - public static Constraint getUseExpireConstraint(NodeQuery query, NodeManager assetManager, Boolean value) { - Field useExpireField = assetManager.getField(USE_EXPIRY_FIELD); - Constraint useExpire = query.createConstraint(query.getStepField(useExpireField), FieldCompareConstraint.EQUAL, - value); - return useExpire; - } - - public static Constraint getExpireConstraint(NodeQuery query, long date, NodeManager assetManager, boolean greater) { - int operator = (greater ? FieldCompareConstraint.GREATER_EQUAL : FieldCompareConstraint.LESS_EQUAL); - - Field expireField = assetManager.getField(EXPIREDATE_FIELD); - Object expireDateObj = (expireField.getType() == Field.TYPE_DATETIME) ? new Date(date) : Long.valueOf(date); - Constraint expirydate = query.createConstraint(query.getStepField(expireField), operator, expireDateObj); - return expirydate; - } - - public static Constraint getPublishConstraint(NodeQuery query, long date, NodeManager assetManager, boolean greater) { - int operator = (greater ? FieldCompareConstraint.GREATER_EQUAL : FieldCompareConstraint.LESS_EQUAL); - - Field publishField = assetManager.getField(PUBLISHDATE_FIELD); - Object publishDateObj = (publishField.getType() == Field.TYPE_DATETIME) ? new Date(date) : Long.valueOf(date); - Constraint publishdate = query.createConstraint(query.getStepField(publishField), operator, publishDateObj); - return publishdate; - } - - public static void addArchiveConstraint(Node channel, NodeQuery query, Long date, String archive) { - if (StringUtils.isEmpty(archive) || "all".equalsIgnoreCase(archive)) { - return; - } - NodeManager contentManager = channel.getCloud().getNodeManager(ASSETELEMENT); - - Field archiveDateField = contentManager.getField(ARCHIVEDATE_FIELD); - Object archiveDateObj = (archiveDateField.getType() == Field.TYPE_DATETIME) ? new Date(date) : Long.valueOf(date); - - Constraint archivedate = null; - if ("old".equalsIgnoreCase(archive)) { - archivedate = query.createConstraint(query.getStepField(archiveDateField), FieldCompareConstraint.LESS_EQUAL, - archiveDateObj); - } else { - // "new".equalsIgnoreCase(archive) - archivedate = query.createConstraint(query.getStepField(archiveDateField), - FieldCompareConstraint.GREATER_EQUAL, archiveDateObj); - } - SearchUtil.addConstraint(query, archivedate); - } - - /** - * Helper method to get all hidden asset types - * - * @return List of hidden types - */ - public static List<String> getHiddenAssetTypes() { - String property = PropertiesUtil.getProperty(PROPERTY_HIDDEN_ASSET_TYPES); - if (property == null) { - return new ArrayList<String>(); - } - - ArrayList<String> list = new ArrayList<String>(); - String[] values = property.split(","); - for (String value : values) { - list.add(value); - } - return list; - } - - public static List<Node> findAssetRelatedNodes(Node node) { - - List<Node> nodes = new ArrayList<Node>(); - RelationIterator childs = node.getRelations(null, null, DESTINATION).relationIterator(); - while (childs.hasNext()) { - Relation childNode = childs.nextRelation(); - if (isAssetElement(childNode.getDestination())) { - nodes.add(childNode.getDestination()); - } - } - return nodes; - } - -} +/* + * + * This software is OSI Certified Open Source Software. OSI Certified is a certification mark of the Open Source + * Initiative. + * + * The license (Mozilla version 1.0) can be read at the MMBase site. See http://www.MMBase.org/license + */ +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; +import org.mmbase.bridge.NotFoundException; +import org.mmbase.bridge.Relation; +import org.mmbase.bridge.RelationIterator; +import org.mmbase.bridge.RelationManager; +import org.mmbase.bridge.util.SearchUtil; +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 { + + private static final String DESTINATION = "DESTINATION"; + + public static final String NUMBER_FIELD = "number"; + public static final String TITLE_FIELD = "title"; + public static final String NAME_FIELD = "name"; + public static final String CREATIONDATE_FIELD = "creationdate"; + public static final String PUBLISHDATE_FIELD = "publishdate"; + public static final String EXPIREDATE_FIELD = "expiredate"; + public static final String USE_EXPIRY_FIELD = "use_expirydate"; + public static final String LASTMODIFIEDDATE_FIELD = "lastmodifieddate"; + public static final String CREATOR_FIELD = "creator"; + public static final String LASTMODIFIER_FIELD = "lastmodifier"; + public static final String ARCHIVEDATE_FIELD = "archivedate"; + + public static final String ASSETELEMENT = "assetelement"; + public static final String USER = SecurityUtil.USER; + + public static final String OWNERREL = "ownerrel"; + + 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(); + Iterator<NodeManager> v = nml.iterator(); + while (v.hasNext()) { + NodeManager nm = v.next(); + if (AssetElementUtil.isAssetType(nm)) { + result.add(nm); + } + } + Collections.sort(result, new Comparator<NodeManager>() { + public int compare(NodeManager o1, NodeManager o2) { + return o1.getGUIName().compareTo(o2.getGUIName()); + } + }); + + return result; + } + + /** + * Is element from one of the asset types + * + * @param element + * node to check + * @return is asset type + */ + public static boolean isAssetElement(Node element) { + NodeManager nm = element.getNodeManager(); + return isAssetType(nm); + } + + /** + * Is ModeManager of the asset types + * + * @param nm + * NodeManager to check + * @return is content type + */ + public static boolean isAssetType(NodeManager nm) { + if (ASSETELEMENT.equals(nm.getName())) { + // assetelement manager is not a assettent type + return false; + } + try { + NodeManager nmTemp = nm.getParent(); + while (!ASSETELEMENT.equals(nmTemp.getName())) { + nmTemp = nmTemp.getParent(); + } + return true; + } catch (NotFoundException nfe) { + // Ran out of NodeManager parents + } + return false; + } + + /** + * Is type of asset type + * + * @param type + * to check + * @return is asset type + */ + public static boolean isAssetType(String type) { + NodeManager nm = CloudProviderFactory.getCloudProvider().getAnonymousCloud().getNodeManager(type); + return isAssetType(nm); + } + + /** + * Add owner + * + * @param asset + * - asset + */ + public static void addOwner(Node asset) { + Cloud cloud = asset.getCloud(); + Node user = SecurityUtil.getUserNode(cloud); + RelationManager author = cloud.getRelationManager(ASSETELEMENT, USER, OWNERREL); + Relation ownerrel = asset.createRelation(user, author); + ownerrel.commit(); + } + + /** + * Check if a assetnode has an owner + * + * @param asset + * - Asset Node + * @return true if the node has a related workflowitem + */ + public static boolean hasOwner(Node asset) { + int count = asset.countRelatedNodes(asset.getCloud().getNodeManager(USER), OWNERREL, DESTINATION); + return count > 0; + } + + public static void addLifeCycleConstraint(NodeQuery query, long date) { + NodeManager assetManager = query.getCloud().getNodeManager(ASSETELEMENT); + + Constraint useExpire = getUseExpireConstraint(query, assetManager, Boolean.FALSE); + Constraint expirydate = getExpireConstraint(query, date, assetManager, true); + Constraint publishdate = getPublishConstraint(query, date, assetManager, false); + + Constraint lifecycleComposite = query.createConstraint(expirydate, CompositeConstraint.LOGICAL_AND, publishdate); + + Constraint composite = query.createConstraint(useExpire, CompositeConstraint.LOGICAL_OR, lifecycleComposite); + SearchUtil.addConstraint(query, composite); + } + + public static void addLifeCycleInverseConstraint(NodeQuery query, long date) { + NodeManager assetManager = query.getCloud().getNodeManager(ASSETELEMENT); + + Constraint useExpire = getUseExpireConstraint(query, assetManager, Boolean.TRUE); + Constraint expirydate = getExpireConstraint(query, date, assetManager, false); + Constraint publishdate = getPublishConstraint(query, date, assetManager, true); + + Constraint lifecycleComposite = query.createConstraint(expirydate, CompositeConstraint.LOGICAL_OR, publishdate); + + Constraint composite = query.createConstraint(useExpire, CompositeConstraint.LOGICAL_AND, lifecycleComposite); + SearchUtil.addConstraint(query, composite); + } + + public static Constraint getUseExpireConstraint(NodeQuery query, NodeManager assetManager, Boolean value) { + Field useExpireField = assetManager.getField(USE_EXPIRY_FIELD); + Constraint useExpire = query.createConstraint(query.getStepField(useExpireField), FieldCompareConstraint.EQUAL, + value); + return useExpire; + } + + public static Constraint getExpireConstraint(NodeQuery query, long date, NodeManager assetManager, boolean greater) { + int operator = (greater ? FieldCompareConstraint.GREATER_EQUAL : FieldCompareConstraint.LESS_EQUAL); + + Field expireField = assetManager.getField(EXPIREDATE_FIELD); + Object expireDateObj = (expireField.getType() == Field.TYPE_DATETIME) ? new Date(date) : Long.valueOf(date); + Constraint expirydate = query.createConstraint(query.getStepField(expireField), operator, expireDateObj); + return expirydate; + } + + public static Constraint getPublishConstraint(NodeQuery query, long date, NodeManager assetManager, boolean greater) { + int operator = (greater ? FieldCompareConstraint.GREATER_EQUAL : FieldCompareConstraint.LESS_EQUAL); + + Field publishField = assetManager.getField(PUBLISHDATE_FIELD); + Object publishDateObj = (publishField.getType() == Field.TYPE_DATETIME) ? new Date(date) : Long.valueOf(date); + Constraint publishdate = query.createConstraint(query.getStepField(publishField), operator, publishDateObj); + return publishdate; + } + + public static void addArchiveConstraint(Node channel, NodeQuery query, Long date, String archive) { + if (StringUtils.isEmpty(archive) || "all".equalsIgnoreCase(archive)) { + return; + } + NodeManager contentManager = channel.getCloud().getNodeManager(ASSETELEMENT); + + Field archiveDateField = contentManager.getField(ARCHIVEDATE_FIELD); + Object archiveDateObj = (archiveDateField.getType() == Field.TYPE_DATETIME) ? new Date(date) : Long.valueOf(date); + + Constraint archivedate = null; + if ("old".equalsIgnoreCase(archive)) { + archivedate = query.createConstraint(query.getStepField(archiveDateField), FieldCompareConstraint.LESS_EQUAL, + archiveDateObj); + } else { + // "new".equalsIgnoreCase(archive) + archivedate = query.createConstraint(query.getStepField(archiveDateField), + FieldCompareConstraint.GREATER_EQUAL, archiveDateObj); + } + SearchUtil.addConstraint(query, archivedate); + } + + /** + * Helper method to get all hidden asset types + * + * @return List of hidden types + */ + public static List<String> getHiddenAssetTypes() { + String property = PropertiesUtil.getProperty(PROPERTY_HIDDEN_ASSET_TYPES); + if (property == null) { + return new ArrayList<String>(); + } + + ArrayList<String> list = new ArrayList<String>(); + String[] values = property.split(","); + for (String value : values) { + list.add(value); + } + return list; + } + + public static List<Node> findAssetRelatedNodes(Node node) { + + List<Node> nodes = new ArrayList<Node>(); + RelationIterator childs = node.getRelations(null, null, DESTINATION).relationIterator(); + while (childs.hasNext()) { + Relation childNode = childs.nextRelation(); + if (isAssetElement(childNode.getDestination())) { + nodes.add(childNode.getDestination()); + } + } + 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/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AbstractUploadAction.java =================================================================== --- CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AbstractUploadAction.java 2009-08-20 01:51:18 UTC (rev 38051) +++ CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AbstractUploadAction.java 2009-08-20 01:52:13 UTC (rev 38052) @@ -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/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AssetUploadAction.java =================================================================== --- CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AssetUploadAction.java 2009-08-20 01:51:18 UTC (rev 38051) +++ CMSContainer/branches/b1_6/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AssetUploadAction.java 2009-08-20 01:52:13 UTC (rev 38052) @@ -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