Project

General

Profile

Download (57.2 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.api.service;
11

    
12
import static org.junit.Assert.assertEquals;
13
import static org.junit.Assert.assertFalse;
14
import static org.junit.Assert.assertNotNull;
15
import static org.junit.Assert.assertNull;
16
import static org.junit.Assert.assertTrue;
17

    
18
import java.io.FileNotFoundException;
19
import java.util.ArrayList;
20
import java.util.Collections;
21
import java.util.Iterator;
22
import java.util.List;
23
import java.util.Set;
24
import java.util.UUID;
25

    
26
import org.junit.Assert;
27
import org.junit.Before;
28
import org.junit.Test;
29
import org.unitils.dbunit.annotation.DataSet;
30
import org.unitils.spring.annotation.SpringBeanByType;
31

    
32
import eu.etaxonomy.cdm.api.service.config.SecundumForSubtreeConfigurator;
33
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
34
import eu.etaxonomy.cdm.model.common.CdmBase;
35
import eu.etaxonomy.cdm.model.description.PolytomousKey;
36
import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
37
import eu.etaxonomy.cdm.model.name.IBotanicalName;
38
import eu.etaxonomy.cdm.model.name.NameRelationshipType;
39
import eu.etaxonomy.cdm.model.name.Rank;
40
import eu.etaxonomy.cdm.model.name.TaxonName;
41
import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
42
import eu.etaxonomy.cdm.model.reference.Reference;
43
import eu.etaxonomy.cdm.model.taxon.Classification;
44
import eu.etaxonomy.cdm.model.taxon.Synonym;
45
import eu.etaxonomy.cdm.model.taxon.SynonymType;
46
import eu.etaxonomy.cdm.model.taxon.Taxon;
47
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
48
import eu.etaxonomy.cdm.model.taxon.TaxonNaturalComparator;
49
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
50
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
51
import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
52
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
53
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
54
import eu.etaxonomy.cdm.test.unitils.CleanSweepInsertLoadStrategy;
55

    
56
/**
57
 * @author n.hoffmann
58
 * @since Dec 16, 2010
59
 */
60
//@SpringApplicationContext("file:./target/test-classes/eu/etaxonomy/cdm/applicationContext-test.xml")
61
public class TaxonNodeServiceImplTest extends CdmTransactionalIntegrationTest{
62

    
63

    
64
	@SpringBeanByType
65
	private ITaxonNodeService taxonNodeService;
66

    
67
	@SpringBeanByType
68
	private IClassificationService classificationService;
69

    
70
	@SpringBeanByType
71
	private IReferenceService referenceService;
72

    
73
	@SpringBeanByType
74
	private ITermService termService;
75

    
76
	@SpringBeanByType
77
    private INameService nameService;
78

    
79
	@SpringBeanByType
80
	private ITaxonService taxonService;
81

    
82
	@SpringBeanByType
83
	private IPolytomousKeyService polKeyService;
84

    
85
	@SpringBeanByType
86
	private IPolytomousKeyNodeService polKeyNodeService;
87

    
88

    
89
	private static final UUID t1Uuid = UUID.fromString("55c3e41a-c629-40e6-aa6a-ff274ac6ddb1");
90
	private static final UUID t2Uuid = UUID.fromString("2659a7e0-ff35-4ee4-8493-b453756ab955");
91
	private static final UUID classificationUuid = UUID.fromString("6c2bc8d9-ee62-4222-be89-4a8e31770878");
92
	private static final UUID classification2Uuid = UUID.fromString("43d67247-936f-42a3-a739-bbcde372e334");
93
	private static final UUID referenceUuid = UUID.fromString("de7d1205-291f-45d9-9059-ca83fc7ade14");
94
	private static final UUID node1Uuid= UUID.fromString("484a1a77-689c-44be-8e65-347d835f47e8");
95
	private static final UUID node2Uuid = UUID.fromString("2d41f0c2-b785-4f73-a436-cc2d5e93cc5b");
96

    
97
	private static final UUID node4Uuid = UUID.fromString("2fbf7bf5-22dd-4c1a-84e4-c8c93d1f0342");
98
	private static final UUID node5Uuid = UUID.fromString("c4d5170a-7967-4dac-ab76-ae2019eefde5");
99
	private static final UUID node6Uuid = UUID.fromString("b419ba5e-9c8b-449c-ad86-7abfca9a7340");
100
	private static final UUID rootNodeUuid = UUID.fromString("324a1a77-689c-44be-8e65-347d835f4111");
101

    
102

    
103
	private Taxon t1;
104
	private Taxon t2;
105
	private Taxon t4;
106
//	private Synonym s1;
107
	private SynonymType synonymType;
108
	private Reference reference;
109
	private String referenceDetail;
110
	private Classification classification;
111
	private TaxonNode node1;
112
	private TaxonNode node2;
113

    
114
    private TaxonNode node4;
115

    
116
	/**
117
	 * @throws java.lang.Exception
118
	 */
119
	@Before
120
	public void setUp() throws Exception {
121
	}
122

    
123
	/**
124
	 * Test method for {@link eu.etaxonomy.cdm.api.service.TaxonNodeServiceImpl#makeTaxonNodeASynonymOfAnotherTaxonNode(eu.etaxonomy.cdm.model.taxon.TaxonNode, eu.etaxonomy.cdm.model.taxon.TaxonNode, eu.etaxonomy.cdm.model.taxon.SynonymType, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String)}.
125
	 */
126
	@Test
127
	@DataSet
128
	public final void testMakeTaxonNodeASynonymOfAnotherTaxonNode() {
129
		classification = classificationService.load(classificationUuid);
130
		node1 = taxonNodeService.load(node1Uuid);
131
		node2 = taxonNodeService.load(node2Uuid);
132
		node4 = taxonNodeService.load(node4Uuid);
133
		reference = referenceService.load(referenceUuid);
134
//		synonymType = SynonymType.HOMOTYPIC_SYNONYM_OF();
135
		synonymType = CdmBase.deproxy(termService.load(SynonymType.uuidHomotypicSynonymOf), SynonymType.class) ;
136
		referenceDetail = "test";
137

    
138
		//TODO
139

    
140
		// descriptions
141
		t1 = node1.getTaxon();
142
		PolytomousKey polKey = PolytomousKey.NewInstance();
143
		PolytomousKeyNode keyNode = PolytomousKeyNode.NewInstance("", "", t1, null);
144
		keyNode.setKey(polKey);
145
		polKeyNodeService.save(keyNode);
146
		polKeyService.save(polKey);
147

    
148
		//nameRelations
149

    
150
		TaxonName relatedName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
151
		t1.getName().addRelationshipFromName(relatedName, NameRelationshipType.ALTERNATIVE_NAME(), null );
152

    
153
		//taxonRelations
154
		Taxon relatedTaxon = Taxon.NewInstance(TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES()), null);
155
		t1.addTaxonRelation(relatedTaxon, TaxonRelationshipType.CONGRUENT_OR_EXCLUDES(), null, null);
156
		Synonym synonym = Synonym.NewInstance(TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES()), null);
157
		taxonService.save(t1);
158
		taxonService.save(relatedTaxon);
159
		nameService.save(relatedName);
160

    
161
		t1.addHomotypicSynonym(synonym);
162
		taxonService.saveOrUpdate(t1);
163
		t1 =(Taxon) taxonService.load(t1.getUuid());
164
		t1 = HibernateProxyHelper.deproxy(t1);
165
		TaxonName nameT1 = t1.getName();
166
		t2 = node2.getTaxon();
167
		assertEquals(2, t1.getDescriptions().size());
168
		Assert.assertTrue(t2.getSynonyms().isEmpty());
169
		Assert.assertTrue(t2.getDescriptions().size() == 0);
170
		assertEquals(2,t1.getSynonyms().size());
171
		DeleteResult result;
172

    
173
		t4 = node4.getTaxon();
174
        UUID uuidT4 = t4.getUuid();
175
        t4 = (Taxon) taxonService.find(uuidT4);
176
        TaxonName name4 = nameService.find(t4.getName().getUuid());
177
        result = taxonNodeService.makeTaxonNodeASynonymOfAnotherTaxonNode(node4, node2, synonymType, reference, referenceDetail);
178
        if (result.isError() || result.isAbort()){
179
            Assert.fail();
180
        }
181
        t4 = (Taxon)taxonService.find(uuidT4);
182
        assertNull(t4);
183

    
184
		//Taxon can't be deleted because of the polytomous key node
185
		result = taxonNodeService.makeTaxonNodeASynonymOfAnotherTaxonNode(node1, node2, synonymType, reference, referenceDetail);
186
		if (result.isError() || result.isAbort()){
187
			Assert.fail();
188
		}
189
		commitAndStartNewTransaction(new String[]{/*"TaxonNode"*/});
190
		t1 = (Taxon)taxonService.find(t1Uuid);
191
		assertNotNull(t1);//because of the polytomous key node
192
		node1 = taxonNodeService.load(node1Uuid);
193
		assertNull(node1);
194

    
195
		Set<CdmBase> updatedObjects = result.getUpdatedObjects();
196
		Iterator<CdmBase> it = updatedObjects.iterator();
197
		Taxon taxon;
198
		while (it.hasNext()) {
199
			CdmBase updatedObject = it.next();
200
			if(updatedObject.isInstanceOf(Taxon.class)){
201
				taxon = HibernateProxyHelper.deproxy(updatedObject, Taxon.class);
202
				Set<Synonym> syns =  taxon.getSynonyms();
203
				assertNotNull(syns);
204
				if (taxon.equals(t2)){
205
				    assertEquals(4,syns.size());
206
				    Set<TaxonName> typifiedNames =taxon.getHomotypicGroup().getTypifiedNames();
207
	                assertEquals(typifiedNames.size(),4);
208
	                assertTrue(taxon.getHomotypicGroup().equals( nameT1.getHomotypicalGroup()));
209

    
210
	                assertEquals(taxon, t2);
211
				}
212

    
213
			}
214

    
215
		}
216
	}
217

    
218
	/**
219
	 * Test method for {@link eu.etaxonomy.cdm.api.service.TaxonNodeServiceImpl#makeTaxonNodeASynonymOfAnotherTaxonNode(eu.etaxonomy.cdm.model.taxon.TaxonNode, eu.etaxonomy.cdm.model.taxon.TaxonNode, eu.etaxonomy.cdm.model.taxon.SynonymType, eu.etaxonomy.cdm.model.reference.Reference, java.lang.String)}.
220
	 */
221
	@Test
222
	@DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
223
	public final void testMakeTaxonNodeAHeterotypicSynonymOfAnotherTaxonNode() {
224

    
225
	    //create data
226
	    classification = classificationService.load(classificationUuid);
227
		node1 = taxonNodeService.load(node1Uuid);
228
		node2 = taxonNodeService.load(node2Uuid);
229
		reference = referenceService.load(referenceUuid);
230
		synonymType = CdmBase.deproxy(termService.load(SynonymType.uuidHeterotypicSynonymOf), SynonymType.class) ;
231
		referenceDetail = "test";
232

    
233
		// descriptions
234
		t1 = node1.getTaxon();
235
		PolytomousKey polKey = PolytomousKey.NewInstance();
236
		PolytomousKeyNode keyNode = PolytomousKeyNode.NewInstance("", "", t1, null);
237
		keyNode.setKey(polKey);
238
		polKeyNodeService.save(keyNode);
239
		polKeyService.save(polKey);
240

    
241
		//nameRelations
242
		TaxonName relatedName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
243
		t1.getName().addRelationshipFromName(relatedName, NameRelationshipType.ALTERNATIVE_NAME(), null );
244
		TaxonName name1 = t1.getName();
245
		UUID name1UUID = name1.getUuid();
246
		//taxonRelations
247
		Taxon relatedTaxon = Taxon.NewInstance(TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES()), null);
248
		t1.addTaxonRelation(relatedTaxon, TaxonRelationshipType.CONGRUENT_OR_EXCLUDES(), null, null);
249
		Synonym t1HomotypSynonym = Synonym.NewInstance(TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES()), null);
250

    
251
		t1.addHomotypicSynonym(t1HomotypSynonym);
252
		TaxonName nameT1 = t1.getName();
253
		t2 = node2.getTaxon();
254
		assertEquals("taxon 1 must have 2 descriptions", 2, t1.getDescriptions().size());
255
		assertEquals("taxon 1 must have 2 synonyms", 2, t1.getSynonyms().size());
256
		Assert.assertTrue("taxon 2 must have no synonyms", t2.getSynonyms().isEmpty());
257
		Assert.assertTrue("taxon 2 must have no descriptions", t2.getDescriptions().size() == 0);
258

    
259
		//save
260
		taxonService.save(t1HomotypSynonym);
261
		taxonService.save(relatedTaxon);
262
		nameService.save(relatedName);
263

    
264
		//do it
265
		DeleteResult result = taxonNodeService.makeTaxonNodeASynonymOfAnotherTaxonNode
266
		        (node1, node2, synonymType, reference, referenceDetail);
267

    
268
		//post conditions
269
		if (!result.getUpdatedObjects().iterator().hasNext()){
270
			Assert.fail("Some updates must have taken place");
271
		}
272
		assertEquals(3,result.getUpdatedObjects().size());
273
		assertNotNull("Old taxon should not have been deleted as it is referenced by key node", taxonService.find(t1Uuid));
274
		assertNull("Old taxon node should not exist anymore", taxonNodeService.find(node1Uuid));
275

    
276
		t1HomotypSynonym = (Synonym)taxonService.find(t1HomotypSynonym.getUuid());
277
		assertNotNull(t1HomotypSynonym);
278

    
279
		keyNode.setTaxon(null);
280
		polKeyNodeService.saveOrUpdate(keyNode);
281
		t2 =HibernateProxyHelper.deproxy(t2);
282
		HibernateProxyHelper.deproxy(t2.getHomotypicGroup());
283
		t2.setName(HibernateProxyHelper.deproxy(t2.getName()));
284

    
285
		termService.saveOrUpdate(synonymType);
286
		assertFalse("taxon 2 must have a synonym now", t2.getSynonyms().isEmpty());
287
		assertEquals("taxon 2 must have 3 synonyms now, the old taxon 1 and it's 2 synonyms", 3, t2.getSynonyms().size());
288
		assertEquals("taxon 2 must have 2 descriptions now, taken form taxon 1", 2, t2.getDescriptions().size());
289

    
290
		result = taxonService.deleteTaxon(t1.getUuid(), null, null);
291
		if (result.isAbort() || result.isError()){
292
			Assert.fail();
293
		}
294
		assertNull(taxonService.find(t1Uuid));
295
		assertNull(taxonNodeService.find(node1Uuid));
296
		name1 = nameService.find(name1UUID);
297
		assertNotNull("taxon name 1 should still exist", name1);
298
		assertEquals("... but being used for the new synonym only as taxon 1 is deleted", 1, name1.getTaxonBases().size());
299
		t1HomotypSynonym = (Synonym)taxonService.find(t1HomotypSynonym.getUuid());
300
		assertNotNull(t1HomotypSynonym);
301

    
302
		Synonym newSynonym =(Synonym) name1.getTaxonBases().iterator().next();
303

    
304
		Taxon newAcceptedTaxon = CdmBase.deproxy(taxonService.find(t2.getUuid()), Taxon.class);
305
		assertEquals("The new synonym (old accepted taxon) and it's homotypic synonym should still be homotypic", newSynonym.getHomotypicGroup(), t1HomotypSynonym.getName().getHomotypicalGroup());
306
		assertFalse("The new accepted taxon must not be homotypic to ", newAcceptedTaxon.getHomotypicGroup().equals(newSynonym.getName().getHomotypicalGroup()));
307

    
308
		assertEquals("The new accepted taxon is taxon 2", newAcceptedTaxon, t2);
309
		assertEquals("The new synonyms name must be the same as the old accepted taxon's name", newSynonym.getName(), nameT1);
310
	}
311

    
312

    
313
	@Test
314
	@DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="TaxonNodeServiceImplTest-indexing.xml")
315
	public final void testIndexCreateNode() {
316
		Taxon taxon = Taxon.NewInstance(null, null);
317
		classification = classificationService.load(classificationUuid);
318
		node2 = taxonNodeService.load(node2Uuid);
319
		String oldTreeIndex = node2.treeIndex();
320

    
321
		TaxonNode newNode = node2.addChildTaxon(taxon, null, null);
322
		taxonNodeService.saveOrUpdate(newNode);
323
		commitAndStartNewTransaction(new String[]{"TaxonNode"});
324
		newNode = taxonNodeService.load(newNode.getUuid());
325
		Assert.assertEquals("", oldTreeIndex + newNode.getId() + "#", newNode.treeIndex());
326
	}
327

    
328

    
329
	@Test
330
	@DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="TaxonNodeServiceImplTest-indexing.xml")
331
	public final void testIndexMoveNode() {
332
		//in classification
333
		classification = classificationService.load(classificationUuid);
334
		node1 = taxonNodeService.load(node1Uuid);
335
		node2 = taxonNodeService.load(node2Uuid);
336
		node2.addChildNode(node1, null, null);
337
		taxonNodeService.saveOrUpdate(node1);
338
		commitAndStartNewTransaction(new String[]{"TaxonNode"});
339
		TaxonNode node6 = taxonNodeService.load(node6Uuid);
340
		Assert.assertEquals("Node6 treeindex is not correct", node2.treeIndex() + "2#4#6#", node6.treeIndex());
341

    
342
		//root of new classification
343
		Classification classification2 = classificationService.load(classification2Uuid);
344
		node1 = taxonNodeService.load(node1Uuid);
345
		classification2.setRootNode(HibernateProxyHelper.deproxy(classification2.getRootNode(),TaxonNode.class));
346
		classification2.addChildNode(node1, null, null);
347
		taxonNodeService.saveOrUpdate(node1);
348
		commitAndStartNewTransaction(new String[]{"TaxonNode"});
349
		node1 = taxonNodeService.load(node1Uuid);
350
		Assert.assertEquals("Node1 treeindex is not correct", "#t2#8#2#", node1.treeIndex());
351
		node6 = taxonNodeService.load(node6Uuid);
352
		Assert.assertEquals("Node6 treeindex is not correct", "#t2#8#2#4#6#", node6.treeIndex());
353

    
354
		//into new classification
355
		node2 = taxonNodeService.load(node2Uuid);
356
		TaxonNode node5 = taxonNodeService.load(node5Uuid);
357
		node2 =node5.addChildNode(node2, null, null);
358
		taxonNodeService.saveOrUpdate(node2);
359
		commitAndStartNewTransaction(new String[]{"TaxonNode"});
360
		node2 = taxonNodeService.load(node2Uuid);
361
		Assert.assertEquals("Node3 treeindex is not correct", "#t2#8#2#5#3#", node2.treeIndex());
362

    
363
}
364

    
365
	@Test
366
	@DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="TaxonNodeServiceImplTest-indexing.xml")
367
	public final void testIndexDeleteNode() {
368
		commitAndStartNewTransaction(new String[]{"TaxonNode"});
369
		node1 = taxonNodeService.load(node1Uuid);
370
		TaxonNode node4 = taxonNodeService.load(node4Uuid);
371
		String treeIndex = node1.treeIndex();
372
		TaxonNode node6 = taxonNodeService.load(node6Uuid);
373
		treeIndex= node6.treeIndex();
374

    
375
		HibernateProxyHelper.deproxy(node1, TaxonNode.class);
376
		node1.deleteChildNode(node4, false);
377
		TaxonNode node5 = taxonNodeService.load(node5Uuid);
378
		treeIndex = node5.treeIndex();
379

    
380
		node6 = taxonNodeService.load(node6Uuid);
381

    
382
		treeIndex = node6.treeIndex();
383
		Taxon newTaxon= Taxon.NewInstance(TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES()), null);
384
		UUID taxonNewUuid = taxonService.save(newTaxon).getUuid();
385

    
386
		node5.addChildTaxon(newTaxon, null, null);
387
		String node5TreeIndex =node5.treeIndex();
388
		taxonNodeService.saveOrUpdate(node5);
389

    
390
		commitAndStartNewTransaction(new String[]{"TaxonNode"});
391
		node5 = taxonNodeService.load(node5Uuid);
392
		List<TaxonNode> children =  node5.getChildNodes();
393
		TaxonNode node = children.get(0);
394
		int id = node.getId();
395
		Assert.assertEquals("Node6 treeindex is not correct", "#t1#1#2#6#", treeIndex);
396
		Assert.assertEquals("new node treeindex is not correct", node5TreeIndex + id +"#", node.treeIndex());
397
	}
398

    
399

    
400
	@Test
401
	@DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
402
	public final void testDeleteNode(){
403
		classification = classificationService.load(classificationUuid);
404
		node1 = taxonNodeService.load(node1Uuid);
405
		node2 = taxonNodeService.load(rootNodeUuid);
406
		node1 = HibernateProxyHelper.deproxy(node1);
407

    
408
		TaxonNode newNode = node1.addChildTaxon(Taxon.NewInstance(TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES()), null), null, null);
409
		UUID uuidNewNode = taxonNodeService.save(newNode).getUuid();
410
		newNode = taxonNodeService.load(uuidNewNode);
411
		UUID taxUUID = newNode.getTaxon().getUuid();
412
		UUID nameUUID = newNode.getTaxon().getName().getUuid();
413

    
414
		DeleteResult result = taxonNodeService.deleteTaxonNode(node1, null);
415
		if (!result.isOk()){
416
			Assert.fail();
417
		}
418
		newNode = taxonNodeService.load(uuidNewNode);
419
		node1 = taxonNodeService.load(node1Uuid);
420
		assertNull(newNode);
421
		assertNull(node1);
422

    
423
		t1 = (Taxon) taxonService.load(t1Uuid);
424
		assertNull(t1);
425
		Taxon newTaxon = (Taxon)taxonService.load(taxUUID);
426
		assertNull(newTaxon);
427
		IBotanicalName name = nameService.load(nameUUID);
428
		assertNull(name);
429

    
430

    
431
	}
432

    
433
	@Test
434
    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)
435

    
436
    public final void testDeleteNodeWithReusedTaxon(){
437
        classification = classificationService.load(classificationUuid);
438
        node1 = taxonNodeService.load(node1Uuid);
439
        node2 = taxonNodeService.load(rootNodeUuid);
440
        node1 = HibernateProxyHelper.deproxy(node1);
441

    
442

    
443
        Classification classification2 = Classification.NewInstance("Classification2");
444
        TaxonNode nodeClassification2 =classification2.addChildTaxon(node1.getTaxon(), null, null);
445
        assertEquals(node1.getTaxon().getUuid(), t1Uuid);
446
        classificationService.save(classification2);
447
        List<TaxonNode> nodesOfClassification2 = taxonNodeService.listAllNodesForClassification(classification2, null, null);
448
        UUID nodeUUID = nodesOfClassification2.get(0).getUuid();
449
        assertEquals(nodeUUID, nodeClassification2.getUuid());
450
        Taxon newTaxon = Taxon.NewInstance(TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES()),  null);
451
        taxonService.save(newTaxon);
452
        TaxonNode newNode = node1.addChildTaxon(newTaxon,null, null);
453
        UUID uuidNewNode = taxonNodeService.save(newNode).getUuid();
454
        newNode = taxonNodeService.load(uuidNewNode);
455
        UUID taxUUID = newNode.getTaxon().getUuid();
456
        UUID nameUUID = newNode.getTaxon().getName().getUuid();
457

    
458
        DeleteResult result = taxonNodeService.deleteTaxonNode(node1, null);
459
        if (!result.isOk()){
460
            Assert.fail();
461
        }
462
        //taxonService.getSession().flush();
463
        newNode = taxonNodeService.load(uuidNewNode);
464
        node1 = taxonNodeService.load(node1Uuid);
465
        assertNull(newNode);
466
        assertNull(node1);
467
        assertNotNull(taxonNodeService.load(nodeUUID));
468

    
469
        t1 = (Taxon) taxonService.load(t1Uuid);
470
        assertNotNull(t1);
471
        newTaxon = (Taxon)taxonService.load(taxUUID);
472
        assertNull(newTaxon);
473
        IBotanicalName name = nameService.load(nameUUID);
474
        assertNull(name);
475

    
476

    
477
    }
478

    
479

    
480

    
481
	@Test
482
	@DataSet
483
	public final void testDeleteNodes(){
484
		classification = classificationService.load(classificationUuid);
485
		node1 = taxonNodeService.load(node1Uuid);
486
		node2 = taxonNodeService.load(rootNodeUuid);
487
		node1 = HibernateProxyHelper.deproxy(node1);
488
		node2 = HibernateProxyHelper.deproxy(node2);
489
		TaxonNode newNode = node1.addChildTaxon(Taxon.NewInstance(TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES()), null), null, null);
490
		UUID uuidNewNode = taxonNodeService.save(newNode).getUuid();
491
		List<TaxonNode> treeNodes = new ArrayList<TaxonNode>();
492
		treeNodes.add(node1);
493
		treeNodes.add(node2);
494

    
495
		taxonNodeService.deleteTaxonNodes(treeNodes, null);
496

    
497
		newNode = taxonNodeService.load(uuidNewNode);
498
		node1 = taxonNodeService.load(node1Uuid);
499
		assertNull(newNode);
500
		assertNull(node1);
501
		//taxonService.getSession().flush();
502
		t1 = (Taxon) taxonService.load(t1Uuid);
503
		assertNull(t1);
504
		t2 = (Taxon) taxonService.load(t2Uuid);
505
		assertNull(t2);
506

    
507

    
508
	}
509
	@Test
510
	@DataSet
511
	public void testMoveTaxonNode(){
512
	    classification = classificationService.load(classificationUuid);
513
	  //  Set<TaxonNode>  nodes = classification.getAllNodes();
514
	    List<TaxonNode>  nodes = classification.getChildNodes();
515
	    System.out.println(nodes.size());
516
	    classification.addChildTaxon(Taxon.NewInstance(TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES()), null), nodes.size(), null, null);
517
	   nodes =  classification.getChildNodes();
518
	    System.out.println(nodes.size());
519

    
520
	}
521

    
522
    @Test
