cleanup
[cdmlib.git] / cdmlib-services / src / test / java / eu / etaxonomy / cdm / api / service / TaxonServiceSearchTest.java
index ce819a88846720eeef84111fd3e36d23efa760be..3d811fedb5d88041db43d143294d33f4ffa9230b 100644 (file)
@@ -44,7 +44,6 @@ import eu.etaxonomy.cdm.common.UTF8;
 import eu.etaxonomy.cdm.common.monitor.DefaultProgressMonitor;\r
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
 import eu.etaxonomy.cdm.model.common.Language;\r
 import eu.etaxonomy.cdm.model.description.CategoricalData;\r
@@ -62,7 +61,7 @@ import eu.etaxonomy.cdm.model.location.Country;
 import eu.etaxonomy.cdm.model.location.NamedArea;\r
 import eu.etaxonomy.cdm.model.name.IBotanicalName;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.name.TaxonName;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameFactory;\r
 import eu.etaxonomy.cdm.model.reference.Reference;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
@@ -74,6 +73,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.model.term.DefinedTermBase;\r
 import eu.etaxonomy.cdm.persistence.query.MatchMode;\r
 import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
 import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;\r
@@ -81,29 +81,30 @@ import eu.etaxonomy.cdm.test.unitils.CleanSweepInsertLoadStrategy;
 \r
 /**\r
  * @author a.babadshanjan, a.kohlbecker\r
- * @created 04.02.2009\r
+ * @since 04.02.2009\r
  */\r
 public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {\r
 \r
-    private static final String ABIES_BALSAMEA_UUID = "f65d47bd-4f49-4ab1-bc4a-bc4551eaa1a8";\r
-\r
-    private static final String ABIES_ALBA_UUID = "7dbd5810-a3e5-44b6-b563-25152b8867f4";\r
-\r
-    private static final String CLASSIFICATION_UUID = "2a5ceebb-4830-4524-b330-78461bf8cb6b";\r
+    private static Logger logger = Logger.getLogger(TaxonServiceSearchTest.class);\r
 \r
-    private static final String CLASSIFICATION_ALT_UUID = "d7c741e3-ae9e-4a7d-a566-9e3a7a0b51ce";\r
+    private static final int BENCHMARK_ROUNDS = 300;\r
 \r
-    private static final String D_ABIES_BALSAMEA_UUID = "900108d8-e6ce-495e-b32e-7aad3099135e";\r
+    private static final UUID ABIES_BALSAMEA_UUID = UUID.fromString("f65d47bd-4f49-4ab1-bc4a-bc4551eaa1a8");\r
+    private static final UUID ABIES_ALBA_UUID = UUID.fromString("7dbd5810-a3e5-44b6-b563-25152b8867f4");\r
+    private static final UUID CLASSIFICATION_UUID = UUID.fromString("2a5ceebb-4830-4524-b330-78461bf8cb6b");\r
+    private static final UUID CLASSIFICATION_ALT_UUID = UUID.fromString("d7c741e3-ae9e-4a7d-a566-9e3a7a0b51ce");\r
+    private static final UUID ABIES_SUBALPINA_UUID = UUID.fromString("9fee273c-c819-4f1f-913a-cd910465df51");\r
+    private static final UUID ABIES_LASIOCARPA_UUID = UUID.fromString("9ce1fecf-c1ad-4127-be01-85d5d9f847ce");\r
 \r
-    private static final String D_ABIES_ALBA_UUID = "ec8bba03-d993-4c85-8472-18b14942464b";\r
+    private static final UUID ROOTNODE_CLASSIFICATION_5000 = UUID.fromString("a8266e45-091f-432f-87ae-c625e6aa9bbc");\r
 \r
-    private static final String D_ABIES_KAWAKAMII_SEC_KOMAROV_UUID = "e9d8c2fd-6409-46d5-9c2e-14a2bbb1b2b1";\r
+    private static final UUID DESC_ABIES_BALSAMEA_UUID = UUID.fromString("900108d8-e6ce-495e-b32e-7aad3099135e");\r
+    private static final UUID DESC_ABIES_ALBA_UUID = UUID.fromString("ec8bba03-d993-4c85-8472-18b14942464b");\r
+    private static final UUID DESC_ABIES_KAWAKAMII_SEC_KOMAROV_UUID = UUID.fromString("e9d8c2fd-6409-46d5-9c2e-14a2bbb1b2b1");\r
 \r
     private static final int NUM_OF_NEW_RADOM_ENTITIES = 1000;\r
 \r
-    private static Logger logger = Logger.getLogger(TaxonServiceSearchTest.class);\r
-\r
-\r
+    private boolean includeUnpublished = true;\r
 \r
     @SpringBeanByType\r
     private ITaxonService taxonService;\r
@@ -116,28 +117,25 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     @SpringBeanByType\r
     private IDescriptionService descriptionService;\r
     @SpringBeanByType\r
-    private INameService nameService;\r
+    private IDescriptionElementService descriptionElementService;\r
     @SpringBeanByType\r
-    private ICdmMassIndexer indexer;\r
-\r
+    private INameService nameService;\r
     @SpringBeanByType\r
     private ITaxonNodeService nodeService;\r
 \r
-    private static final int BENCHMARK_ROUNDS = 300;\r
+    @SpringBeanByType\r
+    private ICdmMassIndexer indexer;\r
 \r
     private Set<Class<? extends CdmBase>> typesToIndex = null;\r
 \r
     private NamedArea germany;\r
-    private NamedArea france ;\r
-    private NamedArea russia ;\r
-    private NamedArea canada ;\r
+    private NamedArea france;\r
+    private NamedArea russia;\r
+    private NamedArea canada;\r
 \r
-    /**\r
-     * @throws java.lang.Exception\r
-     */\r
     @Before\r
     public void setUp() throws Exception {\r
-        typesToIndex = new HashSet<Class<? extends CdmBase>>();\r
+        typesToIndex = new HashSet<>();\r
         typesToIndex.add(DescriptionElementBase.class);\r
         typesToIndex.add(TaxonBase.class);\r
         typesToIndex.add(TaxonRelationship.class);\r
@@ -147,7 +145,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         russia = Country.RUSSIANFEDERATION();\r
         canada = Country.CANADA();\r
 \r
-\r
+        includeUnpublished = true;\r
     }\r
 \r
     @Test\r
@@ -156,62 +154,59 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         assertNotNull("nameService should exist", nameService);\r
     }\r
 \r
-\r
     @SuppressWarnings("rawtypes")\r
     @Test\r
     @DataSet\r
     public final void testPurgeAndReindex() throws IOException, LuceneParseException {\r
 \r
         refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-\r
-        pager = taxonService.findByFullText(null, "Abies", null, null, true, null, null, null, null); // --> 8\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByFullText(null, "Abies", null, subtree,\r
+                includeUnpublished, null, true, null, null, null, null); // --> 8\r
         Assert.assertEquals("Expecting 8 entities", 8, pager.getCount().intValue());\r
 \r
         indexer.purge(null);\r
         commitAndStartNewTransaction(null);\r
 \r
-        pager = taxonService.findByFullText(null, "Abies", null, null, true, null, null, null, null); // --> 0\r
+        pager = taxonService.findByFullText(null, "Abies", null, subtree, includeUnpublished, null, true, null, null, null, null); // --> 0\r
         Assert.assertEquals("Expecting no entities since the index has been purged", 0, pager.getCount().intValue());\r
 \r
         indexer.reindex(indexer.indexedClasses(), null);\r
         commitAndStartNewTransaction(null);\r
 \r
-        pager = taxonService.findByFullText(null, "Abies", null, null, true, null, null, null, null); // --> 8\r
+        pager = taxonService.findByFullText(null, "Abies", null, subtree, includeUnpublished, null, true, null, null, null, null); // --> 8\r
         Assert.assertEquals("Expecting 8 entities", 8, pager.getCount().intValue());\r
     }\r
 \r
-\r
     @SuppressWarnings("rawtypes")\r
     @Test\r
     @DataSet\r
     public final void testFindByDescriptionElementFullText_CommonName() throws IOException,\r
             LuceneParseException {\r
 \r
+        TaxonNode subtree = null;\r
         refreshLuceneIndex();\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-\r
-        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Wei"+UTF8.SHARP_S+"tanne", null, null, null,\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Wei"+UTF8.SHARP_S+"tanne",\r
+                null, subtree, null, null,\r
                 false, null, null, null, null);\r
         Assert.assertEquals("Expecting one entity when searching for CommonTaxonName", 1,\r
                 pager.getCount().intValue());\r
 \r
         // the description containing the Nulltanne has no taxon attached,\r
         // taxon.id = null\r
-        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Nulltanne", null, null, null,\r
+        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Nulltanne", null, subtree, null, null,\r
                 false, null, null, null, null);\r
         Assert.assertEquals("Expecting no entity when searching for 'Nulltanne' ", 0, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Wei"+UTF8.SHARP_S+"tanne", null, null,\r
+        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Wei"+UTF8.SHARP_S+"tanne", null, subtree, null,\r
                 Arrays.asList(new Language[] { Language.GERMAN() }), false, null, null, null, null);\r
         Assert.assertEquals("Expecting one entity when searching in German", 1, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Wei"+UTF8.SHARP_S+"tanne", null, null,\r
+        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Wei"+UTF8.SHARP_S+"tanne", null, subtree, null,\r
                 Arrays.asList(new Language[] { Language.RUSSIAN() }), false, null, null, null, null);\r
         Assert.assertEquals("Expecting no entity when searching in Russian", 0, pager.getCount().intValue());\r
-\r
     }\r
 \r
     @SuppressWarnings("rawtypes")\r
@@ -220,13 +215,13 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     public final void testFindByDescriptionElementFullText_Distribution() throws IOException, LuceneParseException {\r
 \r
         refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
         // by Area\r
-        pager = taxonService.findByDescriptionElementFullText(null, "Canada", null, null, null, false, null, null, null, null);\r
+        Pager<SearchResult<TaxonBase>>  pager = taxonService.findByDescriptionElementFullText(null, "Canada", null, subtree, null, null, false, null, null, null, null);\r
         Assert.assertEquals("Expecting one entity when searching for arae 'Canada'", 1, pager.getCount().intValue());\r
         // by Status\r
-        pager = taxonService.findByDescriptionElementFullText(null, "present", null, null, null, false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(null, "present", null, subtree, null, null, false, null, null, null, null);\r
         Assert.assertEquals("Expecting one entity when searching for status 'present'", 1, pager.getCount().intValue());\r
     }\r
 \r
@@ -236,10 +231,9 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     public final void testFindByDescriptionElementFullText_wildcard() throws IOException, LuceneParseException {\r
 \r
         refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-\r
-        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Wei"+UTF8.SHARP_S+"*", null, null, null, false, null, null, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Wei"+UTF8.SHARP_S+"*", null, subtree, null, null, false, null, null, null, null);\r
         Assert.assertEquals("Expecting one entity when searching for CommonTaxonName", 1, pager.getCount().intValue());\r
     }\r
 \r
@@ -254,9 +248,11 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     @DataSet\r
     public final void testFindByDescriptionElementFullText_TooManyClauses() throws IOException, LuceneParseException {\r
 \r
+        TaxonNode subtree = null;\r
+\r
         // generate 1024 terms to reproduce the bug\r
-        TaxonDescription description = (TaxonDescription) descriptionService.find(UUID.fromString(D_ABIES_ALBA_UUID));\r
-        Set<String> uniqueRandomStrs = new HashSet<String>(1024);\r
+        TaxonDescription description = (TaxonDescription) descriptionService.find(DESC_ABIES_ALBA_UUID);\r
+        Set<String> uniqueRandomStrs = new HashSet<>(1024);\r
         while(uniqueRandomStrs.size() < 1024){\r
             uniqueRandomStrs.add(RandomStringUtils.random(10, true, false));\r
         }\r
@@ -268,9 +264,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
 \r
         refreshLuceneIndex();\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-\r
-        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Rot*", null, null, null, false, null, null, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Rot*", null, subtree, null, null, false, null, null, null, null);\r
         Assert.assertEquals("Expecting all 1024 entities grouped into one SearchResult item when searching for Rot*", 1, pager.getCount().intValue());\r
     }\r
 \r
@@ -283,13 +277,13 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     @SuppressWarnings("rawtypes")\r
     @Test\r
     @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class)\r
