Revision 99e4ba58
Added by Anahit Babadshanjan over 15 years ago
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonServiceImpl.java | ||
---|---|---|
20 | 20 |
|
21 | 21 |
import org.apache.log4j.Logger; |
22 | 22 |
import org.springframework.beans.factory.annotation.Autowired; |
23 |
import org.springframework.beans.factory.annotation.Qualifier; |
|
23 | 24 |
import org.springframework.stereotype.Service; |
24 | 25 |
import org.springframework.transaction.TransactionStatus; |
25 | 26 |
import org.springframework.transaction.annotation.Transactional; |
... | ... | |
27 | 28 |
import eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator; |
28 | 29 |
import eu.etaxonomy.cdm.api.service.pager.Pager; |
29 | 30 |
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl; |
30 |
import eu.etaxonomy.cdm.model.common.Annotation;
|
|
31 |
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
|
|
31 | 32 |
import eu.etaxonomy.cdm.model.common.IdentifiableEntity; |
32 | 33 |
import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary; |
33 | 34 |
import eu.etaxonomy.cdm.model.common.RelationshipBase; |
34 |
import eu.etaxonomy.cdm.model.common.TermVocabulary; |
|
35 |
import eu.etaxonomy.cdm.model.description.CommonTaxonName; |
|
36 |
import eu.etaxonomy.cdm.model.description.DescriptionBase; |
|
35 | 37 |
import eu.etaxonomy.cdm.model.description.TaxonDescription; |
36 |
import eu.etaxonomy.cdm.model.name.NameRelationshipType; |
|
37 | 38 |
import eu.etaxonomy.cdm.model.name.Rank; |
38 | 39 |
import eu.etaxonomy.cdm.model.name.TaxonNameBase; |
39 | 40 |
import eu.etaxonomy.cdm.model.reference.ReferenceBase; |
... | ... | |
45 | 46 |
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship; |
46 | 47 |
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType; |
47 | 48 |
import eu.etaxonomy.cdm.persistence.dao.common.IOrderedTermVocabularyDao; |
48 |
import eu.etaxonomy.cdm.persistence.dao.name.INomenclaturalStatusDao;
|
|
49 |
import eu.etaxonomy.cdm.persistence.dao.description.IDescriptionDao;
|
|
49 | 50 |
import eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao; |
50 | 51 |
import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonDao; |
51 | 52 |
import eu.etaxonomy.cdm.persistence.fetch.CdmFetch; |
... | ... | |
58 | 59 |
|
59 | 60 |
@Autowired |
60 | 61 |
private ITaxonNameDao nameDao; |
62 |
// @Autowired |
|
63 |
// @Qualifier("nonViralNameDaoHibernateImpl") |
|
64 |
// private INonViralNameDao nonViralNameDao; |
|
61 | 65 |
@Autowired |
62 | 66 |
private IOrderedTermVocabularyDao orderedVocabularyDao; |
67 |
@Autowired |
|
68 |
private IDescriptionDao descriptionDao; |
|
69 |
|
|
70 |
/** |
|
71 |
* Constructor |
|
72 |
*/ |
|
73 |
public TaxonServiceImpl(){ |
|
74 |
if (logger.isDebugEnabled()) { logger.debug("Load TaxonService Bean"); } |
|
75 |
} |
|
63 | 76 |
|
64 | 77 |
public TaxonBase getTaxonByUuid(UUID uuid) { |
65 | 78 |
return super.getCdmObjectByUuid(uuid); |
... | ... | |
314 | 327 |
List<IdentifiableEntity> results = new ArrayList<IdentifiableEntity>(); |
315 | 328 |
int numberOfResults = 0; |
316 | 329 |
|
330 |
// TODO: Implement matching count-methods for the search methods |
|
331 |
|
|
317 | 332 |
if(configurator.isDoTaxa()) { |
318 |
int numberTaxaResults = dao.countTaxaByName(configurator.getSearchString(), true, configurator.getSec()); |
|
319 |
if (logger.isDebugEnabled()) { logger.debug(numberTaxaResults + " taxa counted"); } |
|
320 |
if (numberTaxaResults > 0) { |
|
321 |
List<TaxonBase> taxa = |
|
322 |
dao.getTaxaByName(configurator.getSearchString(), true, configurator.getSec()); |
|
323 |
if (!results.addAll(taxa)) { |
|
324 |
logger.warn("Problem adding taxa to result"); |
|
325 |
} |
|
333 |
int numberTaxaResults = 0; |
|
334 |
// int numberTaxaResults = dao.countTaxaByName(configurator.getSearchString(), true, configurator.getSec()); |
|
335 |
List<TaxonBase> taxa = |
|
336 |
dao.getTaxaByName(configurator.getSearchString(), configurator.getMatchMode(), |
|
337 |
true, configurator.getPageSize(), configurator.getPageNumber()); |
|
338 |
// dao.getTaxaByName(configurator.getSearchString(), true, configurator.getSec()); |
|
339 |
if (logger.isDebugEnabled()) { logger.debug(taxa.size() + " matching taxa counted"); } |
|
340 |
if (taxa.size() > 0) { |
|
341 |
results.addAll(taxa); |
|
326 | 342 |
numberOfResults += numberTaxaResults; |
327 | 343 |
} |
328 | 344 |
} |
329 | 345 |
|
330 | 346 |
if(configurator.isDoSynonyms()) { |
331 |
int numberSynonymResults = dao.countTaxaByName(configurator.getSearchString(), false, configurator.getSec());
|
|
332 |
if (logger.isDebugEnabled()) { logger.debug(numberSynonymResults + " synonyms counted"); }
|
|
333 |
if (numberSynonymResults > 0) {
|
|
334 |
List<TaxonBase> synonyms =
|
|
335 |
dao.getTaxaByName(configurator.getSearchString(), false, configurator.getSec());
|
|
336 |
if (!results.addAll(synonyms)) {
|
|
337 |
logger.warn("Problem adding synonyms to result");
|
|
338 |
}
|
|
347 |
int numberSynonymResults = 0;
|
|
348 |
List<TaxonBase> synonyms =
|
|
349 |
dao.getTaxaByName(configurator.getSearchString(), configurator.getMatchMode(),
|
|
350 |
false, configurator.getPageSize(), configurator.getPageNumber());
|
|
351 |
// dao.getTaxaByName(configurator.getSearchString(), false, configurator.getSec());
|
|
352 |
if (logger.isDebugEnabled()) { logger.debug(synonyms.size() + " matching synonym(s) counted"); }
|
|
353 |
if (synonyms.size() > 0) {
|
|
354 |
results.addAll(synonyms);
|
|
339 | 355 |
numberOfResults += numberSynonymResults; |
340 | 356 |
} |
341 | 357 |
} |
342 | 358 |
|
343 | 359 |
if (configurator.isDoNamesWithoutTaxa()) { |
344 |
int numberNameResults = nameDao.countNames(configurator.getSearchString());
|
|
345 |
// TODO: Implement and use a count-method that counts names without taxa
|
|
346 |
if (logger.isDebugEnabled()) { logger.debug(numberNameResults + " names counted"); }
|
|
347 |
if (numberNameResults > 0) {
|
|
348 |
List<TaxonNameBase<?,?>> names =
|
|
349 |
nameDao.searchNames(configurator.getSearchString(), null, null);
|
|
360 |
int numberNameResults = 0;
|
|
361 |
List<? extends TaxonNameBase<?,?>> names =
|
|
362 |
nameDao.findByName(configurator.getSearchString(), configurator.getMatchMode(),
|
|
363 |
configurator.getPageSize(), configurator.getPageNumber(), null);
|
|
364 |
if (logger.isDebugEnabled()) { logger.debug(names.size() + " matching name(s) found"); }
|
|
365 |
if (names.size() > 0) {
|
|
350 | 366 |
for (TaxonNameBase<?,?> taxonName : names) { |
351 | 367 |
if (taxonName.getTaxonBases().size() == 0) { |
352 |
if (!results.add(taxonName)) { |
|
353 |
logger.warn("Problem adding taxon name " + taxonName.getTitleCache() + " to result"); |
|
354 |
} else { |
|
355 |
numberNameResults++; |
|
356 |
} |
|
368 |
results.add(taxonName); |
|
369 |
numberNameResults++; |
|
357 | 370 |
} |
358 | 371 |
} |
372 |
if (logger.isDebugEnabled()) { logger.debug(numberNameResults + " matching name(s) without taxa found"); } |
|
359 | 373 |
numberOfResults += numberNameResults; |
360 | 374 |
} |
361 | 375 |
} |
376 |
|
|
377 |
if (configurator.isDoTaxaByCommonNames()) { |
|
378 |
int numberCommonNameResults = 0; |
|
379 |
List<CommonTaxonName> commonTaxonNames = |
|
380 |
descriptionDao.searchDescriptionByCommonName(configurator.getSearchString(), |
|
381 |
configurator.getMatchMode(), configurator.getPageSize(), configurator.getPageNumber()); |
|
382 |
if (logger.isDebugEnabled()) { logger.debug(commonTaxonNames.size() + " matching common name(s) found"); } |
|
383 |
if (commonTaxonNames.size() > 0) { |
|
384 |
for (CommonTaxonName commonTaxonName : commonTaxonNames) { |
|
385 |
DescriptionBase description = commonTaxonName.getInDescription(); |
|
386 |
description = HibernateProxyHelper.deproxy(description, DescriptionBase.class); |
|
387 |
if (description instanceof TaxonDescription) { |
|
388 |
Taxon taxon = ((TaxonDescription)description).getTaxon(); |
|
389 |
results.add(taxon); |
|
390 |
numberCommonNameResults++; |
|
391 |
} else { |
|
392 |
logger.warn("Description of " + commonTaxonName.getName() + " is not an instance of TaxonDescription"); |
|
393 |
} |
|
394 |
} |
|
395 |
numberOfResults += numberCommonNameResults; |
|
396 |
} |
|
397 |
} |
|
398 |
|
|
362 | 399 |
Collections.sort(results); |
363 | 400 |
return new DefaultPagerImpl<IdentifiableEntity> |
364 | 401 |
(configurator.getPageNumber(), numberOfResults, configurator.getPageSize(), results); |
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/config/ITaxonServiceConfigurator.java | ||
---|---|---|
10 | 10 |
package eu.etaxonomy.cdm.api.service.config; |
11 | 11 |
|
12 | 12 |
import eu.etaxonomy.cdm.model.reference.ReferenceBase; |
13 |
import eu.etaxonomy.cdm.persistence.query.MatchMode; |
|
13 | 14 |
|
14 | 15 |
/** |
15 | 16 |
* @author a.babadshanjan |
... | ... | |
26 | 27 |
|
27 | 28 |
public void setDoSynonyms(boolean doSynonyms); |
28 | 29 |
|
30 |
public boolean isDoNamesWithoutTaxa(); |
|
31 |
|
|
32 |
public void setDoNamesWithoutTaxa(boolean doNamesWithoutTaxa); |
|
33 |
|
|
34 |
public boolean isDoTaxaByCommonNames(); |
|
35 |
|
|
36 |
public void setDoTaxaByCommonNames(boolean doTaxaByCommonNames); |
|
37 |
|
|
29 | 38 |
public String getSearchString(); |
30 | 39 |
|
31 | 40 |
public void setSearchString(String searchString); |
32 | 41 |
|
42 |
public MatchMode getMatchMode(); |
|
43 |
|
|
44 |
public void setMatchMode(MatchMode matchMode); |
|
45 |
|
|
33 | 46 |
public ReferenceBase getSec(); |
34 | 47 |
|
35 | 48 |
public void setReferenceBase(ReferenceBase sec); |
36 | 49 |
|
37 |
public boolean isDoNamesWithoutTaxa(); |
|
38 |
|
|
39 |
public void setDoNamesWithoutTaxa(boolean doNamesWithoutTaxa); |
|
40 |
|
|
41 | 50 |
public Integer getPageSize(); |
42 | 51 |
|
43 | 52 |
public void setPageSize(Integer pageSize); |
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/config/impl/TaxonServiceConfiguratorImpl.java | ||
---|---|---|
10 | 10 |
import eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator; |
11 | 11 |
import eu.etaxonomy.cdm.api.service.config.IdentifiableServiceConfiguratorBase; |
12 | 12 |
import eu.etaxonomy.cdm.model.reference.ReferenceBase; |
13 |
import eu.etaxonomy.cdm.persistence.query.MatchMode; |
|
13 | 14 |
|
14 | 15 |
/** |
15 | 16 |
* @author a.babadshanjan |
... | ... | |
21 | 22 |
|
22 | 23 |
private boolean doTaxa = true; |
23 | 24 |
private boolean doSynonyms = false; |
25 |
private boolean doTaxaByCommonNames = false; |
|
24 | 26 |
private boolean doNamesWithoutTaxa = false; |
25 | 27 |
private String searchString; |
28 |
private MatchMode matchMode; |
|
26 | 29 |
private ReferenceBase sec = null; |
27 | 30 |
|
28 | 31 |
public static TaxonServiceConfiguratorImpl NewInstance() { |
29 | 32 |
return new TaxonServiceConfiguratorImpl(); |
30 | 33 |
} |
31 | 34 |
|
35 |
public boolean isDoTaxa() { |
|
36 |
return doTaxa; |
|
37 |
} |
|
38 |
|
|
39 |
public void setDoTaxa(boolean doTaxa) { |
|
40 |
this.doTaxa = doTaxa; |
|
41 |
} |
|
42 |
|
|
32 | 43 |
public boolean isDoSynonyms() { |
33 | 44 |
return doSynonyms; |
34 | 45 |
} |
... | ... | |
37 | 48 |
this.doSynonyms = doSynonyms; |
38 | 49 |
} |
39 | 50 |
|
40 |
public boolean isDoTaxa() { |
|
41 |
return doTaxa; |
|
51 |
/** |
|
52 |
* @return doTaxaByCommonNames |
|
53 |
*/ |
|
54 |
public boolean isDoTaxaByCommonNames() { |
|
55 |
return doTaxaByCommonNames; |
|
42 | 56 |
} |
43 | 57 |
|
44 |
public void setDoTaxa(boolean doTaxa) { |
|
45 |
this.doTaxa = doTaxa; |
|
58 |
/** |
|
59 |
* @param doTaxaByCommonNames |
|
60 |
*/ |
|
61 |
public void setDoTaxaByCommonNames(boolean doTaxaByCommonNames) { |
|
62 |
this.doTaxaByCommonNames = doTaxaByCommonNames; |
|
63 |
} |
|
64 |
|
|
65 |
/** |
|
66 |
* @return doNamesWithoutTaxa |
|
67 |
*/ |
|
68 |
public boolean isDoNamesWithoutTaxa() { |
|
69 |
return doNamesWithoutTaxa; |
|
46 | 70 |
} |
47 | 71 |
|
72 |
/** |
|
73 |
* @param doNamesWithoutTaxa |
|
74 |
*/ |
|
75 |
public void setDoNamesWithoutTaxa(boolean doNamesWithoutTaxa) { |
|
76 |
this.doNamesWithoutTaxa = doNamesWithoutTaxa; |
|
77 |
} |
|
78 |
|
|
48 | 79 |
public String getSearchString() { |
49 | 80 |
return searchString; |
50 | 81 |
} |
... | ... | |
53 | 84 |
this.searchString = searchString; |
54 | 85 |
} |
55 | 86 |
|
87 |
public MatchMode getMatchMode() { |
|
88 |
return matchMode; |
|
89 |
} |
|
90 |
|
|
91 |
public void setMatchMode(MatchMode matchMode) { |
|
92 |
this.matchMode = matchMode; |
|
93 |
} |
|
94 |
|
|
56 | 95 |
public ReferenceBase getSec() { |
57 | 96 |
return sec; |
58 | 97 |
} |
... | ... | |
60 | 99 |
public void setReferenceBase(ReferenceBase sec) { |
61 | 100 |
this.sec = sec; |
62 | 101 |
} |
63 |
|
|
64 |
/** |
|
65 |
* @return the doNamesWithoutTaxa |
|
66 |
*/ |
|
67 |
public boolean isDoNamesWithoutTaxa() { |
|
68 |
return doNamesWithoutTaxa; |
|
69 |
} |
|
70 |
|
|
71 |
/** |
|
72 |
* @param doNamesWithoutTaxa the doEmptyNames to set |
|
73 |
*/ |
|
74 |
public void setDoNamesWithoutTaxa(boolean doNamesWithoutTaxa) { |
|
75 |
this.doNamesWithoutTaxa = doNamesWithoutTaxa; |
|
76 |
} |
|
77 | 102 |
} |
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonServiceSearchTest.java | ||
---|---|---|
34 | 34 |
import eu.etaxonomy.cdm.model.taxon.Taxon; |
35 | 35 |
import eu.etaxonomy.cdm.model.taxon.TaxonBase; |
36 | 36 |
import eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBaseTestClass; |
37 |
import eu.etaxonomy.cdm.persistence.query.MatchMode; |
|
37 | 38 |
import eu.etaxonomy.cdm.test.integration.CdmIntegrationTest; |
38 | 39 |
|
39 | 40 |
/** |
... | ... | |
54 | 55 |
// private CdmEntityDaoBaseTestClass cdmEntityDaoBase; |
55 | 56 |
|
56 | 57 |
|
57 |
//@Ignore
|
|
58 |
@Ignore |
|
58 | 59 |
@Test |
59 | 60 |
public void testDbUnitUsageTest() throws Exception { |
60 | 61 |
assertNotNull("taxonService should exist", taxonService); |
... | ... | |
72 | 73 |
public final void testFindTaxaAndNames() { |
73 | 74 |
|
74 | 75 |
ITaxonServiceConfigurator configurator = new TaxonServiceConfiguratorImpl(); |
76 |
configurator.setSearchString("Abies*"); |
|
77 |
configurator.setMatchMode(MatchMode.BEGINNING); |
|
78 |
configurator.setDoTaxa(true); |
|
75 | 79 |
configurator.setDoSynonyms(true); |
76 | 80 |
configurator.setDoNamesWithoutTaxa(true); |
81 |
configurator.setDoTaxaByCommonNames(true); |
|
77 | 82 |
Pager<IdentifiableEntity> pager = taxonService.findTaxaAndNames(configurator); |
78 | 83 |
List<IdentifiableEntity> list = pager.getRecords(); |
79 | 84 |
if (logger.isDebugEnabled()) { |
... | ... | |
93 | 98 |
assertEquals(list.get(5).getTitleCache(), "Abies alba Mill. sec. ???"); |
94 | 99 |
} |
95 | 100 |
|
96 |
@Ignore |
|
97 |
@Test |
|
98 |
@DataSet |
|
99 |
public final void testPrintDataSet() { |
|
100 |
|
|
101 |
printDataSet(System.out); |
|
102 |
} |
|
101 |
// @Test |
|
102 |
// @DataSet |
|
103 |
// public final void testPrintDataSet() { |
|
104 |
// |
|
105 |
// printDataSet(System.out); |
|
106 |
// } |
|
103 | 107 |
|
104 | 108 |
} |
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/TaxonServiceSearchTest.xml | ||
---|---|---|
1 | 1 |
<dataset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../dataset.xsd"> |
2 | 2 |
<AGENT DTYPE="Person" ID="1" CREATED="2009-03-12 11:24:58.0" UUID="a598ab3f-b33b-4b4b-b237-d616fcb6b5b1" TITLECACHE="Mill." PROTECTEDTITLECACHE="true"/> |
3 | 3 |
<AGENT DTYPE="Person" ID="2" CREATED="2009-03-12 11:24:58.0" UUID="e7206bc5-61ab-468e-a9f5-dec118b46b7f" TITLECACHE="Michx." PROTECTEDTITLECACHE="true"/> |
4 |
<DESCRIPTIONBASE DTYPE="TaxonDescription" ID="1" CREATED="2008-12-10 09:56:07.0" UUID="5f3265ed-68ad-4ec3-826f-0d29d25986b9" UPDATED="2008-12-10 09:56:07.253" TITLECACHE=" sec. ???" PROTECTEDTITLECACHE="true" TAXON_FK="6"/> |
|
5 |
<DESCRIPTIONBASE DTYPE="TaxonDescription" ID="2" CREATED="2008-12-10 09:56:07.0" UUID="d69d6d40-eb98-42f9-8d30-fbeb0a7db33b" UPDATED="2008-12-10 09:56:07.253" TITLECACHE=" sec. ???" PROTECTEDTITLECACHE="true" TAXON_FK="7"/> |
|
6 |
<DESCRIPTIONBASE DTYPE="TaxonDescription" ID="3" CREATED="2008-12-10 09:56:07.0" UUID="c6782124-7cf0-4454-880f-c4f16dc03105" UPDATED="2008-12-10 09:56:07.253" TITLECACHE=" sec. ???" PROTECTEDTITLECACHE="true" TAXON_FK="7"/> |
|
7 |
<DESCRIPTIONELEMENTBASE DTYPE="CommonTaxonName" ID="1" CREATED="2008-12-10 09:56:07.0" UUID="31a0160a-51b2-4565-85cf-2be58cb561d6" UPDATED="2008-12-10 09:56:07.253" NAME="Abies Ringelblume" LANGUAGE_ID="1" INDESCRIPTION_ID="1"/> |
|
8 |
<DESCRIPTIONELEMENTBASE DTYPE="CommonTaxonName" ID="2" CREATED="2008-12-10 09:56:07.0" UUID="50f6b799-3585-40a7-b69d-e7be77b2651a" UPDATED="2008-12-10 09:56:07.253" NAME="Abies Löwenherz" LANGUAGE_ID="1" INDESCRIPTION_ID="2"/> |
|
9 |
<DESCRIPTIONELEMENTBASE DTYPE="CommonTaxonName" ID="3" CREATED="2008-12-10 09:56:07.0" UUID="c1e21ed1-4925-4e85-845f-e4b7a8386a33" UPDATED="2008-12-10 09:56:07.253" NAME="Abies aaabbb" LANGUAGE_ID="1" INDESCRIPTION_ID="2"/> |
|
4 | 10 |
<TAXONBASE DTYPE="Taxon" ID="1" CREATED="2009-03-12 11:03:52.0" UUID="9bf290fd-5438-4391-8397-ba28d1243f77" TITLECACHE="Abies sec. ???" PROTECTEDTITLECACHE="false" DOUBTFUL="false" TAXONOMICCHILDRENCOUNT="0" TAXONNAME_FK="1"/> |
5 | 11 |
<TAXONBASE DTYPE="Taxon" ID="2" CREATED="2009-03-12 11:03:52.0" UUID="bf6a40e2-38d7-4390-8971-a048ea93c0b0" TITLECACHE="Abies alba sec. ???" PROTECTEDTITLECACHE="false" DOUBTFUL="false" TAXONOMICCHILDRENCOUNT="0" TAXONNAME_FK="5"/> |
6 | 12 |
<TAXONBASE DTYPE="Synonym" ID="3" CREATED="2009-03-12 11:03:52.0" UUID="2622fd24-b792-44de-815b-7241b795c4ed" TITLECACHE="Abies alba Michx. sec. ???" PROTECTEDTITLECACHE="false" DOUBTFUL="false" TAXONNAME_FK="4"/> |
7 | 13 |
<TAXONBASE DTYPE="Taxon" ID="4" CREATED="2009-03-12 11:03:53.0" UUID="4e53992e-8e34-45b7-afe5-972acb9bb0cc" TITLECACHE="Abies alba Mill. sec. ???" PROTECTEDTITLECACHE="false" DOUBTFUL="false" TAXONOMICCHILDRENCOUNT="0" TAXONNAME_FK="3"/> |
8 | 14 |
<TAXONBASE DTYPE="Taxon" ID="5" CREATED="2009-03-12 11:03:53.0" UUID="1942101c-c6c5-4eb1-907b-c901558a0133" TITLECACHE="Abies mill. sec. ???" PROTECTEDTITLECACHE="false" DOUBTFUL="false" TAXONOMICCHILDRENCOUNT="0" TAXONNAME_FK="6"/> |
15 |
<TAXONBASE DTYPE="Taxon" ID="6" CREATED="2008-12-10 09:56:07.0" UUID="8d77c380-c76a-11dd-ad8b-0800200c9a66" UPDATED="2008-12-10 09:56:07.253" TITLECACHE="Abies sec. ???" PROTECTEDTITLECACHE="true" DOUBTFUL="false" TAXONOMICCHILDRENCOUNT="1" TAXONNAME_FK="8" SEC_ID="1"/> |
|
16 |
<TAXONBASE DTYPE="Taxon" ID="7" CREATED="2008-12-10 09:56:07.0" UUID="822d98dc-9ef7-44b7-a870-94573a3bcb46" UPDATED="2008-12-10 09:56:07.253" TITLECACHE="Abies sec. ???" PROTECTEDTITLECACHE="true" DOUBTFUL="false" TAXONOMICCHILDRENCOUNT="0" TAXONNAME_FK="9" SEC_ID="1" TAXONOMICPARENTCACHE_ID="1"/> |
|
9 | 17 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="1" CREATED="2009-03-12 11:03:52.0" UUID="a8f13935-daed-45a9-88f2-bb23ce07f6a7" TITLECACHE="Abies" PROTECTEDTITLECACHE="false" HASPROBLEM="false" FULLTITLECACHE="Abies ???" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" GENUSORUNINOMIAL="Abies" NAMECACHE="Abies" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" ANAMORPHIC="false" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" RANK_ID="774"/> |
10 | 18 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="2" CREATED="2009-03-12 11:03:52.0" UUID="f5b6c282-af1f-461f-a8a3-521a9f8c9f9b" TITLECACHE="Abies Mill." PROTECTEDTITLECACHE="false" HASPROBLEM="false" FULLTITLECACHE="Abies Mill. ???" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" GENUSORUNINOMIAL="Abies" NAMECACHE="Abies" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="alba" ANAMORPHIC="false" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" RANK_ID="774"/> |
11 | 19 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="3" CREATED="2009-03-12 11:03:52.0" UUID="9eb9f192-3029-42b9-8d35-691de8b81ac1" TITLECACHE="Abies alba Mill." PROTECTEDTITLECACHE="true" HASPROBLEM="false" FULLTITLECACHE="Abies alba Mill. ???" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="Mill." GENUSORUNINOMIAL="Abies" NAMECACHE="Abies alba" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" ANAMORPHIC="false" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" RANK_ID="765" COMBINATIONAUTHORTEAM_ID="1"/> |
... | ... | |
13 | 21 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="5" CREATED="2009-03-12 11:03:52.0" UUID="d72ad0b8-e9a7-479b-9efe-5a723ab9380b" TITLECACHE="Abies alba" PROTECTEDTITLECACHE="false" HASPROBLEM="false" FULLTITLECACHE="Abies alba ???" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" GENUSORUNINOMIAL="Abies" NAMECACHE="Abies alba" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="alba" ANAMORPHIC="false" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" RANK_ID="765" COMBINATIONAUTHORTEAM_ID="2"/> |
14 | 22 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="6" CREATED="2009-03-12 11:03:52.0" UUID="f5b6c282-af1f-461f-a8a3-521a9f8c9f9b" TITLECACHE="Abies mill." PROTECTEDTITLECACHE="false" HASPROBLEM="false" FULLTITLECACHE="Abies mill. ???" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" GENUSORUNINOMIAL="Abies" NAMECACHE="Abies" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="alba" ANAMORPHIC="false" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" RANK_ID="765"/> |
15 | 23 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="7" CREATED="2009-03-12 11:03:52.0" UUID="f5b6c282-af1f-461f-a8a3-521a9f8c9f9b" TITLECACHE="Aab Mill." PROTECTEDTITLECACHE="false" HASPROBLEM="false" FULLTITLECACHE="Aab Mill. ???" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" GENUSORUNINOMIAL="Abies" NAMECACHE="Aab" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="false" SPECIFICEPITHET="alba" ANAMORPHIC="false" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" RANK_ID="765"/> |
24 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="8" CREATED="2008-12-10 09:56:07.0" UUID="a49a3963-c4ea-4047-8588-2f8f15352730" UPDATED="2008-12-10 09:56:07.238" TITLECACHE="" PROTECTEDTITLECACHE="false" HASPROBLEM="false" FULLTITLECACHE="" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="" GENUSORUNINOMIAL="Aus" NAMECACHE="Aus" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" ANAMORPHIC="false" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" RANK_ID="774"/> |
|
25 |
<TAXONNAMEBASE DTYPE="BotanicalName" ID="9" CREATED="2008-12-10 09:56:07.0" UUID="05a438d6-065f-49ef-84db-c7dc2c259975" UPDATED="2008-12-10 09:56:07.253" TITLECACHE=" " PROTECTEDTITLECACHE="false" HASPROBLEM="false" FULLTITLECACHE=" " PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="true" AUTHORSHIPCACHE="" GENUSORUNINOMIAL="Aus" NAMECACHE="Aus aus" PROTECTEDAUTHORSHIPCACHE="true" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="aus" ANAMORPHIC="false" BINOMHYBRID="false" HYBRIDFORMULA="false" MONOMHYBRID="false" TRINOMHYBRID="false" RANK_ID="765"/> |
|
16 | 26 |
</dataset> |
17 | 27 |
|
Also available in: Unified diff
Search for vernacular names (ticket #624)