diff --git a/common/source/java/ch/systemsx/cisd/common/db/DBUtils.java b/common/source/java/ch/systemsx/cisd/common/db/DBUtils.java index 337c82e691768909740a7a3c679c8cdbab0cfdd1..85ae6691fc1dc9e038a1c0a7cdffb1bd9f0e4c6a 100644 --- a/common/source/java/ch/systemsx/cisd/common/db/DBUtils.java +++ b/common/source/java/ch/systemsx/cisd/common/db/DBUtils.java @@ -40,15 +40,15 @@ public final class DBUtils } /** - * Translates given regular expression to database-like form if possible. Returns + * Translates given regular expression to database-like pattern if possible. Returns * <code>null</code> if translation is not possible. * - * @return regular expression in database-like form, or <code>null</code> if translation is not - * possible. + * @return regular expression in database-like pattern, or <code>null</code> if translation is + * not possible. */ - public static String tryToTranslateRegExpToLikeForm(String patternOrNull) + public static String tryToTranslateRegExpToLikePattern(String regexpOrNull) { - if (StringUtils.isBlank(patternOrNull)) + if (StringUtils.isBlank(regexpOrNull)) { return null; } @@ -56,7 +56,7 @@ public final class DBUtils StringBuilder result = new StringBuilder(); int startPosition = 0; - if (patternOrNull.startsWith("^")) + if (regexpOrNull.startsWith("^")) { startPosition++; } else @@ -64,9 +64,9 @@ public final class DBUtils result.append('%'); } - while (startPosition < patternOrNull.length()) + while (startPosition < regexpOrNull.length()) { - char ch = patternOrNull.charAt(startPosition); + char ch = regexpOrNull.charAt(startPosition); if (Character.isLetter(ch) || Character.isDigit(ch) || Character.isWhitespace(ch)) { // just copy letters, digits and whitespaces result.append(ch); @@ -98,13 +98,13 @@ public final class DBUtils break; case '.': // translates . to _, .* to % and .+ to _% startPosition++; - if (startPosition < patternOrNull.length() - && patternOrNull.charAt(startPosition) == '*') + if (startPosition < regexpOrNull.length() + && regexpOrNull.charAt(startPosition) == '*') { result.append('%'); startPosition++; - } else if (startPosition < patternOrNull.length() - && patternOrNull.charAt(startPosition) == '+') + } else if (startPosition < regexpOrNull.length() + && regexpOrNull.charAt(startPosition) == '+') { result.append('_').append('%'); startPosition++; @@ -115,16 +115,16 @@ public final class DBUtils break; case '$': // end of string startPosition++; - if (startPosition < patternOrNull.length()) + if (startPosition < regexpOrNull.length()) { result.append(ch); } break; case '\\': // unescape characters startPosition++; - if (startPosition < patternOrNull.length()) + if (startPosition < regexpOrNull.length()) { - char escaped = patternOrNull.charAt(startPosition); + char escaped = regexpOrNull.charAt(startPosition); switch (escaped) { case '\\': @@ -179,7 +179,7 @@ public final class DBUtils } // check if we should match end of patters in exact way - if (false == patternOrNull.endsWith("$")) + if (false == regexpOrNull.endsWith("$")) { result.append('%'); } diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/db/DBUtilsTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/db/DBUtilsTest.java index e1ce6a3ac519cf929985f2df5112e603b20576a3..8fa6adae0e12f18990180606f8d3a0579914e7e1 100644 --- a/common/sourceTest/java/ch/systemsx/cisd/common/db/DBUtilsTest.java +++ b/common/sourceTest/java/ch/systemsx/cisd/common/db/DBUtilsTest.java @@ -27,20 +27,20 @@ public class DBUtilsTest @Test public void testTryToTranslateRegExpToLikeForm() { - Assert.assertEquals(DBUtils.tryToTranslateRegExpToLikeForm("^test$"), "test"); - Assert.assertEquals(DBUtils.tryToTranslateRegExpToLikeForm("ala ma kota"), "%ala ma kota%"); - Assert.assertEquals(DBUtils.tryToTranslateRegExpToLikeForm("^ala/.*/kota$"), "ala/%/kota"); - Assert.assertEquals(DBUtils.tryToTranslateRegExpToLikeForm("^ala.ma\\.kota$"), + Assert.assertEquals(DBUtils.tryToTranslateRegExpToLikePattern("^test$"), "test"); + Assert.assertEquals(DBUtils.tryToTranslateRegExpToLikePattern("ala ma kota"), "%ala ma kota%"); + Assert.assertEquals(DBUtils.tryToTranslateRegExpToLikePattern("^ala/.*/kota$"), "ala/%/kota"); + Assert.assertEquals(DBUtils.tryToTranslateRegExpToLikePattern("^ala.ma\\.kota$"), "ala_ma.kota"); - Assert.assertEquals(DBUtils.tryToTranslateRegExpToLikeForm("^ala.+ma\\+kota$"), + Assert.assertEquals(DBUtils.tryToTranslateRegExpToLikePattern("^ala.+ma\\+kota$"), "ala_%ma+kota"); - Assert.assertEquals(DBUtils.tryToTranslateRegExpToLikeForm("^ala%ma_ko\\\\ta$"), + Assert.assertEquals(DBUtils.tryToTranslateRegExpToLikePattern("^ala%ma_ko\\\\ta$"), "ala\\%ma\\_ko\\\\ta"); - Assert.assertEquals(DBUtils.tryToTranslateRegExpToLikeForm("^$"), ""); + Assert.assertEquals(DBUtils.tryToTranslateRegExpToLikePattern("^$"), ""); - Assert.assertNull(DBUtils.tryToTranslateRegExpToLikeForm(null)); - Assert.assertNull(DBUtils.tryToTranslateRegExpToLikeForm("ala(ma|kota)")); - Assert.assertNull(DBUtils.tryToTranslateRegExpToLikeForm("a*la")); + Assert.assertNull(DBUtils.tryToTranslateRegExpToLikePattern(null)); + Assert.assertNull(DBUtils.tryToTranslateRegExpToLikePattern("ala(ma|kota)")); + Assert.assertNull(DBUtils.tryToTranslateRegExpToLikePattern("a*la")); } } 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 2f60e9f87aeb8dbcb4a348f121e465f58a2ea3a7..26b00c779061b991709f4ad42c756f92ccb95128 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,8 +84,9 @@ 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 like '?{2}' AND file_name ~ ?{3}") + + "WHERE dase_id = ?{1} AND relative_path = '?{2}' AND file_name ~ ?{3}") public List<DataSetFileRecord> listDataSetFilesByFilenameRegex(long dataSetId, String startingPath, String filenameRegex); } @@ -115,7 +116,7 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro public List<DataSetFileRecord> listDataSetFiles(long dataSetId) { String likeExpressionOrNull = - DBUtils.tryToTranslateRegExpToLikeForm("^" + regularExpression + "$"); + DBUtils.tryToTranslateRegExpToLikePattern("^" + regularExpression + "$"); if (likeExpressionOrNull == null) { @@ -196,7 +197,7 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro public List<DataSetPathInfo> listMatchingPathInfos(String relativePathPattern) { String likeExpressionOrNull = - DBUtils.tryToTranslateRegExpToLikeForm(prepareDBStyleRegex(relativePathPattern)); + DBUtils.tryToTranslateRegExpToLikePattern(prepareDBStyleRegex(relativePathPattern)); List<DataSetFileRecord> records; if (likeExpressionOrNull == null) { @@ -206,7 +207,8 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro } else { records = - dao.listDataSetFilesByRelativePathLikeExpression(dataSetId, likeExpressionOrNull); + dao.listDataSetFilesByRelativePathLikeExpression(dataSetId, + likeExpressionOrNull); } return asPathInfos(records); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java index d94f6683f728d1ce83ddf1d64e7cb0d846e7f46f..6230dcb80ff5180d1595e781c7381d61df0889fe 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/HierarchicalContentProvider.java @@ -107,7 +107,6 @@ public class HierarchicalContentProvider implements IHierarchicalContentProvider } } - private IHierarchicalContent tryCreateComponentContent(ExternalData component) { try @@ -129,7 +128,7 @@ public class HierarchicalContentProvider implements IHierarchicalContentProvider public IHierarchicalContent asContent(final IDatasetLocation datasetLocation) { - // NOTE: remember to call IHierarchicalContent.close() to unlock the dataset when finished + // NOTE: remember to call IHierarchicalContent.close() to unlock the data set when finished // working with the IHierarchivalContent directoryProvider.getShareIdManager().lock(datasetLocation.getDataSetCode()); File dataSetDirectory = directoryProvider.getDataSetDirectory(datasetLocation); diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IHierarchicalContentProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IHierarchicalContentProvider.java index 00f88e03adae307241b3a6b33b92a18a3c99f0cf..40b1e49ef456a274c8a77df83723989130686067 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IHierarchicalContentProvider.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IHierarchicalContentProvider.java @@ -26,7 +26,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocation; * A provider of {@link IHierarchicalContent} for given data set. * <p> * <b>NOTE</b>{@link IHierarchicalContent#close()} needs to be called to release resources when - * working with the content is done. Otherwise data set may e.g. remain locked in its share until + * working with the content is done. Otherwise data set will remain locked in its share until * timeout occurs. * * @author Piotr Buczek @@ -36,7 +36,7 @@ public interface IHierarchicalContentProvider { /** - * This is method needs to access openBIS DB to retrieve information first. + * This method needs to access openBIS DB to retrieve information first. * * @return {@link IHierarchicalContent} for the specified data set * @throws IllegalArgumentException if data set doesn't exist in openBIS DB @@ -55,7 +55,7 @@ public interface IHierarchicalContentProvider /** * @return {@link IHierarchicalContent} for the specified data set - * @deprecated doesn't support abstraction for virtual data sets, use {@link #asContent(String)} + * @deprecated doesn't support container data sets, use {@link #asContent(String)} */ @Deprecated IHierarchicalContent asContent(IDatasetLocation datasetLocation); @@ -65,7 +65,7 @@ public interface IHierarchicalContentProvider * * @param datasetDirectory the directory file of the data set * @return {@link IHierarchicalContent} for the specified data set - * @deprecated doesn't support abstraction for virtual data sets, use {@link #asContent(String)} + * @deprecated doesn't support container data sets, use {@link #asContent(String)} */ @Deprecated IHierarchicalContent asContent(File datasetDirectory);