Project

General

Profile

Download (31.5 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.io.specimen.abcd206.in;
11

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

    
16
import java.io.FileNotFoundException;
17
import java.net.URISyntaxException;
18
import java.net.URL;
19
import java.text.ParseException;
20
import java.util.List;
21
import java.util.Set;
22
import java.util.UUID;
23

    
24
import org.junit.Assert;
25
import org.junit.Before;
26
import org.junit.Ignore;
27
import org.junit.Test;
28
import org.unitils.dbunit.annotation.DataSet;
29
import org.unitils.dbunit.annotation.DataSets;
30
import org.unitils.spring.annotation.SpringBeanByName;
31
import org.unitils.spring.annotation.SpringBeanByType;
32

    
33
import eu.etaxonomy.cdm.api.service.IAgentService;
34
import eu.etaxonomy.cdm.api.service.IClassificationService;
35
import eu.etaxonomy.cdm.api.service.ICommonService;
36
import eu.etaxonomy.cdm.api.service.INameService;
37
import eu.etaxonomy.cdm.api.service.IOccurrenceService;
38
import eu.etaxonomy.cdm.api.service.IReferenceService;
39
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
40
import eu.etaxonomy.cdm.api.service.ITaxonService;
41
import eu.etaxonomy.cdm.api.service.ITermService;
42
import eu.etaxonomy.cdm.io.common.CdmApplicationAwareDefaultImport;
43
import eu.etaxonomy.cdm.io.common.IImportConfigurator;
44
import eu.etaxonomy.cdm.model.agent.Institution;
45
import eu.etaxonomy.cdm.model.agent.Person;
46
import eu.etaxonomy.cdm.model.molecular.DnaSample;
47
import eu.etaxonomy.cdm.model.name.NonViralName;
48
import eu.etaxonomy.cdm.model.name.Rank;
49
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
50
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
51
import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
52
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
53
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
54
import eu.etaxonomy.cdm.model.reference.Reference;
55
import eu.etaxonomy.cdm.model.taxon.Classification;
56
import eu.etaxonomy.cdm.model.taxon.Taxon;
57
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
58
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
59
import eu.etaxonomy.cdm.persistence.query.MatchMode;
60
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
61
import eu.etaxonomy.cdm.test.unitils.CleanSweepInsertLoadStrategy;
62

    
63
/**
64
 * @author a.mueller
65
 * @created 29.01.2009
66
 */
67
public class SpecimenImportConfiguratorTest extends CdmTransactionalIntegrationTest {
68

    
69
	@SpringBeanByName
70
	private CdmApplicationAwareDefaultImport<?> defaultImport;
71

    
72
	@SpringBeanByType
73
	private INameService nameService;
74

    
75
	@SpringBeanByType
76
	private ITaxonService taxonService;
77

    
78
	@SpringBeanByType
79
	private IOccurrenceService occurrenceService;
80

    
81
	@SpringBeanByType
82
	private ITermService termService;
83

    
84
	@SpringBeanByType
85
	private ICommonService commonService;
86

    
87
	@SpringBeanByType
88
	private ITaxonNodeService taxonNodeService;
89

    
90
	@SpringBeanByType
91
	private IAgentService agentService;
92

    
93
	@SpringBeanByType
94
	private IReferenceService referenceService;
95

    
96
	@SpringBeanByType
97
	private IClassificationService classificationService;
98

    
99

    
100

    
101
	private IImportConfigurator configurator;
102
	private IImportConfigurator configurator2;
103

    
104
	@Before
105
	public void setUp() {
106
		String inputFile = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/AbcdImportTestCalvumPart1.xml";
107
        URL url = this.getClass().getResource(inputFile);
108
        assertNotNull("URL for the test file '" + inputFile + "' does not exist", url);
109
        try {
110
            configurator = Abcd206ImportConfigurator.NewInstance(url.toURI(), null,false);
111
        } catch (URISyntaxException e) {
112
            e.printStackTrace();
113
            Assert.fail();
114
        }
115
        assertNotNull("Configurator could not be created", configurator);
116

    
117
        //test2
118
        String inputFile2 = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/Campanula_ABCD_import_3_taxa_11_units.xml";
119
		URL url2 = this.getClass().getResource(inputFile2);
120
		assertNotNull("URL for the test file '" + inputFile2 + "' does not exist", url2);
121
		try {
122
			configurator2 = Abcd206ImportConfigurator.NewInstance(url2.toURI(), null,false);
123
		} catch (URISyntaxException e) {
124
			e.printStackTrace();
125
			Assert.fail();
126
		}
127
		assertNotNull("Configurator2 could not be created", configurator2);
128
	}
129

    
130
	@Test
131
	public void testInit() {
132
	    System.out.println("TEST INIT");
133
		assertNotNull("import instance should not be null", defaultImport);
134
		assertNotNull("nameService should not be null", nameService);
135
		assertNotNull("occurence service should not be null", occurrenceService);
136
		assertNotNull("term service should not be null", termService);
137
		assertNotNull("common service should not be null", commonService);
138
		assertNotNull("taxon node service should not be null", taxonNodeService);
139
		assertNotNull("agent service should not be null", agentService);
140
		assertNotNull("reference service should not be null", referenceService);
141
	}
142

    
143
	@Test
144
    @DataSet( value="/eu/etaxonomy/cdm/database/BlankDataSet.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
145
    public void testDoInvoke() {
146
        boolean result = defaultImport.invoke(configurator).isSuccess();
147
        assertTrue("Return value for import.invoke should be true", result);
148
        assertEquals("Number of TaxonNames is incorrect", 2, nameService.count(TaxonNameBase.class));
149
        /*
150
         * Classification
151
         * - Cichorium
152
         *   - Cichorium calvum
153
         */
154
        assertEquals("Number of TaxonNodes is incorrect", 3, taxonNodeService.count(TaxonNode.class));
155
        assertEquals("Number of specimen and observation is incorrect", 10, occurrenceService.count(DerivedUnit.class));
156
        //Asch. + Mitarbeiter der Floristischen Kartierung Deutschlands
157
        assertEquals("Number of persons is incorrect", 2, agentService.count(Person.class));
158
        //BfN
159
        assertEquals("Number of institutions is incorrect", 1, agentService.count(Institution.class));
160
    }
161

    
162

    
163
	@Test
164
	@DataSet(value="SpecimenImportConfiguratorTest.doInvoke2.xml",  loadStrategy=CleanSweepInsertLoadStrategy.class)
165
	public void testDoInvoke2() {
166
		boolean result = defaultImport.invoke(configurator2).isSuccess();
167
		assertTrue("Return value for import.invoke should be true", result);
168
		assertEquals("Number of TaxonNames is incorrect", 4, nameService.count(TaxonNameBase.class));
169
		/*
170
		 * 5 taxon nodes:
171
		 *
172
         * Classification
173
         * - Campanula
174
         *   - Campanula patula
175
         *   - Campanula tridentata
176
         *   - Campanula lactiflora
177
         */
178
        assertEquals("Number of TaxonNodes is incorrect", 5, taxonNodeService.count(TaxonNode.class));
179
		assertEquals("Number of derived units is incorrect", 11, occurrenceService.count(DerivedUnit.class));
180
		assertEquals("Number of field units is incorrect", 11, occurrenceService.count(FieldUnit.class));
181
		assertEquals("Number of gathering agents is incorrect", 4, agentService.count(Person.class));
182
		//BGBM
183
		assertEquals("Number of institutions is incorrect", 1, agentService.count(Institution.class));
184
		assertEquals("Number of references is incorrect", 1, referenceService.count(Reference.class));
185
	}
186

    
187
	@Test
188
	@Ignore
189
    @DataSet( value="/eu/etaxonomy/cdm/database/BlankDataSet.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
190
    public void testImportSubspecies() {
191
        String inputFile = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/camapanula_abietina_subspecies.xml";
192
        URL url = this.getClass().getResource(inputFile);
193
        assertNotNull("URL for the test file '" + inputFile + "' does not exist", url);
194

    
195
        Abcd206ImportConfigurator importConfigurator = null;
196
        try {
197
            importConfigurator = Abcd206ImportConfigurator.NewInstance(url.toURI(), null,false);
198
        } catch (URISyntaxException e) {
199
            e.printStackTrace();
200
            Assert.fail();
201
        }
202
        assertNotNull("Configurator could not be created", importConfigurator);
203

    
204
        boolean result = defaultImport.invoke(importConfigurator).isSuccess();
205
        assertTrue("Return value for import.invoke should be true", result);
206
        assertEquals("Number of TaxonNames is incorrect", 3, nameService.count(TaxonNameBase.class));
207
        /*
208
         * Classification
209
         * - Campanula
210
         *   - Campanula patula
211
         *      - Campanula patula subsp. abietina
212
         */
213
        assertEquals("Number of TaxonNodes is incorrect", 4, taxonNodeService.count(TaxonNode.class));
214
	}
215

    
216
	@Test
217
	@DataSet( value="/eu/etaxonomy/cdm/database/BlankDataSet.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
218
	public void testImportVariety() {
219
	    String inputFile = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/Campanula_variety.xml";
220
	    URL url = this.getClass().getResource(inputFile);
221
	    assertNotNull("URL for the test file '" + inputFile + "' does not exist", url);
222

    
223
	    Abcd206ImportConfigurator importConfigurator = null;
224
	    try {
225
	        importConfigurator = Abcd206ImportConfigurator.NewInstance(url.toURI(), null,false);
226
	    } catch (URISyntaxException e) {
227
	        e.printStackTrace();
228
	        Assert.fail();
229
	    }
230
	    assertNotNull("Configurator could not be created", importConfigurator);
231

    
232
	    boolean result = defaultImport.invoke(importConfigurator).isSuccess();
233
	    assertTrue("Return value for import.invoke should be true", result);
234

    
235
	    /*
236
	     * Classification
237
	     *  - Campanula
238
	     *   - Campanula versicolor
239
	     *   - Campanula versicolor var. tomentella Hal.
240
	     */
241
	    assertEquals(4, taxonNodeService.count(TaxonNode.class));
242
	    assertEquals(3, nameService.count(TaxonNameBase.class));
243
	    assertEquals(1, occurrenceService.count(DerivedUnit.class));
244
	    boolean varietyFound = false;
245
	    for(TaxonNameBase<?, ?> name:nameService.list(TaxonNameBase.class, null, null, null, null)){
246
	        if(name.getRank().equals(Rank.VARIETY())){
247
	            varietyFound = true;
248
	        }
249
	    }
250
	    assertTrue("Variety rank not set", varietyFound);
251
	}
252

    
253
	@Test
254
	@DataSet( value="/eu/etaxonomy/cdm/database/BlankDataSet.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
255
	public void testMultipleIdentificationsPreferredFlag() {
256
	    String inputFile = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/MultipleIdentificationsPreferredFlag.xml";
257
	    URL url = this.getClass().getResource(inputFile);
258
	    assertNotNull("URL for the test file '" + inputFile + "' does not exist", url);
259

    
260
	    Abcd206ImportConfigurator importConfigurator = null;
261
	    try {
262
	        importConfigurator = Abcd206ImportConfigurator.NewInstance(url.toURI(), null,false);
263
	    } catch (URISyntaxException e) {
264
	        e.printStackTrace();
265
	        Assert.fail();
266
	    }
267
	    assertNotNull("Configurator could not be created", importConfigurator);
268

    
269
	    boolean result = defaultImport.invoke(importConfigurator).isSuccess();
270
	    assertTrue("Return value for import.invoke should be true", result);
271

    
272
	    String nonPreferredNameCache = "Campanula flagellaris";
273
	    String preferredNameCache = "Campanula tymphaea";
274
	    //Campanula, "Campanula tymphaea Hausskn.", "Campanula flagellaris Halácsy"
275
	    assertEquals(3, nameService.count(TaxonNameBase.class));
276
	    /*
277
	     * Classification
278
	     *  - Campanula
279
	     *   - Campanula tymphaea Hausskn.
280
	     */
281
	    assertEquals(3, taxonNodeService.count(TaxonNode.class));
282
	    assertEquals(1, occurrenceService.count(DerivedUnit.class));
283
	    DerivedUnit derivedUnit = occurrenceService.list(DerivedUnit.class, null, null, null, null).get(0);
284
	    assertEquals(2, derivedUnit.getDeterminations().size());
285
	    for(DeterminationEvent determinationEvent:derivedUnit.getDeterminations()){
286
	        if(determinationEvent.getPreferredFlag()){
287
	            assertEquals(preferredNameCache,((NonViralName<?>) determinationEvent.getTaxonName()).getNameCache());
288
	        }
289
	        else{
290
	            assertEquals(nonPreferredNameCache,((NonViralName<?>) determinationEvent.getTaxonName()).getNameCache());
291
	        }
292
	    }
293

    
294
	}
295

    
296
	@Test
297
    @DataSet( value="/eu/etaxonomy/cdm/database/BlankDataSet.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
298
    public void testImportForm() {
299
        String inputFile = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/C_drabifolia_major.xml";
300
        URL url = this.getClass().getResource(inputFile);
301
        assertNotNull("URL for the test file '" + inputFile + "' does not exist", url);
302

    
303
        Abcd206ImportConfigurator importConfigurator = null;
304
        try {
305
            importConfigurator = Abcd206ImportConfigurator.NewInstance(url.toURI(), null,false);
306
        } catch (URISyntaxException e) {
307
            e.printStackTrace();
308
            Assert.fail();
309
        }
310
        assertNotNull("Configurator could not be created", importConfigurator);
311

    
312
        boolean result = defaultImport.invoke(importConfigurator).isSuccess();
313
        assertTrue("Return value for import.invoke should be true", result);
314
    }
315

    
316
	@Test
317
	@DataSet( value="/eu/etaxonomy/cdm/database/BlankDataSet.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
318
	public void testMapUnitIDAsBarcode() {
319
	    String inputFile = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/Campanula_ABCD_import_3_taxa_11_units.xml";
320
	    URL url = this.getClass().getResource(inputFile);
321
	    assertNotNull("URL for the test file '" + inputFile + "' does not exist", url);
322

    
323
	    Abcd206ImportConfigurator importConfigurator = null;
324
	    try {
325
	        importConfigurator = Abcd206ImportConfigurator.NewInstance(url.toURI(), null,false);
326
	    } catch (URISyntaxException e) {
327
	        e.printStackTrace();
328
	        Assert.fail();
329
	    }
330
	    assertNotNull("Configurator could not be created", importConfigurator);
331

    
332
	    importConfigurator.setMapUnitIdToBarcode(true);
333
	    boolean result = defaultImport.invoke(importConfigurator).isSuccess();
334
	    assertTrue("Return value for import.invoke should be true", result);
335
	    List<DerivedUnit> list = occurrenceService.list(DerivedUnit.class, null, null, null, null);
336
	    for (DerivedUnit derivedUnit : list) {
337
            assertTrue(derivedUnit.getBarcode()!=null);
338
        }
339
	}
340

    
341
	@Test
342
	@DataSet( value="/eu/etaxonomy/cdm/database/BlankDataSet.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
343
	public void testMapUnitIDAsAccessionNumber() {
344
	    String inputFile = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/Campanula_ABCD_import_3_taxa_11_units.xml";
345
	    URL url = this.getClass().getResource(inputFile);
346
	    assertNotNull("URL for the test file '" + inputFile + "' does not exist", url);
347

    
348
	    Abcd206ImportConfigurator importConfigurator = null;
349
	    try {
350
	        importConfigurator = Abcd206ImportConfigurator.NewInstance(url.toURI(), null,false);
351
	    } catch (URISyntaxException e) {
352
	        e.printStackTrace();
353
	        Assert.fail();
354
	    }
355
	    assertNotNull("Configurator could not be created", importConfigurator);
356

    
357
	    importConfigurator.setMapUnitIdToAccessionNumber(true);
358
	    boolean result = defaultImport.invoke(importConfigurator).isSuccess();
359
	    assertTrue("Return value for import.invoke should be true", result);
360
	    List<DerivedUnit> list = occurrenceService.list(DerivedUnit.class, null, null, null, null);
361
	    for (DerivedUnit derivedUnit : list) {
362
	        assertTrue(derivedUnit.getAccessionNumber()!=null);
363
	    }
364
	}
365

    
366
	@Test
367
	@DataSet( value="/eu/etaxonomy/cdm/database/BlankDataSet.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
368
	public void testMapUnitIDAsCatalogNumber() {
369
	    String inputFile = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/Campanula_ABCD_import_3_taxa_11_units.xml";
370
	    URL url = this.getClass().getResource(inputFile);
371
	    assertNotNull("URL for the test file '" + inputFile + "' does not exist", url);
372

    
373
	    Abcd206ImportConfigurator importConfigurator = null;
374
	    try {
375
	        importConfigurator = Abcd206ImportConfigurator.NewInstance(url.toURI(), null,false);
376
	    } catch (URISyntaxException e) {
377
	        e.printStackTrace();
378
	        Assert.fail();
379
	    }
380
	    assertNotNull("Configurator could not be created", importConfigurator);
381

    
382
	    importConfigurator.setMapUnitIdToCatalogNumber(true);
383
	    boolean result = defaultImport.invoke(importConfigurator).isSuccess();
384
	    assertTrue("Return value for import.invoke should be true", result);
385
	    List<DerivedUnit> list = occurrenceService.list(DerivedUnit.class, null, null, null, null);
386
	    for (DerivedUnit derivedUnit : list) {
387
	        assertTrue(derivedUnit.getCatalogNumber()!=null);
388
	    }
389
	}
390

    
391
	@Test
392
    @DataSet( value="AbcdGgbnImportTest.testAttachDnaSampleToDerivedUnit.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
393
    public void testIgnoreExistingSpecimens(){
394
        UUID derivedUnit1Uuid = UUID.fromString("eb40cb0f-efb2-4985-819e-a9168f6d61fe");
395

    
396
//        DerivedUnit derivedUnit = DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
397
//        derivedUnit.setAccessionNumber("B 10 0066577");
398
//        derivedUnit.setTitleCache("testUnit1", true);
399
//
400
//        derivedUnit.setUuid(derivedUnit1Uuid );
401
//
402
//        occurrenceService.save(derivedUnit);
403
//
404
//        commitAndStartNewTransaction(null);
405
//
406
//        setComplete();
407
//        endTransaction();
408
//
409
//
410
//        try {
411
//            writeDbUnitDataSetFile(new String[] {
412
//                    "SpecimenOrObservationBase",
413
//            }, "testAttachDnaSampleToDerivedUnit");
414
//        } catch (FileNotFoundException e) {
415
//            e.printStackTrace();
416
//        }
417

    
418

    
419
        String inputFile = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/Campanula_B_10_0066577.xml";
420
        URL url = this.getClass().getResource(inputFile);
421
        assertNotNull("URL for the test file '" + inputFile + "' does not exist", url);
422

    
423
        Abcd206ImportConfigurator importConfigurator = null;
424
        try {
425
            importConfigurator = Abcd206ImportConfigurator.NewInstance(url.toURI(), null,false);
426
        } catch (URISyntaxException e) {
427
            e.printStackTrace();
428
            Assert.fail();
429
        }
430
        assertNotNull("Configurator could not be created", importConfigurator);
431
        importConfigurator.setIgnoreImportOfExistingSpecimen(true);
432
        boolean result = defaultImport.invoke(importConfigurator).isSuccess();
433
        assertTrue("Return value for import.invoke should be true", result);
434
        assertEquals("Number of derived units is incorrect", 1, occurrenceService.count(DerivedUnit.class));
435
        List<DerivedUnit> derivedUnits = occurrenceService.list(DerivedUnit.class, null, null, null, null);
436
        assertEquals("Number of derived units is incorrect", 1, derivedUnits.size());
437

    
438
        DerivedUnit derivedUnit = (DerivedUnit) occurrenceService.load(derivedUnit1Uuid);
439
        assertTrue(derivedUnits.contains(derivedUnit));
440

    
441
    }
442

    
443
	/**
444
	 * Test imports one unit with an already existing taxon and one with a new taxon.
445
	 * The new taxon should be added to a newly created default classification.
446
	 */
447
	@Test
448
    @DataSets({
449
        @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="/eu/etaxonomy/cdm/database/BlankDataSet.xml"),
450
        @DataSet( value="SpecimenImportConfiguratorTest.testIgnoreAuthorship.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
451
    })
452
	public void testImportNewTaxaToDefaultClassification(){
453
	    UUID taxonUUID = UUID.fromString("26f98a58-09ab-49a0-ab9f-7490757c86d2");
454
	    UUID classificationUUID = UUID.fromString("eee32748-5b89-4266-a99a-1edb3781d0eb");
455

    
456
	    String inputFile = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/Campanula_B_10_0066577_two_units_almost_same.xml";
457
	    URL url = this.getClass().getResource(inputFile);
458
	    assertNotNull("URL for the test file '" + inputFile + "' does not exist", url);
459

    
460
	    Abcd206ImportConfigurator importConfigurator = null;
461
	    try {
462
	        importConfigurator = Abcd206ImportConfigurator.NewInstance(url.toURI(), null,false);
463
	    } catch (URISyntaxException e) {
464
	        e.printStackTrace();
465
	        Assert.fail();
466
	    }
467
	    assertNotNull("Configurator could not be created", importConfigurator);
468

    
469
	    //test initial state
470
	    Taxon taxon = (Taxon) taxonService.load(taxonUUID);
471
	    assertNotNull(taxon);
472
	    Classification classification = classificationService.load(classificationUUID);
473
	    assertNotNull(classification);
474
	    assertEquals(1, taxon.getTaxonNodes().size());
475
	    TaxonNode taxonNode = taxon.getTaxonNodes().iterator().next();
476
	    assertEquals(classification, taxonNode.getClassification());
477

    
478
	    assertEquals(1, classificationService.count(Classification.class));
479
	    assertEquals(1, taxonService.count(Taxon.class));
480

    
481
	    importConfigurator.setClassificationUuid(classificationUUID);
482
//	    importConfigurator.setIgnoreAuthorship(true);
483
	    boolean result = defaultImport.invoke(importConfigurator).isSuccess();
484
	    assertTrue("Return value for import.invoke should be true", result);
485

    
486
	    //re-load classification to avoid session conflicts
487
	    classification = classificationService.load(classificationUUID);
488

    
489
	    assertEquals(2, occurrenceService.count(DerivedUnit.class));
490
//	    assertEquals(2, taxonService.count(Taxon.class));
491
	    assertEquals(2, classificationService.count(Classification.class));
492

    
493
	    //get default classification
494
	    List<Classification> list = classificationService.list(Classification.class, null, null, null, null);
495
	    Classification defaultClassification = null;
496
	    for (Classification c : list) {
497
            if(c.getUuid()!=classificationUUID){
498
                defaultClassification = c;
499
            }
500
        }
501
	    assertEquals(1, classification.getAllNodes().size());
502
	    assertEquals(2, defaultClassification.getAllNodes().size());
503

    
504
	}
505

    
506

    
507
    /**
508
     * Test should NOT create new taxa of the same name but have different authors.
509
     */
510
	@Test
511
    @DataSets({
512
        @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="/eu/etaxonomy/cdm/database/BlankDataSet.xml"),
513
        @DataSet( value="SpecimenImportConfiguratorTest.testIgnoreAuthorship.xml")
514
    })
515
	public void testIgnoreAuthorship(){
516
        UUID taxonUUID = UUID.fromString("26f98a58-09ab-49a0-ab9f-7490757c86d2");
517
        UUID classificationUUID = UUID.fromString("eee32748-5b89-4266-a99a-1edb3781d0eb");
518

    
519
//        Classification classification = Classification.NewInstance("Checklist");
520
//        classification.setUuid(classificationUUID);
521
//
522
//        Reference<?> secReference = ReferenceFactory.newGeneric();
523
//        Team team = Team.NewTitledInstance("different author", "different author");
524
//        secReference.setAuthorship(team);
525
//
526
//        NonViralName<?> taxonName = NonViralName.NewInstance(Rank.VARIETY());
527
//        taxonName.setGenusOrUninomial("Campanula");
528
//        taxonName.setSpecificEpithet("versicolor");
529
//        taxonName.setInfraSpecificEpithet("tomentella");
530
//
531
//        Taxon taxon = Taxon.NewInstance(taxonName, secReference);
532
//        taxon.setUuid(taxonUUID);
533
//
534
//        classification.addChildTaxon(taxon, secReference, "");
535
//
536
//        taxonService.save(taxon);
537
//        nameService.save(taxonName);
538
//        referenceService.save(secReference);
539
//
540
//        commitAndStartNewTransaction(null);
541
//
542
//        setComplete();
543
//        endTransaction();
544
//
545
//
546
//        try {
547
//            writeDbUnitDataSetFile(new String[] {
548
//                    "SpecimenOrObservationBase",
549
//                    "SpecimenOrObservationBase_DerivationEvent",
550
//                    "DerivationEvent",
551
//                    "DescriptionElementBase",
552
//                    "DescriptionBase",
553
//                    "TaxonBase",
554
//                    "TypeDesignationBase",
555
//                    "TaxonNameBase",
556
//                    "TaxonNameBase_TypeDesignationBase",
557
//                    "HomotypicalGroup",
558
//                    "AgentBase",
559
//                    "AgentBase_AgentBase",
560
//                    "Reference",
561
//                    "TaxonNode",
562
//                    "Classification",
563
//                    "LanguageString"
564
//            }, "testIgnoreAuthorship");
565
//        } catch (FileNotFoundException e) {
566
//            e.printStackTrace();
567
//        }
568

    
569
        String inputFile = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/Campanula_B_10_0066577.xml";
570
	    URL url = this.getClass().getResource(inputFile);
571
	    assertNotNull("URL for the test file '" + inputFile + "' does not exist", url);
572

    
573
	    Abcd206ImportConfigurator importConfigurator = null;
574
	    try {
575
	        importConfigurator = Abcd206ImportConfigurator.NewInstance(url.toURI(), null,false);
576
	    } catch (URISyntaxException e) {
577
	        e.printStackTrace();
578
	        Assert.fail();
579
	    }
580
	    assertNotNull("Configurator could not be created", importConfigurator);
581

    
582
	    //test initial state
583
	    Taxon taxon = (Taxon) taxonService.load(taxonUUID);
584
	    assertNotNull(taxon);
585
	    Classification classification = classificationService.load(classificationUUID);
586
	    assertNotNull(classification);
587
	    assertEquals(1, classificationService.count(Classification.class));
588
	    assertEquals(1, classification.getAllNodes().size());//taxon node
589
	    assertEquals(2, taxonNodeService.count(TaxonNode.class));//root node + Taxon node = 2 nodes
590

    
591
	    importConfigurator.setIgnoreAuthorship(true);
592
	    importConfigurator.setClassificationUuid(classificationUUID);
593
	    boolean result = defaultImport.invoke(importConfigurator).isSuccess();
594
	    assertTrue("Return value for import.invoke should be true", result);
595

    
596
	    assertEquals(1, classificationService.count(Classification.class));
597
	    assertEquals(1, classification.getAllNodes().size());//taxon node
598
	    assertEquals(2, taxonNodeService.count(TaxonNode.class));//root node + Taxon node = 2 nodes
599

    
600
	}
601

    
602
    /**
603
     * Imports two DNA units belonging to the same taxon into an existing
604
     * classification. The taxon is not part of the classification so the
605
     * default classification will be created. The result should be:
606
     * existing classification (0 taxa), default classification (2 taxa [genus+species])
607
     */
608
    @Test
609
    @DataSets({
610
        @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="/eu/etaxonomy/cdm/database/ClearDB_with_Terms_DataSet.xml"),
611
        @DataSet("/eu/etaxonomy/cdm/database/TermsDataSet-with_auditing_info.xml"),
612
        @DataSet( value="SpecimenImportConfiguratorTest.testImportTwoUnitsOfSameTaxonIntoExistingClassification.xml")
613
    })
614
	public void testImportTwoUnitsOfSameTaxonIntoExistingClassification(){
615
        UUID classificationUUID = UUID.fromString("18d22d00-5f70-4c8e-a1ed-dc45fae5b816");
616

    
617
        String inputFile = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/Campanula_barbata.xml";
618
        URL url = this.getClass().getResource(inputFile);
619
        assertNotNull("URL for the test file '" + inputFile + "' does not exist", url);
620

    
621
        Abcd206ImportConfigurator importConfigurator = null;
622
        try {
623
            importConfigurator = Abcd206ImportConfigurator.NewInstance(url.toURI(), null,false);
624
        } catch (URISyntaxException e) {
625
            e.printStackTrace();
626
            Assert.fail();
627
        }
628
        assertNotNull("Configurator could not be created", importConfigurator);
629

    
630
        //test initial state
631
        Classification classification = classificationService.load(classificationUUID);
632
        assertNotNull(classification);
633
        assertEquals(0, classification.getAllNodes().size());
634
        assertEquals(1, classificationService.count(Classification.class));
635

    
636

    
637
        importConfigurator.setIgnoreAuthorship(true);
638
        importConfigurator.setClassificationUuid(classificationUUID);
639
        boolean result = defaultImport.invoke(importConfigurator).isSuccess();
640
        assertTrue("Return value for import.invoke should be true", result);
641

    
642
        assertEquals(0, classification.getAllNodes().size());
643
        assertEquals(2, classificationService.count(Classification.class));
644

    
645
        Classification defaultClassification = null;
646
        for (Classification c : classificationService.list(Classification.class, null, null, null, null)) {
647
            if(!c.getUuid().equals(classificationUUID)){
648
                defaultClassification = c;
649
            }
650
        }
651
        assertNotNull(defaultClassification);
652
        Set<TaxonNode> allNodes = defaultClassification.getAllNodes();
653
        for (TaxonNode node:allNodes){
654
            System.out.println(node.getTaxon().getTitleCache());
655
        }
656

    
657
        assertEquals(3, defaultClassification.getAllNodes().size());
658

    
659
	}
660

    
661
    /**
662
     * Tests import of unit belonging to a taxon with a non-parsable name. Since
663
     * no rank can be deduced from the name there will be no taxon hierarchy
664
     * created but only the single taxon
665
     *
666
     * @throws ParseException
667
     */
668
    @Test
669
    @DataSet( value="/eu/etaxonomy/cdm/database/BlankDataSet.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
670
    public void testImportNonParsableName() {
671
        String inputFile = "/eu/etaxonomy/cdm/io/specimen/abcd206/in/Campanula_americana.xml";
672
        URL url = this.getClass().getResource(inputFile);
673
        assertNotNull("URL for the test file '" + inputFile + "' does not exist", url);
674

    
675
        Abcd206ImportConfigurator importConfigurator = null;
676
        try {
677
            importConfigurator = Abcd206ImportConfigurator.NewInstance(url.toURI(), null,false);
678
        } catch (URISyntaxException e) {
679
            e.printStackTrace();
680
            Assert.fail();
681
        }
682
        assertNotNull("Configurator could not be created", importConfigurator);
683

    
684
        boolean result = defaultImport.invoke(importConfigurator).isSuccess();
685
        assertTrue("Return value for import.invoke should be true", result);
686
        assertEquals("Number of derived units is incorrect", 1, occurrenceService.count(DerivedUnit.class));
687
        assertEquals("Number of dna samples is incorrect", 1, occurrenceService.count(DnaSample.class));
688
        assertEquals("Number of field units is incorrect", 1, occurrenceService.count(FieldUnit.class));
689
        taxonNodeService.list(TaxonNode.class, null, null, null, null);
690
        occurrenceService.list(SpecimenOrObservationBase.class, null, null, null, null);
691
        /*
692
         * Default classification
693
         *   - Campanula ..g... americana --- hort. ttt ex Steud.
694
         */
695
        assertEquals("Number of taxon nodes is incorrect", 2, taxonNodeService.count(TaxonNode.class));
696
        assertEquals("Number of taxa is incorrect", 1, taxonService.count(TaxonBase.class));
697
        assertEquals(1, taxonService.findByTitle(Taxon.class, "Campanula ..g... americana --- hort. ttt ex Steud.", MatchMode.ANYWHERE, null, null, null, null, null).getRecords().size());
698
    }
699

    
700
	@Test
701
	@Ignore
702
	@DataSet( value="/eu/etaxonomy/cdm/database/BlankDataSet.xml", loadStrategy=CleanSweepInsertLoadStrategy.class)
703
	public void testSetUnitIDAsBarcode() {
704

    
705
	}
706

    
707
    @Override
708
    @Test
709
    @Ignore
710
    public void createTestDataSet() throws FileNotFoundException {
711
        UUID classificationUUID = UUID.fromString("18d22d00-5f70-4c8e-a1ed-dc45fae5b816");
712

    
713
        Classification classification = Classification.NewInstance("Checklist");
714
        classification.setUuid(classificationUUID);
715

    
716
        classificationService.save(classification);
717

    
718
        commitAndStartNewTransaction(null);
719

    
720
        setComplete();
721
        endTransaction();
722

    
723

    
724
        try {
725
            writeDbUnitDataSetFile(new String[] {
726
                    "SpecimenOrObservationBase",
727
                    "SpecimenOrObservationBase_DerivationEvent",
728
                    "DerivationEvent",
729
                    "DescriptionElementBase",
730
                    "DescriptionBase",
731
                    "TaxonBase",
732
                    "TypeDesignationBase",
733
                    "TaxonNameBase",
734
                    "TaxonNameBase_TypeDesignationBase",
735
                    "HomotypicalGroup",
736
                    "AgentBase",
737
                    "AgentBase_AgentBase",
738
                    "Reference",
739
                    "TaxonNode",
740
                    "Classification",
741
                    "LanguageString"
742
            }, "testImportTwoUnitsOfSameTaxonIntoExistingClassification");
743
        } catch (FileNotFoundException e) {
744
            e.printStackTrace();
745
        }
746
    }
747
}
(2-2/2)