diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeeder.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeeder.java index 283f127dca1704a79706912be15419d2437b8a15..992605af10e11f83c5eb77c9829f5cbc54e2de38 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeeder.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeeder.java @@ -62,7 +62,7 @@ public class DatabaseBasedDataSetPathsInfoFeeder implements IDataSetPathsInfoFee String relativePath = parentId == null ? "" : pathPrefix + fileName; long id = dao.createDataSetFile(dataSetId, parentId, relativePath, fileName, - pathInfo.getSizeInBytes(), directory); + pathInfo.getSizeInBytes(), directory, pathInfo.getLastModifiedDate()); if (relativePath.length() > 0) { relativePath += '/'; diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/IPathsInfoDAO.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/IPathsInfoDAO.java index abc6cf3b74e1423f116a99fa5aba09d583e63f58..99d5157a78fdb868d5161394837304a5eda5ae20 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/IPathsInfoDAO.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/IPathsInfoDAO.java @@ -16,6 +16,8 @@ package ch.systemsx.cisd.etlserver.path; +import java.util.Date; + import net.lemnik.eodsql.Select; import net.lemnik.eodsql.TransactionQuery; @@ -33,8 +35,8 @@ public interface IPathsInfoDAO extends TransactionQuery public long createDataSet(String code, String location); @Select("insert into data_set_files (dase_id, parent_id, relative_path, file_name, " - + "size_in_bytes, is_directory) values (?{1}, ?{2}, ?{3}, ?{4}, ?{5}, ?{6}) returning id") + + "size_in_bytes, is_directory, last_modified) values (?{1}, ?{2}, ?{3}, ?{4}, ?{5}, ?{6}, ?{7}) returning id") public long createDataSetFile(long dataSetId, Long parentId, String relativePath, - String fileName, long sizeInBytes, boolean directory); + String fileName, long sizeInBytes, boolean directory, Date lastModifiedDate); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfo.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfo.java index ae6426b72af4372053531403cdde16554f905445..6d2f765c08d46c5f9ab672f3c78cf5b44b40ae07 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfo.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/path/PathInfo.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.etlserver.path; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.Date; import java.util.List; import ch.systemsx.cisd.common.io.IHierarchicalContentNode; @@ -41,6 +42,7 @@ final class PathInfo } PathInfo pathInfo = new PathInfo(); pathInfo.fileName = node.getName(); + pathInfo.lastModifiedDate = new Date(node.getLastModified()); pathInfo.directory = node.isDirectory(); if (pathInfo.directory) { @@ -90,6 +92,8 @@ final class PathInfo private boolean directory; private List<PathInfo> children; + + private Date lastModifiedDate; public String getFileName() { @@ -111,6 +115,11 @@ final class PathInfo return directory; } + public Date getLastModifiedDate() + { + return lastModifiedDate; + } + public List<PathInfo> getChildren() { return children == null ? NO_CHILDREN : Collections.unmodifiableList(children); diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProvider.java index 244194be21c1f7a612c35ac0a6e7b54f4df606a6..213ae21b3ca9b37bebedc177cd3556b195855608 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProvider.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProvider.java @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.dss.generic.server; import java.util.ArrayList; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -53,13 +54,15 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro public long size_in_bytes; public boolean is_directory; + + public Date last_modified; } @Private static interface IPathInfoDAO extends BaseQuery { static String SELECT_DATA_SET_FILES = - "SELECT id, parent_id, relative_path, file_name, size_in_bytes, is_directory FROM data_set_files "; + "SELECT id, parent_id, relative_path, file_name, size_in_bytes, is_directory, last_modified FROM data_set_files "; @Select("SELECT id FROM data_sets WHERE code = ?{1}") public Long tryToGetDataSetId(String dataSetCode); @@ -245,6 +248,7 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro result.setRelativePath(record.relative_path); result.setDirectory(record.is_directory); result.setSizeInBytes(record.size_in_bytes); + result.setLastModified(record.last_modified); return result; } @@ -281,6 +285,7 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro dataSetPathInfo.setRelativePath(dataSetFileRecord.relative_path); dataSetPathInfo.setDirectory(dataSetFileRecord.is_directory); dataSetPathInfo.setSizeInBytes(dataSetFileRecord.size_in_bytes); + dataSetPathInfo.setLastModified(dataSetFileRecord.last_modified); idToInfoMap.put(dataSetFileRecord.id, dataSetPathInfo); Long parentId = dataSetFileRecord.parent_id; if (parentId == null) diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/PathInfoDatabaseVersionHolder.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/PathInfoDatabaseVersionHolder.java index e0070d1fe65252b702e0f46aeddf93566f96838f..3ffc15c1bf4f4d3a2f3b6ef0300ece5e5451e6b2 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/PathInfoDatabaseVersionHolder.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/PathInfoDatabaseVersionHolder.java @@ -25,7 +25,7 @@ public class PathInfoDatabaseVersionHolder implements IDatabaseVersionHolder { public String getDatabaseVersion() { - return "001"; // S104 + return "002"; // S109 } } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/PathInfoProviderBasedHierarchicalContent.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/PathInfoProviderBasedHierarchicalContent.java index 5705ef4d4e147d82c639964674a7e94eed817393..7cca3c57e8f6c195d77868c119624b6577b154bb 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/PathInfoProviderBasedHierarchicalContent.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/content/PathInfoProviderBasedHierarchicalContent.java @@ -21,6 +21,7 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; @@ -209,7 +210,8 @@ class PathInfoProviderBasedHierarchicalContent implements IHierarchicalContent public long getLastModified() { - return System.currentTimeMillis(); + Date lastModified = pathInfo.getLastModified(); + return lastModified == null ? System.currentTimeMillis() : lastModified.getTime(); } @Override diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetPathInfo.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetPathInfo.java index 3544dc7fea2793c0bf0e3df98d8236b0d37efe52..3d44c3c3fcfc127b83a5655a6f57066889e0abc4 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetPathInfo.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/dto/DataSetPathInfo.java @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.dss.generic.shared.dto; import java.util.ArrayList; +import java.util.Date; import java.util.List; /** @@ -31,6 +32,8 @@ public class DataSetPathInfo private String relativePath; private boolean directory; + + private Date lastModified; private long sizeInBytes; @@ -78,6 +81,16 @@ public class DataSetPathInfo this.sizeInBytes = sizeInBytes; } + public Date getLastModified() + { + return lastModified; + } + + public void setLastModified(Date lastModified) + { + this.lastModified = lastModified; + } + @Deprecated public DataSetPathInfo getParent() { diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeederTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeederTest.java index 5aabdcec9947a20860532b91630075d5b48f2376..d7f993b18ad7af7f451dde95936825799436d003 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeederTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/DatabaseBasedDataSetPathsInfoFeederTest.java @@ -18,6 +18,7 @@ package ch.systemsx.cisd.etlserver.path; import java.io.File; import java.lang.reflect.Method; +import java.util.Date; import org.jmock.Expectations; import org.jmock.Mockery; @@ -79,22 +80,22 @@ public class DatabaseBasedDataSetPathsInfoFeederTest extends AbstractFileSystemT one(dao).createDataSet("ds-1", "a/b/c/"); will(returnValue(42L)); - one(dao).createDataSetFile(42L, null, "", ROOT_PATH, 38, true); + one(dao).createDataSetFile(42L, null, "", ROOT_PATH, 38, true, new Date(1)); will(returnValue(100L)); - one(dao).createDataSetFile(42L, 100L, "dir", "dir", 26, true); + one(dao).createDataSetFile(42L, 100L, "dir", "dir", 26, true, new Date(2)); will(returnValue(101L)); - one(dao).createDataSetFile(42L, 101L, "dir/hello.txt", "hello.txt", 11, false); + one(dao).createDataSetFile(42L, 101L, "dir/hello.txt", "hello.txt", 11, false, new Date(3)); will(returnValue(102L)); - one(dao).createDataSetFile(42L, 101L, "dir/read.me", "read.me", 15, false); + one(dao).createDataSetFile(42L, 101L, "dir/read.me", "read.me", 15, false, new Date(4)); will(returnValue(103L)); - one(dao).createDataSetFile(42L, 101L, "dir/dir", "dir", 0, true); + one(dao).createDataSetFile(42L, 101L, "dir/dir", "dir", 0, true, new Date(5)); will(returnValue(104L)); - one(dao).createDataSetFile(42L, 100L, "read.me", "read.me", 12, false); + one(dao).createDataSetFile(42L, 100L, "read.me", "read.me", 12, false, new Date(6)); will(returnValue(105L)); } }); diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java index f86a7b2be2bf46ad0f173bbc6b2a84b791749760..c4ead1dae4ade69030af5e7985edfac59d285512 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/path/PathInfoDatabaseFeedingTaskTest.java @@ -21,6 +21,7 @@ import static ch.systemsx.cisd.common.utilities.IDelegatedAction.DO_NOTHING; import java.io.File; import java.lang.reflect.Method; import java.util.Arrays; +import java.util.Date; import org.jmock.Expectations; import org.jmock.Mockery; @@ -239,7 +240,7 @@ public class PathInfoDatabaseFeedingTaskTest extends AbstractFileSystemTestCase one(node).isDirectory(); will(returnValue(false)); - one(dao).createDataSetFile(101L, null, "", "ds1-root", 12345L, false); + one(dao).createDataSetFile(101L, null, "", "ds1-root", 12345L, false, new Date(42)); will(returnValue(102L)); one(dao).commit(); diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/PathInfoDatabaseTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/PathInfoDatabaseTest.java index 48994b4ae34e533f634887cd187fb098013c0015..f02dd0138849f1590966b2a3cdff96167a30842a 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/PathInfoDatabaseTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/PathInfoDatabaseTest.java @@ -22,6 +22,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.regex.Pattern; @@ -129,7 +130,7 @@ public class PathInfoDatabaseTest extends SystemTestCase try { long id = dao.createDataSet("ds-1", "a/b/c/"); - long parentId = dao.createDataSetFile(id, null, "", "ds-1", 0, true); + long parentId = dao.createDataSetFile(id, null, "", "ds-1", 0, true, new Date(4711)); numberOfEntries += feedDataBase(dao, id, parentId, 3, ""); dao.commit(); } catch (Exception ex) @@ -151,7 +152,7 @@ public class PathInfoDatabaseTest extends SystemTestCase String fileName = "file-" + i + "-" + (i * i) + (directory ? "" : "-xyz.xml"); long id = dao.createDataSetFile(dataSetId, parentId, prefix + fileName, fileName, level - * 100 + i, directory); + * 100 + i, directory, new Date(4711)); numberOfEntries++; if (directory) {