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 f2435b3e31d7116eecd26642059e92302c073a93..3fb6ad3ecfb6f82d417367884db4b8393208bbe1 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 @@ -749,6 +749,10 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt final Session session = getSession(sessionToken); final PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId); + if (person == null) + { + throw new UserFailureException("Unknown user: " + userId); + } final ISampleLister sampleLister = businessObjectFactory.createSampleLister(session, person.getId()); @@ -1485,6 +1489,10 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt { final Session session = getSession(sessionToken); final PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId); + if (person == null) + { + throw new UserFailureException("Unknown user: " + userId); + } SearchHelper searchHelper = new SearchHelper(session, businessObjectFactory, getDAOFactory()); @@ -1592,6 +1600,10 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt IMetaprojectDAO mpd = this.getDAOFactory().getMetaprojectDAO(); final PersonPE person = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId); + if (person == null) + { + throw new UserFailureException("Unknown user: " + userId); + } Collection<MetaprojectAssignmentPE> assignments = mpd.listMetaprojectAssignmentsForEntities(person, resultSet, @@ -2647,8 +2659,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt { List<EntityTypePE> types = new ArrayList<EntityTypePE>(); if ((entityKind.equals(EntityKind.SAMPLE) || entityKind.equals(EntityKind.DATA_SET) || entityKind - .equals(EntityKind.MATERIAL)) - && EntityType.isDefinedInFileEntityTypeCode(type)) + .equals(EntityKind.MATERIAL)) && EntityType.isDefinedInFileEntityTypeCode(type)) { types.addAll(getDAOFactory().getEntityTypeDAO( DtoConverters.convertEntityKind(entityKind)).listEntityTypes()); @@ -4033,14 +4044,31 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } @Override - @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public List<Metaproject> listMetaprojects(String sessionToken) { Session session = getSession(sessionToken); + PersonPE owner = session.tryGetPerson(); + return listMetaProjects(owner); + } + + @Override + @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER) + public List<Metaproject> listMetaprojectsOnBehalfOfUser(String sessionToken, String userId) + { + checkSession(sessionToken); + PersonPE user = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId); + if (user == null) + { + throw new UserFailureException("Unknown user: " + userId); + } + return listMetaProjects(user); + } + private List<Metaproject> listMetaProjects(PersonPE owner) + { IDAOFactory daoFactory = getDAOFactory(); IMetaprojectDAO metaprojectDAO = daoFactory.getMetaprojectDAO(); - PersonPE owner = session.tryGetPerson(); List<MetaprojectPE> metaprojectPEs = metaprojectDAO.listMetaprojects(owner); @@ -4048,7 +4076,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } @Override - @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public List<MetaprojectAssignmentsCount> listMetaprojectAssignmentsCounts(String sessionToken) { List<Metaproject> metaprojects = listMetaprojects(sessionToken); @@ -4064,7 +4092,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } @Override - @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public MetaprojectAssignmentsCount getMetaprojectAssignmentsCount(String sessionToken, IMetaprojectId metaprojectId) { @@ -4073,7 +4101,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } @Override - @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public MetaprojectAssignments getMetaprojectAssignments(String sessionToken, IMetaprojectId metaprojectId) { @@ -4082,9 +4110,33 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } @Override - @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER) + public MetaprojectAssignments getMetaprojectAssignmentsOnBehalfOfUser(String sessionToken, + IMetaprojectId metaprojectId, String userId) + { + Session session = getSession(sessionToken); + PersonPE user = getDAOFactory().getPersonDAO().tryFindPersonByUserId(userId); + if (user == null) + { + throw new UserFailureException("Unknown user: " + userId); + } + return getMetaprojectAssignments(session, metaprojectId, + EnumSet.allOf(MetaprojectAssignmentsFetchOption.class), user); + } + + @Override + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public MetaprojectAssignments getMetaprojectAssignments(String sessionToken, IMetaprojectId metaprojectId, EnumSet<MetaprojectAssignmentsFetchOption> fetchOptions) + { + Session session = getSession(sessionToken); + return getMetaprojectAssignments(session, metaprojectId, fetchOptions, + session.tryGetPerson()); + } + + private MetaprojectAssignments getMetaprojectAssignments(Session session, + IMetaprojectId metaprojectId, EnumSet<MetaprojectAssignmentsFetchOption> fetchOptions, + PersonPE user) { if (metaprojectId == null) { @@ -4095,9 +4147,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt throw new UserFailureException("Fetch options cannot be null"); } - Metaproject metaproject = getMetaproject(sessionToken, metaprojectId); - - Session session = getSession(sessionToken); + Metaproject metaproject = getMetaproject(session, metaprojectId, user); MetaprojectAssignmentsHelper helper = new MetaprojectAssignmentsHelper(getDAOFactory(), managedPropertyEvaluatorFactory); @@ -4107,7 +4157,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } @Override - @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public void addToMetaproject(String sessionToken, IMetaprojectId metaprojectId, MetaprojectAssignmentsIds assignmentsToAdd) { @@ -4136,7 +4186,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } @Override - @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public void removeFromMetaproject(String sessionToken, IMetaprojectId metaprojectId, MetaprojectAssignmentsIds assignmentsToRemove) { @@ -4165,7 +4215,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } @Override - @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public void deleteMetaproject(String sessionToken, IMetaprojectId metaprojectId, String reason) { if (metaprojectId == null) @@ -4184,7 +4234,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } @Override - @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public void deleteMetaprojects(String sessionToken, List<IMetaprojectId> metaprojectIds, String reason) { @@ -4200,7 +4250,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } @Override - @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public Metaproject registerMetaproject(String sessionToken, IMetaprojectRegistration registration) { @@ -4214,7 +4264,7 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } @Override - @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public Metaproject updateMetaproject(String sessionToken, IMetaprojectId metaprojectId, IMetaprojectUpdates updates) { @@ -4232,16 +4282,20 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt } @Override - @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public Metaproject getMetaproject(String sessionToken, IMetaprojectId metaprojectId) + { + Session session = getSession(sessionToken); + return getMetaproject(session, metaprojectId, session.tryGetPerson()); + } + + private Metaproject getMetaproject(Session session, IMetaprojectId metaprojectId, PersonPE user) { if (metaprojectId == null) { throw new UserFailureException("Metaproject id cannot be null"); } - Session session = getSession(sessionToken); - IMetaprojectBO metaprojectBO = getBusinessObjectFactory().createMetaprojectBO(session); MetaprojectPE metaprojectPE = metaprojectBO.tryFindByMetaprojectId(metaprojectId); @@ -4251,7 +4305,8 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt + " doesn't exist"); } - AuthorizationServiceUtils authorizationUtils = getAuthorizationService(session); + AuthorizationServiceUtils authorizationUtils = + new AuthorizationServiceUtils(getDAOFactory(), user); authorizationUtils.checkAccessMetaproject(metaprojectPE); return MetaprojectTranslator.translate(metaprojectPE); } 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 6f82d14fda27344f657ff9e7adc373fa867006dd..155835317c0150cddc7b3c739a9824804c056aed 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 @@ -1581,6 +1581,13 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe return null; } + @Override + public List<Metaproject> listMetaprojectsOnBehalfOfUser(String sessionToken, String userId) + { + logAccess(sessionToken, "listMetaprojectsOnBehalfOfUser", "USER(%s)", userId); + return null; + } + @Override public List<MetaprojectAssignmentsCount> listMetaprojectAssignmentsCounts(String sessionToken) { @@ -1621,6 +1628,15 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe return null; } + @Override + public MetaprojectAssignments getMetaprojectAssignmentsOnBehalfOfUser(String sessionToken, + IMetaprojectId metaprojectId, String userId) + { + logAccess(sessionToken, "getMetaprojectAssignmentsOnBehalfOfUser", + "METAPROJECT_ID(%s) USER(%s)", metaprojectId, userId); + return null; + } + @Override public void addToMetaproject(String sessionToken, IMetaprojectId metaprojectId, MetaprojectAssignmentsIds assignmentsToAdd) 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 f0e1dc4c950bba40c38f5e0bb26ad04688b6adcf..f7992e9c4e33cb77c9cf1f854f993e8683d5e7a7 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 @@ -137,7 +137,7 @@ import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; public class GeneralInformationService extends AbstractServer<IGeneralInformationService> implements IGeneralInformationService { - public static final int MINOR_VERSION = 23; + public static final int MINOR_VERSION = 24; @Resource(name = ch.systemsx.cisd.openbis.generic.shared.ResourceNames.COMMON_SERVER) private ICommonServer commonServer; @@ -1085,7 +1085,7 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Override @Transactional(readOnly = true) - @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public List<Metaproject> listMetaprojects(String sessionToken) { return commonServer.listMetaprojects(sessionToken); @@ -1093,12 +1093,37 @@ public class GeneralInformationService extends AbstractServer<IGeneralInformatio @Override @Transactional(readOnly = true) - @RolesAllowed(RoleWithHierarchy.SPACE_USER) + @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER) + public List<Metaproject> listMetaprojectsOnBehalfOfUser(String sessionToken, String userId) + { + return commonServer.listMetaprojectsOnBehalfOfUser(sessionToken, userId); + } + + @Override + @Transactional(readOnly = true) + @RolesAllowed(RoleWithHierarchy.SPACE_OBSERVER) public MetaprojectAssignments getMetaproject(String sessionToken, IMetaprojectId metaprojectId) { ch.systemsx.cisd.openbis.generic.shared.basic.dto.MetaprojectAssignments assignments = commonServer.getMetaprojectAssignments(sessionToken, metaprojectId); + return translate(assignments); + } + @Override + @Transactional(readOnly = true) + @RolesAllowed(RoleWithHierarchy.INSTANCE_OBSERVER) + public MetaprojectAssignments getMetaprojectOnBehalfOfUser(String sessionToken, + IMetaprojectId metaprojectId, String userId) + { + ch.systemsx.cisd.openbis.generic.shared.basic.dto.MetaprojectAssignments assignments = + commonServer.getMetaprojectAssignmentsOnBehalfOfUser(sessionToken, metaprojectId, + userId); + return translate(assignments); + } + + private MetaprojectAssignments translate( + ch.systemsx.cisd.openbis.generic.shared.basic.dto.MetaprojectAssignments assignments) + { MetaprojectAssignments result = new MetaprojectAssignments(); result.setMetaproject(assignments.getMetaproject()); result.setExperiments(Translator.translateExperiments(assignments.getExperiments())); 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 ced2a04548ec53283355c343447aa7221030a2ec..649474ebfe5f812ffcf62cedb47e9fff9ef59e6e 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 @@ -391,6 +391,13 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements return null; } + @Override + public List<Metaproject> listMetaprojectsOnBehalfOfUser(String sessionToken, String userId) + { + logAccess(sessionToken, "listMetaprojectsOnBehalfOfUser", "USER(%s)", userId); + return null; + } + @Override public MetaprojectAssignments getMetaproject(String sessionToken, IMetaprojectId metaprojectId) { @@ -398,6 +405,15 @@ class GeneralInformationServiceLogger extends AbstractServerLogger implements return null; } + @Override + public MetaprojectAssignments getMetaprojectOnBehalfOfUser(String sessionToken, + IMetaprojectId metaprojectId, String userId) + { + logAccess(sessionToken, "getMetaprojectOnBehalfOfUser", "METAPROJECT_ID(%s) USER(%s)", + metaprojectId, userId); + return null; + } + @Override public List<Attachment> listAttachmentsForProject(String sessionToken, IProjectId projectId, boolean allVersions) 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 945e6b6d9777b84f6e3070f705044041088da111..926034f6023d4ebb80c9c283884b793b1a6692b4 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 @@ -1445,11 +1445,17 @@ public interface ICommonServer extends IServer ExternalDataManagementSystem edms); /** - * Lists all metaprojects registered for given user. + * Lists all metaprojects registered for session user. */ @Transactional(readOnly = true) public List<Metaproject> listMetaprojects(String sessionToken); + /** + * Lists all metaprojects registered for given user. + */ + @Transactional(readOnly = true) + public List<Metaproject> listMetaprojectsOnBehalfOfUser(String sessionToken, String userId); + /** * Lists all metaproject assignments counts for given user. */ @@ -1470,6 +1476,13 @@ public interface ICommonServer extends IServer public MetaprojectAssignments getMetaprojectAssignments(String sessionToken, IMetaprojectId metaprojectId); + /** + * Returns object containing all entities assigned to given metaproject of specified user. + */ + @Transactional(readOnly = true) + public MetaprojectAssignments getMetaprojectAssignmentsOnBehalfOfUser(String sessionToken, + IMetaprojectId metaprojectId, String userId); + /** * Returns object containing chosen entities assigned to given metaproject. */ diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java index a886056c5ddb4d03576c6e0e5208ef42e1f61219..125299e8beec266307874eea8d3e35708f8ae4ce 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/api/v1/GeneralInformationServiceTest.java @@ -70,6 +70,7 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.experiment.Experime import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.experiment.ExperimentPermIdId; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.experiment.ExperimentTechIdId; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.metaproject.MetaprojectIdentifierId; +import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.metaproject.MetaprojectTechIdId; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.project.ProjectIdentifierId; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.project.ProjectPermIdId; import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.sample.SampleIdentifierId; @@ -77,7 +78,9 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.sample.SamplePermId import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.sample.SampleTechIdId; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Grantee; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Metaproject; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleCode; import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetUpdatesDTO; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ExperimentIdentifierFactory; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifierFactory; @@ -1661,6 +1664,44 @@ public class GeneralInformationServiceTest extends SystemTestCase assertTrue(metaprojectAssignments.getExperiments().get(0).toString().contains("STUB")); } + @Test + public void testGetMetaprojectsOnBehalfOfUser() + { + String instanceObserverId = "instance-observer"; + commonServer.registerPerson(systemSessionToken, instanceObserverId); + commonServer.registerInstanceRole(systemSessionToken, RoleCode.OBSERVER, + Grantee.createPerson(instanceObserverId)); + sessionToken = + generalInformationService.tryToAuthenticateForAllServices(instanceObserverId, "a"); + + List<Metaproject> metaProjects = + generalInformationService.listMetaprojectsOnBehalfOfUser(sessionToken, "test"); + Collections.sort(metaProjects, new Comparator<Metaproject>() + { + @Override + public int compare(Metaproject o1, Metaproject o2) + { + return o1.getCode().compareTo(o2.getCode()); + } + }); + + assertEquals("ANOTHER_TEST_METAPROJECTS", metaProjects.get(0).getCode()); + assertEquals("TEST_METAPROJECTS", metaProjects.get(1).getCode()); + assertEquals(2, metaProjects.size()); + MetaprojectAssignments mas = + generalInformationService.getMetaprojectOnBehalfOfUser(sessionToken, + new MetaprojectTechIdId(metaProjects.get(1).getId()), "test"); + assertEquals("[MaterialIdentifier [materialCode=AD3, " + + "materialTypeIdentifier=MaterialTypeIdentifier [materialTypeCode=VIRUS]]]", mas + .getMaterials().toString()); + assertEntities("[/CISD/NEMO/EXP11, /TEST-SPACE/TEST-PROJECT/EXP-SPACE-TEST]", + mas.getExperiments()); + assertEquals("[Sample[/TEST-SPACE/EV-TEST,VALIDATE_CHILDREN,{},parents=?,children=?]]", mas + .getSamples().toString()); + assertEquals("[DataSet[20120619092259000-22,/TEST-SPACE/TEST-PROJECT/EXP-SPACE-TEST," + + "<null>,HCS_IMAGE,{}]]", mas.getDataSets().toString()); + } + @Test public void testGetMetaprojectReturnsMetaprojectForNameWithDifferentCase() { 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 b7161aad381cd0e79703d91ca76e646e51e7fe65..bcd22b34c42cce15c725691f1d3c4ad45ec5a218 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 @@ -492,6 +492,13 @@ public interface IGeneralInformationService extends IRpcService */ public List<Metaproject> listMetaprojects(String sessionToken); + /** + * Lists all metaprojects belonging to specified user. + * + * @since 1.24 + */ + public List<Metaproject> listMetaprojectsOnBehalfOfUser(String sessionToken, String userId); + /** * Returns all entities tagged with given metaproject. * @@ -499,6 +506,15 @@ public interface IGeneralInformationService extends IRpcService */ public MetaprojectAssignments getMetaproject(String sessionToken, IMetaprojectId metaprojectId); + /** + * Returns all entities tagged with given metaproject for specified user. + * + * @throws UserFailureException when a metaproject with the specified id doesn't exist. + * @since 1.24 + */ + public MetaprojectAssignments getMetaprojectOnBehalfOfUser(String sessionToken, + IMetaprojectId metaprojectId, String userId); + /** * Lists attachments of specified project. *