From 4106fea342a63cea362b623c3f5b80dceb4baf16 Mon Sep 17 00:00:00 2001 From: jakubs <jakubs> Date: Mon, 3 Dec 2012 09:12:01 +0000 Subject: [PATCH] SP-416 BIS-270 extract read only methods from transaction to search service SVN: 27823 --- .../api/v1/impl/AuthorizationHelper.java | 16 ++- .../v2/IDataSetRegistrationTransactionV2.java | 20 ++- .../api/v2/impl/AbstractTransactionState.java | 12 -- .../impl/DataSetRegistrationTransaction.java | 47 ++----- .../api/v2/impl/SearchService.java | 86 ++++++++++++ ...capsulatedFilteredBasicOpenBISService.java | 124 +++++++++++++----- .../server/EncapsulatedOpenBISService.java | 7 + .../IEncapsulatedBasicOpenBISService.java | 54 ++++++++ .../shared/IEncapsulatedOpenBISService.java | 59 +-------- .../api/internal/v2/ISearchService.java | 53 ++++++++ 10 files changed, 337 insertions(+), 141 deletions(-) diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AuthorizationHelper.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AuthorizationHelper.java index a06983aa502..ae246ce1f67 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AuthorizationHelper.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AuthorizationHelper.java @@ -16,6 +16,7 @@ package ch.systemsx.cisd.etlserver.registrator.api.v1.impl; +import java.util.Collections; import java.util.HashSet; import java.util.LinkedList; import java.util.List; @@ -62,9 +63,20 @@ public class AuthorizationHelper String user, List<String> codes); } + /** + * Returns null if given entity is not visible, or the entity if it is visible + */ + public static <T> T filterToVisible(IEncapsulatedOpenBISService openBisService, String user, + T entity, IMapper<T, String> codeMapper, EntityKind entityKind) + { + List<String> visible = + entityKind.filterToVisible(openBisService, user, + Collections.singletonList(codeMapper.map(entity))); + return visible.size() == 1 ? entity : null; + } + public static <T> List<T> filterToVisible(IEncapsulatedOpenBISService openBisService, - String user, List<T> entities, - IMapper<T, String> codeMapper, EntityKind entityKind) + String user, List<T> entities, IMapper<T, String> codeMapper, EntityKind entityKind) { // create a list of codes List<String> codes = new LinkedList<String>(); diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/IDataSetRegistrationTransactionV2.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/IDataSetRegistrationTransactionV2.java index e2a8512b50c..9311ca858b2 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/IDataSetRegistrationTransactionV2.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/IDataSetRegistrationTransactionV2.java @@ -22,6 +22,7 @@ import net.lemnik.eodsql.DynamicTransactionQuery; import ch.systemsx.cisd.etlserver.TopLevelDataSetRegistratorGlobalState; import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationContext; +import ch.systemsx.cisd.etlserver.registrator.api.v2.impl.SearchService; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.IDataSetImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.IExperimentImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.IExternalDataManagementSystemImmutable; @@ -59,7 +60,9 @@ public interface IDataSetRegistrationTransactionV2 * Get a data set from the openBIS AS. Returns null if the data set does not exist. * * @return A data set or null + * @deprecated Use {@link SearchService#getDataSet(String)} */ + @Deprecated IDataSetImmutable getDataSet(String dataSetCode); /** @@ -81,7 +84,9 @@ public interface IDataSetRegistrationTransactionV2 * Get a sample from the openBIS AS. Returns null if the sample does not exist. * * @return A sample or null + * @deprecated Use {@link SearchService#getSample(String)} */ + @Deprecated ISampleImmutable getSample(String sampleIdentifierString); /** @@ -118,7 +123,10 @@ public interface IDataSetRegistrationTransactionV2 /** * Get an experiment from the openBIS AS. + * + * @deprecated Use {@link SearchService#getExperiment(String)} */ + @Deprecated IExperimentImmutable getExperiment(String experimentIdentifierString); /** @@ -152,7 +160,9 @@ public interface IDataSetRegistrationTransactionV2 * Get a project from the openBIS AS. Returns null if the project does not exist. * * @return A project or null + * @deprecated Use {@link SearchService#getProject(String)} */ + @Deprecated IProjectImmutable getProject(String projectIdentifier); /** @@ -180,7 +190,9 @@ public interface IDataSetRegistrationTransactionV2 * Get a space from the openBIS AS. Returns null if the space does not exist. * * @return A space or null + * @deprecated Use {@link SearchService#getSpace(String)} */ + @Deprecated ISpaceImmutable getSpace(String spaceCode); /** @@ -194,7 +206,9 @@ public interface IDataSetRegistrationTransactionV2 * Get a material from the openBIS AS. Returns null if the material does not exist. * * @return A material or null + * @deprecated Use {@link SearchService#getMaterial(String)} */ + @Deprecated IMaterialImmutable getMaterial(String identifier); /** @@ -243,14 +257,14 @@ public interface IDataSetRegistrationTransactionV2 /** * Only allowed when the user is available. * - * @return Read-only metaproject with given name for current user. + * @return metaproject with given name for current user. */ IMetaproject getMetaproject(String name); /** * Only allowed when the user is not available. * - * @return Read-only metaproject with given name for specified user. + * @return metaproject with given name for specified user. */ IMetaproject getMetaproject(String name, String ownerId); @@ -258,7 +272,9 @@ public interface IDataSetRegistrationTransactionV2 * Get the read-only vocabulary with given code * * @returns null if the vocabulary is not found + * @deprecated Use {@link SearchService#getVocabulary(String)} */ + @Deprecated IVocabularyImmutable getVocabulary(String code); /** diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/AbstractTransactionState.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/AbstractTransactionState.java index aa61040dfec..fc8595803d2 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/AbstractTransactionState.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/AbstractTransactionState.java @@ -407,18 +407,6 @@ public abstract class AbstractTransactionState<T extends DataSetInformation> } } - public IDataSetImmutable getDataSet(String dataSetCode) - { - ExternalData dataSet = openBisService.tryGetDataSet(dataSetCode); - if (dataSet == null) - { - return null; - } else - { - return new DataSetImmutable(dataSet, openBisService); - } - } - public IDataSetUpdatable getDataSetForUpdate(String dataSetCode) { // See if we already have an updatable version of the data set diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/DataSetRegistrationTransaction.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/DataSetRegistrationTransaction.java index 8edf2d99385..c9fbe9b92db 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/DataSetRegistrationTransaction.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/DataSetRegistrationTransaction.java @@ -78,13 +78,6 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetRegistrationInform import ch.systemsx.cisd.openbis.generic.shared.basic.EntityOperationsState; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; -import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier; -import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifierFactory; -import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; -import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifierFactory; -import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; -import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory; -import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; /** * The implementation of a transaction. This class is designed to be used in one thread. @@ -275,7 +268,7 @@ public class DataSetRegistrationTransaction<T extends DataSetInformation> implem @Override public IDataSetImmutable getDataSet(String dataSetCode) { - return getStateAsLiveState().getDataSet(dataSetCode); + return getSearchServiceUnfiltered().getDataSet(dataSetCode); } @Override @@ -293,11 +286,7 @@ public class DataSetRegistrationTransaction<T extends DataSetInformation> implem @Override public ISampleImmutable getSample(String sampleIdentifierString) { - SampleIdentifier sampleIdentifier = - new SampleIdentifierFactory(sampleIdentifierString).createIdentifier(); - ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample sampleOrNull = - openBisService.tryGetSampleWithExperiment(sampleIdentifier); - return (null == sampleOrNull) ? null : new SampleImmutable(sampleOrNull); + return getSearchServiceUnfiltered().getSample(sampleIdentifierString); } @Override @@ -339,11 +328,7 @@ public class DataSetRegistrationTransaction<T extends DataSetInformation> implem @Override public IExperimentImmutable getExperiment(String experimentIdentifierString) { - ExperimentIdentifier experimentIdentifier = - new ExperimentIdentifierFactory(experimentIdentifierString).createIdentifier(); - ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment experimentOrNull = - openBisService.tryGetExperiment(experimentIdentifier); - return (null == experimentOrNull) ? null : new ExperimentImmutable(experimentOrNull); + return getSearchServiceUnfiltered().getExperiment(experimentIdentifierString); } @Override @@ -361,13 +346,9 @@ public class DataSetRegistrationTransaction<T extends DataSetInformation> implem } @Override - public IProjectImmutable getProject(String projectIdentifierString) + public IProjectImmutable getProject(String projectIdentifier) { - ProjectIdentifier projectIdentifier = - new ProjectIdentifierFactory(projectIdentifierString).createIdentifier(); - ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project projectOrNull = - openBisService.tryGetProject(projectIdentifier); - return (null == projectOrNull) ? null : new ProjectImmutable(projectOrNull); + return getSearchServiceUnfiltered().getProject(projectIdentifier); } @Override @@ -391,31 +372,19 @@ public class DataSetRegistrationTransaction<T extends DataSetInformation> implem @Override public ISpaceImmutable getSpace(String spaceCode) { - SpaceIdentifier spaceIdentifier = new SpaceIdentifier(spaceCode); - ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space spaceOrNull = - openBisService.tryGetSpace(spaceIdentifier); - return (null == spaceOrNull) ? null : new SpaceImmutable(spaceOrNull); + return getSearchServiceUnfiltered().getSpace(spaceCode); } @Override public IMaterialImmutable getMaterial(String materialCode, String materialType) { - MaterialIdentifier materialIdentifier = new MaterialIdentifier(materialCode, materialType); - ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material materialOrNull = - openBisService.tryGetMaterial(materialIdentifier); - return (null == materialOrNull) ? null : new MaterialImmutable(materialOrNull); + return getSearchServiceUnfiltered().getMaterial(materialCode, materialType); } @Override public IMaterialImmutable getMaterial(String identifier) { - MaterialIdentifier materialId = MaterialIdentifier.tryParseIdentifier(identifier); - if (materialId == null) - { - throw new IllegalArgumentException("Incorrect material identifier format " + identifier - + ". Expected code (type)"); - } - return getMaterial(materialId.getCode(), materialId.getTypeCode()); + return getSearchServiceUnfiltered().getMaterial(identifier); } @Override diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/SearchService.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/SearchService.java index 4fdf53af288..ed1a2620a80 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/SearchService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/impl/SearchService.java @@ -35,9 +35,11 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.IMaterialImmu import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.IMetaprojectAssignments; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.IMetaprojectContent; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.IMetaprojectImmutable; +import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.IProjectImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.IPropertyAssignmentImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.ISampleImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.ISearchService; +import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.ISpaceImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.IVocabularyImmutable; import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v2.MaterialIdentifierCollection; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SampleFetchOption; @@ -54,8 +56,13 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Metaproject; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifierFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifierFactory; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; /** @@ -70,6 +77,25 @@ public class SearchService implements ISearchService this.openBisService = openBisService; } + @Override + public IProjectImmutable getProject(String projectIdentifierString) + { + ProjectIdentifier projectIdentifier = + new ProjectIdentifierFactory(projectIdentifierString).createIdentifier(); + ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project projectOrNull = + openBisService.tryGetProject(projectIdentifier); + return (null == projectOrNull) ? null : new ProjectImmutable(projectOrNull); + } + + @Override + public ISpaceImmutable getSpace(String spaceCode) + { + SpaceIdentifier spaceIdentifier = new SpaceIdentifier(spaceCode); + ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space spaceOrNull = + openBisService.tryGetSpace(spaceIdentifier); + return (null == spaceOrNull) ? null : new SpaceImmutable(spaceOrNull); + } + @Override public List<IExperimentImmutable> listExperiments(String projectIdentifierString) { @@ -290,6 +316,12 @@ public class SearchService implements ISearchService return ConversionUtils.convertToMetaprojectsImmutable(metaprojects); } + @Override + public IMetaprojectImmutable getMetaproject(String name) + { + return new MetaprojectImmutable(openBisService.tryGetMetaproject(name)); + } + @Override public IMetaprojectAssignments getMetaprojectAssignments(String name) { @@ -305,4 +337,58 @@ public class SearchService implements ISearchService openBisService.listMetaprojectsForEntity(entity.getEntityId()); return ConversionUtils.convertToMetaprojectsImmutable(metaprojects); } + + @Override + public IDataSetImmutable getDataSet(String dataSetCode) + { + ExternalData dataSet = openBisService.tryGetDataSet(dataSetCode); + if (dataSet == null) + { + return null; + } else + { + return new DataSetImmutable(dataSet, openBisService); + } + } + + @Override + public IExperimentImmutable getExperiment(String experimentIdentifierString) + { + ExperimentIdentifier experimentIdentifier = + new ExperimentIdentifierFactory(experimentIdentifierString).createIdentifier(); + ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment experimentOrNull = + openBisService.tryGetExperiment(experimentIdentifier); + return (null == experimentOrNull) ? null : new ExperimentImmutable(experimentOrNull); + } + + @Override + public ISampleImmutable getSample(String sampleIdentifierString) + { + SampleIdentifier sampleIdentifier = + new SampleIdentifierFactory(sampleIdentifierString).createIdentifier(); + ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample sampleOrNull = + openBisService.tryGetSampleWithExperiment(sampleIdentifier); + return (null == sampleOrNull) ? null : new SampleImmutable(sampleOrNull); + } + + @Override + public IMaterialImmutable getMaterial(String materialCode, String materialType) + { + MaterialIdentifier materialIdentifier = new MaterialIdentifier(materialCode, materialType); + ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material materialOrNull = + openBisService.tryGetMaterial(materialIdentifier); + return (null == materialOrNull) ? null : new MaterialImmutable(materialOrNull); + } + + @Override + public IMaterialImmutable getMaterial(String identifier) + { + MaterialIdentifier materialId = MaterialIdentifier.tryParseIdentifier(identifier); + if (materialId == null) + { + throw new IllegalArgumentException("Incorrect material identifier format " + identifier + + ". Expected code (type)"); + } + return getMaterial(materialId.getCode(), materialId.getTypeCode()); + } } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedFilteredBasicOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedFilteredBasicOpenBISService.java index 1c6db5b7534..cec395ee9a9 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedFilteredBasicOpenBISService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedFilteredBasicOpenBISService.java @@ -35,13 +35,19 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListMaterialCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Metaproject; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MetaprojectAssignments; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MetaprojectAssignmentsFetchOption; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind; /** @@ -71,6 +77,47 @@ public class EncapsulatedFilteredBasicOpenBISService implements IEncapsulatedBas this.userName = userName; } + private final static IMapper<ExternalData, String> externalDataCodeMapper = + new IMapper<ExternalData, String>() + { + @Override + public String map(ExternalData item) + { + return item.getCode(); + } + }; + + private final static IMapper<Sample, String> sampleIdMapper = new IMapper<Sample, String>() + { + @Override + public String map(Sample item) + { + return item.getIdentifier(); + } + }; + + private final static IMapper<Experiment, String> experimentIdMapper = + new IMapper<Experiment, String>() + { + @Override + public String map(Experiment item) + { + return item.getIdentifier(); + } + }; + + @Override + public Project tryGetProject(ProjectIdentifier projectIdentifier) throws UserFailureException + { + return encapsulatedService.tryGetProject(projectIdentifier); + } + + @Override + public Space tryGetSpace(SpaceIdentifier spaceIdentifier) throws UserFailureException + { + return encapsulatedService.tryGetSpace(spaceIdentifier); + } + @Override public DataSetTypeWithVocabularyTerms getDataSetType(String dataSetTypeCode) { @@ -81,58 +128,52 @@ public class EncapsulatedFilteredBasicOpenBISService implements IEncapsulatedBas @Override public List<Sample> searchForSamples(SearchCriteria searchCriteria) { - IMapper<Sample, String> idMapper = new IMapper<Sample, String>() - { - @Override - public String map(Sample item) - { - return item.getIdentifier(); - } - }; List<Sample> samples = etlService.searchForSamples(systemSessionToken, searchCriteria); return AuthorizationHelper.filterToVisible(encapsulatedService, userName, samples, - idMapper, AuthorizationHelper.EntityKind.SAMPLE); + sampleIdMapper, AuthorizationHelper.EntityKind.SAMPLE); + } + @Override + @ManagedAuthentication + public Sample tryGetSampleWithExperiment(SampleIdentifier sampleIdentifier) + throws UserFailureException + { + Sample sample = encapsulatedService.tryGetSampleWithExperiment(sampleIdentifier); + return AuthorizationHelper.filterToVisible(encapsulatedService, userName, sample, + sampleIdMapper, AuthorizationHelper.EntityKind.SAMPLE); } @Override public List<ExternalData> searchForDataSets(SearchCriteria searchCriteria) { - IMapper<ExternalData, String> codeMapper = new IMapper<ExternalData, String>() - { - @Override - public String map(ExternalData item) - { - return item.getCode(); - } - }; - List<ExternalData> datasets = etlService.searchForDataSets(systemSessionToken, searchCriteria); return AuthorizationHelper.filterToVisible(encapsulatedService, userName, datasets, - codeMapper, AuthorizationHelper.EntityKind.DATA_SET); + externalDataCodeMapper, AuthorizationHelper.EntityKind.DATA_SET); } @Override public List<Experiment> listExperiments(ProjectIdentifier projectIdentifier) { - IMapper<Experiment, String> codeMapper = new IMapper<Experiment, String>() - { - @Override - public String map(Experiment item) - { - return item.getIdentifier(); - } - }; - List<Experiment> datasets = + List<Experiment> experiments = etlService.listExperiments(systemSessionToken, projectIdentifier); - return AuthorizationHelper.filterToVisible(encapsulatedService, userName, datasets, - codeMapper, AuthorizationHelper.EntityKind.EXPERIMENT); + return AuthorizationHelper.filterToVisible(encapsulatedService, userName, experiments, + experimentIdMapper, AuthorizationHelper.EntityKind.EXPERIMENT); + } + + @Override + @ManagedAuthentication + public Experiment tryGetExperiment(ExperimentIdentifier experimentIdentifier) + throws UserFailureException + { + Experiment experiment = encapsulatedService.tryGetExperiment(experimentIdentifier); + return AuthorizationHelper.filterToVisible(encapsulatedService, userName, experiment, + experimentIdMapper, AuthorizationHelper.EntityKind.EXPERIMENT); } @Override @@ -154,6 +195,13 @@ public class EncapsulatedFilteredBasicOpenBISService implements IEncapsulatedBas return etlService.listMaterials(systemSessionToken, criteria, withProperties); } + @Override + @ManagedAuthentication + public Material tryGetMaterial(MaterialIdentifier materialIdentifier) + { + return encapsulatedService.tryGetMaterial(materialIdentifier); + } + @Override public List<? extends EntityTypePropertyType<?>> listPropertyDefinitionsForEntityType( String code, EntityKind entityKind) @@ -168,7 +216,12 @@ public class EncapsulatedFilteredBasicOpenBISService implements IEncapsulatedBas } @Override - @ManagedAuthentication + public Metaproject tryGetMetaproject(String name) + { + return etlService.tryGetMetaproject(systemSessionToken, name, userName); + } + + @Override public MetaprojectAssignments getMetaprojectAssignments(String name) { return etlService.getMetaprojectAssignments(systemSessionToken, name, userName, @@ -176,9 +229,16 @@ public class EncapsulatedFilteredBasicOpenBISService implements IEncapsulatedBas } @Override - @ManagedAuthentication public List<Metaproject> listMetaprojectsForEntity(IObjectId entityId) { return etlService.listMetaprojectsForEntity(systemSessionToken, userName, entityId); } + + @Override + public ExternalData tryGetDataSet(String dataSetCode) throws UserFailureException + { + ExternalData data = encapsulatedService.tryGetDataSet(dataSetCode); + return AuthorizationHelper.filterToVisible(encapsulatedService, userName, data, + externalDataCodeMapper, AuthorizationHelper.EntityKind.DATA_SET); + } } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java index ade9004e3fa..3e25a0c7e1d 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/EncapsulatedOpenBISService.java @@ -820,6 +820,13 @@ public final class EncapsulatedOpenBISService implements IEncapsulatedOpenBISSer "Listing metaprojects is available only for the user-filtered version of service"); } + @Override + public Metaproject tryGetMetaproject(String name) + { + throw new UnsupportedOperationException( + "Getting metaproject is available only for the user-filtered version of service"); + } + @Override @ManagedAuthentication public MetaprojectAssignments getMetaprojectAssignments(String name) diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedBasicOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedBasicOpenBISService.java index d11db413829..c350b7728b8 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedBasicOpenBISService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedBasicOpenBISService.java @@ -29,12 +29,18 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListMaterialCriteria; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Metaproject; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MetaprojectAssignments; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; +import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; /** * The basic subset of the {@link IEncapsulatedOpenBISService}, that requires only service and a @@ -44,6 +50,18 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; */ public interface IEncapsulatedBasicOpenBISService { + /** + * Tries to get the space of specified identifier or <code>null</code> if not found. + */ + @ManagedAuthentication + public Space tryGetSpace(SpaceIdentifier spaceIdentifier) throws UserFailureException; + + /** + * Tries to get the project of specified identifier or <code>null</code> if not found. + */ + @ManagedAuthentication + public Project tryGetProject(ProjectIdentifier projectIdentifier) throws UserFailureException; + /** * Returns the data set type together with assigned property types for the specified data set * type code. @@ -51,12 +69,29 @@ public interface IEncapsulatedBasicOpenBISService @ManagedAuthentication public DataSetTypeWithVocabularyTerms getDataSetType(String dataSetTypeCode); + /** + * Tries to get the data set for the specified data set code, using the ETL server's session + * token. + */ + @ManagedAuthentication + public ExternalData tryGetDataSet(final String dataSetCode) throws UserFailureException; + /** * {@link IETLLIMSService#searchForSamples(String, SearchCriteria)} */ @ManagedAuthentication public List<Sample> searchForSamples(SearchCriteria searchCriteria); + /** + * Gets a sample with the specified identifier. Sample is enriched with properties and the + * experiment with properties. + * + * @return <code>null</code> if no sample could be found for given <var>sampleIdentifier</var>. + */ + @ManagedAuthentication + public Sample tryGetSampleWithExperiment(final SampleIdentifier sampleIdentifier) + throws UserFailureException; + /** * {@link IETLLIMSService#searchForDataSets(String, SearchCriteria)} */ @@ -69,6 +104,13 @@ public interface IEncapsulatedBasicOpenBISService @ManagedAuthentication public List<Experiment> listExperiments(ProjectIdentifier projectIdentifier); + /** + * Tries to get the experiment of specified identifier or <code>null</code> if not found. + */ + @ManagedAuthentication + public Experiment tryGetExperiment(ExperimentIdentifier experimentIdentifier) + throws UserFailureException; + /** * Lists vocabulary terms. */ @@ -90,6 +132,12 @@ public interface IEncapsulatedBasicOpenBISService @ManagedAuthentication public List<Material> listMaterials(ListMaterialCriteria criteria, boolean withProperties); + /** + * For given {@link MaterialIdentifier} returns the corresponding {@link Material}. + */ + @ManagedAuthentication + public Material tryGetMaterial(MaterialIdentifier materialIdentifier); + /** * List property definitions for the given entity type */ @@ -104,6 +152,12 @@ public interface IEncapsulatedBasicOpenBISService @ManagedAuthentication public List<Metaproject> listMetaprojects(); + /** + * For given (@code name} and current user returns the corresponding {@link Metaproject} + */ + @ManagedAuthentication + public Metaproject tryGetMetaproject(String name); + /** * List metaproject assignments for given metaproject and current user. */ diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java index fd71893a3f5..dea973ce2bf 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IEncapsulatedOpenBISService.java @@ -29,15 +29,12 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetArchivingStatus; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletedDataSet; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalDataManagementSystem; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IDatasetLocationNode; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListSampleCriteria; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialIdentifier; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Metaproject; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample; @@ -46,7 +43,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TrackingDataSetCriteria; import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails; import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationResult; @@ -58,8 +54,6 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty; import ch.systemsx.cisd.openbis.generic.shared.dto.SampleUpdatesDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO; -import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifier; -import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; @@ -89,13 +83,6 @@ public interface IEncapsulatedOpenBISService extends IEncapsulatedBasicOpenBISSe public IDatasetLocationNode tryGetDataSetLocation(final String dataSetCode) throws UserFailureException; - /** - * Tries to get the data set for the specified data set code, using the ETL server's session - * token. - */ - @ManagedAuthentication - public ExternalData tryGetDataSet(final String dataSetCode) throws UserFailureException; - /** * Tries to get the data set for the specified data set code and specified session. */ @@ -132,55 +119,19 @@ public interface IEncapsulatedOpenBISService extends IEncapsulatedBasicOpenBISSe public void checkDataSetCollectionAccess(String sessionToken, List<String> dataSetCodes) throws UserFailureException; - /** - * Tries to get the experiment of specified identifier or <code>null</code> if not found. - */ - @ManagedAuthentication - public Experiment tryGetExperiment(ExperimentIdentifier experimentIdentifier) - throws UserFailureException; - - /** - * Tries to get the space of specified identifier or <code>null</code> if not found. - */ - @ManagedAuthentication - public Space tryGetSpace(SpaceIdentifier spaceIdentifier) throws UserFailureException; - - /** - * Tries to get the project of specified identifier or <code>null</code> if not found. - */ - @ManagedAuthentication - public Project tryGetProject(ProjectIdentifier projectIdentifier) throws UserFailureException; - /** * Gets all sample in accordance to the specified criteria. */ @ManagedAuthentication public List<Sample> listSamples(final ListSampleCriteria criteria) throws UserFailureException; - /** - * Gets a sample with the specified identifier. Sample is enriched with properties and the - * experiment with properties. - * - * @return <code>null</code> if no sample could be found for given <var>sampleIdentifier</var>. - */ - @ManagedAuthentication - public Sample tryGetSampleWithExperiment(final SampleIdentifier sampleIdentifier) - throws UserFailureException; - /** * Tries to get the sample identifier for the sample with specified permanent ID. * * @return <code>null</code> if nothing found. */ @ManagedAuthentication - public SampleIdentifier tryGetSampleIdentifier(String samplePermID) - throws UserFailureException; - - /** - * For given {@link MaterialIdentifier} returns the corresponding {@link Material}. - */ - @ManagedAuthentication - public Material tryGetMaterial(MaterialIdentifier materialIdentifier); + public SampleIdentifier tryGetSampleIdentifier(String samplePermID) throws UserFailureException; /** * For given (@code name} and {@code ownerId} returns the corresponding {@link Metaproject} @@ -276,8 +227,8 @@ public interface IEncapsulatedOpenBISService extends IEncapsulatedBasicOpenBISSe * sample is found with no properties. */ @ManagedAuthentication - public IEntityProperty[] tryGetPropertiesOfTopSample( - final SampleIdentifier sampleIdentifier) throws UserFailureException; + public IEntityProperty[] tryGetPropertiesOfTopSample(final SampleIdentifier sampleIdentifier) + throws UserFailureException; /** * Tries to return the properties of the sample with given <var>sampleIdentifier</var>.. If @@ -288,8 +239,8 @@ public interface IEncapsulatedOpenBISService extends IEncapsulatedBasicOpenBISSe * sample found with no properties. */ @ManagedAuthentication - public IEntityProperty[] tryGetPropertiesOfSample( - final SampleIdentifier sampleIdentifier) throws UserFailureException; + public IEntityProperty[] tryGetPropertiesOfSample(final SampleIdentifier sampleIdentifier) + throws UserFailureException; /** See {@link IETLLIMSService#listSamplesByCriteria(String, ListSamplesByPropertyCriteria)} */ @ManagedAuthentication diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v2/ISearchService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v2/ISearchService.java index 1286bb33d6d..570995643b9 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v2/ISearchService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/api/internal/v2/ISearchService.java @@ -142,6 +142,11 @@ public interface ISearchService */ public List<IMetaprojectImmutable> listMetaprojects(); + /** + * Get the given metaproject for the current user + */ + IMetaprojectImmutable getMetaproject(String name); + /** * @return the assignments for the given metaproject for current user. */ @@ -151,4 +156,52 @@ public interface ISearchService * @return metaprojects for current user, which are assigned to the given entity */ public List<IMetaprojectImmutable> listMetaprojectsForEntity(IMetaprojectContent entity); + + /** + * Get a data set from the openBIS AS. Returns null if the data set does not exist. + * + * @return A data set or null + */ + IDataSetImmutable getDataSet(String dataSetCode); + + /** + * Get a sample from the openBIS AS. Returns null if the sample does not exist. + * + * @return A sample or null + */ + ISampleImmutable getSample(String sampleIdentifierString); + + /** + * Get an experiment from the openBIS AS. + */ + IExperimentImmutable getExperiment(String experimentIdentifierString); + + /** + * Get a project from the openBIS AS. Returns null if the project does not exist. + * + * @return A project or null + */ + IProjectImmutable getProject(String projectIdentifier); + + /** + * Get a space from the openBIS AS. Returns null if the space does not exist. + * + * @return A space or null + */ + ISpaceImmutable getSpace(String spaceCode); + + /** + * Get a material from the openBIS AS. Returns null if the material does not exist. + * + * @return A material or null + */ + IMaterialImmutable getMaterial(String materialCode, String materialType); + + /** + * Get a material from the openBIS AS. Returns null if the material does not exist. + * + * @return A material or null + */ + IMaterialImmutable getMaterial(String identifier); + } -- GitLab