Project

General

Profile

« Previous | Next » 

Revision 7426d467

Added by Patrick Plitzner almost 6 years ago

ref #7095 Enhance quicker service for taxon associated specimens

View differences:

cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceTest.java
16 16
import static org.junit.Assert.assertTrue;
17 17

  
18 18
import java.io.FileNotFoundException;
19
import java.util.Collections;
19 20
import java.util.List;
20 21
import java.util.Set;
21 22
import java.util.UUID;
23
import java.util.stream.Collectors;
22 24

  
23 25
import org.apache.log4j.Logger;
24 26
import org.junit.Test;
......
57 59
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
58 60
import eu.etaxonomy.cdm.model.reference.Reference;
59 61
import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
62
import eu.etaxonomy.cdm.model.taxon.Classification;
60 63
import eu.etaxonomy.cdm.model.taxon.Synonym;
61 64
import eu.etaxonomy.cdm.model.taxon.SynonymType;
62 65
import eu.etaxonomy.cdm.model.taxon.Taxon;
63 66
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
67
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
68
import eu.etaxonomy.cdm.persistence.dto.SpecimenNodeWrapper;
64 69
import eu.etaxonomy.cdm.persistence.query.AssignmentStatus;
65 70
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
66 71
import eu.etaxonomy.cdm.test.unitils.CleanSweepInsertLoadStrategy;
......
84 89
    @SpringBeanByType
85 90
    private ITaxonService taxonService;
86 91

  
92
    @SpringBeanByType
93
    private ITaxonNodeService taxonNodeService;
94

  
95
    @SpringBeanByType
96
    private IClassificationService classificationService;
97

  
87 98
    @SpringBeanByType
88 99
    private INameService nameService;
89 100

  
......
1149 1160

  
1150 1161
    }
1151 1162

  
1163
    @Test
1164
    @DataSet(loadStrategy = CleanSweepInsertLoadStrategy.class, value = "OccurrenceServiceTest-testAllKindsOfSpecimenAssociations.xml")
