Project

General

Profile

Download (23.4 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.assertNotNull;
14
import static org.junit.Assert.assertNull;
15
import static org.junit.Assert.assertTrue;
16

    
17
import java.io.FileNotFoundException;
18
import java.util.ArrayList;
19
import java.util.Arrays;
20
import java.util.Collections;
21
import java.util.Comparator;
22
import java.util.List;
23
import java.util.Set;
24
import java.util.UUID;
25
import java.util.stream.Collectors;
26

    
27
import org.apache.commons.lang.StringUtils;
28
import org.apache.log4j.Logger;
29
import org.junit.Assert;
30
import org.junit.Before;
31
import org.junit.Test;
32
import org.unitils.dbunit.annotation.DataSet;
33
import org.unitils.spring.annotation.SpringBeanByType;
34

    
35
import eu.etaxonomy.cdm.api.service.config.SubtreeCloneConfigurator;
36
import eu.etaxonomy.cdm.api.service.dto.GroupedTaxonDTO;
37
import eu.etaxonomy.cdm.model.name.IBotanicalName;
38
import eu.etaxonomy.cdm.model.name.Rank;
39
import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
40
import eu.etaxonomy.cdm.model.reference.Reference;
41
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
42
import eu.etaxonomy.cdm.model.taxon.Classification;
43
import eu.etaxonomy.cdm.model.taxon.Taxon;
44
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
45
import eu.etaxonomy.cdm.model.taxon.TaxonNodeByNameComparator;
46
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
47
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
48
import eu.etaxonomy.cdm.persistence.dao.reference.IReferenceDao;
49
import eu.etaxonomy.cdm.persistence.dao.taxon.IClassificationDao;
50
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
51

    
52
/**
53
 * @author n.hoffmann
54
 * @since Sep 22, 2009
55
 */
56
public class ClassificationServiceImplTest extends CdmTransactionalIntegrationTest{
57

    
58
    private static final Logger logger = Logger.getLogger(ClassificationServiceImplTest.class);
59

    
60
    @SpringBeanByType
61
    private IClassificationService service;
62

    
63
    @SpringBeanByType
64
    private ITaxonService taxonService;
65

    
66
    @SpringBeanByType
67
    private ITaxonNodeService taxonNodeService;
68

    
69
    @SpringBeanByType
70
    private IClassificationService classificationService;
71

    
72
    @SpringBeanByType
73
    private IClassificationDao classificationDao;
74

    
75
    @SpringBeanByType
76
    private IReferenceDao referenceDao;
77

    
78
    private static final List<String> NODE_INIT_STRATEGY = Arrays.asList(new String[]{
79
            "childNodes",
80
            "childNodes.taxon",
81
            "childNodes.taxon.name",
82
            "taxon.sec",
83
            "taxon.name.*"
84
            });
85

    
86
    private static final UUID CLASSIFICATION_UUID = UUID.fromString("6c2bc8d9-ee62-4222-be89-4a8e31770878");
87

    
88
    private Comparator<? super TaxonNode> taxonNodeComparator;
89

    
90
    private boolean includeUnpublished;
91

    
92
    @Before
93
    public void setUp() {
94
        includeUnpublished = true;
95
    }
96

    
97
    @Test
98
    public final void testLoadTaxonNodeByTaxon() {
99
		logger.warn("testLoadTaxonNodeByTaxon not yet implemented");
100
    }
101

    
102
    @Test
103
    public final void testLoadTaxonNode() {
104
		logger.warn("testLoadTaxonNode not yet implemented");
105
    }
106

    
107
    @Test
108
    @DataSet
109
    public final void testTaxonNodeByNameComparator() {
110
        taxonNodeComparator = new TaxonNodeByNameComparator();
111

    
112
        List<TaxonNode> nodes = service.getAllNodes();
113
        Collections.sort(nodes, taxonNodeComparator);
114

    
115
//        logger.setLevel(Level.DEBUG);
116
        if(logger.isDebugEnabled()){
117
            logger.debug("-------------");
118
	        for (TaxonNode node: nodes){
119
	        	if (node!= null && node.getTaxon() != null && node.getTaxon().getName()!= null){
120
	                logger.debug(node.getTaxon().getName().getTitleCache() + " [" + node.getTaxon().getName().getRank() + "]");
121
	        	}
122
	        }
123
        }
124

    
125
        Assert.assertEquals("Acacia N.Jacobsen, Bastm. & Yuji Sasaki", nodes.get(1).getTaxon().getName().getTitleCache());
126
        Assert.assertEquals("Acacia subgen. Aculeiferum Pedley", nodes.get(2).getTaxon().getName().getTitleCache());
127
        Assert.assertEquals("Acacia sect. Botrycephalae Yuji Sasaki", nodes.get(3).getTaxon().getName().getTitleCache());
128
        Assert.assertEquals("Acacia subgen. Phyllodineae N.Jacobsen, Bastm. & Yuji Sasaki", nodes.get(4).getTaxon().getName().getTitleCache());
129
        Assert.assertEquals("Acacia acicularis Willd.", nodes.get(5).getTaxon().getName().getTitleCache());
130
        Assert.assertEquals("×Acacia acicularis Willd. subsp. acicularis", nodes.get(6).getTaxon().getName().getTitleCache());
131
        Assert.assertEquals("Acacia cuspidifolia Maslin", nodes.get(7).getTaxon().getName().getTitleCache());
132
        Assert.assertEquals("Acacia mearnsii Benth", nodes.get(8).getTaxon().getName().getTitleCache());
133

    
134
        /*
135
        ((TaxonNodeByNameComparator)taxonNodeComparator).setSortInfraGenericFirst(false);
136
        Collections.sort(taxonNodes, taxonNodeComparator);
137

    
138
        Assert.assertEquals("Acacia cuspidifolia Maslin", taxonNodes.get(0).getTaxon().getName().getTitleCache());
139
        System.err.println();
140
        for (TaxonNode node: taxonNodes){
141
            System.err.println(node.getTaxon().getName().getTitleCache() );
142
            /*for (TaxonNode child : node.getChildNodes()){
143
                System.err.println(child.getTaxon().getName().getTitleCache());
144
            }
145
        }*/
146
//		fail("Not yet implemented");
147
    }
148

    
149
    @Test
150
    @DataSet
151
    public final void testListRankSpecificRootNodes(){
152
        Classification classification = service.find(UUID.fromString("6c2bc8d9-ee62-4222-be89-4a8e31770878"));
153

    
154
        // classification, see  createTestDataSet()
155

    
156
        // ClassificationRoot
157
        // |- Acacia N.Jacobsen, Bastm. & Yuji Sasaki                          [Genus]
158
        // |  |-- Acacia subg. Aculeiferum Pedley                              [Subgenus]
159
        // |  |-- Acacia subg. Phyllodineae N.Jacobsen, Bastm. & Yuji Sasaki   [Subgenus]
160
        // |  |  |-- Acacia sect. Botrycephalae Yuji Sasaki                    [Section (Botany)]
161
        // |  |------- Acacia cuspidifolia Maslin                              [Species]
162
        // |  |------- Acacia mearnsii Benth                                   [Species]
163
        // |---------- Acacia acicularis Willd.                                [Species]
164
        //             |-- ×Acacia acicularis Willd. subsp. acicularis         [Subspecies]
165
        //
166
        // for more historic Acacia taxonomy see http://lexikon.freenet.de/Akazien
167

    
168
        List<TaxonNode> taxonNodes = service.listRankSpecificRootNodes(null, null, null, includeUnpublished, null, null, NODE_INIT_STRATEGY);
169
        Assert.assertEquals(2, taxonNodes.size());
170

    
171
        taxonNodes = service.listRankSpecificRootNodes(classification, null, null, includeUnpublished, null, null, NODE_INIT_STRATEGY);
172
        Assert.assertEquals(2, taxonNodes.size());
173

    
174
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, null, null, NODE_INIT_STRATEGY);
175
        Assert.assertEquals(4, taxonNodes.size());
176

    
177
        // also test if the pager works
178
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 10, 0, NODE_INIT_STRATEGY);
179
        Assert.assertEquals(4, taxonNodes.size());
180
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 2, 0, NODE_INIT_STRATEGY);
181
        Assert.assertEquals(2, taxonNodes.size());
182
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 2, 1, NODE_INIT_STRATEGY);
183
        Assert.assertEquals(2, taxonNodes.size());
184
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 2, 2, NODE_INIT_STRATEGY);
185
        Assert.assertEquals(0, taxonNodes.size());
186

    
187
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SPECIES(), includeUnpublished, null, null, NODE_INIT_STRATEGY);
188
        Assert.assertEquals(3, taxonNodes.size());
189

    
190
        // also test if the pager works
191
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SPECIES(), includeUnpublished, 10, 0, NODE_INIT_STRATEGY);
192
        Assert.assertEquals(3, taxonNodes.size());
193
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SPECIES(), includeUnpublished, 2, 1, NODE_INIT_STRATEGY);
194
        Assert.assertEquals(1, taxonNodes.size());
195
    }
196

    
197
    @Test
198
    @DataSet
199
    public final void testListRankSpecificRootNodes_withSubtree(){
200
        Classification classification = service.find(UUID.fromString("6c2bc8d9-ee62-4222-be89-4a8e31770878"));
201

    
202
        // classification, see  createTestDataSet()
203

    
204
        // ClassificationRoot
205
        // |- Acacia N.Jacobsen, Bastm. & Yuji Sasaki                          [Genus]
206
        // |  |-- Acacia subg. Aculeiferum Pedley                              [Subgenus]
207
        // |  |-- Acacia subg. Phyllodineae N.Jacobsen, Bastm. & Yuji Sasaki   [Subgenus]
208
        // |  |  |-- Acacia sect. Botrycephalae Yuji Sasaki                    [Section (Botany)]
209
        // |  |------- Acacia cuspidifolia Maslin                              [Species]
210
        // |  |------- Acacia mearnsii Benth                                   [Species]
211
        // |---------- Acacia acicularis Willd.                                [Species]
212
        //             |-- ×Acacia acicularis Willd. subsp. acicularis         [Subspecies]
213
        //
214
        // for more historic Acacia taxonomy see http://lexikon.freenet.de/Akazien
215

    
216
        TaxonNode subtree = taxonNodeService.find(UUID.fromString("bcdf945f-1f02-423e-883d-fe89e0af93e4"));
217

    
218

    
219
        List<TaxonNode> taxonNodes = service.listRankSpecificRootNodes(null, subtree, null, includeUnpublished, null, null, NODE_INIT_STRATEGY);
220
        Assert.assertEquals(2, taxonNodes.size());
221

    
222
        taxonNodes = service.listRankSpecificRootNodes(classification, null, null, includeUnpublished, null, null, NODE_INIT_STRATEGY);
223
        Assert.assertEquals(2, taxonNodes.size());
224

    
225
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, null, null, NODE_INIT_STRATEGY);
226
        Assert.assertEquals(4, taxonNodes.size());
