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