-    @Ignore\r
     public final void testFullText_Paging() throws IOException, LuceneParseException {\r
 \r
+        TaxonNode subtree = null;\r
         Reference sec = ReferenceFactory.newDatabase();\r
         referenceService.save(sec);\r
 \r
-        Set<String> uniqueRandomStrs = new HashSet<String>(1024);\r
+        Set<String> uniqueRandomStrs = new HashSet<>(1024);\r
         int numOfItems = 100;\r
         while(uniqueRandomStrs.size() < numOfItems){\r
             uniqueRandomStrs.add(RandomStringUtils.random(5, true, false));\r
@@ -306,19 +300,17 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
             descriptionService.saveOrUpdate(description);\r
         }\r
 \r
-        commitAndStartNewTransaction(new String[]{"TAXONBASE"});\r
+        commitAndStartNewTransaction(new String[]{/*"TAXONBASE"*/});\r
         refreshLuceneIndex();\r
 \r
         int pageSize = 10;\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-\r
-        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Rot*", null, null, null, false, pageSize, null, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Rot*", null, subtree, null, null, false, pageSize, null, null, null);\r
         Assert.assertEquals("unexpeted number of pages", Integer.valueOf(numOfItems / pageSize), pager.getPagesAvailable());\r
-        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Rot*", null, null, null, false, pageSize, 9, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Rot*", null, subtree, null, null, false, pageSize, 9, null, null);\r
         Assert.assertNotNull("last page must have records", pager.getRecords());\r
         Assert.assertNotNull("last item on last page must exist", pager.getRecords().get(0));\r
-        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Rot*", null, null, null, false, pageSize, 10, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Rot*", null, subtree, null, null, false, pageSize, 10, null, null);\r
         Assert.assertNotNull("last page + 1 must not have any records", pager.getRecords());\r
     }\r
 \r
@@ -337,6 +329,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     @Ignore // test fails, maybe the assumptions made here are not compatible with the lucene scoring mechanism see http://lucene.apache.org/core/3_6_1/scoring.html\r
     public final void testFullText_ScoreAndOrder_1() throws IOException, LuceneParseException {\r
 \r
+        TaxonNode subtree = null;\r
         int numOfTaxa = 3;\r
 \r
         UUID[] taxonUuids = new UUID[numOfTaxa];\r
@@ -358,9 +351,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         commitAndStartNewTransaction(null);\r
         refreshLuceneIndex();\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-\r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Rot", null, null, null, false, null, null, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDescriptionElementFullText(TextData.class, "Rot", null, subtree, null, null, false, null, null, null, null);\r
         for(int i = 0; i < numOfTaxa; i++){\r
             Assert.assertEquals("taxa should be orderd by relevance (= score)", taxonUuids[numOfTaxa - i - 1], pager.getRecords().get(i).getEntity().getUuid());\r
         }\r
@@ -382,6 +373,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     @Ignore // test fails, maybe the assumptions made here are not compatible with the lucene scoring mechanism see http://lucene.apache.org/core/3_6_1/scoring.html\r
     public final void testFullText_ScoreAndOrder_2() throws IOException, LuceneParseException {\r
 \r
+        TaxonNode subtree = null;\r
         int numOfTaxa = 3;\r
 \r
         UUID[] taxonUuids = new UUID[numOfTaxa];\r
@@ -403,9 +395,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         commitAndStartNewTransaction(null);\r
         refreshLuceneIndex();\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-\r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Rot", null, null, null, false, null, null, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDescriptionElementFullText(TextData.class, "Rot", null, subtree, null, null, false, null, null, null, null);\r
         for(int i = 0; i < numOfTaxa; i++){\r
             Assert.assertEquals("taxa should be orderd by relevance (= score)", taxonUuids[numOfTaxa - i - 1], pager.getRecords().get(i).getEntity().getUuid());\r
         }\r
@@ -422,8 +412,9 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     @DataSet\r
     public final void testFullText_Grouping() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
 \r
-        TaxonDescription description = (TaxonDescription) descriptionService.find(UUID.fromString(D_ABIES_ALBA_UUID));\r
-        Set<String> uniqueRandomStrs = new HashSet<String>(1024);\r
+        TaxonNode subtree = null;\r
+        TaxonDescription description = (TaxonDescription) descriptionService.find(DESC_ABIES_ALBA_UUID);\r
+        Set<String> uniqueRandomStrs = new HashSet<>(1024);\r
         int numOfItems = 100;\r
         while(uniqueRandomStrs.size() < numOfItems){\r
             uniqueRandomStrs.add(RandomStringUtils.random(5, true, false));\r
@@ -439,11 +430,10 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
 \r
         int pageSize = 10;\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-        boolean highlightFragments = true;\r
+         boolean highlightFragments = true;\r
 \r
         // test with findByDescriptionElementFullText\r
-        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Rot*", null, null, null, highlightFragments, pageSize, null, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Rot*", null, subtree, null, null, highlightFragments, pageSize, null, null, null);\r
         logFreeTextSearchResults(pager, Level.DEBUG, null);\r
         Assert.assertEquals("All matches should be grouped into a single SearchResult element", 1, pager.getRecords().size());\r
         Assert.assertEquals("The count property of the pager must be set correctly", 1, pager.getCount().intValue());\r
@@ -453,7 +443,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         Assert.assertEquals("expecting 10 highlighted fragments of field 'name'", maxDocsPerGroup, highlightMap.get("name").length);\r
 \r
         // test with findByEverythingFullText\r
-        pager = taxonService.findByEverythingFullText( "Rot*", null, null, highlightFragments, pageSize, null, null, null);\r
+        pager = taxonService.findByEverythingFullText( "Rot*", null, subtree, includeUnpublished, null, highlightFragments, pageSize, null, null, null);\r
         logFreeTextSearchResults(pager, Level.DEBUG, null);\r
         Assert.assertEquals("All matches should be grouped into a single SearchResult element", 1, pager.getRecords().size());\r
         Assert.assertEquals("The count property of the pager must be set correctly", 1, pager.getCount().intValue());\r
@@ -467,13 +457,12 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     @SuppressWarnings("rawtypes")\r
     @Test\r
     @DataSet\r
-    @Ignore\r
     public final void testFindByDescriptionElementFullText_TextData() throws IOException, LuceneParseException {\r
 \r
         refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Abies", null, null, null, false, null, null, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDescriptionElementFullText(TextData.class, "Abies", null, subtree, null, null, false, null, null, null, null);\r
         logFreeTextSearchResults(pager, Level.DEBUG, null);\r
         Assert.assertEquals("Expecting one entity when searching for any TextData", 1, pager.getCount().intValue());\r
         Assert.assertEquals("Abies balsamea sec. Kohlbecker, A., Testcase standart views, 2013", pager.getRecords().get(0).getEntity().getTitleCache());\r
@@ -481,33 +470,33 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         Assert.assertEquals("Abies balsamea sec. Kohlbecker, A., Testcase standart views, 2013", pager.getRecords().get(0).getDocs().iterator().next().get("inDescription.taxon.titleCache"));\r
 \r
 \r
-        pager = taxonService.findByDescriptionElementFullText(null, "Abies", null, null, null, false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(null, "Abies", null, subtree, null, null, false, null, null, null, null);\r
         Assert.assertEquals("Expecting one entity when searching for any type", 1, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(null, "Abies", null, Arrays.asList(new Feature[]{Feature.UNKNOWN()}), null, false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(null, "Abies", null, subtree, Arrays.asList(new Feature[]{Feature.UNKNOWN()}), null, false, null, null, null, null);\r
         Assert.assertEquals("Expecting one entity when searching for any type and for Feature DESCRIPTION", 1, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(null, "Abies", null, Arrays.asList(new Feature[]{Feature.CHROMOSOME_NUMBER()}), null, false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(null, "Abies", null, subtree, Arrays.asList(new Feature[]{Feature.CHROMOSOME_NUMBER()}), null, false, null, null, null, null);\r
         Assert.assertEquals("Expecting no entity when searching for any type and for Feature CHROMOSOME_NUMBER", 0, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(null, "Abies", null, Arrays.asList(new Feature[]{Feature.CHROMOSOME_NUMBER(), Feature.UNKNOWN()}), null, false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(null, "Abies", null, subtree, Arrays.asList(new Feature[]{Feature.CHROMOSOME_NUMBER(), Feature.UNKNOWN()}), null, false, null, null, null, null);\r
         Assert.assertEquals("Expecting no entity when searching for any type and for Feature DESCRIPTION or CHROMOSOME_NUMBER", 1, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(Distribution.class, "Abies", null, null, null, false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(Distribution.class, "Abies", null, subtree, null, null, false, null, null, null, null);\r
         Assert.assertEquals("Expecting no entity when searching for Distribution", 0, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Бальзам", null, null, Arrays.asList(new Language[]{}), false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Бальзам", null, subtree, null, Arrays.asList(new Language[]{}), false, null, null, null, null);\r
         Assert.assertEquals("Expecting one entity", 1, pager.getCount().intValue());\r
         Assert.assertEquals("Abies balsamea sec. Kohlbecker, A., Testcase standart views, 2013", pager.getRecords().get(0).getEntity().getTitleCache());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Бальзам", null, null, Arrays.asList(new Language[]{Language.RUSSIAN()}), false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Бальзам", null, subtree, null, Arrays.asList(new Language[]{Language.RUSSIAN()}), false, null, null, null, null);\r
         Assert.assertEquals("Expecting one entity", 1, pager.getCount().intValue());\r
         Assert.assertEquals("Abies balsamea sec. Kohlbecker, A., Testcase standart views, 2013", pager.getRecords().get(0).getEntity().getTitleCache());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Бальзам", null, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Бальзам", null, subtree, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
         Assert.assertEquals("Expecting no entity", 0, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", null, null, Arrays.asList(new Language[]{Language.GERMAN(), Language.RUSSIAN()}), false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", null, subtree, null, Arrays.asList(new Language[]{Language.GERMAN(), Language.RUSSIAN()}), false, null, null, null, null);\r
         Assert.assertEquals("Expecting one entity", 1, pager.getCount().intValue());\r
         Assert.assertEquals("Abies balsamea sec. Kohlbecker, A., Testcase standart views, 2013", pager.getRecords().get(0).getEntity().getTitleCache());\r
     }\r
@@ -518,27 +507,27 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     public final void testFindByDescriptionElementFullText_MultipleWords() throws IOException, LuceneParseException {\r
 \r
         refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
 \r
         // Pflanzenart aus der Gattung der Tannen\r
         long start = System.currentTimeMillis();\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Pflanzenart Tannen", null, null, null, false, null, null, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDescriptionElementFullText(TextData.class, "Pflanzenart Tannen", null, subtree, null, null, false, null, null, null, null);\r
         Assert.assertEquals("OR search : Expecting one entity", 1, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Pflanzenart Wespen", null, null, null, false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Pflanzenart Wespen", null, subtree, null, null, false, null, null, null, null);\r
         Assert.assertEquals("OR search : Expecting one entity", 1, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "+Pflanzenart +Tannen", null, null, null, false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "+Pflanzenart +Tannen", null, subtree, null, null, false, null, null, null, null);\r
         Assert.assertEquals("AND search : Expecting one entity", 1, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "+Pflanzenart +Wespen", null, null, null, false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "+Pflanzenart +Wespen", null, subtree, null, null, false, null, null, null, null);\r
         Assert.assertEquals("AND search : Expecting no entity", 0, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "\"Pflanzenart aus der Gattung der Tannen\"", null, null, null, false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "\"Pflanzenart aus der Gattung der Tannen\"", null, subtree, null, null, false, null, null, null, null);\r
         Assert.assertEquals("Phrase search : Expecting one entity", 1, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "\"Pflanzenart aus der Gattung der Wespen\"", null, null, null, false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "\"Pflanzenart aus der Gattung der Wespen\"", null, subtree, null, null, false, null, null, null, null);\r
         Assert.assertEquals("Phrase search : Expecting one entity", 0, pager.getCount().intValue());\r
 \r
         logger.info("testFindByDescriptionElementFullText_MultipleWords() duration: " + (System.currentTimeMillis() - start) + "ms");\r
@@ -552,34 +541,34 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     public final void testFindByDescriptionElementFullText_modify_DescriptionElement() throws IOException, LuceneParseException {\r
 \r
         refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
         //\r
         // modify the DescriptionElement\r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", null, null, Arrays.asList(new Language[]{Language.GERMAN(), Language.RUSSIAN()}), false, null, null, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", null, subtree, null, Arrays.asList(new Language[]{Language.GERMAN(), Language.RUSSIAN()}), false, null, null, null, null);\r
         Assert.assertTrue("Search did not return any results", pager.getRecords().size() > 0);\r
         Assert.assertTrue("Expecting only one doc", pager.getRecords().get(0).getDocs().size() == 1);\r
         Document indexDocument = pager.getRecords().get(0).getDocs().iterator().next();\r
         String[] descriptionElementUuidStr = indexDocument.getValues("uuid");\r
         String[] inDescriptionUuidStr = indexDocument.getValues("inDescription.uuid");\r
         // is only one uuid!\r
-        DescriptionElementBase textData = descriptionService.getDescriptionElementByUuid(UUID.fromString(descriptionElementUuidStr[0]));\r
+        DescriptionElementBase textData = descriptionElementService.find(UUID.fromString(descriptionElementUuidStr[0]));\r
 \r
         ((TextData)textData).removeText(Language.GERMAN());\r
         ((TextData)textData).putText(Language.SPANISH_CASTILIAN(), "abeto bals"+UTF8.SMALL_A_ACUTE+"mico");\r
 \r
-        descriptionService.saveDescriptionElement(textData);\r
+        descriptionElementService.save(textData);\r
         commitAndStartNewTransaction(null);\r
 //        printDataSet(System.out, new String[] {\r
 //                "DESCRIPTIONELEMENTBASE", "LANGUAGESTRING", "DESCRIPTIONELEMENTBASE_LANGUAGESTRING" }\r
 //        );\r
 \r
         //\r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", null, null, Arrays.asList(new Language[]{Language.GERMAN(), Language.RUSSIAN()}), false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", null, subtree, null, Arrays.asList(new Language[]{Language.GERMAN(), Language.RUSSIAN()}), false, null, null, null, null);\r
         Assert.assertEquals("The german 'Balsam-Tanne' TextData should no longer be indexed", 0, pager.getCount().intValue());\r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "abeto", null, null, Arrays.asList(new Language[]{Language.SPANISH_CASTILIAN()}), false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "abeto", null, subtree, null, Arrays.asList(new Language[]{Language.SPANISH_CASTILIAN()}), false, null, null, null, null);\r
         Assert.assertEquals("expecting to find the SPANISH_CASTILIAN 'abeto bals"+UTF8.SMALL_A_ACUTE+"mico'", 1, pager.getCount().intValue());\r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "bals"+UTF8.SMALL_A_ACUTE+"mico", null, null, null, false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "bals"+UTF8.SMALL_A_ACUTE+"mico", null, subtree, null, null, false, null, null, null, null);\r
         Assert.assertEquals("expecting to find the SPANISH_CASTILIAN 'abeto bals"+UTF8.SMALL_A_ACUTE+"mico'", 1, pager.getCount().intValue());\r
 \r
         //\r
@@ -594,9 +583,9 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         }\r
         descriptionService.saveOrUpdate(description);\r
         commitAndStartNewTransaction(null);\r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "abeto", null, null, Arrays.asList(new Language[]{Language.SPANISH_CASTILIAN()}), false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "abeto", null, subtree, null, Arrays.asList(new Language[]{Language.SPANISH_CASTILIAN()}), false, null, null, null, null);\r
         Assert.assertEquals("The spanish 'abeto bals"+UTF8.SMALL_A_ACUTE+"mico' TextData should no longer be indexed", 0, pager.getCount().intValue());\r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "balsamiczna", null, null, Arrays.asList(new Language[]{Language.POLISH()}), false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "balsamiczna", null, subtree, null, Arrays.asList(new Language[]{Language.POLISH()}), false, null, null, null, null);\r
         Assert.assertEquals("expecting to find the POLISH 'Jod"+UTF8.POLISH_L+"a balsamiczna'", 1, pager.getCount().intValue());\r
     }\r
 \r
@@ -606,12 +595,13 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     public final void testFindByDescriptionElementFullText_modify_Taxon() throws IOException, LuceneParseException {\r
 \r
         refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-        Taxon t_abies_balsamea = (Taxon)taxonService.find(UUID.fromString(ABIES_BALSAMEA_UUID));\r
-        TaxonDescription d_abies_balsamea = (TaxonDescription)descriptionService.find(UUID.fromString(D_ABIES_BALSAMEA_UUID));\r
+        Taxon t_abies_balsamea = (Taxon)taxonService.find(ABIES_BALSAMEA_UUID);\r
+        TaxonDescription d_abies_balsamea = (TaxonDescription)descriptionService.find(DESC_ABIES_BALSAMEA_UUID);\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", null, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne",\r
+                null, subtree, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
         Assert.assertEquals("expecting to find the GERMAN 'Balsam-Tanne'", 1, pager.getCount().intValue());\r
 \r
         // exchange the Taxon with another one via the Taxon object\r
@@ -623,7 +613,8 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
 \r
         t_abies_balsamea = (Taxon)taxonService.find(t_abies_balsamea.getUuid());\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", null, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne",\r
+                null, subtree, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
         Assert.assertEquals("'Balsam-Tanne' should no longer be found", 0, pager.getCount().intValue());\r
 \r
         // 2.) create new description and add to taxon:\r
@@ -636,7 +627,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         t_abies_balsamea.addDescription(d_abies_balsamea_new);\r
         // set authorshipCache to null to avoid validation exception,\r
         // this is maybe not needed in future,  see ticket #3344\r
-        IBotanicalName abies_balsamea = CdmBase.deproxy(t_abies_balsamea.getName(), TaxonNameBase.class);\r
+        IBotanicalName abies_balsamea = CdmBase.deproxy(t_abies_balsamea.getName(), TaxonName.class);\r
         abies_balsamea.setAuthorshipCache(null);\r
         printDataSet(System.err, new String[] {"LANGUAGESTRING_AUD"});\r
         taxonService.saveOrUpdate(t_abies_balsamea);\r
@@ -646,7 +637,8 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
 //                "DESCRIPTIONBASE"\r
 //        });\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "mittelgro"+UTF8.SHARP_S+"er Baum", null, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "mittelgro"+UTF8.SHARP_S+"er Baum",\r
+                null, subtree, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
         Assert.assertEquals("the taxon should be found via the new Description", 1, pager.getCount().intValue());\r
     }\r
 \r
@@ -656,25 +648,24 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     public final void testFindByDescriptionElementFullText_modify_Classification() throws IOException, LuceneParseException {\r
 \r
         refreshLuceneIndex();\r
-\r
-        Pager<SearchResult<TaxonBase>> pager;\r
+        TaxonNode subtree = null;\r
 \r
         // put taxon into other classification, new taxon node\r
-        Classification classification = classificationService.find(UUID.fromString(CLASSIFICATION_UUID));\r
-        Classification alternateClassification = classificationService.find(UUID.fromString(CLASSIFICATION_ALT_UUID));\r
+        Classification classification = classificationService.find(CLASSIFICATION_UUID);\r
+        Classification alternateClassification = classificationService.find(CLASSIFICATION_ALT_UUID);\r
 \r
         // TODO: why is the test failing when the childNode is already retrieved here, and not after the following four lines?\r
         //TaxonNode childNode = classification.getChildNodes().iterator().next();\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", null, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", null, subtree, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
         Assert.assertEquals("expecting to find the GERMAN 'Balsam-Tanne' even if filtering by classification", 1, pager.getCount().intValue());\r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", alternateClassification, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", alternateClassification, subtree, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
         Assert.assertEquals("GERMAN 'Balsam-Tanne' should NOT be found in other classification", 0, pager.getCount().intValue());\r
 \r
         // check for the right taxon node\r
         TaxonNode childNode = classification.getChildNodes().iterator().next();\r
-        Assert.assertEquals("expecting Abies balsamea sec.", childNode.getTaxon().getUuid().toString(), ABIES_BALSAMEA_UUID);\r
-        Assert.assertEquals("expecting default classification", childNode.getClassification().getUuid().toString(), CLASSIFICATION_UUID);\r
+        Assert.assertEquals("expecting Abies balsamea sec.", childNode.getTaxon().getUuid(), ABIES_BALSAMEA_UUID);\r
+        Assert.assertEquals("expecting default classification", childNode.getClassification().getUuid(), CLASSIFICATION_UUID);\r
 \r
         // moving the taxon around, the rootnode is only a proxy\r
         alternateClassification.setRootNode(HibernateProxyHelper.deproxy(alternateClassification.getRootNode(), TaxonNode.class));\r
@@ -688,15 +679,17 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
 //        });\r
 \r
         // reload classification\r
-        classification = classificationService.find(UUID.fromString(CLASSIFICATION_UUID));\r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", alternateClassification, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
+        classification = classificationService.find(CLASSIFICATION_UUID);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne",\r
+                alternateClassification, subtree, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
         Assert.assertEquals("GERMAN 'Balsam-Tanne' should now be found in other classification", 1, pager.getCount().intValue());\r
 \r
         classification.getChildNodes().clear();\r
         classificationService.saveOrUpdate(classification);\r
         commitAndStartNewTransaction(null);\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", classification, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne",\r
+                classification, subtree, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
         Assert.assertEquals("Now the GERMAN 'Balsam-Tanne' should NOT be found in original classification", 0, pager.getCount().intValue());\r
 \r
     }\r
@@ -706,8 +699,9 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     @DataSet\r
     public final void testFindByDescriptionElementFullText_CategoricalData() throws IOException, LuceneParseException {\r
 \r
+        TaxonNode subtree = null;\r
         // add CategoricalData\r
-        DescriptionBase d_abies_balsamea = descriptionService.find(UUID.fromString(D_ABIES_BALSAMEA_UUID));\r
+        DescriptionBase d_abies_balsamea = descriptionService.find(DESC_ABIES_BALSAMEA_UUID);\r
         // Categorical data\r
         CategoricalData cdata = CategoricalData.NewInstance();\r
         cdata.setFeature(Feature.DESCRIPTION());\r
@@ -728,8 +722,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
 \r
         refreshLuceneIndex();\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-        pager = taxonService.findByDescriptionElementFullText(CategoricalData.class, "green", null, null, null, false, null, null, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDescriptionElementFullText(CategoricalData.class, "green", null, subtree, null, null, false, null, null, null, null);\r
         Assert.assertEquals("Expecting one entity", 1, pager.getCount().intValue());\r
         Assert.assertEquals("Abies balsamea sec. Kohlbecker, A., Testcase standart views, 2013", pager.getRecords().get(0).getEntity().getTitleCache());\r
         Assert.assertTrue("Expecting only one doc", pager.getRecords().get(0).getDocs().size() == 1);\r
@@ -759,34 +752,34 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     public final void testFindByDescriptionElementFullText_Highlighting() throws IOException, LuceneParseException {\r
 \r
         refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Abies", null, null, null, true, null, null, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDescriptionElementFullText(TextData.class, "Abies", null, subtree, null, null, true, null, null, null, null);\r
         Assert.assertEquals("Expecting one entity when searching for any TextData", 1, pager.getCount().intValue());\r
         SearchResult<TaxonBase> searchResult = pager.getRecords().get(0);\r
         Assert.assertTrue("the map of highlighted fragments should contain at least one item", searchResult.getFieldHighlightMap().size() > 0);\r
         String[] fragments = searchResult.getFieldHighlightMap().values().iterator().next();\r
         Assert.assertTrue("first fragments should contains serch term", fragments[0].contains("<B>Abies</B>"));\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Pflanzenart Tannen", null, null, null, true, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Pflanzenart Tannen", null, subtree, null, null, true, null, null, null, null);\r
         searchResult = pager.getRecords().get(0);\r
         Assert.assertTrue("Phrase search : Expecting at least one item in highlighted fragments", searchResult.getFieldHighlightMap().size() > 0);\r
         fragments = searchResult.getFieldHighlightMap().values().iterator().next();\r
         Assert.assertTrue("first fragments should contains serch term", fragments[0].contains("<B>Pflanzenart</B>") || fragments[0].contains("<B>Tannen</B>"));\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "+Pflanzenart +Tannen", null, null, null, true, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "+Pflanzenart +Tannen", null, subtree, null, null, true, null, null, null, null);\r
         searchResult = pager.getRecords().get(0);\r
         Assert.assertTrue("Phrase search : Expecting at least one item in highlighted fragments", searchResult.getFieldHighlightMap().size() > 0);\r
         fragments = searchResult.getFieldHighlightMap().values().iterator().next();\r
         Assert.assertTrue("first fragments should contains serch term", fragments[0].contains("<B>Pflanzenart</B>") && fragments[0].contains("<B>Tannen</B>"));\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "\"Pflanzenart aus der Gattung der Tannen\"", null, null, null, true, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "\"Pflanzenart aus der Gattung der Tannen\"", null, subtree, null, null, true, null, null, null, null);\r
         searchResult = pager.getRecords().get(0);\r
         Assert.assertTrue("Phrase search : Expecting at least one item in highlighted fragments", searchResult.getFieldHighlightMap().size() > 0);\r
         fragments = searchResult.getFieldHighlightMap().values().iterator().next();\r
         Assert.assertTrue("first fragments should contains serch term", fragments[0].contains("<B>Pflanzenart</B> <B>aus</B> <B>der</B> <B>Gattung</B> <B>der</B> <B>Tannen</B>"));\r
 \r
-        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Gatt*", null, null, null, true, null, null, null, null);\r
+        pager = taxonService.findByDescriptionElementFullText(TextData.class, "Gatt*", null, subtree, null, null, true, null, null, null, null);\r
         searchResult = pager.getRecords().get(0);\r
         Assert.assertTrue("Wildcard search : Expecting at least one item in highlighted fragments", searchResult.getFieldHighlightMap().size() > 0);\r
         fragments = searchResult.getFieldHighlightMap().values().iterator().next();\r
@@ -800,29 +793,65 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
 \r
         refreshLuceneIndex();\r
 \r
-        Classification europeanAbiesClassification = classificationService.find(UUID.fromString(CLASSIFICATION_UUID));\r
+        classificationService.find(CLASSIFICATION_UUID);\r
+        TaxonNode subtree = null;\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
+        boolean NO_UNPUBLISHED = false;\r
 \r
-        pager = taxonService.findByFullText(null, "Abies", null, null, true, null, null, null, null); // --> 7\r
-        logFreeTextSearchResults(pager, Level.DEBUG, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByFullText(null, "Abies", null, subtree, includeUnpublished, null, true, null, null, null, null); // --> 7\r
+//        logFreeTextSearchResults(pager, Level.DEBUG, null);\r
         Assert.assertEquals("Expecting 8 entities", 8, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByFullText(Taxon.class, "Abies", null, null, true, null, null, null, null); // --> 6\r
+        //subtree\r
+        subtree = nodeService.find(ROOTNODE_CLASSIFICATION_5000);\r
+        pager = taxonService.findByFullText(null, "Abies", null, subtree, includeUnpublished, null, true, null, null, null, null); // --> 0\r
+        Assert.assertEquals("Expecting 2 entities", 2, pager.getCount().intValue());\r
+        subtree = null;\r
+\r
+        pager = taxonService.findByFullText(null, "Abies", null, subtree, NO_UNPUBLISHED, null, true, null, null, null, null); // --> 7\r
+//        logFreeTextSearchResults(pager, Level.DEBUG, null);\r
+        Assert.assertEquals("Expecting 6 entities", 6, pager.getCount().intValue());\r
+        Synonym abiesSubalpina = (Synonym)taxonService.find(ABIES_SUBALPINA_UUID);\r
+\r
+        //accepted published, syn not published\r
+        abiesSubalpina.getAcceptedTaxon().setPublish(true);\r
+        commitAndStartNewTransaction();\r
+        pager = taxonService.findByFullText(null, "Abies", null, subtree, NO_UNPUBLISHED, null, true, null, null, null, null); // --> 7\r
         Assert.assertEquals("Expecting 7 entities", 7, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByFullText(Synonym.class, "Abies", null, null, true, null, null, null, null); // --> 1\r
+        //accepted published, syn published\r
+        abiesSubalpina = (Synonym)taxonService.find(abiesSubalpina.getUuid());\r
+        abiesSubalpina.setPublish(true);\r
+        commitAndStartNewTransaction();\r
+        pager = taxonService.findByFullText(null, "Abies", null, subtree, NO_UNPUBLISHED, null, true, null, null, null, null); // --> 7\r
+        Assert.assertEquals("Expecting 8 entities", 8, pager.getCount().intValue());\r
+\r
+        //accepted not published, syn published\r
+        abiesSubalpina = (Synonym)taxonService.find(abiesSubalpina.getUuid());\r
+        abiesSubalpina.getAcceptedTaxon().setPublish(false);\r
+        commitAndStartNewTransaction();\r
+        pager = taxonService.findByFullText(null, "Abies", null, subtree, NO_UNPUBLISHED, null, true, null, null, null, null); // --> 7\r
+        Assert.assertEquals("Expecting 6 entities. Synonym and accepted should not be found, though synonym is published",\r
+                6, pager.getCount().intValue());\r
+\r
+        pager = taxonService.findByFullText(Taxon.class, "Abies", null, subtree, includeUnpublished, null, true, null, null, null, null); // --> 6\r
+        Assert.assertEquals("Expecting 7 entities", 7, pager.getCount().intValue());\r
+\r
+        pager = taxonService.findByFullText(Synonym.class, "Abies", null, subtree, includeUnpublished, null, true, null, null, null, null); // --> 1\r
         Assert.assertEquals("Expecting 1 entity", 1, pager.getCount().intValue());\r
+        pager = taxonService.findByFullText(Synonym.class, "Abies", null, subtree, NO_UNPUBLISHED, null, true, null, null, null, null); // --> 1\r
+        Assert.assertEquals("Expecting 0 entity", 0, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByFullText(TaxonBase.class, "sec", null, null, true, null, null, null, null); // --> 7\r
+        pager = taxonService.findByFullText(TaxonBase.class, "sec", null, subtree, includeUnpublished, null, true, null, null, null, null); // --> 7\r
         Assert.assertEquals("Expecting 8 entities", 9, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByFullText(null, "genus", null, null, true, null, null, null, null); // --> 1\r
+        pager = taxonService.findByFullText(null, "genus", null, subtree, includeUnpublished, null, true, null, null, null, null); // --> 1\r
         Assert.assertEquals("Expecting 1 entity", 1, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByFullText(Taxon.class, "subalpina", null, null, true, null, null, null, null); // --> 0\r
+        pager = taxonService.findByFullText(Taxon.class, "subalpina", null, subtree, includeUnpublished, null, true, null, null, null, null); // --> 0\r
         Assert.assertEquals("Expecting 0 entities", 0, pager.getCount().intValue());\r
 \r
+\r
         // synonym in classification ???\r
     }\r
 \r
@@ -830,99 +859,282 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     @DataSet\r
     public final void testPrepareByAreaSearch() throws IOException, LuceneParseException {\r
 \r
-        List<PresenceAbsenceTerm> statusFilter = new ArrayList<PresenceAbsenceTerm>();\r
-        List<NamedArea> areaFilter = new ArrayList<NamedArea>();\r
+        List<PresenceAbsenceTerm> statusFilter = new ArrayList<>();\r
+        List<NamedArea> areaFilter = new ArrayList<>();\r
         areaFilter.add(germany);\r
         areaFilter.add(canada);\r
         areaFilter.add(russia);\r
 \r
-        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDistribution(areaFilter, statusFilter, null, 20, 0, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByDistribution(areaFilter, statusFilter, null, null, 20, 0, null, null);\r
         Assert.assertEquals("Expecting 2 entities", Integer.valueOf(2), Integer.valueOf(pager.getRecords().size()));\r
 \r
     }\r
 \r
     @Test\r
     @DataSet\r
-    public final void testFindTaxaAndNamesByFullText() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
+    public final void testFindTaxaAndNamesByFullText_synonymClassificationSubtree() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
 \r
         refreshLuceneIndex();\r
+        Classification classification = null;\r
+        TaxonNode subtree = null;\r
 \r
+        //\r
         Pager<SearchResult<TaxonBase>> pager;\r
+        EnumSet<TaxaAndNamesSearchMode> taxaAndSynonyms = EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.includeUnpublished);\r
+        pager = taxonService.findTaxaAndNamesByFullText(\r
+                taxaAndSynonyms, "Abies", classification, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("doTaxa & doSynonyms & unpublished", 8, pager.getCount().intValue());\r
+\r
+        EnumSet<TaxaAndNamesSearchMode> taxaOnly = EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.includeUnpublished);\r
 \r
-        Classification alternateClassification = classificationService.find(UUID.fromString(CLASSIFICATION_ALT_UUID));\r
+        //classification\r
+        classification = classificationService.find(CLASSIFICATION_UUID);\r
+        pager = taxonService.findTaxaAndNamesByFullText(\r
+                taxaAndSynonyms, "Abies", classification, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("doTaxa & doSynonyms & unpublished", 2, pager.getCount().intValue());\r
+            //taxa only\r
+        pager = taxonService.findTaxaAndNamesByFullText(\r
+                taxaOnly, "Abies", classification, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("doTaxa & unpublished", 1, pager.getCount().intValue());\r
+            //synonyms only\r
+        pager = taxonService.findTaxaAndNamesByFullText(\r
+                taxaOnly, "Abies", classification, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("doSynonyms & unpublished", 1, pager.getCount().intValue());\r
+\r
+        classification = null;\r
+\r
+        //subtree\r
+       subtree = nodeService.find(ROOTNODE_CLASSIFICATION_5000);\r
+       pager = taxonService.findTaxaAndNamesByFullText(\r
+               taxaAndSynonyms, "Abies", classification, subtree, null, null, null, true, null, null, null, null);\r
+       Assert.assertEquals("doTaxa & doSynonyms & unpublished", 2, pager.getCount().intValue());\r
+         //taxa only\r
+       pager = taxonService.findTaxaAndNamesByFullText(\r
+               taxaOnly, "Abies", classification, subtree, null, null, null, true, null, null, null, null);\r
+       Assert.assertEquals("doTaxa & unpublished", 1, pager.getCount().intValue());\r
+       subtree = null;\r
 \r
+    }\r
+\r
+    @Test\r
+    @DataSet\r
+    public final void testFindTaxaAndNamesByFullText() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
 \r
+        refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
+\r
+        Classification alternateClassification = classificationService.find(CLASSIFICATION_ALT_UUID);\r
+        Synonym abiesSubalpina = (Synonym)taxonService.find(ABIES_SUBALPINA_UUID);\r
+\r
+        Pager<SearchResult<TaxonBase>> pager;\r
+        EnumSet<TaxaAndNamesSearchMode> modes = EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.includeUnpublished);\r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms),\r
-                "Abies", null, null, null, null, true, null, null, null, null);\r
-//        logPagerRecords(pager, Level.DEBUG);\r
-        Assert.assertEquals("doTaxa & doSynonyms", 8, pager.getCount().intValue());\r
+                modes, "Abies", null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("doTaxa & doSynonyms & unpublished", 8, pager.getCount().intValue());\r
+//      logPagerRecords(pager, Level.DEBUG);\r
+\r
+         //unpublished\r
+        pager = taxonService.findTaxaAndNamesByFullText(TaxaAndNamesSearchMode.taxaAndSynonyms(),\r
+                "Abies", null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("doTaxa & doSynonyms, published only", 6, pager.getCount().intValue());\r
+\r
+        //accepted published, syn not published\r
+        abiesSubalpina.getAcceptedTaxon().setPublish(true);\r
+        commitAndStartNewTransaction();\r
+        pager = taxonService.findTaxaAndNamesByFullText(TaxaAndNamesSearchMode.taxaAndSynonyms(),\r
+                "Abies", null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("doTaxa & doSynonyms, accepted published", 7, pager.getCount().intValue());\r
+\r
+        //accepted published, syn published\r
+        abiesSubalpina = (Synonym)taxonService.find(abiesSubalpina.getUuid());\r
+        abiesSubalpina.setPublish(true);\r
+        commitAndStartNewTransaction();\r
+        pager = taxonService.findTaxaAndNamesByFullText(TaxaAndNamesSearchMode.taxaAndSynonyms(),\r
+                "Abies", null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("Expecting 8 entities", 8, pager.getCount().intValue());\r
+\r
+        //accepted not published, syn published\r
+        abiesSubalpina = (Synonym)taxonService.find(abiesSubalpina.getUuid());\r
+        abiesSubalpina.getAcceptedTaxon().setPublish(false);\r
+        commitAndStartNewTransaction();\r
+        pager = taxonService.findTaxaAndNamesByFullText(TaxaAndNamesSearchMode.taxaAndSynonyms(),\r
+                "Abies", null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("Expecting 6 entities. Synonym and accepted should not be found, though synonym is published",\r
+                6, pager.getCount().intValue());\r
 \r
+        EnumSet<TaxaAndNamesSearchMode> searchMode = EnumSet.allOf(TaxaAndNamesSearchMode.class);\r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.allOf(TaxaAndNamesSearchMode.class),\r
-                "Abies", null, null, null, null, true, null, null, null, null);\r
+                searchMode, "Abies", null, subtree, null, null, null, true, null, null, null, null);\r
 //        logPagerRecords(pager, Level.DEBUG);\r
         Assert.assertEquals("all search modes", 8, pager.getCount().intValue());\r
-\r
+        searchMode.remove(TaxaAndNamesSearchMode.includeUnpublished);\r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.allOf(TaxaAndNamesSearchMode.class),\r
-                "Abies", alternateClassification, null, null, null, true, null, null, null, null);\r
+                searchMode, "Abies", null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("all search modes except unpublished", 6, pager.getCount().intValue());\r
+\r
+        pager = taxonService.findTaxaAndNamesByFullText(EnumSet.allOf(TaxaAndNamesSearchMode.class),\r
+                "Abies", alternateClassification, subtree, null, null, null, true, null, null, null, null);\r
 //        logPagerRecords(pager, Level.DEBUG);\r
         Assert.assertEquals("all search modes, filtered by alternateClassification", 1, pager.getCount().intValue());\r
 \r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doSynonyms),\r
-                "Abies", null, null, null, null, true, null, null, null, null);\r
-        Assert.assertEquals("Expecting 1 entity", 1, pager.getCount().intValue());\r
-        SearchResult<TaxonBase> searchResult = pager.getRecords().get(0);\r
-        Assert.assertEquals(Synonym.class, searchResult.getEntity().getClass());\r
-        // Abies subalpina sec. Kohlbecker, A., Testcase standart views, 2013\r
+                EnumSet.of(TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("Expecting 2 entity", 2, pager.getCount().intValue());\r
+        Set<UUID> uuids = getTaxonUuidSet(pager);\r
+        Assert.assertTrue("The real synonym should be contained", uuids.contains(ABIES_SUBALPINA_UUID));\r
+        Assert.assertTrue("The pro parte synonym should be contained",uuids.contains(ABIES_LASIOCARPA_UUID));\r
+        //without published\r
+        pager = taxonService.findTaxaAndNamesByFullText(EnumSet.of(TaxaAndNamesSearchMode.doSynonyms),\r
+                "Abies", null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("Expecting 0 entities", 0, pager.getCount().intValue());\r
 \r
 \r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doTaxaByCommonNames),\r
-                "Abies", null, null, null, null, true, null, null, null, null);\r
+                EnumSet.of(TaxaAndNamesSearchMode.doTaxaByCommonNames, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, null, null, null, true, null, null, null, null);\r
         Assert.assertEquals("Expecting 0 entity", 0, pager.getCount().intValue());\r
 \r
-\r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doTaxaByCommonNames),\r
-                "Tanne", null, null, null, null, true, null, null, null, null);\r
+                EnumSet.of(TaxaAndNamesSearchMode.doTaxaByCommonNames, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Tanne", null, subtree, null, null, null, true, null, null, null, null);\r
         Assert.assertEquals("Expecting 1 entity", 1, pager.getRecords().size());\r
         Assert.assertEquals("Expecting 1 entity", 1, pager.getCount().intValue());\r
+        pager = taxonService.findTaxaAndNamesByFullText(\r
+                EnumSet.of(TaxaAndNamesSearchMode.doTaxaByCommonNames),\r
+                "Tanne", null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("Expecting 0 entity", 0, pager.getRecords().size());\r
 \r
+        //misapplied names\r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames),\r
-                "kawakamii", null, null, null, null, true, null, null, null, null);\r
+                EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "kawakamii", (Classification)null, subtree, null, null, null, true, null, null, null, null);\r
         logFreeTextSearchResults(pager, Level.DEBUG, null);\r
         Assert.assertEquals("Expecting 1 entity", 1, pager.getCount().intValue());\r
+        //unpublish accepted taxon\r
+        pager = taxonService.findTaxaAndNamesByFullText(\r
+                EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames),\r
+                "kawakamii", (Classification)null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("Expecting 0 entities", 0, pager.getCount().intValue());\r
+        //published accepted taxon/misapplied name\r
+        Taxon abiesBalsamea = (Taxon)taxonService.find(ABIES_BALSAMEA_UUID);\r
+        abiesBalsamea.setPublish(true);\r
+        commitAndStartNewTransaction();\r
+        pager = taxonService.findTaxaAndNamesByFullText(\r
+                EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames),\r
+                "kawakamii", (Classification)null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("Expecting 1 entities", 1, pager.getCount().intValue());\r
+        //unpublished misapplied name\r
+        Taxon misapplied = (Taxon)taxonService.find(DESC_ABIES_KAWAKAMII_SEC_KOMAROV_UUID);\r
+        misapplied.setPublish(false);\r
+        commitAndStartNewTransaction();\r
+        pager = taxonService.findTaxaAndNamesByFullText(\r
+                EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames),\r
+                "kawakamii", (Classification)null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("Expecting 0 entities", 0, pager.getCount().intValue());\r
 \r
     }\r
 \r
     @Test\r
     @DataSet\r
-    public final void testFindTaxaAndNamesByFullText_PhraseQuery() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
+    public final void testFindTaxaAndNamesByFullText_wildcard() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
 \r
         refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
 \r
         Pager<SearchResult<TaxonBase>> pager;\r
+         pager = taxonService.findTaxaAndNamesByFullText(TaxaAndNamesSearchMode.taxaAndSynonyms(),\r
+                "Abi*", null, subtree, null, null, null, true, null, null, null, null);\r
+//      logFreeTextSearchResults(pager, Level.DEBUG, null);\r
+        Assert.assertEquals("doTaxa & doSynonyms published only", 6, pager.getCount().intValue());\r
+        pager = taxonService.findTaxaAndNamesByFullText(TaxaAndNamesSearchMode.taxaAndSynonyms(),\r
+                "*bies", null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("doTaxa & doSynonyms, published only", 6, pager.getCount().intValue());\r
+        // logFreeTextSearchResults(pager, Level.ERROR, null);\r
+        pager = taxonService.findTaxaAndNamesByFullText(TaxaAndNamesSearchMode.taxaAndSynonyms(),\r
+                "?bies", null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("doTaxa & doSynonyms, published only", 6, pager.getCount().intValue());\r
+        // logFreeTextSearchResults(pager, Level.ERROR, null);\r
+        pager = taxonService.findTaxaAndNamesByFullText(TaxaAndNamesSearchMode.taxaAndSynonyms(),\r
+                "*", null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("doTaxa & doSynonyms, published only", 7, pager.getCount().intValue());\r
+    }\r
 \r
+    @Test\r
+    @DataSet\r
+    // @Ignore // FIXME: fails due  org.apache.lucene.queryparser.classic.ParseException: Cannot parse 'relatedFrom.titleCache:()': Encountered " ")" ") "" at line 1, column 24.\r
+    public final void testFindTaxaAndNamesByFullText_empty_querString() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
 \r
-        pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms),\r
-                "\"Abies alba\"", null, null, null, null, true, null, null, null, null);\r
+        refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
+\r
+        Pager<SearchResult<TaxonBase>> pager;\r
+        pager = taxonService.findTaxaAndNamesByFullText(EnumSet.of(TaxaAndNamesSearchMode.doTaxa),\r
+                "", null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("doTaxa, published only", 7, pager.getCount().intValue());\r
+\r
+        pager = taxonService.findTaxaAndNamesByFullText(TaxaAndNamesSearchMode.taxaAndSynonyms(),\r
+                "", null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("doTaxa & doSynonyms, published only", 7, pager.getCount().intValue());\r
+\r
+        pager = taxonService.findTaxaAndNamesByFullText(EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doMisappliedNames),\r
+                null, null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("doTaxa & doMisappliedNames published only", 7, pager.getCount().intValue());\r
+\r
+        pager = taxonService.findTaxaAndNamesByFullText(EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doMisappliedNames, TaxaAndNamesSearchMode.doTaxaByCommonNames),\r
+                null, null, subtree, null, null, null, true, null, null, null, null);\r
+        Assert.assertEquals("doTaxa & doMisappliedNames & doTaxaByCommonNames , published only", 7, pager.getCount().intValue());\r
+        // logFreeTextSearchResults(pager, Level.ERROR, null);\r
+    }\r
+\r
+    @Test\r
+    @DataSet\r
+    //test for https://dev.e-taxonomy.eu/redmine/issues/7486\r
+    public final void testFindTaxaAndNamesByFullText_synonymsAndMisapplied_7486() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
+\r
+        refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
+\r
+        //misapplied names\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findTaxaAndNamesByFullText(\r
+                EnumSet.of(TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.doMisappliedNames, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", (Classification)null, subtree, null, null, null, true, null, null, null, null);\r
+        logFreeTextSearchResults(pager, Level.DEBUG, null);\r
+        Assert.assertEquals("Expecting 3 entity", 3, pager.getCount().intValue());\r
+        Set<UUID> uuids = getTaxonUuidSet(pager);\r
+        Assert.assertTrue("The real synonym should be contained", uuids.contains(ABIES_SUBALPINA_UUID));\r
+        Assert.assertTrue("The pro parte synonym should be contained",uuids.contains(ABIES_LASIOCARPA_UUID));\r
+        Assert.assertTrue("The misapplied name should be contained",uuids.contains(DESC_ABIES_KAWAKAMII_SEC_KOMAROV_UUID));\r
+    }\r
+\r
+    @Test\r
+    @DataSet\r
+    public final void testFindTaxaAndNamesByFullText_PhraseQuery() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
+\r
+        refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
+\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findTaxaAndNamesByFullText(\r
+                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "\"Abies alba\"", null, subtree, null, null, null, true, null, null, null, null);\r
 //        logPagerRecords(pager, Level.DEBUG);\r
         Assert.assertEquals("doTaxa & doSynonyms with simple phrase query", 1, pager.getCount().intValue());\r
 \r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms),\r
-                "\"Abies al*\"", null, null, null, null, true, null, null, null, null);\r
+                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "\"Abies al*\"", null, subtree, null, null, null, true, null, null, null, null);\r
 //        logPagerRecords(pager, Level.DEBUG);\r
         Assert.assertEquals("doTaxa & doSynonyms with complex phrase query", 1, pager.getCount().intValue());\r
 \r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms),\r
-                "\"Abies*\"", null, null, null, null, true, null, null, null, null);\r
+                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "\"Abies*\"", null, subtree, null, null, null, true, null, null, null, null);\r
+//        logPagerRecords(pager, Level.DEBUG);\r
+        Assert.assertEquals("doTaxa & doSynonyms with simple phrase query", 8, pager.getCount().intValue());\r
+\r
+        pager = taxonService.findTaxaAndNamesByFullText(\r
+                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "\"Abies*\"", null, subtree, null, null, null, true, null, null, null, null);\r
 //        logPagerRecords(pager, Level.DEBUG);\r
         Assert.assertEquals("doTaxa & doSynonyms with simple phrase query", 8, pager.getCount().intValue());\r
 \r