227

    
228
        // also test if the pager works
229
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 10, 0, NODE_INIT_STRATEGY);
230
        Assert.assertEquals(4, taxonNodes.size());
231
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 2, 0, NODE_INIT_STRATEGY);
232
        Assert.assertEquals(2, taxonNodes.size());
233
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 2, 1, NODE_INIT_STRATEGY);
234
        Assert.assertEquals(2, taxonNodes.size());
235
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 2, 2, NODE_INIT_STRATEGY);
236
        Assert.assertEquals(0, taxonNodes.size());
237

    
238
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SPECIES(), includeUnpublished, null, null, NODE_INIT_STRATEGY);
239
        Assert.assertEquals(3, taxonNodes.size());
240

    
241
        // also test if the pager works
242
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SPECIES(), includeUnpublished, 10, 0, NODE_INIT_STRATEGY);
243
        Assert.assertEquals(3, taxonNodes.size());
244
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SPECIES(), includeUnpublished, 2, 1, NODE_INIT_STRATEGY);
245
        Assert.assertEquals(1, taxonNodes.size());
246
    }
247

    
248
    @Test
249
    public final void testSetDaoIClassificationDao() {
250
        Assert.assertNotNull(service);
251
    }
252

    
253
    @Test
254
    @DataSet
255
    public final void testGroupTaxaByHigherTaxon(){
256

    
257
        Rank minRank = Rank.GENUS();
258
        Rank maxRank = Rank.KINGDOM();
259
        List<UUID> taxonUuids = new ArrayList<>();
260
        taxonUuids.add(acacia_acicularis_uuid);
261
        taxonUuids.add(acacia_cuspidifolia_uuid);
262
        taxonUuids.add(acacia_sect_botrycephalae_uuid);
263

    
264
        List<GroupedTaxonDTO> result = this.service.groupTaxaByHigherTaxon(taxonUuids, CLASSIFICATION_UUID, minRank, maxRank);
265
        System.out.println(result);
266
        Assert.assertEquals(3, result.size());
267
        //acacia_acicularis_uuid  //is a root taxon with no parents
268
        Assert.assertEquals(acacia_acicularis_uuid, result.get(0).getTaxonUuid());
269
        Assert.assertNull(result.get(0).getGroupTaxonUuid());
270
        Assert.assertTrue(StringUtils.isBlank(result.get(0).getGroupTaxonName()));
271
        //acacia_cuspidifolia_uuid
272
        Assert.assertEquals(acacia_cuspidifolia_uuid, result.get(1).getTaxonUuid());
273
        Assert.assertNotNull(result.get(1).getGroupTaxonUuid());
274
        Assert.assertFalse(StringUtils.isBlank(result.get(1).getGroupTaxonName()));
275
        //acacia_sect_botrycephalae_uuid
276
        Assert.assertEquals(acacia_sect_botrycephalae_uuid, result.get(2).getTaxonUuid());
277
        Assert.assertNotNull(result.get(2).getGroupTaxonUuid());
278
        Assert.assertFalse(StringUtils.isBlank(result.get(2).getGroupTaxonName()));
279
    }
280

    
281
    @Test
282
    @DataSet
283
    public final void testCloneClassification(){
284

    
285
    	Classification originalClassification = classificationDao.load(CLASSIFICATION_UUID);
286

    
287
    	SubtreeCloneConfigurator config = SubtreeCloneConfigurator.NewBaseInstance(
288
    	        originalClassification.getRootNode().getUuid(), "Cloned classification");
289

    
290
    	Classification classificatonClone = (Classification) classificationService.cloneClassification(config).getCdmEntity();
291

    
292
    	assertEquals("# of direct children does not match", originalClassification.getChildNodes().size(), classificatonClone.getChildNodes().size());
293
		assertEquals("# of all nodes does not match", originalClassification.getAllNodes().size(), classificatonClone.getAllNodes().size());
294

    
295
		Set<UUID> originalTaxonSecUuids = originalClassification.getAllNodes().stream().map(tn -> tn.getTaxon().getSec().getUuid()).collect(Collectors.toSet());
296
    	for (TaxonNode clonedTaxonNode : classificatonClone.getChildNodes()) {
297
		    //test no reuse of taxon
298
		    Taxon clonedTaxon = clonedTaxonNode.getTaxon();
299
		    TaxonNode originalNode = originalClassification.getNode(clonedTaxon);
300
    		assertNull(originalNode);
301

    
302
    		//check relationship
303
    		assertEquals(0, clonedTaxon.getRelationsFromThisTaxon().size());
304

    
305
    		//test taxon sec
306
    		assertTrue(originalTaxonSecUuids.contains(clonedTaxon.getSec().getUuid()));
307
    	}
308
    	commitAndStartNewTransaction();
309

    
310
    	//test reuse taxon
311
    	config.setReuseTaxa(true);
312
    	classificatonClone = (Classification) classificationService.cloneClassification(config).getCdmEntity();
313
    	assertEquals("# of direct children does not match", originalClassification.getChildNodes().size(), classificatonClone.getChildNodes().size());
314
    	originalTaxonSecUuids = originalClassification.getAllNodes().stream().map(tn -> tn.getTaxon().getSec().getUuid()).collect(Collectors.toSet());
315
        for (TaxonNode taxonNode : classificatonClone.getChildNodes()) {
316
            //test no reuse of taxon
317
            Taxon clonedTaxon = taxonNode.getTaxon();
318
            TaxonNode originalNode = originalClassification.getNode(clonedTaxon);
319
            assertNotNull(originalNode);
320
            Taxon originalTaxon = originalNode.getTaxon();
321
            assertNotNull(originalTaxon);
322

    
323
            //check relationship
324
            assertEquals(0, clonedTaxon.getRelationsFromThisTaxon().size());
325

    
326
            //test taxon sec
327
            assertEquals(originalTaxon.getSec().getUuid(), clonedTaxon.getSec().getUuid());
328
        }
329
        commitAndStartNewTransaction();
330

    
331
        config.setReuseTaxa(false);  //reset
332
	    config.setRelationTypeToOldTaxon(TaxonRelationshipType.CONGRUENT_TO());
333
	    Reference sec = referenceDao.findByUuid(UUID.fromString("719d136b-409e-40d0-9561-46f6999465b4"));
334
	    config.setTaxonSecundumUuid(sec.getUuid());
335
	    classificatonClone = (Classification) classificationService.cloneClassification(config).getCdmEntity();
336
	    originalTaxonSecUuids = originalClassification.getAllNodes().stream().map(tn -> tn.getTaxon().getSec().getUuid()).collect(Collectors.toSet());
337
        for (TaxonNode taxonNode : classificatonClone.getChildNodes()) {
338
            //test no reuse of taxon
339
            Taxon clonedTaxon = taxonNode.getTaxon();
340
            TaxonNode originalNode = originalClassification.getNode(clonedTaxon);
341
            assertNull(originalNode);
342

    
343
            //check relationship
344
            TaxonRelationship relShip = clonedTaxon.getRelationsFromThisTaxon().iterator().next();
345
            Taxon relatedTaxon = relShip.getToTaxon();
346
            Taxon relatedOriginalTaxon = originalClassification.getNode(relatedTaxon).getTaxon();
347
            assertEquals(relatedOriginalTaxon.getName(), clonedTaxon.getName());
348
            assertTrue(relShip.getType().equals(TaxonRelationshipType.CONGRUENT_TO()));
349

    
350
            //test taxon sec
351
            assertEquals(relatedOriginalTaxon.getSec().getUuid(), clonedTaxon.getSec().getUuid());
352
        }
353
        commitAndStartNewTransaction();
354

    
355
    }