1165
    public void testListUuidAndTitleCacheByAssociatedTaxon() {
1166
        UUID taxonNodeUuid = UUID.fromString("6b8b6ff9-66e4-4496-8e5a-7d03bdf9a076");
1167
        /**
1168
         * Structure is as follows:
1169
         *
1170
         * Taxon ----IndividualsAssociation---> DnaSample
1171
         * Taxon ----TypeDesignation---> Fossil
1172
         * Taxon ----Determination ---> PreservedSpecimenA
1173
         *
1174
         * Taxon ---> Taxon Name ----Determination ---> PreservedSpecimenB
1175
         *
1176
         * Taxon ---> Synonym ---> SynonymName ----Determination---> PreservedSpecimenC
1177
         *
1178
         * Orphan Name (not associated with any taxon) ----Determination ---> PreservedSpecimenD
1179
         */
1180

  
1181
        //UUIDS
1182
        UUID derivedUnitDeterminationTaxonUuid = UUID.fromString("941b8b22-1925-4b91-8ff8-97114499bb22");
1183
        UUID derivedUnitDeterminationNameUuid = UUID.fromString("0cdc7a57-6f55-45c8-b3e5-523748c381e7");
1184

  
1185
        UUID derivedUnitDeterminationSynonymUuid = UUID.fromString("8eb94a7d-c802-49a7-bc10-c26de20a52c2");
1186
        UUID derivedUnitDeterminationSynonymNameUuid = UUID.fromString("d940a940-8caf-4a52-b1d8-ba4aad7ddae2");
1187

  
1188
        UUID derivedUnitDeterminationOrphanNameUuid = UUID.fromString("587b7297-7d59-4f59-8ef3-c7a559cadeca");
1189

  
1190
        UUID tissueUuidNoAssociationUuid = UUID.fromString("93e94260-5107-4b2c-9ce4-da9e1a4e7cb9");
1191
        UUID dnaSampleUuidIndividualsAssociationUuid = UUID.fromString("1fb53903-c9b9-4078-8297-5b86aec7fe21");
1192
        UUID fossilTypeDesignationUuid = UUID.fromString("42ec8dcf-a923-4256-bbd5-b0d10f4de5e2");
1193

  
1194
        UUID taxonUuid = UUID.fromString("07cc47a5-1a63-46a1-8366-0d59d2b90d5b");
1195
        UUID synoymUuid = UUID.fromString("c16bcd9b-7d18-4fb5-af60-f9ef14c1d3a9");
1196

  
1197
        UUID taxonNameUuid = UUID.fromString("e59b95c0-9ad6-48be-af62-a982ba72b917");
1198
        UUID synonymNameUuid = UUID.fromString("39f04b2a-b8bd-46e8-9102-ab665c64ec8e");
1199
        UUID orphanNameUuid = UUID.fromString("d8e56365-3ad9-4b0e-88bf-acaaab223a9b");
1200

  
1201
        /*
1202
         * search for taxon node
1203
         * should retrieve all specimens associated via
1204
         *  - type designations (fossil)
1205
         *  - individuals associations (dnaSample)
1206
         *  - determinations on
1207
         *   - taxon (specimenA)
1208
         *   - taxon name (specimenA, specimenB)
1209
         */
1210
        FindOccurrencesConfigurator config = new FindOccurrencesConfigurator();
1211
        config.setAssociatedTaxonUuid(taxonUuid);
1212
        List<SpecimenNodeWrapper> specimens = occurrenceService
1213
                .listUuidAndTitleCacheByAssociatedTaxon(Collections.singletonList(taxonNodeUuid), null, null, null);
1214
        List<UUID> uuidList = specimens.stream().map(specimen ->
1215
        specimen.getUuidAndTitleCache().getUuid()).collect(Collectors.toList());
1216
        assertTrue(uuidList.contains(derivedUnitDeterminationNameUuid));
1217
        assertTrue(uuidList.contains(derivedUnitDeterminationTaxonUuid));
1218
        assertFalse(uuidList.contains(derivedUnitDeterminationSynonymNameUuid));
1219
        assertTrue(uuidList.contains(dnaSampleUuidIndividualsAssociationUuid));
1220
        assertTrue(uuidList.contains(fossilTypeDesignationUuid));
1221
        assertFalse(uuidList.contains(tissueUuidNoAssociationUuid));
1222
        assertFalse(uuidList.contains(derivedUnitDeterminationOrphanNameUuid));
1223
        assertEquals("Wrong number of associated specimens", 4, specimens.size());
1224
    }
1225

  
1152 1226
    /**
1153 1227
     * This will test the retrieval of specimens that are in any way associated
1154 1228
     * with a taxon resp. taxon name via type designation, determination event
1155 1229
     * or individuals associations. It will also consider synonym relationships.
1156 1230
     */
1157 1231
    @Test
1158
    @DataSet(loadStrategy = CleanSweepInsertLoadStrategy.class, value = "OccurrenceServiceTest.testAllKindsOfSpecimenAssociations.xml")
1232
    @DataSet(loadStrategy = CleanSweepInsertLoadStrategy.class, value = "OccurrenceServiceTest-testAllKindsOfSpecimenAssociations.xml")