@@ -933,18 +1145,17 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     public final void testFindTaxaAndNamesByFullText_Sort() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
 \r
         refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-\r
-        List<OrderHint> orderHints = new ArrayList<OrderHint>();\r
+        List<OrderHint> orderHints = new ArrayList<>();\r
 \r
-        String[] docFields2log = new String[]{"id"};\r
+//        String[] docFields2log = new String[]{"id"};\r
 \r
         // SortById\r
         orderHints.addAll(OrderHint.ORDER_BY_ID.asList());\r
-        pager = taxonService.findTaxaAndNamesByFullText(\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findTaxaAndNamesByFullText(\r
                 EnumSet.of(TaxaAndNamesSearchMode.doTaxa),\r
-                "Abies", null, null, null, null, true, null, null, orderHints, null);\r
+                "Abies", null, subtree, null, null, null, true, null, null, orderHints, null);\r
 //        logSearchResults(pager, Level.DEBUG, docFields2log);\r
         int lastId = -1;\r
         for(SearchResult<TaxonBase> rs : pager.getRecords()){\r
@@ -957,7 +1168,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         orderHints.addAll(OrderHint.ORDER_BY_ID.asList());\r
         pager = taxonService.findTaxaAndNamesByFullText(\r
                 EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms),\r
-                "Abies", null, null, null, null, true, null, null, orderHints, null);\r
+                "Abies", null, subtree, null, null, null, true, null, null, orderHints, null);\r
 //        logSearchResults(pager, Level.DEBUG, docFields2log);\r
 \r
         lastId = -1;\r