356

    
357
    private UUID acacia_acicularis_uuid  = UUID.fromString("90ad2d8f-19a9-4a10-bab3-7d1de5ce1968");
358
    private UUID acacia_cuspidifolia_uuid = UUID.fromString("94123e4d-da49-4ed0-9d59-f52a9f7a3618");
359
    private UUID acacia_sect_botrycephalae_uuid = UUID.fromString("2c73a166-35d1-483d-b8e8-209214cb6193");
360

    
361
    @Override
362
//    @Test
363
    public void createTestDataSet() throws FileNotFoundException {
364

    
365
        // ClassificationRoot
366
        // |- Acacia N.Jacobsen, Bastm. & Yuji Sasaki                          [Genus]
367
        // |  |-- Acacia subg. Aculeiferum Pedley                              [Subgenus]
368
        // |  |-- Acacia subg. Phyllodineae N.Jacobsen, Bastm. & Yuji Sasaki   [Subgenus]
369
        // |  |  |-- Acacia sect. Botrycephalae Yuji Sasaki                    [Section (Botany)]
370
        // |  |------- Acacia cuspidifolia Maslin                              [Species]
371
        // |  |------- Acacia mearnsii Benth                                   [Species]
372
        // |---------- Acacia acicularis Willd.                                [Species]
373
        //             |-- ×Acacia acicularis Willd. subsp. acicularis         [Subspecies]
374
        //
375
        // for more historic Acacia taxonomy see http://lexikon.freenet.de/Akazien
376

    
377
        // 1. create the entities   and save them
378
        Classification classification = Classification.NewInstance("Acacia Classification");
379
        classification.setUuid(CLASSIFICATION_UUID);
380
        classificationDao.save(classification);
381

    
382
        Reference sec = ReferenceFactory.newBook();
383
        sec.setTitleCache("Sp. Pl.", true);
384
        referenceDao.save(sec);
385

    
386
        IBotanicalName acacia_n = TaxonNameFactory.NewBotanicalInstance(Rank.GENUS(), "Acacia", null, null, null, null, sec, null, null);
387
        acacia_n.setAuthorshipCache("N.Jacobsen, Bastm. & Yuji Sasaki", true);
388
        Taxon acacia_t = Taxon.NewInstance(acacia_n, sec);
389
        acacia_t.setUuid(UUID.fromString("2fc779ee-7a9d-4586-92ba-1cd774ac77f0"));
390

    
391
        IBotanicalName acacia_subg_aculeiferum_n = TaxonNameFactory.NewBotanicalInstance(Rank.SUBGENUS(), "Acacia", "Aculeiferum", null, null, null, sec, null, null);
392
        acacia_subg_aculeiferum_n.setAuthorshipCache("Pedley", true);
393
        Taxon acacia_subg_aculeiferum_t = Taxon.NewInstance(acacia_subg_aculeiferum_n, sec);
394
        acacia_subg_aculeiferum_t.setUuid(UUID.fromString("169fea08-6b7a-4315-b111-a774c7fafe30"));
395

    
396
        IBotanicalName acacia_subg_phyllodineae_n = TaxonNameFactory.NewBotanicalInstance(Rank.SUBGENUS(), "Acacia", "Phyllodineae", null, null, null, sec, null, null);
397
        acacia_subg_phyllodineae_n.setAuthorshipCache("N.Jacobsen, Bastm. & Yuji Sasaki", true);
398
        Taxon acacia_subg_phyllodineae_t = Taxon.NewInstance(acacia_subg_phyllodineae_n, sec);
399
        acacia_subg_phyllodineae_t.setUuid(UUID.fromString("a9da5d43-517e-4ca5-a490-b6a5cd637e9e"));
400

    
401
        IBotanicalName acacia_setc_botrycephalae_n = TaxonNameFactory.NewBotanicalInstance(Rank.SECTION_BOTANY(), "Acacia", "Botrycephalae", null, null, null, sec, null, null);
402
        acacia_setc_botrycephalae_n.setAuthorshipCache("Yuji Sasaki", true);
403
        Taxon acacia_sect_botrycephalae_t = Taxon.NewInstance(acacia_setc_botrycephalae_n, sec);
404
        acacia_sect_botrycephalae_t.setUuid(acacia_sect_botrycephalae_uuid);
405

    
406
        IBotanicalName acacia_cuspidifolia_n = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES(), "Acacia", null,"cuspidifolia", null, null, sec, null, null);
