Skip to content
Snippets Groups Projects
Commit 957b342c authored by felmer's avatar felmer
Browse files

LMS-2286 extend path info database with last modified date and use it

SVN: 21765
parent c9851dc4
No related branches found
No related tags found
No related merge requests found
Showing
with 49 additions and 15 deletions
......@@ -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 += '/';
......
......@@ -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);
}
......@@ -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);
......
......@@ -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)
......
......@@ -25,7 +25,7 @@ public class PathInfoDatabaseVersionHolder implements IDatabaseVersionHolder
{
public String getDatabaseVersion()
{
return "001"; // S104
return "002"; // S109
}
}
......@@ -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
......
......@@ -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()
{
......
......@@ -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));
}
});
......
......@@ -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();
......
......@@ -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)
{
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment