Project

General

Profile

Download (21 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.assertNull;
14

    
15
import java.io.FileNotFoundException;
16
import java.util.ArrayList;
17
import java.util.Arrays;
18
import java.util.Collections;
19
import java.util.Comparator;
20
import java.util.List;
21
import java.util.Set;
22
import java.util.UUID;
23

    
24
import org.apache.commons.lang.StringUtils;
25
import org.apache.log4j.Logger;
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.dto.GroupedTaxonDTO;
33
import eu.etaxonomy.cdm.model.name.IBotanicalName;
34
import eu.etaxonomy.cdm.model.name.Rank;
35
import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
36
import eu.etaxonomy.cdm.model.reference.Reference;
37
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
38
import eu.etaxonomy.cdm.model.taxon.Classification;
39
import eu.etaxonomy.cdm.model.taxon.Taxon;
40
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
41
import eu.etaxonomy.cdm.model.taxon.TaxonNodeByNameComparator;
42
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
43
import eu.etaxonomy.cdm.persistence.dao.reference.IReferenceDao;
44
import eu.etaxonomy.cdm.persistence.dao.taxon.IClassificationDao;
45
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
46

    
47
/**
48
 * @author n.hoffmann
49
 * @since Sep 22, 2009
50
 */
51
public class ClassificationServiceImplTest extends CdmTransactionalIntegrationTest{
52

    
53
    private static final Logger logger = Logger.getLogger(ClassificationServiceImplTest.class);
54

    
55
    @SpringBeanByType
56
    private IClassificationService service;
57

    
58
    @SpringBeanByType
59
    private ITaxonService taxonService;
60

    
61
    @SpringBeanByType
62
    private ITaxonNodeService taxonNodeService;
63

    
64
    @SpringBeanByType
65
    private IClassificationService classificationService;
66

    
67
    @SpringBeanByType
68
    private IClassificationDao classificationDao;
69

    
70
    @SpringBeanByType
71
    private IReferenceDao referenceDao;
72

    
73
    private static final List<String> NODE_INIT_STRATEGY = Arrays.asList(new String[]{
74
            "childNodes",
75
            "childNodes.taxon",
76
            "childNodes.taxon.name",
77
            "taxon.sec",
78
            "taxon.name.*"
79
            });
80

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

    
83
    private Comparator<? super TaxonNode> taxonNodeComparator;
84

    
85
    private boolean includeUnpublished;
86

    
87
    @Before
88
    public void setUp() {
89
        includeUnpublished = true;
90
    }
91

    
92

    
93
    /**
94
     * Test method for {@link eu.etaxonomy.cdm.api.service.ClassificationServiceImpl#loadTaxonNodeByTaxon(eu.etaxonomy.cdm.model.taxon.Taxon, java.util.UUID, java.util.List)}.
95
     */
96
    @Test
97
    public final void testLoadTaxonNodeByTaxon() {
98
		logger.warn("testLoadTaxonNodeByTaxon not yet implemented");
99
    }
100

    
101
    /**
102
     * Test method for {@link eu.etaxonomy.cdm.api.service.ClassificationServiceImpl#loadTaxonNode(eu.etaxonomy.cdm.model.taxon.TaxonNode, java.util.List)}.
103
     */
104
    @Test
105
    public final void testLoadTaxonNode() {
106
		logger.warn("testLoadTaxonNode not yet implemented");
107
    }
108

    
109

    
110
    @Test
111
    @DataSet
112
    public final void testTaxonNodeByNameComparator() {
113
        taxonNodeComparator = new TaxonNodeByNameComparator();
114

    
115
        List<TaxonNode> nodes = service.getAllNodes();
116
        Collections.sort(nodes, taxonNodeComparator);
117

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

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

    
137
        /*
138
        ((TaxonNodeByNameComparator)taxonNodeComparator).setSortInfraGenericFirst(false);
139
        Collections.sort(taxonNodes, taxonNodeComparator);
140

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

    
151
    }
152

    
153

    
154
    @Test
155
    @DataSet
156
    public final void testListRankSpecificRootNodes(){
157
        Classification classification = service.find(UUID.fromString("6c2bc8d9-ee62-4222-be89-4a8e31770878"));
158

    
159
        // classification, see  createTestDataSet()
160

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

    
173
        List<TaxonNode> taxonNodes = service.listRankSpecificRootNodes(null, null, null, includeUnpublished, null, null, NODE_INIT_STRATEGY);
174
        Assert.assertEquals(2, taxonNodes.size());
175

    
176
        taxonNodes = service.listRankSpecificRootNodes(classification, null, null, includeUnpublished, null, null, NODE_INIT_STRATEGY);
177
        Assert.assertEquals(2, taxonNodes.size());
178

    
179
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, null, null, NODE_INIT_STRATEGY);
180
        Assert.assertEquals(4, taxonNodes.size());
181

    
182
        // also test if the pager works
183
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 10, 0, NODE_INIT_STRATEGY);
184
        Assert.assertEquals(4, taxonNodes.size());
185
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 2, 0, NODE_INIT_STRATEGY);
186
        Assert.assertEquals(2, taxonNodes.size());
187
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 2, 1, NODE_INIT_STRATEGY);
188
        Assert.assertEquals(2, taxonNodes.size());
189
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 2, 2, NODE_INIT_STRATEGY);
190
        Assert.assertEquals(0, taxonNodes.size());
191

    
192
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SPECIES(), includeUnpublished, null, null, NODE_INIT_STRATEGY);
193
        Assert.assertEquals(3, taxonNodes.size());
194

    
195
        // also test if the pager works
196
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SPECIES(), includeUnpublished, 10, 0, NODE_INIT_STRATEGY);
197
        Assert.assertEquals(3, taxonNodes.size());
198
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SPECIES(), includeUnpublished, 2, 1, NODE_INIT_STRATEGY);
199
        Assert.assertEquals(1, taxonNodes.size());
200

    
201

    
202
    }
203

    
204
    @Test
205
    @DataSet
206
    public final void testListRankSpecificRootNodes_withSubtree(){
207
        Classification classification = service.find(UUID.fromString("6c2bc8d9-ee62-4222-be89-4a8e31770878"));
208

    
209
        // classification, see  createTestDataSet()
210

    
211
        // ClassificationRoot
212
        // |- Acacia N.Jacobsen, Bastm. & Yuji Sasaki                          [Genus]
213
        // |  |-- Acacia subg. Aculeiferum Pedley                              [Subgenus]
214
        // |  |-- Acacia subg. Phyllodineae N.Jacobsen, Bastm. & Yuji Sasaki   [Subgenus]
215
        // |  |  |-- Acacia sect. Botrycephalae Yuji Sasaki                    [Section (Botany)]
216
        // |  |------- Acacia cuspidifolia Maslin                              [Species]
217
        // |  |------- Acacia mearnsii Benth                                   [Species]
218
        // |---------- Acacia acicularis Willd.                                [Species]
219
        //             |-- ×Acacia acicularis Willd. subsp. acicularis         [Subspecies]
220
        //
221
        // for more historic Acacia taxonomy see http://lexikon.freenet.de/Akazien
222

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

    
225

    
226
        List<TaxonNode> taxonNodes = service.listRankSpecificRootNodes(null, subtree, null, includeUnpublished, null, null, NODE_INIT_STRATEGY);
227
        Assert.assertEquals(2, taxonNodes.size());
228

    
229
        taxonNodes = service.listRankSpecificRootNodes(classification, null, null, includeUnpublished, null, null, NODE_INIT_STRATEGY);
230
        Assert.assertEquals(2, taxonNodes.size());
231

    
232
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, null, null, NODE_INIT_STRATEGY);
233
        Assert.assertEquals(4, taxonNodes.size());
234

    
235
        // also test if the pager works
236
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 10, 0, NODE_INIT_STRATEGY);
237
        Assert.assertEquals(4, taxonNodes.size());
238
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 2, 0, NODE_INIT_STRATEGY);
239
        Assert.assertEquals(2, taxonNodes.size());
240
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 2, 1, NODE_INIT_STRATEGY);
241
        Assert.assertEquals(2, taxonNodes.size());
242
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SECTION_BOTANY(), includeUnpublished, 2, 2, NODE_INIT_STRATEGY);
243
        Assert.assertEquals(0, taxonNodes.size());
244

    
245
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SPECIES(), includeUnpublished, null, null, NODE_INIT_STRATEGY);
246
        Assert.assertEquals(3, taxonNodes.size());
247

    
248
        // also test if the pager works
249
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SPECIES(), includeUnpublished, 10, 0, NODE_INIT_STRATEGY);
250
        Assert.assertEquals(3, taxonNodes.size());
251
        taxonNodes = service.listRankSpecificRootNodes(classification, null, Rank.SPECIES(), includeUnpublished, 2, 1, NODE_INIT_STRATEGY);
252
        Assert.assertEquals(1, taxonNodes.size());
253
    }
254

    
255
    /**
256
     * Test method for {@link eu.etaxonomy.cdm.api.service.ClassificationServiceImpl#setDao(eu.etaxonomy.cdm.persistence.dao.taxon.IClassificationDao)}.
257
     */
258
    @Test
259
    public final void testSetDaoIClassificationDao() {
260
        Assert.assertNotNull(service);
261
    }
262

    
263
    @Test
264
    @DataSet
265
    public final void testGroupTaxaByHigherTaxon(){
266

    
267
        Rank minRank = Rank.GENUS();
268
        Rank maxRank = Rank.KINGDOM();
269
        List<UUID> taxonUuids = new ArrayList<>();
270
        taxonUuids.add(acacia_acicularis_uuid);
271
        taxonUuids.add(acacia_cuspidifolia_uuid);
272
        taxonUuids.add(acacia_sect_botrycephalae_uuid);
273

    
274
        List<GroupedTaxonDTO> result = this.service.groupTaxaByHigherTaxon(taxonUuids, CLASSIFICATION_UUID, minRank, maxRank);
275
        System.out.println(result);
276
        Assert.assertEquals(3, result.size());
277
        //acacia_acicularis_uuid  //is a root taxon with no parents
278
        Assert.assertEquals(acacia_acicularis_uuid, result.get(0).getTaxonUuid());
279
        Assert.assertNull(result.get(0).getGroupTaxonUuid());
280
        Assert.assertTrue(StringUtils.isBlank(result.get(0).getGroupTaxonName()));
281
        //acacia_cuspidifolia_uuid
282
        Assert.assertEquals(acacia_cuspidifolia_uuid, result.get(1).getTaxonUuid());
283
        Assert.assertNotNull(result.get(1).getGroupTaxonUuid());
284
        Assert.assertFalse(StringUtils.isBlank(result.get(1).getGroupTaxonName()));
285
        //acacia_sect_botrycephalae_uuid
286
        Assert.assertEquals(acacia_sect_botrycephalae_uuid, result.get(2).getTaxonUuid());
287
        Assert.assertNotNull(result.get(2).getGroupTaxonUuid());
288
        Assert.assertFalse(StringUtils.isBlank(result.get(2).getGroupTaxonName()));
289
    }
290

    
291

    
292
    @Test
293
    @DataSet
294
    public final void testCloneClassification(){
295
    	Classification classification = classificationDao.load(CLASSIFICATION_UUID);
296
    	Reference sec = ReferenceFactory.newGeneric();
297
    	sec.setTitle("cloned sec");
298
    	Classification clone = (Classification) classificationService.cloneClassification(CLASSIFICATION_UUID, "Cloned classification", sec, TaxonRelationshipType.CONGRUENT_TO()).getCdmEntity();
299

    
300
    	List<TaxonNode> childNodes = classification.getChildNodes();
301
    	for (TaxonNode taxonNode : childNodes) {
302
			System.out.println(taxonNode.getTaxon().getTitleCache());
303
		}
304
    	childNodes = clone.getChildNodes();
305
    	for (TaxonNode taxonNode : childNodes) {
306
    		System.out.println(taxonNode.getTaxon().getTitleCache());
307
    	}
308
    	Set<TaxonNode> allNodes = classification.getAllNodes();
309
    	assertEquals("# of direct children does not match", classification.getChildNodes().size(), clone.getChildNodes().size());
310
		assertEquals("# of all nodes does not match", allNodes.size(), clone.getAllNodes().size());
311

    
312
    	//check that original taxon does not appear in cloned classification
313
		for (TaxonNode taxonNode : allNodes) {
314
    		assertNull(clone.getNode(taxonNode.getTaxon()));
315
    	}
316
    }
317

    
318

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

    
323

    
324
    /**
325
     * {@inheritDoc}
326
     */
327
    @Override
328
//    @Test
329
    public void createTestDataSet() throws FileNotFoundException {
330

    
331
        // ClassificationRoot
332
        // |- Acacia N.Jacobsen, Bastm. & Yuji Sasaki                          [Genus]
333
        // |  |-- Acacia subg. Aculeiferum Pedley                              [Subgenus]
334
        // |  |-- Acacia subg. Phyllodineae N.Jacobsen, Bastm. & Yuji Sasaki   [Subgenus]
335
        // |  |  |-- Acacia sect. Botrycephalae Yuji Sasaki                    [Section (Botany)]
336
        // |  |------- Acacia cuspidifolia Maslin                              [Species]
337
        // |  |------- Acacia mearnsii Benth                                   [Species]
338
        // |---------- Acacia acicularis Willd.                                [Species]
339
        //             |-- ×Acacia acicularis Willd. subsp. acicularis         [Subspecies]
340
        //
341
        // for more historic Acacia taxonomy see http://lexikon.freenet.de/Akazien
342

    
343
        // 1. create the entities   and save them
344
        Classification classification = Classification.NewInstance("Acacia Classification");
345
        classification.setUuid(CLASSIFICATION_UUID);
346
        classificationDao.save(classification);
347

    
348
        Reference sec = ReferenceFactory.newBook();
349
        sec.setTitleCache("Sp. Pl.", true);
350
        referenceDao.save(sec);
351

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

    
357
        IBotanicalName acacia_subg_aculeiferum_n = TaxonNameFactory.NewBotanicalInstance(Rank.SUBGENUS(), "Acacia", "Aculeiferum", null, null, null, sec, null, null);
358
        acacia_subg_aculeiferum_n.setAuthorshipCache("Pedley", true);
359
        Taxon acacia_subg_aculeiferum_t = Taxon.NewInstance(acacia_subg_aculeiferum_n, sec);
360
        acacia_subg_aculeiferum_t.setUuid(UUID.fromString("169fea08-6b7a-4315-b111-a774c7fafe30"));
361

    
362
        IBotanicalName acacia_subg_phyllodineae_n = TaxonNameFactory.NewBotanicalInstance(Rank.SUBGENUS(), "Acacia", "Phyllodineae", null, null, null, sec, null, null);
363
        acacia_subg_phyllodineae_n.setAuthorshipCache("N.Jacobsen, Bastm. & Yuji Sasaki", true);
364
        Taxon acacia_subg_phyllodineae_t = Taxon.NewInstance(acacia_subg_phyllodineae_n, sec);
365
        acacia_subg_phyllodineae_t.setUuid(UUID.fromString("a9da5d43-517e-4ca5-a490-b6a5cd637e9e"));
366

    
367
        IBotanicalName acacia_setc_botrycephalae_n = TaxonNameFactory.NewBotanicalInstance(Rank.SECTION_BOTANY(), "Acacia", "Botrycephalae", null, null, null, sec, null, null);
368
        acacia_setc_botrycephalae_n.setAuthorshipCache("Yuji Sasaki", true);
369
        Taxon acacia_sect_botrycephalae_t = Taxon.NewInstance(acacia_setc_botrycephalae_n, sec);
370
        acacia_sect_botrycephalae_t.setUuid(acacia_sect_botrycephalae_uuid);
371

    
372
        IBotanicalName acacia_cuspidifolia_n = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES(), "Acacia", null,"cuspidifolia", null, null, sec, null, null);
373
        acacia_cuspidifolia_n.setAuthorshipCache("Maslin", true);
374
        Taxon acacia_cuspidifolia_t = Taxon.NewInstance(acacia_cuspidifolia_n, sec);
375
        acacia_cuspidifolia_t.setUuid(acacia_cuspidifolia_uuid);
376

    
377
        IBotanicalName acacia_mearnsii_n = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES(), "Acacia", null,"mearnsii", null, null, sec, null, null);
378
        acacia_mearnsii_n.setAuthorshipCache("Benth", true);
379
        Taxon acacia_mearnsii_t = Taxon.NewInstance(acacia_mearnsii_n, sec);
380
        acacia_mearnsii_t.setUuid(UUID.fromString("2e55dc01-71f5-4d42-9bb0-a2448e46dd18"));
381

    
382
        IBotanicalName acacia_acicularis_n = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES(), "Acacia", null,"acicularis", null, null, sec, null, null);
383
        acacia_acicularis_n.setAuthorshipCache("Willd.", true);
384
        Taxon acacia_acicularis_t = Taxon.NewInstance(acacia_acicularis_n, sec);
385
        acacia_acicularis_t.setUuid(acacia_acicularis_uuid);
386

    
387
        IBotanicalName xacacia_acicularis_n = TaxonNameFactory.NewBotanicalInstance(Rank.SUBSPECIES(), "Acacia", null,"acicularis", "acicularis", null, sec, null, null);
388
        xacacia_acicularis_n.setAuthorshipCache("Willd.", true);
389
        xacacia_acicularis_n.setMonomHybrid(true);
390
        System.out.println(xacacia_acicularis_n.getTitleCache());
391
        Taxon xacacia_acicularis_t = Taxon.NewInstance(xacacia_acicularis_n, sec);
392
        xacacia_acicularis_t.setUuid(UUID.fromString("04d125a6-6adf-4900-97ff-82729618086a"));
393

    
394
        TaxonNode acacia_tn = classification.addChildTaxon(acacia_t, sec, null);
395
        TaxonNode acacia_subg_phyllodineae_tn = acacia_tn.addChildTaxon(acacia_subg_phyllodineae_t, sec, null);
396
        acacia_subg_phyllodineae_tn.addChildTaxon(acacia_sect_botrycephalae_t, sec, null);
397
        acacia_tn.addChildTaxon(acacia_subg_aculeiferum_t, sec, null);
398
        acacia_tn.addChildTaxon(acacia_mearnsii_t, sec, null).addChildTaxon(xacacia_acicularis_t, sec, null);
399
        acacia_tn.addChildTaxon(acacia_cuspidifolia_t, sec, null);
400
        classification.addChildTaxon(acacia_acicularis_t, sec, null);
401

    
402
        classificationDao.save(classification);
403

    
404
        // 2. end the transaction so that all data is actually written to the db
405
        setComplete();
406
        endTransaction();
407

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

    
413
        // 3.
414
        writeDbUnitDataSetFile(new String[] {
415
            "TAXONBASE", "TAXONNAME",
416
            "REFERENCE",
417
            "CLASSIFICATION", "TAXONNODE",
418
            "LANGUAGESTRING", "HOMOTYPICALGROUP",
419
            "HIBERNATE_SEQUENCES" // IMPORTANT!!!
420
            },
421
            fileNameAppendix, true );
422

    
423
    }
424
}
(4-4/39)