523
    public void testCompareNaturalOrder() {
524
    	/*
525
    	 * Classification
526
    	 *  * Abies
527
    	 *  `- Abies alba
528
    	 *   - Abies balsamea
529
    	 *  * Pinus
530
    	 *  `- Pinus pampa
531
    	 */
532
    	Classification classification = Classification.NewInstance("Classification");
533
    	IBotanicalName abiesName = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
534
    	abiesName.setGenusOrUninomial("Abies");
535
    	Taxon abies = Taxon.NewInstance(abiesName, null);
536
    	IBotanicalName abiesAlbaName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
537
    	abiesAlbaName.setGenusOrUninomial("Abies");
538
    	abiesAlbaName.setSpecificEpithet("alba");
539
    	Taxon abiesAlba = Taxon.NewInstance(abiesAlbaName, null);
540
    	IBotanicalName pinusName = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
541
    	pinusName.setGenusOrUninomial("Pinus");
542
    	Taxon pinus = Taxon.NewInstance(pinusName, null);
543
    	IBotanicalName pinusPampaName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
544
    	pinusPampaName.setGenusOrUninomial("Pinus");
545
    	pinusPampaName.setSpecificEpithet("pampa");
546
    	Taxon pinusPampa = Taxon.NewInstance(pinusPampaName, null);
547

    
548
        IBotanicalName abiesBalsameaName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
549
        abiesBalsameaName.setGenusOrUninomial("Abies");
550
        abiesBalsameaName.setSpecificEpithet("balsamea");
551
        Taxon abiesBalsamea = Taxon.NewInstance(abiesBalsameaName, null);
552

    
553
        List<TaxonNode> nodes = new ArrayList<TaxonNode>();
554
    	nodes.add(classification.addChildTaxon(abies, null, null));
555
    	TaxonNode abiesAlbaNode = classification.addParentChild(abies, abiesAlba, null, null);
556
    	TaxonNode balsameaNode = classification.addParentChild(abies, abiesBalsamea, null, null);
557
    	nodes.add(balsameaNode);
558
    	nodes.add(abiesAlbaNode);
559
    	nodes.add(classification.addChildTaxon(pinus, null, null));
560
    	nodes.add(classification.addParentChild(pinus, pinusPampa, null, null));
561
    	classificationService.saveClassification(classification);
562
    	//this.taxonNodeService.save(nodes);
563
    	TaxonNaturalComparator comparator = new TaxonNaturalComparator();
564
    	List<TaxonNode> allNodes = new ArrayList<>(classification.getAllNodes());
565
    	Collections.sort(allNodes, comparator);
566

    
567
    	Assert.assertEquals(allNodes.get(0).getTaxon(), abies );
568
    	Assert.assertEquals(allNodes.get(2).getTaxon(), abiesBalsamea );
569
    	Assert.assertEquals(allNodes.get(1).getTaxon(), abiesAlba );
570

    
571
    	taxonNodeService.moveTaxonNode(balsameaNode, abiesAlbaNode,1);
572
    	classification = classificationService.load(classification.getUuid());
573

    
574
    	allNodes = new ArrayList<>(classification.getAllNodes());
575
        Collections.sort(allNodes, comparator);
576

    
577
        Assert.assertEquals(allNodes.get(0).getTaxon(), abies );
578
        Assert.assertEquals(allNodes.get(1).getTaxon(), abiesBalsamea );
579
        Assert.assertEquals(allNodes.get(2).getTaxon(), abiesAlba );
580

    
581
    }
582

    
583
    @Test
584
    @DataSet(loadStrategy = CleanSweepInsertLoadStrategy.class, value = "TaxonNodeServiceImplTest.testGetUuidAndTitleCacheHierarchy.xml")
585
    public void testGetUuidAndTitleCacheHierarchy(){
586
        UUID classificationUuid = UUID.fromString("029b4c07-5903-4dcf-87e8-406ed0e0285f");
587
        UUID abiesUuid = UUID.fromString("f8306fd3-9825-41bf-94aa-a7b5790b553e");
588
        UUID abiesAlbaUuid = UUID.fromString("c70f76e5-2dcb-41c5-ae6f-d756e0a0fae0");
589
        UUID abiesAlbaSubBrotaUuid = UUID.fromString("06d58161-7707-44b5-b720-6c0eb916b37c");
590
        UUID abiesPalmaUuid = UUID.fromString("6dfd30dd-e589-493a-b66a-19c4cb374f92");
591
        UUID pinusUuid = UUID.fromString("5d8e8341-f5e9-4616-96cf-f0351dda42f4");
592
//        /*
593
//         * Checklist
594
//         *  - Abies
595
//         *   - Abies alba
596
//         *    - Abieas alba subs. brota
597
//         *   - Abies palma
598
//         *  -Pinus
599
//         */
600
//        Classification checklist = Classification.NewInstance("Checklist");
601
//        checklist.setUuid(classificationUuid);
602
//
603
//        BotanicalName abiesName = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
604
//        abiesName.setGenusOrUninomial("Abies");
605
//        Taxon abies = Taxon.NewInstance(abiesName, null);
606
//
607
//        BotanicalName abiesAlbaName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
608
//        abiesAlbaName.setGenusOrUninomial("Abies");
609
//        abiesAlbaName.setSpecificEpithet("alba");
610
//        Taxon abiesAlba = Taxon.NewInstance(abiesAlbaName, null);
611
//
612
//        BotanicalName abiesAlbaSubBrotaName = TaxonNameFactory.NewBotanicalInstance(Rank.SUBSPECIES());
613
//        abiesAlbaSubBrotaName.setGenusOrUninomial("Abies");
614
//        abiesAlbaSubBrotaName.setSpecificEpithet("alba");
615
//        abiesAlbaSubBrotaName.setInfraSpecificEpithet("brota");
616
//        Taxon abiesAlbaSubBrota = Taxon.NewInstance(abiesAlbaSubBrotaName, null);
617
//
618
//        BotanicalName abiesPalmaName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
619
//        abiesPalmaName.setGenusOrUninomial("Abies");
620
//        abiesPalmaName.setSpecificEpithet("palma");
621
//        Taxon abiesPalma = Taxon.NewInstance(abiesPalmaName, null);
622
//
623
//        BotanicalName pinusName = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
624
//        pinusName.setGenusOrUninomial("Pinus");
625
//        Taxon pinus = Taxon.NewInstance(pinusName, null);
626
//
627
//        checklist.addParentChild(null, abies, null, null);
628
//        checklist.addParentChild(abies, abiesAlba, null, null);
629
//        checklist.addParentChild(abiesAlba, abiesAlbaSubBrota, null, null);
630
//        checklist.addParentChild(abies, abiesPalma, null, null);
631
//        checklist.addParentChild(null, pinus, null, null);
632
//
633
//
634
//        setComplete();
635
//        endTransaction();
636
//
637
//        String fileNameAppendix = "testGetUuidAndTitleCacheHierarchy";
638
//
639
//        writeDbUnitDataSetFile(new String[] {
640
//            "TAXONBASE", "TAXONNAME",
641
//            "TAXONRELATIONSHIP",
642
//            "HOMOTYPICALGROUP",
643
//            "CLASSIFICATION", "TAXONNODE",
644
//            "HIBERNATE_SEQUENCES" // IMPORTANT!!!
645
//            },
646
//            fileNameAppendix );
647
        Classification classification = classificationService.load(classificationUuid);
648

    
649
        List<TaxonNode> expectedChildTaxonNodes = classification.getChildNodes();
650
        List<UuidAndTitleCache<TaxonNode>> childNodesUuidAndTitleCache = taxonNodeService.listChildNodesAsUuidAndTitleCache(classification.getRootNode());
651
        assertNotNull("child UuidAndTitleCache list is null", childNodesUuidAndTitleCache);
652

    
653
        compareChildren(expectedChildTaxonNodes, childNodesUuidAndTitleCache);
654

    
655
        //test taxon parent of sub species
656
        Taxon abiesAlbaSubBrota = HibernateProxyHelper.deproxy(taxonService.load(abiesAlbaSubBrotaUuid), Taxon.class);
657
        TaxonNode abiesAlbaSubBrotaNode = abiesAlbaSubBrota.getTaxonNodes().iterator().next();
658
        TaxonNode expectedTaxonParent = HibernateProxyHelper.deproxy(abiesAlbaSubBrotaNode.getParent(), TaxonNode.class);
659
        UuidAndTitleCache<TaxonNode> taxonParent = taxonNodeService.getParentUuidAndTitleCache(abiesAlbaSubBrotaNode);
660
        assertEquals("Taxon Nodes do not match. ", expectedTaxonParent.getUuid(), taxonParent.getUuid());
661
        assertEquals("Taxon Nodes do not match. ", (Integer)expectedTaxonParent.getId(), taxonParent.getId());
662
        assertEquals("Taxon Nodes do not match. ", expectedTaxonParent.getTaxon().getTitleCache(), taxonParent.getTitleCache());
663
        assertEquals("Taxon Nodes do not match. ", expectedTaxonParent, taxonNodeService.load(taxonParent.getUuid()));
664

    
665
        //test classification parent
666
        Taxon abies = HibernateProxyHelper.deproxy(taxonService.load(abiesUuid), Taxon.class);
667
        TaxonNode abiesNode = abies.getTaxonNodes().iterator().next();
668
        TaxonNode expectedClassificationParent = HibernateProxyHelper.deproxy(abiesNode.getParent(), TaxonNode.class);
669
        UuidAndTitleCache<TaxonNode> classificationParent= taxonNodeService.getParentUuidAndTitleCache(abiesNode);
670
        assertEquals("Taxon Nodes do not match. ", expectedClassificationParent.getUuid(), classificationParent.getUuid());
671
        assertEquals("Taxon Nodes do not match. ", (Integer)expectedClassificationParent.getId(), classificationParent.getId());
672
        assertEquals("Taxon Nodes do not match. ", expectedClassificationParent.getClassification().getTitleCache(), classificationParent.getTitleCache());
673
        assertEquals("Taxon Nodes do not match. ", expectedClassificationParent, taxonNodeService.load(classificationParent.getUuid()));
674
    }
