From 59fbdef3b1cfc36c7fe45b5eb92921ed4cf9dba0 Mon Sep 17 00:00:00 2001 From: jakubs <jakubs> Date: Wed, 3 Oct 2012 11:06:49 +0000 Subject: [PATCH] SP-299 BIS-211 add filter for storage confirmed datasets in general information service SVN: 26947 --- .../api/v1/GeneralInformationService.java | 5 +++-- ...DataSetByExperimentIdentifierValidator.java | 18 ++++++++++-------- .../StorageConfirmedForAdminValidator.java | 11 ++++++++--- .../datasetlister/DataSetLister.java | 5 +++++ .../datasetlister/DataSetRecord.java | 2 ++ .../datasetlister/IDataSetListingQuery.java | 2 ++ .../generic/shared/api/v1/Translator.java | 2 ++ .../GeneralInformationServiceJsonApiTest.java | 17 +++++++++++++++++ .../sql/postgresql/122/030=external_data.tsv | 2 +- 9 files changed, 50 insertions(+), 14 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java index ad3415a3007..77a9be667a8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationService.java @@ -864,12 +864,13 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio // filter by user final PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId); - final DataSetByExperimentIdentifierValidator validator = + final DataSetByExperimentIdentifierValidator experimentIdentifierValidator = new DataSetByExperimentIdentifierValidator(); + final ArrayList<DataSet> dataSets = new ArrayList<DataSet>(allDataSets.size()); for (DataSet dataSet : allDataSets) { - if (validator.doValidation(person, dataSet)) + if (experimentIdentifierValidator.doValidation(person, dataSet)) { dataSets.add(dataSet); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/DataSetByExperimentIdentifierValidator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/DataSetByExperimentIdentifierValidator.java index 4556eff6263..2507f9e9bca 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/DataSetByExperimentIdentifierValidator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/DataSetByExperimentIdentifierValidator.java @@ -32,14 +32,16 @@ public class DataSetByExperimentIdentifierValidator extends AbstractValidator<Da @Override public boolean doValidation(PersonPE person, final DataSet value) { - return validator.isValid(person, new IIdentifierHolder() - { - @Override - public String getIdentifier() - { - return value.getExperimentIdentifier(); - } - }); + + return StorageConfirmedForAdminValidator.isValid(person, value.isStorageConfirmed()) + && validator.isValid(person, new IIdentifierHolder() + { + @Override + public String getIdentifier() + { + return value.getExperimentIdentifier(); + } + }); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/StorageConfirmedForAdminValidator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/StorageConfirmedForAdminValidator.java index 52a86b7f003..07cf24091a9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/StorageConfirmedForAdminValidator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/authorization/validator/StorageConfirmedForAdminValidator.java @@ -21,13 +21,13 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.RoleAssignmentPE; /** - * @author Franz-Josef Elmer + * @author Jakub Straszewski */ public class StorageConfirmedForAdminValidator extends AbstractValidator<ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData> { - private boolean isPersonAllowedForNotConfirmed(PersonPE person) + private static boolean isPersonAllowedForNotConfirmed(PersonPE person) { for (RoleAssignmentPE role : person.getAllPersonRoles()) { @@ -39,10 +39,15 @@ public class StorageConfirmedForAdminValidator extends return false; } + public static boolean isValid(PersonPE person, boolean isStorageConfirmed) + { + return isStorageConfirmed || isPersonAllowedForNotConfirmed(person); + } + @Override public boolean doValidation(PersonPE person, ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData value) { - return value.isStorageConfirmation() || isPersonAllowedForNotConfirmed(person); + return isValid(person, value.isStorageConfirmation()); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java index 958f643f9ee..bc1aab89116 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetLister.java @@ -173,6 +173,11 @@ public class DataSetLister implements IDataSetLister initializer.setDataSetTypeCode(dataSet.dt_code); initializer.setContainerDataSet(DataSetKind.CONTAINER.name().equals( dataSet.dt_data_set_kind)); + initializer.setStorageConfirmed(dataSet.ed_sc == null || dataSet.ed_sc); // if there's no + // external data + // than the storage + // is considered + // confirmed initializer.setLinkDataSet(DataSetKind.LINK.name().equals(dataSet.dt_data_set_kind)); if (initializer.isLinkDataSet()) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetRecord.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetRecord.java index ed9c22a20cd..515920cd652 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetRecord.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/DataSetRecord.java @@ -36,6 +36,8 @@ public class DataSetRecord public String dt_data_set_kind; + public Boolean ed_sc; + public String ex_code; public String sa_code; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/IDataSetListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/IDataSetListingQuery.java index 67ee0e2aab0..1870ea93c6d 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/IDataSetListingQuery.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/fetchoptions/datasetlister/IDataSetListingQuery.java @@ -37,6 +37,7 @@ public interface IDataSetListingQuery extends BaseQuery + " ds.modification_timestamp as ds_modification_timestamp," + " dt.code as dt_code, dt.data_set_kind as dt_data_set_kind," + " ex.code as ex_code, " + + " ed.storage_confirmation as ed_sc," + " sa.code as sa_code, sa.dbin_id as sa_dbin_id, sac.code as sac_code," + " pe.first_name as pe_first_name, pe.last_name as pe_last_name, pe.email as pe_email, pe.user_id as pe_user_id," + " mod.first_name as mod_first_name, mod.last_name as mod_last_name, mod.email as mod_email, mod.user_id as mod_user_id," @@ -45,6 +46,7 @@ public interface IDataSetListingQuery extends BaseQuery + " ld.external_code as ld_external_code, edms.id as edms_id, edms.code as edms_code, edms.label as edms_label, edms.url_template as edms_url_template, edms.is_openbis as edms_is_openbis" + " from data ds inner join data_set_types dt on ds.dsty_id = dt.id" + " inner join experiments ex on ds.expe_id = ex.id" + + " left outer join external_data ed on ds.id = ed.data_id" + " left outer join link_data ld on ds.id = ld.data_id" + " left outer join external_data_management_systems edms on ld.edms_id = edms.id" + " left outer join samples sa on ds.samp_id = sa.id" diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/Translator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/Translator.java index 87a8c6831fa..75bca955dac 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/Translator.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/Translator.java @@ -342,6 +342,8 @@ public class Translator initializer.setExperimentIdentifier(externalDatum.getExperiment().getIdentifier()); initializer.setSampleIdentifierOrNull(externalDatum.getSampleIdentifier()); initializer.setDataSetTypeCode(externalDatum.getDataSetType().getCode()); + initializer.setStorageConfirmed(externalDatum.isStorageConfirmation()); + List<IEntityProperty> properties = externalDatum.getProperties(); for (IEntityProperty prop : properties) { diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/remoteapitest/api/v1/GeneralInformationServiceJsonApiTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/remoteapitest/api/v1/GeneralInformationServiceJsonApiTest.java index 4cfffcdcceb..743daa4b38b 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/remoteapitest/api/v1/GeneralInformationServiceJsonApiTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/remoteapitest/api/v1/GeneralInformationServiceJsonApiTest.java @@ -68,6 +68,8 @@ public class GeneralInformationServiceJsonApiTest extends RemoteApiTestCase protected String sessionToken; + protected String userSessionToken; + protected IGeneralInformationService createService() { return TestJsonServiceFactory.createGeneralInfoService(); @@ -78,6 +80,8 @@ public class GeneralInformationServiceJsonApiTest extends RemoteApiTestCase { generalInformationService = createService(); sessionToken = generalInformationService.tryToAuthenticateForAllServices("test", "a"); + userSessionToken = + generalInformationService.tryToAuthenticateForAllServices("test_role", "a"); } @AfterMethod @@ -327,6 +331,19 @@ public class GeneralInformationServiceJsonApiTest extends RemoteApiTestCase assertEquals(true, result.size() > 0); } + @Test + public void testListDataSetsForSampleForRegularUserDoesntIncludeStorageNonConfirmed() + { + // Search for Samples first + SearchCriteria sc = new SearchCriteria(); + sc.addMatchClause(MatchClause.createPropertyMatch("ORGANISM", "HUMAN")); + List<Sample> samples = generalInformationService.searchForSamples(userSessionToken, sc); + List<DataSet> result = + generalInformationService.listDataSetsForSample(userSessionToken, samples.get(0), + true); + assertEquals(0, result.size()); + } + @Test public void testListDataSetsForEmptySampleList() { diff --git a/openbis/sourceTest/sql/postgresql/122/030=external_data.tsv b/openbis/sourceTest/sql/postgresql/122/030=external_data.tsv index 62d8e8972a9..3b5f306416e 100644 --- a/openbis/sourceTest/sql/postgresql/122/030=external_data.tsv +++ b/openbis/sourceTest/sql/postgresql/122/030=external_data.tsv @@ -1,6 +1,6 @@ 2 xxx/yyy/zzz 1 1 4 U \N AVAILABLE \N \N f -50 t 4 analysis/result 2 1 4 U \N AVAILABLE \N \N f -50 t -5 a/1 1 1 4 U \N AVAILABLE 42 4711 f 42 t +5 a/1 1 1 4 U \N AVAILABLE 42 4711 f 42 f 6 a/2 2 1 4 U \N AVAILABLE \N \N f -50 t 7 a/3 3 1 4 U \N AVAILABLE \N \N f -50 t 8 xml/result-8 8 1 4 U \N AVAILABLE \N \N f -50 t -- GitLab