@@ -973,84 +1184,177 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         orderHints.addAll(OrderHint.NOMENCLATURAL_SORT_ORDER.asList());\r
         pager = taxonService.findTaxaAndNamesByFullText(\r
                 EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms),\r
-                "Abies", null, null, null, null, true, null, null, orderHints, null);\r
+                "Abies", null, subtree, null, null, null, true, null, null, orderHints, null);\r
         logFreeTextSearchResults(pager, Level.DEBUG, null);\r
 \r
     }\r
 \r
+    @Test\r
+    @DataSet\r
+    @Ignore //ignore until #7487 is fixed\r
+    public final void testFindTaxaAndNamesByFullText_AreaFilter_7487() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
+        refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
+        Set<NamedArea> a_germany_canada_russia = new HashSet<>();\r
+        a_germany_canada_russia.add(germany);\r
+        a_germany_canada_russia.add(canada);\r
+        a_germany_canada_russia.add(russia);\r
+\r
+        Set<PresenceAbsenceTerm> present_native = new HashSet<>();\r
+        present_native.add(PresenceAbsenceTerm.PRESENT());\r
+        present_native.add(PresenceAbsenceTerm.NATIVE());\r
+\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findTaxaAndNamesByFullText(\r
+                EnumSet.of(TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, a_germany_canada_russia, present_native, null, true, null, null, null, null);\r
+        Assert.assertEquals("Synonyms with matching area filter", 2, pager.getCount().intValue());\r
+        Set<UUID> uuids = this.getTaxonUuidSet(pager);\r
+        Assert.assertTrue("Synonym of balsamea should be in", uuids.contains(ABIES_SUBALPINA_UUID));\r
+        Assert.assertTrue("Pro parte synonym of balsamea should be in", uuids.contains(ABIES_LASIOCARPA_UUID));\r
+\r
+        //pro parte syn => partial syn\r
+        Taxon t_abies_balsamea = (Taxon)taxonService.find(ABIES_BALSAMEA_UUID);\r
+        Set<TaxonRelationship> relsTo = t_abies_balsamea.getProParteAndPartialSynonymRelations();\r
+        Assert.assertEquals(1, relsTo.size());\r
+        TaxonRelationship taxonRelation = relsTo.iterator().next();\r
+        taxonRelation.setType(TaxonRelationshipType.PARTIAL_SYNONYM_FOR());\r
+        taxonService.saveOrUpdate(t_abies_balsamea);\r
+        commitAndStartNewTransaction(null);\r
+\r
+        //should give same results as above\r
+        pager = taxonService.findTaxaAndNamesByFullText(\r
+                EnumSet.of(TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, a_germany_canada_russia, present_native, null, true, null, null, null, null);\r
+//        Assert.assertEquals("Synonyms with matching area filter", 2, pager.getCount().intValue());\r
+//        uuids = this.getTaxonUuidSet(pager);\r
+//        Assert.assertTrue("Synonym of balsamea should be in", uuids.contains(ABIES_SUBALPINA_UUID));\r
+//        Assert.assertTrue("Partial synonym of balsamea should be in", uuids.contains(ABIES_LASIOCARPA_UUID));\r
+\r
+        ///MISAPPLIED\r
+        pager = taxonService.findTaxaAndNamesByFullText(\r
+                EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames, TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, a_germany_canada_russia, present_native, null, true, null, null, null, null);\r
+        Assert.assertEquals("misappliedNames with matching area & status filter", 3, pager.getCount().intValue());\r
+        uuids = this.getTaxonUuidSet(pager);\r
+        Assert.assertTrue("Misapplied name should be in", uuids.contains(DESC_ABIES_KAWAKAMII_SEC_KOMAROV_UUID));\r
+\r
+        t_abies_balsamea = (Taxon)taxonService.find(ABIES_BALSAMEA_UUID);\r
+        relsTo = t_abies_balsamea.getMisappliedNameRelations();\r
+        Assert.assertEquals(1, relsTo.size());\r
+        taxonRelation = relsTo.iterator().next();\r
+        Assert.assertEquals(taxonRelation.getFromTaxon().getUuid(), DESC_ABIES_KAWAKAMII_SEC_KOMAROV_UUID);\r
+        taxonRelation.setType(TaxonRelationshipType.PRO_PARTE_MISAPPLIED_NAME_FOR());\r
+        taxonService.saveOrUpdate(t_abies_balsamea);\r
+        commitAndStartNewTransaction(null);\r
+\r
+        //strange it works here before fixing #7487 already\r
+        pager = taxonService.findTaxaAndNamesByFullText(\r
+                EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames, TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, a_germany_canada_russia, present_native, null, true, null, null, null, null);\r
+        Assert.assertEquals("misappliedNames with matching area & status filter", 3, pager.getCount().intValue());\r
+        uuids = this.getTaxonUuidSet(pager);\r
+        Assert.assertTrue("Pro parte misapplied name should be in", uuids.contains(DESC_ABIES_KAWAKAMII_SEC_KOMAROV_UUID));\r
+\r
+    }\r
+\r
+\r
     @Test\r
     @DataSet\r
     public final void testFindTaxaAndNamesByFullText_AreaFilter() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
 \r
         refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
-\r
-        Set<NamedArea> a_germany_canada_russia = new HashSet<NamedArea>();\r
+        Set<NamedArea> a_germany_canada_russia = new HashSet<>();\r
         a_germany_canada_russia.add(germany);\r
         a_germany_canada_russia.add(canada);\r
         a_germany_canada_russia.add(russia);\r
 \r
-        Set<NamedArea> a_russia = new HashSet<NamedArea>();\r
+        Set<NamedArea> a_russia = new HashSet<>();\r
         a_russia.add(russia);\r
 \r
-        Set<PresenceAbsenceTerm> present = new HashSet<PresenceAbsenceTerm>();\r
+        Set<PresenceAbsenceTerm> present = new HashSet<>();\r
         present.add(PresenceAbsenceTerm.PRESENT());\r
 \r
-        Set<PresenceAbsenceTerm> present_native = new HashSet<PresenceAbsenceTerm>();\r
+        Set<PresenceAbsenceTerm> present_native = new HashSet<>();\r
         present_native.add(PresenceAbsenceTerm.PRESENT());\r
         present_native.add(PresenceAbsenceTerm.NATIVE());\r
 \r
-        Set<PresenceAbsenceTerm> absent = new HashSet<PresenceAbsenceTerm>();\r
+        Set<PresenceAbsenceTerm> absent = new HashSet<>();\r
         absent.add(PresenceAbsenceTerm.ABSENT());\r
 \r
-        pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doTaxa),\r
-                "Abies", null, a_germany_canada_russia, null, null, true, null, null, null, null);\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findTaxaAndNamesByFullText(\r
+                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, a_germany_canada_russia, null, null, true, null, null, null, null);\r
         logFreeTextSearchResults(pager, Level.DEBUG, null);\r
