Project

General

Profile

Download (13.4 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2007 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
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.
9
*/
10

    
11
package eu.etaxonomy.cdm.persistence.dao.hibernate.name;
12

    
13
import static org.junit.Assert.assertNotNull;
14
import static org.junit.Assert.assertEquals;
15
import static org.junit.Assert.assertTrue;
16

    
17
import java.io.FileNotFoundException;
18
import java.util.List;
19
import java.util.Set;
20
import java.util.UUID;
21

    
22
import org.apache.log4j.Logger;
23
import org.junit.Assert;
24
import org.junit.Test;
25
import org.unitils.dbunit.annotation.DataSet;
26
import org.unitils.dbunit.annotation.ExpectedDataSet;
27
import org.unitils.spring.annotation.SpringBeanByType;
28

    
29
import eu.etaxonomy.cdm.model.common.CdmBase;
30
import eu.etaxonomy.cdm.model.name.BotanicalName;
31
import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
32
import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
33
import eu.etaxonomy.cdm.model.name.Rank;
34
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
35
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
36
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
37
import eu.etaxonomy.cdm.model.name.TypeDesignationBase;
38
import eu.etaxonomy.cdm.model.name.TypeDesignationStatusBase;
39
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
40
import eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao;
41
import eu.etaxonomy.cdm.persistence.dao.name.ITypeDesignationDao;
42
import eu.etaxonomy.cdm.persistence.dao.occurrence.IOccurrenceDao;
43
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
44

    
45
/**
46
 * @author a.babadshanjan
47
 * @author a.mueller
48
 * @created 25.05.2009
49
 * @version 1.1
50
 */
51
public class TypeDesignationDaoHibernateImplTest extends CdmTransactionalIntegrationTest {
52
	@SuppressWarnings("unused")
53
	private static final Logger logger = Logger.getLogger(TypeDesignationDaoHibernateImplTest.class);
54

    
55
	@SpringBeanByType
56
	ITypeDesignationDao typeDesignationDao;
57

    
58
	@SpringBeanByType
59
	ITaxonNameDao nameDao;
60

    
61
	@SpringBeanByType
62
	IOccurrenceDao occurrenceDao;
63

    
64

    
65
	/**
66
	 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.name.TypeDesignationHibernateImpl#TypeDesignationHibernateImpl()}.
67
	 */
68
	@Test
69
	public void testInit() {
70
		assertNotNull("Instance of ITypeDesignationDao expected", typeDesignationDao);
71
	}
72
	/**
73
	 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.name.TypeDesignationHibernateImpl#getAllTypeDesignations(java.lang.Integer, java.lang.Integer)}.
74
	 */
75
	@Test
76
	@DataSet
77
	public void testGetAllTypeDesignations() {
78
		List<TypeDesignationBase> typeDesignations = typeDesignationDao.getAllTypeDesignations(100, 0);
79
		assertEquals(2, typeDesignations.size());
80
		SpecimenTypeDesignation specTypeDesig = null;
81
		for (TypeDesignationBase typeDesignation : typeDesignations) {
82
			if (typeDesignation.isInstanceOf(NameTypeDesignation.class)) {
83
				assertTrue(typeDesignation.getTypeStatus().isInstanceOf(NameTypeDesignationStatus.class));
84
			} else if (typeDesignation.isInstanceOf(SpecimenTypeDesignation.class)) {
85
				Assert.assertNull("There should be only 1 specimen type designation but this is already the second", specTypeDesig);
86
				TypeDesignationStatusBase typeDesignationStatus = typeDesignation.getTypeStatus();
87
				assertTrue(typeDesignationStatus.isInstanceOf(SpecimenTypeDesignationStatus.class));
88
				specTypeDesig = CdmBase.deproxy(typeDesignation,SpecimenTypeDesignation.class);
89
			}
90
		}
91
		Set<TaxonNameBase> names = specTypeDesig.getTypifiedNames();
92
		Assert.assertEquals("There should be exactly 1 typified name for the the specimen type designation", 1, names.size());
93
		TaxonNameBase<?,?> singleName = names.iterator().next();
94
		Assert.assertEquals("", UUID.fromString("61b1dcae-8aa6-478a-bcd6-080cf0eb6ad7"), singleName.getUuid());
95
	}
96

    
97
	/**
98
	 * Test method for {@link eu.etaxonomy.cdm.persistence.dao.hibernate.name.TypeDesignationHibernateImpl#saveOrUpdate(CdmBase)}.
99
	 */
100
	@Test
101
	@DataSet
102
	@ExpectedDataSet  //not yet necessary with current test
103
	public void testSaveTypeDesignations() {
104
		List<TypeDesignationBase> typeDesignations = typeDesignationDao.getAllTypeDesignations(100, 0);
105
		assertEquals(typeDesignations.size(), 2);
106
		SpecimenTypeDesignation specTypeDesig = null;
107
		for (TypeDesignationBase typeDesignation : typeDesignations) {
108
			if (typeDesignation.isInstanceOf(SpecimenTypeDesignation.class)) {
109
				specTypeDesig = CdmBase.deproxy(typeDesignation,SpecimenTypeDesignation.class);
110
			}
111
		}
112

    
113
		TaxonNameBase<?,?> newName = BotanicalName.NewInstance(Rank.SPECIES());
114
		newName.setUuid(UUID.fromString("c16c3bc5-d3d0-4676-91a1-848ebf011e7c"));
115
		newName.setTitleCache("Name used as typified name", true);
116
		newName.addTypeDesignation(specTypeDesig, false);
117

    
118
		nameDao.saveOrUpdate(newName);
119
//		typeDesignationDao.saveOrUpdate(specTypeDesig);
120

    
121
		commitAndStartNewTransaction(null);
122
		specTypeDesig = (SpecimenTypeDesignation)typeDesignationDao.load(specTypeDesig.getUuid());
123
		Assert.assertNotNull("specimen type designation should exists in db", specTypeDesig);
124
		specTypeDesig.getTypifiedNames().size();
125
		Set<TaxonNameBase> typifiedNames = specTypeDesig.getTypifiedNames();
126
		Assert.assertEquals("There should be 2 typified names for this type designation now", 2, typifiedNames.size());
127

    
128
//		printDataSet(System.out, new String[]{"TaxonNameBase","TaxonNameBase_AUD",
129
//				"HomotypicalGroup","HomotypicalGroup_AUD",
130
//				"TypeDesignationBase","TypeDesignationBase_AUD",
131
//				"TaxonNameBase_TypeDesignationBase", "TaxonNameBase_TypeDesignationBase_AUD"
132
//				});
133

    
134
	}
135

    
136
	@Test
137
	@ExpectedDataSet
138
	public void testSaveTypeDesignationsBidirectionalCascade() {
139
		SpecimenTypeDesignation desig1 = SpecimenTypeDesignation.NewInstance();
140
		desig1.setUuid(UUID.fromString("a1b8af89-b724-469b-b0ce-027c2199aadd"));
141

    
142
		TaxonNameBase<?,?> name = BotanicalName.NewInstance(Rank.SPECIES());
143
		name.setUuid(UUID.fromString("503d78dc-5d4c-4eb6-b682-0ab90fdee02c"));
144
		name.setTitleCache("Name saved via cascade", true);
145
		name.addTypeDesignation(desig1, false);
146

    
147
		typeDesignationDao.saveOrUpdate(desig1);
148
		commit();
149
	}
150

    
151
	@Test
152
	@ExpectedDataSet
153
	//Auditing didn't work for SpecimenTypeDesignations. See #2396
154
	public void testSaveTypeDesignationsWithAuditing() {
155

    
156

    
157
		// creating new Typedesignation for a new Name:
158

    
159
		//  1. new TaxonName with UUID 8564287e-9654-4b8b-a38c-0ccdd9e885db
160
		BotanicalName name1 = BotanicalName.NewInstance(Rank.SPECIES());
161
		name1.setTitleCache("Name1", true);
162
		name1.setUuid(UUID.fromString("8564287e-9654-4b8b-a38c-0ccdd9e885db"));
163
		//   2. new TypeDesignation with uuid ceca086e-e8d3-444e-abfb-c47f76835130
164
		SpecimenTypeDesignation desig1 = SpecimenTypeDesignation.NewInstance();
165
		desig1.setUuid(UUID.fromString("ceca086e-e8d3-444e-abfb-c47f76835130"));
166
		
167
//		//REMOVE
168
//		desig1.setOriginalNameString("orig");
169
//		
170
		name1.addTypeDesignation(desig1, true);
171

    
172
		nameDao.saveOrUpdate(name1);
173
		commitAndStartNewTransaction(new String[]{"TypeDesignationBase", "TypeDesignationBase_AUD"});
174
//		System.out.println(desig1.getId());
175
//		System.out.println(desig1.getUuid());
176
		
177
//		printDataSet(System.err, new String[]{"TaxonNameBase","TaxonNameBase_AUD",
178
//				"HomotypicalGroup","HomotypicalGroup_AUD",
179
//				"TypeDesignationBase","TypeDesignationBase_AUD",
180
//				"TaxonNameBase_TypeDesignationBase","TaxonNameBase_TypeDesignationBase_AUD"
181
//				});
182

    
183
	}
184

    
185
	@Test
186
	@ExpectedDataSet
187
	public void testSaveTypeDesignationsCascadeToSpecimen() {
188
		BotanicalName name1 = BotanicalName.NewInstance(Rank.SPECIES());
189
		name1.setTitleCache("Name1", true);
190
		name1.setUuid(UUID.fromString("eb41f549-4a70-499b-a9a5-f2314880df07"));
191

    
192
		SpecimenTypeDesignation desig1 = SpecimenTypeDesignation.NewInstance();
193
		desig1.setUuid(UUID.fromString("6df85e4c-49fe-4eb5-acde-cf6c0c9fc3c5"));
194
		name1.addTypeDesignation(desig1, true);
195

    
196
		DerivedUnit specimen = DerivedUnit.NewPreservedSpecimenInstance();
197
		specimen.setUuid(UUID.fromString("f1a7c3b9-169c-4845-9b21-e77f863a8bce"));
198
		specimen.setTitleCache("Specimen to cascade", true);
199
		desig1.setTypeSpecimen(specimen);
200

    
201
		nameDao.saveOrUpdate(name1);
202

    
203
		this.setComplete();
204
		this.endTransaction();
205

    
206
//		printDataSet(System.out, new String[]{"TaxonNameBase","TaxonNameBase_AUD","TypeDesignationBase","TypeDesignationBase_AUD",
207
//				"TaxonNameBase_TypeDesignationBase","TaxonNameBase_TypeDesignationBase_AUD",
208
//				"TaxonNameBase_TypeDesignationBase","SpecimenOrObservationBase","SpecimenOrObservationBase_AUD",
209
//				"HomotypicalGroup","HomotypicalGroup_AUD"});
210

    
211
	}
212

    
213
	@Test
214
	@ExpectedDataSet
215
	//test save from specimen to name via type designation
216
	public void testSaveTypeDesignationsCascadeFromSpecimen() {
217
		BotanicalName name1 = BotanicalName.NewInstance(Rank.SPECIES());
218
		name1.setTitleCache("Name1", true);
219
		name1.setUuid(UUID.fromString("7ce3a355-8f7c-4417-a0b3-41869de4f60b"));
220

    
221
		SpecimenTypeDesignation desig1 = SpecimenTypeDesignation.NewInstance();
222
		desig1.setUuid(UUID.fromString("c0e03472-b9f9-4886-b3bd-c1c70dd21a5f"));
223
		name1.addTypeDesignation(desig1, true);
224

    
225
		DerivedUnit specimen = DerivedUnit.NewPreservedSpecimenInstance();
226
		specimen.setUuid(UUID.fromString("4c3231a9-336e-4b21-acf2-129683627de4"));
227
		specimen.setTitleCache("Specimen to cascade", true);
228
		desig1.setTypeSpecimen(specimen);
229

    
230
		occurrenceDao.saveOrUpdate(specimen);
231
		commit();
232

    
233
	}
234

    
235
	@Test
236
//	@ExpectedDataSet
237
	public void testRemoveTypeDesignationsFromName() {
238
		BotanicalName name1 = BotanicalName.NewInstance(Rank.SPECIES());
239
		name1.setTitleCache("Name1");
240
		name1.setUuid(UUID.fromString("2cfc05fc-138e-452d-b4ea-8798134c7410"));
241

    
242
		BotanicalName name2 = BotanicalName.NewInstance(Rank.SPECIES());
243
		name2.setTitleCache("Name2");
244
		name2.setUuid(UUID.fromString("7a12057d-2e99-471e-ac7e-633f1d0b5686"));
245

    
246
		SpecimenTypeDesignation desig1 = SpecimenTypeDesignation.NewInstance();
247
		desig1.setUuid(UUID.fromString("fe9f7711-de4a-4789-8045-86b2cb5c4358"));
248
		name1.addTypeDesignation(desig1, true);
249
		name2.addTypeDesignation(desig1, true);
250

    
251
		SpecimenTypeDesignation desig2 = SpecimenTypeDesignation.NewInstance();
252
		desig2.setUuid(UUID.fromString("bf357711-e752-44e9-bd3d-aef0a0bb5b91"));
253
		name1.addTypeDesignation(desig2, true);
254

    
255
		typeDesignationDao.saveOrUpdate(desig1);
256
		typeDesignationDao.saveOrUpdate(desig2);
257

    
258
		this.setComplete();
259
		this.endTransaction();
260
		this.startNewTransaction();
261

    
262
		name1 = (BotanicalName)nameDao.load(name1.getUuid());
263
		Assert.assertNotNull(name1);
264
		Assert.assertEquals("Name1 should have 2 type designations", 2, name1.getTypeDesignations().size());
265

    
266
		desig1 = (SpecimenTypeDesignation)typeDesignationDao.load(desig1.getUuid());
267
		name1.removeTypeDesignation(desig1);
268
		typeDesignationDao.saveOrUpdate(desig1);
269

    
270
		this.setComplete();
271
		this.endTransaction();
272
		this.startNewTransaction();
273

    
274
		name1 = (BotanicalName)nameDao.load(name1.getUuid());
275
		Assert.assertNotNull(name1);
276
		Assert.assertEquals("Name1 should have 1 type designation", 1, name1.getTypeDesignations().size());
277

    
278
		desig2 = (SpecimenTypeDesignation)typeDesignationDao.load(desig2.getUuid());
279
		Assert.assertNotNull(desig2);
280
		name1.removeTypeDesignation(desig2);
281
		typeDesignationDao.saveOrUpdate(desig2);
282

    
283
		this.setComplete();
284
		this.endTransaction();
285
		this.startNewTransaction();
286

    
287
		name1 = (BotanicalName)nameDao.load(name1.getUuid());
288
		Assert.assertNotNull(name1);
289
		Assert.assertEquals("Name1 should have no type designations", 0, name1.getTypeDesignations().size());
290

    
291
		name2 = (BotanicalName)nameDao.load(name2.getUuid());
292
		Assert.assertNotNull(name1);
293
		Assert.assertEquals("Name2 should have 1 type designation", 1, name2.getTypeDesignations().size());
294
		SpecimenTypeDesignation desig1New = (SpecimenTypeDesignation)name2.getTypeDesignations().iterator().next();
295
		desig1 = (SpecimenTypeDesignation)typeDesignationDao.load(desig1.getUuid());
296
		Assert.assertSame("Desig1New should be same as desig1", desig1, desig1New);
297

    
298
		try{
299
			typeDesignationDao.delete(desig1);
300
			this.setComplete();
301
			this.endTransaction();
302
			Assert.fail("desig1 should not be deletable as it is still connected to name2");
303
		}catch (Exception e){
304
			//OK
305
			this.startNewTransaction();
306
		}
307
		name2 = (BotanicalName)nameDao.load(name2.getUuid());
308
		Assert.assertNotNull(name1);
309
		desig1 = (SpecimenTypeDesignation)typeDesignationDao.load(desig1.getUuid());
310
		name2.removeTypeDesignation(desig1);
311

    
312
		typeDesignationDao.delete(desig1);  //now it can be deleted
313

    
314
		this.setComplete();
315
		this.endTransaction();
316
		this.startNewTransaction();
317

    
318
		desig2 = (SpecimenTypeDesignation)typeDesignationDao.load(desig2.getUuid());
319
		typeDesignationDao.delete(desig2); //desig2 is already orphaned and therefore can be deleted
320

    
321
		this.setComplete();
322
		this.endTransaction();
323

    
324

    
325
//		printDataSet(System.out, new String[]{"TaxonNameBase","TaxonNameBase_AUD","TypeDesignationBase","TypeDesignationBase_AUD",
326
//				"TaxonNameBase_TypeDesignationBase","TaxonNameBase_TypeDesignationBase_AUD",
327
//				"SpecimenOrObservationBase","SpecimenOrObservationBase_AUD",
328
//				"HomotypicalGroup","HomotypicalGroup_AUD"});
329
	}
330
    /* (non-Javadoc)
331
     * @see eu.etaxonomy.cdm.test.integration.CdmIntegrationTest#createTestData()
332
     */
333
    @Override
334
    public void createTestDataSet() throws FileNotFoundException {
335
        // TODO Auto-generated method stub
336
        
337
    }
338

    
339
}
(5-5/5)