[part1/2] more tests for #476: Implement free-text search methods for TaxonBase and...
[cdmlib.git] / cdmlib-services / src / test / java / eu / etaxonomy / cdm / api / service / TaxonServiceSearchTest.java
1 /**
2 * Copyright (C) 2009 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.cdm.api.service;
11
12 import static org.junit.Assert.*;
13 import static org.junit.Assert.assertNotNull;
14 import static org.junit.Assert.assertTrue;
15
16 import java.io.FileNotFoundException;
17 import java.io.FileOutputStream;
18 import java.io.IOException;
19 import java.util.Arrays;
20 import java.util.List;
21 import java.util.Set;
22 import java.util.UUID;
23
24 import org.apache.commons.lang.RandomStringUtils;
25 import org.apache.log4j.Logger;
26 import org.apache.lucene.document.Document;
27 import org.apache.lucene.index.CorruptIndexException;
28 import org.apache.lucene.queryParser.ParseException;
29 import org.junit.Assert;
30 import org.junit.Ignore;
31 import org.junit.Test;
32 import org.unitils.dbunit.annotation.DataSet;
33 import org.unitils.spring.annotation.SpringBeanByType;
34
35 import com.mchange.util.AssertException;
36
37 import eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator;
38 import eu.etaxonomy.cdm.api.service.config.TaxonServiceConfiguratorImpl;
39 import eu.etaxonomy.cdm.api.service.pager.Pager;
40 import eu.etaxonomy.cdm.api.service.search.SearchResult;
41 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
42 import eu.etaxonomy.cdm.model.common.Language;
43 import eu.etaxonomy.cdm.model.description.CategoricalData;
44 import eu.etaxonomy.cdm.model.description.CommonTaxonName;
45 import eu.etaxonomy.cdm.model.description.DescriptionBase;
46 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
47 import eu.etaxonomy.cdm.model.description.Distribution;
48 import eu.etaxonomy.cdm.model.description.Feature;
49 import eu.etaxonomy.cdm.model.description.Modifier;
50 import eu.etaxonomy.cdm.model.description.State;
51 import eu.etaxonomy.cdm.model.description.StateData;
52 import eu.etaxonomy.cdm.model.description.TaxonDescription;
53 import eu.etaxonomy.cdm.model.description.TextData;
54 import eu.etaxonomy.cdm.model.name.BotanicalName;
55 import eu.etaxonomy.cdm.model.name.NonViralName;
56 import eu.etaxonomy.cdm.model.name.Rank;
57 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
58 import eu.etaxonomy.cdm.model.reference.Reference;
59 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
60 import eu.etaxonomy.cdm.model.taxon.Classification;
61 import eu.etaxonomy.cdm.model.taxon.Synonym;
62 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
63 import eu.etaxonomy.cdm.model.taxon.Taxon;
64 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
65 import eu.etaxonomy.cdm.persistence.query.MatchMode;
66 import eu.etaxonomy.cdm.search.ICdmMassIndexer;
67 import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
68 import eu.etaxonomy.cdm.test.unitils.CleanSweepInsertLoadStrategy;
69
70
71 /**
72 * @author a.babadshanjan, a.kohlbecker
73 * @created 04.02.2009
74 * @version 1.0
75 */
76
77 public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
78
79 private static final String CLASSIFICATION_UUID = "2a5ceebb-4830-4524-b330-78461bf8cb6b";
80
81 private static final String D_ABIES_ALBA_UUID = "900108d8-e6ce-495e-b32e-7aad3099135e";
82
83 private static final int NUM_OF_NEW_RADOM_ENTITIES = 1000;
84
85 private static Logger logger = Logger.getLogger(TaxonServiceSearchTest.class);
86
87 @SpringBeanByType
88 private ITaxonService taxonService;
89 @SpringBeanByType
90 private ITermService termService;
91 @SpringBeanByType
92 private IClassificationService classificationService;
93 @SpringBeanByType
94 private IReferenceService referenceService;
95 @SpringBeanByType
96 private IDescriptionService descriptionService;
97 @SpringBeanByType
98 private INameService nameService;
99 @SpringBeanByType
100 private ICdmMassIndexer indexer;
101
102 private static final int BENCHMARK_ROUNDS = 300;
103
104 @Test
105 public void testDbUnitUsageTest() throws Exception {
106 assertNotNull("taxonService should exist", taxonService);
107 assertNotNull("nameService should exist", nameService);
108 }
109
110 /**
111 * Test method for
112 * {@link eu.etaxonomy.cdm.api.service.TaxonServiceImpl#findTaxaAndNames(eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator)}
113 * .
114 */
115 @Test
116 @DataSet
117 public final void testFindTaxaAndNames() {
118
119 // pass 1
120 ITaxonServiceConfigurator configurator = new TaxonServiceConfiguratorImpl();
121 configurator.setTitleSearchString("Abies*");
122 configurator.setMatchMode(MatchMode.BEGINNING);
123 configurator.setDoTaxa(true);
124 configurator.setDoSynonyms(true);
125 configurator.setDoNamesWithoutTaxa(true);
126 configurator.setDoTaxaByCommonNames(true);
127
128 Pager<IdentifiableEntity> pager = taxonService.findTaxaAndNames(configurator);
129 List<IdentifiableEntity> list = pager.getRecords();
130
131 if (logger.isDebugEnabled()) {
132 for (int i = 0; i < list.size(); i++) {
133 String nameCache = "";
134 if (list.get(i) instanceof NonViralName) {
135 nameCache = ((NonViralName<?>) list.get(i)).getNameCache();
136 } else if (list.get(i) instanceof TaxonBase) {
137 TaxonNameBase taxonNameBase = ((TaxonBase) list.get(i)).getName();
138 nameCache = ((NonViralName) taxonNameBase).getNameCache();
139 } else {
140 }
141 logger.debug(list.get(i).getClass() + "(" + i + ")" + ": Name Cache = " + nameCache + ", Title Cache = "
142 + list.get(i).getTitleCache());
143 }
144 }
145
146 logger.debug("number of taxa: " + list.size());
147 assertEquals(7, list.size());
148
149 // pass 2
150 // configurator.setDoTaxaByCommonNames(false);
151 // configurator.setDoMisappliedNames(true);
152 // configurator.setClassification(classificationService.load(UUID.fromString(CLASSIFICATION_UUID)));
153 // pager = taxonService.findTaxaAndNames(configurator);
154 // list = pager.getRecords();
155 // assertEquals(0, list.size());
156
157 }
158
159 /**
160 * Test method for
161 * {@link eu.etaxonomy.cdm.api.service.TaxonServiceImpl#searchTaxaByName(java.lang.String, eu.etaxonomy.cdm.model.reference.Reference)}
162 * .
163 */
164 @Test
165 @DataSet
166 public final void testSearchTaxaByName() {
167 logger.warn("testSearchTaxaByName not yet implemented"); // TODO
168 }
169
170 @SuppressWarnings("rawtypes")
171 @Test
172 @DataSet
173 public final void testFindByDescriptionElementFullText_CommonName() throws CorruptIndexException, IOException, ParseException {
174
175 refreshLuceneIndex();
176
177 Pager<SearchResult<TaxonBase>> pager;
178
179 pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Weiß*", null, null, null, null, null);
180 Assert.assertEquals("Expecting one entity when searching for CommonTaxonName", Integer.valueOf(1), pager.getCount());
181
182 pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Weiß*", Arrays.asList(new Language[]{Language.GERMAN()}), null, null, null, null);
183 Assert.assertEquals("Expecting one entity when searching in German", Integer.valueOf(1), pager.getCount());
184
185 pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Weiß*", Arrays.asList(new Language[]{Language.RUSSIAN()}), null, null, null, null);
186 Assert.assertEquals("Expecting no entity when searching in Russian", Integer.valueOf(0), pager.getCount());
187 }
188
189 @SuppressWarnings("rawtypes")
190 @Test
191 @DataSet
192 public final void testFindByDescriptionElementFullText_TextData() throws CorruptIndexException, IOException, ParseException {
193
194 refreshLuceneIndex();
195
196 Pager<SearchResult<TaxonBase>> pager;
197 pager = taxonService.findByDescriptionElementFullText(TextData.class, "Abies", null, null, null, null, null);
198 Assert.assertEquals("Expecting one entity when searching for any TextData", Integer.valueOf(1), pager.getCount());
199 Assert.assertEquals("Abies balsamea sec. ", pager.getRecords().get(0).getEntity().getTitleCache());
200 Assert.assertEquals("Abies balsamea sec. ", pager.getRecords().get(0).getDoc().get("inDescription.taxon.titleCache"));
201
202 pager = taxonService.findByDescriptionElementFullText(null, "Abies", null, null, null, null, null);
203 Assert.assertEquals("Expecting one entity when searching for any type", Integer.valueOf(1), pager.getCount());
204
205 pager = taxonService.findByDescriptionElementFullText(Distribution.class, "Abies", null, null, null, null, null);
206 Assert.assertEquals("Expecting no entity when searching for Distribution", Integer.valueOf(0), pager.getCount());
207
208 pager = taxonService.findByDescriptionElementFullText(TextData.class, "Бальзам", Arrays.asList(new Language[]{}), null, null, null, null);
209 Assert.assertEquals("Expecting one entity", Integer.valueOf(1), pager.getCount());
210 Assert.assertEquals("Abies balsamea sec. ", pager.getRecords().get(0).getEntity().getTitleCache());
211
212 pager = taxonService.findByDescriptionElementFullText(TextData.class, "Бальзам", Arrays.asList(new Language[]{Language.RUSSIAN()}), null, null, null, null);
213 Assert.assertEquals("Expecting one entity", Integer.valueOf(1), pager.getCount());
214 Assert.assertEquals("Abies balsamea sec. ", pager.getRecords().get(0).getEntity().getTitleCache());
215
216 pager = taxonService.findByDescriptionElementFullText(TextData.class, "Бальзам", Arrays.asList(new Language[]{Language.GERMAN()}), null, null, null, null);
217 Assert.assertEquals("Expecting no entity", Integer.valueOf(0), pager.getCount());
218
219 pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", Arrays.asList(new Language[]{Language.GERMAN(), Language.RUSSIAN()}), null, null, null, null);
220 Assert.assertEquals("Expecting one entity", Integer.valueOf(1), pager.getCount());
221 Assert.assertEquals("Abies balsamea sec. ", pager.getRecords().get(0).getEntity().getTitleCache());
222
223 //
224 // modify the DescriptionElement
225 pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", Arrays.asList(new Language[]{Language.GERMAN(), Language.RUSSIAN()}), null, null, null, null);
226 Document indexDocument = pager.getRecords().get(0).getDoc();
227 String[] descriptionElementUuidStr = indexDocument.getValues("uuid");
228 String[] inDescriptionUuidStr = indexDocument.getValues("inDescription.uuid");
229 // is only one uuid!
230 DescriptionElementBase textData = descriptionService.getDescriptionElementByUuid(UUID.fromString(descriptionElementUuidStr[0]));
231
232 ((TextData)textData).removeText(Language.GERMAN());
233 ((TextData)textData).putText(Language.SPANISH_CASTILIAN(), "abeto balsámico");
234
235 descriptionService.saveDescriptionElement(textData);
236 commitAndStartNewTransaction(null);
237 // printDataSet(System.out, new String[] {
238 // "DESCRIPTIONELEMENTBASE", "LANGUAGESTRING", "DESCRIPTIONELEMENTBASE_LANGUAGESTRING" }
239 // );
240
241 //
242 pager = taxonService.findByDescriptionElementFullText(TextData.class, "Balsam-Tanne", Arrays.asList(new Language[]{Language.GERMAN(), Language.RUSSIAN()}), null, null, null, null);
243 Assert.assertEquals("The german 'Balsam-Tanne' TextData should no longer be indexed", Integer.valueOf(0), pager.getCount());
244 pager = taxonService.findByDescriptionElementFullText(TextData.class, "abeto", Arrays.asList(new Language[]{Language.SPANISH_CASTILIAN()}), null, null, null, null);
245 Assert.assertEquals("expecting to find the SPANISH_CATALAN 'abeto balsámico'", Integer.valueOf(1), pager.getCount());
246 pager = taxonService.findByDescriptionElementFullText(TextData.class, "balsámico", null, null, null, null, null);
247 Assert.assertEquals("expecting to find the SPANISH_CATALAN 'abeto balsámico'", Integer.valueOf(1), pager.getCount());
248
249 //
250 // modify the DescriptionElement via the Description object
251 DescriptionBase description = descriptionService.find(UUID.fromString(inDescriptionUuidStr[0]));
252 Set<DescriptionElementBase> elements = description.getElements();
253 for( DescriptionElementBase elm : elements){
254 if(elm.getUuid().toString().equals(descriptionElementUuidStr[0])){
255 ((TextData)elm).removeText(Language.SPANISH_CASTILIAN());
256 ((TextData)elm).putText(Language.POLISH(), "Jodła balsamiczna");
257 }
258 }
259
260 descriptionService.saveOrUpdate(description);
261 commitAndStartNewTransaction(null);
262
263 pager = taxonService.findByDescriptionElementFullText(TextData.class, "abeto", Arrays.asList(new Language[]{Language.SPANISH_CASTILIAN()}), null, null, null, null);
264 Assert.assertEquals("The spanish 'abeto balsámico' TextData should no longer be indexed", Integer.valueOf(0), pager.getCount());
265 pager = taxonService.findByDescriptionElementFullText(TextData.class, "balsamiczna", Arrays.asList(new Language[]{Language.POLISH()}), null, null, null, null);
266 Assert.assertEquals("expecting to find the POLISH 'Jodła balsamiczna'", Integer.valueOf(1), pager.getCount());
267
268
269 // String newName = "Quercus robur";
270 // taxon.setTitleCache(newName + " sec. ", true);
271 //
272 // taxonService.saveOrUpdate(taxon);
273 // commitAndStartNewTransaction(null);
274 //
275 // taxon = taxonService.load(taxon.getUuid());
276 // Assert.assertEquals(newName + " sec. ", taxon.getTitleCache());
277 }
278
279 @SuppressWarnings("rawtypes")
280 @Test
281 @DataSet
282 public final void testFindByDescriptionElementFullText_CategoricalData() throws CorruptIndexException, IOException, ParseException {
283
284 // add CategoricalData
285 DescriptionBase d_abies_balsamea = descriptionService.find(UUID.fromString(D_ABIES_ALBA_UUID));
286 // Categorical data
287 CategoricalData cdata = CategoricalData.NewInstance();
288 cdata.setFeature(Feature.DESCRIPTION());
289 State state = State.NewInstance("green", "green", "gn");
290
291 StateData statedata = StateData.NewInstance(state);
292 statedata.putModifyingText(Language.ENGLISH(), "always, even during winter");
293 cdata.addState(statedata);
294 d_abies_balsamea.addElement(cdata);
295
296 termService.save(state);
297 descriptionService.save(d_abies_balsamea);
298
299 commitAndStartNewTransaction(null);
300
301 printDataSet(System.out, new String[] {
302 "STATEDATA", "STATEDATA_DEFINEDTERMBASE", "STATEDATA_LANGUAGESTRING", "LANGUAGESTRING"});
303
304 refreshLuceneIndex();
305
306 Pager<SearchResult<TaxonBase>> pager;
307 pager = taxonService.findByDescriptionElementFullText(CategoricalData.class, "green", null, null, null, null, null);
308 Assert.assertEquals("Expecting one entity", Integer.valueOf(1), pager.getCount());
309 Assert.assertEquals("Abies balsamea sec. ", pager.getRecords().get(0).getEntity().getTitleCache());
310 Assert.assertEquals("Abies balsamea sec. ", pager.getRecords().get(0).getDoc().get("inDescription.taxon.titleCache"));
311
312
313 //TODO modify the StateData
314 TaxonBase taxon = pager.getRecords().get(0).getEntity();
315
316 String newName = "Quercus robur";
317 taxon.setTitleCache(newName + " sec. ", true);
318
319 taxonService.saveOrUpdate(taxon);
320 commitAndStartNewTransaction(null);
321
322 taxon = taxonService.load(taxon.getUuid());
323 Assert.assertEquals(newName + " sec. ", taxon.getTitleCache());
324 }
325
326 /**
327 *
328 */
329 private void refreshLuceneIndex() {
330
331 commitAndStartNewTransaction(null);
332 indexer.purge();
333 indexer.reindex();
334 commitAndStartNewTransaction(null);
335 }
336
337 @SuppressWarnings("rawtypes")
338 @Test
339 @DataSet
340 public final void testFindByCommonNameHqlBenchmark() throws CorruptIndexException, IOException, ParseException {
341
342 // printDataSet(System.err, new String[] { "TaxonBase" });
343
344 createRandomTaxonWithCommonName(NUM_OF_NEW_RADOM_ENTITIES);
345
346 ITaxonServiceConfigurator configurator = new TaxonServiceConfiguratorImpl();
347 configurator.setTitleSearchString("Weiß%");
348 configurator.setMatchMode(MatchMode.BEGINNING);
349 configurator.setDoTaxa(false);
350 configurator.setDoSynonyms(false);
351 configurator.setDoNamesWithoutTaxa(false);
352 configurator.setDoTaxaByCommonNames(true);
353
354 Pager<IdentifiableEntity> pager;
355
356 long startMillis = System.currentTimeMillis();
357 for (int indx = 0; indx < BENCHMARK_ROUNDS; indx++) {
358 pager = taxonService.findTaxaAndNames(configurator);
359 if (logger.isDebugEnabled()) {
360 logger.debug("[" + indx + "]" + pager.getRecords().get(0).getTitleCache());
361 }
362 }
363 double duration = ((double) (System.currentTimeMillis() - startMillis)) / BENCHMARK_ROUNDS;
364 logger.info("Benchmark result - [find taxon by CommonName via HQL] : " + duration + "ms (" + BENCHMARK_ROUNDS + " benchmark rounds )");
365 }
366
367 @SuppressWarnings("rawtypes")
368 @Test
369 @DataSet
370 public final void testFindByCommonNameLuceneBenchmark() throws CorruptIndexException, IOException, ParseException {
371
372 // printDataSet(System.err, new String[] { "TaxonBase" });
373
374 createRandomTaxonWithCommonName(NUM_OF_NEW_RADOM_ENTITIES);
375
376 refreshLuceneIndex();
377
378 Pager<SearchResult<TaxonBase>> pager;
379
380 long startMillis = System.currentTimeMillis();
381 for (int indx = 0; indx < BENCHMARK_ROUNDS; indx++) {
382 pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Weiß*", null, null, null, null, null);
383 if (logger.isDebugEnabled()) {
384 logger.debug("[" + indx + "]" + pager.getRecords().get(0).getEntity().getTitleCache());
385 }
386 }
387 double duration = ((double) (System.currentTimeMillis() - startMillis)) / BENCHMARK_ROUNDS;
388 logger.info("Benchmark result - [find taxon by CommonName via lucene] : " + duration + "ms (" + BENCHMARK_ROUNDS + " benchmark rounds )");
389 }
390
391 // @Test
392 @DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="BlankDataSet.xml")
393 public final void createDataSet() throws FileNotFoundException {
394
395 // Classification classification = Classification.NewInstance("European Abies for testing");
396 // classification.setUuid(UUID.fromString(CLASSIFICATION_UUID));
397 // classificationService.save(classification);
398
399 Reference sec = ReferenceFactory.newBook();
400 referenceService.save(sec);
401
402 BotanicalName n_abies = BotanicalName.NewInstance(Rank.GENUS());
403 n_abies.setNameCache("Abies", true);
404 Taxon t_abies = Taxon.NewInstance(n_abies, sec);
405 taxonService.save(t_abies);
406
407 BotanicalName n_abies_alba = BotanicalName.NewInstance(Rank.SPECIES());
408 n_abies_alba.setNameCache("Abies alba", true);
409 Taxon t_abies_alba = Taxon.NewInstance(n_abies_alba, sec);
410 taxonService.save(t_abies_alba);
411
412 BotanicalName n_abies_balsamea = BotanicalName.NewInstance(Rank.SPECIES());
413 n_abies_balsamea.setNameCache("Abies balsamea", true);
414 Taxon t_abies_balsamea = Taxon.NewInstance(n_abies_balsamea, sec);
415 taxonService.save(t_abies_balsamea);
416
417 BotanicalName n_abies_grandis = BotanicalName.NewInstance(Rank.SPECIES());
418 n_abies_grandis.setNameCache("Abies grandis", true);
419 Taxon t_abies_grandis = Taxon.NewInstance(n_abies_grandis, sec);
420 taxonService.save(t_abies_grandis);
421
422 BotanicalName n_abies_kawakamii = BotanicalName.NewInstance(Rank.SPECIES());
423 n_abies_kawakamii.setNameCache("Abies kawakamii", true);
424 Taxon t_abies_kawakamii = Taxon.NewInstance(n_abies_kawakamii, sec);
425 taxonService.save(t_abies_kawakamii);
426
427 BotanicalName n_abies_subalpina = BotanicalName.NewInstance(Rank.SPECIES());
428 n_abies_subalpina.setNameCache("Abies subalpina", true);
429 Synonym s_abies_subalpina = Synonym.NewInstance(n_abies_subalpina, sec);
430 taxonService.save(s_abies_subalpina);
431
432 BotanicalName n_abies_lasiocarpa = BotanicalName.NewInstance(Rank.SPECIES());
433 n_abies_lasiocarpa.setNameCache("Abies lasiocarpa", true);
434 Taxon t_abies_lasiocarpa = Taxon.NewInstance(n_abies_lasiocarpa, sec);
435 t_abies_lasiocarpa.addSynonym(s_abies_subalpina, SynonymRelationshipType.SYNONYM_OF());
436 taxonService.save(t_abies_lasiocarpa);
437
438 //
439 // Description
440 //
441 TaxonDescription d_abies_alba = TaxonDescription.NewInstance(t_abies_alba);
442
443 d_abies_alba.setUuid(UUID.fromString(D_ABIES_ALBA_UUID));
444 // CommonTaxonName
445 d_abies_alba.addElement(CommonTaxonName.NewInstance("Weißtanne", Language.GERMAN()));
446 d_abies_alba.addElement(CommonTaxonName.NewInstance("silver fir", Language.ENGLISH()));
447 // TextData
448 TaxonDescription d_abies_balsamea = TaxonDescription.NewInstance(t_abies_balsamea);
449 d_abies_balsamea
450 .addElement(TextData
451 .NewInstance(
452 "Die Balsam-Tanne (Abies balsamea) ist eine Pflanzenart aus der Gattung der Tannen (Abies). Sie wächst im nordöstlichen Nordamerika, wo sie sowohl Tief- als auch Bergland besiedelt. Sie gilt als relativ anspruchslos gegenüber dem Standort und ist frosthart. In vielen Teilen des natürlichen Verbreitungsgebietes stellt sie die Klimaxbaumart dar.",
453 Language.GERMAN(), null));
454 d_abies_balsamea
455 .addElement(TextData
456 .NewInstance(
457 "Бальзам ньыв (лат. Abies balsamea) – быдмассэзлӧн пожум котырись ньыв увтырын торья вид. Ньывпуыс быдмӧ 14–20 метра вылына да овлӧ 10–60 см кыза диаметрын. Ньывпу пантасьӧ Ойвыв Америкаын.",
458 Language.RUSSIAN(), null));
459 setComplete();
460 endTransaction();
461
462 printDataSet(new FileOutputStream("TaxonServiceSearchTest.xml"), new String[] { "TAXONBASE", "TAXONNAMEBASE", "SYNONYMRELATIONSHIP", "REFERENCE", "DESCRIPTIONELEMENTBASE",
463 "DESCRIPTIONBASE", "AGENTBASE", "HOMOTYPICALGROUP", "CLASSIFICATION", "LANGUAGESTRING", "DESCRIPTIONELEMENTBASE_LANGUAGESTRING" });
464
465 }
466
467 /**
468 * @param numberOfNew
469 *
470 */
471 private void createRandomTaxonWithCommonName(int numberOfNew) {
472
473 logger.debug(String.format("creating %1$s random taxan with CommonName", numberOfNew));
474
475 Reference sec = ReferenceFactory.newBook();
476 referenceService.save(sec);
477
478 for (int i = numberOfNew; i < numberOfNew; i++) {
479 RandomStringUtils.randomAlphabetic(10);
480 String radomName = RandomStringUtils.randomAlphabetic(5) + " " + RandomStringUtils.randomAlphabetic(10);
481 String radomCommonName = RandomStringUtils.randomAlphabetic(10);
482
483 BotanicalName name = BotanicalName.NewInstance(Rank.SPECIES());
484 name.setNameCache(radomName, true);
485 Taxon taxon = Taxon.NewInstance(name, sec);
486 taxonService.save(taxon);
487
488 TaxonDescription description = TaxonDescription.NewInstance(taxon);
489 description.addElement(CommonTaxonName.NewInstance(radomCommonName, Language.GERMAN()));
490 descriptionService.save(description);
491 }
492
493 commitAndStartNewTransaction(null);
494
495 }
496
497 }