diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java index 6acd9badb1084e861a8dc332349d1660083e3099..d4b01433528325f357083924bbf31140f95a28a6 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java @@ -170,6 +170,9 @@ public interface ICommonClientService extends IClientService /** * Returns a list of all vocabularies. + * <p> + * Note that the vocabulary terms are included/loaded. + * </p> */ public List<Vocabulary> listVocabularies() throws UserFailureException; 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 2b53d25f14a5ffffd6bbff3f371e31757f3cb16e..262a437ea46b91acde4055db954f8826ab9f4e73 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 @@ -64,6 +64,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.GroupIdentifier; 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.properties.EntityKind; +import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; /** * Implementation of client-server interface. @@ -382,7 +383,12 @@ public final class CommonServer extends AbstractServer<ICommonServer> implements assert sessionToken != null : "Unspecified session token"; // Not needed but just to refresh/check the session. getSessionManager().getSession(sessionToken); - final List<VocabularyPE> vocabularies = getDAOFactory().getVocabularyDAO().listVocabularies(); + final List<VocabularyPE> vocabularies = + getDAOFactory().getVocabularyDAO().listVocabularies(); + for (final VocabularyPE vocabularyPE : vocabularies) + { + HibernateUtils.initialize(vocabularyPE.getTerms()); + } Collections.sort(vocabularies); return vocabularies; } 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 b18f320ce14bbf91978832b9f813eff05c5a8a55..a55c2f441d8c51addfbd8aa0351d8886355afd9d 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 @@ -212,7 +212,7 @@ public interface ICommonServer extends IServer public List<PropertyTypePE> listPropertyTypes(final String sessionToken); /** - * List data types. + * Lists data types. * * @return a sorted list of {@link DataTypePE}. */ @@ -221,9 +221,10 @@ public interface ICommonServer extends IServer public List<DataTypePE> listDataTypes(final String sessionToken); /** - * List data types. + * Lists vocabularies. * - * @return a sorted list of {@link VocabularyPE}. + * @return a sorted list of {@link VocabularyPE}. Note that the vocabulary terms are + * included/loaded. */ @Transactional(readOnly = true) @RolesAllowed(RoleSet.OBSERVER) diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java index 815954e5aca2ec5a8612fe782668cc4a1e07ca59..e415f9e23c248ca32b700a82165c572d32a4afb3 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java @@ -43,6 +43,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE; import ch.systemsx.cisd.openbis.generic.shared.dto.RoleAssignmentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.RoleCode; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; +import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.DatabaseInstanceIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; @@ -527,6 +528,26 @@ public final class CommonServerTest extends AbstractServerTestCase context.assertIsSatisfied(); } + @Test + public final void testListVocabularies() + { + final Session session = prepareGetSession(); + context.checking(new Expectations() + { + { + one(daoFactory).getVocabularyDAO(); + will(returnValue(vocabularyDAO)); + + one(vocabularyDAO).listVocabularies(); + will(returnValue(Collections.emptyList())); + } + }); + final List<VocabularyPE> vocabularies = + createServer().listVocabularies(session.getSessionToken()); + assertEquals(0, vocabularies.size()); + context.assertIsSatisfied(); + } + @Test public final void testRegisterPropertyType() { diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/VocabularyDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/VocabularyDAOTest.java index 948089187218d70bc77f3c107ebe5e606ab56b5d..6029f848a434cde33015aa01faf2924108cba892 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/VocabularyDAOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/VocabularyDAOTest.java @@ -22,6 +22,8 @@ import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertNull; import static org.testng.AssertJUnit.fail; +import java.util.List; + import org.springframework.dao.DataIntegrityViolationException; import org.testng.annotations.Test; @@ -29,6 +31,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IVocabularyDAO; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyPE; import ch.systemsx.cisd.openbis.generic.shared.dto.VocabularyTermPE; +import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils; /** * Test cases for corresponding {@link VocabularyDAO} class. @@ -107,4 +110,13 @@ public final class VocabularyDAOTest extends AbstractDAOTest assertEquals(3, savedVocabulary.getTerms().size()); } + @Test + public final void testListVocabularies() + { + final IVocabularyDAO vocabularyDAO = daoFactory.getVocabularyDAO(); + final List<VocabularyPE> vocabularies = vocabularyDAO.listVocabularies(); + assertEquals(3, vocabularies.size()); + final VocabularyPE vocabularyPE = vocabularies.get(0); + assertFalse(HibernateUtils.isInitialized(vocabularyPE.getTerms())); + } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerTestCase.java index 01ac1a06038a72bd74ec414162aa1491ec5da940..c7ae5ce7305c5ef82ab1d42387671af9150847b5 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerTestCase.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerTestCase.java @@ -44,6 +44,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPropertyTypeDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IRoleAssignmentDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleDAO; import ch.systemsx.cisd.openbis.generic.server.dataaccess.ISampleTypeDAO; +import ch.systemsx.cisd.openbis.generic.server.dataaccess.IVocabularyDAO; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; @@ -103,6 +104,8 @@ public abstract class AbstractServerTestCase extends AssertJUnit protected IPropertyTypeBO propertyTypeBO; + protected IVocabularyDAO vocabularyDAO; + @BeforeMethod @SuppressWarnings("unchecked") public void setUp() @@ -123,6 +126,7 @@ public abstract class AbstractServerTestCase extends AssertJUnit projectDAO = context.mock(IProjectDAO.class); sampleTypeDAO = context.mock(ISampleTypeDAO.class); propertyTypeDAO = context.mock(IPropertyTypeDAO.class); + vocabularyDAO = context.mock(IVocabularyDAO.class); // BO groupBO = context.mock(IGroupBO.class); sampleBO = context.mock(ISampleBO.class);