Update of 
/var/cvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms
In directory 
james.mmbase.org:/tmp/cvs-serv24082/src/java/com/finalist/cmsc/repository/forms

Modified Files:
        AssetAction.java AssetSearchAction.java AssetUploadAction.java 
        AssetUploadForm.java ImageUploadAction.java 
        ImageUploadForm.java 
Log Message:
CMSC-681 Asset Maintenance


See also: 
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms
See also: http://www.mmbase.org/jira/browse/CMSC-681


Index: AssetAction.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AssetAction.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- AssetAction.java    11 Nov 2008 05:56:54 -0000      1.4
+++ AssetAction.java    9 Dec 2008 06:04:04 -0000       1.5
@@ -34,12 +34,13 @@
 public class AssetAction extends MMBaseAction {
 
    private final static String MOVEASSETTOCHANNEL = "moveAssetToChannel";
+
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form, 
HttpServletRequest request,
          HttpServletResponse response, Cloud cloud) throws Exception {
 
       String action = request.getParameter("action");
-      if(StringUtils.isNotEmpty(action) && action.equals(MOVEASSETTOCHANNEL)) {
+      if (StringUtils.isNotEmpty(action) && action.equals(MOVEASSETTOCHANNEL)) 
{
          return mapping.findForward(MOVEASSETTOCHANNEL);
       }
       List<LabelValueBean> typesList = new ArrayList<LabelValueBean>();
@@ -59,9 +60,11 @@
       String orderby = request.getParameter("orderby");
       String direction = request.getParameter("direction");
       String show = request.getParameter("show");
-      if(StringUtils.isNotEmpty(show)){
+      String exist = request.getParameter("exist");
+
+      if (StringUtils.isNotEmpty(show)) {
          show = "thumbnail";
-      }else{
+      } else {
          show = null;
       }
       if (StringUtils.isEmpty(orderby)) {
@@ -101,6 +104,7 @@
          addToRequest(request, "elements", assets);
          addToRequest(request, "elementCount", Integer.toString(assetCount));
          addToRequest(request, "show", show);
+         addToRequest(request, "exist", exist);
 
          Map<String, Node> createdNumbers = new HashMap<String, Node>();
          for (Iterator<Node> iter = created.iterator(); iter.hasNext();) {


Index: AssetSearchAction.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AssetSearchAction.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- AssetSearchAction.java      2 Dec 2008 02:40:20 -0000       1.4
+++ AssetSearchAction.java      9 Dec 2008 06:04:04 -0000       1.5
@@ -1,6 +1,8 @@
 package com.finalist.cmsc.repository.forms;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -9,9 +11,18 @@
 import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.struts.action.*;
+import org.apache.struts.action.ActionForm;
+import org.apache.struts.action.ActionForward;
+import org.apache.struts.action.ActionMapping;
 import org.apache.struts.util.LabelValueBean;
-import org.mmbase.bridge.*;
+import org.mmbase.bridge.Cloud;
+import org.mmbase.bridge.Field;
+import org.mmbase.bridge.FieldIterator;
+import org.mmbase.bridge.FieldList;
+import org.mmbase.bridge.Node;
+import org.mmbase.bridge.NodeList;
+import org.mmbase.bridge.NodeManager;
+import org.mmbase.bridge.NodeQuery;
 import org.mmbase.bridge.util.Queries;
 import org.mmbase.bridge.util.SearchUtil;
 import org.mmbase.storage.search.Constraint;
@@ -26,7 +37,6 @@
 import com.finalist.cmsc.services.publish.Publish;
 import com.finalist.cmsc.services.workflow.Workflow;
 import com.finalist.cmsc.struts.PagerAction;
-import com.finalist.cmsc.util.KeywordUtil;
 
 public class AssetSearchAction extends PagerAction {
 


Index: AssetUploadAction.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AssetUploadAction.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- AssetUploadAction.java      2 Dec 2008 02:40:20 -0000       1.4
+++ AssetUploadAction.java      9 Dec 2008 06:04:04 -0000       1.5
@@ -1,25 +1,31 @@
-/*
- * 
- * 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.forms;
 
+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.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.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.workflow.Workflow;
 import com.finalist.cmsc.struts.MMBaseAction;
 import com.finalist.util.http.BulkUploadUtil;
 
@@ -30,35 +36,88 @@
          HttpServletResponse response, Cloud cloud) throws Exception {
 
       AssetUploadForm assetUploadForm = (AssetUploadForm) form;
-      String assetType = assetUploadForm.getAssetType();
       String parentchannel = assetUploadForm.getParentchannel();
       FormFile file = assetUploadForm.getFile();
 
-      NodeManager manager = cloud.getNodeManager(assetType);
+      String assetType = "";
 
       if (file.getFileSize() != 0 && file.getFileName() != null) {
-         String uploadFileType = file.getContentType();
-         List<Integer> nodes = null;
-         if (assetType.equalsIgnoreCase("images")) {
-            if (uploadFileType.equalsIgnoreCase("image/bmp") || 
uploadFileType.equalsIgnoreCase("image/jpeg")
-                  || uploadFileType.equalsIgnoreCase("image/gif") || 
uploadFileType.equalsIgnoreCase("image/png")) {
-               nodes = BulkUploadUtil.store(cloud, manager, parentchannel, 
file);
-               request.setAttribute("uploadedAssets", nodes);
+         if (isImage(file.getFileName())) {
+            assetType = "images";
+         } else {
+            assetType = "attachments";
             }
-         } else if (assetType.equalsIgnoreCase("attachments")) {
+
+         List<Integer> nodes = null;
+         NodeManager manager = cloud.getNodeManager(assetType);
+
+         ChecksumFactory checksumFactory = new ChecksumFactory();
+         ByteToCharTransformer transformer = (ByteToCharTransformer) 
checksumFactory.createTransformer(checksumFactory
+               .createParameters());
+         String checkSum = transformer.transform(file.getFileData());
+         NodeQuery query = manager.createQuery();
+         SearchUtil.addEqualConstraint(query, manager.getField("checksum"), 
checkSum);
+         NodeList assets = query.getList();
+
+         boolean isNewFile = (assets.size() == 0);
+
+         if (isNewFile) {
             nodes = BulkUploadUtil.store(cloud, manager, parentchannel, file);
             request.setAttribute("uploadedAssets", nodes);
+         } else {
+            return new ActionForward(mapping.findForward(SUCCESS).getPath()
+                  + "?type=asset&direction=down&exist=1&parentchannel=" + 
parentchannel, true);
          }
+
          // to archive the upload asset
          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));
             }
          }
       }
+      return new ActionForward(mapping.findForward(SUCCESS).getPath()
+            + "?type=asset&direction=down&exist=0&parentchannel=" + 
parentchannel, true);
+   }
+
+   private static Set<String> supportedImages;
+   private static final String CONFIGURATION_RESOURCE_NAME = 
"/com/finalist/util/http/util.properties";
+   private static final Log log = LogFactory.getLog(BulkUploadUtil.class);
 
-      return new ActionForward(mapping.findForward(SUCCESS).getPath() + 
"?type=asset&direction=down&parentchannel="
-            + parentchannel, true);
+   private 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());
+      }
+   }
+
+   private static boolean isImage(String fileName) {
+      if (supportedImages == null) {
+         initSupportedImages();
+      }
+      return fileName != null && 
supportedImages.contains(getExtension(fileName).toLowerCase());
+   }
+
+   private static String getExtension(String fileName) {
+      int index = fileName.lastIndexOf('.');
+      if (index < 0) {
+         return null;
+      }
+      return fileName.substring(index);
    }
 
 }


Index: AssetUploadForm.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/AssetUploadForm.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- AssetUploadForm.java        7 Nov 2008 02:54:48 -0000       1.1
+++ AssetUploadForm.java        9 Dec 2008 06:04:04 -0000       1.2
@@ -6,18 +6,9 @@
 @SuppressWarnings("serial")
 public class AssetUploadForm extends ActionForm {
 
-   private String assetType = "attachment";
    private String parentchannel;
    private FormFile file;
 
-   public String getAssetType() {
-      return assetType;
-   }
-
-   public void setAssetType(String assetType) {
-      this.assetType = assetType;
-   }
-
    public String getParentchannel() {
       return parentchannel;
    }
@@ -33,5 +24,4 @@
    public void setFile(FormFile file) {
       this.file = file;
    }
-
 }


Index: ImageUploadAction.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/ImageUploadAction.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- ImageUploadAction.java      2 Dec 2008 02:40:20 -0000       1.1
+++ ImageUploadAction.java      9 Dec 2008 06:04:04 -0000       1.2
@@ -7,19 +7,32 @@
  */
 package com.finalist.cmsc.repository.forms;
 
+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.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.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.workflow.Workflow;
 import com.finalist.cmsc.struts.MMBaseAction;
 import com.finalist.util.http.BulkUploadUtil;
 
@@ -32,25 +45,79 @@
       ImageUploadForm imageUploadForm = (ImageUploadForm) form;
       String parentchannel = imageUploadForm.getParentchannel();
       FormFile file = imageUploadForm.getFile();
-
+      int nodeId = 0;
+      String exist = "0";
       NodeManager manager = cloud.getNodeManager("images");
+      List<Integer> nodes = null;
 
       if (file.getFileSize() != 0 && file.getFileName() != null) {
-         String uploadFileType = file.getContentType();
-         List<Integer> nodes = null;
-         if (uploadFileType.equalsIgnoreCase("image/bmp") || 
uploadFileType.equalsIgnoreCase("image/jpeg")
-               || uploadFileType.equalsIgnoreCase("image/gif") || 
uploadFileType.equalsIgnoreCase("image/png")) {
+         if (isImage(file.getFileName())) {
+
+            ChecksumFactory checksumFactory = new ChecksumFactory();
+            ByteToCharTransformer transformer = (ByteToCharTransformer) 
checksumFactory
+                  .createTransformer(checksumFactory.createParameters());
+            String checkSum = transformer.transform(file.getFileData());
+            NodeQuery query = manager.createQuery();
+            SearchUtil.addEqualConstraint(query, manager.getField("checksum"), 
checkSum);
+            NodeList images = query.getList();
+
+            boolean isNewFile = (images.size() == 0);
+            if (isNewFile) {
             nodes = BulkUploadUtil.store(cloud, manager, parentchannel, file);
-            request.setAttribute("uploadedImages", nodes);
+               request.setAttribute("uploadedNodes", nodes.size());
+            } else {
+               exist = "1";
          }
-         // to archive the upload asset
+         }
+
          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));
             }
+            nodeId = nodes.get(0);
          }
       }
-      return new ActionForward(mapping.findForward(SUCCESS).getPath(), true);
+      return new ActionForward(mapping.findForward(SUCCESS).getPath() + 
"?uploadAction=select&exist=" + exist
+            + "&channelid=" + parentchannel + "&uploadedNodes=" + nodeId, 
true);
    }
 
+   private static Set<String> supportedImages;
+   private static final String CONFIGURATION_RESOURCE_NAME = 
"/com/finalist/util/http/util.properties";
+   private static final Log log = LogFactory.getLog(BulkUploadUtil.class);
+
+   private 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());
+      }
+   }
+
+   private static boolean isImage(String fileName) {
+      if (supportedImages == null) {
+         initSupportedImages();
+      }
+      return fileName != null && 
supportedImages.contains(getExtension(fileName).toLowerCase());
+   }
+
+   private static String getExtension(String fileName) {
+      int index = fileName.lastIndexOf('.');
+      if (index < 0) {
+         return null;
+      }
+      return fileName.substring(index);
+   }
 }


Index: ImageUploadForm.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/contentrepository/src/java/com/finalist/cmsc/repository/forms/ImageUploadForm.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- ImageUploadForm.java        2 Dec 2008 02:40:20 -0000       1.1
+++ ImageUploadForm.java        9 Dec 2008 06:04:04 -0000       1.2
@@ -6,7 +6,7 @@
 @SuppressWarnings("serial")
 public class ImageUploadForm extends ActionForm {
 
-   private String parentchannel="723";
+   private String parentchannel;
    private FormFile file;
 
    public String getParentchannel() {
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to