From 97ac524a5a717b35ea4582f9bf16903c30820423 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andreas=20M=C3=BCller?= Date: Thu, 8 Jan 2015 10:46:19 +0000 Subject: [PATCH] first tests for listByIdentifier --- .gitattributes | 1 + .../dao/common/IIdentifiableDao.java | 2 +- .../hibernate/common/CdmEntityDaoBase.java | 2 +- .../hibernate/common/DefinedTermDaoImpl.java | 2 +- .../hibernate/common/IdentifiableDaoBase.java | 28 +++-- .../TermsDataSet-with_auditing_info.xml | Bin 2637637 -> 2638213 bytes .../service/IIdentifiableEntityService.java | 2 +- .../api/service/IdentifiableServiceBase.java | 4 +- .../service/IdentifiableServiceBaseTest.java | 97 +++++++++++++++++- ...leServiceBaseTest.testListByIdentifier.xml | 21 ++++ .../service/IdentifiableServiceBaseTest.xml | 41 ++++---- 11 files changed, 159 insertions(+), 41 deletions(-) create mode 100644 cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.testListByIdentifier.xml diff --git a/.gitattributes b/.gitattributes index 8699881a13..e4a4b517cb 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2444,6 +2444,7 @@ cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/ClassificationSe cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/CommonServiceImplTest.xml -text cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/FeatureNodeServiceImplTest-indexing.xml -text cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/HandlingCdmEntitiesTest.xml -text +cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.testListByIdentifier.xml -text cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.testUpdateTitleCache-result.xml -text cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.xml -text cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/MediaDaoImplTest.xml -text diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/common/IIdentifiableDao.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/common/IIdentifiableDao.java index b39e5455e9..4956c8294e 100644 --- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/common/IIdentifiableDao.java +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/common/IIdentifiableDao.java @@ -189,6 +189,6 @@ public interface IIdentifiableDao extends IAnnota * @param propertyPaths * @return */ - public List findByIdentifier(T clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, Integer pageSize, Integer pageNumber, List orderHints, List propertyPaths); + public List findByIdentifier(Class clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, Integer pageSize, Integer pageNumber, List orderHints, List propertyPaths); } \ No newline at end of file diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/CdmEntityDaoBase.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/CdmEntityDaoBase.java index f83b30282b..e255b4d29b 100644 --- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/CdmEntityDaoBase.java +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/CdmEntityDaoBase.java @@ -398,7 +398,7 @@ public abstract class CdmEntityDaoBase extends DaoBase implem Criteria criteria = prepareList(ids, pageSize, pageNumber, orderHints, "id"); - logger.debug(criteria.toString()); + if (logger.isDebugEnabled()){logger.debug(criteria.toString());}; @SuppressWarnings("unchecked") List result = criteria.list(); diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/DefinedTermDaoImpl.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/DefinedTermDaoImpl.java index cc9ccc2457..893f4ced52 100644 --- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/DefinedTermDaoImpl.java +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/DefinedTermDaoImpl.java @@ -121,7 +121,7 @@ public class DefinedTermDaoImpl extends IdentifiableDaoBase imp public List findByTitle(String queryString, CdmBase sessionObject) { checkNotInPriorView("DefinedTermDaoImpl.findByTitle(String queryString, CdmBase sessionObject)"); Session session = getSession(); - if ( sessionObject != null ) {// FIXME is this needed? + if ( sessionObject != null ) {//attache the object to the session, TODO needed? session.update(sessionObject); } Query query = session.createQuery("select term from DefinedTermBase term join fetch term.representations representation where representation.label = :label"); diff --git a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/IdentifiableDaoBase.java b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/IdentifiableDaoBase.java index 19f353ce91..8d8a080c7b 100644 --- a/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/IdentifiableDaoBase.java +++ b/cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/IdentifiableDaoBase.java @@ -448,24 +448,30 @@ public class IdentifiableDaoBase extends Annotatab } @Override - public List findByIdentifier( - T clazz, String identifier, DefinedTerm identifierType, + public List findByIdentifier( + Class clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, Integer pageSize, Integer pageNumber, List orderHints, List propertyPaths) { checkNotInPriorView("IdentifiableDaoBase.findByIdentifier(T clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, Integer pageSize, Integer pageNumber, List orderHints, List propertyPaths)"); - Query query = getSession().createQuery( - "Select c from " + type.getSimpleName() + " as c " + - "inner join c.identifier as identifier " + - "where identifier.identifier = :identifier " + - " AND identifier.identifierType = :type" - ); + String queryString = "SELECT c FROM " + type.getSimpleName() + " as c " + + "INNER JOIN c.identifiers as identifiers " + + "WHERE identifiers.identifier = :identifier "; + + if (identifierType != null){ + queryString = queryString + " AND identifiers.type = :type"; + } + + Query query = getSession().createQuery(queryString); query.setString("identifier", identifier); - query.setEntity("type", identifierType); + if (identifierType != null){ + query.setEntity("type", identifierType); + } //TODO matchmode, pageSize, pageNumber, orderHints, propertyPaths - return (List)query.list(); - + List results = (List)query.list(); + defaultBeanInitializer.initializeAll(results, propertyPaths); + return results; } } diff --git a/cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/database/TermsDataSet-with_auditing_info.xml b/cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/database/TermsDataSet-with_auditing_info.xml index 72c63f106064d2e881ec3c0a8d0714ac8cfa7026..09c470889e561ef57820d9d0cf30b38e30d40c45 100644 GIT binary patch delta 406 zcma*gyGp}Q0LF2mwl-c<Sd54CnvY2Ab4qq;v&*c;*d1wKpcul7r{aCh!4;q ztG|zqjG=uq})hF4#+_{By%z^hh^be?Pe*t*0r8? zTS(8p)N*>D!rv#O3?W&RE|jaI9Hk+LZASR9d% zv4A+7N2FqNkAy);13Pf+*yZW#k-nGGOx-RfG4FH}k?_mr)djaqqo?Sl-}L)uuAgTA zPIKY$z@vh=tb(-bwMoR>Hfamt3n%7Gc=n%ZW*QHjOob5`g)tb1377;8iZBH_Ov4P! i!W_)Q0xZH3EW-+vU={lRYhXed)?ouSUpm>=N9_ky;*u5s delta 155 zcmWN=iwS~I0ESVnm1Xa;w3lUCxkw{5fZ#8#kvm*y0taXvk?1>c%Az*S?`?7!IqIpe zfm{tWvfit$Z0B*z38$QK&IOlTaZR5aZW%D-j(Z+> extend * @param propertyPaths * @return */ - public List listByIdentifier(S clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, Integer pageSize, Integer pageNumber, List orderHints, List propertyPaths); + public List listByIdentifier(Class clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, Integer pageSize, Integer pageNumber, List orderHints, List propertyPaths); } diff --git a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentifiableServiceBase.java b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentifiableServiceBase.java index cd3fe23790..2b88552536 100644 --- a/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentifiableServiceBase.java +++ b/cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IdentifiableServiceBase.java @@ -568,8 +568,8 @@ public abstract class IdentifiableServiceBase List listByIdentifier( - S clazz, String identifier, DefinedTerm identifierType, + public List listByIdentifier( + Class clazz, String identifier, DefinedTerm identifierType, MatchMode matchmode, Integer pageSize, Integer pageNumber, List orderHints, List propertyPaths) { diff --git a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.java b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.java index 66f584d734..3dda5b2f81 100644 --- a/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.java +++ b/cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.java @@ -10,12 +10,11 @@ package eu.etaxonomy.cdm.api.service; import java.io.FileNotFoundException; +import java.util.List; import java.util.UUID; -import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.junit.Assert; -import org.junit.Ignore; import org.junit.Test; import org.unitils.database.annotations.Transactional; import org.unitils.database.util.TransactionMode; @@ -24,7 +23,17 @@ import org.unitils.dbunit.annotation.ExpectedDataSet; import org.unitils.spring.annotation.SpringBeanByType; import eu.etaxonomy.cdm.model.common.CdmBase; +import eu.etaxonomy.cdm.model.common.DefinedTerm; +import eu.etaxonomy.cdm.model.common.DefinedTermBase; +import eu.etaxonomy.cdm.model.common.IdentifiableEntity; +import eu.etaxonomy.cdm.model.common.Identifier; +import eu.etaxonomy.cdm.model.common.TermVocabulary; +import eu.etaxonomy.cdm.model.common.VocabularyEnum; +import eu.etaxonomy.cdm.model.name.BotanicalName; +import eu.etaxonomy.cdm.model.name.Rank; import eu.etaxonomy.cdm.model.name.TaxonNameBase; +import eu.etaxonomy.cdm.model.taxon.Classification; +import eu.etaxonomy.cdm.model.taxon.Taxon; import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest; /** @@ -40,6 +49,18 @@ public class IdentifiableServiceBaseTest extends CdmTransactionalIntegrationTest @SpringBeanByType private INameService nameService; + @SpringBeanByType + private ITermService termService; + + @SpringBeanByType + private IVocabularyService vocService; + + @SpringBeanByType + private ITaxonService taxonService; + + @SpringBeanByType + private IClassificationService classificationService; + /****************** TESTS *****************************/ @Test @@ -59,15 +80,85 @@ public class IdentifiableServiceBaseTest extends CdmTransactionalIntegrationTest commit(); // commitAndStartNewTransaction(new String[]{"TaxonNameBase","TaxonNameBase_AUD"}); } + + + @Test + @DataSet(value="IdentifiableServiceBaseTest.testListByIdentifier.xml") + public final void testListByIdentifier(){ + UUID uuidIdentifierType1 = UUID.fromString("02bb62db-a229-4eeb-83e6-a9a093943d5e"); + UUID uuidIdentifierType2 = UUID.fromString("ef6e960f-5289-456c-b25c-cff7f4de2f63"); + + DefinedTerm it1 = (DefinedTerm)termService.find(uuidIdentifierType1); + Assert.assertNotNull("identifier type must not be null", it1); + + List taxa = taxonService.listByIdentifier(Taxon.class, "ext-1234", it1, null, null, null, null, null); + Assert.assertTrue("Result should not be empty", taxa.size() == 1); + Taxon taxon = taxa.get(0); + Assert.assertEquals(UUID.fromString("888cded1-cadc-48de-8629-e32927919879"), taxon.getUuid()); + Assert.assertEquals("Taxon should have 1 identifier", 1, taxon.getIdentifiers().size()); + Identifier identifier = taxon.getIdentifiers().get(0); + DefinedTerm type = CdmBase.deproxy(identifier.getType(), DefinedTerm.class); + Assert.assertEquals(uuidIdentifierType1, type.getUuid()); + + List names = nameService.listByIdentifier(TaxonNameBase.class, "ext-1234", null, null, null, null, null, null); + Assert.assertTrue("Identifier does not exist for TaxonName", names.isEmpty()); + + taxa = taxonService.listByIdentifier(null, "ext-1234", null, null, null, null, null, null); + Assert.assertTrue("Result size for 'ext-1234' should be 1", taxa.size() == 1); + +// taxa = taxonService.listByIdentifier(Taxon.class, null, null, null, null, null, null, null); +// Assert.assertTrue("Result should not be empty", taxa.size() == 2); + + + } + /* (non-Javadoc) * @see eu.etaxonomy.cdm.test.integration.CdmIntegrationTest#createTestData() */ +// @Test @Override public void createTestDataSet() throws FileNotFoundException { - // TODO Auto-generated method stub + TermVocabulary voc = vocService.find(VocabularyEnum.IdentifierType.getUuid()); + + DefinedTerm identifierType1 = DefinedTerm.NewIdentifierTypeInstance(null, "identifierType1", null); + voc.addTerm(identifierType1); + termService.save(identifierType1); + DefinedTerm identifierType2 = DefinedTerm.NewIdentifierTypeInstance(null, "identifierType2", null); + voc.addTerm(identifierType2); + termService.save(identifierType2); + + + BotanicalName name = BotanicalName.NewInstance(Rank.SPECIES()); + Taxon tb = Taxon.NewInstance(name, null); + Identifier.NewInstance(tb, "ext-1234", identifierType1); + Identifier.NewInstance(name, "ext-name12", identifierType2); + taxonService.saveOrUpdate(tb); + + Taxon tb2 = Taxon.NewInstance(null, null); + tb2.setTitleCache("Cached taxon", true); + Identifier.NewInstance(tb2, "ext-cache1", identifierType2); + taxonService.saveOrUpdate(tb2); + Classification classification = Classification.NewInstance("My classification"); + classification.addChildTaxon(tb, null, null); + classificationService.saveOrUpdate(classification); + + commitAndStartNewTransaction(null); + + // this will write flat xml file to the same package in the test resources + // the test file is named after the test class like: TestClassName.xml + writeDbUnitDataSetFile(new String[] { + "TAXONBASE", "TAXONNAMEBASE","IDENTIFIER","TAXONBASE_IDENTIFIER", + "TAXONNAMEBASE_IDENTIFIER", + "REFERENCE", + "CLASSIFICATION", "CLASSIFICATION_TAXONNODE", "TAXONNODE", + "HOMOTYPICALGROUP", + "TERMVOCABULARY", + "DEFINEDTERMBASE" + }); + } diff --git a/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.testListByIdentifier.xml b/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.testListByIdentifier.xml new file mode 100644 index 0000000000..16fd7ab7a3 --- /dev/null +++ b/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.testListByIdentifier.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.xml b/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.xml index 3cffc60003..111de0e573 100644 --- a/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.xml +++ b/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/IdentifiableServiceBaseTest.xml @@ -1,21 +1,20 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + -- 2.34.1