ref #7095 Enhance quicker service for taxon associated specimens
authorPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 25 Apr 2018 12:44:29 +0000 (14:44 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Wed, 25 Apr 2018 12:44:29 +0000 (14:44 +0200)
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/occurrence/OccurrenceDaoHibernateImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/occurrence/IOccurrenceDao.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IOccurrenceService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/WorkingSetService.java
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceTest.java
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/OccurrenceServiceTest-testAllKindsOfSpecimenAssociations.xml [new file with mode: 0644]
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/OccurrenceServiceTest.testAllKindsOfSpecimenAssociations.xml [deleted file]

index 951919647e09b320597687aac23c9df54ed56df1..59c170c6642360a35be63b495844a4dac1420256 100644 (file)
@@ -591,24 +591,136 @@ public class OccurrenceDaoHibernateImpl extends IdentifiableDaoBase<SpecimenOrOb
         return results;\r
     }\r
 \r
-\r
-    @Override\r
-    public List<SpecimenNodeWrapper> listUuidAndTitleCacheByAssociatedTaxon(List<UUID> taxonNodeUuids,\r
-            Integer limit, Integer start, List<OrderHint> orderHints){\r
-\r
-        String queryString = "SELECT "\r
+    private List<SpecimenNodeWrapper> queryIndividualAssociatedSpecimen(List<UUID> taxonNodeUuids,\r
+            Integer limit, Integer start, List<OrderHint> orderHintss){\r
+        String queryString =  "SELECT "\r
                 + "de.associatedSpecimenOrObservation.uuid, "\r
                 + "de.associatedSpecimenOrObservation.id, "\r
                 + "de.associatedSpecimenOrObservation.titleCache, "\r
                 + "tn "\r
-                + " FROM DescriptionElementBase AS de" +\r
-                " LEFT JOIN de.inDescription AS d" +\r
-                " LEFT JOIN d.taxon AS t" +\r
-                " JOIN t.taxonNodes AS tn" +\r
-                WHERE d.class = 'TaxonDescription' "\r
+                + "FROM DescriptionElementBase AS de "\r
+                + "LEFT JOIN de.inDescription AS d "\r
+                + "LEFT JOIN d.taxon AS t "\r
+                + "JOIN t.taxonNodes AS tn "\r
+                + "WHERE d.class = 'TaxonDescription' "\r
                 + "AND tn.uuid in (:taxonNodeUuids) "\r
                 ;\r
+        Query query = getSession().createQuery(queryString);\r
+\r
+        query.setParameterList("taxonNodeUuids", taxonNodeUuids);\r
+\r
+        if(limit != null) {\r
+            if(start != null) {\r
+                query.setFirstResult(start);\r
+            } else {\r
+                query.setFirstResult(0);\r
+            }\r
+            query.setMaxResults(limit);\r
+        }\r
+\r
+        List<SpecimenNodeWrapper> list = new ArrayList<>();\r
+        List<Object[]> result = query.list();\r
+        for(Object[] object : result){\r
+            list.add(new SpecimenNodeWrapper(\r
+                    new UuidAndTitleCache<SpecimenOrObservationBase>(\r
+                            (UUID) object[0],\r
+                            (Integer) object[1],\r
+                            (String) object[2]),\r
+                    (TaxonNode)object[3]));\r
+        }\r
+        return list;\r
+    }\r
+\r
+    private List<SpecimenNodeWrapper> queryTypeSpecimen(List<UUID> taxonNodeUuids,\r
+            Integer limit, Integer start, List<OrderHint> orderHints){\r
+        String queryString =  "SELECT "\r
+                + "td.typeSpecimen.uuid, "\r
+                + "td.typeSpecimen.id, "\r
+                + "td.typeSpecimen.titleCache, "\r
+                + "tn "\r
+                + "FROM SpecimenTypeDesignation AS td "\r
+                + "LEFT JOIN td.typifiedNames AS tn "\r
+                + "LEFT JOIN tn.taxonBases AS t "\r
+                + "JOIN t.taxonNodes AS tn "\r
+                + "WHERE tn.uuid in (:taxonNodeUuids) "\r
+                ;\r
+        Query query = getSession().createQuery(queryString);\r
+\r
+        query.setParameterList("taxonNodeUuids", taxonNodeUuids);\r
+\r
+        if(limit != null) {\r
+            if(start != null) {\r
+                query.setFirstResult(start);\r
+            } else {\r
+                query.setFirstResult(0);\r
+            }\r
+            query.setMaxResults(limit);\r
+        }\r
+\r
+        List<SpecimenNodeWrapper> list = new ArrayList<>();\r
+        List<Object[]> result = query.list();\r
+        for(Object[] object : result){\r
+            list.add(new SpecimenNodeWrapper(\r
+                    new UuidAndTitleCache<SpecimenOrObservationBase>(\r
+                            (UUID) object[0],\r
+                            (Integer) object[1],\r
+                            (String) object[2]),\r
+                    (TaxonNode)object[3]));\r
+        }\r
+        return list;\r
+    }\r
+\r
+    private List<SpecimenNodeWrapper> queryTaxonDeterminations(List<UUID> taxonNodeUuids,\r
+            Integer limit, Integer start, List<OrderHint> orderHints){\r
+        String queryString =  "SELECT "\r
+                + "det.identifiedUnit.uuid, "\r
+                + "det.identifiedUnit.id, "\r
+                + "det.identifiedUnit.titleCache, "\r
+                + "tn "\r
+                + "FROM DeterminationEvent AS det "\r
+                + "LEFT JOIN det.taxon AS t "\r
+                + "JOIN t.taxonNodes AS tn "\r
+                + "WHERE tn.uuid in (:taxonNodeUuids) "\r
+                ;\r
+        Query query = getSession().createQuery(queryString);\r
+\r
+        query.setParameterList("taxonNodeUuids", taxonNodeUuids);\r
+\r
+        if(limit != null) {\r
+            if(start != null) {\r
+                query.setFirstResult(start);\r
+            } else {\r
+                query.setFirstResult(0);\r
+            }\r
+            query.setMaxResults(limit);\r
+        }\r
 \r
+        List<SpecimenNodeWrapper> list = new ArrayList<>();\r
+        List<Object[]> result = query.list();\r
+        for(Object[] object : result){\r
+            list.add(new SpecimenNodeWrapper(\r
+                    new UuidAndTitleCache<SpecimenOrObservationBase>(\r
+                            (UUID) object[0],\r
+                            (Integer) object[1],\r
+                            (String) object[2]),\r
+                    (TaxonNode)object[3]));\r
+        }\r
+        return list;\r
+    }\r
+\r
+    private List<SpecimenNodeWrapper> queryTaxonNameDeterminations(List<UUID> taxonNodeUuids,\r
+            Integer limit, Integer start, List<OrderHint> orderHints){\r
+        String queryString =  "SELECT "\r
+                + "det.identifiedUnit.uuid, "\r
+                + "det.identifiedUnit.id, "\r
+                + "det.identifiedUnit.titleCache, "\r
+                + "tn "\r
+                + "FROM DeterminationEvent AS det "\r
+                + "LEFT JOIN det.taxonName AS n "\r
+                + "LEFT JOIN n.taxonBases AS t "\r
+                + "JOIN t.taxonNodes AS tn "\r
+                + "WHERE tn.uuid in (:taxonNodeUuids) "\r
+                ;\r
         Query query = getSession().createQuery(queryString);\r
 \r
         query.setParameterList("taxonNodeUuids", taxonNodeUuids);\r
@@ -635,6 +747,19 @@ public class OccurrenceDaoHibernateImpl extends IdentifiableDaoBase<SpecimenOrOb
         return list;\r
     }\r
 \r
+    @Override\r
+    public List<SpecimenNodeWrapper> listUuidAndTitleCacheByAssociatedTaxon(List<UUID> taxonNodeUuids,\r
+            Integer limit, Integer start, List<OrderHint> orderHints){\r
+\r
+        List<SpecimenNodeWrapper> list = new ArrayList<>();\r
+        list.addAll(queryIndividualAssociatedSpecimen(taxonNodeUuids, limit, start, orderHints));\r
+        list.addAll(queryTaxonDeterminations(taxonNodeUuids, limit, start, orderHints));\r
+        list.addAll(queryTaxonNameDeterminations(taxonNodeUuids, limit, start, orderHints));\r
+        list.addAll(queryTypeSpecimen(taxonNodeUuids, limit, start, orderHints));\r
+\r
+        return list;\r
+    }\r
+\r
     @Override\r
     public <T extends SpecimenOrObservationBase> List<UuidAndTitleCache<SpecimenOrObservationBase>> listUuidAndTitleCacheByAssociatedTaxon(Class<T> clazz, Taxon associatedTaxon,\r
             Integer limit, Integer start, List<OrderHint> orderHints){\r
index bf4cc7fcf1e903d55aa1f55c6b26f7acb4c6d377..a9e7a69d7f8b830a294ceed9bbe7f95326d96ef3 100644 (file)
@@ -28,6 +28,7 @@ import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
 import eu.etaxonomy.cdm.persistence.dao.common.IIdentifiableDao;\r
 import eu.etaxonomy.cdm.persistence.dao.initializer.IBeanInitializer;\r
 import eu.etaxonomy.cdm.persistence.dto.SpecimenNodeWrapper;\r
@@ -313,6 +314,23 @@ public interface IOccurrenceDao extends IIdentifiableDao<SpecimenOrObservationBa
        public <T extends SpecimenOrObservationBase> List<UuidAndTitleCache<SpecimenOrObservationBase>> listUuidAndTitleCacheByAssociatedTaxon(Class<T> type, Taxon associatedTaxon,\r
                Integer limit, Integer start, List<OrderHint> orderHints);\r
 \r
+    /**\r
+     * The method will search for specimen associated with the taxon nodes.<br>\r
+     * It will search for 3 possible association types:\r
+     * : <br>\r
+     *  - via IndividualAssociations of the taxon<br>\r
+     *  - via TypeDesignations of the taxon name<br>\r
+     *  - via Determinations of the taxon or taxon name<br>\r
+     *  <br>\r
+     *  (more are covered in\r
+     * {@link IOccurrenceDao#findOccurrences(Class, String, String, SpecimenOrObservationType, Taxon, TaxonName, MatchMode, Integer, Integer, List, List)}\r
+     * @param taxonNodeUuids a list of {@link UUID}s of the taxon nodes\r
+     * @param limit\r
+     * @param start\r
+     * @param orderHints\r
+     * @return a list of {@link SpecimenNodeWrapper} containing the {@link TaxonNode}\r
+     * and the corresponding {@link UuidAndTitleCache}  object for the specimen found for this taxon node\r
+     */\r
        public List<SpecimenNodeWrapper> listUuidAndTitleCacheByAssociatedTaxon(List<UUID> taxonNodeUuids,\r
             Integer limit, Integer start, List<OrderHint> orderHints);\r
 \r
index 46362e86202e97623664e6a4517e2235511f5802..40a4d2a503ca54206a25f978f28ef9872a5f40bc 100644 (file)
@@ -53,6 +53,7 @@ import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
 import eu.etaxonomy.cdm.persistence.dao.initializer.IBeanInitializer;\r
 import eu.etaxonomy.cdm.persistence.dto.SpecimenNodeWrapper;\r
@@ -259,7 +260,24 @@ public interface IOccurrenceService extends IIdentifiableEntityService<SpecimenO
     public <T extends SpecimenOrObservationBase> List<T> listByAssociatedTaxon(Class<T> type, Set<TaxonRelationshipEdge> includeRelationships,\r
             Taxon associatedTaxon, Integer maxDepth, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths);\r
 \r
-\r
+    /**\r
+     * The method will search for specimen associated with the taxon nodes.<br>\r
+     * It will search for 3 possible association types: <br>\r
+     * - via IndividualAssociations of the taxon<br>\r
+     *  - via TypeDesignations of the taxon name<br>\r
+     *  - via Determinations of the taxon or taxon name<br>\r
+     * <br>\r
+     * more are covered in\r
+     * {@link IOccurrenceService#findByTitle(IIdentifiableEntityServiceConfigurator)}\r
+     * @param taxonNodeUuids\r
+     *            a list of {@link UUID}s of the taxon nodes\r
+     * @param limit\r
+     * @param start\r
+     * @param orderHints\r
+     * @return a list of {@link SpecimenNodeWrapper} containing the\r
+     *         {@link TaxonNode} and the corresponding {@link UuidAndTitleCache}\r
+     *         object for the specimen found for this taxon node\r
+     */\r
     public List<SpecimenNodeWrapper> listUuidAndTitleCacheByAssociatedTaxon(List<UUID> taxonNodeUuids,\r
             Integer limit, Integer start, List<OrderHint> orderHints);\r
 \r
index dc6020319a3cd92fb7bbfbbb10613f0414b79b21..e156f517740f7ad9f0be1a3dbc6ac785f91ba581 100644 (file)
@@ -108,8 +108,6 @@ public class WorkingSetService extends
 \r
     @Override\r
     public Collection<SpecimenNodeWrapper> loadSpecimens(WorkingSet workingSet){\r
-\r
-        List<SpecimenNodeWrapper> specimenCache = new ArrayList<>();\r
         //set filter parameters\r
         TaxonNodeFilter filter = TaxonNodeFilter.NewRankInstance(workingSet.getMinRank(), workingSet.getMaxRank());\r
         workingSet.getGeoFilter().forEach(area -> filter.orArea(area.getUuid()));\r
@@ -118,24 +116,6 @@ public class WorkingSetService extends
 \r
         List<UUID> filteredNodes = taxonNodeService.uuidList(filter);\r
         return occurrenceService.listUuidAndTitleCacheByAssociatedTaxon(filteredNodes, null, null, null);\r
-//        for (UUID uuid : filteredNodes) {\r
-//            //TODO implement occurrence service for taxon nodes\r
-//            // let it return UuidAndTitleCache\r
-//            TaxonNode taxonNode = taxonNodeService.load(uuid);\r
-//            Taxon taxon = taxonNode.getTaxon();\r
-//            if(taxon!=null){\r
-//                FindOccurrencesConfigurator config = new FindOccurrencesConfigurator();\r
-//                config.setAssociatedTaxonUuid(taxon.getUuid());\r
-////                List<UuidAndTitleCache<SpecimenOrObservationBase>> list = occurrenceService.findByTitleUuidAndTitleCache(config).getRecords();\r
-//                List<SpecimenOrObservationBase> list =\r
-//                        occurrenceService.pageByAssociatedTaxon(SpecimenOrObservationBase.class,\r
-//                                null, taxon, null, null, null, null, null).getRecords();\r
-//                list.forEach(specimen ->{\r
-//                    specimenCache.add(new SpecimenNodeWrapper(new UuidAndTitleCache<>(specimen.getUuid(), specimen.getId(), specimen.getTitleCache()), taxonNode));\r
-//                });\r
-//            }\r
-//        }\r
-//        return specimenCache;\r
     }\r
 \r
     @Override\r
index 179358182cd9a1d0c763f10768c794c0c576f941..13647166b2105bf4324423082ed116e32986c9e6 100644 (file)
@@ -16,9 +16,11 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
 import java.io.FileNotFoundException;
+import java.util.Collections;
 import java.util.List;
 import java.util.Set;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 import org.apache.log4j.Logger;
 import org.junit.Test;
@@ -57,10 +59,13 @@ import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
+import eu.etaxonomy.cdm.model.taxon.Classification;
 import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.SynonymType;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;
+import eu.etaxonomy.cdm.persistence.dto.SpecimenNodeWrapper;
 import eu.etaxonomy.cdm.persistence.query.AssignmentStatus;
 import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
 import eu.etaxonomy.cdm.test.unitils.CleanSweepInsertLoadStrategy;
@@ -84,6 +89,12 @@ public class OccurrenceServiceTest extends CdmTransactionalIntegrationTest {
     @SpringBeanByType
     private ITaxonService taxonService;
 
+    @SpringBeanByType
+    private ITaxonNodeService taxonNodeService;
+
+    @SpringBeanByType
+    private IClassificationService classificationService;
+
     @SpringBeanByType
     private INameService nameService;
 
@@ -1149,13 +1160,76 @@ public class OccurrenceServiceTest extends CdmTransactionalIntegrationTest {
 
     }
 
+    @Test
+    @DataSet(loadStrategy = CleanSweepInsertLoadStrategy.class, value = "OccurrenceServiceTest-testAllKindsOfSpecimenAssociations.xml")
+    public void testListUuidAndTitleCacheByAssociatedTaxon() {
+        UUID taxonNodeUuid = UUID.fromString("6b8b6ff9-66e4-4496-8e5a-7d03bdf9a076");
+        /**
+         * Structure is as follows:
+         *
+         * Taxon ----IndividualsAssociation---> DnaSample
+         * Taxon ----TypeDesignation---> Fossil
+         * Taxon ----Determination ---> PreservedSpecimenA
+         *
+         * Taxon ---> Taxon Name ----Determination ---> PreservedSpecimenB
+         *
+         * Taxon ---> Synonym ---> SynonymName ----Determination---> PreservedSpecimenC
+         *
+         * Orphan Name (not associated with any taxon) ----Determination ---> PreservedSpecimenD
+         */
+
+        //UUIDS
+        UUID derivedUnitDeterminationTaxonUuid = UUID.fromString("941b8b22-1925-4b91-8ff8-97114499bb22");
+        UUID derivedUnitDeterminationNameUuid = UUID.fromString("0cdc7a57-6f55-45c8-b3e5-523748c381e7");
+
+        UUID derivedUnitDeterminationSynonymUuid = UUID.fromString("8eb94a7d-c802-49a7-bc10-c26de20a52c2");
+        UUID derivedUnitDeterminationSynonymNameUuid = UUID.fromString("d940a940-8caf-4a52-b1d8-ba4aad7ddae2");
+
+        UUID derivedUnitDeterminationOrphanNameUuid = UUID.fromString("587b7297-7d59-4f59-8ef3-c7a559cadeca");
+
+        UUID tissueUuidNoAssociationUuid = UUID.fromString("93e94260-5107-4b2c-9ce4-da9e1a4e7cb9");
+        UUID dnaSampleUuidIndividualsAssociationUuid = UUID.fromString("1fb53903-c9b9-4078-8297-5b86aec7fe21");
+        UUID fossilTypeDesignationUuid = UUID.fromString("42ec8dcf-a923-4256-bbd5-b0d10f4de5e2");
+
+        UUID taxonUuid = UUID.fromString("07cc47a5-1a63-46a1-8366-0d59d2b90d5b");
+        UUID synoymUuid = UUID.fromString("c16bcd9b-7d18-4fb5-af60-f9ef14c1d3a9");
+
+        UUID taxonNameUuid = UUID.fromString("e59b95c0-9ad6-48be-af62-a982ba72b917");
+        UUID synonymNameUuid = UUID.fromString("39f04b2a-b8bd-46e8-9102-ab665c64ec8e");
+        UUID orphanNameUuid = UUID.fromString("d8e56365-3ad9-4b0e-88bf-acaaab223a9b");
+
+        /*
+         * search for taxon node
+         * should retrieve all specimens associated via
+         *  - type designations (fossil)
+         *  - individuals associations (dnaSample)
+         *  - determinations on
+         *   - taxon (specimenA)
+         *   - taxon name (specimenA, specimenB)
+         */
+        FindOccurrencesConfigurator config = new FindOccurrencesConfigurator();
+        config.setAssociatedTaxonUuid(taxonUuid);
+        List<SpecimenNodeWrapper> specimens = occurrenceService
+                .listUuidAndTitleCacheByAssociatedTaxon(Collections.singletonList(taxonNodeUuid), null, null, null);
+        List<UUID> uuidList = specimens.stream().map(specimen ->
+        specimen.getUuidAndTitleCache().getUuid()).collect(Collectors.toList());
+        assertTrue(uuidList.contains(derivedUnitDeterminationNameUuid));
+        assertTrue(uuidList.contains(derivedUnitDeterminationTaxonUuid));
+        assertFalse(uuidList.contains(derivedUnitDeterminationSynonymNameUuid));
+        assertTrue(uuidList.contains(dnaSampleUuidIndividualsAssociationUuid));
+        assertTrue(uuidList.contains(fossilTypeDesignationUuid));
+        assertFalse(uuidList.contains(tissueUuidNoAssociationUuid));
+        assertFalse(uuidList.contains(derivedUnitDeterminationOrphanNameUuid));
+        assertEquals("Wrong number of associated specimens", 4, specimens.size());
+    }
+
     /**
      * This will test the retrieval of specimens that are in any way associated
      * with a taxon resp. taxon name via type designation, determination event
      * or individuals associations. It will also consider synonym relationships.
      */
     @Test
-    @DataSet(loadStrategy = CleanSweepInsertLoadStrategy.class, value = "OccurrenceServiceTest.testAllKindsOfSpecimenAssociations.xml")
+    @DataSet(loadStrategy = CleanSweepInsertLoadStrategy.class, value = "OccurrenceServiceTest-testAllKindsOfSpecimenAssociations.xml")
     public void testAllKindsOfSpecimenAssociations() {
 
         /**
@@ -1298,112 +1372,121 @@ public class OccurrenceServiceTest extends CdmTransactionalIntegrationTest {
         assertTrue(specimens.contains(derivedUnitDeterminationOrphanName));
         assertEquals("Wrong number of associated specimens", 1, specimens.size());
 
-        //        //DERIVATIVES
-        //        //determination: taxon
-        //        DerivedUnit derivedUnitDeterminationTaxon = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
-        //        derivedUnitDeterminationTaxon.setTitleCache("Derived Unit determined as taxon");
-        //        //determination: taxon name
-        //        DerivedUnit derivedUnitDeterminationName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
-        //        derivedUnitDeterminationName.setTitleCache("Derived Unit determined as name");
-        //        //determination: synonym
-        //        DerivedUnit derivedUnitDeterminationSynonym = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
-        //        derivedUnitDeterminationSynonym.setTitleCache("Derived Unit determined as synonym");
-        //        //determination: synonym name
-        //        DerivedUnit derivedUnitDeterminationSynonymName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
-        //        derivedUnitDeterminationSynonymName.setTitleCache("Derived Unit determined as synonym name");
-        //        //determination: orphan name
-        //        DerivedUnit derivedUnitDeterminationOrphanName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
-        //        derivedUnitDeterminationOrphanName.setTitleCache("Derived Unit determined as orphan name");
-        //        //no association
-        //        DerivedUnit tissueUuidNoAssociation = DerivedUnit.NewInstance(SpecimenOrObservationType.TissueSample);
-        //        tissueUuidNoAssociation.setTitleCache("tissue sample no association");
-        //        //individuals association with taxon
-        //        DerivedUnit dnaSampleUuidIndividualsAssociation = DerivedUnit.NewInstance(SpecimenOrObservationType.DnaSample);
-        //        dnaSampleUuidIndividualsAssociation.setTitleCache("dna associated via IndividualsAssociation");
-        //        //type specimen of taxon
-        //        DerivedUnit fossilTypeDesignation = DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
-        //        fossilTypeDesignation.setTitleCache("Fossil with type designation");
-        //
-        //        derivedUnitDeterminationTaxon.setUuid(derivedUnitDeterminationTaxonUuid);
-        //        derivedUnitDeterminationName.setUuid(derivedUnitDeterminationNameUuid);
-        //        derivedUnitDeterminationSynonym.setUuid(derivedUnitDeterminationSynonymUuid);
-        //        derivedUnitDeterminationSynonymName.setUuid(derivedUnitDeterminationSynonymNameUuid);
-        //        derivedUnitDeterminationOrphanName.setUuid(derivedUnitDeterminationOrphanNameUuid);
-        //        tissueUuidNoAssociation.setUuid(tissueUuidNoAssociationUuid);
-        //        dnaSampleUuidIndividualsAssociation.setUuid(dnaSampleUuidIndividualsAssociationUuid);
-        //        fossilTypeDesignation.setUuid(fossilTypeDesignationUuid);
-        //
-        //        occurrenceService.save(derivedUnitDeterminationTaxon);
-        //        occurrenceService.save(derivedUnitDeterminationName);
-        //        occurrenceService.save(derivedUnitDeterminationSynonym);
-        //        occurrenceService.save(derivedUnitDeterminationSynonymName);
-        //        occurrenceService.save(derivedUnitDeterminationOrphanName);
-        //        occurrenceService.save(tissueUuidNoAssociation);
-        //        occurrenceService.save(dnaSampleUuidIndividualsAssociation);
-        //        occurrenceService.save(fossilTypeDesignation);
-        //
-        //        //NAMES
-        //        BotanicalName taxonName = BotanicalName.PARSED_NAME("Campanula patual");
-        //        BotanicalName synonymName = BotanicalName.PARSED_NAME("Syno nyma");
-        //        BotanicalName orphanName = BotanicalName.PARSED_NAME("Orphanus lonelia");
-        //        taxonName.setUuid(taxonNameUuid);
-        //        synonymName.setUuid(synonymNameUuid);
-        //        orphanName.setUuid(orphanNameUuid);
-        //
-        //        //TAXON
-        //        Taxon taxon = Taxon.NewInstance(taxonName, null);
-        //        taxon.setUuid(taxonUuid);
-        //
-        //        //SYNONYM
-        //        Synonym synonym = Synonym.NewInstance(synonymName, null);
-        //        synonym.setUuid(synoymUuid);
-        //        taxon.addSynonym(synonym, SynonymType.HOMOTYPIC_SYNONYM_OF());
-        //
-        //        //IndividualsAssociation
-        //        TaxonDescription taxonDescription = TaxonDescription.NewInstance();
-        //        IndividualsAssociation association = IndividualsAssociation.NewInstance(dnaSampleUuidIndividualsAssociation);
-        //        association.setFeature(Feature.SPECIMEN());
-        //        taxonDescription.addElement(association);
-        //        taxon.addDescription(taxonDescription);
-        //
-        //        //DETERMINATION EVENTS
-        //        DeterminationEvent.NewInstance(taxon, derivedUnitDeterminationTaxon);
-        //        DeterminationEvent.NewInstance(taxonName, derivedUnitDeterminationName);
-        ////        DeterminationEvent.NewInstance(synonym, derivedUnitDeterminationSynonym);//TODO determinationa on synonym not possible?
-        //        DeterminationEvent.NewInstance(synonymName, derivedUnitDeterminationSynonymName);
-        //        DeterminationEvent.NewInstance(orphanName, derivedUnitDeterminationOrphanName);
-        //
-        //        //type designation
-        //        SpecimenTypeDesignation specimenTypeDesignation = SpecimenTypeDesignation.NewInstance();
-        //        specimenTypeDesignation.setTypeSpecimen(fossilTypeDesignation);
-        //        taxonName.addTypeDesignation(specimenTypeDesignation, false);
-        //
-        //        taxonService.saveOrUpdate(taxon);
-        //
-        //        commitAndStartNewTransaction(null);
-        //
-        //        setComplete();
-        //        endTransaction();
-        //
-        //
-        //        try {
-        //            writeDbUnitDataSetFile(new String[] {
-        //                    "SpecimenOrObservationBase",
-        //                    "SpecimenOrObservationBase_DerivationEvent",
-        //                    "DerivationEvent",
-        //                    "DescriptionElementBase",
-        //                    "DescriptionBase",
-        //                    "TaxonBase",
-        //                    "TypeDesignationBase",
-        //                    "TaxonName",
-        //                    "TaxonName_TypeDesignationBase",
-        //                    "HomotypicalGroup",
-        //                    "TeamOrPersonBase",
-        //                    "DeterminationEvent"
-        //            }, "testAllKindsOfSpecimenAssociations");
-        //        } catch (FileNotFoundException e) {
-        //            e.printStackTrace();
-        //        }
+//        //DERIVATIVES
+//        //determination: taxon
+//        DerivedUnit derivedUnitDeterminationTaxon = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
+//        derivedUnitDeterminationTaxon.setTitleCache("Derived Unit determined as taxon");
+//        //determination: taxon name
+//        DerivedUnit derivedUnitDeterminationName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
+//        derivedUnitDeterminationName.setTitleCache("Derived Unit determined as name");
+//        //determination: synonym
+//        DerivedUnit derivedUnitDeterminationSynonym = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
+//        derivedUnitDeterminationSynonym.setTitleCache("Derived Unit determined as synonym");
+//        //determination: synonym name
+//        DerivedUnit derivedUnitDeterminationSynonymName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
+//        derivedUnitDeterminationSynonymName.setTitleCache("Derived Unit determined as synonym name");
+//        //determination: orphan name
+//        DerivedUnit derivedUnitDeterminationOrphanName = DerivedUnit.NewInstance(SpecimenOrObservationType.PreservedSpecimen);
+//        derivedUnitDeterminationOrphanName.setTitleCache("Derived Unit determined as orphan name");
+//        //no association
+//        DerivedUnit tissueUuidNoAssociation = DerivedUnit.NewInstance(SpecimenOrObservationType.TissueSample);
+//        tissueUuidNoAssociation.setTitleCache("tissue sample no association");
+//        //individuals association with taxon
+//        DerivedUnit dnaSampleUuidIndividualsAssociation = DerivedUnit.NewInstance(SpecimenOrObservationType.DnaSample);
+//        dnaSampleUuidIndividualsAssociation.setTitleCache("dna associated via IndividualsAssociation");
+//        //type specimen of taxon
+//        DerivedUnit fossilTypeDesignation = DerivedUnit.NewInstance(SpecimenOrObservationType.Fossil);
+//        fossilTypeDesignation.setTitleCache("Fossil with type designation");
+//
+//        derivedUnitDeterminationTaxon.setUuid(derivedUnitDeterminationTaxonUuid);
+//        derivedUnitDeterminationName.setUuid(derivedUnitDeterminationNameUuid);
+//        derivedUnitDeterminationSynonym.setUuid(derivedUnitDeterminationSynonymUuid);
+//        derivedUnitDeterminationSynonymName.setUuid(derivedUnitDeterminationSynonymNameUuid);
+//        derivedUnitDeterminationOrphanName.setUuid(derivedUnitDeterminationOrphanNameUuid);
+//        tissueUuidNoAssociation.setUuid(tissueUuidNoAssociationUuid);
+//        dnaSampleUuidIndividualsAssociation.setUuid(dnaSampleUuidIndividualsAssociationUuid);
+//        fossilTypeDesignation.setUuid(fossilTypeDesignationUuid);
+//
+//        occurrenceService.save(derivedUnitDeterminationTaxon);
+//        occurrenceService.save(derivedUnitDeterminationName);
+//        occurrenceService.save(derivedUnitDeterminationSynonym);
+//        occurrenceService.save(derivedUnitDeterminationSynonymName);
+//        occurrenceService.save(derivedUnitDeterminationOrphanName);
+//        occurrenceService.save(tissueUuidNoAssociation);
+//        occurrenceService.save(dnaSampleUuidIndividualsAssociation);
+//        occurrenceService.save(fossilTypeDesignation);
+//
+//        //NAMES
+//        TaxonName taxonName = TaxonNameFactory.PARSED_BOTANICAL("Campanula patual");
+//        TaxonName synonymName = TaxonNameFactory.PARSED_BOTANICAL("Syno nyma");
+//        TaxonName orphanName = TaxonNameFactory.PARSED_BOTANICAL("Orphanus lonelia");
+//        taxonName.setUuid(taxonNameUuid);
+//        synonymName.setUuid(synonymNameUuid);
+//        orphanName.setUuid(orphanNameUuid);
+//
+//        //TAXON
+//        Taxon taxon = Taxon.NewInstance(taxonName, null);
+//        taxon.setUuid(taxonUuid);
+//
+//        Classification classification = Classification.NewInstance("Test Classification");
+//        TaxonNode taxonNode = classification.addChildTaxon(taxon, null, null);
+//        taxonNode.setUuid(taxonNodeUuid);
+//
+//        //SYNONYM
+//        Synonym synonym = Synonym.NewInstance(synonymName, null);
+//        synonym.setUuid(synoymUuid);
+//        taxon.addSynonym(synonym, SynonymType.HOMOTYPIC_SYNONYM_OF());
+//
+//        //IndividualsAssociation
+//        TaxonDescription taxonDescription = TaxonDescription.NewInstance();
+//        IndividualsAssociation association = IndividualsAssociation.NewInstance(dnaSampleUuidIndividualsAssociation);
+//        association.setFeature(Feature.SPECIMEN());
+//        taxonDescription.addElement(association);
+//        taxon.addDescription(taxonDescription);
+//
+//        //DETERMINATION EVENTS
+//        DeterminationEvent.NewInstance(taxon, derivedUnitDeterminationTaxon);
+//        DeterminationEvent.NewInstance(taxonName, derivedUnitDeterminationName);
+//        //        DeterminationEvent.NewInstance(synonym, derivedUnitDeterminationSynonym);//TODO determinationa on synonym not possible?
+//        DeterminationEvent.NewInstance(synonymName, derivedUnitDeterminationSynonymName);
+//        DeterminationEvent.NewInstance(orphanName, derivedUnitDeterminationOrphanName);
+//
+//        //type designation
+//        SpecimenTypeDesignation specimenTypeDesignation = SpecimenTypeDesignation.NewInstance();
+//        specimenTypeDesignation.setTypeSpecimen(fossilTypeDesignation);
+//        taxonName.addTypeDesignation(specimenTypeDesignation, false);
+//
+//        classificationService.save(classification);
+//        taxonService.saveOrUpdate(taxon);
+//        taxonNodeService.save(taxonNode);
+//
+//        commitAndStartNewTransaction(null);
+//
+//        setComplete();
+//        endTransaction();
+//
+//
+//        try {
+//            writeDbUnitDataSetFile(new String[] {
+//        "SpecimenOrObservationBase",
+//        "SpecimenOrObservationBase_DerivationEvent",
+//        "DerivationEvent",
+//        "DescriptionElementBase",
+//        "DescriptionBase",
+//        "TaxonBase",
+//        "TaxonNode",
+//        "Classification",
+//        "TypeDesignationBase",
+//        "TaxonName",
+//        "TaxonName_TypeDesignationBase",
+//        "HomotypicalGroup",
+//        "TeamOrPersonBase",
+//        "LanguageString",
+//        "DeterminationEvent"
+//            }, "testAllKindsOfSpecimenAssociations");
+//        } catch (FileNotFoundException e) {
+//            e.printStackTrace();
+//        }
 
 
     }
@@ -1471,6 +1554,7 @@ public class OccurrenceServiceTest extends CdmTransactionalIntegrationTest {
       UUID dnaSampleUuidIndividualsAssociationUuid = UUID.fromString("1fb53903-c9b9-4078-8297-5b86aec7fe21");
       UUID fossilTypeDesignationUuid = UUID.fromString("42ec8dcf-a923-4256-bbd5-b0d10f4de5e2");
 
+      UUID taxonNodeUuid = UUID.fromString("6b8b6ff9-66e4-4496-8e5a-7d03bdf9a076");
       UUID taxonUuid = UUID.fromString("07cc47a5-1a63-46a1-8366-0d59d2b90d5b");
       UUID synoymUuid = UUID.fromString("c16bcd9b-7d18-4fb5-af60-f9ef14c1d3a9");
 
@@ -1534,6 +1618,10 @@ public class OccurrenceServiceTest extends CdmTransactionalIntegrationTest {
       Taxon taxon = Taxon.NewInstance(taxonName, null);
       taxon.setUuid(taxonUuid);
 
+      Classification classification = Classification.NewInstance("Test Classification");
+      TaxonNode taxonNode = classification.addChildTaxon(taxon, null, null);
+      taxonNode.setUuid(taxonNodeUuid);
+
       //SYNONYM
       Synonym synonym = Synonym.NewInstance(synonymName, null);
       synonym.setUuid(synoymUuid);
@@ -1549,7 +1637,7 @@ public class OccurrenceServiceTest extends CdmTransactionalIntegrationTest {
       //DETERMINATION EVENTS
       DeterminationEvent.NewInstance(taxon, derivedUnitDeterminationTaxon);
       DeterminationEvent.NewInstance(taxonName, derivedUnitDeterminationName);
-//      DeterminationEvent.NewInstance(synonym, derivedUnitDeterminationSynonym);//TODO determinationa on synonym not possible?
+      //        DeterminationEvent.NewInstance(synonym, derivedUnitDeterminationSynonym);//TODO determinationa on synonym not possible?
       DeterminationEvent.NewInstance(synonymName, derivedUnitDeterminationSynonymName);
       DeterminationEvent.NewInstance(orphanName, derivedUnitDeterminationOrphanName);
 
@@ -1558,7 +1646,9 @@ public class OccurrenceServiceTest extends CdmTransactionalIntegrationTest {
       specimenTypeDesignation.setTypeSpecimen(fossilTypeDesignation);
       taxonName.addTypeDesignation(specimenTypeDesignation, false);
 
+      classificationService.saveOrUpdate(classification);
       taxonService.saveOrUpdate(taxon);
+      taxonNodeService.saveOrUpdate(taxonNode);
 
       commitAndStartNewTransaction(null);
 
@@ -1574,11 +1664,14 @@ public class OccurrenceServiceTest extends CdmTransactionalIntegrationTest {
                   "DescriptionElementBase",
                   "DescriptionBase",
                   "TaxonBase",
+                  "TaxonNode",
+                  "Classification",
                   "TypeDesignationBase",
                   "TaxonName",
                   "TaxonName_TypeDesignationBase",
                   "HomotypicalGroup",
                   "TeamOrPersonBase",
+                  "LanguageString",
                   "DeterminationEvent"
           }, "testAllKindsOfSpecimenAssociations");
       } catch (FileNotFoundException e) {
diff --git a/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/OccurrenceServiceTest-testAllKindsOfSpecimenAssociations.xml b/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/OccurrenceServiceTest-testAllKindsOfSpecimenAssociations.xml
new file mode 100644 (file)
index 0000000..abe4dec
--- /dev/null
@@ -0,0 +1,30 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<dataset>
+  <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5000" CREATED="2018-04-25 11:57:40.0" UUID="941b8b22-1925-4b91-8ff8-97114499bb22" UPDATED="2018-04-25 11:57:40.412" RECORDBASIS="PS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="DerivedUnit#5000&lt;941b8b22-1925-4b91-8ff8-97114499bb22&gt;" PROTECTEDIDENTITYCACHE="false" IDENTITYCACHE="[null]" PUBLISH="true" INDIVIDUALCOUNT="[null]" PREFERREDSTABLEURI="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]"/>
+  <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5001" CREATED="2018-04-25 11:57:40.0" UUID="0cdc7a57-6f55-45c8-b3e5-523748c381e7" UPDATED="2018-04-25 11:57:40.415" RECORDBASIS="PS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="DerivedUnit#5001&lt;0cdc7a57-6f55-45c8-b3e5-523748c381e7&gt;" PROTECTEDIDENTITYCACHE="false" IDENTITYCACHE="[null]" PUBLISH="true" INDIVIDUALCOUNT="[null]" PREFERREDSTABLEURI="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]"/>
+  <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5002" CREATED="2018-04-25 11:57:40.0" UUID="8eb94a7d-c802-49a7-bc10-c26de20a52c2" UPDATED="[null]" RECORDBASIS="PS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="DerivedUnit#5002&lt;8eb94a7d-c802-49a7-bc10-c26de20a52c2&gt;" PROTECTEDIDENTITYCACHE="false" IDENTITYCACHE="[null]" PUBLISH="true" INDIVIDUALCOUNT="[null]" PREFERREDSTABLEURI="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]"/>
+  <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5003" CREATED="2018-04-25 11:57:40.0" UUID="d940a940-8caf-4a52-b1d8-ba4aad7ddae2" UPDATED="2018-04-25 11:57:40.416" RECORDBASIS="PS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="DerivedUnit#5003&lt;d940a940-8caf-4a52-b1d8-ba4aad7ddae2&gt;" PROTECTEDIDENTITYCACHE="false" IDENTITYCACHE="[null]" PUBLISH="true" INDIVIDUALCOUNT="[null]" PREFERREDSTABLEURI="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]"/>
+  <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5004" CREATED="2018-04-25 11:57:40.0" UUID="587b7297-7d59-4f59-8ef3-c7a559cadeca" UPDATED="2018-04-25 11:57:40.416" RECORDBASIS="PS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="DerivedUnit#5004&lt;587b7297-7d59-4f59-8ef3-c7a559cadeca&gt;" PROTECTEDIDENTITYCACHE="false" IDENTITYCACHE="[null]" PUBLISH="true" INDIVIDUALCOUNT="[null]" PREFERREDSTABLEURI="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]"/>
+  <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5005" CREATED="2018-04-25 11:57:40.0" UUID="93e94260-5107-4b2c-9ce4-da9e1a4e7cb9" UPDATED="[null]" RECORDBASIS="TS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="DerivedUnit#5005&lt;93e94260-5107-4b2c-9ce4-da9e1a4e7cb9&gt;" PROTECTEDIDENTITYCACHE="false" IDENTITYCACHE="[null]" PUBLISH="true" INDIVIDUALCOUNT="[null]" PREFERREDSTABLEURI="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]"/>
+  <SPECIMENOROBSERVATIONBASE DTYPE="DnaSample" ID="5006" CREATED="2018-04-25 11:57:40.0" UUID="1fb53903-c9b9-4078-8297-5b86aec7fe21" UPDATED="[null]" RECORDBASIS="DS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="-title cache generation not implemented-" PROTECTEDIDENTITYCACHE="false" IDENTITYCACHE="[null]" PUBLISH="true" INDIVIDUALCOUNT="[null]" PREFERREDSTABLEURI="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]"/>
+  <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5007" CREATED="2018-04-25 11:57:40.0" UUID="42ec8dcf-a923-4256-bbd5-b0d10f4de5e2" UPDATED="2018-04-25 11:57:40.416" RECORDBASIS="FS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="DerivedUnit#5007&lt;42ec8dcf-a923-4256-bbd5-b0d10f4de5e2&gt;" PROTECTEDIDENTITYCACHE="false" IDENTITYCACHE="[null]" PUBLISH="true" INDIVIDUALCOUNT="[null]" PREFERREDSTABLEURI="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]"/>
+  <DESCRIPTIONELEMENTBASE DTYPE="IndividualsAssociation" ID="5000" CREATED="2018-04-25 11:57:40.0" UUID="df110708-bda0-447e-9fb6-e981dd36f89d" UPDATED="[null]" NAME="[null]" TIMEPERIOD_START="[null]" TIMEPERIOD_END="[null]" TIMEPERIOD_FREETEXT="[null]" ORDERRELEVANT="[null]" UNKNOWNDATA="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="[null]" INDESCRIPTION_ID="5000" AREA_ID="[null]" LANGUAGE_ID="[null]" STATUS_ID="[null]" ASSOCIATEDSPECIMENOROBSERVATION_ID="5006" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
+  <DESCRIPTIONBASE DTYPE="TaxonDescription" ID="5000" CREATED="2018-04-25 11:57:40.0" UUID="e94ecb2d-b26f-4223-9349-131ec1ea220f" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Factual data for Campanula patual" IMAGEGALLERY="false" ISDEFAULT="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" SPECIMEN_ID="[null]" TAXON_ID="5000" TAXONNAME_ID="[null]"/>
+  <TAXONBASE DTYPE="Taxon" ID="5000" CREATED="2018-04-25 11:57:40.0" UUID="07cc47a5-1a63-46a1-8366-0d59d2b90d5b" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" SECMICROREFERENCE="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Campanula patual sec. ???" APPENDEDPHRASE="[null]" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" EXCLUDED="[null]" TAXONSTATUSUNKNOWN="false" UNPLACED="[null]" PARTIAL="[null]" PROPARTE="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5000" SEC_ID="[null]" ACCEPTEDTAXON_ID="[null]" TYPE_ID="[null]"/>
+  <TAXONBASE DTYPE="Synonym" ID="5001" CREATED="2018-04-25 11:57:40.0" UUID="c16bcd9b-7d18-4fb5-af60-f9ef14c1d3a9" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" SECMICROREFERENCE="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Syno nyma syn. sec. ???" APPENDEDPHRASE="[null]" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" EXCLUDED="[null]" TAXONSTATUSUNKNOWN="[null]" UNPLACED="[null]" PARTIAL="false" PROPARTE="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5001" SEC_ID="[null]" ACCEPTEDTAXON_ID="5000" TYPE_ID="847"/>
+  <TAXONNODE ID="5000" CREATED="2018-04-25 11:57:40.0" UUID="d5a9525b-3398-463d-bbbd-de1976ba9bdc" UPDATED="2018-04-25 11:57:40.417" SORTINDEX="-1" TREEINDEX="#t5000#5000#" COUNTCHILDREN="1" MICROREFERENCEFORPARENTCHILDRELATION="[null]" EXCLUDED="false" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="[null]" REFERENCEFORPARENTCHILDRELATION_ID="[null]" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="[null]"/>
+  <TAXONNODE ID="5001" CREATED="2018-04-25 11:57:40.0" UUID="6b8b6ff9-66e4-4496-8e5a-7d03bdf9a076" UPDATED="2018-04-25 11:57:40.417" SORTINDEX="0" TREEINDEX="#t5000#5000#5001#" COUNTCHILDREN="0" MICROREFERENCEFORPARENTCHILDRELATION="[null]" EXCLUDED="false" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="5000" REFERENCEFORPARENTCHILDRELATION_ID="[null]" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="5000"/>
+  <CLASSIFICATION ID="5000" CREATED="2018-04-25 11:57:40.0" UUID="5854bb37-13f3-48e7-891e-dc8c82f355df" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Test Classification" MICROREFERENCE="[null]" TIMEPERIOD_START="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_END="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5000" REFERENCE_ID="[null]" ROOTNODE_ID="5000"/>
+  <TYPEDESIGNATIONBASE DTYPE="SpecimenTypeDesignation" ID="5000" CREATED="2018-04-25 11:57:40.0" UUID="33315177-2a71-4369-b020-fece07a8cc04" UPDATED="[null]" CITATIONMICROREFERENCE="[null]" ORIGINALNAMESTRING="[null]" NOTDESIGNATED="false" CONSERVEDTYPE="[null]" REJECTEDTYPE="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CITATION_ID="[null]" TYPESTATUS_ID="[null]" TYPENAME_ID="[null]" TYPESPECIMEN_ID="5007"/>
+  <TAXONNAME ID="5000" CREATED="2018-04-25 11:57:40.0" UUID="e59b95c0-9ad6-48be-af62-a982ba72b917" UPDATED="[null]" NAMETYPE="ICNAFP" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Campanula patual" APPENDEDPHRASE="[null]" FULLTITLECACHE="Campanula patual" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Campanula" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Campanula patual" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="patual" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5000" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/>
+  <TAXONNAME ID="5001" CREATED="2018-04-25 11:57:40.0" UUID="39f04b2a-b8bd-46e8-9102-ab665c64ec8e" UPDATED="[null]" NAMETYPE="ICNAFP" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Syno nyma" APPENDEDPHRASE="[null]" FULLTITLECACHE="Syno nyma" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Syno" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Syno nyma" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="nyma" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5000" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/>
+  <TAXONNAME ID="5002" CREATED="2018-04-25 11:57:40.0" UUID="d8e56365-3ad9-4b0e-88bf-acaaab223a9b" UPDATED="[null]" NAMETYPE="ICNAFP" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Orphanus lonelia" APPENDEDPHRASE="[null]" FULLTITLECACHE="Orphanus lonelia" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Orphanus" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Orphanus lonelia" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="lonelia" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5001" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/>
+  <TAXONNAME_TYPEDESIGNATIONBASE TAXONNAME_ID="5000" TYPEDESIGNATIONS_ID="5000"/>
+  <HOMOTYPICALGROUP ID="5000" CREATED="2018-04-25 11:57:40.0" UUID="13f325c6-7faf-49fa-b8f5-5e12db549681" UPDATED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
+  <HOMOTYPICALGROUP ID="5001" CREATED="2018-04-25 11:57:40.0" UUID="2741fbd7-5921-4cca-b795-50fec5a346bc" UPDATED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
+  <LANGUAGESTRING ID="5000" CREATED="2018-04-25 11:57:40.0" UUID="06eba124-e299-4753-9185-11cfd5aaa4fe" UPDATED="[null]" TEXT="Test Classification" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LANGUAGE_ID="406"/>
+  <DETERMINATIONEVENT ID="5000" CREATED="2018-04-25 11:57:40.0" UUID="2d39303f-58a4-416a-b253-5340465bac10" UPDATED="[null]" DESCRIPTION="[null]" TIMEPERIOD_END="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_START="[null]" PREFERREDFLAG="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" ACTOR_ID="[null]" IDENTIFIEDUNIT_ID="5000" MODIFIER_ID="[null]" TAXON_ID="5000" TAXONNAME_ID="5000"/>
+  <DETERMINATIONEVENT ID="5001" CREATED="2018-04-25 11:57:40.0" UUID="235974ae-9094-40b5-8f79-8e302e976ca7" UPDATED="[null]" DESCRIPTION="[null]" TIMEPERIOD_END="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_START="[null]" PREFERREDFLAG="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" ACTOR_ID="[null]" IDENTIFIEDUNIT_ID="5001" MODIFIER_ID="[null]" TAXON_ID="[null]" TAXONNAME_ID="5000"/>
+  <DETERMINATIONEVENT ID="5002" CREATED="2018-04-25 11:57:40.0" UUID="694c665b-4020-45c0-b0c7-4b8560b890c6" UPDATED="[null]" DESCRIPTION="[null]" TIMEPERIOD_END="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_START="[null]" PREFERREDFLAG="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" ACTOR_ID="[null]" IDENTIFIEDUNIT_ID="5003" MODIFIER_ID="[null]" TAXON_ID="[null]" TAXONNAME_ID="5001"/>
+  <DETERMINATIONEVENT ID="5003" CREATED="2018-04-25 11:57:40.0" UUID="282cd146-3991-4e72-8f92-85d49e34daaa" UPDATED="[null]" DESCRIPTION="[null]" TIMEPERIOD_END="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_START="[null]" PREFERREDFLAG="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" ACTOR_ID="[null]" IDENTIFIEDUNIT_ID="5004" MODIFIER_ID="[null]" TAXON_ID="[null]" TAXONNAME_ID="5002"/>
+</dataset>
diff --git a/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/OccurrenceServiceTest.testAllKindsOfSpecimenAssociations.xml b/cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/OccurrenceServiceTest.testAllKindsOfSpecimenAssociations.xml
deleted file mode 100644 (file)
index 0df46be..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<dataset>
-  <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5000" CREATED="2015-11-18 08:41:06.0" UUID="941b8b22-1925-4b91-8ff8-97114499bb22" UPDATED="[null]" RECORDBASIS="PS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Derived Unit determined as taxon" PUBLISH="true" INDIVIDUALCOUNT="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]" PROTECTEDIDENTITYCACHE="true" IDENTITYCACHE="ID1"/>
-  <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5001" CREATED="2015-11-18 08:41:06.0" UUID="0cdc7a57-6f55-45c8-b3e5-523748c381e7" UPDATED="[null]" RECORDBASIS="PS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Derived Unit determined as name" PUBLISH="true" INDIVIDUALCOUNT="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]" PROTECTEDIDENTITYCACHE="true" IDENTITYCACHE="ID1"/>
-  <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5002" CREATED="2015-11-18 08:41:06.0" UUID="8eb94a7d-c802-49a7-bc10-c26de20a52c2" UPDATED="[null]" RECORDBASIS="PS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Derived Unit determined as synonym" PUBLISH="true" INDIVIDUALCOUNT="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]" PROTECTEDIDENTITYCACHE="true" IDENTITYCACHE="ID1"/>
-  <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5003" CREATED="2015-11-18 08:41:06.0" UUID="d940a940-8caf-4a52-b1d8-ba4aad7ddae2" UPDATED="[null]" RECORDBASIS="PS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Derived Unit determined as synonym name" PUBLISH="true" INDIVIDUALCOUNT="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]" PROTECTEDIDENTITYCACHE="true" IDENTITYCACHE="ID1"/>
-  <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5004" CREATED="2015-11-18 08:41:06.0" UUID="587b7297-7d59-4f59-8ef3-c7a559cadeca" UPDATED="[null]" RECORDBASIS="PS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Derived Unit determined as orphan name" PUBLISH="true" INDIVIDUALCOUNT="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]" PROTECTEDIDENTITYCACHE="true" IDENTITYCACHE="ID1"/>
-  <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5005" CREATED="2015-11-18 08:41:06.0" UUID="93e94260-5107-4b2c-9ce4-da9e1a4e7cb9" UPDATED="[null]" RECORDBASIS="TS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="tissue sample no association" PUBLISH="true" INDIVIDUALCOUNT="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]" PROTECTEDIDENTITYCACHE="true" IDENTITYCACHE="ID1"/>
-  <SPECIMENOROBSERVATIONBASE DTYPE="DnaSample" ID="5006" CREATED="2015-11-18 08:41:06.0" UUID="1fb53903-c9b9-4078-8297-5b86aec7fe21" UPDATED="[null]" RECORDBASIS="DS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="dna associated via IndividualsAssociation" PUBLISH="true" INDIVIDUALCOUNT="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]" PROTECTEDIDENTITYCACHE="true" IDENTITYCACHE="ID1"/>
-  <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" ID="5007" CREATED="2015-11-18 08:41:06.0" UUID="42ec8dcf-a923-4256-bbd5-b0d10f4de5e2" UPDATED="[null]" RECORDBASIS="FS" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Fossil with type designation" PUBLISH="true" INDIVIDUALCOUNT="[null]" ACCESSIONNUMBER="[null]" BARCODE="[null]" CATALOGNUMBER="[null]" COLLECTORSNUMBER="[null]" EXSICCATUM="[null]" ORIGINALLABELINFO="[null]" FIELDNOTES="[null]" FIELDNUMBER="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LIFESTAGE_ID="[null]" SEX_ID="[null]" KINDOFUNIT_ID="[null]" COLLECTION_ID="[null]" DERIVEDFROM_ID="[null]" STOREDUNDER_ID="[null]" PRESERVATION_ID="[null]" GATHERINGEVENT_ID="[null]" PRIMARYCOLLECTOR_ID="[null]" MEDIASPECIMEN_ID="[null]" DNAQUALITY_ID="[null]" PROTECTEDIDENTITYCACHE="true" IDENTITYCACHE="ID1"/>
-  <DESCRIPTIONELEMENTBASE DTYPE="IndividualsAssociation" ID="5000" CREATED="2015-11-18 08:41:06.0" UUID="99aacc2e-a4d9-4a7d-8795-6214c00e1f93" UPDATED="[null]" NAME="[null]" TIMEPERIOD_START="[null]" TIMEPERIOD_END="[null]" TIMEPERIOD_FREETEXT="[null]" ORDERRELEVANT="[null]" UNKNOWNDATA="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="[null]" INDESCRIPTION_ID="5000" AREA_ID="[null]" LANGUAGE_ID="[null]" STATUS_ID="[null]" ASSOCIATEDSPECIMENOROBSERVATION_ID="5006" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
-  <DESCRIPTIONBASE DTYPE="TaxonDescription" ID="5000" CREATED="2015-11-18 08:41:06.0" UUID="ebe6d8c0-0216-4222-a05d-3b4efe85af30" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Taxon description for Campanula patual" IMAGEGALLERY="false" ISDEFAULT="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" SPECIMEN_ID="[null]" TAXON_ID="5000" TAXONNAME_ID="[null]"/>
-  <TAXONBASE DTYPE="Taxon" ID="5000" CREATED="2015-11-18 08:41:06.0" UUID="07cc47a5-1a63-46a1-8366-0d59d2b90d5b" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Campanula patual sec. ???" APPENDEDPHRASE="[null]" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5000" SEC_ID="[null]"/>
-  <TAXONBASE DTYPE="Synonym" ID="5001" CREATED="2015-11-18 08:41:06.0" UUID="c16bcd9b-7d18-4fb5-af60-f9ef14c1d3a9" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Syno nyma sec. ???" APPENDEDPHRASE="[null]" DOUBTFUL="false" PUBLISH="true" USENAMECACHE="false" TAXONSTATUSUNKNOWN="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5001" SEC_ID="[null]"  PARTIAL="false" PROPARTE="false" ACCEPTEDTAXON_ID="5000" TYPE_ID="847"/>
-  <TYPEDESIGNATIONBASE DTYPE="SpecimenTypeDesignation" ID="5000" CREATED="2015-11-18 08:41:06.0" UUID="c37ea03b-2b07-44c3-aff5-f32f5ccbe6fe" UPDATED="[null]" CITATIONMICROREFERENCE="[null]" ORIGINALNAMESTRING="[null]" NOTDESIGNATED="false" CONSERVEDTYPE="[null]" REJECTEDTYPE="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CITATION_ID="[null]" TYPESTATUS_ID="[null]" TYPENAME_ID="[null]" TYPESPECIMEN_ID="5007"/>
-  <TAXONNAME NAMETYPE="ICNAFP" ID="5000" CREATED="2015-11-18 08:41:06.0" UUID="e59b95c0-9ad6-48be-af62-a982ba72b917" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Campanula patual" APPENDEDPHRASE="[null]" FULLTITLECACHE="Campanula patual" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Campanula" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Campanula patual" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="patual" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5000" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/>
-  <TAXONNAME NAMETYPE="ICNAFP" ID="5001" CREATED="2015-11-18 08:41:06.0" UUID="39f04b2a-b8bd-46e8-9102-ab665c64ec8e" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Syno nyma" APPENDEDPHRASE="[null]" FULLTITLECACHE="Syno nyma" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Syno" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Syno nyma" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="nyma" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5000" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/>
-  <TAXONNAME NAMETYPE="ICNAFP" ID="5002" CREATED="2015-11-18 08:41:06.0" UUID="d8e56365-3ad9-4b0e-88bf-acaaab223a9b" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Orphanus lonelia" APPENDEDPHRASE="[null]" FULLTITLECACHE="Orphanus lonelia" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="Orphanus" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Orphanus lonelia" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="lonelia" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5001" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORSHIP_ID="[null]" COMBINATIONAUTHORSHIP_ID="[null]" EXBASIONYMAUTHORSHIP_ID="[null]" EXCOMBINATIONAUTHORSHIP_ID="[null]"/>
-  <TAXONNAME_TYPEDESIGNATIONBASE TAXONNAME_ID="5000" TYPEDESIGNATIONS_ID="5000"/>
-  <HOMOTYPICALGROUP ID="5000" CREATED="2015-11-18 08:41:06.0" UUID="1bb377be-f723-4e1f-a1b4-cfa2742a9551" UPDATED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
-  <HOMOTYPICALGROUP ID="5001" CREATED="2015-11-18 08:41:06.0" UUID="32848ac1-b263-47de-9b7e-4fa7137eb9fd" UPDATED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
-  <DETERMINATIONEVENT ID="5000" CREATED="2015-11-18 08:41:06.0" UUID="e4240702-ed31-40e0-b6e0-093ee1260f13" UPDATED="[null]" DESCRIPTION="[null]" TIMEPERIOD_END="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_START="[null]" PREFERREDFLAG="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" ACTOR_ID="[null]" IDENTIFIEDUNIT_ID="5000" MODIFIER_ID="[null]" TAXON_ID="5000" TAXONNAME_ID="5000"/>
-  <DETERMINATIONEVENT ID="5001" CREATED="2015-11-18 08:41:06.0" UUID="f12924ae-9632-4f65-bbfb-98878d521ae5" UPDATED="[null]" DESCRIPTION="[null]" TIMEPERIOD_END="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_START="[null]" PREFERREDFLAG="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" ACTOR_ID="[null]" IDENTIFIEDUNIT_ID="5001" MODIFIER_ID="[null]" TAXON_ID="[null]" TAXONNAME_ID="5000"/>
-  <DETERMINATIONEVENT ID="5002" CREATED="2015-11-18 08:41:06.0" UUID="858ff17c-cc9a-4e22-a439-3dc00bee302b" UPDATED="[null]" DESCRIPTION="[null]" TIMEPERIOD_END="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_START="[null]" PREFERREDFLAG="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" ACTOR_ID="[null]" IDENTIFIEDUNIT_ID="5003" MODIFIER_ID="[null]" TAXON_ID="[null]" TAXONNAME_ID="5001"/>
-  <DETERMINATIONEVENT ID="5003" CREATED="2015-11-18 08:41:06.0" UUID="a06a942b-c8aa-4498-ab1c-98c902789604" UPDATED="[null]" DESCRIPTION="[null]" TIMEPERIOD_END="[null]" TIMEPERIOD_FREETEXT="[null]" TIMEPERIOD_START="[null]" PREFERREDFLAG="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" ACTOR_ID="[null]" IDENTIFIEDUNIT_ID="5004" MODIFIER_ID="[null]" TAXON_ID="[null]" TAXONNAME_ID="5002"/>
-</dataset>