Project

General

Profile

Download (12.9 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
package eu.etaxonomy.cdm.persistence.dao.hibernate.name;
10

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

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

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

    
27
import eu.etaxonomy.cdm.model.common.CdmBase;
28
import eu.etaxonomy.cdm.model.name.IBotanicalName;
29
import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
30
import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
31
import eu.etaxonomy.cdm.model.name.Rank;
32
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
33
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
34
import eu.etaxonomy.cdm.model.name.TaxonName;
35
import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
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
 * @since 25.05.2009
48
 */
49
public class TypeDesignationDaoHibernateImplTest extends CdmTransactionalIntegrationTest {
50

    
51
    @SuppressWarnings("unused")
52
	private static final Logger logger = LogManager.getLogger(TypeDesignationDaoHibernateImplTest.class);
53

    
54
	@SpringBeanByType
55
	private ITypeDesignationDao typeDesignationDao;
56

    
57
	@SpringBeanByType
58
	private ITaxonNameDao nameDao;
59

    
60
	@SpringBeanByType
61
	private IOccurrenceDao occurrenceDao;
62

    
63
	@Test
64
	public void testInit() {
65
		assertNotNull("Instance of ITypeDesignationDao expected", typeDesignationDao);
66
	}
67

    
68
	@Test
69
	@DataSet
70
	public void testGetAllTypeDesignations() {
71
		List<TypeDesignationBase<?>> typeDesignations = typeDesignationDao.getAllTypeDesignations(100, 0);
72
		assertEquals(2, typeDesignations.size());
73
		SpecimenTypeDesignation specTypeDesig = null;
74
		for (TypeDesignationBase<?> typeDesignation : typeDesignations) {
75
		    typeDesignation= CdmBase.deproxy(typeDesignation);
76
			if (typeDesignation instanceof NameTypeDesignation) {
77
			    NameTypeDesignation ntd = (NameTypeDesignation)typeDesignation;
78
			    NameTypeDesignationStatus status = ntd.getTypeStatus();
79
			    assertTrue(status.isInstanceOf(NameTypeDesignationStatus.class));
80
			} else if (typeDesignation instanceof SpecimenTypeDesignation) {
81
				Assert.assertNull("There should be only 1 specimen type designation but this is already the second", specTypeDesig);
82
				TypeDesignationStatusBase<?> typeDesignationStatus = ((SpecimenTypeDesignation)typeDesignation).getTypeStatus();
83
				assertTrue(typeDesignationStatus.isInstanceOf(SpecimenTypeDesignationStatus.class));
84
				specTypeDesig = CdmBase.deproxy(typeDesignation,SpecimenTypeDesignation.class);
85
			}
86
		}
87
		@SuppressWarnings("null")
88
        Set<TaxonName> names = specTypeDesig.getTypifiedNames();
89
		Assert.assertEquals("There should be exactly 1 typified name for the the specimen type designation", 1, names.size());
90
		TaxonName singleName = names.iterator().next();
91
		Assert.assertEquals("", UUID.fromString("61b1dcae-8aa6-478a-bcd6-080cf0eb6ad7"), singleName.getUuid());
92
	}
93

    
94
	@Test
95
	@DataSet
96
	@ExpectedDataSet  //not yet necessary with current test
97
	public void testSaveTypeDesignations() {
98
		List<TypeDesignationBase<?>> typeDesignations = typeDesignationDao.getAllTypeDesignations(100, 0);
99
		assertEquals(typeDesignations.size(), 2);
100
		SpecimenTypeDesignation specTypeDesig = null;
101
		for (TypeDesignationBase<?> typeDesignation : typeDesignations) {
102
			if (typeDesignation.isInstanceOf(SpecimenTypeDesignation.class)) {
103
				specTypeDesig = CdmBase.deproxy(typeDesignation,SpecimenTypeDesignation.class);
104
			}
105
		}
106

    
107
		TaxonName newName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
108
		newName.setUuid(UUID.fromString("c16c3bc5-d3d0-4676-91a1-848ebf011e7c"));
109
		newName.setTitleCache("Name used as typified name", true);
110
		newName.addTypeDesignation(specTypeDesig, false);
111

    
112
		nameDao.saveOrUpdate(newName);
113
//		typeDesignationDao.saveOrUpdate(specTypeDesig);
114

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

    
122
//		printDataSet(System.out, new String[]{"TaxonName","TaxonName_AUD",
123
//				"HomotypicalGroup","HomotypicalGroup_AUD",
124
//				"TypeDesignationBase","TypeDesignationBase_AUD",
125
//				"TaxonName_TypeDesignationBase", "TaxonName_TypeDesignationBase_AUD"
126
//				});
127

    
128
	}
129

    
130
	@Test
131
	@ExpectedDataSet
132
	public void testSaveTypeDesignationsBidirectionalCascade() {
133
		SpecimenTypeDesignation desig1 = SpecimenTypeDesignation.NewInstance();
134
		desig1.setUuid(UUID.fromString("a1b8af89-b724-469b-b0ce-027c2199aadd"));
135

    
136
		TaxonName name = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
137
		name.setUuid(UUID.fromString("503d78dc-5d4c-4eb6-b682-0ab90fdee02c"));
138
		name.setTitleCache("Name saved via cascade", true);
139
		name.addTypeDesignation(desig1, false);
140

    
141
		typeDesignationDao.saveOrUpdate(desig1);
142
		commit();
143
	}
144

    
145
	@Test
146
	@ExpectedDataSet
147
	//Auditing didn't work for SpecimenTypeDesignations. See #2396
148
	public void testSaveTypeDesignationsWithAuditing() {
149

    
150

    
151
		// creating new Typedesignation for a new Name:
152

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

    
161
//		//REMOVE
162
//		desig1.setOriginalNameString("orig");
163
//
164
		name1.addTypeDesignation(desig1, true);
165

    
166
		nameDao.saveOrUpdate(name1);
167
		commitAndStartNewTransaction(new String[]{"TypeDesignationBase", "TypeDesignationBase_AUD"});
168
//		System.out.println(desig1.getId());
169
//		System.out.println(desig1.getUuid());
170

    
171
//		printDataSet(System.err, new String[]{"TaxonName","TaxonName_AUD",
172
//				"HomotypicalGroup","HomotypicalGroup_AUD",
173
//				"TypeDesignationBase","TypeDesignationBase_AUD",
174
//				"TaxonName_TypeDesignationBase","TaxonName_TypeDesignationBase_AUD"
175
//				});
176
	}
177

    
178
	@Test
179
	@ExpectedDataSet
180
	public void testSaveTypeDesignationsCascadeToSpecimen() {
181
	    TaxonName name1 = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
182
		name1.setTitleCache("Name1", true);
183
		name1.setUuid(UUID.fromString("eb41f549-4a70-499b-a9a5-f2314880df07"));
184

    
185
		SpecimenTypeDesignation desig1 = SpecimenTypeDesignation.NewInstance();
186
		desig1.setUuid(UUID.fromString("6df85e4c-49fe-4eb5-acde-cf6c0c9fc3c5"));
187
		name1.addTypeDesignation(desig1, true);
188

    
189
		DerivedUnit specimen = DerivedUnit.NewPreservedSpecimenInstance();
190
		specimen.setUuid(UUID.fromString("f1a7c3b9-169c-4845-9b21-e77f863a8bce"));
191
		specimen.setTitleCache("Specimen to cascade", true);
192
		desig1.setTypeSpecimen(specimen);
193

    
194
		nameDao.saveOrUpdate(name1);
195

    
196
		this.setComplete();
197
		this.endTransaction();
198

    
199
//		printDataSet(System.out, new String[]{"TaxonName","TaxonName_AUD","TypeDesignationBase","TypeDesignationBase_AUD",
200
//				"TaxonName_TypeDesignationBase","TaxonName_TypeDesignationBase_AUD",
201
//				"TaxonName_TypeDesignationBase","SpecimenOrObservationBase","SpecimenOrObservationBase_AUD",
202
//				"HomotypicalGroup","HomotypicalGroup_AUD"});
203
	}
204

    
205
	@Test
206
	@ExpectedDataSet
207
	//test save from specimen to name via type designation
208
	public void testSaveTypeDesignationsCascadeFromSpecimen() {
209
		IBotanicalName name1 = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
210
		name1.setTitleCache("Name1", true);
211
		name1.setUuid(UUID.fromString("7ce3a355-8f7c-4417-a0b3-41869de4f60b"));
212

    
213
		SpecimenTypeDesignation desig1 = SpecimenTypeDesignation.NewInstance();
214
		desig1.setUuid(UUID.fromString("c0e03472-b9f9-4886-b3bd-c1c70dd21a5f"));
215
		name1.addTypeDesignation(desig1, true);
216

    
217
		DerivedUnit specimen = DerivedUnit.NewPreservedSpecimenInstance();
218
		specimen.setUuid(UUID.fromString("4c3231a9-336e-4b21-acf2-129683627de4"));
219
		specimen.setTitleCache("Specimen to cascade", true);
220
		desig1.setTypeSpecimen(specimen);
221

    
222
		occurrenceDao.saveOrUpdate(specimen);
223
		commit();
224
	}
225

    
226
	@Test
227
	@DataSet
228
	public void testGetTypeDesignationStatusInUse() {
229
	    List<TypeDesignationStatusBase> statusTerms = typeDesignationDao.getTypeDesignationStatusInUse();
230
	    assertEquals(2, statusTerms.size());
231
	}
232

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

    
240
		IBotanicalName name2 = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
241
		name2.setTitleCache("Name2", true);
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 = 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 = 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 = nameDao.load(name1.getUuid());
286
		Assert.assertNotNull(name1);
287
		Assert.assertEquals("Name1 should have no type designations", 0, name1.getTypeDesignations().size());
288

    
289
		name2 = 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 = 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
//		printDataSet(System.out, new String[]{"TaxonName","TaxonName_AUD","TypeDesignationBase","TypeDesignationBase_AUD",
324
//				"TaxonName_TypeDesignationBase","TaxonName_TypeDesignationBase_AUD",
325
//				"SpecimenOrObservationBase","SpecimenOrObservationBase_AUD",
326
//				"HomotypicalGroup","HomotypicalGroup_AUD"});
327
	}
328

    
329
    @Override
330
    public void createTestDataSet() throws FileNotFoundException {}
331
}
(6-6/6)