From f253b1077f4a32397378abbf4ad7fc82389ff7c6 Mon Sep 17 00:00:00 2001 From: brinn <brinn> Date: Fri, 13 Jul 2012 17:05:33 +0000 Subject: [PATCH] Add methods IGeneralInformationService.filterXXXVisibleToUser(). SVN: 26110 --- .../api/v1/GeneralInformationService.java | 73 ++++++++++++++++++- .../v1/GeneralInformationServiceLogger.java | 28 +++++++ .../api/v1/IGeneralInformationService.java | 42 ++++++++++- 3 files changed, 141 insertions(+), 2 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 8de6673bd83..6307dd4fbf9 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 @@ -342,6 +342,29 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio return samples; } + @Override + @Transactional(readOnly = true) + @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER) + @Capability("SEARCH_ON_BEHALF_OF_USER") + public List<Sample> filterSamplesVisibleToUser(String sessionToken, List<Sample> allSamples, + String userId) + { + checkSession(sessionToken); + + // filter by user + final PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId); + final SampleByIdentiferValidator validator = new SampleByIdentiferValidator(); + final ArrayList<Sample> samples = new ArrayList<Sample>(allSamples.size()); + for (Sample sample : allSamples) + { + if (validator.doValidation(person, sample)) + { + samples.add(sample); + } + } + return samples; + } + protected ISampleLister createSampleLister() { return new SampleLister(getDAOFactory()); @@ -480,6 +503,31 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio return null; } + @Override + @Transactional(readOnly = true) + @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER) + @Capability("SEARCH_ON_BEHALF_OF_USER") + public List<Experiment> filterExperimentsVisibleToUser(String sessionToken, + List<Experiment> allExperiments, + String userId) + { + checkSession(sessionToken); + + // filter by user + final PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId); + final ExperimentByIdentiferValidator validator = new ExperimentByIdentiferValidator(); + final ArrayList<Experiment> experiments = new ArrayList<Experiment>(allExperiments.size()); + for (Experiment experiment : allExperiments) + { + if (validator.doValidation(person, experiment)) + { + experiments.add(experiment); + } + } + return experiments; + + } + @Override @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @@ -715,7 +763,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio public List<DataSet> searchForDataSetsOnBehalfOfUser(String sessionToken, SearchCriteria searchCriteria, String userId) { - final List<DataSet> unfilteredDatasets = searchForDataSets(sessionToken, searchCriteria); // Filter for user final PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId); @@ -732,6 +779,30 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio return datasets; } + @Override + @Transactional(readOnly = true) + @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER) + @Capability("SEARCH_ON_BEHALF_OF_USER") + public List<DataSet> filterDataSetsVisibleToUser(String sessionToken, + List<DataSet> allDataSets, String userId) + { + checkSession(sessionToken); + + // filter by user + final PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId); + final DataSetByExperimentIdentifierValidator validator = + new DataSetByExperimentIdentifierValidator(); + final ArrayList<DataSet> dataSets = new ArrayList<DataSet>(allDataSets.size()); + for (DataSet dataSet : allDataSets) + { + if (validator.doValidation(person, dataSet)) + { + dataSets.add(dataSet); + } + } + return dataSets; + } + @Override @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java index 22515827e41..d9797a209c1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/api/v1/GeneralInformationServiceLogger.java @@ -129,6 +129,15 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements return null; } + @Override + public List<Sample> filterSamplesVisibleToUser(String sessionToken, List<Sample> allSamples, + String userId) + { + logAccess(sessionToken, "filter-samples-visible-to-user", "SAMPLES(%s)", + "USER(%S)", abbreviate(allSamples), userId); + return null; + } + @Override public List<DataSet> listDataSets(String sessionToken, List<Sample> samples) { @@ -239,6 +248,15 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements return null; } + @Override + public List<DataSet> filterDataSetsVisibleToUser(String sessionToken, + List<DataSet> allDataSets, String userId) + { + logAccess(sessionToken, "filter-data-sets-visible-to-user", "DATASETS(%s)", + "USER(%S)", abbreviate(allDataSets), userId); + return null; + } + @Override public List<Experiment> listExperiments(String sessionToken, List<String> experimentIdentifiers) { @@ -247,6 +265,16 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements return null; } + @Override + public List<Experiment> filterExperimentsVisibleToUser(String sessionToken, + List<Experiment> allExperiments, + String userId) + { + logAccess(sessionToken, "filter-experiments-visible-to-user", "EXPERIMENTS(%s)", + "USER(%s)", abbreviate(allExperiments), userId); + return null; + } + @Override public List<Project> listProjects(String sessionToken) { diff --git a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java index d9314a6f0e6..e4c27913d2c 100644 --- a/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java +++ b/openbis_api/source/java/ch/systemsx/cisd/openbis/generic/shared/api/v1/IGeneralInformationService.java @@ -154,7 +154,7 @@ public interface IGeneralInformationService extends IRpcService * possible only in one direction. * <p> * May only be called by users who are <code>INSTANCE_OBSERVER</code>. - + * * @param searchCriteria The sample metadata values to be matched against. * @param fetchOptions Options that control which parts of the samples are fetched. * @since 1.18 @@ -163,6 +163,19 @@ public interface IGeneralInformationService extends IRpcService SearchCriteria searchCriteria, EnumSet<SampleFetchOption> fetchOptions, String userId); + /** + * Returns a filtered list of <var>allSamples</var> containing those samples which are + * visible to <var>userId</var>. + * + * @param allSamples The list of samples that should be filtered. + * @param userId The user that the samples should be visible to that survive the filtering. + * @return The filtered list of <var>allSamples</var> containing those samples which are + * visible to <var>userId</var>. + * @since 1.18 + */ + public List<Sample> filterSamplesVisibleToUser(String sessionToken, List<Sample> allSamples, + String userId); + /** * Return all samples that belong to the supplied experiment. * @@ -218,6 +231,20 @@ public interface IGeneralInformationService extends IRpcService public List<Experiment> listExperimentsHavingDataSets(String sessionToken, List<Project> projects, String experimentType); + /** + * Returns a filtered list of <var>allExperiments</var> containing those experiments which are + * visible to <var>userId</var>. + * + * @param allExperiments The list of experiments that should be filtered. + * @param userId The user that the experiments should be visible to that survive the filtering. + * @return The filtered list of <var>allExperiments</var> containing all experiments which are + * visible to <var>userId</var>. + * @since 1.18 + */ + public List<Experiment> filterExperimentsVisibleToUser(String sessionToken, + List<Experiment> allExperiments, + String userId); + /** * Return the data sets attached to the specified sample, optionally including child samples. * Note, that for returned container data sets the contained data sets have only code, type and @@ -339,6 +366,19 @@ public interface IGeneralInformationService extends IRpcService public List<DataSet> searchForDataSetsOnBehalfOfUser(String sessionToken, SearchCriteria searchCriteria, String userId); + /** + * Returns a filtered list of <var>allDataSets</var> containing those data sets which are + * visible to <var>userId</var>. + * + * @param allDataSets The list of data sets that should be filtered. + * @param userId The user that the data sets should be visible to that survive the filtering. + * @return The filtered list of <var>allDataSets</var> containing those data sets which are + * visible to <var>userId</var>. + * @since 1.18 + */ + public List<DataSet> filterDataSetsVisibleToUser(String sessionToken, + List<DataSet> allDataSets, String userId); + /** * Return all experiments matching a specified set of identifiers. * -- GitLab