675

    
676
    private void compareChildren(List<TaxonNode> expectedChildTaxonNodes, List<UuidAndTitleCache<TaxonNode>> childNodesUuidAndTitleCache){
677
        assertEquals("Number of children does not match", expectedChildTaxonNodes.size(), childNodesUuidAndTitleCache.size());
678
        UuidAndTitleCache<TaxonNode> foundMatch = null;
679
        for (TaxonNode taxonNode : expectedChildTaxonNodes) {
680
            foundMatch = null;
681
            for (UuidAndTitleCache<TaxonNode> uuidAndTitleCache : childNodesUuidAndTitleCache) {
682
                if(uuidAndTitleCache.getUuid().equals(taxonNode.getUuid())){
683
                    String titleCache = taxonNode.getTaxon().getTitleCache();
684
                    if(uuidAndTitleCache.getTitleCache().equals(titleCache)){
685
                        foundMatch = uuidAndTitleCache;
686
                        break;
687
                    }
688
                }
689
            }
690
            assertTrue(String.format("no matching UuidAndTitleCache found for child %s", taxonNode), foundMatch!=null);
691
            compareChildren(taxonNode.getChildNodes(), taxonNodeService.listChildNodesAsUuidAndTitleCache(foundMatch));
692
        }
693
    }
694
//
695
//    private UuidAndTitleCache<TaxonNode> findMatchingUuidAndTitleCache(List<UuidAndTitleCache<TaxonNode>> childNodesUuidAndTitleCache,
696
//            UuidAndTitleCache<TaxonNode> foundMatch, TaxonNode taxonNode) {
697
//        for (UuidAndTitleCache<TaxonNode> uuidAndTitleCache : childNodesUuidAndTitleCache) {
698
//            if(uuidAndTitleCache.getUuid().equals(taxonNode.getUuid())){
699
//                String titleCache = taxonNode.getTaxon().getTitleCache();
700
//                if(uuidAndTitleCache.getTitleCache().equals(titleCache)){
701
//                    foundMatch = uuidAndTitleCache;
702
//                    break;
703
//                }
704
//            }
705
//        }
706
//        return foundMatch;
707
//    }
708

    
709
    @Test
710
    @DataSet("TaxonNodeServiceImplTest.testSetSecundumForSubtree.xml")
711
    public void testSetSecundumForSubtree(){
712
        UUID subTreeUuid = UUID.fromString("484a1a77-689c-44be-8e65-347d835f47e8");
713
//        UUID taxon1uuid = UUID.fromString("55c3e41a-c629-40e6-aa6a-ff274ac6ddb1");
714
//        UUID taxon5uuid = UUID.fromString("d0b99fee-a783-4dda-b8a2-8960703cfcc2");
715
        Reference newSec = referenceService.find(UUID.fromString("1d3fb074-d7ba-47e4-be94-b4cb1a99afa7"));
716

    
717
        //assert current state
718
        Assert.assertNotNull(newSec);
719
        Assert.assertNull(taxonService.find(1).getSec());
720
        Assert.assertNull(taxonService.find(2).getSec());
721
        Assert.assertNull(taxonService.find(3).getSec());
722
        Assert.assertNull(taxonService.find(4).getSec());
723
        TaxonBase<?> taxon5 = taxonService.find(5);
724
        Assert.assertNotNull(taxon5.getSec());
725
        Assert.assertNotEquals(newSec, taxon5.getSec());
726
        Assert.assertNotNull(taxon5.getSecMicroReference());
727

    
728
        //set secundum
729
        SecundumForSubtreeConfigurator config = new SecundumForSubtreeConfigurator(subTreeUuid);
730
        config.setNewSecundum(newSec);
731
        taxonNodeService.setSecundumForSubtree(config);
732

    
733
        commitAndStartNewTransaction(new String[]{"TaxonBase","TaxonBase_AUD"});
734
        Assert.assertEquals(newSec, taxonService.find(1).getSec());
735
        Assert.assertNull(taxonService.find(2).getSec());
736
        Assert.assertEquals(newSec, taxonService.find(3).getSec());
737
        Assert.assertNull(taxonService.find(4).getSec());
738
        taxon5 = taxonService.find(5);
739
        Assert.assertEquals(newSec, taxon5.getSec());
740
        Assert.assertNull(taxon5.getSecMicroReference());
741
    }
742

    
743
    @Test
744
    @DataSet("TaxonNodeServiceImplTest.testSetSecundumForSubtree.xml")
745
    public void testSetSecundumForSubtreeNoOverwrite(){
746
        UUID subTreeUuid = UUID.fromString("484a1a77-689c-44be-8e65-347d835f47e8");
747
//        UUID taxon1uuid = UUID.fromString("55c3e41a-c629-40e6-aa6a-ff274ac6ddb1");
748
//        UUID taxon5uuid = UUID.fromString("d0b99fee-a783-4dda-b8a2-8960703cfcc2");
749
        Reference newSec = referenceService.find(UUID.fromString("1d3fb074-d7ba-47e4-be94-b4cb1a99afa7"));
750

    
751
        //assert current state
752
        Assert.assertNotNull(newSec);
753
        Assert.assertNull(taxonService.find(1).getSec());
754
        Assert.assertNull(taxonService.find(2).getSec());
755
        Assert.assertNull(taxonService.find(3).getSec());
756
        Assert.assertNull(taxonService.find(4).getSec());
757
        TaxonBase<?> taxon5 = taxonService.find(5);
758
        Assert.assertNotNull(taxon5.getSec());
759
        Assert.assertNotEquals(newSec, taxon5.getSec());
760
        Assert.assertNotNull(taxon5.getSecMicroReference());
761

    
762
        //set secundum
763
        SecundumForSubtreeConfigurator config = new SecundumForSubtreeConfigurator(subTreeUuid, newSec, null);
764
        config.setOverwriteExistingAccepted(false);
765
        config.setOverwriteExistingSynonyms(false);
766
        taxonNodeService.setSecundumForSubtree(config);
767

    
768
        commitAndStartNewTransaction(new String[]{"TaxonBase","TaxonBase_AUD"});
769
        Assert.assertEquals(newSec, taxonService.find(1).getSec());
770
        Assert.assertNull(taxonService.find(2).getSec());
771
        Assert.assertEquals(newSec, taxonService.find(3).getSec());
772
        Assert.assertNull(taxonService.find(4).getSec());
773
        Reference oldTaxon5Sec = taxon5.getSec();
774
        taxon5 = taxonService.find(5);
775
        Assert.assertEquals(oldTaxon5Sec, taxon5.getSec());
776
        Assert.assertNotEquals(newSec, taxon5.getSec());
777
        Assert.assertNotNull(taxon5.getSecMicroReference());
778
    }
779

    
780
    @Test
781
    @DataSet("TaxonNodeServiceImplTest.testSetSecundumForSubtree.xml")
782
    public void testSetSecundumForSubtreeOnlyAccepted(){
783
        UUID subTreeUuid = UUID.fromString("484a1a77-689c-44be-8e65-347d835f47e8");
784
        Reference newSec = referenceService.find(UUID.fromString("1d3fb074-d7ba-47e4-be94-b4cb1a99afa7"));
785

    
786
        //assert current state
787
        Assert.assertNotNull(newSec);
788
        Assert.assertNull(taxonService.find(1).getSec());
789
        Assert.assertNull(taxonService.find(2).getSec());
790
        Assert.assertNull(taxonService.find(3).getSec());
791
        Assert.assertNull(taxonService.find(4).getSec());
792
        TaxonBase<?> taxon5 = taxonService.find(5);
793
        Assert.assertNotNull(taxon5.getSec());
794
        Assert.assertNotEquals(newSec, taxon5.getSec());
795
        Assert.assertNotNull(taxon5.getSecMicroReference());
796

    
797
        //set secundum
798
        SecundumForSubtreeConfigurator config = new SecundumForSubtreeConfigurator(subTreeUuid, newSec, null);
799
        config.setIncludeSynonyms(false);
800
        taxonNodeService.setSecundumForSubtree(config);
801

    
802
//        commitAndStartNewTransaction(new String[]{"TaxonBase","TaxonBase_AUD"});
803
        Assert.assertEquals(newSec, taxonService.find(1).getSec());
804
        Assert.assertNull(taxonService.find(2).getSec());
805
        Assert.assertNull(taxonService.find(3).getSec());
806
        Assert.assertNull(taxonService.find(4).getSec());
807
        taxon5 = taxonService.find(5);
808
        Assert.assertEquals(newSec, taxon5.getSec());
809
        Assert.assertNull(taxon5.getSecMicroReference());
810
    }
