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 911f0e9cda27de8d03ff99d2deb862ea9098b5b2..b0ddd901fb0587967c9d88986d8ec758d0234146 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 6969699fa8542e6ed343c4c5233dbb7b32b3bd34..9b48f2b527008a64c9a842aaf03899056fc0ea9b 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 aedd6f88d265f88b2d6f07cbc87771a94ad9c0ec..9855b9a9781dcffe815d6fbb45b2e6b5e9f3ae4a 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; }