From 2b601c3d60ae5b56df916329422de2aa9933879f Mon Sep 17 00:00:00 2001 From: gpawel <gpawel> Date: Thu, 18 Oct 2012 09:25:40 +0000 Subject: [PATCH] SP-345 BIS-178: Method to fetch all metaprojects for given entity SVN: 27230 --- .../server/dataaccess/IMetaprojectDAO.java | 7 +++++ .../server/dataaccess/db/MetaprojectDAO.java | 29 +++++++++++++++++++ .../dataaccess/db/MetaprojectDAOTest.java | 18 ++++++++++++ .../124/042=metaproject_assignments_all.tsv | 1 + 4 files changed, 55 insertions(+) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IMetaprojectDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IMetaprojectDAO.java index 87bdac895ce..54248625ac8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IMetaprojectDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/IMetaprojectDAO.java @@ -16,8 +16,10 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess; +import java.util.Collection; import java.util.List; +import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder; import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; @@ -42,4 +44,9 @@ public interface IMetaprojectDAO extends IGenericDAO<MetaprojectPE> */ public void createOrUpdateMetaproject(MetaprojectPE metaproject, PersonPE owner); + /** + * Lists all metaprojects owned by given user, connected with given entity. + */ + public Collection<MetaprojectPE> listMetaprojectsForEntity(PersonPE owner, + IEntityInformationWithPropertiesHolder entity); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAO.java index 4b00f5e072b..dc1c8e4315f 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAO.java @@ -16,7 +16,10 @@ package ch.systemsx.cisd.openbis.generic.server.dataaccess.db; +import java.util.Collection; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.apache.log4j.Logger; import org.hibernate.SessionFactory; @@ -31,6 +34,8 @@ import ch.systemsx.cisd.common.reflection.MethodUtils; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IMetaprojectDAO; import ch.systemsx.cisd.openbis.generic.shared.basic.MetaprojectName; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder; +import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectAssignmentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; @@ -103,4 +108,28 @@ public class MetaprojectDAO extends AbstractGenericEntityDAO<MetaprojectPE> impl } } + @Override + public Collection<MetaprojectPE> listMetaprojectsForEntity(PersonPE owner, + IEntityInformationWithPropertiesHolder entity) + { + final DetachedCriteria criteria = DetachedCriteria.forClass(MetaprojectAssignmentPE.class); + criteria.createAlias("metaproject", "m"); + criteria.add(Restrictions.eq("m.owner", owner)); + criteria.add(Restrictions.eq(entity.getEntityKind().getLabel(), entity)); + final List<MetaprojectAssignmentPE> assignments = + cast(getHibernateTemplate().findByCriteria(criteria)); + + Set<MetaprojectPE> metaprojects = new HashSet<MetaprojectPE>(); + for (MetaprojectAssignmentPE assignment : assignments) + { + metaprojects.add(assignment.getMetaproject()); + } + if (operationLog.isDebugEnabled()) + { + operationLog.debug(String.format("%s(%s, %s): %d metaproject(s) have been found.", + MethodUtils.getCurrentMethod().getName(), owner, entity, metaprojects.size())); + } + + return metaprojects; + } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAOTest.java index 705c436ebb8..11e6e96ccb3 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/MetaprojectDAOTest.java @@ -21,11 +21,13 @@ import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertTrue; import static org.testng.AssertJUnit.fail; +import java.util.Collection; import java.util.List; import org.testng.annotations.Test; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.MetaprojectPE; /** @@ -163,4 +165,20 @@ public class MetaprojectDAOTest extends AbstractDAOTest assertTrue(checked); } + + @Test + public void testListMetaprojectsForEntity() + { + ExperimentPE experiment = daoFactory.getExperimentDAO().getByTechId(new TechId(4)); + Collection<MetaprojectPE> connectedMetaprojects = + daoFactory.getMetaprojectDAO().listMetaprojectsForEntity(getTestPerson(), + experiment); + + assertEquals(2, connectedMetaprojects.size()); + for (MetaprojectPE metaproject : connectedMetaprojects) + { + assertTrue(metaproject.getId().longValue() == 1l + || metaproject.getId().longValue() == 3l); + } + } } diff --git a/openbis/sourceTest/sql/postgresql/124/042=metaproject_assignments_all.tsv b/openbis/sourceTest/sql/postgresql/124/042=metaproject_assignments_all.tsv index 3f208975f52..c405d1ac7c8 100644 --- a/openbis/sourceTest/sql/postgresql/124/042=metaproject_assignments_all.tsv +++ b/openbis/sourceTest/sql/postgresql/124/042=metaproject_assignments_all.tsv @@ -10,3 +10,4 @@ 10 1 6 \N \N \N 4 2012-09-05 10:18:10.581+02 11 1 \N 978 \N \N 3 2012-09-05 10:18:10.581+02 12 1 \N \N 2 \N 1 2012-09-05 10:18:10.581+02 +13 3 4 \N \N \N \N 2012-09-05 10:18:10.581+02 -- GitLab