From 5b597ad7802d28ef2d321db0cc68249839c3d3fe Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Tue, 25 Jun 2013 09:05:35 +0000
Subject: [PATCH] SP-724, BIS-428: AbstractDataSetPackager.addTo() improved by
 delegating methods to the node instead of the file because of recent
 improvements in hierarchical content node implementations.

SVN: 29452
---
 .../server/AbstractDataSetPackager.java       | 34 ++-----------------
 1 file changed, 3 insertions(+), 31 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDataSetPackager.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDataSetPackager.java
index 69ac020c484..b1a0a4d0580 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDataSetPackager.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDataSetPackager.java
@@ -16,16 +16,13 @@
 
 package ch.systemsx.cisd.openbis.dss.generic.server;
 
-import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.InputStream;
 import java.util.List;
 import java.util.zip.CRC32;
 
 import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
-import ch.systemsx.cisd.common.io.IOUtilities;
 import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContent;
 import ch.systemsx.cisd.openbis.common.io.hierarchical_content.api.IHierarchicalContentNode;
 import ch.systemsx.cisd.openbis.dss.generic.shared.IHierarchicalContentProvider;
@@ -150,12 +147,11 @@ public abstract class AbstractDataSetPackager
             }
         } else if (file.isFile())
         {
-            long size = file.length();
-            long checksum = calculateChecksum(node, file);
+            long size = node.getFileLength();
+            long checksum = isChecksumNeeded() ? node.getChecksumCRC32() : 0;
             try
             {
-                FileInputStream fileInputStream = new FileInputStream(file);
-                addEntry(entryPath, file.lastModified(), size, checksum, new BufferedInputStream(fileInputStream));
+                addEntry(entryPath, node.getLastModified(), size, checksum, node.getInputStream());
             } catch (Exception ex)
             {
                 throw CheckedExceptionTunnel.wrapIfNecessary(ex);
@@ -165,28 +161,4 @@ public abstract class AbstractDataSetPackager
             throw new IllegalStateException("Node '" + node.getRelativePath() + "' is a real folder");
         }
     }
-
-    private long calculateChecksum(IHierarchicalContentNode node, File file)
-    {
-        long checksum = 0;
-        if (isChecksumNeeded())
-        {
-            boolean checksumCRC32Precalculated = node.isChecksumCRC32Precalculated();
-            if (checksumCRC32Precalculated)
-            {
-                checksum = node.getChecksumCRC32();
-            } else 
-            {
-                try
-                {
-                    FileInputStream fileInputStream = new FileInputStream(file);
-                    checksum = IOUtilities.getChecksumCRC32(new BufferedInputStream(fileInputStream));
-                } catch (Exception ex)
-                {
-                    throw CheckedExceptionTunnel.wrapIfNecessary(ex);
-                }
-            }
-        }
-        return checksum;
-    }
 }
-- 
GitLab