1159 1233
    public void testAllKindsOfSpecimenAssociations() {
1160 1234

  
1161 1235
        /**
......
1298 1372
        assertTrue(specimens.contains(derivedUnitDeterminationOrphanName));
1299 1373
        assertEquals("Wrong number of associated specimens", 1, specimens.size());
1300 1374

  
1301
        //        //DERIVATIVES
1302
        //        //determination: taxon
1303
        //        DerivedUnit derivedUnitDeterminationTaxon = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1304
        //        derivedUnitDeterminationTaxon.setTitleCache("Derived Unit determined as taxon");
1305
        //        //determination: taxon name
1306
        //        DerivedUnit derivedUnitDeterminationName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1307
        //        derivedUnitDeterminationName.setTitleCache("Derived Unit determined as name");
1308
        //        //determination: synonym
1309
        //        DerivedUnit derivedUnitDeterminationSynonym = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1310
        //        derivedUnitDeterminationSynonym.setTitleCache("Derived Unit determined as synonym");
1311
        //        //determination: synonym name
1312
        //        DerivedUnit derivedUnitDeterminationSynonymName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1313
        //        derivedUnitDeterminationSynonymName.setTitleCache("Derived Unit determined as synonym name");
1314
        //        //determination: orphan name
1315
        //        DerivedUnit derivedUnitDeterminationOrphanName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1316
        //        derivedUnitDeterminationOrphanName.setTitleCache("Derived Unit determined as orphan name");
1317
        //        //no association
1318
        //        DerivedUnit tissueUuidNoAssociation = DerivedUnit.NewInstance(SpecimenOrObservationType.TissueSample);
1319
        //        tissueUuidNoAssociation.setTitleCache("tissue sample no association");
1320
        //        //individuals association with taxon
1321
        //        DerivedUnit dnaSampleUuidIndividualsAssociation = DerivedUnit.NewInstance(SpecimenOrObservationType.DnaSample);
1322
        //        dnaSampleUuidIndividualsAssociation.setTitleCache("dna associated via IndividualsAssociation");
1323
        //        //type specimen of taxon
1324
        //        DerivedUnit fossilTypeDesignation = DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
1325
        //        fossilTypeDesignation.setTitleCache("Fossil with type designation");
1326
        //
1327
        //        derivedUnitDeterminationTaxon.setUuid(derivedUnitDeterminationTaxonUuid);
1328
        //        derivedUnitDeterminationName.setUuid(derivedUnitDeterminationNameUuid);
1329
        //        derivedUnitDeterminationSynonym.setUuid(derivedUnitDeterminationSynonymUuid);
1330
        //        derivedUnitDeterminationSynonymName.setUuid(derivedUnitDeterminationSynonymNameUuid);
1331
        //        derivedUnitDeterminationOrphanName.setUuid(derivedUnitDeterminationOrphanNameUuid);
1332
        //        tissueUuidNoAssociation.setUuid(tissueUuidNoAssociationUuid);
1333
        //        dnaSampleUuidIndividualsAssociation.setUuid(dnaSampleUuidIndividualsAssociationUuid);
1334
        //        fossilTypeDesignation.setUuid(fossilTypeDesignationUuid);
1335
        //
1336
        //        occurrenceService.save(derivedUnitDeterminationTaxon);
1337
        //        occurrenceService.save(derivedUnitDeterminationName);
1338
        //        occurrenceService.save(derivedUnitDeterminationSynonym);
1339
        //        occurrenceService.save(derivedUnitDeterminationSynonymName);
1340
        //        occurrenceService.save(derivedUnitDeterminationOrphanName);
1341
        //        occurrenceService.save(tissueUuidNoAssociation);
1342
        //        occurrenceService.save(dnaSampleUuidIndividualsAssociation);
1343
        //        occurrenceService.save(fossilTypeDesignation);
1344
        //
1345
        //        //NAMES
1346
        //        BotanicalName taxonName = BotanicalName.PARSED_NAME("Campanula patual");
1347
        //        BotanicalName synonymName = BotanicalName.PARSED_NAME("Syno nyma");
1348
        //        BotanicalName orphanName = BotanicalName.PARSED_NAME("Orphanus lonelia");
1349
        //        taxonName.setUuid(taxonNameUuid);
1350
        //        synonymName.setUuid(synonymNameUuid);
1351
        //        orphanName.setUuid(orphanNameUuid);
1352
        //
1353
        //        //TAXON
1354
        //        Taxon taxon = Taxon.NewInstance(taxonName, null);
1355
        //        taxon.setUuid(taxonUuid);
1356
        //
1357
        //        //SYNONYM
1358
        //        Synonym synonym = Synonym.NewInstance(synonymName, null);
1359
        //        synonym.setUuid(synoymUuid);
1360
        //        taxon.addSynonym(synonym, SynonymType.HOMOTYPIC_SYNONYM_OF());
1361
        //
1362
        //        //IndividualsAssociation
1363
        //        TaxonDescription taxonDescription = TaxonDescription.NewInstance();
1364
        //        IndividualsAssociation association = IndividualsAssociation.NewInstance(dnaSampleUuidIndividualsAssociation);
1365
        //        association.setFeature(Feature.SPECIMEN());
1366
        //        taxonDescription.addElement(association);
1367
        //        taxon.addDescription(taxonDescription);
1368
        //
1369
        //        //DETERMINATION EVENTS
1370
        //        DeterminationEvent.NewInstance(taxon, derivedUnitDeterminationTaxon);
1371
        //        DeterminationEvent.NewInstance(taxonName, derivedUnitDeterminationName);
1372
        ////        DeterminationEvent.NewInstance(synonym, derivedUnitDeterminationSynonym);//TODO determinationa on synonym not possible?
1373
        //        DeterminationEvent.NewInstance(synonymName, derivedUnitDeterminationSynonymName);
1374
        //        DeterminationEvent.NewInstance(orphanName, derivedUnitDeterminationOrphanName);
1375
        //
1376
        //        //type designation
1377
        //        SpecimenTypeDesignation specimenTypeDesignation = SpecimenTypeDesignation.NewInstance();
1378
        //        specimenTypeDesignation.setTypeSpecimen(fossilTypeDesignation);
1379
        //        taxonName.addTypeDesignation(specimenTypeDesignation, false);
1380
        //
1381
        //        taxonService.saveOrUpdate(taxon);
1382
        //
1383
        //        commitAndStartNewTransaction(null);
1384
        //
1385
        //        setComplete();
1386
        //        endTransaction();
1387
        //
1388
        //
1389
        //        try {
1390
        //            writeDbUnitDataSetFile(new String[] {
1391
        //                    "SpecimenOrObservationBase",
1392
        //                    "SpecimenOrObservationBase_DerivationEvent",
1393
        //                    "DerivationEvent",
1394
        //                    "DescriptionElementBase",
1395
        //                    "DescriptionBase",
1396
        //                    "TaxonBase",
1397
        //                    "TypeDesignationBase",
1398
        //                    "TaxonName",
1399
        //                    "TaxonName_TypeDesignationBase",
1400
        //                    "HomotypicalGroup",
1401
        //                    "TeamOrPersonBase",
1402
        //                    "DeterminationEvent"
1403
        //            }, "testAllKindsOfSpecimenAssociations");
1404
        //        } catch (FileNotFoundException e) {
1405
        //            e.printStackTrace();
1406
        //        }
1375
//        //DERIVATIVES
1376
//        //determination: taxon
1377
//        DerivedUnit derivedUnitDeterminationTaxon = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1378
//        derivedUnitDeterminationTaxon.setTitleCache("Derived Unit determined as taxon");
1379
//        //determination: taxon name
1380
//        DerivedUnit derivedUnitDeterminationName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1381
//        derivedUnitDeterminationName.setTitleCache("Derived Unit determined as name");
1382
//        //determination: synonym
1383
//        DerivedUnit derivedUnitDeterminationSynonym = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1384
//        derivedUnitDeterminationSynonym.setTitleCache("Derived Unit determined as synonym");
1385
//        //determination: synonym name
1386
//        DerivedUnit derivedUnitDeterminationSynonymName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1387
//        derivedUnitDeterminationSynonymName.setTitleCache("Derived Unit determined as synonym name");
1388
//        //determination: orphan name
1389
//        DerivedUnit derivedUnitDeterminationOrphanName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
1390
//        derivedUnitDeterminationOrphanName.setTitleCache("Derived Unit determined as orphan name");
1391
//        //no association
1392
//        DerivedUnit tissueUuidNoAssociation = DerivedUnit.NewInstance(SpecimenOrObservationType.TissueSample);
1393
//        tissueUuidNoAssociation.setTitleCache("tissue sample no association");
1394
//        //individuals association with taxon
1395
//        DerivedUnit dnaSampleUuidIndividualsAssociation = DerivedUnit.NewInstance(SpecimenOrObservationType.DnaSample);
1396
//        dnaSampleUuidIndividualsAssociation.setTitleCache("dna associated via IndividualsAssociation");
1397
//        //type specimen of taxon
1398
//        DerivedUnit fossilTypeDesignation = DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
1399
//        fossilTypeDesignation.setTitleCache("Fossil with type designation");
1400
//
1401
//        derivedUnitDeterminationTaxon.setUuid(derivedUnitDeterminationTaxonUuid);
1402
//        derivedUnitDeterminationName.setUuid(derivedUnitDeterminationNameUuid);
1403
//        derivedUnitDeterminationSynonym.setUuid(derivedUnitDeterminationSynonymUuid);
1404
//        derivedUnitDeterminationSynonymName.setUuid(derivedUnitDeterminationSynonymNameUuid);
1405
//        derivedUnitDeterminationOrphanName.setUuid(derivedUnitDeterminationOrphanNameUuid);
1406
//        tissueUuidNoAssociation.setUuid(tissueUuidNoAssociationUuid);
1407
//        dnaSampleUuidIndividualsAssociation.setUuid(dnaSampleUuidIndividualsAssociationUuid);
1408
//        fossilTypeDesignation.setUuid(fossilTypeDesignationUuid);
1409
//
1410
//        occurrenceService.save(derivedUnitDeterminationTaxon);
1411
//        occurrenceService.save(derivedUnitDeterminationName);
1412
//        occurrenceService.save(derivedUnitDeterminationSynonym);
1413
//        occurrenceService.save(derivedUnitDeterminationSynonymName);
1414
//        occurrenceService.save(derivedUnitDeterminationOrphanName);
1415
//        occurrenceService.save(tissueUuidNoAssociation);
1416
//        occurrenceService.save(dnaSampleUuidIndividualsAssociation);
1417
//        occurrenceService.save(fossilTypeDesignation);
1418
//
1419
//        //NAMES
1420
//        TaxonName taxonName = TaxonNameFactory.PARSED_BOTANICAL("Campanula patual");
1421
//        TaxonName synonymName = TaxonNameFactory.PARSED_BOTANICAL("Syno nyma");
1422
//        TaxonName orphanName = TaxonNameFactory.PARSED_BOTANICAL("Orphanus lonelia");
1423
//        taxonName.setUuid(taxonNameUuid);
1424
//        synonymName.setUuid(synonymNameUuid);
1425
//        orphanName.setUuid(orphanNameUuid);
1426
//
1427
//        //TAXON
1428
//        Taxon taxon = Taxon.NewInstance(taxonName, null);
1429
//        taxon.setUuid(taxonUuid);
1430
//
1431
//        Classification classification = Classification.NewInstance("Test Classification");
1432
//        TaxonNode taxonNode = classification.addChildTaxon(taxon, null, null);
1433
//        taxonNode.setUuid(taxonNodeUuid);
1434
//
1435
//        //SYNONYM
1436
//        Synonym synonym = Synonym.NewInstance(synonymName, null);
1437
//        synonym.setUuid(synoymUuid);
1438
//        taxon.addSynonym(synonym, SynonymType.HOMOTYPIC_SYNONYM_OF());
1439
//
1440
//        //IndividualsAssociation
1441
//        TaxonDescription taxonDescription = TaxonDescription.NewInstance();
1442
//        IndividualsAssociation association = IndividualsAssociation.NewInstance(dnaSampleUuidIndividualsAssociation);
1443
//        association.setFeature(Feature.SPECIMEN());
1444
//        taxonDescription.addElement(association);
1445
//        taxon.addDescription(taxonDescription);
1446
//
1447
//        //DETERMINATION EVENTS
1448
//        DeterminationEvent.NewInstance(taxon, derivedUnitDeterminationTaxon);
1449
//        DeterminationEvent.NewInstance(taxonName, derivedUnitDeterminationName);
1450
//        //        DeterminationEvent.NewInstance(synonym, derivedUnitDeterminationSynonym);//TODO determinationa on synonym not possible?
1451
//        DeterminationEvent.NewInstance(synonymName, derivedUnitDeterminationSynonymName);
1452
//        DeterminationEvent.NewInstance(orphanName, derivedUnitDeterminationOrphanName);
1453
//
1454
//        //type designation
1455
//        SpecimenTypeDesignation specimenTypeDesignation = SpecimenTypeDesignation.NewInstance();
1456
//        specimenTypeDesignation.setTypeSpecimen(fossilTypeDesignation);
1457
//        taxonName.addTypeDesignation(specimenTypeDesignation, false);
1458
//
1459
//        classificationService.save(classification);
1460
//        taxonService.saveOrUpdate(taxon);
1461
//        taxonNodeService.save(taxonNode);
1462
//
1463
//        commitAndStartNewTransaction(null);
1464
//
1465
//        setComplete();
1466
//        endTransaction();
1467
//
1468
//
1469
//        try {
1470
//            writeDbUnitDataSetFile(new String[] {
1471
//        "SpecimenOrObservationBase",
1472
//        "SpecimenOrObservationBase_DerivationEvent",
1473
//        "DerivationEvent",
1474
//        "DescriptionElementBase",
1475
//        "DescriptionBase",
1476
//        "TaxonBase",
1477
//        "TaxonNode",
1478
//        "Classification",
1479
//        "TypeDesignationBase",
1480
//        "TaxonName",
1481
//        "TaxonName_TypeDesignationBase",
1482
//        "HomotypicalGroup",
1483
//        "TeamOrPersonBase",
1484
//        "LanguageString",
1485
//        "DeterminationEvent"
1486
//            }, "testAllKindsOfSpecimenAssociations");
1487
//        } catch (FileNotFoundException e) {
1488
//            e.printStackTrace();
1489
//        }
1407 1490

  
1408 1491

  
1409 1492
    }
......
1471 1554
      UUID dnaSampleUuidIndividualsAssociationUuid = UUID.fromString("1fb53903-c9b9-4078-8297-5b86aec7fe21");
1472 1555
      UUID fossilTypeDesignationUuid = UUID.fromString("42ec8dcf-a923-4256-bbd5-b0d10f4de5e2");
1473 1556

  
1557
      UUID taxonNodeUuid = UUID.fromString("6b8b6ff9-66e4-4496-8e5a-7d03bdf9a076");
1474 1558
      UUID taxonUuid = UUID.fromString("07cc47a5-1a63-46a1-8366-0d59d2b90d5b");
1475 1559
      UUID synoymUuid = UUID.fromString("c16bcd9b-7d18-4fb5-af60-f9ef14c1d3a9");
1476 1560

  
......
1534 1618
      Taxon taxon = Taxon.NewInstance(taxonName, null);
1535 1619
      taxon.setUuid(taxonUuid);
1536 1620

  
1621
      Classification classification = Classification.NewInstance("Test Classification");
1622
      TaxonNode taxonNode = classification.addChildTaxon(taxon, null, null);
1623
      taxonNode.setUuid(taxonNodeUuid);
1624

  
1537 1625
      //SYNONYM
1538 1626
      Synonym synonym = Synonym.NewInstance(synonymName, null);
1539 1627
      synonym.setUuid(synoymUuid);
......
1549 1637
      //DETERMINATION EVENTS
1550 1638
      DeterminationEvent.NewInstance(taxon, derivedUnitDeterminationTaxon);
1551 1639
      DeterminationEvent.NewInstance(taxonName, derivedUnitDeterminationName);
1552
//      DeterminationEvent.NewInstance(synonym, derivedUnitDeterminationSynonym);//TODO determinationa on synonym not possible?
1640
      //        DeterminationEvent.NewInstance(synonym, derivedUnitDeterminationSynonym);//TODO determinationa on synonym not possible?
1553 1641
      DeterminationEvent.NewInstance(synonymName, derivedUnitDeterminationSynonymName);
1554 1642
      DeterminationEvent.NewInstance(orphanName, derivedUnitDeterminationOrphanName);
1555 1643

  
......
1558 1646
      specimenTypeDesignation.setTypeSpecimen(fossilTypeDesignation);
1559 1647
      taxonName.addTypeDesignation(specimenTypeDesignation, false);
1560 1648

  
1649
      classificationService.saveOrUpdate(classification);
1561 1650
      taxonService.saveOrUpdate(taxon);
1651
      taxonNodeService.saveOrUpdate(taxonNode);
1562 1652

  
1563 1653
      commitAndStartNewTransaction(null);
1564 1654

  
......
1574 1664
                  "DescriptionElementBase",
1575 1665
                  "DescriptionBase",
1576 1666
                  "TaxonBase",
1667
                  "TaxonNode",
1668
                  "Classification",
1577 1669
                  "TypeDesignationBase",
1578 1670
                  "TaxonName",
1579 1671
                  "TaxonName_TypeDesignationBase",
1580 1672
                  "HomotypicalGroup",
1581 1673
                  "TeamOrPersonBase",
1674
                  "LanguageString",
1582 1675
                  "DeterminationEvent"
1583 1676
          }, "testAllKindsOfSpecimenAssociations");
1584 1677
      } catch (FileNotFoundException e) {

Also available in: Unified diff