From 8fd0e78ac111f3520b38330ca1349b6083a215cf Mon Sep 17 00:00:00 2001 From: gpawel <gpawel> Date: Wed, 8 Jun 2011 08:18:27 +0000 Subject: [PATCH] [LMS-2181] more like expressions SVN: 21637 --- .../DatabaseBasedDataSetPathInfoProvider.java | 23 +++++++++++--- ...abaseBasedDataSetPathInfoProviderTest.java | 31 +++++++++++++++++-- 2 files changed, 48 insertions(+), 6 deletions(-) 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 26b00c77906..244194be21c 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 @@ -84,11 +84,15 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro public List<DataSetFileRecord> listDataSetFilesByRelativePathLikeExpression(long dataSetId, String relativePathLikeExpression); - // FIXME we should have 2 methods, one with regexp one with like @Select(SELECT_DATA_SET_FILES + "WHERE dase_id = ?{1} AND relative_path = '?{2}' AND file_name ~ ?{3}") public List<DataSetFileRecord> listDataSetFilesByFilenameRegex(long dataSetId, String startingPath, String filenameRegex); + + @Select(SELECT_DATA_SET_FILES + + "WHERE dase_id = ?{1} AND relative_path = '?{2}' AND file_name LIKE ?{3}") + public List<DataSetFileRecord> listDataSetFilesByFilenameLikeExpression(long dataSetId, + String startingPath, String filenameLikeExpression); } private static interface ILoader @@ -216,9 +220,20 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro public List<DataSetPathInfo> listMatchingPathInfos(String startingPath, String fileNamePattern) { - List<DataSetFileRecord> records = - dao.listDataSetFilesByFilenameRegex(dataSetId, startingPath, - prepareDBStyleRegex(fileNamePattern)); + String likeExpressionOrNull = + DBUtils.tryToTranslateRegExpToLikePattern(prepareDBStyleRegex(fileNamePattern)); + List<DataSetFileRecord> records; + if (likeExpressionOrNull == null) + { + records = + dao.listDataSetFilesByFilenameRegex(dataSetId, startingPath, + prepareDBStyleRegex(fileNamePattern)); + } else + { + records = + dao.listDataSetFilesByFilenameLikeExpression(dataSetId, startingPath, + likeExpressionOrNull); + } return asPathInfos(records); } diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProviderTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProviderTest.java index 1c6593ff804..4cb55dc5d78 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProviderTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/server/DatabaseBasedDataSetPathInfoProviderTest.java @@ -335,12 +335,12 @@ public class DatabaseBasedDataSetPathInfoProviderTest extends AssertJUnit } @Test - void testListMatchingPathInfosWithFileNamePattern() + void testListMatchingPathInfosWithFileNameRegExpPattern() { ISingleDataSetPathInfoProvider provider = createSingleDataSetPathInfoProvider(); final String startingPath = "dir"; - final String regex = "child.*"; + final String regex = "(child.*|child)"; // NOTE: data in records are not significant final DataSetFileRecord rc1 = record(3L, 2L, "dir/child_dir", "child_dir", 20, true); @@ -361,6 +361,33 @@ public class DatabaseBasedDataSetPathInfoProviderTest extends AssertJUnit check(rc2, list.get(1)); } + @Test + void testListMatchingPathInfosWithFileNameLikePattern() + { + ISingleDataSetPathInfoProvider provider = createSingleDataSetPathInfoProvider(); + + final String startingPath = "dir"; + final String regex = "child.*"; + + // NOTE: data in records are not significant + final DataSetFileRecord rc1 = record(3L, 2L, "dir/child_dir", "child_dir", 20, true); + final DataSetFileRecord rc2 = record(4L, 2L, "dir/child_file", "child_file", 30, false); + + context.checking(new Expectations() + { + { + one(dao).listDataSetFilesByFilenameLikeExpression(DATA_SET_ID, startingPath, + "child%"); + will(returnValue(Arrays.asList(rc1, rc2))); + } + }); + + List<DataSetPathInfo> list = provider.listMatchingPathInfos(startingPath, regex); + sort(list); + check(rc1, list.get(0)); + check(rc2, list.get(1)); + } + private ISingleDataSetPathInfoProvider createSingleDataSetPathInfoProvider() { return new DatabaseBasedDataSetPathInfoProvider.SingleDataSetPathInfoProvider(DATA_SET_ID, -- GitLab