Update of 
/var/cvs/contributions/CMSContainer/cmsc/utilities/src/java/com/finalist/util/http
In directory 
james.mmbase.org:/tmp/cvs-serv27508/utilities/src/java/com/finalist/util/http

Modified Files:
        BulkUploadUtil.java 
Log Message:
CMSC-681 Asset Maintenance upload zip file and trash listing


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


Index: BulkUploadUtil.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer/cmsc/utilities/src/java/com/finalist/util/http/BulkUploadUtil.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- BulkUploadUtil.java 2 Dec 2008 08:43:11 -0000       1.13
+++ BulkUploadUtil.java 11 Dec 2008 09:19:55 -0000      1.14
@@ -32,7 +32,12 @@
 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.mmbase.RelationUtil;
 import com.finalist.cmsc.util.UploadUtil;
@@ -47,7 +52,7 @@
    private static final String CONFIGURATION_RESOURCE_NAME = 
"/com/finalist/util/http/util.properties";
 
    private static final String ZIP_MIME_TYPES[] = new String[] { 
"application/x-zip-compressed", "application/zip",
-         "application/x-zip" };
+         "\"application/octet-stream", "application/x-zip" };
 
    private static Set<String> supportedImages;
 
@@ -101,11 +106,11 @@
    }
 
    public static List<Integer> store(Cloud cloud, NodeManager manager, String 
parentchannel, FormFile file) {
-      List<Integer> nodes ;
+      List<Integer> nodes;
       if (StringUtils.isEmpty(parentchannel)) {
          throw new NullPointerException("parentchannel is null");
       }
-      nodes = getNodeList(Integer.valueOf(parentchannel), manager, file);
+      nodes = getNodeList(Integer.valueOf(parentchannel), manager, file, 
cloud);
       return nodes;
    }
 
@@ -158,16 +163,21 @@
       return node;
    }
 
-   private static List<Integer> getNodeList(Integer parentChannel, NodeManager 
manager, FormFile file) {
+   private static List<Integer> getNodeList(Integer parentChannel, NodeManager 
manager, FormFile file, Cloud cloud) {
       List<Integer> nodes = null;
       try {
          if (isZipFile(file)) {
-            ZipInputStream zip = new ZipInputStream(new 
BufferedInputStream(new ByteArrayInputStream(file.getFileData())));
-            nodes = createNodesInZip(parentChannel, manager, zip);
+            byte[] fileData = file.getFileData();
+            ByteArrayInputStream bis = new ByteArrayInputStream(fileData);
+            InputStream is = new BufferedInputStream(bis);
+            ZipInputStream zip = new ZipInputStream(is);
+
+            nodes = createNodesInZip(parentChannel, manager, zip, cloud);
          } else {
 
-            Node node = createNode(parentChannel, manager, file.getFileName(), 
file.getInputStream(), file.getFileSize());
-            if(node!=null){
+            Node node = createNode(parentChannel, manager, file.getFileName(), 
file.getInputStream(), file
+                  .getFileSize());
+            if (node != null) {
                nodes = new ArrayList<Integer>();
                nodes.add(node.getNumber());
             }
@@ -181,7 +191,6 @@
    }
 
    private static ArrayList<Integer> createNodesInZip(NodeManager manager, 
ZipInputStream zip) {
-
       ZipEntry entry = null;
       int count = 0;
       ArrayList<Integer> nodes = new ArrayList<Integer>();
@@ -215,14 +224,15 @@
          }
 
       } catch (IOException ex) {
-         log.info("Failed to read uploaded zipfile, skipping it"+ 
ex.getMessage());
+         log.info("Failed to read uploaded zipfile, skipping it" + 
ex.getMessage());
       } finally {
          close(zip);
       }
       return nodes;
    }
 
-   private static ArrayList<Integer> createNodesInZip(Integer parentChannel, 
NodeManager manager, ZipInputStream zip) {
+   private static ArrayList<Integer> createNodesInZip(Integer parentChannel, 
NodeManager manager, ZipInputStream zip,
+         Cloud cloud) {
 
       ZipEntry entry = null;
       int count = 0;
@@ -239,29 +249,40 @@
                }
                continue;
             }
+            if (isImage(entry.getName())) {
+               manager = cloud.getNodeManager("images");
+            } else {
+               manager = cloud.getNodeManager("attachments");
+            }
             count++;
-            // create temp file for zip entry, create a node from it and
-            // remove the temp file
-            File tempFile = File.createTempFile("cmsc", null);
-            FileOutputStream out = new FileOutputStream(tempFile);
-            copyStream(zip, out);
-            zip.closeEntry();
-            out.close();
-            FileInputStream in = new FileInputStream(tempFile);
-            Node node = createNode(parentChannel, manager, entry.getName(), 
in, tempFile.length());
+            ChecksumFactory checksumFactory = new ChecksumFactory();
+            ByteToCharTransformer transformer = (ByteToCharTransformer) 
checksumFactory
+                  .createTransformer(checksumFactory.createParameters());
+            long size = entry.getSize();
+            byte[] buffer = new byte[(int) size];
+            zip.read(buffer, 0, (int) size);
+            String checkSum = transformer.transform(buffer);
+            NodeQuery query = manager.createQuery();
+            SearchUtil.addEqualConstraint(query, manager.getField("checksum"), 
checkSum);
+            NodeList assets = query.getList();
+
+            boolean isNewFile = (assets.size() == 0);
+            InputStream is = new ByteArrayInputStream(buffer);
+            if (isNewFile) {
+               Node node = createNode(parentChannel, manager, entry.getName(), 
is, size);
             if (node != null) {
                nodes.add(node.getNumber());
             }
-            in.close();
-            tempFile.delete();
+               is.close();
+            }
+            zip.closeEntry();
          }
 
       } catch (IOException ex) {
          log.error("IOException--Failed to read uploaded zipfile, skipping 
it", ex);
-      }catch(Exception e) {
-         log.error("Failed to read uploaded zipfile, skipping it",e);
-      }
-      finally {
+      } catch (Exception e) {
+         log.error("Failed to read uploaded zipfile, skipping it", e);
+      } finally {
          close(zip);
       }
       return nodes;
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to