811

    
812
    @Test
813
    @DataSet("TaxonNodeServiceImplTest.testSetSecundumForSubtree.xml")
814
    public void testSetSecundumForSubtreeOnlySynonyms(){
815
        UUID subTreeUuid = UUID.fromString("484a1a77-689c-44be-8e65-347d835f47e8");
816
        Reference newSec = referenceService.find(UUID.fromString("1d3fb074-d7ba-47e4-be94-b4cb1a99afa7"));
817

    
818
        //assert current state
819
        Assert.assertNotNull(newSec);
820
        Assert.assertNull(taxonService.find(1).getSec());
821
        Assert.assertNull(taxonService.find(2).getSec());
822
        Assert.assertNull(taxonService.find(3).getSec());
823
        Assert.assertNull(taxonService.find(4).getSec());
824
        TaxonBase<?> taxon5 = taxonService.find(5);
825
        Assert.assertNotNull(taxon5.getSec());
826
        Assert.assertNotEquals(newSec, taxon5.getSec());
827
        Assert.assertNotNull(taxon5.getSecMicroReference());
828

    
829
        //set secundum
830
        SecundumForSubtreeConfigurator config = new SecundumForSubtreeConfigurator(subTreeUuid, newSec, null);
831
        config.setIncludeAcceptedTaxa(false);
832
        taxonNodeService.setSecundumForSubtree(config);
833

    
834
        commitAndStartNewTransaction(new String[]{"TaxonBase","TaxonBase_AUD"});
835
        Assert.assertNull(taxonService.find(1).getSec());
836
        Assert.assertNull(taxonService.find(2).getSec());
837
        Assert.assertEquals("Synonym should be updated", newSec, taxonService.find(3).getSec());
838
        Assert.assertNull(taxonService.find(4).getSec());
839
        Reference oldTaxon5Sec = taxon5.getSec();
840
        taxon5 = taxonService.find(5);
841
        Assert.assertEquals(oldTaxon5Sec, taxon5.getSec());
842
        Assert.assertNotEquals(newSec, taxon5.getSec());
843
        Assert.assertNotNull(taxon5.getSecMicroReference());
844
    }
845

    
846
    @Test
847
    @DataSet("TaxonNodeServiceImplTest.testSetSecundumForSubtree.xml")
848
    public void testSetSecundumForSubtreeNoShared(){
849
        UUID subTreeUuid = UUID.fromString("484a1a77-689c-44be-8e65-347d835f47e8");
850
        Reference newSec = referenceService.find(UUID.fromString("1d3fb074-d7ba-47e4-be94-b4cb1a99afa7"));
851

    
852
        //assert current state
853
        Assert.assertNotNull(newSec);
854
        Assert.assertNull(taxonService.find(1).getSec());
855
        Assert.assertNull(taxonService.find(2).getSec());
856
        Assert.assertNull(taxonService.find(3).getSec());
857
        Assert.assertNull(taxonService.find(4).getSec());
858
        TaxonBase<?> taxon5 = taxonService.find(5);
859
        Assert.assertNotNull(taxon5.getSec());
860
        Assert.assertNotEquals(newSec, taxon5.getSec());
861
        Assert.assertNotNull(taxon5.getSecMicroReference());
862

    
863
        //set secundum
864
        SecundumForSubtreeConfigurator config = new SecundumForSubtreeConfigurator(subTreeUuid, newSec, null);
865
        config.setIncludeSharedTaxa(false);
866
        taxonNodeService.setSecundumForSubtree(config);
867

    
868
        commitAndStartNewTransaction(new String[]{"TaxonBase","TaxonBase_AUD"});
869
        Assert.assertNull("Shared taxon must not be set", taxonService.find(1).getSec());
870
        Assert.assertNull(taxonService.find(2).getSec());
871
        Assert.assertNull("Synonym of shared taxon must not be set", taxonService.find(3).getSec());
872
        Assert.assertNull(taxonService.find(4).getSec());
873
        taxon5 = taxonService.find(5);
874
        Assert.assertEquals(newSec, taxon5.getSec());
875
        Assert.assertNull(taxon5.getSecMicroReference());
876
    }
877

    
878
    @Test
879
    @DataSet("TaxonNodeServiceImplTest.testSetSecundumForSubtree.xml")
880
    public void testSetPublishForSubtree(){
881
        UUID subTreeUuid = UUID.fromString("484a1a77-689c-44be-8e65-347d835f47e8");
882

    
883
        //assert current state
884
        Assert.assertTrue(taxonService.find(1).isPublish());
885
        Assert.assertTrue(taxonService.find(2).isPublish());
886
        Assert.assertTrue(taxonService.find(3).isPublish());
887
        Assert.assertTrue(taxonService.find(4).isPublish());
888
        Assert.assertTrue(taxonService.find(5).isPublish());
889

    
890
        //set publish
891
//        SecundumForSubtreeConfigurator config = new SetPublishForSubtreeConfigurator(subTreeUuid);
892
//        config.setNewSecundum(newSec);
893
        boolean publish = false;
894
        taxonNodeService.setPublishForSubtree(subTreeUuid,  publish, true, true, true, null);
895

    
896
        commitAndStartNewTransaction(new String[]{});
897
        Assert.assertEquals(publish, taxonService.find(1).isPublish());
898
        Assert.assertEquals(true, taxonService.find(2).isPublish());
899
        Assert.assertEquals(publish, taxonService.find(3).isPublish());
900
        Assert.assertEquals(true, taxonService.find(4).isPublish());
901
        Assert.assertEquals(publish, taxonService.find(5).isPublish());
902
    }
903

    
904
    @Test
905
    @DataSet("TaxonNodeServiceImplTest.testSetSecundumForSubtree.xml")
906
    public void testSetPublishForSubtreeOnlyAccepted(){
907
        UUID subTreeUuid = UUID.fromString("484a1a77-689c-44be-8e65-347d835f47e8");
908

    
909
        //assert current state
910
        Assert.assertTrue(taxonService.find(1).isPublish());
911
        Assert.assertTrue(taxonService.find(2).isPublish());
912
        Assert.assertTrue(taxonService.find(3).isPublish());
913
        Assert.assertTrue(taxonService.find(4).isPublish());
914
        Assert.assertTrue(taxonService.find(5).isPublish());
915

    
916
        //set secundum
917
//        SecundumForSubtreeConfigurator config = new SetPublishForSubtreeConfigurator(subTreeUuid, newSec, null);
918
//        config.setIncludeSynonyms(false);
919
        boolean publish = false;
920
        taxonNodeService.setPublishForSubtree(subTreeUuid,  publish, true, false, true, null);
921

    
922
        commitAndStartNewTransaction();
923
        Assert.assertEquals(publish, taxonService.find(1).isPublish());
924
        Assert.assertEquals(true, taxonService.find(2).isPublish());
925
        Assert.assertEquals(true, taxonService.find(3).isPublish());
926
        Assert.assertEquals(true, taxonService.find(4).isPublish());
927
        Assert.assertEquals(publish, taxonService.find(5).isPublish());
928
    }
929

    
930
    @Test
931
    @DataSet("TaxonNodeServiceImplTest.testSetSecundumForSubtree.xml")
932
    public void testSetPublishForSubtreeOnlySynonyms(){
933
        UUID subTreeUuid = UUID.fromString("484a1a77-689c-44be-8e65-347d835f47e8");
934

    
935
        //assert current state
936
        Assert.assertTrue(taxonService.find(1).isPublish());
937
        Assert.assertTrue(taxonService.find(2).isPublish());
938
        Assert.assertTrue(taxonService.find(3).isPublish());
939
        Assert.assertTrue(taxonService.find(4).isPublish());
940
        Assert.assertTrue(taxonService.find(5).isPublish());
941

    
942
        //set secundum
943
//        SecundumForSubtreeConfigurator config = new SetPublishForSubtreeConfigurator(subTreeUuid, newSec, null);
944
//        config.setIncludeAcceptedTaxa(false);
945
        boolean publish = false;
946
        taxonNodeService.setPublishForSubtree(subTreeUuid, publish, false, true, true, null);
947

    
948
        commitAndStartNewTransaction(new String[]{});
949
        Assert.assertEquals(true, taxonService.find(1).isPublish());
950
        Assert.assertEquals(true, taxonService.find(2).isPublish());
951
        Assert.assertEquals(publish, taxonService.find(3).isPublish());
952
        Assert.assertEquals(true, taxonService.find(4).isPublish());
953
        Assert.assertEquals(true, taxonService.find(5).isPublish());
954
    }
955

    
956

    
957
    @Test
958
    @DataSet("TaxonNodeServiceImplTest.testSetSecundumForSubtree.xml")
