import org.junit.Assert;\r
import org.junit.Before;\r
import org.junit.BeforeClass;\r
+import org.junit.Ignore;\r
import org.junit.Test;\r
import org.unitils.dbunit.annotation.DataSet;\r
import org.unitils.spring.annotation.SpringBeanByType;\r
\r
import eu.etaxonomy.cdm.model.agent.Address;\r
import eu.etaxonomy.cdm.model.agent.AgentBase;\r
+import eu.etaxonomy.cdm.model.agent.Contact;\r
import eu.etaxonomy.cdm.model.agent.Institution;\r
import eu.etaxonomy.cdm.model.agent.InstitutionType;\r
import eu.etaxonomy.cdm.model.agent.InstitutionalMembership;\r
import eu.etaxonomy.cdm.model.common.Figure;\r
import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;\r
import eu.etaxonomy.cdm.model.common.Group;\r
-import eu.etaxonomy.cdm.model.common.Keyword;\r
+import eu.etaxonomy.cdm.model.common.IdentifiableSource;\r
import eu.etaxonomy.cdm.model.common.LSIDAuthority;\r
import eu.etaxonomy.cdm.model.common.Language;\r
import eu.etaxonomy.cdm.model.common.LanguageString;\r
import eu.etaxonomy.cdm.model.common.MarkerType;\r
import eu.etaxonomy.cdm.model.common.OrderedTermBase;\r
import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;\r
-import eu.etaxonomy.cdm.model.common.OriginalSource;\r
+import eu.etaxonomy.cdm.model.common.OriginalSourceBase;\r
import eu.etaxonomy.cdm.model.common.RelationshipTermBase;\r
import eu.etaxonomy.cdm.model.common.Representation;\r
import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
+import eu.etaxonomy.cdm.model.common.TimePeriod;\r
import eu.etaxonomy.cdm.model.common.User;\r
import eu.etaxonomy.cdm.model.description.AbsenceTerm;\r
import eu.etaxonomy.cdm.model.description.CategoricalData;\r
import eu.etaxonomy.cdm.model.description.Feature;\r
import eu.etaxonomy.cdm.model.description.FeatureNode;\r
import eu.etaxonomy.cdm.model.description.FeatureTree;\r
-import eu.etaxonomy.cdm.model.description.IdentificationKey;\r
import eu.etaxonomy.cdm.model.description.IndividualsAssociation;\r
import eu.etaxonomy.cdm.model.description.MeasurementUnit;\r
+import eu.etaxonomy.cdm.model.description.MediaKey;\r
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
import eu.etaxonomy.cdm.model.description.PresenceTerm;\r
import eu.etaxonomy.cdm.model.description.QuantitativeData;\r
import eu.etaxonomy.cdm.model.location.NamedArea;\r
import eu.etaxonomy.cdm.model.location.NamedAreaLevel;\r
import eu.etaxonomy.cdm.model.location.NamedAreaType;\r
+import eu.etaxonomy.cdm.model.location.Point;\r
import eu.etaxonomy.cdm.model.location.ReferenceSystem;\r
import eu.etaxonomy.cdm.model.location.TdwgArea;\r
import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;\r
import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;\r
import eu.etaxonomy.cdm.model.occurrence.Specimen;\r
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;\r
-import eu.etaxonomy.cdm.model.reference.Article;\r
-import eu.etaxonomy.cdm.model.reference.BibtexEntryType;\r
-import eu.etaxonomy.cdm.model.reference.BibtexReference;\r
-import eu.etaxonomy.cdm.model.reference.Book;\r
-import eu.etaxonomy.cdm.model.reference.BookSection;\r
-import eu.etaxonomy.cdm.model.reference.CdDvd;\r
-import eu.etaxonomy.cdm.model.reference.Database;\r
-import eu.etaxonomy.cdm.model.reference.Generic;\r
-import eu.etaxonomy.cdm.model.reference.InProceedings;\r
-import eu.etaxonomy.cdm.model.reference.Journal;\r
-import eu.etaxonomy.cdm.model.reference.Map;\r
-import eu.etaxonomy.cdm.model.reference.Patent;\r
-import eu.etaxonomy.cdm.model.reference.PersonalCommunication;\r
-import eu.etaxonomy.cdm.model.reference.PrintSeries;\r
-import eu.etaxonomy.cdm.model.reference.PrintedUnitBase;\r
-import eu.etaxonomy.cdm.model.reference.Proceedings;\r
-import eu.etaxonomy.cdm.model.reference.Publisher;\r
+import eu.etaxonomy.cdm.model.reference.IBook;\r
+import eu.etaxonomy.cdm.model.reference.IBookSection;\r
import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
-import eu.etaxonomy.cdm.model.reference.Report;\r
-import eu.etaxonomy.cdm.model.reference.SectionBase;\r
-import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;\r
-import eu.etaxonomy.cdm.model.reference.Thesis;\r
-import eu.etaxonomy.cdm.model.reference.WebPage;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
import eu.etaxonomy.cdm.model.taxon.Synonym;\r
import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;\r
import eu.etaxonomy.cdm.model.view.AuditEvent;\r
+import eu.etaxonomy.cdm.persistence.dao.agent.IAgentDao;\r
import eu.etaxonomy.cdm.persistence.dao.common.ICdmGenericDao;\r
+import eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao;\r
import eu.etaxonomy.cdm.persistence.dao.occurrence.IOccurrenceDao;\r
import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonDao;\r
+import eu.etaxonomy.cdm.strategy.match.DefaultMatchStrategy;\r
+import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;\r
+import eu.etaxonomy.cdm.strategy.match.MatchException;\r
+import eu.etaxonomy.cdm.strategy.merge.DefaultMergeStrategy;\r
+import eu.etaxonomy.cdm.strategy.merge.IMergeStrategy;\r
+import eu.etaxonomy.cdm.strategy.merge.MergeException;\r
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;\r
\r
/**\r
\r
@SpringBeanByType\r
private IOccurrenceDao occurrenceDao;\r
+\r
+ \r
+ @SpringBeanByType\r
+ private ITaxonNameDao nameDao;\r
+\r
+ @SpringBeanByType\r
+ private IAgentDao agentDao;\r
\r
+ ReferenceFactory refFactory = ReferenceFactory.newInstance();\r
/**\r
* @throws java.lang.Exception\r
*/\r
\r
// ***************** TESTS ************************************************** \r
\r
+ @Test\r
+ @Ignore\r
+ public void testDelete(){\r
+ ReferenceBase ref1 = refFactory.newBook();\r
+ ReferenceBase ref2 = refFactory.newBook();\r
+ Annotation annotation = Annotation.NewInstance("Anno1", null);\r
+ ref1.addAnnotation(annotation);\r
+ cdmGenericDao.saveOrUpdate(ref1);\r
+ cdmGenericDao.saveOrUpdate(ref2);\r
+ taxonDao.flush();\r
+ try {\r
+ cdmGenericDao.merge(ref2, ref1, null);\r
+ taxonDao.flush();\r
+ } catch (MergeException e) {\r
+ // TODO Auto-generated catch block\r
+ e.printStackTrace();\r
+ }\r
+ //cdmGenericDao.delete(ref1);\r
+ taxonDao.flush();\r
+ System.out.println("OK");\r
+ //Assert.fail("Failed for testing");\r
+ }\r
+ \r
+ /**\r
+ * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#merge(CdmBase, CdmBase)}.\r
+ * @throws MergeException \r
+ */\r
+ @Test\r
+ @Ignore\r
+ public void testDelete2() throws MergeException {\r
+ BotanicalName name1 = BotanicalName.NewInstance(Rank.SPECIES());\r
+ name1.setTitleCache("BotanicalName1");\r
+ \r
+ BotanicalName name2 = BotanicalName.NewInstance(Rank.SPECIES());\r
+ name2.setTitleCache("BotanicalName2");\r
+ \r
+ ReferenceBase article1 = refFactory.newArticle();\r
+ ReferenceBase article2 = refFactory.newArticle();\r
+ \r
+ \r
+ name1.setNomenclaturalReference(article1);\r
+ name2.setNomenclaturalReference(article2);\r
+ \r
+ \r
+ Taxon taxon1 = Taxon.NewInstance(name1, article1);\r
+ \r
+// Person author = Person.NewInstance();\r
+// author.setTitleCache("Author");\r
+ Annotation annotation1 = Annotation.NewInstance("A1", Language.DEFAULT());\r
+ Annotation annotation2 = Annotation.NewInstance("A2", Language.DEFAULT());\r
+ \r
+ article1.addAnnotation(annotation1);\r
+ article2.addAnnotation(annotation2);\r
+ \r
+ nameDao.save(name1);\r
+ nameDao.save(name2);\r
+ cdmGenericDao.saveOrUpdate(article2);\r
+ \r
+ taxonDao.save(taxon1);\r
+\r
+ //unidircetional reference to the merged object should be redirected\r
+ cdmGenericDao.merge(article1, article2, null);\r
+ Assert.assertEquals("Name2 must have article 1 as new nomRef", article1 ,name2.getNomenclaturalReference());\r
+ //TODO microCitations!! -> warning \r
+ \r
+ //Annotations\r
+ Assert.assertEquals("Annotation number should be 2 (1 from each of the merged objects)", 2, article1.getAnnotations().size());\r
+ }\r
+\r
+ \r
+ \r
+ \r
/**\r
* Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#CdmGenericDaoImpl()}.\r
*/\r
Figure.class, \r
GrantedAuthorityImpl.class, \r
Group.class, \r
- Keyword.class, \r
+ IdentifiableSource.class,\r
Language.class, \r
LanguageString.class, \r
LSIDAuthority.class, \r
MarkerType.class, \r
OrderedTermBase.class, \r
OrderedTermVocabulary.class, \r
- OriginalSource.class, \r
+ OriginalSourceBase.class,\r
RelationshipTermBase.class, \r
Representation.class, \r
TermVocabulary.class, \r
Feature.class, \r
FeatureNode.class, \r
FeatureTree.class, \r
- IdentificationKey.class, \r
+ MediaKey.class, \r
IndividualsAssociation.class, \r
MeasurementUnit.class, \r
PresenceAbsenceTermBase.class, \r
PreservationMethod.class, \r
Specimen.class, \r
SpecimenOrObservationBase.class, \r
- Article.class, \r
- BibtexEntryType.class, \r
- BibtexReference.class, \r
- Book.class, \r
- BookSection.class, \r
- CdDvd.class, \r
- Database.class, \r
- Generic.class, \r
- InProceedings.class, \r
- Journal.class, \r
- Map.class, \r
- Patent.class, \r
- PersonalCommunication.class, \r
- PrintedUnitBase.class, \r
- PrintSeries.class, \r
- Proceedings.class, \r
ReferenceBase.class, \r
- Publisher.class, \r
- Report.class, \r
- SectionBase.class, \r
- StrictReferenceBase.class, \r
- Thesis.class, \r
- WebPage.class, \r
Synonym.class, \r
SynonymRelationship.class, \r
SynonymRelationshipType.class, \r
public void testGetReferencingObjectsCdmBase() {\r
BotanicalName name = BotanicalName.NewInstance(Rank.SPECIES());\r
name.setTitleCache("A name");\r
- ReferenceBase ref1 = Article.NewInstance();\r
+ ReferenceBase ref1 = refFactory.newArticle();\r
Taxon taxon = Taxon.NewInstance(name, ref1);\r
Person author = Person.NewInstance();\r
author.setTitleCache("Author");\r
Set<CdmBase> referencedObjects = cdmGenericDao.getReferencingObjects(ref1);\r
System.out.println("############## RESULT ###################");\r
for (CdmBase obj: referencedObjects){\r
- System.out.println("Object: " + obj.getClass().getSimpleName() + " - " + obj);\r
+ System.out.println("Object1: " + obj.getClass().getSimpleName() + " - " + obj);\r
}\r
assertEquals(3, referencedObjects.size());\r
System.out.println("############## ENDE ###################");\r
referencedObjects = cdmGenericDao.getReferencingObjects(author);\r
System.out.println("############## RESULT ###################");\r
for (CdmBase obj: referencedObjects){\r
- System.out.println("Object: " + obj.getClass().getSimpleName() + " - " + obj);\r
+ System.out.println("Object2: " + obj.getClass().getSimpleName() + " - " + obj);\r
}\r
assertEquals(2, referencedObjects.size());\r
System.out.println("############## ENDE ###################");\r
SpecimenOrObservationBase spec1 = occurrenceDao.findByUuid(uuidSpec);\r
\r
\r
- Set<CdmBase> referencedObjects = cdmGenericDao.getReferencingObjects(spec1);\r
+ Set<CdmBase> referencingObjects = cdmGenericDao.getReferencingObjects(spec1);\r
System.out.println("############## RESULT ###################");\r
- for (CdmBase obj: referencedObjects){\r
+ for (CdmBase obj: referencingObjects){\r
System.out.println("Object: " + obj.getClass().getSimpleName() + " - " + obj);\r
}\r
- assertEquals(2, referencedObjects.size());\r
System.out.println("############## ENDE ###################");\r
+ assertEquals("Number of referencing objects must be 2.", 2, referencingObjects.size());\r
+\r
+ }\r
+ \r
+ /**\r
+ * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#merge(CdmBase, CdmBase)}.\r
+ * @throws MergeException \r
+ */\r
+ @Test\r
+ @Ignore\r
+ public void testMergeCdmBaseReferenceAndIdentifiable() throws MergeException {\r
+ cdmGenericDao.test();\r
+ \r
+ \r
+ BotanicalName name1 = BotanicalName.NewInstance(Rank.SPECIES());\r
+ name1.setTitleCache("BotanicalName1");\r
+ \r
+ BotanicalName name2 = BotanicalName.NewInstance(Rank.SPECIES());\r
+ name2.setTitleCache("BotanicalName2");\r
+ \r
+ ZoologicalName zooName1 = ZoologicalName.NewInstance(Rank.SPECIES());\r
+ name1.setTitleCache("ZoologicalName1");\r
+\r
+ ReferenceBase article1 = refFactory.newArticle();\r
+ ReferenceBase article2 = refFactory.newArticle();\r
+ \r
+ \r
+ name1.setNomenclaturalReference(article1);\r
+ name2.setNomenclaturalReference(article2);\r
+ \r
+ \r
+ Taxon taxon1 = Taxon.NewInstance(name1, article1);\r
+ Taxon taxon2 = Taxon.NewInstance(name2, article2);\r
+ \r
+ \r
+// Person author = Person.NewInstance();\r
+// author.setTitleCache("Author");\r
+ Annotation annotation1 = Annotation.NewInstance("A1", Language.DEFAULT());\r
+ Annotation annotation2 = Annotation.NewInstance("A2", Language.DEFAULT());\r
+ \r
+ article1.addAnnotation(annotation1);\r
+ article2.addAnnotation(annotation2);\r
+ \r
+ Marker marker1 = Marker.NewInstance(MarkerType.COMPLETE(), false);\r
+ Marker marker2 = Marker.NewInstance(MarkerType.IMPORTED(), false);\r
+ \r
+ article1.addMarker(marker1);\r
+ article2.addMarker(marker2);\r
+\r
+ Rights rights1 = Rights.NewInstance();\r
+ Rights rights2 = Rights.NewInstance();\r
+ \r
+ article1.addRights(rights1);\r
+ article2.addRights(rights2);\r
+\r
+ \r
+ Credit credit1 = Credit.NewInstance(Team.NewInstance(), "credit1");\r
+ Credit credit2 = Credit.NewInstance(Team.NewInstance(), "credit2");\r
+ \r
+ article1.addCredit(credit1);\r
+ article2.addCredit(credit2);\r
+\r
+ Extension extension1 = Extension.NewInstance();\r
+ Extension extension2 = Extension.NewInstance();\r
+ \r
+ article1.addExtension(extension1);\r
+ article2.addExtension(extension2);\r
+ \r
+ IdentifiableSource source1 = IdentifiableSource.NewInstance();\r
+ IdentifiableSource source2 = IdentifiableSource.NewInstance();\r
+ \r
+ article1.addSource(source1);\r
+ article2.addSource(source2);\r
+\r
+ Media media1 = Media.NewInstance();\r
+ Media media2 = Media.NewInstance();\r
+ \r
+ article1.addMedia(media1);\r
+ article2.addMedia(media2);\r
+ \r
+// ref1.setAuthorTeam(author);\r
+// name1.setBasionymAuthorTeam(author);\r
+ \r
+ name1.setNomenclaturalReference(article1);\r
+\r
+ nameDao.save(name1);\r
+ nameDao.save(name2);\r
+ nameDao.save(zooName1);\r
+ \r
+ TaxonDescription taxDesc = TaxonDescription.NewInstance(taxon1);\r
+ taxDesc.setTitleCache("taxDesc");\r
+ taxDesc.addDescriptionSource(article2);\r
+\r
+ taxonDao.save(taxon1);\r
+\r
+ //unidircetional reference to the merged object should be redirected\r
+ cdmGenericDao.merge(article1, article2, null);\r
+ Assert.assertEquals("Name2 must have article 1 as new nomRef", article1 ,name2.getNomenclaturalReference());\r
+ //TODO microCitations!! -> warning \r
+ \r
+ //Annotations\r
+ Assert.assertEquals("Annotation number should be 2 (1 from each of the merged objects)", 2, article1.getAnnotations().size());\r
+ \r
+ //Marker\r
+ Assert.assertEquals("Marker number should be 2 (1 from each of the merged objects)", 2, article1.getMarkers().size());\r
+\r
+ //Rights\r
+ Assert.assertEquals("Rights number should be 2 (1 from each of the merged objects)", 2, article1.getRights().size());\r
+ \r
+ //Credits\r
+ Assert.assertEquals("Credits number should be 2 (1 from each of the merged objects)", 2, article1.getCredits().size());\r
+ \r
+ //Extensions\r
+ Assert.assertEquals("Extensions number should be 2 (1 from each of the merged objects)", 2, article1.getExtensions().size());\r
+\r
+ //Sources\r
+ Assert.assertEquals("Sources number should be 2 (1 from each of the merged objects)", 2, article1.getSources().size());\r
+\r
+ //Media\r
+ Assert.assertEquals("Media number should be 2 (1 from each of the merged objects)", 2, article1.getMedia().size());\r
+\r
+ //Description sources\r
+ Assert.assertEquals("Number of sources for taxon description must be 1", 1, taxDesc.getDescriptionSources().size());\r
+ Assert.assertTrue("Taxon description must have article1 as source", taxDesc.getDescriptionSources().contains(article1));\r
+ \r
+ //test exceptions\r
+ testMergeExceptions(name1, name2, taxon1, zooName1);\r
+\r
+ \r
+ //TO BE IMPLEMENTED \r
+ Assert.assertTrue("Rights2 must be contained in the rights", article1.getRights().contains(rights2));\r
+ Assert.assertTrue("Credits2 must be contained in the credits", article1.getCredits().contains(credit2));\r
+ Assert.assertTrue("Media2 must be contained in the media", article1.getMedia().contains(media2));\r
+ \r
+ }\r
+ \r
+ /**\r
+ * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#merge(CdmBase, CdmBase)}.\r
+ * @throws MergeException \r
+ */\r
+ @Test\r
+ @Ignore\r
+ public void testMergeTaxonNameAndTaxon() throws MergeException {\r
+ BotanicalName name1 = BotanicalName.NewInstance(Rank.SPECIES());\r
+ name1.setTitleCache("BotanicalName1");\r
\r
+ BotanicalName name2 = BotanicalName.NewInstance(Rank.SPECIES());\r
+ name2.setTitleCache("BotanicalName2");\r
+\r
+ BotanicalName name3 = BotanicalName.NewInstance(Rank.SPECIES());\r
+ name3.setTitleCache("BotanicalName3");\r
\r
+ ReferenceBase database = refFactory.newDatabase();\r
\r
+ Taxon taxon1 = Taxon.NewInstance(name1, database);\r
+ Taxon taxon2 = Taxon.NewInstance(name2, database);\r
+ Taxon taxon3 = Taxon.NewInstance(name3, database);\r
+\r
+ taxonDao.save(taxon1);\r
+ taxonDao.save(taxon2);\r
+ taxonDao.save(taxon3);\r
\r
+ cdmGenericDao.merge(name1, name2, null);\r
+ Assert.assertEquals("Name1 must have 2 taxa attached now.", 2 ,name1.getTaxonBases().size());\r
+ Assert.assertEquals("Taxon2 must have name1 as new name.", name1 ,taxon2.getName());\r
+ \r
+//TODO \r
+// cdmGenericDao.merge(taxon1, taxon3, null);\r
+// Assert.assertEquals("Name1 must have 3 taxa attached now.", 3 ,name1.getTaxonBases().size());\r
+ \r
+ \r
}\r
\r
+ /**\r
+ * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#merge(CdmBase, CdmBase)}.\r
+ * @throws MergeException \r
+ */\r
+ @Test\r
+ public void testMergeAuthors() throws MergeException {\r
+ \r
+ BotanicalName name1 = BotanicalName.NewInstance(Rank.SPECIES());\r
+ name1.setTitleCache("BotanicalName1");\r
+ \r
+ BotanicalName name2 = BotanicalName.NewInstance(Rank.SPECIES());\r
+ name2.setTitleCache("BotanicalName2");\r
+\r
+ IBook book1 = refFactory.newBook();\r
+ IBook book2 = refFactory.newBook();\r
+ \r
+ Team team1 = Team.NewInstance();\r
+ Team team2 = Team.NewInstance();\r
+ Team team3 = Team.NewInstance();\r
+ team1.setTitleCache("team1");\r
+ team2.setTitleCache("team2");\r
+ team3.setTitleCache("team3");\r
+ \r
+ Person person1 = Person.NewTitledInstance("person1");\r
+ Person person2 = Person.NewTitledInstance("person2");\r
+ Person person3 = Person.NewTitledInstance("person3");\r
+ \r
+ team1.setNomenclaturalTitle("T.1");\r
+ String street1 = "Strasse1";\r
+ team1.setContact(Contact.NewInstance(street1, "12345", "Berlin", WaterbodyOrCountry.ARGENTINA_ARGENTINE_REPUBLIC(),"pobox" , "Region", "a@b.de", "f12345", "+49-30-123456", "www.abc.de", Point.NewInstance(2.4, 3.2, ReferenceSystem.WGS84(), 3)));\r
+ team2.setContact(Contact.NewInstance("Street2", null, "London", null, null, null, null, "874599873", null, null, null));\r
+ String street3 = "Street3";\r
+ team2.addAddress(street3, null, null, null, null, null, Point.NewInstance(1.1, 2.2, null, 4));\r
+ String emailAddress1 = "Email1";\r
+ team1.addEmailAddress(emailAddress1);\r
+ \r
+ team2.addTeamMember(person1);\r
+ team2.addTeamMember(person2);\r
+ String emailAddress2 = "Email2";\r
+ team2.addEmailAddress(emailAddress2);\r
+ \r
+ team3.addTeamMember(person3);\r
+ team3.addEmailAddress("emailAddress3");\r
+ \r
+ book1.setAuthorTeam(team2);\r
+ book2.setAuthorTeam(team3);\r
+ \r
+ Credit credit1 = Credit.NewInstance(team3, "credit1");\r
+ book2.addCredit(credit1);\r
+ \r
+ agentDao.save(team1);\r
+ agentDao.save(team2);\r
+ agentDao.save(team3);\r
+ cdmGenericDao.save((ReferenceBase)book1);\r
+ cdmGenericDao.save((ReferenceBase)book2);\r
+ \r
+ cdmGenericDao.merge(team2, team3, null);\r
+ \r
+ Assert.assertSame("Author of book1 must be team2.", team2, book1.getAuthorTeam());\r
+ Assert.assertSame("Author of book2 must be team2.", team2, book2.getAuthorTeam());\r
+ Assert.assertSame("Agent of credit1 must be team2.", team2, credit1.getAgent());\r
+\r
+ Assert.assertEquals("Team2 must have 3 persons as members.",3, team2.getTeamMembers().size());\r
+ Assert.assertTrue("Team2 must have person3 as new member.", team2.getTeamMembers().contains(person3));\r
+ Assert.assertSame("Team2 must have person3 as third member.",person3, team2.getTeamMembers().get(2));\r
+ \r
+ \r
+ //Contact \r
+ cdmGenericDao.merge(team2, team1, null);\r
+ Contact team2Contact = team2.getContact();\r
+ Assert.assertNotNull("team2Contact must not be null", team2Contact);\r
+ Assert.assertNotNull("Addresses must not be null", team2Contact.getAddresses());\r
+ Assert.assertEquals("Number of addresses must be 3", 3, team2Contact.getAddresses().size());\r
+ Assert.assertEquals("Number of email addresses must be 4", 4, team2Contact.getEmailAddresses().size());\r
+ \r
+ boolean street1Exists = false;\r
+ boolean street3Exists = false;\r
+ boolean country1Exists = false;\r
+ for (Address address : team2Contact.getAddresses()){\r
+ if (street1.equals(address.getStreet())){\r
+ street1Exists = true;\r
+ }\r
+ if (street3.equals(address.getStreet())){\r
+ street3Exists = true;\r
+ }\r
+ if (WaterbodyOrCountry.ARGENTINA_ARGENTINE_REPUBLIC() == address.getCountry()){\r
+ country1Exists = true;\r
+ }\r
+ }\r
+ Assert.assertTrue("Street1 must be one of the streets in team2's addresses", street1Exists);\r
+ Assert.assertTrue("Street3 must be one of the streets in team2's addressesss", street3Exists);\r
+ Assert.assertTrue("Argentina must be one of the countries in team2's addresses", country1Exists);\r
+ \r
+ //Person\r
+ Institution institution1 = Institution.NewInstance();\r
+ institution1.setTitleCache("inst1");\r
+ Institution institution2 = Institution.NewInstance();\r
+ institution2.setTitleCache("inst2");\r
+ \r
+ TimePeriod period1 = TimePeriod.NewInstance(2002, 2004);\r
+ TimePeriod period2 = TimePeriod.NewInstance(2004, 2006);\r
+ \r
+ person1.addInstitutionalMembership(institution1, period1, "departement1", "role1");\r
+ person2.addInstitutionalMembership(institution2, period2, "departement2", "role2");\r
+\r
+ IMergeStrategy personMergeStrategy = DefaultMergeStrategy.NewInstance(Person.class);\r
+ personMergeStrategy.invoke(person1, person2);\r
+ \r
+ Assert.assertEquals("Number of institutional memberships must be 2", 2, person1.getInstitutionalMemberships().size());\r
+ for (InstitutionalMembership institutionalMembership : person1.getInstitutionalMemberships()){\r
+ Assert.assertSame("Person of institutional memebership must be person1", person1, institutionalMembership.getPerson());\r
+ }\r
+ \r
+ }\r
+ \r
+ private void testMergeExceptions(CdmBase name1, CdmBase name2, CdmBase taxon,CdmBase zooName1) throws MergeException{\r
+ //\r
+ try {\r
+ cdmGenericDao.merge(name1, null, null);\r
+ Assert.fail("Merging of 2 objects one or both of them null must throw an exception");\r
+ } catch (MergeException e) {\r
+ Assert.assertTrue("Merging of 2 objects of different types must throw an exception", true);\r
+ }\r
+ //\r
+ try {\r
+ cdmGenericDao.merge(null, name1, null);\r
+ Assert.fail("Merging of 2 objects one or both of them null must throw an exception");\r
+ } catch (NullPointerException e) {\r
+ Assert.assertTrue("Merging of 2 objects of different types must throw an exception", true);\r
+ }\r
+ //exceptions to be thrown\r
+ try {\r
+ cdmGenericDao.merge(name1, taxon, null);\r
+ Assert.fail("Merging of 2 objects of different types must throw an exception");\r
+ } catch (MergeException e) {\r
+ Assert.assertTrue("Merging of 2 objects of different types must throw an exception", true);\r
+ }\r
+ //next exception\r
+ try {\r
+ cdmGenericDao.merge(name1, zooName1, null);\r
+ Assert.fail("Merging of 2 objects of different types must throw an exception");\r
+ } catch (MergeException e) {\r
+ Assert.assertTrue("Merging of 2 objects of different types must throw an exception", true);\r
+ }\r
+ }\r
+ \r
+ @Test\r
+ public void findMatching(){\r
+ IBook book1 = refFactory.newBook();\r
+ IBook book2 = refFactory.newBook();\r
+ IBook book3 = refFactory.newBook();\r
+ IBook book4 = refFactory.newBook();\r
+ \r
+ String title1 = "title1";\r
+ String title2 = "title2";\r
+ book1.setTitle(title1);\r
+ book2.setTitle(title2);\r
+ book3.setTitle(title1);\r
+ \r
+ cdmGenericDao.saveOrUpdate((ReferenceBase)book1);\r
+ cdmGenericDao.saveOrUpdate((ReferenceBase)book2);\r
+ cdmGenericDao.saveOrUpdate((ReferenceBase)book3);\r
+ \r
+ IMatchStrategy matchStrategy = DefaultMatchStrategy.NewInstance(ReferenceBase.class);\r
+ \r
+ try {\r
+ List<IBook> matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertNotNull("Resultlist must not be null", matchResult);\r
+ Assert.assertEquals("Resultlist must have 1 entries", 1, matchResult.size());\r
+ Assert.assertSame("Resultlist entry must be book 1", book1, matchResult.get(0));\r
+ \r
+ book1.setDatePublished(TimePeriod.NewInstance(1999, 2002));\r
+ matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertTrue("Resultlist must have no entries", matchResult.isEmpty());\r
+ \r
+ book3.setDatePublished(TimePeriod.NewInstance(1999));\r
+ matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertTrue("Resultlist must have no entries", matchResult.isEmpty());\r
+\r
+ book3.setDatePublished(TimePeriod.NewInstance(1999,2002));\r
+ matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertEquals("Resultlist must have 1 entries", 1, matchResult.size());\r
+ Assert.assertSame("Resultlist entry must be book 1", book1, matchResult.get(0));\r
+ \r
+ //BookSection\r
+ IBookSection section1 = refFactory.newBookSection();\r
+ section1.setInBook(book1);\r
+ section1.setTitle("SecTitle");\r
+ section1.setPages("22-33");\r
+ IBookSection section2 = refFactory.newBookSection();\r
+ section2.setInBook(book2);\r
+ section2.setTitle("SecTitle");\r
+ section2.setPages("22-33");\r
+ IBookSection section3 = refFactory.newBookSection();\r
+ section3.setInBook(book1);\r
+ section3.setTitle("SecTitle");\r
+ section3.setPages("22-33");\r
+ cdmGenericDao.saveOrUpdate((ReferenceBase)section1);\r
+ cdmGenericDao.saveOrUpdate((ReferenceBase)section2);\r
+ cdmGenericDao.saveOrUpdate((ReferenceBase)section3);\r
+ \r
+ List<IBookSection> sectionResult = cdmGenericDao.findMatching(section3, null);\r
+ Assert.assertEquals("Resultlist must have 1 entries", 1, sectionResult.size());\r
+ Assert.assertSame("Resultlist entry must be section1", section1, sectionResult.get(0));\r
+ section2.setInBook(book2 = (IBook)((ReferenceBase) book1).clone());\r
+ cdmGenericDao.saveOrUpdate((ReferenceBase)book2);\r
+ cdmGenericDao.saveOrUpdate((ReferenceBase)book1);\r
+ \r
+ matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertEquals("Resultlist must have 2 entries", 2, matchResult.size());\r
+ sectionResult = cdmGenericDao.findMatching(section3, null);\r
+ Assert.assertEquals("Resultlist must have 1 entries", 2, sectionResult.size());\r
+ \r
+ \r
+ Person person1 = Person.NewTitledInstance("person");\r
+ Person person2 = Person.NewTitledInstance("person");\r
+ Person person3 = Person.NewTitledInstance("person");\r
+ \r
+ person1.setPrefix("pre1");\r
+ person2.setPrefix("pre2");\r
+ person3.setPrefix("pre3");\r
+ \r
+ book1.setAuthorTeam(person1);\r
+ book2.setAuthorTeam(person1);\r
+ book3.setAuthorTeam(person1);\r
+ matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertEquals("Resultlist must have 2 entries", 2, matchResult.size());\r
+ \r
+ book2.setAuthorTeam(person2);\r
+ book3.setAuthorTeam(person3);\r
+ matchResult = cdmGenericDao.findMatching(book3, null);\r
+ Assert.assertEquals("Resultlist must have no entries", 0, matchResult.size());\r
+ \r
+ person3.setPrefix("pre1");\r
+ matchResult = cdmGenericDao.findMatching(book3, null);\r
+ Assert.assertEquals("Resultlist must have 1 entry", 1, matchResult.size());\r
+ Assert.assertSame("Resultlist entry must be book 1", book1, matchResult.get(0));\r
+\r
+ } catch (MatchException e) {\r
+ Assert.fail("Find match must not throw Exception: " + e.getMessage());\r
+ e.printStackTrace();\r
+ }\r
+\r
+ }\r
+ \r
+ \r
+ @Test\r
+ public void findMatchingCache(){\r
+ IBook book1 = refFactory.newBook();\r
+ Team team1 = Team.NewInstance();\r
+ Team team2 = Team.NewInstance();\r
+ team1.setTitleCache("Team1");\r
+ team2.setTitleCache("Team1");\r
+ \r
+ book1.setTitle("Title1");\r
+ book1.setEdition("Edition1");\r
+ book1.setAuthorTeam(team1);\r
+ \r
+ \r
+ IBook book2 = (IBook) ((ReferenceBase)book1).clone();\r
+ IBook book3 = (IBook) ((ReferenceBase)book1).clone();\r
+ \r
+// Assert.assertTrue("Cloned book should match", matchStrategy.invoke(book1, bookClone));\r
+// book1.setTitleCache("cache1");\r
+// Assert.assertFalse("Cached book should not match", matchStrategy.invoke(book1, bookClone));\r
+// \r
+// bookClone.setTitleCache("cache1");\r
+// Assert.assertTrue("Cached book with same cache should match", matchStrategy.invoke(book1, bookClone));\r
+// \r
+// bookClone.setTitleCache("cache2");\r
+// Assert.assertFalse("Cached book with differings caches should not match", matchStrategy.invoke(book1, bookClone));\r
+// bookClone.setTitleCache("cache1"); //restore\r
+// \r
+// bookClone.setEdition(null);\r
+// Assert.assertTrue("Cached book with a defined and a null edition should match", matchStrategy.invoke(book1, bookClone));\r
+\r
+ cdmGenericDao.saveOrUpdate((ReferenceBase)book1);\r
+ cdmGenericDao.saveOrUpdate((ReferenceBase)book2);\r
+ cdmGenericDao.saveOrUpdate((ReferenceBase)book3);\r
+ cdmGenericDao.saveOrUpdate(team1);\r
+ cdmGenericDao.saveOrUpdate(team2);\r
+ \r
+ \r
+ IMatchStrategy matchStrategy = DefaultMatchStrategy.NewInstance(ReferenceBase.class);\r
+ \r
+ try {\r
+ List<IBook> matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertNotNull("Resultlist must not be null", matchResult);\r
+ Assert.assertEquals("Resultlist must have 2 entries", 2, matchResult.size());\r
+ Assert.assertTrue("Resultlist must contain book 1", matchResult.contains(book1));\r
+ Assert.assertTrue("Resultlist must contain book 2", matchResult.contains(book2));\r
+ \r
+ book1.setTitleCache("cache1");\r
+ matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertEquals("Resultlist must have 1 entries", 1, matchResult.size());\r
+ Assert.assertTrue("Resultlist must contain book 2", matchResult.contains(book2));\r
+ \r
+ book2.setTitleCache("cache2", false);\r
+ matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertEquals("Resultlist must have 1 entries", 1, matchResult.size());\r
+ Assert.assertTrue("Resultlist must contain book 2", matchResult.contains(book2));\r
+ \r
+ book2.setEdition(null);\r
+ matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertEquals("Resultlist must have 0 entries", 0, matchResult.size());\r
+ \r
+ book3.setTitleCache("cache1");\r
+ matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertEquals("Resultlist must have 1 entries", 1, matchResult.size());\r
+ Assert.assertTrue("Resultlist must contain book 1", matchResult.contains(book1));\r
+ \r
+ IMatchStrategy teamMatcher = DefaultMatchStrategy.NewInstance(Team.class);\r
+ boolean teamsMatch = teamMatcher.invoke(team1, team2);\r
+ Assert.assertTrue("Team1 and team2 should match" ,teamsMatch);\r
+ \r
+ book3.setAuthorTeam(team2);\r
+ matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertEquals("Resultlist must have 1 entries", 1, matchResult.size());\r
+ Assert.assertTrue("Resultlist must contain book 1", matchResult.contains(book1));\r
+\r
+ book3.setAuthorTeam(null);\r
+ matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertEquals("Resultlist must have 1 entries", 1, matchResult.size());\r
+ Assert.assertTrue("Resultlist must contain book 1", matchResult.contains(book1));\r
+ \r
+ book2.setTitleCache(book3.getTitleCache());\r
+ matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertEquals("Resultlist must have 2 entries", 2, matchResult.size());\r
+ Assert.assertTrue("Resultlist must contain book 1", matchResult.contains(book1));\r
+ Assert.assertTrue("Resultlist must contain book 2", matchResult.contains(book2));\r
+ \r
+ team2.setTitleCache("team2");\r
+ teamsMatch = teamMatcher.invoke(team1, team2);\r
+ Assert.assertFalse("Team1 and team2 should not match" ,teamsMatch);\r
+ \r
+ book3.setAuthorTeam(team1);\r
+ book2.setAuthorTeam(team2);\r
+ matchResult = cdmGenericDao.findMatching(book3, matchStrategy);\r
+ Assert.assertEquals("Resultlist must have 1 entries", 1, matchResult.size());\r
+ Assert.assertTrue("Resultlist must contain book 1", matchResult.contains(book1));\r
+ \r
+ \r
+ } catch (MatchException e) {\r
+ Assert.fail("Find match must not throw Exception: " + e.getMessage());\r
+ e.printStackTrace();\r
+ }\r
+\r
+ }\r
\r
/**\r
* Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#getHqlResult(java.lang.String)}.\r