+        Assert.assertEquals("Synonyms with matching area filter", 2, pager.getCount().intValue());\r
+        Set<UUID> uuids = this.getTaxonUuidSet(pager);\r
+        Assert.assertTrue("Abies alba (accepted with distribution) should be in", uuids.contains(ABIES_ALBA_UUID));\r
+        Assert.assertTrue("Abies balsamea (accepted with distribution) should be in", uuids.contains(ABIES_BALSAMEA_UUID));\r
 \r
-        // abies_kawakamii_sensu_komarov as missapplied name for t_abies_balsamea\r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doSynonyms),\r
-                "Abies", null, a_germany_canada_russia, present_native, null, true, null, null, null, null);\r
-        Assert.assertEquals("synonyms with matching area filter", 1, pager.getCount().intValue());\r
+                EnumSet.of(TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, a_germany_canada_russia, present_native, null, true, null, null, null, null);\r
+        Assert.assertEquals("Synonyms with matching area filter", 2, pager.getCount().intValue());\r
+        uuids = this.getTaxonUuidSet(pager);\r
+        Assert.assertTrue("Synonym of balsamea should be in", uuids.contains(ABIES_SUBALPINA_UUID));\r
+        Assert.assertTrue("Pro parte synonym of balsamea should be in", uuids.contains(ABIES_LASIOCARPA_UUID));\r
 \r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms),\r
-                "Abies", null, a_germany_canada_russia, null, null, true, null, null, null, null);\r
+                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, a_germany_canada_russia, null, null, true, null, null, null, null);\r
         logFreeTextSearchResults(pager, Level.DEBUG, null);\r
-        Assert.assertEquals("taxa and synonyms with matching area filter", 3, pager.getCount().intValue());\r
+        Assert.assertEquals("taxa and synonyms with matching area filter", 4, pager.getCount().intValue());\r
+        uuids = this.getTaxonUuidSet(pager);\r
+        Assert.assertTrue("Accepted taxon with area should be in", uuids.contains(ABIES_ALBA_UUID));\r
+        Assert.assertTrue("Accepted taxon with area should be in", uuids.contains(ABIES_BALSAMEA_UUID));\r
+        Assert.assertTrue("Synonym of balsamea should be in", uuids.contains(ABIES_SUBALPINA_UUID));\r
+        Assert.assertTrue("Pro parte synonym of balsamea should be in", uuids.contains(ABIES_LASIOCARPA_UUID));\r
+        Assert.assertFalse("Misapplied name should NOT be in", uuids.contains(DESC_ABIES_KAWAKAMII_SEC_KOMAROV_UUID));\r
 \r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms),\r
-                "Abies", null, a_germany_canada_russia, present_native, null, true, null, null, null, null);\r
-        Assert.assertEquals("taxa and synonyms with matching area & status filter 1", 3, pager.getCount().intValue());\r
+                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, a_germany_canada_russia, present_native, null, true, null, null, null, null);\r
+        Assert.assertEquals("taxa and synonyms with matching area & status filter 4", 4, pager.getCount().intValue());\r
+        uuids = this.getTaxonUuidSet(pager);\r
+        Assert.assertTrue("Synonym of balsamea should be in", uuids.contains(ABIES_SUBALPINA_UUID));\r
+        Assert.assertTrue("Accepted taxon with area should be in", uuids.contains(ABIES_ALBA_UUID));\r
+        Assert.assertTrue("Synonym of balsamea should be in", uuids.contains(ABIES_SUBALPINA_UUID));\r
+        Assert.assertTrue("Pro parte synonym of balsamea should be in", uuids.contains(ABIES_LASIOCARPA_UUID));\r
 \r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms),\r
-                "Abies", null, a_germany_canada_russia, present, null, true, null, null, null, null);\r
-        Assert.assertEquals("taxa and synonyms with matching area & status filter 2", 2, pager.getCount().intValue());\r
+                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, a_germany_canada_russia, present, null, true, null, null, null, null);\r
+        Assert.assertEquals("taxa and synonyms with matching area & status filter 3", 3, pager.getCount().intValue());\r
+        uuids = this.getTaxonUuidSet(pager);\r
+        Assert.assertTrue("Abies balsamea (accepted taxon) should be in", uuids.contains(ABIES_BALSAMEA_UUID));\r
+        Assert.assertTrue("Synonym of balsamea should be in", uuids.contains(ABIES_SUBALPINA_UUID));\r
+        Assert.assertTrue("Pro parte synonym of balsamea should be in", uuids.contains(ABIES_LASIOCARPA_UUID));\r
 \r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms),\r
-                "Abies", null, a_russia, present, null, true, null, null, null, null);\r
+                EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, a_russia, present, null, true, null, null, null, null);\r
         Assert.assertEquals("taxa and synonyms with non matching area & status filter", 0, pager.getCount().intValue());\r
 \r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doTaxaByCommonNames),\r