959
    public void testSetPublishForSubtreeNoShared(){
960
        UUID subTreeUuid = UUID.fromString("484a1a77-689c-44be-8e65-347d835f47e8");
961

    
962
        //assert current state
963
        Assert.assertTrue(taxonService.find(1).isPublish());
964
        Assert.assertTrue(taxonService.find(2).isPublish());
965
        Assert.assertTrue(taxonService.find(3).isPublish());
966
        Assert.assertTrue(taxonService.find(4).isPublish());
967
        Assert.assertTrue(taxonService.find(5).isPublish());
968

    
969
        //set secundum
970
     //   SecundumForSubtreeConfigurator config = new SetPublishForSubtreeConfigurator(subTreeUuid, newSec, null);
971
   //     config.setIncludeSharedTaxa(false);
972
        boolean publish = false;
973
        taxonNodeService.setPublishForSubtree(subTreeUuid, publish, true, true, false, null);
974

    
975
        commitAndStartNewTransaction(new String[]{});
976
        Assert.assertEquals("Shared taxon must not be set", true, taxonService.find(1).isPublish());
977
        Assert.assertEquals(true, taxonService.find(2).isPublish());
978
        Assert.assertEquals("Synonym of shared taxon must not be set", true, taxonService.find(3).isPublish());
979
        Assert.assertEquals(true, taxonService.find(4).isPublish());
980
        Assert.assertEquals(publish, taxonService.find(5).isPublish());
981
    }
982

    
983
    @Test
984
    @DataSet("TaxonNodeServiceImplTest-testFindCommonParentNode.xml")
985
    public void testFindCommonParentNode(){
986
        UUID checklist2Uuid = UUID.fromString("c6e3a598-3b6c-4ef5-8b01-5bdb3de5a9fd");
987
        UUID campanulaNodeUuid = UUID.fromString("62fa918d-a1d8-4284-ae4b-93478bde8656");
988
        UUID campanulaPersicifoliaNodeUuid = UUID.fromString("dce3defa-5123-44a7-8008-0cc9b27461f6");
989

    
990
        UUID classificationUuid = UUID.fromString("029b4c07-5903-4dcf-87e8-406ed0e0285f");
991
        UUID abiesNodeUuid = UUID.fromString("f8306fd3-9825-41bf-94aa-a7b5790b553e");
992
        UUID abiesAlbaNodeUuid = UUID.fromString("c70f76e5-2dcb-41c5-ae6f-d756e0a0fae0");
993
        UUID abiesAlbaSubBrotaNodeUuid = UUID.fromString("06d58161-7707-44b5-b720-6c0eb916b37c");
994
        UUID abiesPalmaNodeUuid = UUID.fromString("6dfd30dd-e589-493a-b66a-19c4cb374f92");
995

    
996
        UUID pinusNodeUuid = UUID.fromString("5d8e8341-f5e9-4616-96cf-f0351dda42f4");
997

    
998
//        /*
999
//         * Checklist2
1000
//         *  - Campanula
1001
//         *   - Campanula persicifolia
1002
//         * Checklist
1003
//         *  - Abies
1004
//         *   - Abies alba
1005
//         *    - Abieas alba subs. brota
1006
//         *   - Abies palma
1007
//         *  -Pinus
1008
//         */
1009
//        Classification checklist2 = Classification.NewInstance("Checklist2");
1010
//        checklist2.setUuid(checklist2Uuid);
1011
//
1012
//        IBotanicalName campanulaName = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
1013
//        campanulaName.setGenusOrUninomial("Campanula");
1014
//        Taxon campanula = Taxon.NewInstance(campanulaName, null);
1015
//
1016
//        IBotanicalName campanulaPersicifoliaName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
1017
//        campanulaPersicifoliaName.setGenusOrUninomial("Campanula");
1018
//        campanulaPersicifoliaName.setSpecificEpithet("persicifolia");
1019
//        Taxon campanulaPersicifolia = Taxon.NewInstance(campanulaPersicifoliaName, null);
1020
//
1021
//        TaxonNode campanulaNode = checklist2.addChildTaxon(campanula, null, null);
1022
//        campanulaNode.setUuid(campanulaNodeUuid);
1023
//        TaxonNode campanulaPersicifoliaNode = checklist2.addParentChild(campanula, campanulaPersicifolia, null, null);
1024
//        campanulaPersicifoliaNode.setUuid(campanulaPersicifoliaNodeUuid);
1025
//
1026
//        Classification checklist = Classification.NewInstance("Checklist");
1027
//        checklist.setUuid(classificationUuid);
1028
//
1029
//        IBotanicalName abiesName = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
1030
//        abiesName.setGenusOrUninomial("Abies");
1031
//        Taxon abies = Taxon.NewInstance(abiesName, null);
1032
//
1033
//        IBotanicalName abiesAlbaName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
1034
//        abiesAlbaName.setGenusOrUninomial("Abies");
1035
//        abiesAlbaName.setSpecificEpithet("alba");
1036
//        Taxon abiesAlba = Taxon.NewInstance(abiesAlbaName, null);
1037
//
1038
//        IBotanicalName abiesAlbaSubBrotaName = TaxonNameFactory.NewBotanicalInstance(Rank.SUBSPECIES());
1039
//        abiesAlbaSubBrotaName.setGenusOrUninomial("Abies");
1040
//        abiesAlbaSubBrotaName.setSpecificEpithet("alba");
1041
//        abiesAlbaSubBrotaName.setInfraSpecificEpithet("brota");
1042
//        Taxon abiesAlbaSubBrota = Taxon.NewInstance(abiesAlbaSubBrotaName, null);
1043
//
1044
//        IBotanicalName abiesPalmaName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
1045
//        abiesPalmaName.setGenusOrUninomial("Abies");
1046
//        abiesPalmaName.setSpecificEpithet("palma");
1047
//        Taxon abiesPalma = Taxon.NewInstance(abiesPalmaName, null);
1048
//
1049
//        IBotanicalName pinusName = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
1050
//        pinusName.setGenusOrUninomial("Pinus");
1051
//        Taxon pinus = Taxon.NewInstance(pinusName, null);
1052
//
1053
//        TaxonNode abiesNode = checklist.addChildTaxon(abies, null, null);
1054
//        abiesNode.setUuid(abiesNodeUuid);
1055
//        TaxonNode abiesAlbaNode = checklist.addParentChild(abies, abiesAlba, null, null);
1056
//        abiesAlbaNode.setUuid(abiesAlbaNodeUuid);
1057
//        TaxonNode abiesAlbaSubBrotaNode = checklist.addParentChild(abiesAlba, abiesAlbaSubBrota, null, null);
1058
//        abiesAlbaSubBrotaNode.setUuid(abiesAlbaSubBrotaNodeUuid);
1059
//        TaxonNode abiesPalmaNode = checklist.addParentChild(abies, abiesPalma, null, null);
1060
//        abiesPalmaNode.setUuid(abiesPalmaNodeUuid);
1061
//        TaxonNode pinusNode = checklist.addChildTaxon(pinus, null, null);
1062
//        pinusNode.setUuid(pinusNodeUuid);
1063
//
1064
//        taxonService.saveOrUpdate(campanula);
1065
//        taxonService.saveOrUpdate(campanulaPersicifolia);
1066
//        classificationService.saveOrUpdate(checklist2);
1067
//
1068
//        taxonService.saveOrUpdate(abies);
1069
//        taxonService.saveOrUpdate(abiesAlba);
1070
//        taxonService.saveOrUpdate(abiesAlbaSubBrota);
1071
//        taxonService.saveOrUpdate(abiesPalma);
1072
//        taxonService.saveOrUpdate(pinus);
1073
//        classificationService.saveOrUpdate(checklist);
1074
//
1075
//
1076
//        setComplete();
1077
//        endTransaction();
1078
//
1079
//        String fileNameAppendix = "testFindCommonParentNode";
1080
//
1081
//        writeDbUnitDataSetFile(new String[] {
1082
//            "TAXONBASE", "TAXONNAME",
1083
//            "TAXONRELATIONSHIP",
1084
//            "HOMOTYPICALGROUP",
1085
//            "CLASSIFICATION", "TAXONNODE",
1086
//            "LANGUAGESTRING",
1087
//            "HIBERNATE_SEQUENCES" // IMPORTANT!!!
1088
//            },
1089
//            fileNameAppendix );
1090

    
1091
        Classification classification = classificationService.load(classificationUuid);
1092

    
1093
        TaxonNode campanula = taxonNodeService.load(campanulaNodeUuid);
1094
        TaxonNode campanulaPersicifolia = taxonNodeService.load(campanulaPersicifoliaNodeUuid);
1095
        TaxonNode abies = taxonNodeService.load(abiesNodeUuid);
1096
        TaxonNode abiesAlba = taxonNodeService.load(abiesAlbaNodeUuid);
1097
        TaxonNode abiesPalma = taxonNodeService.load(abiesPalmaNodeUuid);
1098
        TaxonNode pinus = taxonNodeService.load(pinusNodeUuid);
1099

    
1100
        //check initial state
1101
        assertTrue(campanula!=null);
1102
        assertTrue(campanulaPersicifolia!=null);
1103
        assertTrue(abies!=null);
1104
        assertTrue(abiesAlba!=null);
1105
        assertTrue(abiesPalma!=null);
1106
        assertTrue(pinus!=null);
1107

    
1108
        TaxonNodeDto classificationRootNodeDto = new TaxonNodeDto(classification.getRootNode());
1109
        TaxonNodeDto campanulaDto = new TaxonNodeDto(campanula);
1110
        TaxonNodeDto campanulaPersicifoliaDto = new TaxonNodeDto(campanulaPersicifolia);
1111
        TaxonNodeDto abiesDto = new TaxonNodeDto(abies);
1112
        TaxonNodeDto abiesAlbaDto = new TaxonNodeDto(abiesAlba);
1113
        TaxonNodeDto abiesPalmaDto = new TaxonNodeDto(abiesPalma);
1114
        TaxonNodeDto pinusDto = new TaxonNodeDto(pinus);
1115

    
1116
        List<TaxonNodeDto> nodes = new ArrayList<>();
1117
        nodes.add(campanulaDto);
1118
        TaxonNodeDto commonParentNodeDto = taxonNodeService.findCommonParentDto(nodes);
1119
        assertEquals(campanulaDto.getUuid(), commonParentNodeDto.getUuid());
1120

    
1121
        nodes = new ArrayList<>();
1122
        nodes.add(campanulaDto);
1123
        nodes.add(campanulaPersicifoliaDto);
1124
        commonParentNodeDto = taxonNodeService.findCommonParentDto(nodes);
1125
        assertEquals(campanulaDto.getUuid(), commonParentNodeDto.getUuid());
1126

    
1127
        nodes = new ArrayList<>();
1128
        nodes.add(campanulaDto);
1129
        nodes.add(abiesAlbaDto);
1130
        commonParentNodeDto = taxonNodeService.findCommonParentDto(nodes);
1131
        assertNull(commonParentNodeDto);
1132

    
1133
        nodes = new ArrayList<>();
1134
        nodes.add(abiesAlbaDto);
1135
        nodes.add(abiesPalmaDto);
1136
        commonParentNodeDto = taxonNodeService.findCommonParentDto(nodes);
1137
        assertEquals(abiesDto.getUuid(), commonParentNodeDto.getUuid());
1138

    
1139
        nodes = new ArrayList<>();
1140
        nodes.add(abiesDto);
1141
        nodes.add(pinusDto);
1142
        commonParentNodeDto = taxonNodeService.findCommonParentDto(nodes);
1143
        assertEquals(classificationRootNodeDto.getUuid(), commonParentNodeDto.getUuid());
1144
    }
