From 74d0c9affb51371d3792242dfe36cadff0bf29a1 Mon Sep 17 00:00:00 2001
From: brinn <brinn>
Date: Thu, 19 Jul 2012 22:26:06 +0000
Subject: [PATCH] BIS-38/SP-48: Provide access to CRC32 checksums in PathInfoDB
 Add method FileInfoDssDTO.tryGetCrc32Checksum().

SVN: 26161
---
 .../server/api/v1/DssServiceRpcGeneric.java   |  3 +-
 .../generic/shared/api/v1/FileInfoDssDTO.java | 32 +++++++++++++++++--
 .../v1/HierarchicalFileInfoDssBuilder.java    |  3 +-
 3 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGeneric.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGeneric.java
index 911f0e9cda2..b0ddd901fb0 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGeneric.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGeneric.java
@@ -111,7 +111,8 @@ public class DssServiceRpcGeneric extends AbstractDssServiceRpc<IDssServiceRpcGe
             } else
             {
                 list.add(new FileInfoDssDTO(startPathNode.getRelativePath(), startPathNode
-                        .getName(), false, startPathNode.getFileLength()));
+                        .getName(), false, startPathNode.getFileLength(), startPathNode
+                        .isChecksumCRC32Precalculated() ? startPathNode.getChecksumCRC32() : null));
             }
             FileInfoDssDTO[] fileInfos = new FileInfoDssDTO[list.size()];
             return list.toArray(fileInfos);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/FileInfoDssDTO.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/FileInfoDssDTO.java
index 6969699fa85..9b48f2b5270 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/FileInfoDssDTO.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/FileInfoDssDTO.java
@@ -25,8 +25,6 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 
 import ch.systemsx.cisd.base.annotation.JsonObject;
 
-
-
 /**
  * Represents information about a file stored in DSS.
  * 
@@ -46,13 +44,22 @@ public class FileInfoDssDTO implements Serializable
 
     private long fileSize;
 
+    private Integer crc32Checksum;
+
     public FileInfoDssDTO(String pathInDataSet, String pathInListing, boolean isDirectory,
             long fileSize)
+    {
+        this(pathInDataSet, pathInListing, isDirectory, fileSize, null);
+    }
+
+    public FileInfoDssDTO(String pathInDataSet, String pathInListing, boolean isDirectory,
+            long fileSize, Integer crc32Checksum)
     {
         this.pathInDataSet = pathInDataSet;
         this.pathInListing = pathInListing;
         this.isDirectory = isDirectory;
         this.fileSize = fileSize;
+        this.crc32Checksum = crc32Checksum;
     }
 
     /**
@@ -89,6 +96,17 @@ public class FileInfoDssDTO implements Serializable
         return fileSize;
     }
 
+    /**
+     * Return the CRC32 checksum, if it is available and <code>null</code> otherwise.
+     * <p>
+     * Note that the checksum will only be available when it is precomputed and available from some
+     * sort of database, i.e. if it is computationally "cheap" to provide the checksum.
+     */
+    public Integer tryGetCrc32Checksum()
+    {
+        return crc32Checksum;
+    }
+
     @Override
     public String toString()
     {
@@ -96,6 +114,10 @@ public class FileInfoDssDTO implements Serializable
         sb.append(getPathInDataSet());
         sb.append(getPathInListing());
         sb.append(getFileSize());
+        if (tryGetCrc32Checksum() != null)
+        {
+            sb.append(tryGetCrc32Checksum());
+        }
         return sb.toString();
     }
 
@@ -127,4 +149,10 @@ public class FileInfoDssDTO implements Serializable
     {
         this.fileSize = fileSize;
     }
+
+    private void setCrc32Checksum(int crc32Checksum)
+    {
+        this.crc32Checksum = crc32Checksum;
+    }
+
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/HierarchicalFileInfoDssBuilder.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/HierarchicalFileInfoDssBuilder.java
index aedd6f88d26..9855b9a9781 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/HierarchicalFileInfoDssBuilder.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/v1/HierarchicalFileInfoDssBuilder.java
@@ -87,7 +87,8 @@ public class HierarchicalFileInfoDssBuilder
     {
         FileInfoDssDTO fileInfo =
                 new FileInfoDssDTO(node.getRelativePath(), pathRelativeToListingRoot(node),
-                        node.isDirectory(), (node.isDirectory()) ? -1 : node.getFileLength());
+                        node.isDirectory(), (node.isDirectory()) ? -1 : node.getFileLength(),
+                        node.isChecksumCRC32Precalculated() ? node.getChecksumCRC32() : null);
         return fileInfo;
     }
 
-- 
GitLab