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.IBotanicalName;
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.TaxonNameFactory;
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
 */
50
public class TypeDesignationDaoHibernateImplTest extends CdmTransactionalIntegrationTest {
51
	@SuppressWarnings("unused")
52
	private static final Logger logger = Logger.getLogger(TypeDesignationDaoHibernateImplTest.class);
53

    
54
	@SpringBeanByType
55
	ITypeDesignationDao typeDesignationDao;
56

    
57
	@SpringBeanByType
58
	ITaxonNameDao nameDao;
59

    
60
	@SpringBeanByType
61
	IOccurrenceDao occurrenceDao;
62

    
63

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

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

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

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

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

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

    
133
	}
134

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

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

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

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

    
155

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

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

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

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

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

    
182
	}
183

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

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

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

    
200
		nameDao.saveOrUpdate(name1);
201

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

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

    
210
	}
211

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

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

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

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

    
232
	}
233

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
297
		try{
298
			typeDesignationDao.delete(desig1);
299
			this.setComplete();
300
			this.endTransaction();
301
			Assert.fail("desig1 should not be deletable as it is still connected to name2");
302
		}catch (Exception e){
303
		    //this.setComplete();
304
            this.endTransaction();
305
			this.startNewTransaction();
306
		}
307
		name2 = 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
}
(6-6/6)