Merge branch 'release/5.0.0'
[cdmlib.git] / cdmlib-services / src / test / java / eu / etaxonomy / cdm / api / service / DescriptionServiceImplTest.java
1 /**
2 * Copyright (C) 2009 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9
10 package eu.etaxonomy.cdm.api.service;
11
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertNull;
14
15 import java.io.FileNotFoundException;
16 import java.util.Collection;
17 import java.util.HashSet;
18 import java.util.Iterator;
19 import java.util.Map.Entry;
20 import java.util.Set;
21 import java.util.UUID;
22
23 import org.apache.log4j.Logger;
24 import org.junit.Assert;
25 import org.junit.Ignore;
26 import org.junit.Test;
27 import org.unitils.dbunit.annotation.DataSet;
28 import org.unitils.spring.annotation.SpringBeanByType;
29
30 import eu.etaxonomy.cdm.api.service.pager.Pager;
31 import eu.etaxonomy.cdm.model.common.Language;
32 import eu.etaxonomy.cdm.model.common.LanguageString;
33 import eu.etaxonomy.cdm.model.description.DescriptionBase;
34 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
35 import eu.etaxonomy.cdm.model.description.Feature;
36 import eu.etaxonomy.cdm.model.description.TaxonDescription;
37 import eu.etaxonomy.cdm.model.description.TextData;
38 import eu.etaxonomy.cdm.model.taxon.Taxon;
39 import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
40
41 /**
42 * @author a.babadshanjan
43 * @since 09.02.2009
44 * @version 1.0
45 */
46
47 public class DescriptionServiceImplTest extends CdmTransactionalIntegrationTest {
48 @SuppressWarnings("unused")
49 private static Logger logger = Logger.getLogger(DescriptionServiceImplTest.class);
50
51 @SpringBeanByType
52 private IDescriptionService service;
53
54 @SpringBeanByType
55 private ITermService termService;
56
57
58
59 @Test
60 public void testGetDefaultFeatureVocabulary() {
61 service.getDefaultFeatureVocabulary();
62 }
63
64 @Test
65 @DataSet("CommonServiceImplTest.xml")
66 public void testChangeDescriptionElement(){
67 DescriptionBase<?> descBase = service.find(UUID.fromString("eb17b80a-9be6-4642-a6a8-b19a318925e6"));
68 Set<DescriptionElementBase> elements = descBase.getElements();
69 Iterator<?> iterator = elements.iterator();
70 while (iterator.hasNext()){
71 DescriptionElementBase base = (DescriptionElementBase) iterator.next();
72 if (base instanceof TextData){
73 TextData textdata = (TextData) base;
74 Set <Entry<Language,LanguageString>> entries = textdata.getMultilanguageText().entrySet();
75 Iterator<?> entryIterator = entries.iterator();
76 while (entryIterator.hasNext()){
77 Entry <Language, LanguageString> entry = (Entry<Language, LanguageString>) entryIterator.next();
78 LanguageString langString = entry.getValue();
79 // System.out.println(langString);
80 langString.setText("blablubber");
81 }
82 }
83
84 }
85 service.saveOrUpdate(descBase);
86 Pager<DescriptionElementBase> allElements = service.getDescriptionElements(null, null, null, null, null, null);
87 Assert.assertEquals(1, allElements.getCount().intValue());
88 DescriptionElementBase test = allElements.getRecords().get(0);
89 if (test instanceof TextData){
90
91 Set <Entry<Language,LanguageString>> entries = ((TextData) test).getMultilanguageText().entrySet();
92 Iterator<Entry<Language,LanguageString>> entryIterator = entries.iterator();
93 while (entryIterator.hasNext()){
94 Entry <Language, LanguageString> entry = entryIterator.next();
95 LanguageString langString = entry.getValue();
96 // System.out.println(langString);
97 }
98 }
99 }
100
101
102 @Test
103 public void testMoveDescriptionElement(){
104 //Create data
105 Taxon taxon = Taxon.NewInstance(null, null);
106 TaxonDescription desc1 = TaxonDescription.NewInstance(taxon);
107 TextData textData1 = TextData.NewInstance(Feature.HABITAT(), "My habitat", Language.GERMAN(), null);
108 desc1.addElement(textData1);
109 service.saveOrUpdate(desc1);
110
111 TaxonDescription desc2 = TaxonDescription.NewInstance(taxon);
112 TextData textData2 = TextData.NewInstance(Feature.HABITAT(), "My habitat2", Language.GERMAN(), null);
113 desc2.addElement(textData2);
114 service.saveOrUpdate(desc2);
115 commitAndStartNewTransaction(null);
116
117
118 DescriptionBase<?> descLoaded1 = service.find(desc1.getUuid());
119 DescriptionBase<?> descLoaded2 = service.find(desc2.getUuid());
120
121 DescriptionElementBase textDataLoaded = descLoaded1.getElements().iterator().next();
122 Set<DescriptionElementBase> tmpSet = new HashSet<DescriptionElementBase>(descLoaded1.getElements());
123
124 //test for #4806
125 service.moveDescriptionElementsToDescription(tmpSet, descLoaded2, false);
126 try {
127 commitAndStartNewTransaction(null);
128 } catch (Exception e) {
129 Assert.fail("Moving description element should not throw an exception. Exception is " + e.getMessage());
130 }
131
132
133 }
134
135 @Test
136 @Ignore
137 public void testMoveDescriptionElementsToTaxon(){
138 //Create data
139 UUID commonNameFeatureUuid = Feature.COMMON_NAME().getUuid();
140 Feature commonNameFeatureData = (Feature)termService.find(commonNameFeatureUuid);
141
142 TaxonDescription sourceDescriptionData = TaxonDescription.NewInstance();
143 TextData elementData = TextData.NewInstance();
144 elementData.setFeature(commonNameFeatureData);
145 sourceDescriptionData.addElement(elementData);
146
147 TextData element2 = TextData.NewInstance();
148 element2.setFeature(commonNameFeatureData);
149 sourceDescriptionData.addElement(element2);
150
151 TextData element3Data = TextData.NewInstance();
152 element3Data.setFeature(commonNameFeatureData);
153 sourceDescriptionData.addElement(element3Data);
154 Assert.assertEquals(3, sourceDescriptionData.getElements().size());
155 TaxonDescription targetDescriptionData = TaxonDescription.NewInstance();
156 this.service.save(sourceDescriptionData);
157 this.service.save(targetDescriptionData);
158
159 commitAndStartNewTransaction(null);
160
161 TaxonDescription sourceDescription = (TaxonDescription)this.service.find(sourceDescriptionData.getId());
162 Assert.assertEquals(3, sourceDescription.getElements().size());
163
164 TaxonDescription targetDescription = (TaxonDescription)this.service.find(targetDescriptionData.getId());
165
166
167 Collection<DescriptionElementBase> sourceCollection = new HashSet<DescriptionElementBase>();
168 sourceCollection.addAll(sourceDescription.getElements());
169 sourceCollection.remove(element3Data); //should work as it works on equal
170 Assert.assertEquals(2, sourceCollection.size());
171
172 service.moveDescriptionElementsToDescription(sourceCollection, targetDescription, false);
173
174 Assert.assertEquals("Source description should have 1 element left", 1, sourceDescription.getElements().size());
175 Assert.assertEquals("Target description should have 2 new elements", 2, targetDescription.getElements().size());
176 //the following tests are not valid anymore as elements are cloned now even if isCopy is false
177 // Assert.assertTrue("The moved element should be in the new description", targetDescription.getElements().contains(element));
178 // Assert.assertTrue("The moved element2 should be in the new description", targetDescription.getElements().contains(element2));
179 // Assert.assertFalse("Element3 should not be in the new description", targetDescription.getElements().contains(element3));
180
181 Assert.assertTrue("Element3 should remain in the old description", sourceDescription.getElements().contains(element3Data));
182 sourceDescription = (TaxonDescription) this.service.find(sourceDescription.getUuid());
183 targetDescription = (TaxonDescription) this.service.find(targetDescription.getUuid());
184 assertNotNull(sourceDescription);
185 assertNotNull(targetDescription);
186 try {
187 service.moveDescriptionElementsToDescription(targetDescription.getElements(), sourceDescription, false);
188 } catch (Exception e) {
189 //asserting that no ConcurrentModificationException is thrown when the elements collection is passed as a parameter
190 e.printStackTrace();
191 Assert.fail();
192 }
193
194 Assert.assertEquals("Source description should have 3 elements again", 3, sourceDescription.getElements().size());
195 Assert.assertEquals("Destination description should have no elements again", 0, targetDescription.getElements().size());
196 sourceDescription = (TaxonDescription) this.service.find(sourceDescription.getUuid());
197 targetDescription = (TaxonDescription) this.service.find(targetDescription.getUuid());
198 assertNotNull(sourceDescription);
199 assertNull(targetDescription);
200
201
202
203
204 }
205
206 @Test
207 public void testMoveDescriptionElementsToTaxonAndResaveDeletedDescription(){
208
209 //Create data
210 UUID commonNameFeatureUuid = Feature.COMMON_NAME().getUuid();
211 Feature commonNameFeatureData = (Feature)termService.find(commonNameFeatureUuid);
212
213 TaxonDescription sourceDescriptionData = TaxonDescription.NewInstance();
214 TextData elementData = TextData.NewInstance();
215 elementData.setFeature(commonNameFeatureData);
216 sourceDescriptionData.addElement(elementData);
217
218 TextData element2 = TextData.NewInstance();
219 element2.setFeature(commonNameFeatureData);
220 sourceDescriptionData.addElement(element2);
221
222 TextData element3Data = TextData.NewInstance();
223 element3Data.setFeature(commonNameFeatureData);
224 sourceDescriptionData.addElement(element3Data);
225 Assert.assertEquals(3, sourceDescriptionData.getElements().size());
226 TaxonDescription targetDescriptionData = TaxonDescription.NewInstance();
227 this.service.save(sourceDescriptionData);
228 this.service.save(targetDescriptionData);
229
230 commitAndStartNewTransaction(null);
231
232 TaxonDescription sourceDescription = (TaxonDescription)this.service.find(sourceDescriptionData.getId());
233 Assert.assertEquals(3, sourceDescription.getElements().size());
234
235 TaxonDescription targetDescription = (TaxonDescription)this.service.find(targetDescriptionData.getId());
236 service.moveDescriptionElementsToDescription(sourceDescription.getElements(), targetDescription, false);
237 TaxonDescription removedDescription = (TaxonDescription) this.service.find(sourceDescription.getUuid());
238 assertNull(removedDescription);
239 this.service.save(targetDescription);
240
241 removedDescription = (TaxonDescription) this.service.find(targetDescription.getUuid());
242 assertNotNull(removedDescription);
243 }
244
245 @Override
246 public void createTestDataSet() throws FileNotFoundException {};
247 }