From 39e54fa83169ff9a7570a2c32a3bf54d3589d5a8 Mon Sep 17 00:00:00 2001 From: parkera <parkera> Date: Mon, 8 Aug 2016 09:25:55 +0000 Subject: [PATCH] SSDM-3726: File search domain first implementation SVN: 36879 --- .../DatabaseBasedDataSetPathInfoProvider.java | 33 ++++++++-- .../sequencedatabases/FileSearchDomain.java | 66 +++++++++++++++++++ .../shared/IDataSetPathInfoProvider.java | 7 +- .../systemtests/FileSearchDomainTest.java | 25 +++++++ 4 files changed, 124 insertions(+), 7 deletions(-) create mode 100644 datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/FileSearchDomain.java create mode 100644 datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/FileSearchDomainTest.java 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 90ce73e550b..bf42b3c88c6 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 @@ -26,7 +26,6 @@ import java.util.Map.Entry; import net.lemnik.eodsql.BaseQuery; import net.lemnik.eodsql.QueryTool; import net.lemnik.eodsql.Select; - import ch.rinn.restrictions.Private; import ch.systemsx.cisd.common.db.DBUtils; import ch.systemsx.cisd.openbis.dss.generic.shared.IDataSetPathInfoProvider; @@ -40,11 +39,13 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.utils.PathInfoDataSourceProvi public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoProvider { @Private - public static final class DataSetFileRecord + public static class DataSetFileRecord { // Attribute names as defined in database schema public long id; + public Long dase_id; + public Long parent_id; public String relative_path; @@ -59,14 +60,26 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro public Date last_modified; } - + + @Private + public static class ExtendedDataSetFileRecord extends DataSetFileRecord + { + public String code; + } + @Private static interface IPathInfoDAO extends BaseQuery { + static String SELECT_DATA_SET_FILES = "SELECT id, parent_id, relative_path, file_name, size_in_bytes, checksum_crc32, " + "is_directory, last_modified FROM data_set_files "; + static String SELECT_DATA_SET_FILES_WITH_DATA_SET_INFO = + "SELECT f.id, f.dase_id, f.parent_id, f.relative_path, f.file_name, f.size_in_bytes, " + + "f.checksum_crc32, f.is_directory, f.last_modified, s.code " + + " FROM data_set_files f LEFT JOIN data_sets s ON (s.id = f.dase_id) "; + @Select("SELECT id FROM data_sets WHERE code = ?{1}") public Long tryToGetDataSetId(String dataSetCode); @@ -85,7 +98,10 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro @Select(SELECT_DATA_SET_FILES + "WHERE dase_id = ?{1} AND relative_path ~ ?{2}") public List<DataSetFileRecord> listDataSetFilesByRelativePathRegex(long dataSetId, String relativePathRegex); - + + @Select(SELECT_DATA_SET_FILES_WITH_DATA_SET_INFO + "WHERE relative_path LIKE ?{1}") + public List<ExtendedDataSetFileRecord> listFilesByRelativePathLikeExpression(String relativePathLikeExpression); + @Select(SELECT_DATA_SET_FILES + "WHERE dase_id = ?{1} AND relative_path LIKE ?{2}") public List<DataSetFileRecord> listDataSetFilesByRelativePathLikeExpression(long dataSetId, String relativePathLikeExpression); @@ -119,7 +135,14 @@ public class DatabaseBasedDataSetPathInfoProvider implements IDataSetPathInfoPro { this.dao = dao; } - + + @Override + public List<ExtendedDataSetFileRecord> listPathInfosByRegularExpression( + String substring) { + List<ExtendedDataSetFileRecord> fileRecords = getDao().listFilesByRelativePathLikeExpression("%" + substring + "%"); + return fileRecords; + } + @Override public List<DataSetPathInfo> listPathInfosByRegularExpression(String dataSetCode, final String regularExpression) diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/FileSearchDomain.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/FileSearchDomain.java new file mode 100644 index 00000000000..972caedacd0 --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v2/sequencedatabases/FileSearchDomain.java @@ -0,0 +1,66 @@ +package ch.systemsx.cisd.openbis.dss.generic.server.api.v2.sequencedatabases; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import ch.systemsx.cisd.openbis.dss.generic.server.DatabaseBasedDataSetPathInfoProvider.ExtendedDataSetFileRecord; +import ch.systemsx.cisd.openbis.dss.generic.shared.IDataSetPathInfoProvider; +import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.DataSetFileSearchResultLocation; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomain; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult; + +public class FileSearchDomain extends AbstractSearchDomainService +{ + + public FileSearchDomain(Properties properties, File storeRoot) + { + super(properties, storeRoot); + } + + @Override + public boolean isAvailable() + { + // TODO Auto-generated method stub + return true; + } + + + @Override + public List<SearchDomainSearchResult> search(String searchString, Map<String, String> optionalParametersOrNull) + { + IDataSetPathInfoProvider dataSetPathInfoProvider = ServiceProvider.getDataSetPathInfoProvider(); + List<ExtendedDataSetFileRecord> dataSetPathInfos = dataSetPathInfoProvider.listPathInfosByRegularExpression(searchString); + + List<SearchDomainSearchResult> results = new ArrayList<SearchDomainSearchResult>(); + + for(ExtendedDataSetFileRecord dataSetPathInfo : dataSetPathInfos){ + + SearchDomainSearchResult searchDomainSearchResult = new SearchDomainSearchResult(); + + SearchDomain searchDomain = new SearchDomain(); + searchDomain.setName("File"); + searchDomain.setLabel("File"); + + searchDomainSearchResult.setSearchDomain(searchDomain); + + DataSetFileSearchResultLocation dfsrl = new DataSetFileSearchResultLocation(); + dfsrl.setPermId(dataSetPathInfo.code); + dfsrl.setCode(dataSetPathInfo.code); + dfsrl.setPathInDataSet(dataSetPathInfo.relative_path); + dfsrl.setIdentifier(dataSetPathInfo.code); + dfsrl.setEntityKind(EntityKind.DATA_SET); + + searchDomainSearchResult.setResultLocation(dfsrl); + results.add(searchDomainSearchResult); + } + + return results; + } + + +} \ No newline at end of file diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IDataSetPathInfoProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IDataSetPathInfoProvider.java index 14338a0f59f..408094b5d76 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IDataSetPathInfoProvider.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IDataSetPathInfoProvider.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.dss.generic.shared; import java.util.List; import java.util.Map; +import ch.systemsx.cisd.openbis.dss.generic.server.DatabaseBasedDataSetPathInfoProvider.ExtendedDataSetFileRecord; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetPathInfo; /** @@ -28,9 +29,11 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetPathInfo; */ public interface IDataSetPathInfoProvider { - public List<DataSetPathInfo> listPathInfosByRegularExpression(String dataSetCode, - String regularExpression); + + public List<DataSetPathInfo> listPathInfosByRegularExpression(String dataSetCode, String regularExpression); + public List<ExtendedDataSetFileRecord> listPathInfosByRegularExpression(String regularExpression); + public DataSetPathInfo tryGetFullDataSetRootPathInfo(String dataSetCode); public ISingleDataSetPathInfoProvider tryGetSingleDataSetPathInfoProvider(String dataSetCode); diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/FileSearchDomainTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/FileSearchDomainTest.java new file mode 100644 index 00000000000..cabb2405ed4 --- /dev/null +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/datastoreserver/systemtests/FileSearchDomainTest.java @@ -0,0 +1,25 @@ +package ch.systemsx.cisd.openbis.datastoreserver.systemtests; + +import java.util.List; + +import org.testng.annotations.Test; + +import ch.systemsx.cisd.openbis.generic.shared.api.v1.IGeneralInformationService; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchDomainSearchResult; + +public class FileSearchDomainTest extends GenericSystemTest +{ + + @Test + public void test() throws Exception + { + System.out.println("HERE"); + IGeneralInformationService gis = getGeneralInformationService(); + String sessionToken = gis.tryToAuthenticateForAllServices("test", "test"); + + List<SearchDomainSearchResult> results = gis.searchOnSearchDomain(sessionToken, "File", "", null); + + System.out.println("RESULT: " + results); + gis.logout(sessionToken); + } +} \ No newline at end of file -- GitLab