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 ad3415a3007746ee1069724e6283b261b78ed797..77a9be667a8c4819752f8994b609702d97206ee1 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 4556eff62638289fb31419173d0c013b731b37dc..2507f9e9bcabd998cbf4ea685be0311f376661ad 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 52a86b7f003819d9bd155bc4721a76ba44175e4f..07cf24091a95f5355a51375ab326e4c8012437f6 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 958f643f9ee60b614dcfaa86b63aeb2fb0ae0230..bc1aab8911633be294a0d91efd9c6ecb4f7b0bd6 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 ed9c22a20cd3b40f3716818c36710c3c4f2f4992..515920cd652fdf8c24727df89714d51e7225aa29 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 67ee0e2aab01cb06af97d7a4be1061ddeed3b9fd..1870ea93c6dd490b652c15baf59118234519de8c 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 87a8c6831fa56975b30b5bd5f04259dc89c069f8..75bca955dac4dd3374726951b44aeaebc917f5b2 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 4cfffcdcceba20ee2ef0d414b220a39c1e747269..743daa4b38b603a68cb2f133c9f6c014b6c71f8f 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 62d8e8972a942f8a4ff5eca2abd84ace50ab143c..3b5f306416e8417d80246ce40d584af7b1e6ac6a 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