-                "Tanne", null, a_germany_canada_russia, present_native, null, true, null, null, null, null);\r
+                EnumSet.of(TaxaAndNamesSearchMode.doTaxaByCommonNames, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Tanne", null, subtree, a_germany_canada_russia, present_native, null, true, null, null, null, null);\r
         Assert.assertEquals("ByCommonNames with area filter", 1, pager.getCount().intValue());\r
+        uuids = this.getTaxonUuidSet(pager);\r
+        Assert.assertTrue("Abies balsamea should be in", uuids.contains(ABIES_BALSAMEA_UUID));\r
 \r
         // abies_kawakamii_sensu_komarov as misapplied name for t_abies_balsamea\r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames),\r
-                "Abies", null, a_germany_canada_russia, present_native, null, true, null, null, null, null);\r
+                EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, a_germany_canada_russia, present_native, null, true, null, null, null, null);\r
         Assert.assertEquals("misappliedNames with matching area & status filter", 1, pager.getCount().intValue());\r
+        uuids = this.getTaxonUuidSet(pager);\r
+        Assert.assertTrue("Misapplied name should  be in", uuids.contains(DESC_ABIES_KAWAKAMII_SEC_KOMAROV_UUID));\r
 \r
 \r
         // 1. remove existing taxon relation\r
-        Taxon t_abies_balsamea = (Taxon)taxonService.find(UUID.fromString(ABIES_BALSAMEA_UUID));\r
-        Set<TaxonRelationship> relsTo = t_abies_balsamea.getRelationsToThisTaxon();\r
+        Taxon t_abies_balsamea = (Taxon)taxonService.find(ABIES_BALSAMEA_UUID);\r
+        Set<TaxonRelationship> relsTo = t_abies_balsamea.getMisappliedNameRelations();\r
         Assert.assertEquals(1, relsTo.size());\r
         TaxonRelationship taxonRelation = relsTo.iterator().next();\r
         t_abies_balsamea.removeTaxonRelation(taxonRelation);\r
@@ -1058,42 +1362,43 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         commitAndStartNewTransaction(null);\r
 \r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames),\r
-                "Abies", null, a_germany_canada_russia, present_native, null, true, null, null, null, null);\r
+                EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, a_germany_canada_russia, present_native, null, true, null, null, null, null);\r
         Assert.assertEquals("misappliedNames with matching area & status filter, should match nothing now", 0, pager.getCount().intValue());\r
 \r
-        // 2. now add abies_kawakamii_sensu_komarov as misapplied name for t_abies_alba and search for misapplications in russia: ABSENT\r
-        Taxon t_abies_kawakamii_sensu_komarov = (Taxon)taxonService.find(UUID.fromString(D_ABIES_KAWAKAMII_SEC_KOMAROV_UUID));\r
-        Taxon t_abies_alba = (Taxon)taxonService.find(UUID.fromString(ABIES_ALBA_UUID));\r
+        // 2. now add abies_kawakamii_sensu_komarov as misapplied name for t_abies_alba and search for misapplications in Russia: ABSENT\r
+        Taxon t_abies_kawakamii_sensu_komarov = (Taxon)taxonService.find(DESC_ABIES_KAWAKAMII_SEC_KOMAROV_UUID);\r
+        Taxon t_abies_alba = (Taxon)taxonService.find(ABIES_ALBA_UUID);\r
         t_abies_alba.addMisappliedName(t_abies_kawakamii_sensu_komarov, null, null);\r
-\r
         taxonService.update(t_abies_kawakamii_sensu_komarov);\r
-\r
         commitAndStartNewTransaction(null);\r
 \r
         pager = taxonService.findTaxaAndNamesByFullText(\r
-                EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames),\r
-                "Abies", null, a_germany_canada_russia, absent, null, true, null, null, null, null);\r
+                EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames, TaxaAndNamesSearchMode.includeUnpublished),\r
+                "Abies", null, subtree, a_germany_canada_russia, absent, null, true, null, null, null, null);\r
         Assert.assertEquals("misappliedNames with matching area & status filter, should find one", 1, pager.getCount().intValue());\r
+        uuids = this.getTaxonUuidSet(pager);\r
+        Assert.assertTrue("Misapplied name should  be in", uuids.contains(DESC_ABIES_KAWAKAMII_SEC_KOMAROV_UUID));\r
 \r
     }\r
 \r
     @Test\r
     @DataSet\r
-    @Ignore // remove once http://dev.e-taxonomy.eu/trac/ticket/5477 is solved\r
+    //https://dev.e-taxonomy.eu/redmine/issues/5477\r
     public final void testFindTaxaAndNamesByFullText_AreaFilter_issue5477() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
 \r
-        Set<NamedArea> a_germany_canada_russia = new HashSet<NamedArea>();\r
+        TaxonNode subtree = null;\r
+        Set<NamedArea> a_germany_canada_russia = new HashSet<>();\r
         a_germany_canada_russia.add(germany);\r
         a_germany_canada_russia.add(canada);\r
         a_germany_canada_russia.add(russia);\r
 \r
 \r
-        Set<PresenceAbsenceTerm> absent = new HashSet<PresenceAbsenceTerm>();\r
+        Set<PresenceAbsenceTerm> absent = new HashSet<>();\r
         absent.add(PresenceAbsenceTerm.ABSENT());\r
 \r
-        Taxon t_abies_kawakamii_sensu_komarov = (Taxon)taxonService.find(UUID.fromString(D_ABIES_KAWAKAMII_SEC_KOMAROV_UUID));\r
-        Taxon t_abies_alba = (Taxon)taxonService.find(UUID.fromString(ABIES_ALBA_UUID));\r
+        Taxon t_abies_kawakamii_sensu_komarov = (Taxon)taxonService.find(DESC_ABIES_KAWAKAMII_SEC_KOMAROV_UUID);\r
+        Taxon t_abies_alba = (Taxon)taxonService.find(ABIES_ALBA_UUID);\r
         t_abies_alba.addMisappliedName(t_abies_kawakamii_sensu_komarov, null, null);\r
 \r
         /* Since the upgrade from hibernate search 4 to 5.5\r
@@ -1104,12 +1409,12 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
          */\r
         taxonService.update(t_abies_alba);\r
 \r
-          commitAndStartNewTransaction(null);\r
+        commitAndStartNewTransaction(null);\r
 \r
-          Pager pager = taxonService.findTaxaAndNamesByFullText(\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findTaxaAndNamesByFullText(\r
                   EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames),\r
-                  "Abies", null, a_germany_canada_russia, absent, null, true, null, null, null, null);\r
-          Assert.assertEquals("misappliedNames with matching area & status filter, should find one", 1, pager.getCount().intValue());\r
+                  "Abies", null, subtree, a_germany_canada_russia, absent, null, true, null, null, null, null);\r
+        Assert.assertEquals("misappliedNames with matching area & status filter, should find one", 1, pager.getCount().intValue());\r
     }\r
 \r
 \r
@@ -1125,22 +1430,26 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     public final void testFindByEverythingFullText() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
 \r
         refreshLuceneIndex();\r
-\r
-        Pager<SearchResult<TaxonBase>> pager;\r
-\r
+        TaxonNode subtree = null;\r
+        EnumSet<TaxaAndNamesSearchMode> mode = TaxaAndNamesSearchMode.taxaAndSynonymsWithUnpublished();\r
         // via Taxon\r
-        pager = taxonService.findByEverythingFullText("Abies", null, null, true, null, null, null, null);\r
+        Pager<SearchResult<TaxonBase>>pager = taxonService.findByEverythingFullText("Abies", null, subtree, includeUnpublished, null, true, null, null, null, null);\r
+//        Pager<SearchResult<TaxonBase>> pager = taxonService.findTaxaAndNamesByFullText(mode,\r
+//                "Abies", null, null, null, null, true, null, null, null, null);\r
         logFreeTextSearchResults(pager, Level.DEBUG, null);\r
         Assert.assertTrue("Expecting at least 7 entities for 'Abies'", pager.getCount() > 7);\r
         Assert.assertNotNull("Expecting entity", pager.getRecords().get(0).getEntity());\r
-        Assert.assertEquals("Expecting Taxon entity", Taxon.class, pager.getRecords().get(0).getEntity().getClass());\r
+//        Assert.assertEquals("Expecting Taxon entity", Taxon.class, pager.getRecords().get(0).getEntity().getClass());\r
 \r
         // via DescriptionElement\r
-        pager = taxonService.findByEverythingFullText("present", null, null, true, null, null, null, null);\r
+        pager = taxonService.findByEverythingFullText("present", null, subtree, includeUnpublished, null, true, null, null, null, null);\r
+        //this is not covered by findTaxaAndNamesByFullText\r
+//        pager = taxonService.findTaxaAndNamesByFullText(mode,\r
+//                "present", null, null, null, null, true, null, null, null, null);\r
         Assert.assertEquals("Expecting one entity when searching for area 'present'", 1, pager.getCount().intValue());\r
         Assert.assertNotNull("Expecting entity", pager.getRecords().get(0).getEntity());\r
         Assert.assertEquals("Expecting Taxon entity", Taxon.class, CdmBase.deproxy(pager.getRecords().get(0).getEntity()).getClass());\r
-        Assert.assertEquals("Expecting Taxon ", ABIES_BALSAMEA_UUID, pager.getRecords().get(0).getEntity().getUuid().toString());\r
+        Assert.assertEquals("Expecting Taxon ", ABIES_BALSAMEA_UUID, pager.getRecords().get(0).getEntity().getUuid());\r
 \r
     }\r
 \r
