Project

General

Profile

Download (13.1 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 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.persistence.dao.hibernate.name;
11

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

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

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

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

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

    
53
	@SpringBeanByType
54
	ITypeDesignationDao typeDesignationDao;
55

    
56
	@SpringBeanByType
57
	ITaxonNameDao nameDao;
58

    
59
	@SpringBeanByType
60
	IOccurrenceDao occurrenceDao;
61

    
62

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

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

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

    
116
		nameDao.saveOrUpdate(newName);
117
//		typeDesignationDao.saveOrUpdate(specTypeDesig);
118

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

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

    
132
	}
133

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

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

    
145
		typeDesignationDao.saveOrUpdate(desig1);
146
		commit();
147
	}
148

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

    
154

    
155
		// creating new Typedesignation for a new Name:
156

    
157
		//  1. new TaxonName with UUID 8564287e-9654-4b8b-a38c-0ccdd9e885db
158
		BotanicalName name1 = TaxonNameBase.NewBotanicalInstance(Rank.SPECIES());
159
		name1.setTitleCache("Name1", true);
160
		name1.setUuid(UUID.fromString("8564287e-9654-4b8b-a38c-0ccdd9e885db"));
161
		//   2. new TypeDesignation with uuid ceca086e-e8d3-444e-abfb-c47f76835130
162
		SpecimenTypeDesignation desig1 = SpecimenTypeDesignation.NewInstance();
163
		desig1.setUuid(UUID.fromString("ceca086e-e8d3-444e-abfb-c47f76835130"));
164

    
165
//		//REMOVE
166
//		desig1.setOriginalNameString("orig");
167
//
168
		name1.addTypeDesignation(desig1, true);
169

    
170
		nameDao.saveOrUpdate(name1);
171
		commitAndStartNewTransaction(new String[]{"TypeDesignationBase", "TypeDesignationBase_AUD"});
172
//		System.out.println(desig1.getId());
173
//		System.out.println(desig1.getUuid());
174

    
175
//		printDataSet(System.err, new String[]{"TaxonNameBase","TaxonNameBase_AUD",
176
//				"HomotypicalGroup","HomotypicalGroup_AUD",
177
//				"TypeDesignationBase","TypeDesignationBase_AUD",
178
//				"TaxonNameBase_TypeDesignationBase","TaxonNameBase_TypeDesignationBase_AUD"
179
//				});
180

    
181
	}
182

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

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

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

    
199
		nameDao.saveOrUpdate(name1);
200

    
201
		this.setComplete();
202
		this.endTransaction();
203

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

    
209
	}
210

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

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

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

    
228
		occurrenceDao.saveOrUpdate(specimen);
229
		commit();
230

    
231
	}
232

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

    
240
		BotanicalName name2 = TaxonNameBase.NewBotanicalInstance(Rank.SPECIES());
241
		name2.setTitleCache("Name2");
242
		name2.setUuid(UUID.fromString("7a12057d-2e99-471e-ac7e-633f1d0b5686"));
243

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

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

    
253
		typeDesignationDao.saveOrUpdate(desig1);
254
		typeDesignationDao.saveOrUpdate(desig2);
255

    
256
		this.setComplete();
257
		this.endTransaction();
258
		this.startNewTransaction();
259

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

    
264
		desig1 = (SpecimenTypeDesignation)typeDesignationDao.load(desig1.getUuid());
265
		name1.removeTypeDesignation(desig1);
266
		typeDesignationDao.saveOrUpdate(desig1);
267

    
268
		this.setComplete();
269
		this.endTransaction();
270
		this.startNewTransaction();
271

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

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

    
281
		this.setComplete();
282
		this.endTransaction();
283
		this.startNewTransaction();
284

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

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

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

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

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

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

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

    
323

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

    
336
    }
337

    
338
}
(5-5/5)