diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java index 92992584d65eaa438f7ae47e16d712ae55df6141..77143e16fafbc0d499c9f867caeac0c5fe3c4c41 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java @@ -97,7 +97,6 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.HibernateSearchData import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.impl.EncapsulatedCommonServer; import ch.systemsx.cisd.openbis.generic.server.jython.api.v1.impl.MasterDataRegistrationScriptRunner; import ch.systemsx.cisd.openbis.generic.server.util.GroupIdentifierHelper; -import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.ProjectValidator; import ch.systemsx.cisd.openbis.generic.shared.basic.BasicEntityInformationHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.CodeConverter; import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder; @@ -526,30 +525,6 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt return ProjectTranslator.translate(projects); } - @Override - public final List<Project> listProjectsForUser(final String sessionToken, String userId) - { - checkSession(sessionToken); - final List<ProjectPE> allProjectPEs = getDAOFactory().getProjectDAO().listProjects(); - // Have to sort the PEs because Project does not have a compare method - Collections.sort(allProjectPEs); - List<Project> allProjects = ProjectTranslator.translate(allProjectPEs); - - PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId); - ProjectValidator validator = new ProjectValidator(); - - ArrayList<Project> projects = new ArrayList<Project>(); - for (Project project : allProjects) - { - if (validator.doValidation(person, project)) - { - projects.add(project); - } - } - - return projects; - } - @Override public final List<SampleType> listSampleTypes(final String sessionToken) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java index ba4e554ecb00efc6672095dccf5b4a253e25cc44..22b95a2d566751a33a699c0d2a5876ea48cd140c 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java @@ -381,13 +381,6 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe return null; } - @Override - public List<Project> listProjectsForUser(String sessionToken, String userId) - { - logAccess(sessionToken, "list_projects_for_user", "USER_ID(%s)", userId); - return null; - } - @Override public List<ExperimentType> listExperimentTypes(final String sessionToken) { @@ -1438,4 +1431,5 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe edms.getCode()); } + } 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 417398e47c361099bf65ad0ceaad55ed88cde9ac..3548852c48d83b747e679237c5b5401d8ae4d354 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 @@ -181,7 +181,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = SimpleSpaceValidator.class) - @Capability("LIST_SPACES") public List<SpaceWithProjectsAndRoleAssignments> listSpacesWithProjectsAndRoleAssignments( String sessionToken, String databaseInstanceCodeOrNull) { @@ -290,7 +289,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = SampleByIdentiferValidator.class) - @Capability("SEARCH_FOR_SAMPLES") public List<Sample> searchForSamples(String sessionToken, SearchCriteria searchCriteria) { return searchForSamples(sessionToken, searchCriteria, @@ -301,14 +299,13 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = SampleByIdentiferValidator.class) - @Capability("SEARCH_FOR_SAMPLES") public List<Sample> searchForSamples(String sessionToken, SearchCriteria searchCriteria, - EnumSet<SampleFetchOption> fetchOption) + EnumSet<SampleFetchOption> fetchOptions) { Session session = getSession(sessionToken); EnumSet<SampleFetchOption> sampleFetchOptions = - (fetchOption != null) ? fetchOption : EnumSet.noneOf(SampleFetchOption.class); + (fetchOptions != null) ? fetchOptions : EnumSet.noneOf(SampleFetchOption.class); DetailedSearchCriteria detailedSearchCriteria = SearchCriteriaToDetailedSearchCriteriaTranslator.convert( SearchableEntityKind.SAMPLE, searchCriteria); @@ -320,6 +317,31 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio return createSampleLister().getSamples(sampleIDs, sampleFetchOptions); } + @Override + @Transactional(readOnly = true) + @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER) + @Capability("SEARCH_ON_BEHALF_OF_USER") + public List<Sample> searchForSamplesOnBehalfOfUser(String sessionToken, + SearchCriteria searchCriteria, + EnumSet<SampleFetchOption> fetchOptions, String userId) + { + final List<Sample> unfilteredSamples = + searchForSamples(sessionToken, searchCriteria, fetchOptions); + + // Filter for user + final PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId); + final SampleByIdentiferValidator validator = new SampleByIdentiferValidator(); + final ArrayList<Sample> samples = new ArrayList<Sample>(); + for (Sample sample : unfilteredSamples) + { + if (validator.doValidation(person, sample)) + { + samples.add(sample); + } + } + return samples; + } + protected ISampleLister createSampleLister() { return new SampleLister(getDAOFactory()); @@ -329,7 +351,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = SampleByIdentiferValidator.class) - @Capability("LIST_SAMPLES") public List<Sample> listSamplesForExperiment(String sessionToken, @AuthorizationGuard(guardClass = ExperimentIdentifierPredicate.class) String experimentIdentifierString) @@ -352,7 +373,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = DataSetByExperimentIdentifierValidator.class) - @Capability("LIST_DATA_SETS") public List<DataSet> listDataSets(String sessionToken, @AuthorizationGuard(guardClass = SamplePredicate.class) List<Sample> samples) @@ -364,7 +384,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = ExperimentByIdentiferValidator.class) - @Capability("LIST_EXPERIMENTS") public List<Experiment> listExperiments(String sessionToken, @AuthorizationGuard(guardClass = ProjectPredicate.class) List<Project> projects, String experimentTypeString) @@ -376,7 +395,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = ExperimentByIdentiferValidator.class) - @Capability("LIST_EXPERIMENTS") public List<Experiment> listExperimentsHavingDataSets(String sessionToken, @AuthorizationGuard(guardClass = ProjectPredicate.class) List<Project> projects, String experimentTypeString) @@ -388,7 +406,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = ExperimentByIdentiferValidator.class) - @Capability("LIST_EXPERIMENTS") public List<Experiment> listExperimentsHavingSamples(String sessionToken, @AuthorizationGuard(guardClass = ProjectPredicate.class) List<Project> projects, String experimentTypeString) @@ -467,7 +484,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = DataSetByExperimentIdentifierValidator.class) - @Capability("LIST_DATA_SETS") public List<DataSet> listDataSetsForSample(String sessionToken, @AuthorizationGuard(guardClass = SamplePredicate.class) Sample sample, boolean areOnlyDirectlyConnectedIncluded) @@ -561,7 +577,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = DataSetByExperimentIdentifierValidator.class) - @Capability("LIST_DATA_SETS") public List<DataSet> listDataSets(String sessionToken, @AuthorizationGuard(guardClass = SamplePredicate.class) List<Sample> samples, EnumSet<Connections> connections) @@ -583,7 +598,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = DataSetByExperimentIdentifierValidator.class) - @Capability("LIST_DATA_SETS") public List<DataSet> listDataSetsForExperiments(String sessionToken, @AuthorizationGuard(guardClass = ExperimentPredicate.class) List<Experiment> experiments, EnumSet<Connections> connections) @@ -605,7 +619,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = DataSetByExperimentIdentifierValidator.class) - @Capability("GET_DATA_SET_META_DATA") public List<DataSet> getDataSetMetaData(String sessionToken, List<String> dataSetCodes) { Session session = getSession(sessionToken); @@ -632,7 +645,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = DataSetByExperimentIdentifierValidator.class) - @Capability("GET_DATA_SET_META_DATA") public List<DataSet> getDataSetMetaData(String sessionToken, List<String> dataSetCodes, EnumSet<DataSetFetchOption> fetchOptions) { @@ -682,7 +694,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = DataSetByExperimentIdentifierValidator.class) - @Capability("SEARCH_FOR_DATA_SETS") public List<DataSet> searchForDataSets(String sessionToken, SearchCriteria searchCriteria) { checkSession(sessionToken); @@ -697,11 +708,34 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio return Translator.translate(privateDataSets, EnumSet.noneOf(Connections.class)); } + @Override + @Transactional(readOnly = true) + @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER) + @Capability("SEARCH_ON_BEHALF_OF_USER") + 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); + final DataSetByExperimentIdentifierValidator validator = + new DataSetByExperimentIdentifierValidator(); + final ArrayList<DataSet> datasets = new ArrayList<DataSet>(); + for (DataSet sample : unfilteredDatasets) + { + if (validator.doValidation(person, sample)) + { + datasets.add(sample); + } + } + return datasets; + } + @Override @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = ExperimentByIdentiferValidator.class) - @Capability("LIST_EXPERIMENTS") public List<Experiment> listExperiments(String sessionToken, @AuthorizationGuard(guardClass = ExperimentIdentifierPredicate.class) List<String> experimentIdentifiers) @@ -721,7 +755,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) @ReturnValueFilter(validatorClass = ProjectByIdentiferValidator.class) - @Capability("LIST_PROJECTS") public List<Project> listProjects(String sessionToken) { checkSession(sessionToken); @@ -732,17 +765,28 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Override @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER) - @Capability("LIST_PROJECTS_FOR_USER") - public List<Project> listProjectsForUser(String sessionToken, String userId) + @Capability("SEARCH_ON_BEHALF_OF_USER") + public List<Project> listProjectsOnBehalfOfUser(String sessionToken, String userId) { - checkSession(sessionToken); - return Translator.translateProjects(commonServer.listProjectsForUser(sessionToken, userId)); + final List<Project> unfilteredProjects = listProjects(sessionToken); + + // filter by user + final PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId); + final ProjectByIdentiferValidator validator = new ProjectByIdentiferValidator(); + final ArrayList<Project> projects = new ArrayList<Project>(); + for (Project project : unfilteredProjects) + { + if (validator.doValidation(person, project)) + { + projects.add(project); + } + } + return projects; } @Override @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) - @Capability("GET_MATERIALS_BY_CODES") public List<Material> getMaterialByCodes(String sessionToken, List<MaterialIdentifier> materialIdentifier) { @@ -775,7 +819,6 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Override @Transactional(readOnly = true) @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) - @Capability("SEARCH_FOR_MATERIALS") public List<Material> searchForMaterials(String sessionToken, SearchCriteria searchCriteria) { DetailedSearchCriteria detailedSearchCriteria = 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 c97ad7c01e5114262f6daf551be64dcc0d80a1f8..22515827e416665dd25dcca0832b66cb86cbb172 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 @@ -119,6 +119,16 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements return null; } + @Override + public List<Sample> searchForSamplesOnBehalfOfUser(String sessionToken, + SearchCriteria searchCriteria, EnumSet<SampleFetchOption> fetchOptions, String userId) + { + logAccess(sessionToken, "search-for-samples-on-behalf-of-user", + "SEARCH_CRITERIA(%s) FETCH_OPTIONS(%s) USER(%S)", + searchCriteria, fetchOptions, userId); + return null; + } + @Override public List<DataSet> listDataSets(String sessionToken, List<Sample> samples) { @@ -220,6 +230,15 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements return null; } + @Override + public List<DataSet> searchForDataSetsOnBehalfOfUser(String sessionToken, + SearchCriteria searchCriteria, String userId) + { + logAccess(sessionToken, "search-for-data-sets-on-behalf-of-user", + "SEARCH_CRITERIA(%s) USER(%s)", searchCriteria, userId); + return null; + } + @Override public List<Experiment> listExperiments(String sessionToken, List<String> experimentIdentifiers) { @@ -236,9 +255,9 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements } @Override - public List<Project> listProjectsForUser(String sessionToken, String userId) + public List<Project> listProjectsOnBehalfOfUser(String sessionToken, String userId) { - logAccess(sessionToken, "list-projects-for-user", "USER_ID(%s)", userId); + logAccess(sessionToken, "list-projects-on-behalf-of-user", "USER(%s)", userId); return null; } @@ -275,4 +294,5 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements logAccess(sessionToken, "search-for-materials", "SEARCH_CRITERIA(%s)", searchCriteria); return null; } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java index 6594f10590e2033fe3b86ea887a58d28d3e7cc83..fe6155f942710cf23f3b3988556633d7f26c9bdd 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java @@ -258,15 +258,6 @@ public interface ICommonServer extends IServer @ReturnValueFilter(validatorClass = ProjectValidator.class) public List<Project> listProjects(String sessionToken); - /** - * Returns all projects. - * - * @return a sorted list of {@link Project}. - */ - @Transactional(readOnly = true) - @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER) - public List<Project> listProjectsForUser(String sessionToken, String userId); - /** * Registers a new person. */