407
        acacia_cuspidifolia_n.setAuthorshipCache("Maslin", true);
408
        Taxon acacia_cuspidifolia_t = Taxon.NewInstance(acacia_cuspidifolia_n, sec);
409
        acacia_cuspidifolia_t.setUuid(acacia_cuspidifolia_uuid);
410

    
411
        IBotanicalName acacia_mearnsii_n = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES(), "Acacia", null,"mearnsii", null, null, sec, null, null);
412
        acacia_mearnsii_n.setAuthorshipCache("Benth", true);
413
        Taxon acacia_mearnsii_t = Taxon.NewInstance(acacia_mearnsii_n, sec);
414
        acacia_mearnsii_t.setUuid(UUID.fromString("2e55dc01-71f5-4d42-9bb0-a2448e46dd18"));
415

    
416
        IBotanicalName acacia_acicularis_n = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES(), "Acacia", null,"acicularis", null, null, sec, null, null);
417
        acacia_acicularis_n.setAuthorshipCache("Willd.", true);
418
        Taxon acacia_acicularis_t = Taxon.NewInstance(acacia_acicularis_n, sec);
419
        acacia_acicularis_t.setUuid(acacia_acicularis_uuid);
420

    
421
        IBotanicalName xacacia_acicularis_n = TaxonNameFactory.NewBotanicalInstance(Rank.SUBSPECIES(), "Acacia", null,"acicularis", "acicularis", null, sec, null, null);
422
        xacacia_acicularis_n.setAuthorshipCache("Willd.", true);
423
        xacacia_acicularis_n.setMonomHybrid(true);
424
        System.out.println(xacacia_acicularis_n.getTitleCache());
425
        Taxon xacacia_acicularis_t = Taxon.NewInstance(xacacia_acicularis_n, sec);
426
        xacacia_acicularis_t.setUuid(UUID.fromString("04d125a6-6adf-4900-97ff-82729618086a"));
427

    
428
        TaxonNode acacia_tn = classification.addChildTaxon(acacia_t, sec, null);
429
        TaxonNode acacia_subg_phyllodineae_tn = acacia_tn.addChildTaxon(acacia_subg_phyllodineae_t, sec, null);
430
        acacia_subg_phyllodineae_tn.addChildTaxon(acacia_sect_botrycephalae_t, sec, null);
431
        acacia_tn.addChildTaxon(acacia_subg_aculeiferum_t, sec, null);
432
        acacia_tn.addChildTaxon(acacia_mearnsii_t, sec, null).addChildTaxon(xacacia_acicularis_t, sec, null);
433
        acacia_tn.addChildTaxon(acacia_cuspidifolia_t, sec, null);
434
        classification.addChildTaxon(acacia_acicularis_t, sec, null);
435

    
436
        classificationDao.save(classification);
437

    
438
        // 2. end the transaction so that all data is actually written to the db
439
        setComplete();
440
        endTransaction();
441

    
442
        // use the fileNameAppendix if you are creating a data set file which need to be named differently
443
        // from the standard name. For example if a single test method needs different data then the other
444
        // methods the test class you may want to set the fileNameAppendix when creating the data for this method.
445
        String fileNameAppendix = null;
446

    
447
        // 3.
448
        writeDbUnitDataSetFile(new String[] {
449
            "TAXONBASE", "TAXONNAME",
450
            "REFERENCE",
451
            "CLASSIFICATION", "TAXONNODE",
452
            "LANGUAGESTRING", "HOMOTYPICALGROUP",
453
            "HIBERNATE_SEQUENCES" // IMPORTANT!!!
454
            },
455
            fileNameAppendix, true );
456
    }
457
}
(4-4/40)