2 * Copyright (C) 2009 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.api
.service
;
12 import java
.util
.Collection
;
13 import java
.util
.HashSet
;
14 import java
.util
.Iterator
;
15 import java
.util
.Map
.Entry
;
17 import java
.util
.UUID
;
19 import junit
.framework
.Assert
;
21 import org
.apache
.log4j
.Logger
;
22 import org
.junit
.Test
;
23 import org
.unitils
.dbunit
.annotation
.DataSet
;
24 import org
.unitils
.spring
.annotation
.SpringBeanByType
;
26 import eu
.etaxonomy
.cdm
.api
.service
.pager
.Pager
;
27 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
28 import eu
.etaxonomy
.cdm
.model
.common
.LanguageString
;
29 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionBase
;
30 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionElementBase
;
31 import eu
.etaxonomy
.cdm
.model
.description
.TaxonDescription
;
32 import eu
.etaxonomy
.cdm
.model
.description
.TextData
;
33 import eu
.etaxonomy
.cdm
.test
.integration
.CdmIntegrationTest
;
36 * @author a.babadshanjan
40 public class DescriptionServiceImplTest
extends CdmIntegrationTest
{
41 @SuppressWarnings("unused")
42 private static Logger logger
= Logger
.getLogger(DescriptionServiceImplTest
.class);
45 private IDescriptionService service
;
50 public void testGetDefaultFeatureVocabulary() {
52 service
.getDefaultFeatureVocabulary();
56 @DataSet("CommonServiceImplTest.xml")
57 public void testChangeDescriptionElement(){
58 DescriptionBase descBase
= service
.find(UUID
.fromString("eb17b80a-9be6-4642-a6a8-b19a318925e6"));
59 Set
<DescriptionElementBase
> elements
= descBase
.getElements();
60 Iterator iterator
= elements
.iterator();
61 while (iterator
.hasNext()){
62 DescriptionElementBase base
= (DescriptionElementBase
) iterator
.next();
63 if (base
instanceof TextData
){
64 TextData textdata
= (TextData
) base
;
65 Set
<Entry
<Language
,LanguageString
>> entries
= textdata
.getMultilanguageText().entrySet();
66 Iterator entryIterator
= entries
.iterator();
67 while (entryIterator
.hasNext()){
68 Entry
<Language
, LanguageString
> entry
= (Entry
<Language
, LanguageString
>) entryIterator
.next();
69 LanguageString langString
= entry
.getValue();
70 System
.out
.println(langString
);
71 langString
.setText("blablubber");
76 service
.saveOrUpdate(descBase
);
77 Pager
<DescriptionElementBase
> allElements
= service
.getDescriptionElements(null, null, null, null, null, null);
78 Assert
.assertEquals(1, allElements
.getCount().intValue());
79 DescriptionElementBase test
= allElements
.getRecords().get(0);
80 if (test
instanceof TextData
){
82 Set
<Entry
<Language
,LanguageString
>> entries
= ((TextData
) test
).getMultilanguageText().entrySet();
83 Iterator entryIterator
= entries
.iterator();
84 while (entryIterator
.hasNext()){
85 Entry
<Language
, LanguageString
> entry
= (Entry
<Language
, LanguageString
>) entryIterator
.next();
86 LanguageString langString
= entry
.getValue();
87 System
.out
.println(langString
);
93 public void testMoveDescriptionElementsToTaxon(){
95 TaxonDescription sourceDescription
= TaxonDescription
.NewInstance();
97 TextData element
= TextData
.NewInstance();
98 sourceDescription
.addElement(element
);
99 TextData element2
= TextData
.NewInstance();
100 sourceDescription
.addElement(element2
);
101 Collection
<DescriptionElementBase
> sourceCollection
= new HashSet
<DescriptionElementBase
>();
102 sourceCollection
.addAll(sourceDescription
.getElements());
103 TextData element3
= TextData
.NewInstance();
104 sourceDescription
.addElement(element3
);
106 Assert
.assertEquals(3, sourceDescription
.getElements().size());
108 TaxonDescription targetDescription
= TaxonDescription
.NewInstance();
109 this.service
.save(sourceDescription
);
110 this.service
.save(targetDescription
);
112 service
.moveDescriptionElementsToDescription(sourceCollection
, targetDescription
, false);
114 Assert
.assertEquals("Source descirption should have 1 element left", 1, sourceDescription
.getElements().size());
115 Assert
.assertEquals("Target descriptoin should have 2 new elements", 2, targetDescription
.getElements().size());
116 Assert
.assertTrue("The moved element should be in the new description", targetDescription
.getElements().contains(element
));
117 Assert
.assertTrue("The moved element2 should be in the new description", targetDescription
.getElements().contains(element2
));
118 Assert
.assertFalse("Element3 should not be in the new description", targetDescription
.getElements().contains(element3
));
119 Assert
.assertTrue("Element3 should remain in the old description", targetDescription
.getElements().contains(element
));
120 this.service
.save(sourceDescription
);
121 this.service
.save(targetDescription
);
124 service
.moveDescriptionElementsToDescription(targetDescription
.getElements(), sourceDescription
, false);
125 } catch (Exception e
) {
126 //asserting that no ConcurrentModificationException is thrown when the elements collection is passed as a parameter
130 Assert
.assertEquals("Source descirption should have 3 elements again", 3, sourceDescription
.getElements().size());
131 Assert
.assertEquals("Destination descirption should have no elements again", 0, targetDescription
.getElements().size());
132 this.service
.save(sourceDescription
);
133 this.service
.save(targetDescription
);
136 sourceCollection
.add(sourceDescription
.getElements().iterator().next());
137 service
.moveDescriptionElementsToDescription(sourceCollection
, targetDescription
, true);
139 Assert
.assertEquals("Source descirption should still have 3 elements", 3, sourceDescription
.getElements().size());
140 Assert
.assertEquals("Destination descirption should have 1 element again", 1, targetDescription
.getElements().size());
141 for (DescriptionElementBase targetElement
: targetDescription
.getElements()){
142 Assert
.assertFalse("Target elements may not be in sourced description as they are only clones (but not same).", sourceDescription
.getElements().contains(targetElement
));
144 this.service
.save(targetDescription
);
145 this.service
.save(sourceDescription
);