@@ -1150,18 +1459,27 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     public final void findByEveryThingFullText() throws IOException, LuceneParseException, LuceneMultiSearchException {\r
 \r
         refreshLuceneIndex();\r
+        TaxonNode subtree = null;\r
 \r
-        Pager<SearchResult<TaxonBase>> pager;\r
+        Classification classification = null;\r
+        EnumSet<TaxaAndNamesSearchMode> mode = TaxaAndNamesSearchMode.taxaAndSynonymsWithUnpublished();\r
 \r
-        pager = taxonService.findByEverythingFullText("genus", null, null,  false, null, null, null, null); // --> 1\r
+        Pager<SearchResult<TaxonBase>> pager = taxonService.findByEverythingFullText("genus", null, subtree, includeUnpublished, null, false, null, null, null, null); // --> 1\r
+//        Pager<SearchResult<TaxonBase>> pager = taxonService.findTaxaAndNamesByFullText(mode,\r
+//                "genus", classification, null, null, null, false, null, null, null, null);\r
         Assert.assertEquals("Expecting 1 entity", 1, pager.getCount().intValue());\r
 \r
         //FIXME FAILS: abies balamea is returned twice, see also testFullText_Grouping()\r
-        pager = taxonService.findByEverythingFullText("Balsam", null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
+        pager = taxonService.findByEverythingFullText("Balsam", null, subtree, includeUnpublished, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
         logFreeTextSearchResults(pager, Level.DEBUG, null);\r
+//        pager = taxonService.findTaxaAndNamesByFullText(EnumSet.allOf(TaxaAndNamesSearchMode.class),\r
+//                "Balsam", classification, null, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
         Assert.assertEquals("expecting to find the Abies balsamea via the GERMAN DescriptionElements", 1, pager.getCount().intValue());\r
 \r
-        pager = taxonService.findByEverythingFullText("Abies", null, null, true, null, null, null, null);\r
+        //TODO fieldHighlight does not yet work\r
+        pager = taxonService.findByEverythingFullText("Abies", null, subtree, includeUnpublished, null, true, null, null, null, null);\r
+//        pager = taxonService.findTaxaAndNamesByFullText(mode,\r
+//                "Abies", classification, null, null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
         Assert.assertEquals("Expecting 8 entities", 8, pager.getCount().intValue());\r
         SearchResult<TaxonBase> searchResult = pager.getRecords().get(0);\r
         Assert.assertTrue("the map of highlighted fragments should contain at least one item", searchResult.getFieldHighlightMap().size() > 0);\r
@@ -1200,13 +1518,13 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     @SuppressWarnings("rawtypes")\r
     @Test\r
     @DataSet\r
-    public final void benchmarkFindByCommonNameHql() throws IOException, LuceneParseException {\r
+    public final void benchmarkFindByCommonNameHql() {\r
 \r
 //        printDataSet(System.err, new String[] { "TaxonBase" });\r
 \r
         createRandomTaxonWithCommonName(NUM_OF_NEW_RADOM_ENTITIES);\r
 \r
-        IFindTaxaAndNamesConfigurator configurator = new FindTaxaAndNamesConfiguratorImpl<>();\r
+        IFindTaxaAndNamesConfigurator configurator = FindTaxaAndNamesConfiguratorImpl.NewInstance();\r
         configurator.setTitleSearchString("Wei"+UTF8.SHARP_S+"%");\r
         configurator.setMatchMode(MatchMode.BEGINNING);\r
         configurator.setDoTaxa(false);\r
@@ -1231,7 +1549,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     @Test\r
     @DataSet\r
     public final void benchmarkFindByCommonNameLucene() throws IOException, LuceneParseException {\r
-\r
+        TaxonNode subtree = null;\r
         createRandomTaxonWithCommonName(NUM_OF_NEW_RADOM_ENTITIES);\r
 \r
         refreshLuceneIndex();\r
@@ -1240,7 +1558,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
 \r
         long startMillis = System.currentTimeMillis();\r
         for (int indx = 0; indx < BENCHMARK_ROUNDS; indx++) {\r
-            pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Wei"+UTF8.SHARP_S+"*", null, null, null, false, null, null, null, null);\r
+            pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Wei"+UTF8.SHARP_S+"*", null, subtree, null, null, false, null, null, null, null);\r
             if (logger.isDebugEnabled()) {\r
                 logger.debug("[" + indx + "]" + pager.getRecords().get(0).getEntity().getTitleCache());\r
             }\r
@@ -1249,20 +1567,114 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         logger.info("Benchmark result - [find taxon by CommonName via lucene] : " + duration + "ms (" + BENCHMARK_ROUNDS + " benchmark rounds )");\r
     }\r
 \r
+    /**\r
+     *\r
+     */\r
+    private void refreshLuceneIndex() {\r
+\r
+//        commitAndStartNewTransaction(null);\r
+        commit();\r
+        endTransaction();\r
+        indexer.purge(DefaultProgressMonitor.NewInstance());\r
+        indexer.reindex(typesToIndex, DefaultProgressMonitor.NewInstance());\r
+        startNewTransaction();\r
+//        commitAndStartNewTransaction(null);\r
+    }\r
+\r
+    /**\r
+     * @param numberOfNew\r
+     *\r
+     */\r
+    private void createRandomTaxonWithCommonName(int numberOfNew) {\r
+\r
+        logger.debug(String.format("creating %1$s random taxan with CommonName", numberOfNew));\r
+\r
+        commitAndStartNewTransaction(null);\r
+\r
+        Reference sec = ReferenceFactory.newBook();\r
+        referenceService.save(sec);\r
+\r
+        for (int i = numberOfNew; i < numberOfNew; i++) {\r
+            RandomStringUtils.randomAlphabetic(10);\r
+            String radomName = RandomStringUtils.randomAlphabetic(5) + " " + RandomStringUtils.randomAlphabetic(10);\r
+            String radomCommonName = RandomStringUtils.randomAlphabetic(10);\r
+\r
+            IBotanicalName name = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());\r
+            name.setNameCache(radomName, true);\r
+            Taxon taxon = Taxon.NewInstance(name, sec);\r
+            taxonService.save(taxon);\r
+\r
+            TaxonDescription description = TaxonDescription.NewInstance(taxon);\r
+            description.addElement(CommonTaxonName.NewInstance(radomCommonName, Language.GERMAN()));\r
+            descriptionService.save(description);\r
+        }\r
+\r
+        commitAndStartNewTransaction(null);\r
+    }\r
+\r
+    private <T extends CdmBase> void logFreeTextSearchResults(Pager<SearchResult<T>> pager, Level level, String[] docFields){\r
+        if(level == null){\r
+            level = Level.DEBUG;\r
+        }\r
+        if(logger.isEnabledFor(level)){\r
+            StringBuilder b = new StringBuilder();\r
+            b.append("\n");\r
+            int i = 0;\r
+            for(SearchResult<?> sr : pager.getRecords()){\r
+\r
+                b.append(" ").append(i++).append(" - ");\r
+                b.append("score:").append(sr.getScore()).append(", ");\r
+\r
+                if(docFields != null){\r
+                    b.append("docs : ");\r
+                    for(Document doc : sr.getDocs()) {\r
+                        b.append("<");\r
+                        for(String f : docFields){\r
+                            b.append(f).append(":").append(Arrays.toString(doc.getValues(f)));\r
+                        }\r
+                        b.append(">");\r
+                    }\r
+                }\r
+\r
+                CdmBase entity = sr.getEntity();\r
+                if(entity == null){\r
+                    b.append("NULL");\r
+                } else {\r
+                    b.append(entity.getClass().getSimpleName()).\r
+                        append(" [").append(entity.getId()).\r
+                        append(" | ").append(entity.getUuid()).append("] : ").\r
+                        append(entity.toString());\r
+\r
+                }\r
+                b.append("\n");\r
+            }\r
+            logger.log(level, b);\r
+        }\r
+    }\r
+\r
+    private Set<UUID> getTaxonUuidSet(@SuppressWarnings("rawtypes") Pager<SearchResult<TaxonBase>> pager) {\r
+        Set<UUID> result = new HashSet<>();\r
+        for (@SuppressWarnings("rawtypes") SearchResult<TaxonBase> searchResult : pager.getRecords()){\r
+            result.add(searchResult.getEntity().getUuid());\r
+        }\r
+        return result;\r
+    }\r
+\r
+\r
     /**\r
      * uncomment @Test annotation to create the dataset for this test\r
      */\r
     @Override\r
-    //    @Test\r
-    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="BlankDataSet.xml")\r
+//    @Test\r
+    @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="../../database/ClearDBDataSet.xml")\r
     public final void createTestDataSet() throws FileNotFoundException {\r
 \r
         Classification europeanAbiesClassification = Classification.NewInstance("European Abies");\r
-        europeanAbiesClassification.setUuid(UUID.fromString(CLASSIFICATION_UUID));\r
+        europeanAbiesClassification.setUuid(CLASSIFICATION_UUID);\r
         classificationService.save(europeanAbiesClassification);\r
 \r
         Classification alternativeClassification = Classification.NewInstance("Abies alternative");\r
-        alternativeClassification.setUuid(UUID.fromString(CLASSIFICATION_ALT_UUID));\r
+        alternativeClassification.setUuid(CLASSIFICATION_ALT_UUID);\r
         classificationService.save(alternativeClassification);\r
 \r
         Reference sec = ReferenceFactory.newBook();\r
@@ -1280,7 +1692,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         IBotanicalName n_abies_alba = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());\r
         n_abies_alba.setNameCache("Abies alba", true);\r
         Taxon t_abies_alba = Taxon.NewInstance(n_abies_alba, sec);\r
-        t_abies_alba.setUuid(UUID.fromString(ABIES_ALBA_UUID));\r
+        t_abies_alba.setUuid(ABIES_ALBA_UUID);\r
         taxonService.save(t_abies_alba);\r
 \r
         IBotanicalName n_abies_subalpina = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());\r
@@ -1291,7 +1703,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         IBotanicalName n_abies_balsamea = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());\r
         n_abies_balsamea.setNameCache("Abies balsamea", true);\r
         Taxon t_abies_balsamea = Taxon.NewInstance(n_abies_balsamea, sec);\r
-        t_abies_balsamea.setUuid(UUID.fromString(ABIES_BALSAMEA_UUID));\r
+        t_abies_balsamea.setUuid(ABIES_BALSAMEA_UUID);\r
         t_abies_balsamea.addSynonym(s_abies_subalpina, SynonymType.SYNONYM_OF());\r
         taxonService.save(t_abies_balsamea);\r
 \r
@@ -1329,8 +1741,8 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         TaxonDescription d_abies_alba = TaxonDescription.NewInstance(t_abies_alba);\r
         TaxonDescription d_abies_balsamea = TaxonDescription.NewInstance(t_abies_balsamea);\r
 \r
-        d_abies_alba.setUuid(UUID.fromString(D_ABIES_ALBA_UUID));\r
-        d_abies_balsamea.setUuid(UUID.fromString(D_ABIES_BALSAMEA_UUID));\r
+        d_abies_alba.setUuid(DESC_ABIES_ALBA_UUID);\r
+        d_abies_balsamea.setUuid(DESC_ABIES_BALSAMEA_UUID);\r
 \r
 \r
         // CommonTaxonName\r
@@ -1386,7 +1798,7 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
 \r
 \r
         writeDbUnitDataSetFile(new String[] {\r
-            "TAXONBASE", "TAXONNAMEBASE",\r
+            "TAXONBASE", "TAXONNAME",\r
             "TAXONRELATIONSHIP",\r
             "REFERENCE", "DESCRIPTIONELEMENTBASE", "DESCRIPTIONBASE",\r
             "AGENTBASE", "HOMOTYPICALGROUP",\r
@@ -1397,89 +1809,4 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
 \r
     }\r
 \r
-    /**\r
-     *\r
-     */\r
-    private void refreshLuceneIndex() {\r
-\r
-//        commitAndStartNewTransaction(null);\r
-        commit();\r
-        endTransaction();\r
-        indexer.purge(DefaultProgressMonitor.NewInstance());\r
-        indexer.reindex(typesToIndex, DefaultProgressMonitor.NewInstance());\r
-        startNewTransaction();\r
-//        commitAndStartNewTransaction(null);\r
-    }\r
-\r
-    /**\r
-     * @param numberOfNew\r
-     *\r
-     */\r
-    private void createRandomTaxonWithCommonName(int numberOfNew) {\r
-\r
-        logger.debug(String.format("creating %1$s random taxan with CommonName", numberOfNew));\r
-\r
-        commitAndStartNewTransaction(null);\r
-\r
-        Reference sec = ReferenceFactory.newBook();\r
-        referenceService.save(sec);\r
-\r
-        for (int i = numberOfNew; i < numberOfNew; i++) {\r
-            RandomStringUtils.randomAlphabetic(10);\r
-            String radomName = RandomStringUtils.randomAlphabetic(5) + " " + RandomStringUtils.randomAlphabetic(10);\r
-            String radomCommonName = RandomStringUtils.randomAlphabetic(10);\r
-\r
-            IBotanicalName name = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());\r
-            name.setNameCache(radomName, true);\r
-            Taxon taxon = Taxon.NewInstance(name, sec);\r
-            taxonService.save(taxon);\r
-\r
-            TaxonDescription description = TaxonDescription.NewInstance(taxon);\r
-            description.addElement(CommonTaxonName.NewInstance(radomCommonName, Language.GERMAN()));\r
-            descriptionService.save(description);\r
-        }\r
-\r
-        commitAndStartNewTransaction(null);\r
-    }\r
-\r
-    private <T extends CdmBase> void logFreeTextSearchResults(Pager<SearchResult<T>> pager, Level level, String[] docFields){\r
-        if(level == null){\r
-            level = Level.DEBUG;\r
-        }\r
-        if(logger.isEnabledFor(level)){\r
-            StringBuilder b = new StringBuilder();\r
-            b.append("\n");\r
-            int i = 0;\r
-            for(SearchResult sr : pager.getRecords()){\r
-\r
-                b.append(" ").append(i++).append(" - ");\r
-                b.append("score:").append(sr.getScore()).append(", ");\r
-\r
-                if(docFields != null){\r
-                    b.append("docs : ");\r
-                    for(Document doc : sr.getDocs()) {\r
-                        b.append("<");\r
-                        for(String f : docFields){\r
-                            b.append(f).append(":").append(Arrays.toString(doc.getValues(f)));\r
-                        }\r
-                        b.append(">");\r
-                    }\r
-                }\r
-\r
-                CdmBase entity = sr.getEntity();\r
-                if(entity == null){\r
-                    b.append("NULL");\r
-                } else {\r
-                    b.append(entity.getClass().getSimpleName()).\r
-                        append(" [").append(entity.getId()).\r
-                        append(" | ").append(entity.getUuid()).append("] : ").\r
-                        append(entity.toString());\r
-\r
-                }\r
-                b.append("\n");\r
-            }\r
-            logger.log(level, b);\r
-        }\r
-    }\r
-\r
 }\r