3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.cdm
.persistence
.dao
.hibernate
.common
;
13 import static org
.junit
.Assert
.assertEquals
;
15 import java
.util
.ArrayList
;
16 import java
.util
.Arrays
;
17 import java
.util
.List
;
19 import java
.util
.UUID
;
21 import org
.apache
.log4j
.Logger
;
22 import org
.junit
.After
;
23 import org
.junit
.AfterClass
;
24 import org
.junit
.Assert
;
25 import org
.junit
.Before
;
26 import org
.junit
.BeforeClass
;
27 import org
.junit
.Ignore
;
28 import org
.junit
.Test
;
29 import org
.unitils
.dbunit
.annotation
.DataSet
;
30 import org
.unitils
.spring
.annotation
.SpringBeanByType
;
32 import eu
.etaxonomy
.cdm
.model
.agent
.Address
;
33 import eu
.etaxonomy
.cdm
.model
.agent
.AgentBase
;
34 import eu
.etaxonomy
.cdm
.model
.agent
.Contact
;
35 import eu
.etaxonomy
.cdm
.model
.agent
.Institution
;
36 import eu
.etaxonomy
.cdm
.model
.agent
.InstitutionType
;
37 import eu
.etaxonomy
.cdm
.model
.agent
.InstitutionalMembership
;
38 import eu
.etaxonomy
.cdm
.model
.agent
.Person
;
39 import eu
.etaxonomy
.cdm
.model
.agent
.Team
;
40 import eu
.etaxonomy
.cdm
.model
.agent
.TeamOrPersonBase
;
41 import eu
.etaxonomy
.cdm
.model
.common
.Annotation
;
42 import eu
.etaxonomy
.cdm
.model
.common
.AnnotationType
;
43 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
44 import eu
.etaxonomy
.cdm
.model
.common
.Credit
;
45 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTerm
;
46 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
47 import eu
.etaxonomy
.cdm
.model
.common
.Extension
;
48 import eu
.etaxonomy
.cdm
.model
.common
.ExtensionType
;
49 import eu
.etaxonomy
.cdm
.model
.common
.Figure
;
50 import eu
.etaxonomy
.cdm
.model
.common
.GrantedAuthorityImpl
;
51 import eu
.etaxonomy
.cdm
.model
.common
.Group
;
52 import eu
.etaxonomy
.cdm
.model
.common
.IdentifiableSource
;
53 import eu
.etaxonomy
.cdm
.model
.common
.LSIDAuthority
;
54 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
55 import eu
.etaxonomy
.cdm
.model
.common
.LanguageString
;
56 import eu
.etaxonomy
.cdm
.model
.common
.Marker
;
57 import eu
.etaxonomy
.cdm
.model
.common
.MarkerType
;
58 import eu
.etaxonomy
.cdm
.model
.common
.OrderedTermBase
;
59 import eu
.etaxonomy
.cdm
.model
.common
.OrderedTermVocabulary
;
60 import eu
.etaxonomy
.cdm
.model
.common
.OriginalSourceBase
;
61 import eu
.etaxonomy
.cdm
.model
.common
.OriginalSourceType
;
62 import eu
.etaxonomy
.cdm
.model
.common
.RelationshipTermBase
;
63 import eu
.etaxonomy
.cdm
.model
.common
.Representation
;
64 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
65 import eu
.etaxonomy
.cdm
.model
.common
.TimePeriod
;
66 import eu
.etaxonomy
.cdm
.model
.common
.User
;
67 import eu
.etaxonomy
.cdm
.model
.description
.AbsenceTerm
;
68 import eu
.etaxonomy
.cdm
.model
.description
.CategoricalData
;
69 import eu
.etaxonomy
.cdm
.model
.description
.CommonTaxonName
;
70 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionBase
;
71 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionElementBase
;
72 import eu
.etaxonomy
.cdm
.model
.description
.Distribution
;
73 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
74 import eu
.etaxonomy
.cdm
.model
.description
.FeatureNode
;
75 import eu
.etaxonomy
.cdm
.model
.description
.FeatureTree
;
76 import eu
.etaxonomy
.cdm
.model
.description
.IndividualsAssociation
;
77 import eu
.etaxonomy
.cdm
.model
.description
.MeasurementUnit
;
78 import eu
.etaxonomy
.cdm
.model
.description
.MediaKey
;
79 import eu
.etaxonomy
.cdm
.model
.description
.PresenceAbsenceTermBase
;
80 import eu
.etaxonomy
.cdm
.model
.description
.PresenceTerm
;
81 import eu
.etaxonomy
.cdm
.model
.description
.QuantitativeData
;
82 import eu
.etaxonomy
.cdm
.model
.description
.SpecimenDescription
;
83 import eu
.etaxonomy
.cdm
.model
.description
.State
;
84 import eu
.etaxonomy
.cdm
.model
.description
.StateData
;
85 import eu
.etaxonomy
.cdm
.model
.description
.StatisticalMeasure
;
86 import eu
.etaxonomy
.cdm
.model
.description
.StatisticalMeasurementValue
;
87 import eu
.etaxonomy
.cdm
.model
.description
.TaxonDescription
;
88 import eu
.etaxonomy
.cdm
.model
.description
.TaxonInteraction
;
89 import eu
.etaxonomy
.cdm
.model
.description
.TaxonNameDescription
;
90 import eu
.etaxonomy
.cdm
.model
.description
.TextData
;
91 import eu
.etaxonomy
.cdm
.model
.description
.TextFormat
;
92 import eu
.etaxonomy
.cdm
.model
.location
.Continent
;
93 import eu
.etaxonomy
.cdm
.model
.location
.NamedArea
;
94 import eu
.etaxonomy
.cdm
.model
.location
.NamedAreaLevel
;
95 import eu
.etaxonomy
.cdm
.model
.location
.NamedAreaType
;
96 import eu
.etaxonomy
.cdm
.model
.location
.Point
;
97 import eu
.etaxonomy
.cdm
.model
.location
.ReferenceSystem
;
98 import eu
.etaxonomy
.cdm
.model
.location
.WaterbodyOrCountry
;
99 import eu
.etaxonomy
.cdm
.model
.media
.AudioFile
;
100 import eu
.etaxonomy
.cdm
.model
.media
.ImageFile
;
101 import eu
.etaxonomy
.cdm
.model
.media
.Media
;
102 import eu
.etaxonomy
.cdm
.model
.media
.MediaRepresentation
;
103 import eu
.etaxonomy
.cdm
.model
.media
.MediaRepresentationPart
;
104 import eu
.etaxonomy
.cdm
.model
.media
.MovieFile
;
105 import eu
.etaxonomy
.cdm
.model
.media
.ReferencedMediaBase
;
106 import eu
.etaxonomy
.cdm
.model
.media
.Rights
;
107 import eu
.etaxonomy
.cdm
.model
.media
.RightsTerm
;
108 import eu
.etaxonomy
.cdm
.model
.molecular
.DnaSample
;
109 import eu
.etaxonomy
.cdm
.model
.molecular
.Locus
;
110 import eu
.etaxonomy
.cdm
.model
.molecular
.PhylogeneticTree
;
111 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
112 import eu
.etaxonomy
.cdm
.model
.name
.BacterialName
;
113 import eu
.etaxonomy
.cdm
.model
.name
.BotanicalName
;
114 import eu
.etaxonomy
.cdm
.model
.name
.CultivarPlantName
;
115 import eu
.etaxonomy
.cdm
.model
.name
.HomotypicalGroup
;
116 import eu
.etaxonomy
.cdm
.model
.name
.HybridRelationship
;
117 import eu
.etaxonomy
.cdm
.model
.name
.HybridRelationshipType
;
118 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationship
;
119 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationshipType
;
120 import eu
.etaxonomy
.cdm
.model
.name
.NameTypeDesignation
;
121 import eu
.etaxonomy
.cdm
.model
.name
.NameTypeDesignationStatus
;
122 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalStatus
;
123 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalStatusType
;
124 import eu
.etaxonomy
.cdm
.model
.name
.NonViralName
;
125 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
126 import eu
.etaxonomy
.cdm
.model
.name
.SpecimenTypeDesignation
;
127 import eu
.etaxonomy
.cdm
.model
.name
.SpecimenTypeDesignationStatus
;
128 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
129 import eu
.etaxonomy
.cdm
.model
.name
.TypeDesignationBase
;
130 import eu
.etaxonomy
.cdm
.model
.name
.ViralName
;
131 import eu
.etaxonomy
.cdm
.model
.name
.ZoologicalName
;
132 import eu
.etaxonomy
.cdm
.model
.occurrence
.Collection
;
133 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEvent
;
134 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEventType
;
135 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
136 import eu
.etaxonomy
.cdm
.model
.occurrence
.DeterminationEvent
;
137 import eu
.etaxonomy
.cdm
.model
.occurrence
.FieldObservation
;
138 import eu
.etaxonomy
.cdm
.model
.occurrence
.GatheringEvent
;
139 import eu
.etaxonomy
.cdm
.model
.occurrence
.PreservationMethod
;
140 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
141 import eu
.etaxonomy
.cdm
.model
.reference
.IBook
;
142 import eu
.etaxonomy
.cdm
.model
.reference
.IBookSection
;
143 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
144 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceFactory
;
145 import eu
.etaxonomy
.cdm
.model
.taxon
.Classification
;
146 import eu
.etaxonomy
.cdm
.model
.taxon
.Synonym
;
147 import eu
.etaxonomy
.cdm
.model
.taxon
.SynonymRelationship
;
148 import eu
.etaxonomy
.cdm
.model
.taxon
.SynonymRelationshipType
;
149 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
150 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
151 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonNode
;
152 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonRelationship
;
153 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonRelationshipType
;
154 import eu
.etaxonomy
.cdm
.model
.view
.AuditEvent
;
155 import eu
.etaxonomy
.cdm
.persistence
.dao
.agent
.IAgentDao
;
156 import eu
.etaxonomy
.cdm
.persistence
.dao
.common
.ICdmGenericDao
;
157 import eu
.etaxonomy
.cdm
.persistence
.dao
.name
.ITaxonNameDao
;
158 import eu
.etaxonomy
.cdm
.persistence
.dao
.occurrence
.IOccurrenceDao
;
159 import eu
.etaxonomy
.cdm
.persistence
.dao
.taxon
.ITaxonDao
;
160 import eu
.etaxonomy
.cdm
.strategy
.match
.DefaultMatchStrategy
;
161 import eu
.etaxonomy
.cdm
.strategy
.match
.IMatchStrategy
;
162 import eu
.etaxonomy
.cdm
.strategy
.match
.MatchException
;
163 import eu
.etaxonomy
.cdm
.strategy
.merge
.DefaultMergeStrategy
;
164 import eu
.etaxonomy
.cdm
.strategy
.merge
.IMergeStrategy
;
165 import eu
.etaxonomy
.cdm
.strategy
.merge
.MergeException
;
166 import eu
.etaxonomy
.cdm
.test
.integration
.CdmTransactionalIntegrationTest
;
170 * @created 27.07.2009
173 public class CdmGenericDaoImplTest
extends CdmTransactionalIntegrationTest
{
174 private static final Logger logger
= Logger
.getLogger(CdmGenericDaoImplTest
.class);
177 private ICdmGenericDao cdmGenericDao
;
180 private ITaxonDao taxonDao
;
183 private IOccurrenceDao occurrenceDao
;
187 private ITaxonNameDao nameDao
;
190 private IAgentDao agentDao
;
194 * @throws java.lang.Exception
197 public static void setUpBeforeClass() throws Exception
{
201 * @throws java.lang.Exception
204 public static void tearDownAfterClass() throws Exception
{
208 * @throws java.lang.Exception
211 public void setUp() throws Exception
{
215 * @throws java.lang.Exception
218 public void tearDown() throws Exception
{
221 // ***************** TESTS **************************************************
225 public void testDelete(){
226 Reference
<?
> ref1
= ReferenceFactory
.newBook();
227 Reference
<?
> ref2
= ReferenceFactory
.newBook();
228 Annotation annotation
= Annotation
.NewInstance("Anno1", null);
229 ref1
.addAnnotation(annotation
);
230 cdmGenericDao
.saveOrUpdate(ref1
);
231 cdmGenericDao
.saveOrUpdate(ref2
);
234 cdmGenericDao
.merge(ref2
, ref1
, null);
236 } catch (MergeException e
) {
237 // TODO Auto-generated catch block
240 //cdmGenericDao.delete(ref1);
242 System
.out
.println("OK");
243 //Assert.fail("Failed for testing");
247 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#merge(CdmBase, CdmBase)}.
248 * @throws MergeException
252 public void testDelete2() throws MergeException
{
253 BotanicalName name1
= BotanicalName
.NewInstance(Rank
.SPECIES());
254 name1
.setTitleCache("BotanicalName1", true);
256 BotanicalName name2
= BotanicalName
.NewInstance(Rank
.SPECIES());
257 name2
.setTitleCache("BotanicalName2", true);
259 Reference article1
= ReferenceFactory
.newArticle();
260 Reference article2
= ReferenceFactory
.newArticle();
263 name1
.setNomenclaturalReference(article1
);
264 name2
.setNomenclaturalReference(article2
);
267 Taxon taxon1
= Taxon
.NewInstance(name1
, article1
);
269 // Person author = Person.NewInstance();
270 // author.setTitleCache("Author");
271 Annotation annotation1
= Annotation
.NewInstance("A1", Language
.DEFAULT());
272 Annotation annotation2
= Annotation
.NewInstance("A2", Language
.DEFAULT());
274 article1
.addAnnotation(annotation1
);
275 article2
.addAnnotation(annotation2
);
279 cdmGenericDao
.saveOrUpdate(article2
);
281 taxonDao
.save(taxon1
);
283 //unidircetional reference to the merged object should be redirected
284 cdmGenericDao
.merge(article1
, article2
, null);
285 Assert
.assertEquals("Name2 must have article 1 as new nomRef", article1
,name2
.getNomenclaturalReference());
286 //TODO microCitations!! -> warning
289 Assert
.assertEquals("Annotation number should be 2 (1 from each of the merged objects)", 2, article1
.getAnnotations().size());
296 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#CdmGenericDaoImpl()}.
299 public void testCdmGenericDaoImpl() {
300 logger
.warn("Not yet implemented");
304 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#getCdmBasesByFieldAndClass(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.model.common.CdmBase)}.
307 public void testGetCdmBasesByFieldAndClass() {
308 logger
.warn("Not yet implemented");
312 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#getCdmBasesWithItemInCollection(java.lang.Class, java.lang.Class, java.lang.String, eu.etaxonomy.cdm.model.common.CdmBase)}.
315 public void testGetCdmBasesWithItemInCollection() {
316 logger
.warn("Not yet implemented");
320 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#getAllCdmClasses(boolean)}.
323 public void testGetAllCdmClasses() {
324 Class
[] existingClassesArray
= {
328 InstitutionalMembership
.class,
329 InstitutionType
.class,
332 TeamOrPersonBase
.class,
334 AnnotationType
.class,
336 DefinedTermBase
.class,
340 GrantedAuthorityImpl
.class,
342 IdentifiableSource
.class,
344 LanguageString
.class,
348 OrderedTermBase
.class,
349 OrderedTermVocabulary
.class,
350 OriginalSourceBase
.class,
351 RelationshipTermBase
.class,
352 Representation
.class,
353 TermVocabulary
.class,
358 CategoricalData
.class,
359 CommonTaxonName
.class,
360 DescriptionBase
.class,
361 DescriptionElementBase
.class,
367 IndividualsAssociation
.class,
368 MeasurementUnit
.class,
369 PresenceAbsenceTermBase
.class,
371 QuantitativeData
.class,
372 SpecimenDescription
.class,
375 StatisticalMeasure
.class,
376 StatisticalMeasurementValue
.class,
377 TaxonDescription
.class,
378 TaxonInteraction
.class,
379 TaxonNameDescription
.class,
384 NamedAreaLevel
.class,
386 ReferenceSystem
.class,
387 WaterbodyOrCountry
.class,
391 MediaRepresentation
.class,
392 MediaRepresentationPart
.class,
394 ReferencedMediaBase
.class,
399 PhylogeneticTree
.class,
403 CultivarPlantName
.class,
404 HomotypicalGroup
.class,
405 HybridRelationship
.class,
406 HybridRelationshipType
.class,
407 NameRelationship
.class,
408 NameRelationshipType
.class,
409 NameTypeDesignation
.class,
410 NameTypeDesignationStatus
.class,
411 NomenclaturalStatus
.class,
412 NomenclaturalStatusType
.class,
415 SpecimenTypeDesignation
.class,
416 SpecimenTypeDesignationStatus
.class,
418 TypeDesignationBase
.class,
420 ZoologicalName
.class,
422 DerivationEvent
.class,
423 DerivationEventType
.class,
425 DeterminationEvent
.class,
426 FieldObservation
.class,
427 GatheringEvent
.class,
428 PreservationMethod
.class,
429 SpecimenOrObservationBase
.class,
432 SynonymRelationship
.class,
433 SynonymRelationshipType
.class,
437 Classification
.class,
438 TaxonRelationship
.class,
439 TaxonRelationshipType
.class
444 //NomenclaturalCode.class,
446 List
<Class
> existingClassesList
= new ArrayList
<Class
>();
447 existingClassesList
.addAll(Arrays
.asList(existingClassesArray
));
448 boolean includeAbstractClasses
= true;
449 Set
<Class
<?
extends CdmBase
>> foundClasses
= cdmGenericDao
.getAllCdmClasses(includeAbstractClasses
);
452 // for (Class existingClass : existingClassesList){
453 // if (! foundClasses.contains(existingClass)){
454 // logger.warn("Class not found: " + existingClass.getCanonicalName());
458 //All classes must be found
459 Assert
.assertTrue("all classes must be found by getAllCdmClasses() method", foundClasses
.containsAll(existingClassesList
));
462 //No extra classes must be found
463 for (Class clazz
: foundClasses
){
464 if (! CdmBase
.class.isAssignableFrom(clazz
)&& !( AuditEvent
.class == clazz
) ){ //OLD: && !( LSID.class == clazz)&& !( NomenclaturalCode.class == clazz) && !( Point.class == clazz) && !( Modifier.class == clazz) && !( Contact.class == clazz)
465 Assert
.fail("Class " + clazz
.getName() + " is not assignable from CdmBase");
469 includeAbstractClasses
= false;
470 Set
<Class
<?
extends CdmBase
>> noAbstractClasses
= cdmGenericDao
.getAllCdmClasses(includeAbstractClasses
);
471 Class abstractClassToTest
= TaxonNameBase
.class;
472 Assert
.assertFalse("Abstract class " + abstractClassToTest
.getName() + " may not be in set ", noAbstractClasses
.contains(abstractClassToTest
));
476 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#getReferencingObjects(CdmBase)}.
479 public void testGetReferencingObjectsCdmBase() {
480 BotanicalName name
= BotanicalName
.NewInstance(Rank
.SPECIES());
481 name
.setTitleCache("A name", true);
482 Reference ref1
= ReferenceFactory
.newArticle();
483 Taxon taxon
= Taxon
.NewInstance(name
, ref1
);
484 Person author
= Person
.NewInstance();
485 author
.setTitleCache("Author", true);
486 ref1
.addAnnotation(Annotation
.NewInstance("A1", Language
.DEFAULT()));
487 ref1
.setAuthorTeam(author
);
488 name
.setBasionymAuthorTeam(author
);
490 name
.setNomenclaturalReference(ref1
);
492 taxonDao
.save(taxon
);
493 // UUID uuid = UUID.fromString("613980ac-9bd5-43b9-a374-d71e1794688f");
494 // Reference ref1 = referenceService.findByUuid(uuid);
497 Set
<CdmBase
> referencedObjects
= cdmGenericDao
.getReferencingObjects(ref1
);
498 System
.out
.println("############## RESULT ###################");
499 for (CdmBase obj
: referencedObjects
){
500 System
.out
.println("Object1: " + obj
.getClass().getSimpleName() + " - " + obj
);
502 assertEquals(3, referencedObjects
.size());
503 System
.out
.println("############## ENDE ###################");
505 // UUID uuidAuthor = UUID.fromString("4ce66544-a5a3-4601-ab0b-1f0a1338327b");
506 // AgentBase author = agentService.findByUuid(uuidAuthor);
508 referencedObjects
= cdmGenericDao
.getReferencingObjects(author
);
509 System
.out
.println("############## RESULT ###################");
510 for (CdmBase obj
: referencedObjects
){
511 System
.out
.println("Object2: " + obj
.getClass().getSimpleName() + " - " + obj
);
513 assertEquals(2, referencedObjects
.size());
514 System
.out
.println("############## ENDE ###################");
518 * 2nd test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#getReferencingObjects(CdmBase)}.
523 public final void testGetReferencingObjects2() {
524 // SpecimenDescription desc1 = SpecimenDescription.NewInstance();
525 // desc1.setTitleCache("desc1");
526 // SpecimenDescription desc2 = SpecimenDescription.NewInstance();
527 // desc2.setTitleCache("desc2");
529 // SpecimenOrObservationBase spec1 = Specimen.NewInstance();
531 // desc1.addDescribedSpecimenOrObservation(spec1);
532 // //Taxon taxon = Taxon.NewInstance(taxonNameBase, sec)
533 // spec1.addDescription(desc2);
535 // occurrenceService.save(spec1);
537 UUID uuidSpec
= UUID
.fromString("41539e9c-3764-4f14-9712-2d07d00c8e4c");
538 SpecimenOrObservationBase spec1
= occurrenceDao
.findByUuid(uuidSpec
);
541 Set
<CdmBase
> referencingObjects
= cdmGenericDao
.getReferencingObjects(spec1
);
542 // System.out.println("############## RESULT ###################");
543 // for (CdmBase obj: referencingObjects){
544 // System.out.println("Object: " + obj.getClass().getSimpleName() + " - " + obj);
546 // System.out.println("############## ENDE ###################");
547 assertEquals("Number of referencing objects must be 2.", 2, referencingObjects
.size());
552 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#merge(CdmBase, CdmBase)}.
553 * @throws MergeException
557 public void testMergeCdmBaseReferenceAndIdentifiable() throws MergeException
{
558 cdmGenericDao
.test();
561 BotanicalName name1
= BotanicalName
.NewInstance(Rank
.SPECIES());
562 name1
.setTitleCache("BotanicalName1", true);
564 BotanicalName name2
= BotanicalName
.NewInstance(Rank
.SPECIES());
565 name2
.setTitleCache("BotanicalName2", true);
567 ZoologicalName zooName1
= ZoologicalName
.NewInstance(Rank
.SPECIES());
568 name1
.setTitleCache("ZoologicalName1", true);
570 Reference article1
= ReferenceFactory
.newArticle();
571 Reference article2
= ReferenceFactory
.newArticle();
574 name1
.setNomenclaturalReference(article1
);
575 name2
.setNomenclaturalReference(article2
);
578 Taxon taxon1
= Taxon
.NewInstance(name1
, article1
);
579 Taxon taxon2
= Taxon
.NewInstance(name2
, article2
);
582 // Person author = Person.NewInstance();
583 // author.setTitleCache("Author");
584 Annotation annotation1
= Annotation
.NewInstance("A1", Language
.DEFAULT());
585 Annotation annotation2
= Annotation
.NewInstance("A2", Language
.DEFAULT());
587 article1
.addAnnotation(annotation1
);
588 article2
.addAnnotation(annotation2
);
590 Marker marker1
= Marker
.NewInstance(MarkerType
.COMPLETE(), false);
591 Marker marker2
= Marker
.NewInstance(MarkerType
.IMPORTED(), false);
593 article1
.addMarker(marker1
);
594 article2
.addMarker(marker2
);
596 Rights rights1
= Rights
.NewInstance();
597 Rights rights2
= Rights
.NewInstance();
599 article1
.addRights(rights1
);
600 article2
.addRights(rights2
);
603 Credit credit1
= Credit
.NewInstance(Team
.NewInstance(), "credit1");
604 Credit credit2
= Credit
.NewInstance(Team
.NewInstance(), "credit2");
606 article1
.addCredit(credit1
);
607 article2
.addCredit(credit2
);
609 Extension extension1
= Extension
.NewInstance();
610 Extension extension2
= Extension
.NewInstance();
612 article1
.addExtension(extension1
);
613 article2
.addExtension(extension2
);
615 IdentifiableSource source1
= IdentifiableSource
.NewInstance(OriginalSourceType
.Unknown
);
616 IdentifiableSource source2
= IdentifiableSource
.NewInstance(OriginalSourceType
.Unknown
);
618 article1
.addSource(source1
);
619 article2
.addSource(source2
);
621 Media media1
= Media
.NewInstance();
622 Media media2
= Media
.NewInstance();
624 article1
.addMedia(media1
);
625 article2
.addMedia(media2
);
627 // ref1.setAuthorTeam(author);
628 // name1.setBasionymAuthorTeam(author);
630 name1
.setNomenclaturalReference(article1
);
634 nameDao
.save(zooName1
);
636 TaxonDescription taxDesc
= TaxonDescription
.NewInstance(taxon1
);
637 taxDesc
.setTitleCache("taxDesc", true);
638 taxDesc
.addSource(OriginalSourceType
.Unknown
, null, null, article2
, null);
640 taxonDao
.save(taxon1
);
642 //unidircetional reference to the merged object should be redirected
643 cdmGenericDao
.merge(article1
, article2
, null);
644 Assert
.assertEquals("Name2 must have article 1 as new nomRef", article1
,name2
.getNomenclaturalReference());
645 //TODO microCitations!! -> warning
648 Assert
.assertEquals("Annotation number should be 2 (1 from each of the merged objects)", 2, article1
.getAnnotations().size());
651 Assert
.assertEquals("Marker number should be 2 (1 from each of the merged objects)", 2, article1
.getMarkers().size());
654 Assert
.assertEquals("Rights number should be 2 (1 from each of the merged objects)", 2, article1
.getRights().size());
657 Assert
.assertEquals("Credits number should be 2 (1 from each of the merged objects)", 2, article1
.getCredits().size());
660 Assert
.assertEquals("Extensions number should be 2 (1 from each of the merged objects)", 2, article1
.getExtensions().size());
663 Assert
.assertEquals("Sources number should be 2 (1 from each of the merged objects)", 2, article1
.getSources().size());
666 Assert
.assertEquals("Media number should be 2 (1 from each of the merged objects)", 2, article1
.getMedia().size());
668 //Description sources
669 Assert
.assertEquals("Number of sources for taxon description must be 1", 1, taxDesc
.getSources().size());
670 Assert
.assertEquals("Taxon description must have article1 as source", taxDesc
.getSources().iterator().next().getCitation(),article1
);
673 testMergeExceptions(name1
, name2
, taxon1
, zooName1
);
677 Assert
.assertTrue("Rights2 must be contained in the rights", article1
.getRights().contains(rights2
));
678 Assert
.assertTrue("Credits2 must be contained in the credits", article1
.getCredits().contains(credit2
));
679 Assert
.assertTrue("Media2 must be contained in the media", article1
.getMedia().contains(media2
));
684 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#merge(CdmBase, CdmBase)}.
685 * @throws MergeException
689 public void testMergeTaxonNameAndTaxon() throws MergeException
{
690 BotanicalName name1
= BotanicalName
.NewInstance(Rank
.SPECIES());
691 name1
.setTitleCache("BotanicalName1", true);
693 BotanicalName name2
= BotanicalName
.NewInstance(Rank
.SPECIES());
694 name2
.setTitleCache("BotanicalName2", true);
696 BotanicalName name3
= BotanicalName
.NewInstance(Rank
.SPECIES());
697 name3
.setTitleCache("BotanicalName3", true);
699 Reference database
= ReferenceFactory
.newDatabase();
701 Taxon taxon1
= Taxon
.NewInstance(name1
, database
);
702 Taxon taxon2
= Taxon
.NewInstance(name2
, database
);
703 Taxon taxon3
= Taxon
.NewInstance(name3
, database
);
705 taxonDao
.save(taxon1
);
706 taxonDao
.save(taxon2
);
707 taxonDao
.save(taxon3
);
709 cdmGenericDao
.merge(name1
, name2
, null);
710 Assert
.assertEquals("Name1 must have 2 taxa attached now.", 2 ,name1
.getTaxonBases().size());
711 Assert
.assertEquals("Taxon2 must have name1 as new name.", name1
,taxon2
.getName());
714 // cdmGenericDao.merge(taxon1, taxon3, null);
715 // Assert.assertEquals("Name1 must have 3 taxa attached now.", 3 ,name1.getTaxonBases().size());
721 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#merge(CdmBase, CdmBase)}.
722 * @throws MergeException
725 public void testMergeAuthors() throws MergeException
{
727 BotanicalName name1
= BotanicalName
.NewInstance(Rank
.SPECIES());
728 name1
.setTitleCache("BotanicalName1", true);
730 BotanicalName name2
= BotanicalName
.NewInstance(Rank
.SPECIES());
731 name2
.setTitleCache("BotanicalName2", true);
733 IBook book1
= ReferenceFactory
.newBook();
734 IBook book2
= ReferenceFactory
.newBook();
736 Team team1
= Team
.NewInstance();
737 Team team2
= Team
.NewInstance();
738 Team team3
= Team
.NewInstance();
739 team1
.setTitleCache("team1", true);
740 team2
.setTitleCache("team2", true);
741 team3
.setTitleCache("team3", true);
743 Person person1
= Person
.NewTitledInstance("person1");
744 Person person2
= Person
.NewTitledInstance("person2");
745 Person person3
= Person
.NewTitledInstance("person3");
747 team1
.setNomenclaturalTitle("T.1");
748 String street1
= "Strasse1";
749 team1
.setContact(Contact
.NewInstance(street1
, "12345", "Berlin", WaterbodyOrCountry
.ARGENTINAARGENTINEREPUBLIC(),"pobox" , "Region", "a@b.de", "f12345", "+49-30-123456", "www.abc.de", Point
.NewInstance(2.4, 3.2, ReferenceSystem
.WGS84(), 3)));
750 team2
.setContact(Contact
.NewInstance("Street2", null, "London", null, null, null, null, "874599873", null, null, null));
751 String street3
= "Street3";
752 team2
.addAddress(street3
, null, null, null, null, null, Point
.NewInstance(1.1, 2.2, null, 4));
753 String emailAddress1
= "Email1";
754 team1
.addEmailAddress(emailAddress1
);
756 team2
.addTeamMember(person1
);
757 team2
.addTeamMember(person2
);
758 String emailAddress2
= "Email2";
759 team2
.addEmailAddress(emailAddress2
);
761 team3
.addTeamMember(person3
);
762 team3
.addEmailAddress("emailAddress3");
764 book1
.setAuthorTeam(team2
);
765 book2
.setAuthorTeam(team3
);
767 Credit credit1
= Credit
.NewInstance(team3
, "credit1");
768 book2
.addCredit(credit1
);
770 agentDao
.save(team1
);
771 agentDao
.save(team2
);
772 agentDao
.save(team3
);
773 cdmGenericDao
.save((Reference
)book1
);
774 cdmGenericDao
.save((Reference
)book2
);
776 cdmGenericDao
.merge(team2
, team3
, null);
778 Assert
.assertSame("Author of book1 must be team2.", team2
, book1
.getAuthorTeam());
779 Assert
.assertSame("Author of book2 must be team2.", team2
, book2
.getAuthorTeam());
780 Assert
.assertSame("Agent of credit1 must be team2.", team2
, credit1
.getAgent());
782 Assert
.assertEquals("Team2 must have 3 persons as members.",3, team2
.getTeamMembers().size());
783 Assert
.assertTrue("Team2 must have person3 as new member.", team2
.getTeamMembers().contains(person3
));
784 Assert
.assertSame("Team2 must have person3 as third member.",person3
, team2
.getTeamMembers().get(2));
788 cdmGenericDao
.merge(team2
, team1
, null);
789 Contact team2Contact
= team2
.getContact();
790 Assert
.assertNotNull("team2Contact must not be null", team2Contact
);
791 Assert
.assertNotNull("Addresses must not be null", team2Contact
.getAddresses());
792 Assert
.assertEquals("Number of addresses must be 3", 3, team2Contact
.getAddresses().size());
793 Assert
.assertEquals("Number of email addresses must be 4", 4, team2Contact
.getEmailAddresses().size());
795 boolean street1Exists
= false;
796 boolean street3Exists
= false;
797 boolean country1Exists
= false;
798 for (Address address
: team2Contact
.getAddresses()){
799 if (street1
.equals(address
.getStreet())){
800 street1Exists
= true;
802 if (street3
.equals(address
.getStreet())){
803 street3Exists
= true;
805 if (WaterbodyOrCountry
.ARGENTINAARGENTINEREPUBLIC() == address
.getCountry()){
806 country1Exists
= true;
809 Assert
.assertTrue("Street1 must be one of the streets in team2's addresses", street1Exists
);
810 Assert
.assertTrue("Street3 must be one of the streets in team2's addressesss", street3Exists
);
811 Assert
.assertTrue("Argentina must be one of the countries in team2's addresses", country1Exists
);
814 Institution institution1
= Institution
.NewInstance();
815 institution1
.setTitleCache("inst1", true);
816 Institution institution2
= Institution
.NewInstance();
817 institution2
.setTitleCache("inst2", true);
819 TimePeriod period1
= TimePeriod
.NewInstance(2002, 2004);
820 TimePeriod period2
= TimePeriod
.NewInstance(2004, 2006);
822 person1
.addInstitutionalMembership(institution1
, period1
, "departement1", "role1");
823 person2
.addInstitutionalMembership(institution2
, period2
, "departement2", "role2");
825 IMergeStrategy personMergeStrategy
= DefaultMergeStrategy
.NewInstance(Person
.class);
826 personMergeStrategy
.invoke(person1
, person2
);
828 Assert
.assertEquals("Number of institutional memberships must be 2", 2, person1
.getInstitutionalMemberships().size());
829 for (InstitutionalMembership institutionalMembership
: person1
.getInstitutionalMemberships()){
830 Assert
.assertSame("Person of institutional memebership must be person1", person1
, institutionalMembership
.getPerson());
835 private void testMergeExceptions(CdmBase name1
, CdmBase name2
, CdmBase taxon
,CdmBase zooName1
) throws MergeException
{
838 cdmGenericDao
.merge(name1
, null, null);
839 Assert
.fail("Merging of 2 objects one or both of them null must throw an exception");
840 } catch (MergeException e
) {
841 Assert
.assertTrue("Merging of 2 objects of different types must throw an exception", true);
845 cdmGenericDao
.merge(null, name1
, null);
846 Assert
.fail("Merging of 2 objects one or both of them null must throw an exception");
847 } catch (NullPointerException e
) {
848 Assert
.assertTrue("Merging of 2 objects of different types must throw an exception", true);
850 //exceptions to be thrown
852 cdmGenericDao
.merge(name1
, taxon
, null);
853 Assert
.fail("Merging of 2 objects of different types must throw an exception");
854 } catch (MergeException e
) {
855 Assert
.assertTrue("Merging of 2 objects of different types must throw an exception", true);
859 cdmGenericDao
.merge(name1
, zooName1
, null);
860 Assert
.fail("Merging of 2 objects of different types must throw an exception");
861 } catch (MergeException e
) {
862 Assert
.assertTrue("Merging of 2 objects of different types must throw an exception", true);
867 public void findMatching(){
868 IBook book1
= ReferenceFactory
.newBook();
869 IBook book2
= ReferenceFactory
.newBook();
870 IBook book3
= ReferenceFactory
.newBook();
871 IBook book4
= ReferenceFactory
.newBook();
873 String title1
= "title1";
874 String title2
= "title2";
875 book1
.setTitle(title1
);
876 book2
.setTitle(title2
);
877 book3
.setTitle(title1
);
879 cdmGenericDao
.saveOrUpdate((Reference
)book1
);
880 cdmGenericDao
.saveOrUpdate((Reference
)book2
);
881 cdmGenericDao
.saveOrUpdate((Reference
)book3
);
883 IMatchStrategy matchStrategy
= DefaultMatchStrategy
.NewInstance(Reference
.class);
886 List
<IBook
> matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
887 Assert
.assertNotNull("Resultlist must not be null", matchResult
);
888 Assert
.assertEquals("Resultlist must have 1 entries", 1, matchResult
.size());
889 Assert
.assertSame("Resultlist entry must be book 1", book1
, matchResult
.get(0));
891 book1
.setDatePublished(TimePeriod
.NewInstance(1999, 2002));
892 matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
893 Assert
.assertTrue("Resultlist must have no entries", matchResult
.isEmpty());
895 book3
.setDatePublished(TimePeriod
.NewInstance(1999));
896 matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
897 Assert
.assertTrue("Resultlist must have no entries", matchResult
.isEmpty());
899 book3
.setDatePublished(TimePeriod
.NewInstance(1999,2002));
900 matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
901 Assert
.assertEquals("Resultlist must have 1 entries", 1, matchResult
.size());
902 Assert
.assertSame("Resultlist entry must be book 1", book1
, matchResult
.get(0));
905 IBookSection section1
= ReferenceFactory
.newBookSection();
906 section1
.setInBook(book1
);
907 section1
.setTitle("SecTitle");
908 section1
.setPages("22-33");
909 IBookSection section2
= ReferenceFactory
.newBookSection();
910 section2
.setInBook(book2
);
911 section2
.setTitle("SecTitle");
912 section2
.setPages("22-33");
913 IBookSection section3
= ReferenceFactory
.newBookSection();
914 section3
.setInBook(book1
);
915 section3
.setTitle("SecTitle");
916 section3
.setPages("22-33");
917 cdmGenericDao
.saveOrUpdate((Reference
)section1
);
918 cdmGenericDao
.saveOrUpdate((Reference
)section2
);
919 cdmGenericDao
.saveOrUpdate((Reference
)section3
);
921 List
<IBookSection
> sectionResult
= cdmGenericDao
.findMatching(section3
, null);
922 Assert
.assertEquals("Resultlist must have 1 entries", 1, sectionResult
.size());
923 Assert
.assertSame("Resultlist entry must be section1", section1
, sectionResult
.get(0));
924 section2
.setInBook(book2
= (IBook
)((Reference
) book1
).clone());
925 cdmGenericDao
.saveOrUpdate((Reference
)book2
);
926 cdmGenericDao
.saveOrUpdate((Reference
)book1
);
928 matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
929 Assert
.assertEquals("Resultlist must have 2 entries", 2, matchResult
.size());
930 sectionResult
= cdmGenericDao
.findMatching(section3
, null);
931 Assert
.assertEquals("Resultlist must have 1 entries", 2, sectionResult
.size());
934 Person person1
= Person
.NewTitledInstance("person");
935 Person person2
= Person
.NewTitledInstance("person");
936 Person person3
= Person
.NewTitledInstance("person");
938 person1
.setPrefix("pre1");
939 person2
.setPrefix("pre2");
940 person3
.setPrefix("pre3");
942 // matchResult = cdmGenericDao.findMatching(book3, matchStrategy);
943 // Assert.assertEquals("Resultlist must have 2 entries", 2, matchResult.size());
945 book1
.setAuthorTeam(person1
);
946 book2
.setAuthorTeam(person1
);
947 book3
.setAuthorTeam(person1
);
949 boolean m
= matchStrategy
.invoke(book1
, book3
);
950 boolean m2
= matchStrategy
.invoke(book2
, book3
);
952 matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
953 Assert
.assertEquals("Resultlist must have 2 entries", 2, matchResult
.size());
955 book2
.setAuthorTeam(person2
);
956 book3
.setAuthorTeam(person3
);
957 matchResult
= cdmGenericDao
.findMatching(book3
, null);
958 Assert
.assertEquals("Resultlist must have no entries", 0, matchResult
.size());
960 person3
.setPrefix("pre1");
961 matchResult
= cdmGenericDao
.findMatching(book3
, null);
962 Assert
.assertEquals("Resultlist must have 1 entry", 1, matchResult
.size());
963 Assert
.assertSame("Resultlist entry must be book 1", book1
, matchResult
.get(0));
965 } catch (MatchException e
) {
966 Assert
.fail("Find match must not throw Exception: " + e
.getMessage());
974 public void findMatchingCache(){
975 IBook book1
= ReferenceFactory
.newBook();
976 Team team1
= Team
.NewInstance();
977 Team team2
= Team
.NewInstance();
978 team1
.setTitleCache("Team1", true);
979 team2
.setTitleCache("Team1", true);
981 book1
.setTitle("Title1");
982 book1
.setEdition("Edition1");
983 book1
.setAuthorTeam(team1
);
986 IBook book2
= (IBook
) ((Reference
)book1
).clone();
987 IBook book3
= (IBook
) ((Reference
)book1
).clone();
989 // Assert.assertTrue("Cloned book should match", matchStrategy.invoke(book1, bookClone));
990 // book1.setTitleCache("cache1");
991 // Assert.assertFalse("Cached book should not match", matchStrategy.invoke(book1, bookClone));
993 // bookClone.setTitleCache("cache1");
994 // Assert.assertTrue("Cached book with same cache should match", matchStrategy.invoke(book1, bookClone));
996 // bookClone.setTitleCache("cache2");
997 // Assert.assertFalse("Cached book with differings caches should not match", matchStrategy.invoke(book1, bookClone));
998 // bookClone.setTitleCache("cache1"); //restore
1000 // bookClone.setEdition(null);
1001 // Assert.assertTrue("Cached book with a defined and a null edition should match", matchStrategy.invoke(book1, bookClone));
1003 cdmGenericDao
.saveOrUpdate((Reference
)book1
);
1004 cdmGenericDao
.saveOrUpdate((Reference
)book2
);
1005 cdmGenericDao
.saveOrUpdate((Reference
)book3
);
1006 cdmGenericDao
.saveOrUpdate(team1
);
1007 cdmGenericDao
.saveOrUpdate(team2
);
1010 IMatchStrategy matchStrategy
= DefaultMatchStrategy
.NewInstance(Reference
.class);
1013 List
<IBook
> matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
1014 Assert
.assertNotNull("Resultlist must not be null", matchResult
);
1015 Assert
.assertEquals("Resultlist must have 2 entries", 2, matchResult
.size());
1016 Assert
.assertTrue("Resultlist must contain book 1", matchResult
.contains(book1
));
1017 Assert
.assertTrue("Resultlist must contain book 2", matchResult
.contains(book2
));
1019 book1
.setTitleCache("cache1", true);
1020 matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
1021 Assert
.assertEquals("Resultlist must have 1 entries", 1, matchResult
.size());
1022 Assert
.assertTrue("Resultlist must contain book 2", matchResult
.contains(book2
));
1024 book2
.setTitleCache("cache2", false);
1025 matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
1026 Assert
.assertEquals("Resultlist must have 1 entries", 1, matchResult
.size());
1027 Assert
.assertTrue("Resultlist must contain book 2", matchResult
.contains(book2
));
1029 book2
.setEdition(null);
1030 matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
1031 Assert
.assertEquals("Resultlist must have 0 entries", 0, matchResult
.size());
1033 book3
.setTitleCache("cache1", true);
1034 matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
1035 Assert
.assertEquals("Resultlist must have 1 entries", 1, matchResult
.size());
1036 Assert
.assertTrue("Resultlist must contain book 1", matchResult
.contains(book1
));
1038 IMatchStrategy teamMatcher
= DefaultMatchStrategy
.NewInstance(Team
.class);
1039 boolean teamsMatch
= teamMatcher
.invoke(team1
, team2
);
1040 Assert
.assertTrue("Team1 and team2 should match" ,teamsMatch
);
1042 book3
.setAuthorTeam(team2
);
1043 matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
1044 Assert
.assertEquals("Resultlist must have 1 entries", 1, matchResult
.size());
1045 Assert
.assertTrue("Resultlist must contain book 1", matchResult
.contains(book1
));
1047 book3
.setAuthorTeam(null);
1048 matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
1049 Assert
.assertEquals("Resultlist must have 1 entries", 1, matchResult
.size());
1050 Assert
.assertTrue("Resultlist must contain book 1", matchResult
.contains(book1
));
1052 book2
.setTitleCache(book3
.getTitleCache(), true);
1053 matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
1054 Assert
.assertEquals("Resultlist must have 2 entries", 2, matchResult
.size());
1055 Assert
.assertTrue("Resultlist must contain book 1", matchResult
.contains(book1
));
1056 Assert
.assertTrue("Resultlist must contain book 2", matchResult
.contains(book2
));
1058 team2
.setTitleCache("team2", true);
1059 teamsMatch
= teamMatcher
.invoke(team1
, team2
);
1060 Assert
.assertFalse("Team1 and team2 should not match" ,teamsMatch
);
1062 book3
.setAuthorTeam(team1
);
1063 book2
.setAuthorTeam(team2
);
1064 matchResult
= cdmGenericDao
.findMatching(book3
, matchStrategy
);
1065 Assert
.assertEquals("Resultlist must have 1 entries", 1, matchResult
.size());
1066 Assert
.assertTrue("Resultlist must contain book 1", matchResult
.contains(book1
));
1069 } catch (MatchException e
) {
1070 Assert
.fail("Find match must not throw Exception: " + e
.getMessage());
1071 e
.printStackTrace();
1077 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmGenericDaoImpl#getHqlResult(java.lang.String)}.
1080 public void testGetHqlResult() {
1081 logger
.warn("Not yet implemented");