1145

    
1146

    
1147
    @Override
1148
//    @Test
1149
    public void createTestDataSet() throws FileNotFoundException {
1150
        UUID checklist2Uuid = UUID.fromString("c6e3a598-3b6c-4ef5-8b01-5bdb3de5a9fd");
1151
        UUID campanulaNodeUuid = UUID.fromString("62fa918d-a1d8-4284-ae4b-93478bde8656");
1152
        UUID campanulaPersicifoliaNodeUuid = UUID.fromString("dce3defa-5123-44a7-8008-0cc9b27461f6");
1153

    
1154
        UUID classificationUuid = UUID.fromString("029b4c07-5903-4dcf-87e8-406ed0e0285f");
1155
        UUID abiesNodeUuid = UUID.fromString("f8306fd3-9825-41bf-94aa-a7b5790b553e");
1156
        UUID abiesAlbaNodeUuid = UUID.fromString("c70f76e5-2dcb-41c5-ae6f-d756e0a0fae0");
1157
        UUID abiesAlbaSubBrotaNodeUuid = UUID.fromString("06d58161-7707-44b5-b720-6c0eb916b37c");
1158
        UUID abiesPalmaNodeUuid = UUID.fromString("6dfd30dd-e589-493a-b66a-19c4cb374f92");
1159

    
1160
        UUID pinusNodeUuid = UUID.fromString("5d8e8341-f5e9-4616-96cf-f0351dda42f4");
1161

    
1162
        /*
1163
         * Checklist2
1164
         *  - Campanula
1165
         *   - Campanula persicifolia
1166
         * Checklist
1167
         *  - Abies
1168
         *   - Abies alba
1169
         *    - Abieas alba subs. brota
1170
         *   - Abies palma
1171
         *  -Pinus
1172
         */
1173
        Classification checklist2 = Classification.NewInstance("Checklist2");
1174
        checklist2.setUuid(checklist2Uuid);
1175

    
1176
        IBotanicalName campanulaName = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
1177
        campanulaName.setGenusOrUninomial("Campanula");
1178
        Taxon campanula = Taxon.NewInstance(campanulaName, null);
1179

    
1180
        IBotanicalName campanulaPersicifoliaName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
1181
        campanulaPersicifoliaName.setGenusOrUninomial("Campanula");
1182
        campanulaPersicifoliaName.setSpecificEpithet("persicifolia");
1183
        Taxon campanulaPersicifolia = Taxon.NewInstance(campanulaPersicifoliaName, null);
1184

    
1185
        TaxonNode campanulaNode = checklist2.addChildTaxon(campanula, null, null);
1186
        campanulaNode.setUuid(campanulaNodeUuid);
1187
        TaxonNode campanulaPersicifoliaNode = checklist2.addParentChild(campanula, campanulaPersicifolia, null, null);
1188
        campanulaPersicifoliaNode.setUuid(campanulaPersicifoliaNodeUuid);
1189

    
1190
        Classification checklist = Classification.NewInstance("Checklist");
1191
        checklist.setUuid(classificationUuid);
1192

    
1193
        IBotanicalName abiesName = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
1194
        abiesName.setGenusOrUninomial("Abies");
1195
        Taxon abies = Taxon.NewInstance(abiesName, null);
1196

    
1197
        IBotanicalName abiesAlbaName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
1198
        abiesAlbaName.setGenusOrUninomial("Abies");
1199
        abiesAlbaName.setSpecificEpithet("alba");
1200
        Taxon abiesAlba = Taxon.NewInstance(abiesAlbaName, null);
1201

    
1202
        IBotanicalName abiesAlbaSubBrotaName = TaxonNameFactory.NewBotanicalInstance(Rank.SUBSPECIES());
1203
        abiesAlbaSubBrotaName.setGenusOrUninomial("Abies");
1204
        abiesAlbaSubBrotaName.setSpecificEpithet("alba");
1205
        abiesAlbaSubBrotaName.setInfraSpecificEpithet("brota");
1206
        Taxon abiesAlbaSubBrota = Taxon.NewInstance(abiesAlbaSubBrotaName, null);
1207

    
1208
        IBotanicalName abiesPalmaName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
1209
        abiesPalmaName.setGenusOrUninomial("Abies");
1210
        abiesPalmaName.setSpecificEpithet("palma");
1211
        Taxon abiesPalma = Taxon.NewInstance(abiesPalmaName, null);
1212

    
1213
        IBotanicalName pinusName = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS());
1214
        pinusName.setGenusOrUninomial("Pinus");
1215
        Taxon pinus = Taxon.NewInstance(pinusName, null);
1216

    
1217
        TaxonNode abiesNode = checklist.addChildTaxon(abies, null, null);
1218
        abiesNode.setUuid(abiesNodeUuid);
1219
        TaxonNode abiesAlbaNode = checklist.addParentChild(abies, abiesAlba, null, null);
1220
        abiesAlbaNode.setUuid(abiesAlbaNodeUuid);
1221
        TaxonNode abiesAlbaSubBrotaNode = checklist.addParentChild(abiesAlba, abiesAlbaSubBrota, null, null);
1222
        abiesAlbaSubBrotaNode.setUuid(abiesAlbaSubBrotaNodeUuid);
1223
        TaxonNode abiesPalmaNode = checklist.addParentChild(abies, abiesPalma, null, null);
1224
        abiesPalmaNode.setUuid(abiesPalmaNodeUuid);
1225
        TaxonNode pinusNode = checklist.addChildTaxon(pinus, null, null);
1226
        pinusNode.setUuid(pinusNodeUuid);
1227

    
1228
        taxonService.saveOrUpdate(campanula);
1229
        taxonService.saveOrUpdate(campanulaPersicifolia);
1230
        classificationService.saveOrUpdate(checklist2);
1231

    
1232
        taxonService.saveOrUpdate(abies);
1233
        taxonService.saveOrUpdate(abiesAlba);
1234
        taxonService.saveOrUpdate(abiesAlbaSubBrota);
1235
        taxonService.saveOrUpdate(abiesPalma);
1236
        taxonService.saveOrUpdate(pinus);
1237
        classificationService.saveOrUpdate(checklist);
1238

    
1239

    
1240
        setComplete();
1241
        endTransaction();
1242

    
1243
        String fileNameAppendix = "testFindCommonParentNode";
1244

    
1245
        writeDbUnitDataSetFile(new String[] {
1246
            "TAXONBASE", "TAXONNAME",
1247
            "TAXONRELATIONSHIP",
1248
            "HOMOTYPICALGROUP",
1249
            "CLASSIFICATION", "TAXONNODE",
1250
            "LANGUAGESTRING",
1251
            "HIBERNATE_SEQUENCES" // IMPORTANT!!!
1252
            },
1253
            fileNameAppendix, true );
1254
    }
1255

    
1256

    
1257
}
(26-26/37)