test SecurityTest.testTaxonDeleteAllow_2() adapted, changed taxonService.delete(Taxon...
authorKatja Luther <k.luther@bgbm.org>
Wed, 24 Jul 2013 07:48:53 +0000 (07:48 +0000)
committerKatja Luther <k.luther@bgbm.org>
Wed, 24 Jul 2013 07:48:53 +0000 (07:48 +0000)
add a test for the deletion of the taxondescriptions (ticket #2982)

cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/datagenerator/TaxonGenerator.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/ITaxonService.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonServiceImpl.java
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/SecurityTest.java
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonServiceImplTest.java
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/SecurityTest.xml

index 704dffb8c7cf57531162e29c93674123e12a7bfd..f88844d2198afaee6a99483de10ba7d0789082b7 100644 (file)
@@ -86,6 +86,7 @@ public class TaxonGenerator {
         botSpecies.setUuid(SPECIES1_NAME_UUID);
         Taxon childTaxon = Taxon.NewInstance(botSpecies, sec); 
         childTaxon.setUuid(SPECIES1_UUID);
+        childTaxon.addDescription(getTestDescription());
         Classification classification = getTestClassification("TestClassification");
         classification.addParentChild(genusTaxon, childTaxon, citationRef, "456");
 //        childTaxon.setTaxonomicParent(genusTaxon, citationRef, "456"); 
@@ -135,6 +136,7 @@ public class TaxonGenerator {
         childTaxon2.addMisappliedName(misappliedName, citationRef, "125");
        
         genusTaxon.addDescription(getTestDescription());
+       
         
         return genusTaxon; 
        }
index e7fb2bf3c8f8c7865fd0e155a5e8b221e393fd5f..0fbf11fceea6c292058c91e3982f4001dcd86851 100644 (file)
@@ -162,7 +162,7 @@ public interface ITaxonService extends IIdentifiableEntityService<TaxonBase>{
      * but also it is than difficult to decide how to handle other names
      * in the homotypic group. It is up to the implementing class to
      * handle this situation via an exception or in another way.
-     * TODO Open issue: does the old synonym need to be deleted from the database?
+     *
      *
      * @param synonym
      *                                 the synonym to change into an accepted taxon
index 205e263d48dd954e855a2785652b7b74aa8e81b8..086c59ccbf662964fcf903f35dc2f0873b3c0c85 100644 (file)
@@ -257,14 +257,12 @@ public class TaxonServiceImpl extends IdentifiableServiceBase<TaxonBase,ITaxonDa
     /* (non-Javadoc)\r
      * @see eu.etaxonomy.cdm.api.service.ITaxonService#changeSynonymToAcceptedTaxon(eu.etaxonomy.cdm.model.taxon.Synonym, eu.etaxonomy.cdm.model.taxon.Taxon)\r
      */\r
-    //TODO correct delete handling still needs to be implemented / checked\r
+    \r
     @Override\r
     @Transactional(readOnly = false)\r
     public Taxon changeSynonymToAcceptedTaxon(Synonym synonym, Taxon acceptedTaxon, boolean deleteSynonym, boolean copyCitationInfo, Reference citation, String microCitation) throws HomotypicalGroupChangeException{\r
-\r
        \r
-       //TODO, check whether the synonym is related to the accepted taxon or not (see java doc)\r
-        TaxonNameBase<?,?> acceptedName = acceptedTaxon.getName();\r
+       TaxonNameBase<?,?> acceptedName = acceptedTaxon.getName();\r
         TaxonNameBase<?,?> synonymName = synonym.getName();\r
         HomotypicalGroup synonymHomotypicGroup = synonymName.getHomotypicalGroup();\r
 \r
@@ -289,7 +287,7 @@ public class TaxonServiceImpl extends IdentifiableServiceBase<TaxonBase,ITaxonDa
         }\r
 \r
         //synonym.getName().removeTaxonBase(synonym);\r
-        //TODO correct delete handling still needs to be implemented / checked\r
+       \r
         if (deleteSynonym){\r
 //                     deleteSynonym(synonym, taxon, false);\r
             try {\r
index c8389b27948d5499e51edca8611d60b1c9101966..df661b6833aca508901ad20fb17192cd4588ad78 100644 (file)
@@ -39,6 +39,7 @@ import org.unitils.dbunit.annotation.DataSet;
 import org.unitils.spring.annotation.SpringBean;\r
 import org.unitils.spring.annotation.SpringBeanByType;\r
 \r
+import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;\r
 import eu.etaxonomy.cdm.config.Configuration;\r
 import eu.etaxonomy.cdm.database.EvaluationFailedException;\r
 import eu.etaxonomy.cdm.model.common.User;\r
@@ -565,11 +566,7 @@ public class SecurityTest extends CdmTransactionalIntegrationTestWithSecurity{
      * test with admin account - should succeed\r
      */\r
     @Test\r
-    @Ignore\r
-    /*FIXME fails due to org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)\r
-     *       see ticket #3086\r
-     */\r
-    public final void testTaxonDeleteAllow_2() {\r
+   public final void testTaxonDeleteAllow_2() {\r
 \r
         SecurityContext context = SecurityContextHolder.getContext();\r
 \r
@@ -577,9 +574,14 @@ public class SecurityTest extends CdmTransactionalIntegrationTestWithSecurity{
         context.setAuthentication(authentication);\r
         RuntimeException securityException= null;\r
 \r
-        TaxonBase<?> taxon = taxonService.load(UUID_ACHERONTINII);\r
+        Taxon taxon = (Taxon)taxonService.load(UUID_ACHERONTINII);\r
         try{\r
-            taxonService.delete(taxon);\r
+            try {\r
+                               taxonService.deleteTaxon(taxon, null, null);\r
+                       } catch (ReferencedObjectUndeletableException e) {\r
+                               // TODO Auto-generated catch block\r
+                               e.printStackTrace();\r
+                       }\r
             commitAndStartNewTransaction(null);\r
         } catch (RuntimeException e){\r
             securityException  = findSecurityRuntimeException(e);\r
@@ -592,7 +594,7 @@ public class SecurityTest extends CdmTransactionalIntegrationTestWithSecurity{
         }\r
         Assert.assertNull("evaluation must not fail since the user is permitted, CAUSE :" + (securityException != null ? securityException.getMessage() : ""), securityException);\r
         // reload taxon\r
-        taxon = taxonService.load(UUID_ACHERONTINII);\r
+        taxon = (Taxon)taxonService.load(UUID_ACHERONTINII);\r
         Assert.assertNull("The taxon must be deleted", taxon);\r
     }\r
 \r
index f6beeabf69a857ca4729ba37bc79b2482d5616ad..6bf06e51d626a51baa08c946175031277eabed0c 100644 (file)
@@ -34,6 +34,7 @@ import eu.etaxonomy.cdm.api.service.exception.HomotypicalGroupChangeException;
 import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;\r
 import eu.etaxonomy.cdm.datagenerator.TaxonGenerator;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.name.BotanicalName;\r
 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
 import eu.etaxonomy.cdm.model.name.NameRelationship;\r
@@ -52,6 +53,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
+import eu.etaxonomy.cdm.persistence.dao.description.IDescriptionDao;\r
 import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;\r
 import eu.etaxonomy.cdm.test.unitils.CleanSweepInsertLoadStrategy;\r
 \r
@@ -79,6 +81,11 @@ public class TaxonServiceImplTest extends CdmTransactionalIntegrationTest {
 \r
     @SpringBeanByType\r
     private ITaxonNodeService nodeService;\r
+    \r
+    @SpringBeanByType\r
+    private IDescriptionService descriptionService;\r
+    \r
+   \r
 \r
 \r
 \r
@@ -1028,9 +1035,17 @@ public class TaxonServiceImplTest extends CdmTransactionalIntegrationTest {
                UUID uuid = service.save(testTaxon);\r
                \r
                Taxon speciesTaxon = (Taxon)service.find(TaxonGenerator.SPECIES1_UUID);\r
-               \r
+               Iterator<TaxonDescription> descriptionIterator = speciesTaxon.getDescriptions().iterator();\r
+               UUID descrUUID = null;\r
+               UUID descrElementUUID = null;\r
+               if (descriptionIterator.hasNext()){\r
+                       TaxonDescription descr = descriptionIterator.next();\r
+                       descrUUID = descr.getUuid();\r
+                       descrElementUUID = descr.getElements().iterator().next().getUuid();\r
+               }\r
                BotanicalName taxonName = (BotanicalName) nameService.find(TaxonGenerator.SPECIES1_NAME_UUID);\r
                assertNotNull(taxonName);\r
+               \r
                TaxonDeletionConfigurator config = new TaxonDeletionConfigurator();\r
                config.setDeleteNameIfPossible(false);\r
                try {\r
@@ -1044,8 +1059,9 @@ public class TaxonServiceImplTest extends CdmTransactionalIntegrationTest {
                \r
                taxonName = (BotanicalName) nameService.find(TaxonGenerator.SPECIES1_NAME_UUID);\r
                Taxon taxon = (Taxon)service.find(TaxonGenerator.SPECIES1_UUID);\r
-               \r
-               \r
+               //descriptionService.find(descrUUID);\r
+               assertNull(descriptionService.find(descrUUID));\r
+               assertNull(descriptionService.getDescriptionElementByUuid(descrElementUUID));\r
                //assertNull(synName);\r
                assertNotNull(taxonName);\r
                assertNull(taxon);\r
index 667a2d8e85870a21211acb5e7a5576471ecdff50..c6640bef3e17487cabe968de41d46bebc42337c5 100644 (file)
   <HOMOTYPICALGROUP ID="35" CREATED="2008-12-10 09:56:07.0" UUID="baf4e929-4291-4635-aa35-1255069eefe6" UPDATED="2008-12-10 09:56:07.253"/>\r
   <HOMOTYPICALGROUP ID="36" CREATED="2008-12-10 09:56:07.0" UUID="b2b007a4-9c8c-43a1-8da4-20ed85464cf2" UPDATED="2008-12-10 09:56:07.253"/>\r
 \r
-  <TAXONNAMEBASE DTYPE="ZoologicalName" ID="36" CREATED="2008-12-10 09:56:07.0" UUID="6d1d279a-d245-4b16-9049-44a2b028c303" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="Acherontia" PROTECTEDTITLECACHE="true" PARSINGPROBLEM="0" FULLTITLECACHE="" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="Westwood, 1847" NAMECACHE="Acherontia styx" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false"  BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" RANK_ID="774" GENUSORUNINOMIAL="Acherontia" NOMENCLATURALREFERENCE_ID="1"/>\r
-  <TAXONNAMEBASE DTYPE="ZoologicalName" ID="38" CREATED="2008-12-10 09:56:07.0" UUID="7969821b-a2cf-4d01-95ec-6a5ed0ca3f69" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="Acherontia lachesis (Fabricius, 1798)" PROTECTEDTITLECACHE="true" PARSINGPROBLEM="0" FULLTITLECACHE="" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="(Fabricius, 1798)" NAMECACHE="Acherontia lachesis" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false"  BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" HOMOTYPICALGROUP_ID="35" RANK_ID="765" GENUSORUNINOMIAL="Acherontia" SPECIFICEPITHET="lachesis" NOMENCLATURALREFERENCE_ID="1"/>\r
-  <TAXONNAMEBASE DTYPE="ZoologicalName" ID="37" CREATED="2008-12-10 09:56:07.0" UUID="61b1dcae-8aa6-478a-bcd6-080cf0eb6ad7" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="Acherontia styx Westwood, 1847" PROTECTEDTITLECACHE="true" PARSINGPROBLEM="0" FULLTITLECACHE="" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="Westwood, 1847" NAMECACHE="Acherontia styx" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false"  BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" HOMOTYPICALGROUP_ID="36" RANK_ID="765" GENUSORUNINOMIAL="Acherontia" SPECIFICEPITHET="styx" NOMENCLATURALREFERENCE_ID="1"/>\r
-  <TAXONNAMEBASE DTYPE="ZoologicalName" ID="39" CREATED="2008-12-10 09:56:07.0" UUID="9d98c15a-48c4-4b0f-8d2d-30eac2b6b638" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="Acherontia ciprosus (Fabricius, 1797)" PROTECTEDTITLECACHE="true" PARSINGPROBLEM="0" FULLTITLECACHE="" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="(Fabricius, 1797)" NAMECACHE="Acherontia ciprosus" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false"  BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" HOMOTYPICALGROUP_ID="35" RANK_ID="765" GENUSORUNINOMIAL="Acherontia" SPECIFICEPITHET="ciprosus" NOMENCLATURALREFERENCE_ID="1"/>\r
-  <TAXONNAMEBASE DTYPE="ZoologicalName" ID="40" CREATED="2008-12-10 09:56:07.0" UUID="57d756e1-9381-43f1-8705-d29e7046483a" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="SynGenus" PROTECTEDTITLECACHE="true" PARSINGPROBLEM="0" FULLTITLECACHE="" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="(Fabricius, 1797)" NAMECACHE="SynGenus" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false"  BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" HOMOTYPICALGROUP_ID="35" RANK_ID="774" GENUSORUNINOMIAL="SynGenus" NOMENCLATURALREFERENCE_ID="1"/>\r
-  <TAXONNAMEBASE DTYPE="ZoologicalName" ID="41" CREATED="2008-12-10 09:56:07.0" UUID="507b60dd-113d-4ab7-9665-25d0374bd6d1" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="Acherontiini" PROTECTEDTITLECACHE="true" PARSINGPROBLEM="0" FULLTITLECACHE="" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="(Laspeyres, 1809)" NAMECACHE="Acherontia atropos" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false"  BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false"  RANK_ID="791" GENUSORUNINOMIAL="" SPECIFICEPITHET="" NOMENCLATURALREFERENCE_ID="1"/>\r
-  <TAXONNAMEBASE DTYPE="ZoologicalName" ID="42" CREATED="2008-12-10 09:56:07.0" UUID="eb17b80a-9be6-4642-a6a8-b19a318925e6" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="Lactuca" PROTECTEDTITLECACHE="true" PARSINGPROBLEM="0" FULLTITLECACHE="" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="L." NAMECACHE="Lactuca" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false"  BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false"  RANK_ID="791" GENUSORUNINOMIAL="" SPECIFICEPITHET="" NOMENCLATURALREFERENCE_ID="1"/>\r
+  <TAXONNAMEBASE DTYPE="ZoologicalName" ID="36" CREATED="2008-12-10 09:56:07.0" UUID="6d1d279a-d245-4b16-9049-44a2b028c303" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="Acherontia" PROTECTEDTITLECACHE="true" PARSINGPROBLEM="0" FULLTITLECACHE="[null]" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="Westwood, 1847" NAMECACHE="Acherontia styx" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false"  BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" RANK_ID="774" GENUSORUNINOMIAL="Acherontia" NOMENCLATURALREFERENCE_ID="1"/>\r
+  <TAXONNAMEBASE DTYPE="ZoologicalName" ID="38" CREATED="2008-12-10 09:56:07.0" UUID="7969821b-a2cf-4d01-95ec-6a5ed0ca3f69" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="Acherontia lachesis (Fabricius, 1798)" PROTECTEDTITLECACHE="true" PARSINGPROBLEM="0" FULLTITLECACHE="[null]" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="(Fabricius, 1798)" NAMECACHE="Acherontia lachesis" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false"  BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" HOMOTYPICALGROUP_ID="35" RANK_ID="765" GENUSORUNINOMIAL="Acherontia" SPECIFICEPITHET="lachesis" NOMENCLATURALREFERENCE_ID="1"/>\r
+  <TAXONNAMEBASE DTYPE="ZoologicalName" ID="37" CREATED="2008-12-10 09:56:07.0" UUID="61b1dcae-8aa6-478a-bcd6-080cf0eb6ad7" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="Acherontia styx Westwood, 1847" PROTECTEDTITLECACHE="true" PARSINGPROBLEM="0" FULLTITLECACHE="[null]" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="Westwood, 1847" NAMECACHE="Acherontia styx" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false"  BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" HOMOTYPICALGROUP_ID="36" RANK_ID="765" GENUSORUNINOMIAL="Acherontia" SPECIFICEPITHET="styx" NOMENCLATURALREFERENCE_ID="1"/>\r
+  <TAXONNAMEBASE DTYPE="ZoologicalName" ID="39" CREATED="2008-12-10 09:56:07.0" UUID="9d98c15a-48c4-4b0f-8d2d-30eac2b6b638" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="Acherontia ciprosus (Fabricius, 1797)" PROTECTEDTITLECACHE="true" PARSINGPROBLEM="0" FULLTITLECACHE="[null]" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="(Fabricius, 1797)" NAMECACHE="Acherontia ciprosus" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false"  BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" HOMOTYPICALGROUP_ID="35" RANK_ID="765" GENUSORUNINOMIAL="Acherontia" SPECIFICEPITHET="ciprosus" NOMENCLATURALREFERENCE_ID="1"/>\r
+  <TAXONNAMEBASE DTYPE="ZoologicalName" ID="40" CREATED="2008-12-10 09:56:07.0" UUID="57d756e1-9381-43f1-8705-d29e7046483a" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="SynGenus" PROTECTEDTITLECACHE="true" PARSINGPROBLEM="0" FULLTITLECACHE="[null]" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="(Fabricius, 1797)" NAMECACHE="SynGenus" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false"  BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" HOMOTYPICALGROUP_ID="35" RANK_ID="774" GENUSORUNINOMIAL="SynGenus" NOMENCLATURALREFERENCE_ID="1"/>\r
+  <TAXONNAMEBASE DTYPE="ZoologicalName" ID="41" CREATED="2008-12-10 09:56:07.0" UUID="507b60dd-113d-4ab7-9665-25d0374bd6d1" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="Acherontiini" PROTECTEDTITLECACHE="true" PARSINGPROBLEM="0" FULLTITLECACHE="[null]" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="(Laspeyres, 1809)" NAMECACHE="Acherontia atropos" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false"  BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false"  RANK_ID="791" GENUSORUNINOMIAL="[null]" SPECIFICEPITHET="[null]" NOMENCLATURALREFERENCE_ID="1"/>\r
+  <TAXONNAMEBASE DTYPE="ZoologicalName" ID="42" CREATED="2008-12-10 09:56:07.0" UUID="eb17b80a-9be6-4642-a6a8-b19a318925e6" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="Lactuca" PROTECTEDTITLECACHE="true" PARSINGPROBLEM="0" FULLTITLECACHE="[null]" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="L." NAMECACHE="Lactuca" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false"  BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false"  RANK_ID="791" GENUSORUNINOMIAL="[null]" SPECIFICEPITHET="[null]" NOMENCLATURALREFERENCE_ID="1"/>\r
 \r
 \r
   <TAXONNODE ID="1" CREATED="2009-06-18 13:47:59.0" UUID="0b5846e5-b8d2-4ca9-ac51-099286ea4adc" COUNTCHILDREN="0" TAXON_ID="38" PARENT_ID="3" CLASSIFICATION_ID="1"/>\r
   <TAXONNODE_AUD ID="1" REV="1025" REVTYPE="0" CREATED="2009-06-18 13:47:59.0" UUID="4c8a01a1-6037-43ce-8421-15258d9f5c11" COUNTCHILDREN="0" TAXON_ID="38" CLASSIFICATION_ID="1"/>\r
   <TAXONNODE_AUD ID="2" REV="1025" REVTYPE="0" CREATED="2009-06-18 13:47:59.0" UUID="770239f6-4fa8-496b-8738-fe8f7b2ad519" COUNTCHILDREN="0" TAXON_ID="37" CLASSIFICATION_ID="1"/>\r
   <TAXONNODE_AUD ID="3" REV="1025" REVTYPE="0" CREATED="2009-06-18 13:47:59.0" UUID="f445e0fe-32c8-47b1-b257-86da3d57c016" COUNTCHILDREN="2" TAXON_ID="36" CLASSIFICATION_ID="1"/>\r
+  <TAXONNODE_AUD ID="4" REV="1025" REVTYPE="0" CREATED="2009-06-18 13:47:59.0" UUID="cecfa77f-f26a-4476-9d87-a8d993cb55d9" COUNTCHILDREN="1" TAXON_ID="41" CLASSIFICATION_ID="1"/>\r
 \r
   <CLASSIFICATION ID="1" CREATED="2009-06-18 13:47:59.0" UUID="aeee7448-5298-4991-b724-8d5b75a0a7a9" PROTECTEDTITLECACHE="false" TITLECACHE="TestBaum" NAME_ID="1"/>\r
   <CLASSIFICATION_AUD ID="1" REV="1025" REVTYPE="0" CREATED="2009-06-18 13:47:59.0" UUID="aeee7448-5298-4991-b724-8d5b75a0a7a9" PROTECTEDTITLECACHE="false" TITLECACHE="TestBaum" NAME_ID="1"/>\r
+  <CLASSIFICATION_TAXONNODE CLASSIFICATION_ID="1" ROOTNODES_ID="4"/>\r
 \r
   <DESCRIPTIONBASE DTYPE="TaxonDescription" ID="3" CREATED="2009-06-25 18:26:26.0" UUID="eb17b80a-9be6-4642-a6a8-b19a318925e6" PROTECTEDTITLECACHE="true" TITLECACHE="desc3" IMAGEGALLERY="false" TAXON_ID="37"/>\r
   <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="1" INDESCRIPTION_ID="3" CREATED="2008-12-10 09:56:07.0" UUID="31a0160a-51b2-4565-85cf-2be58cb561d6" UPDATED="2008-12-10 09:56:07.253" FEATURE_ID="[null]"/>\r