/**
* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
+* European Distributed Institute of Taxonomy
* http://www.e-taxonomy.eu
-*
+*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.envers.Audited;
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.IndexedEmbedded;
import eu.etaxonomy.cdm.model.common.RelationshipBase;
import eu.etaxonomy.cdm.model.reference.Reference;
import eu.etaxonomy.cdm.validation.annotation.ChildTaxaMustNotSkipRanks;
/**
- * The class representing a relationship between two {@link Taxon ("accepted/correct") taxa}.
+ * The class representing a relationship between two {@link Taxon ("accepted/correct") taxa}.
* This includes a {@link TaxonRelationshipType taxon relationship type} (for instance "congruent to" or
* "misapplied name for").
* <P>
* <li> Relationship according to the TDWG ontology
* <li> TaxonRelationship according to the TCS
* </ul>
- *
+ *
* @author m.doering
* @version 1.0
* @created 08-Nov-2007 13:06:58
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "TaxonRelationship", propOrder = {
- "relatedFrom",
- "relatedTo",
- "type"
+ "relatedFrom",
+ "relatedTo",
+ "type"
})
@XmlRootElement(name = "TaxonRelationship")
@Entity
@Audited
+@Indexed(index = "eu.etaxonomy.cdm.model.taxon.TaxonRelationship")
@ChildTaxaMustBeLowerRankThanParent(groups = Level3.class)
@ChildTaxaMustNotSkipRanks(groups = Level3.class)
@ChildTaxaMustDeriveNameFromParent(groups = Level3.class)
public class TaxonRelationship extends RelationshipBase<Taxon, Taxon, TaxonRelationshipType> {
- private static final long serialVersionUID = 1378437971941534653L;
- static private final Logger logger = Logger.getLogger(TaxonRelationship.class);
+ private static final long serialVersionUID = 1378437971941534653L;
+ static private final Logger logger = Logger.getLogger(TaxonRelationship.class);
- @XmlElement(name = "RelatedFrom")
+ @XmlElement(name = "RelatedFrom")
@XmlIDREF
@XmlSchemaType(name = "IDREF")
@ManyToOne(fetch=FetchType.EAGER)
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.MERGE})
- private Taxon relatedFrom;
+ @IndexedEmbedded(depth=1)
+ private Taxon relatedFrom;
- @XmlElement(name = "RelatedTo")
+ @XmlElement(name = "RelatedTo")
@XmlIDREF
@XmlSchemaType(name = "IDREF")
@ManyToOne(fetch=FetchType.EAGER)
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.MERGE})
- private Taxon relatedTo;
-
+ @IndexedEmbedded(depth=1)
+ private Taxon relatedTo;
+
@XmlElement(name = "Type")
@XmlIDREF
@XmlSchemaType(name = "IDREF")
@ManyToOne(fetch=FetchType.EAGER)
- private TaxonRelationshipType type;
-
- /**
- * @deprecated for hibernate only, don't use
- */
- @Deprecated
- private TaxonRelationship(){
- }
-
- /**
- * Class constructor: creates a new taxon relationship instance (with the
- * given "accepted/correct" {@link Taxon taxa}, the given {@link SynonymRelationshipType synonym relationship type}
- * and with the {@link eu.etaxonomy.cdm.model.reference.Reference reference source} on which the relationship
- * assertion is based). Moreover the new taxon relationship will be added to
- * the respective sets of taxon relationships assigned to both taxa.
- *
- * @param from the taxon instance to be involved as a source in the new taxon relationship
- * @param to the taxon instance to be involved as a target in the new taxon relationship
- * @param type the taxon relationship type of the new taxon relationship
- * @param citation the reference source for the new taxon relationship
- * @param citationMicroReference the string with the details describing the exact localisation within the reference
- * @see eu.etaxonomy.cdm.model.common.RelationshipBase
- */
- protected TaxonRelationship(Taxon from, Taxon to, TaxonRelationshipType type, Reference citation, String citationMicroReference) {
- super(from, to, type, citation, citationMicroReference);
- }
-
- /**
- * Returns the {@link Taxon taxon} involved as a source in <i>this</i>
- * taxon relationship.
- *
- * @see #getToTaxon()
- * @see Taxon#getRelationsFromThisTaxon()
- * @see eu.etaxonomy.cdm.model.common.RelationshipBase#getRelatedFrom()
- * @see eu.etaxonomy.cdm.model.common.RelationshipBase#getType()
- */
- @Transient
- public Taxon getFromTaxon(){
- return getRelatedFrom();
- }
- /**
- * Sets the given {@link Taxon taxon} as a source in <i>this</i> taxon relationship.
- * Therefore <i>this</i> taxon relationship will be added to the corresponding
- * set of taxon relationships assigned to the given taxon. Furthermore if
- * the given taxon replaces an "old" one <i>this</i> taxon relationship will
- * be removed from the set of taxon relationships assigned to the "old"
- * source taxon.
- *
- * @param fromTaxon the taxon instance to be set as a source in <i>this</i> synonym relationship
- * @see #getFromTaxon()
- */
- public void setFromTaxon(Taxon fromTaxon){
- setRelatedFrom(fromTaxon);
- }
-
- /**
- * Returns the {@link Taxon taxon} involved as a target in <i>this</i>
- * taxon relationship.
- *
- * @see #getFromTaxon()
- * @see Taxon#getRelationsToThisTaxon()
- * @see eu.etaxonomy.cdm.model.common.RelationshipBase#getRelatedTo()
- * @see eu.etaxonomy.cdm.model.common.RelationshipBase#getType()
- */
- @Transient
- public Taxon getToTaxon(){
- return getRelatedTo();
- }
-
- /**
- * Sets the given {@link Taxon taxon} as a target in <i>this</i> taxon relationship.
- * Therefore <i>this</i> taxon relationship will be added to the corresponding
- * set of taxon relationships assigned to the given taxon. Furthermore if
- * the given taxon replaces an "old" one <i>this</i> taxon relationship will
- * be removed from the set of taxon relationships assigned to the "old"
- * target taxon.
- *
- * @param toTaxon the taxon instance to be set as a target in <i>this</i> synonym relationship
- * @see #getToTaxon()
- */
- public void setToTaxon(Taxon toTaxon){
- setRelatedTo(toTaxon);
- }
-
- // for extra-package access to relatedFrom use getFromTaxon instead
- protected Taxon getRelatedFrom() {
- return relatedFrom;
- }
-
- // for extra-package access to relatedFrom use getToTaxon instead
- protected Taxon getRelatedTo() {
- return relatedTo;
- }
-
- public TaxonRelationshipType getType() {
- return type;
- }
-
- protected void setRelatedFrom(Taxon relatedFrom) {
- if (relatedFrom == null){
- this.deletedObjects.add(this.relatedFrom);
- }
- this.relatedFrom = relatedFrom;
- }
-
- protected void setRelatedTo(Taxon relatedTo) {
- if (relatedTo == null){
- this.deletedObjects.add(this.relatedTo);
- }
- this.relatedTo = relatedTo;
- }
-
- public void setType(TaxonRelationshipType type) {
- this.type = type;
- }
-
- //*********************************** CLONE *****************************************/
-
- /**
- * Clones <i>this</i> TaxonRelationship. This is a shortcut that enables to create
- * a new instance that differs only slightly from <i>this</i> TaxonRelationship by
- * modifying only some of the attributes.
- *
- * @see eu.etaxonomy.cdm.model.common.RelationshipBase#clone()
- * @see java.lang.Object#clone()
- */
- @Override
- public Object clone() {
- TaxonRelationship result;
-
- try{
- result = (TaxonRelationship) super.clone();
- //no changes to relatedFrom, relatedTo, type
-
- return result;
- } catch (CloneNotSupportedException e) {
- logger.warn("Object does not implement cloneable");
- e.printStackTrace();
- return null;
- }
- }
+ @IndexedEmbedded(depth=1)
+ private TaxonRelationshipType type;
+
+ /**
+ * @deprecated for hibernate only, don't use
+ */
+ @Deprecated
+ private TaxonRelationship(){
+ }
+
+ /**
+ * Class constructor: creates a new taxon relationship instance (with the
+ * given "accepted/correct" {@link Taxon taxa}, the given {@link SynonymRelationshipType synonym relationship type}
+ * and with the {@link eu.etaxonomy.cdm.model.reference.Reference reference source} on which the relationship
+ * assertion is based). Moreover the new taxon relationship will be added to
+ * the respective sets of taxon relationships assigned to both taxa.
+ *
+ * @param from the taxon instance to be involved as a source in the new taxon relationship
+ * @param to the taxon instance to be involved as a target in the new taxon relationship
+ * @param type the taxon relationship type of the new taxon relationship
+ * @param citation the reference source for the new taxon relationship
+ * @param citationMicroReference the string with the details describing the exact localisation within the reference
+ * @see eu.etaxonomy.cdm.model.common.RelationshipBase
+ */
+ protected TaxonRelationship(Taxon from, Taxon to, TaxonRelationshipType type, Reference citation, String citationMicroReference) {
+ super(from, to, type, citation, citationMicroReference);
+ }
+
+ /**
+ * Returns the {@link Taxon taxon} involved as a source in <i>this</i>
+ * taxon relationship.
+ *
+ * @see #getToTaxon()
+ * @see Taxon#getRelationsFromThisTaxon()
+ * @see eu.etaxonomy.cdm.model.common.RelationshipBase#getRelatedFrom()
+ * @see eu.etaxonomy.cdm.model.common.RelationshipBase#getType()
+ */
+ @Transient
+ public Taxon getFromTaxon(){
+ return getRelatedFrom();
+ }
+ /**
+ * Sets the given {@link Taxon taxon} as a source in <i>this</i> taxon relationship.
+ * Therefore <i>this</i> taxon relationship will be added to the corresponding
+ * set of taxon relationships assigned to the given taxon. Furthermore if
+ * the given taxon replaces an "old" one <i>this</i> taxon relationship will
+ * be removed from the set of taxon relationships assigned to the "old"
+ * source taxon.
+ *
+ * @param fromTaxon the taxon instance to be set as a source in <i>this</i> synonym relationship
+ * @see #getFromTaxon()
+ */
+ public void setFromTaxon(Taxon fromTaxon){
+ setRelatedFrom(fromTaxon);
+ }
+
+ /**
+ * Returns the {@link Taxon taxon} involved as a target in <i>this</i>
+ * taxon relationship.
+ *
+ * @see #getFromTaxon()
+ * @see Taxon#getRelationsToThisTaxon()
+ * @see eu.etaxonomy.cdm.model.common.RelationshipBase#getRelatedTo()
+ * @see eu.etaxonomy.cdm.model.common.RelationshipBase#getType()
+ */
+ @Transient
+ public Taxon getToTaxon(){
+ return getRelatedTo();
+ }
+
+ /**
+ * Sets the given {@link Taxon taxon} as a target in <i>this</i> taxon relationship.
+ * Therefore <i>this</i> taxon relationship will be added to the corresponding
+ * set of taxon relationships assigned to the given taxon. Furthermore if
+ * the given taxon replaces an "old" one <i>this</i> taxon relationship will
+ * be removed from the set of taxon relationships assigned to the "old"
+ * target taxon.
+ *
+ * @param toTaxon the taxon instance to be set as a target in <i>this</i> synonym relationship
+ * @see #getToTaxon()
+ */
+ public void setToTaxon(Taxon toTaxon){
+ setRelatedTo(toTaxon);
+ }
+
+ // for extra-package access to relatedFrom use getFromTaxon instead
+ @Override
+ protected Taxon getRelatedFrom() {
+ return relatedFrom;
+ }
+
+ // for extra-package access to relatedFrom use getToTaxon instead
+ @Override
+ protected Taxon getRelatedTo() {
+ return relatedTo;
+ }
+
+ @Override
+ public TaxonRelationshipType getType() {
+ return type;
+ }
+
+ @Override
+ protected void setRelatedFrom(Taxon relatedFrom) {
+ if (relatedFrom == null){
+ this.deletedObjects.add(this.relatedFrom);
+ }
+ this.relatedFrom = relatedFrom;
+ }
+
+ @Override
+ protected void setRelatedTo(Taxon relatedTo) {
+ if (relatedTo == null){
+ this.deletedObjects.add(this.relatedTo);
+ }
+ this.relatedTo = relatedTo;
+ }
+
+ @Override
+ public void setType(TaxonRelationshipType type) {
+ this.type = type;
+ }
+
+ //*********************************** CLONE *****************************************/
+
+ /**
+ * Clones <i>this</i> TaxonRelationship. This is a shortcut that enables to create
+ * a new instance that differs only slightly from <i>this</i> TaxonRelationship by
+ * modifying only some of the attributes.
+ *
+ * @see eu.etaxonomy.cdm.model.common.RelationshipBase#clone()
+ * @see java.lang.Object#clone()
+ */
+ @Override
+ public Object clone() {
+ TaxonRelationship result;
+
+ try{
+ result = (TaxonRelationship) super.clone();
+ //no changes to relatedFrom, relatedTo, type
+
+ return result;
+ } catch (CloneNotSupportedException e) {
+ logger.warn("Object does not implement cloneable");
+ e.printStackTrace();
+ return null;
+ }
+ }
}
\ No newline at end of file
* @throws IOException
* @throws ParseException
* @throws LuceneMultiSearchException
+ * @deprecated this search should fully be covered by the new method
+ * {@link #findTaxaAndNamesByFullText(EnumSet, String, Classification, Set, List, boolean, Integer, Integer, List, List)}
+ * , maybe we should rename this latter method to give it a more meaningful name
*/
+ @Deprecated
public Pager<SearchResult<TaxonBase>> findByEverythingFullText(String queryString,
Classification classification, List<Language> languages, boolean highlightFragments,
Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) throws CorruptIndexException, IOException, ParseException, LuceneMultiSearchException;
\r
import org.apache.log4j.Logger;\r
import org.apache.lucene.index.CorruptIndexException;\r
+import org.apache.lucene.index.IndexReader;\r
import org.apache.lucene.queryParser.ParseException;\r
import org.apache.lucene.search.BooleanClause.Occur;\r
import org.apache.lucene.search.BooleanQuery;\r
+import org.apache.lucene.search.IndexSearcher;\r
import org.apache.lucene.search.Query;\r
import org.apache.lucene.search.SortField;\r
+import org.apache.lucene.search.join.JoinUtil;\r
import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.stereotype.Service;\r
import org.springframework.transaction.annotation.Transactional;\r
@Autowired\r
private AbstractBeanInitializer beanInitializer;\r
\r
+ private static IndexSearcher taxonRelationshipSearcher;\r
+\r
/**\r
* Constructor\r
*/\r
List<SearchResult<TaxonBase>> searchResults = searchResultBuilder.createResultSet(\r
topDocsResultSet, luceneSearch.getHighlightFields(), dao, idFieldMap, propertyPaths);\r
\r
- int totalHits = topDocsResultSet != null ? topDocsResultSet.topGroups.totalGroupedHitCount : 0;\r
+ int totalHits = topDocsResultSet != null ? topDocsResultSet.topGroups.totalGroupCount : 0;\r
return new DefaultPagerImpl<SearchResult<TaxonBase>>(pageNumber, totalHits, pageSize, searchResults);\r
}\r
\r
BooleanQuery finalQuery = new BooleanQuery();\r
BooleanQuery textQuery = new BooleanQuery();\r
\r
- LuceneSearch luceneSearch = new LuceneSearch(getSession(), TaxonBase.class);\r
+ LuceneSearch luceneSearch = new LuceneSearch(getSession(), GroupByTaxonClassBridge.GROUPBY_TAXON_FIELD, TaxonBase.class);\r
QueryFactory queryFactory = new QueryFactory(luceneSearch);\r
\r
SortField[] sortFields = new SortField[]{SortField.FIELD_SCORE, new SortField("titleCache__sort", SortField.STRING, false)};\r
return luceneSearch;\r
}\r
\r
+ /**\r
+ * Uses org.apache.lucene.search.join.JoinUtil for query time joining, alternatively\r
+ * the BlockJoinQuery could be used. The latter might be more memory save but has the\r
+ * drawback of requiring to do the join an indexing time.\r
+ * see http://dev.e-taxonomy.eu/trac/wiki/LuceneNotes#JoinsinLucene for more information on this.\r
+ *\r
+ * Joins TaxonRelationShip with Taxon depending on the direction of the given edge:\r
+ * <ul>\r
+ * <li>direct, everted: {@link Direction.relatedTo}: TaxonRelationShip.relatedTo.id --> Taxon.id </li>\r
+ * <li>inverse: {@link Direction.relatedFrom}: TaxonRelationShip.relatedFrom.id --> Taxon.id </li>\r
+ * <ul>\r
+ *\r
+ * @param queryString\r
+ * @param classification\r
+ * @param languages\r
+ * @param highlightFragments\r
+ * @return\r
+ */\r
+ protected LuceneSearch prepareFindByTaxonRelationFullTextSearch(TaxonRelationshipEdge edge, String queryString, Classification classification, List<Language> languages,\r
+ boolean highlightFragments) {\r
+\r
+ String idField;\r
+ String queryTermField;\r
+ String toField = "id"; // TaxonBase.uuid\r
+\r
+ if(edge.isBidirectional()){\r
+ throw new RuntimeException("Bidirectional joining not supported!");\r
+ }\r
+ if(edge.isEvers()){\r
+ idField = "relatedFrom.id";\r
+ queryTermField = "relatedFrom.titleCache";\r
+ } else if(edge.isInvers()) {\r
+ idField = "relatedTo.id";\r
+ queryTermField = "relatedTo.titleCache";\r
+ } else {\r
+ throw new RuntimeException("Invalid direction: " + edge.getDirections());\r
+ }\r
+\r
+ BooleanQuery finalQuery = new BooleanQuery();\r
+ BooleanQuery joinFromQuery = new BooleanQuery();\r
+ Query joinQuery = null;\r
+\r
+ LuceneSearch luceneSearch = new LuceneSearch(getSession(), TaxonBase.class);\r
+ QueryFactory queryFactory = new QueryFactory(luceneSearch);\r
+\r
+ joinFromQuery.add(queryFactory.newTermQuery(queryTermField, queryString), Occur.MUST);\r
+ joinFromQuery.add(queryFactory.newEntityIdQuery("type.id", edge.getTaxonRelationshipType()), Occur.MUST);\r
+ try {\r
+ // TODO move into QueryFactory if possible\r
+ if(taxonRelationshipSearcher == null){\r
+ IndexReader taxonRelationshipReader = luceneSearch.getIndexReaderFor(TaxonRelationship.class);\r
+ taxonRelationshipSearcher = new IndexSearcher(taxonRelationshipReader);\r
+ taxonRelationshipSearcher.setDefaultFieldSortScoring(true, true);\r
+ }\r
+ joinQuery = JoinUtil.createJoinQuery(idField, toField, joinFromQuery, taxonRelationshipSearcher);\r
+ // end of possible move\r
+ } catch (IOException e) {\r
+ logger.error(e);\r
+ }\r
+\r
+ SortField[] sortFields = new SortField[]{SortField.FIELD_SCORE, new SortField("titleCache__sort", SortField.STRING, false)};\r
+ luceneSearch.setSortFields(sortFields);\r
+\r
+ finalQuery.add(joinQuery, Occur.MUST);\r
+\r
+ if(classification != null){\r
+ finalQuery.add(queryFactory.newEntityIdQuery("taxonNodes.classification.id", classification), Occur.MUST);\r
+ }\r
+ luceneSearch.setQuery(finalQuery);\r
+\r
+ if(highlightFragments){\r
+ luceneSearch.setHighlightFields(queryFactory.getTextFieldNamesAsArray());\r
+ }\r
+ return luceneSearch;\r
+ }\r
+\r
\r
\r
\r
idFieldMap.put(CdmBaseType.DESCRIPTION_ELEMENT, "inDescription.taxon.id");\r
}\r
if(searchModes.contains(TaxaAndNamesSearchMode.doMisappliedNames)) {\r
- //TODO\r
+ // NOTE:\r
+ // prepareFindByTaxonRelationFullTextSearch() is making use of JoinUtil.createJoinQuery()\r
+ // which allows doing query time joins\r
+ luceneSearches.add(prepareFindByTaxonRelationFullTextSearch(\r
+ new TaxonRelationshipEdge(TaxonRelationshipType.MISAPPLIED_NAME_FOR(), Direction.relatedTo),\r
+ queryString, classification, languages, highlightFragments));\r
+ idFieldMap.put(CdmBaseType.TAXON, "id");\r
}\r
+\r
// TODO implement area filter\r
\r
LuceneMultiSearch multiSearch = new LuceneMultiSearch(luceneSearches.toArray(new LuceneSearch[luceneSearches.size()]));\r
List<SearchResult<TaxonBase>> searchResults = searchResultBuilder.createResultSet(\r
topDocsResultSet, multiSearch.getHighlightFields(), dao, idFieldMap, propertyPaths);\r
\r
- int totalHits = topDocsResultSet != null ? topDocsResultSet.topGroups.totalGroupedHitCount : 0;\r
+ int totalHits = topDocsResultSet != null ? topDocsResultSet.topGroups.totalGroupCount : 0;\r
return new DefaultPagerImpl<SearchResult<TaxonBase>>(pageNumber, totalHits, pageSize, searchResults);\r
}\r
\r
List<SearchResult<TaxonBase>> searchResults = searchResultBuilder.createResultSet(\r
topDocsResultSet, multiSearch.getHighlightFields(), dao, idFieldMap, propertyPaths);\r
\r
- int totalHits = topDocsResultSet != null ? topDocsResultSet.topGroups.totalGroupedHitCount : 0;\r
+ int totalHits = topDocsResultSet != null ? topDocsResultSet.topGroups.totalGroupCount : 0;\r
return new DefaultPagerImpl<SearchResult<TaxonBase>>(pageNumber, totalHits, pageSize, searchResults);\r
\r
}\r
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
import eu.etaxonomy.cdm.model.taxon.Classification;
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
/**
* @author Andreas Kohlbecker
logger.info("purging " + type.getName());
fullTextSession.purgeAll(type);
+ // TODO
+ // toggle on off flag doSpellIndex introduced for debugging, see ticket:
+ // #3721 (CdmMassIndexer.purge throwing errors due to LockObtainFailedException)
+ // remove once this is fixed
+ boolean doSpellIndex = true;
+
+ if(doSpellIndex){
+ SearchFactoryImplementor searchFactory = (SearchFactoryImplementor)fullTextSession.getSearchFactory();
+ IndexManager indexManager = searchFactory.getAllIndexesManager().getIndexManager(type.getName());
+ if(indexManager == null){
+ logger.info("No IndexManager found for " + type.getName() + ", thus nothing to purge");
+ return;
+ }
- SearchFactoryImplementor searchFactory = (SearchFactoryImplementor)fullTextSession.getSearchFactory();
- IndexManager indexManager = searchFactory.getAllIndexesManager().getIndexManager(type.getName());
- Directory directory = ((DirectoryBasedIndexManager) indexManager).getDirectoryProvider().getDirectory();
- SpellChecker spellChecker = null;
- try {
- spellChecker = new SpellChecker(directory);
- spellChecker.clearIndex();
- } catch (IOException e) {
- logger.error("IOException when creating dictionary", e);
- //TODO better means to notify that the process has been stopped, using the STOPPED_WORK_INDICATOR is only a hack
- monitor.worked(RestServiceProgressMonitor.STOPPED_WORK_INDICATOR);
- monitor.done();
- }
-
- if (spellChecker != null) {
+ Directory directory = ((DirectoryBasedIndexManager) indexManager).getDirectoryProvider().getDirectory();
+ SpellChecker spellChecker = null;
try {
- logger.info("closing spellchecker ");
- spellChecker.close();
+ spellChecker = new SpellChecker(directory);
+ spellChecker.clearIndex();
} catch (IOException e) {
- logger.error("IOException when closing spellchecker", e);
+ logger.error("IOException when creating dictionary", e);
+ //TODO better means to notify that the process has been stopped, using the STOPPED_WORK_INDICATOR is only a hack
+ monitor.worked(RestServiceProgressMonitor.STOPPED_WORK_INDICATOR);
+ monitor.done();
+ }
+
+ if (spellChecker != null) {
+ try {
+ logger.info("closing spellchecker ");
+ spellChecker.close();
+ } catch (IOException e) {
+ logger.error("IOException when closing spellchecker", e);
+ }
}
}
}
indexedClasses.add(Classification.class);
indexedClasses.add(TaxonNameBase.class);
indexedClasses.add(SpecimenOrObservationBase.class);
+ indexedClasses.add(TaxonRelationship.class);
}
return indexedClasses;
}
import org.apache.lucene.search.BooleanClause.Occur;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.SortField;
import org.hibernate.search.Search;
import org.hibernate.search.SearchFactory;
import org.hibernate.search.indexes.IndexReaderAccessor;
* @throws Exception
*/
public LuceneMultiSearch(LuceneSearch... luceneSearch) throws LuceneMultiSearchException {
- session = luceneSearch[0].session;
+ session = luceneSearch[0].session;
+ groupByField = null; //reset
BooleanQuery query = new BooleanQuery();
Set<String> highlightFields = new HashSet<String>();
+ List<SortField> multiSearcherSortFields = new ArrayList<SortField>();
for(LuceneSearch search : luceneSearch){
+
this.directorySelectClasses.add(search.getDirectorySelectClass());
query.add(search.getQuery(), Occur.SHOULD);
+
+ // add the highlightFields from each of the sub searches
highlightFields.addAll(Arrays.asList(search.getHighlightFields()));
- if(search.getClazz() != null){
- if(getClazz() != null){
- throw new LuceneMultiSearchException("LuceneMultiSearch can only handle once class restriction, but multiple given: " + getClazz() + ", " + search.getClazz());
+
+ // set the class for each of the sub searches
+ if(search.clazz != null){
+ if(clazz != null && !clazz.equals(search.clazz)){
+ throw new LuceneMultiSearchException(
+ "LuceneMultiSearch can only handle once class restriction, but multiple given: " +
+ getClazz() + ", " + search.getClazz());
}
setClazz(search.getClazz());
}
+
+ // set the groupByField for each of the sub searches
+ if(search.groupByField != null){
+ if(groupByField != null && !groupByField.equals(search.groupByField)){
+ throw new LuceneMultiSearchException(
+ "LuceneMultiSearch can only handle once groupByField, but multiple given: " +
+ groupByField + ", " + search.groupByField);
+ }
+ groupByField = search.groupByField;
+ }
+
+
+ // add the sort field from each of the sub searches
+ for(SortField addField : search.getSortFields()){
+ if(! multiSearcherSortFields.contains(addField)) {
+ multiSearcherSortFields.add(addField);
+ }
+ }
}
+ this.sortFields = multiSearcherSortFields.toArray(new SortField[multiSearcherSortFields.size()]);
this.highlightFields = highlightFields.toArray(new String[highlightFields.size()]);
this.query = query;
}
*/
public class LuceneSearch {
- private String groupByField = "id";
+ protected String groupByField = "id";
public final static String ID_FIELD = "id";
protected IndexSearcher searcher;
- private SortField[] sortFields;
+ protected SortField[] sortFields;
private Class<? extends CdmBase> directorySelectClass;
/**
* classFilter
*/
- private Class<? extends CdmBase> clazz;
+ protected Class<? extends CdmBase> clazz;
public Class<? extends CdmBase> getClazz() {
return reader;
}
+ /**
+ * @return
+ */
+ public IndexReader getIndexReaderFor(Class<? extends CdmBase> clazz) {
+ SearchFactory searchFactory = Search.getFullTextSession(session).getSearchFactory();
+ IndexReader reader = searchFactory.getIndexReaderAccessor().open(pushAbstractBaseTypeDown(clazz));
+ return reader;
+ }
+
/**
* @return
*/
}
// perform the search (needs two passes for grouping)
+ if(logger.isDebugEnabled()){
+ logger.debug("Grouping: sortFields=" + sortFields + ", groupByField=" + groupByField +
+ ", groupSort=" + groupSort + ", withinGroupSort=" + withinGroupSort + ", limit=" + limit + ", maxDocsPerGroup="+ maxDocsPerGroup);
+ }
// - first pass
TermFirstPassGroupingCollector firstPassCollector = new TermFirstPassGroupingCollector(groupByField, withinGroupSort, limit);
getSearcher().search(fullQuery, firstPassCollector);
boolean getMaxScores = true;
boolean fillFields = true;
TermAllGroupsCollector allGroupsCollector = new TermAllGroupsCollector(groupByField);
- TermSecondPassGroupingCollector secondPassCollector = new TermSecondPassGroupingCollector(groupByField, topGroups, groupSort, withinGroupSort, maxDocsPerGroup , getScores, getMaxScores, fillFields);
+ TermSecondPassGroupingCollector secondPassCollector = new TermSecondPassGroupingCollector(
+ groupByField, topGroups, groupSort, withinGroupSort, maxDocsPerGroup , getScores, getMaxScores, fillFields
+ );
getSearcher().search(fullQuery, MultiCollector.wrap(secondPassCollector, allGroupsCollector));
TopGroups<String> groupsResult = secondPassCollector.getTopGroups(0); // no offset here since we need the first item for the max score
// get max score from very first result
float maxScore = groupsResult.groups[0].maxScore;
+ if(logger.isDebugEnabled()){
+ logger.debug("TopGroups: maxScore=" + maxScore + ", offset=" + offset +
+ ", totalGroupCount=" + allGroupsCollector.getGroupCount() + ", totalGroupedHitCount=" + groupsResult.totalGroupedHitCount);
+ }
TopGroupsWithMaxScore topGroupsWithMaxScore = new TopGroupsWithMaxScore(groupsResult, offset, allGroupsCollector.getGroupCount(), maxScore);
return topGroupsWithMaxScore;
* @return
*/
public Query newEntityIdQuery(String idFieldName, CdmBase entitiy){
- return newTermQuery("inDescription.taxon.taxonNodes.classification.id", String.valueOf(entitiy.getId()), false);
+ return newTermQuery(idFieldName, String.valueOf(entitiy.getId()), false);
}
/**
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
import eu.etaxonomy.cdm.model.description.Distribution;\r
import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.PresenceTerm;\r
import eu.etaxonomy.cdm.model.description.State;\r
import eu.etaxonomy.cdm.model.description.StateData;\r
import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
import eu.etaxonomy.cdm.model.description.TextData;\r
+import eu.etaxonomy.cdm.model.location.NamedArea;\r
+import eu.etaxonomy.cdm.model.location.WaterbodyOrCountry;\r
import eu.etaxonomy.cdm.model.name.BotanicalName;\r
import eu.etaxonomy.cdm.model.name.NonViralName;\r
import eu.etaxonomy.cdm.model.name.Rank;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
import eu.etaxonomy.cdm.persistence.query.MatchMode;\r
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;\r
import eu.etaxonomy.cdm.test.unitils.CleanSweepInsertLoadStrategy;\r
typesToIndex = new HashSet<Class<? extends CdmBase>>();\r
typesToIndex.add(DescriptionElementBase.class);\r
typesToIndex.add(TaxonBase.class);\r
+ typesToIndex.add(TaxonRelationship.class);\r
+\r
+\r
\r
}\r
+\r
@Test\r
public void testDbUnitUsageTest() throws Exception {\r
assertNotNull("taxonService should exist", taxonService);\r
}\r
\r
logger.debug("number of taxa: " + list.size());\r
- assertEquals(7, list.size());\r
+ assertEquals(8, list.size());\r
\r
// pass 2\r
// configurator.setDoTaxaByCommonNames(false);\r
Pager<SearchResult<TaxonBase>> pager;\r
\r
pager = taxonService.findByFullText(null, "Abies", null, null, true, null, null, null, null); // --> 7\r
- Assert.assertEquals("Expecting 7 entities", Integer.valueOf(7), pager.getCount());\r
+ Assert.assertEquals("Expecting 8 entities", Integer.valueOf(8), pager.getCount());\r
\r
indexer.purge(null);\r
commitAndStartNewTransaction(null);\r
\r
Pager<SearchResult<TaxonBase>> pager;\r
// by Area\r
- pager = taxonService.findByDescriptionElementFullText(null, "America", null, null, null, false, null, null, null, null);\r
- Assert.assertEquals("Expecting one entity when searching for arae 'America'", Integer.valueOf(1), pager.getCount());\r
+ pager = taxonService.findByDescriptionElementFullText(null, "Canada", null, null, null, false, null, null, null, null);\r
+ Assert.assertEquals("Expecting one entity when searching for arae 'Canada'", Integer.valueOf(1), pager.getCount());\r
// by Status\r
pager = taxonService.findByDescriptionElementFullText(null, "present", null, null, null, false, null, null, null, null);\r
Assert.assertEquals("Expecting one entity when searching for status 'present'", Integer.valueOf(1), pager.getCount());\r
* @throws CorruptIndexException\r
* @throws IOException\r
* @throws ParseException\r
+ * @throws LuceneMultiSearchException\r
*/\r
@Test\r
@DataSet\r
- public final void testFullText_Grouping() throws CorruptIndexException, IOException, ParseException {\r
+ public final void testFullText_Grouping() throws CorruptIndexException, IOException, ParseException, LuceneMultiSearchException {\r
\r
TaxonDescription description = (TaxonDescription) descriptionService.find(UUID.fromString(D_ABIES_ALBA_UUID));\r
Set<String> uniqueRandomStrs = new HashSet<String>(1024);\r
int pageSize = 10;\r
\r
Pager<SearchResult<TaxonBase>> pager;\r
-\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
- Assert.assertEquals("All matches should be grouped in one page", 1, pager.getPagesAvailable().intValue());\r
+ logPagerRecords(pager, Level.DEBUG);\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
Map<String, String[]> highlightMap = pager.getRecords().get(0).getFieldHighlightMap();\r
// maxDocsPerGroup is defined in LuceneSearch and defaults to 10\r
int maxDocsPerGroup = 10;\r
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
+ logPagerRecords(pager, Level.DEBUG);\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
+ highlightMap = pager.getRecords().get(0).getFieldHighlightMap();\r
+ // maxDocsPerGroup is defined in LuceneSearch and defaults to 10\r
+ maxDocsPerGroup = 10;\r
+ Assert.assertEquals("expecting 10 highlighted fragments of field 'name'", maxDocsPerGroup, highlightMap.get("name").length);\r
+\r
}\r
\r
@SuppressWarnings("rawtypes")\r
\r
Pager<SearchResult<TaxonBase>> pager;\r
pager = taxonService.findByDescriptionElementFullText(TextData.class, "Abies", null, null, null, false, null, null, null, null);\r
+ logPagerRecords(pager, Level.DEBUG);\r
Assert.assertEquals("Expecting one entity when searching for any TextData", Integer.valueOf(1), pager.getCount());\r
- Assert.assertEquals("Abies balsamea sec. ", pager.getRecords().get(0).getEntity().getTitleCache());\r
- Assert.assertTrue("Expecting only one doc", pager.getRecords().get(0).getDocs().size() == 1);\r
- Assert.assertEquals("Abies balsamea sec. ", pager.getRecords().get(0).getDocs().iterator().next().get("inDescription.taxon.titleCache"));\r
+ Assert.assertEquals("Abies balsamea sec. Kohlbecker, A., Testcase standart views, 2013", pager.getRecords().get(0).getEntity().getTitleCache());\r
+ Assert.assertTrue("Expecting two docs, one for RUSSIAN and one for GERMAN", pager.getRecords().get(0).getDocs().size() == 2);\r
+ 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
\r
pager = taxonService.findByDescriptionElementFullText(TextData.class, "Бальзам", null, null, Arrays.asList(new Language[]{}), false, null, null, null, null);\r
Assert.assertEquals("Expecting one entity", Integer.valueOf(1), pager.getCount());\r
- Assert.assertEquals("Abies balsamea sec. ", pager.getRecords().get(0).getEntity().getTitleCache());\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
Assert.assertEquals("Expecting one entity", Integer.valueOf(1), pager.getCount());\r
- Assert.assertEquals("Abies balsamea sec. ", pager.getRecords().get(0).getEntity().getTitleCache());\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
Assert.assertEquals("Expecting no entity", Integer.valueOf(0), pager.getCount());\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
Assert.assertEquals("Expecting one entity", Integer.valueOf(1), pager.getCount());\r
- Assert.assertEquals("Abies balsamea sec. ", pager.getRecords().get(0).getEntity().getTitleCache());\r
+ Assert.assertEquals("Abies balsamea sec. Kohlbecker, A., Testcase standart views, 2013", pager.getRecords().get(0).getEntity().getTitleCache());\r
}\r
\r
@SuppressWarnings("rawtypes")\r
Pager<SearchResult<TaxonBase>> pager;\r
pager = taxonService.findByDescriptionElementFullText(CategoricalData.class, "green", null, null, null, false, null, null, null, null);\r
Assert.assertEquals("Expecting one entity", Integer.valueOf(1), pager.getCount());\r
- Assert.assertEquals("Abies balsamea sec. ", pager.getRecords().get(0).getEntity().getTitleCache());\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
- Assert.assertEquals("Abies balsamea sec. ", pager.getRecords().get(0).getDocs().iterator().next().get("inDescription.taxon.titleCache"));\r
+ 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
//TODO modify the StateData\r
\r
refreshLuceneIndex();\r
\r
+ Classification europeanAbiesClassification = classificationService.find(UUID.fromString(CLASSIFICATION_UUID));\r
+\r
Pager<SearchResult<TaxonBase>> pager;\r
\r
pager = taxonService.findByFullText(null, "Abies", null, null, true, null, null, null, null); // --> 7\r
- logPagerRecords(pager, null);\r
- Assert.assertEquals("Expecting 7 entities", Integer.valueOf(7), pager.getCount());\r
+ logPagerRecords(pager, Level.DEBUG);\r
+ Assert.assertEquals("Expecting 8 entities", Integer.valueOf(8), pager.getCount());\r
\r
pager = taxonService.findByFullText(Taxon.class, "Abies", null, null, true, null, null, null, null); // --> 6\r
- Assert.assertEquals("Expecting 6 entities", Integer.valueOf(6), pager.getCount());\r
+ Assert.assertEquals("Expecting 7 entities", Integer.valueOf(7), pager.getCount());\r
\r
pager = taxonService.findByFullText(Synonym.class, "Abies", null, null, true, null, null, null, null); // --> 1\r
Assert.assertEquals("Expecting 1 entity", Integer.valueOf(1), pager.getCount());\r
\r
pager = taxonService.findByFullText(TaxonBase.class, "sec", null, null, true, null, null, null, null); // --> 7\r
- Assert.assertEquals("Expecting 7 entities", Integer.valueOf(7), pager.getCount());\r
+ Assert.assertEquals("Expecting 8 entities", Integer.valueOf(8), pager.getCount());\r
\r
pager = taxonService.findByFullText(null, "genus", null, null, true, null, null, null, null); // --> 1\r
Assert.assertEquals("Expecting 1 entity", Integer.valueOf(1), pager.getCount());\r
// synonym in classification ???\r
}\r
\r
- @Test\r
+// @Test\r
@DataSet\r
public final void testFindTaxaAndNamesByFullText() throws CorruptIndexException, IOException, ParseException, LuceneMultiSearchException {\r
\r
pager = taxonService.findTaxaAndNamesByFullText(\r
EnumSet.of(TaxaAndNamesSearchMode.doTaxa, TaxaAndNamesSearchMode.doSynonyms),\r
"Abies", null, null, null, true, null, null, null, null);\r
-// logPagerRecords(pager, null);\r
- Assert.assertEquals("Expecting 7 entities", Integer.valueOf(7), pager.getCount());\r
+// logPagerRecords(pager, Level.DEBUG);\r
+ Assert.assertEquals("Expecting 8 entities", Integer.valueOf(8), pager.getCount());\r
\r
pager = taxonService.findTaxaAndNamesByFullText(\r
EnumSet.of(TaxaAndNamesSearchMode.doSynonyms),\r
"balsam", null, null, null, true, null, null, null, null);\r
Assert.assertEquals("Expecting 1 entity", Integer.valueOf(1), pager.getCount());\r
\r
+ pager = taxonService.findTaxaAndNamesByFullText(\r
+ EnumSet.of(TaxaAndNamesSearchMode.doMisappliedNames),\r
+ "kawakamii", null, null, null, true, null, null, null, null);\r
+ logPagerRecords(pager, Level.DEBUG);\r
+ Assert.assertEquals("Expecting 1 entity", Integer.valueOf(1), pager.getCount());\r
+\r
}\r
\r
/**\r
\r
// via Taxon\r
pager = taxonService.findByEverythingFullText("Abies", null, null, true, null, null, null, null);\r
+ logPagerRecords(pager, Level.DEBUG);\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
\r
- // via DescriptionElement\r
// via DescriptionElement\r
pager = taxonService.findByEverythingFullText("present", null, null, true, null, null, null, null);\r
- Assert.assertEquals("Expecting one entity when searching for arae 'present'", Integer.valueOf(1), pager.getCount());\r
+ Assert.assertEquals("Expecting one entity when searching for area 'present'", Integer.valueOf(1), pager.getCount());\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 ", ABIES_BALSAMEA_UUID, pager.getRecords().get(0).getEntity().getUuid().toString());\r
pager = taxonService.findByEverythingFullText("genus", null, null, false, null, null, null, null); // --> 1\r
Assert.assertEquals("Expecting 1 entity", Integer.valueOf(1), pager.getCount());\r
\r
+ //FIXME FAILS: abies balamea is returned twice, see also testFullText_Grouping()\r
pager = taxonService.findByEverythingFullText("Balsam-Tanne", null, Arrays.asList(new Language[]{Language.GERMAN()}), false, null, null, null, null);\r
- Assert.assertEquals("expecting to find the GERMAN 'Balsam-Tanne'", Integer.valueOf(1), pager.getCount());\r
+ logPagerRecords(pager, Level.DEBUG);\r
+ Assert.assertEquals("expecting to find the Abies balsamea via the GERMAN DescriptionElements", Integer.valueOf(1), pager.getCount());\r
\r
pager = taxonService.findByEverythingFullText("Abies", null, null, true, null, null, null, null);\r
Assert.assertEquals("Expecting 8 entities", Integer.valueOf(8), pager.getCount());\r
@DataSet\r
public final void testFindByCommonNameLuceneBenchmark() throws CorruptIndexException, IOException, ParseException {\r
\r
-// printDataSet(System.err, new String[] { "TaxonBase" });\r
-\r
createRandomTaxonWithCommonName(NUM_OF_NEW_RADOM_ENTITIES);\r
\r
refreshLuceneIndex();\r
logger.info("Benchmark result - [find taxon by CommonName via lucene] : " + duration + "ms (" + BENCHMARK_ROUNDS + " benchmark rounds )");\r
}\r
\r
+ /**\r
+ * uncomment @Test annotation to create the dataset for this test\r
+ */\r
// @Test\r
@DataSet(loadStrategy=CleanSweepInsertLoadStrategy.class, value="BlankDataSet.xml")\r
public final void createDataSet() throws FileNotFoundException {\r
\r
- Classification classification = Classification.NewInstance("European Abies");\r
- classification.setUuid(UUID.fromString(CLASSIFICATION_UUID));\r
+ Classification europeanAbiesClassification = Classification.NewInstance("European Abies");\r
+ europeanAbiesClassification.setUuid(UUID.fromString(CLASSIFICATION_UUID));\r
+ classificationService.save(europeanAbiesClassification);\r
+\r
Classification alternativeClassification = Classification.NewInstance("Abies alternative");\r
- classification.setUuid(UUID.fromString(CLASSIFICATION_ALT_UUID));\r
- classificationService.save(classification);\r
+ alternativeClassification.setUuid(UUID.fromString(CLASSIFICATION_ALT_UUID));\r
classificationService.save(alternativeClassification);\r
\r
Reference<?> sec = ReferenceFactory.newBook();\r
+ sec.setTitleCache("Kohlbecker, A., Testcase standart views, 2013", true);\r
+ Reference<?> sec_sensu = ReferenceFactory.newBook();\r
+ sec_sensu.setTitleCache("Komarov, V. L., Flora SSSR 29", true);\r
referenceService.save(sec);\r
+ referenceService.save(sec_sensu);\r
\r
BotanicalName n_abies = BotanicalName.NewInstance(Rank.GENUS());\r
n_abies.setNameCache("Abies", true);\r
t_abies_kawakamii.getTitleCache();\r
taxonService.save(t_abies_kawakamii);\r
\r
+ // missapplied name for t_abies_balsamea\r
+ Taxon t_abies_kawakamii_sensu_komarov = Taxon.NewInstance(n_abies_kawakamii, sec_sensu);\r
+ taxonService.save(t_abies_kawakamii_sensu_komarov);\r
+ t_abies_kawakamii_sensu_komarov.addTaxonRelation(t_abies_balsamea, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), null, null);\r
+ taxonService.saveOrUpdate(t_abies_kawakamii_sensu_komarov);\r
+\r
BotanicalName n_abies_subalpina = BotanicalName.NewInstance(Rank.SPECIES());\r
n_abies_subalpina.setNameCache("Abies subalpina", true);\r
Synonym s_abies_subalpina = Synonym.NewInstance(n_abies_subalpina, sec);\r
taxonService.save(t_abies_lasiocarpa);\r
\r
// add taxa to classifications\r
- classification.addChildTaxon(t_abies_balsamea, null, null, null);\r
+ europeanAbiesClassification.addChildTaxon(t_abies_balsamea, null, null, null);\r
alternativeClassification.addChildTaxon(t_abies_lasiocarpa, null, null, null);\r
- classificationService.saveOrUpdate(classification);\r
+ classificationService.saveOrUpdate(europeanAbiesClassification);\r
classificationService.saveOrUpdate(alternativeClassification);\r
\r
+\r
+ //\r
+ // prepare namedAreas\r
+ //\r
+ NamedArea germany = WaterbodyOrCountry.GERMANY();\r
+ NamedArea france = WaterbodyOrCountry.FRANCEFRENCHREPUBLIC();\r
+ NamedArea russia = WaterbodyOrCountry.RUSSIANFEDERATION();\r
+ NamedArea canada = WaterbodyOrCountry.CANADA();\r
+\r
//\r
// Description\r
//\r
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
+\r
\r
- d_abies_alba.setUuid(UUID.fromString(D_ABIES_BALSAMEA_UUID));\r
// CommonTaxonName\r
d_abies_alba.addElement(CommonTaxonName.NewInstance("Weißtanne", Language.GERMAN()));\r
d_abies_alba.addElement(CommonTaxonName.NewInstance("silver fir", Language.ENGLISH()));\r
// TextData\r
- TaxonDescription d_abies_balsamea = TaxonDescription.NewInstance(t_abies_balsamea);\r
d_abies_balsamea\r
.addElement(TextData\r
.NewInstance(\r
"Balsam-Tanne",\r
Language.GERMAN(), null));\r
\r
+ d_abies_balsamea\r
+ .addElement(Distribution\r
+ .NewInstance(\r
+ canada,\r
+ PresenceTerm.PRESENT()));\r
+\r
d_abies_balsamea\r
.addElement(TextData\r
.NewInstance(\r
\r
\r
writeDbUnitDataSetFile(new String[] {\r
- "TAXONBASE", "TAXONNAMEBASE", "SYNONYMRELATIONSHIP",\r
+ "TAXONBASE", "TAXONNAMEBASE",\r
+ "SYNONYMRELATIONSHIP", "TAXONRELATIONSHIP",\r
"REFERENCE", "DESCRIPTIONELEMENTBASE", "DESCRIPTIONBASE",\r
"AGENTBASE", "HOMOTYPICALGROUP",\r
"CLASSIFICATION", "CLASSIFICATION_TAXONNODE","TAXONNODE",\r
- "LANGUAGESTRING", "DESCRIPTIONELEMENTBASE_LANGUAGESTRING" });\r
+ "LANGUAGESTRING", "DESCRIPTIONELEMENTBASE_LANGUAGESTRING",\r
+ "HIBERNATE_SEQUENCES" // IMPORTANT!!!\r
+ });\r
\r
}\r
\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
}\r
\r
private <T extends CdmBase> void logPagerRecords(Pager<SearchResult<T>> pager, Level level){\r
- if(level == null || logger.getLevel().isGreaterOrEqual(level)){\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
}\r
b.append("\n");\r
}\r
- logger.info(b);\r
+ logger.log(level, b);\r
}\r
}\r
\r
<?xml version='1.0' encoding='UTF-8'?>
<dataset>
- <TAXONBASE DTYPE="Taxon" ID="1000" CREATED="2013-09-10 16:27:42.0" UUID="d79fddb8-da9d-40a3-a994-4f26a6aee7e9" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies sec. " APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="1000" SEC_ID="1000" TAXONOMICPARENTCACHE_ID="[null]"/>
- <TAXONBASE DTYPE="Taxon" ID="1001" CREATED="2013-09-10 16:27:42.0" UUID="148c9141-1a5a-43a1-8fc8-7a7660eeda41" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies alba sec. " APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="1001" SEC_ID="1000" TAXONOMICPARENTCACHE_ID="[null]"/>
- <TAXONBASE DTYPE="Taxon" ID="1002" CREATED="2013-09-10 16:27:42.0" UUID="f65d47bd-4f49-4ab1-bc4a-bc4551eaa1a8" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies balsamea sec. " APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="1002" SEC_ID="1000" TAXONOMICPARENTCACHE_ID="[null]"/>
- <TAXONBASE DTYPE="Taxon" ID="1003" CREATED="2013-09-10 16:27:42.0" UUID="a847bdf8-67b0-4388-9fa2-a6346f4187dd" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies grandis sec. " APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="1003" SEC_ID="1000" TAXONOMICPARENTCACHE_ID="[null]"/>
- <TAXONBASE DTYPE="Taxon" ID="1004" CREATED="2013-09-10 16:27:42.0" UUID="de08f9c8-0abb-4649-a4c1-dc65ac5e7f9c" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies kawakamii sec. " APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="1004" SEC_ID="1000" TAXONOMICPARENTCACHE_ID="[null]"/>
- <TAXONBASE DTYPE="Synonym" ID="1005" CREATED="2013-09-10 16:27:42.0" UUID="5c2c5a1c-ad54-4cec-b5c9-c87ee1a54d1a" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies subalpina sec. " APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="[null]" TAXONSTATUSUNKNOWN="[null]" TAXONOMICCHILDRENCOUNT="[null]" UNPLACED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="1005" SEC_ID="1000" TAXONOMICPARENTCACHE_ID="[null]"/>
- <TAXONBASE DTYPE="Taxon" ID="1006" CREATED="2013-09-10 16:27:42.0" UUID="8d869437-6d0d-4a4c-a7c0-a2a071a6ce90" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies lasiocarpa sec. " APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="1006" SEC_ID="1000" TAXONOMICPARENTCACHE_ID="[null]"/>
- <TAXONNAMEBASE DTYPE="BotanicalName" ID="1000" CREATED="2013-09-10 16:27:42.0" UUID="f0268836-eb19-4333-9709-5e04866805d2" UPDATED="2013-09-10 16:27:42.586" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies" APPENDEDPHRASE="[null]" FULLTITLECACHE="Abies" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Abies" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="1000" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="774" BASIONYMAUTHORTEAM_ID="[null]" COMBINATIONAUTHORTEAM_ID="[null]" EXBASIONYMAUTHORTEAM_ID="[null]" EXCOMBINATIONAUTHORTEAM_ID="[null]"/>
- <TAXONNAMEBASE DTYPE="BotanicalName" ID="1001" CREATED="2013-09-10 16:27:42.0" UUID="04478d7a-3093-446c-8f95-59e45432ae38" UPDATED="2013-09-10 16:27:42.589" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies alba" APPENDEDPHRASE="[null]" FULLTITLECACHE="Abies alba" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Abies alba" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="1001" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORTEAM_ID="[null]" COMBINATIONAUTHORTEAM_ID="[null]" EXBASIONYMAUTHORTEAM_ID="[null]" EXCOMBINATIONAUTHORTEAM_ID="[null]"/>
- <TAXONNAMEBASE DTYPE="BotanicalName" ID="1002" CREATED="2013-09-10 16:27:42.0" UUID="e839880f-a4f9-4c54-8cb2-0f75cb45ce39" UPDATED="2013-09-10 16:27:42.591" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies balsamea" APPENDEDPHRASE="[null]" FULLTITLECACHE="Abies balsamea" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Abies balsamea" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="1002" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORTEAM_ID="[null]" COMBINATIONAUTHORTEAM_ID="[null]" EXBASIONYMAUTHORTEAM_ID="[null]" EXCOMBINATIONAUTHORTEAM_ID="[null]"/>
- <TAXONNAMEBASE DTYPE="BotanicalName" ID="1003" CREATED="2013-09-10 16:27:42.0" UUID="4f5bb0ca-9d33-47ac-8948-305fece1571f" UPDATED="2013-09-10 16:27:42.593" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies grandis" APPENDEDPHRASE="[null]" FULLTITLECACHE="Abies grandis" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Abies grandis" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="1003" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORTEAM_ID="[null]" COMBINATIONAUTHORTEAM_ID="[null]" EXBASIONYMAUTHORTEAM_ID="[null]" EXCOMBINATIONAUTHORTEAM_ID="[null]"/>
- <TAXONNAMEBASE DTYPE="BotanicalName" ID="1004" CREATED="2013-09-10 16:27:42.0" UUID="ababe7f7-d79a-419b-8430-bd9cf207ad4c" UPDATED="2013-09-10 16:27:42.595" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies kawakamii" APPENDEDPHRASE="[null]" FULLTITLECACHE="Abies kawakamii" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Abies kawakamii" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="1004" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORTEAM_ID="[null]" COMBINATIONAUTHORTEAM_ID="[null]" EXBASIONYMAUTHORTEAM_ID="[null]" EXCOMBINATIONAUTHORTEAM_ID="[null]"/>
- <TAXONNAMEBASE DTYPE="BotanicalName" ID="1005" CREATED="2013-09-10 16:27:42.0" UUID="f261ff5c-2480-469b-9121-82b69d709ffa" UPDATED="2013-09-10 16:27:42.597" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies subalpina" APPENDEDPHRASE="[null]" FULLTITLECACHE="Abies subalpina" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Abies subalpina" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="1005" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORTEAM_ID="[null]" COMBINATIONAUTHORTEAM_ID="[null]" EXBASIONYMAUTHORTEAM_ID="[null]" EXCOMBINATIONAUTHORTEAM_ID="[null]"/>
- <TAXONNAMEBASE DTYPE="BotanicalName" ID="1006" CREATED="2013-09-10 16:27:42.0" UUID="a73c5509-82e6-4c3f-b721-47c6359fb00c" UPDATED="2013-09-10 16:27:42.6" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies lasiocarpa" APPENDEDPHRASE="[null]" FULLTITLECACHE="Abies lasiocarpa" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Abies lasiocarpa" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="1006" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORTEAM_ID="[null]" COMBINATIONAUTHORTEAM_ID="[null]" EXBASIONYMAUTHORTEAM_ID="[null]" EXCOMBINATIONAUTHORTEAM_ID="[null]"/>
- <SYNONYMRELATIONSHIP ID="1000" CREATED="2013-09-10 16:27:42.0" UUID="49e643ce-a3f3-43f1-8d21-e8cabf1f4ad2" UPDATED="2013-09-10 16:27:42.601" CITATIONMICROREFERENCE="[null]" ORIGINALNAMESTRING="[null]" DOUBTFUL="false" PARTIAL="false" PROPARTE="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CITATION_ID="[null]" RELATEDFROM_ID="1005" RELATEDTO_ID="1006" TYPE_ID="848"/>
- <REFERENCE DTYPE="[null]" ID="1000" CREATED="2013-09-10 16:27:42.0" UUID="0410d88e-0825-4d55-86d7-109d23632e38" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="" DATEPUBLISHED_END="[null]" DATEPUBLISHED_FREETEXT="[null]" DATEPUBLISHED_START="[null]" EDITION="[null]" EDITOR="[null]" ISBN="[null]" ISSN="[null]" NOMENCLATURALLYRELEVANT="false" ORGANIZATION="[null]" PAGES="[null]" PARSINGPROBLEM="0" PLACEPUBLISHED="[null]" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PUBLISHER="[null]" REFERENCEABSTRACT="[null]" SERIES="[null]" SERIESPART="[null]" TITLE="[null]" REFTYPE="1" URI="[null]" VOLUME="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" AUTHORTEAM_ID="[null]" INREFERENCE_ID="[null]" INSTITUTION_ID="[null]" SCHOOL_ID="[null]"/>
- <DESCRIPTIONELEMENTBASE DTYPE="CommonTaxonName" ID="1000" CREATED="2013-09-10 16:27:42.0" UUID="24ccbd54-4151-40b2-823d-140594bca28f" UPDATED="2013-09-10 16:27:42.604" ORDERRELEVANT="[null]" NAME="Бальзам ньыв" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="933" INDESCRIPTION_ID="1000" AREA_ID="[null]" LANGUAGE_ID="229" STATUS_ID="[null]" ASSOCIATEDSPECIMENOROBSERVATION_ID="[null]" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
- <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="1001" CREATED="2013-09-10 16:27:42.0" UUID="4f8fcd9a-4bb5-4254-96fa-9279cc827c54" UPDATED="2013-09-10 16:27:42.607" ORDERRELEVANT="[null]" NAME="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="937" INDESCRIPTION_ID="1000" AREA_ID="[null]" LANGUAGE_ID="[null]" STATUS_ID="[null]" ASSOCIATEDSPECIMENOROBSERVATION_ID="[null]" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
- <DESCRIPTIONELEMENTBASE DTYPE="CommonTaxonName" ID="1002" CREATED="2013-09-10 16:27:42.0" UUID="4a097d65-423b-47ba-b916-da2dca3228e3" UPDATED="2013-09-10 16:27:42.608" ORDERRELEVANT="[null]" NAME="Balsam-Tanne" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="933" INDESCRIPTION_ID="1000" AREA_ID="[null]" LANGUAGE_ID="349" STATUS_ID="[null]" ASSOCIATEDSPECIMENOROBSERVATION_ID="[null]" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
- <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="1003" CREATED="2013-09-10 16:27:42.0" UUID="158f450d-6e2b-4151-8cdf-3eb8f620b5fc" UPDATED="2013-09-10 16:27:42.609" ORDERRELEVANT="[null]" NAME="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="937" INDESCRIPTION_ID="1000" AREA_ID="[null]" LANGUAGE_ID="[null]" STATUS_ID="[null]" ASSOCIATEDSPECIMENOROBSERVATION_ID="[null]" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
- <DESCRIPTIONELEMENTBASE DTYPE="CommonTaxonName" ID="1004" CREATED="2013-09-10 16:27:42.0" UUID="dc3e9594-334a-4535-9e4f-d3b15d461a35" UPDATED="2013-09-10 16:27:42.613" ORDERRELEVANT="[null]" NAME="silver fir" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="933" INDESCRIPTION_ID="1001" AREA_ID="[null]" LANGUAGE_ID="406" STATUS_ID="[null]" ASSOCIATEDSPECIMENOROBSERVATION_ID="[null]" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
- <DESCRIPTIONELEMENTBASE DTYPE="CommonTaxonName" ID="1005" CREATED="2013-09-10 16:27:42.0" UUID="50e53219-281d-4f66-8c89-3a27aceb3bd9" UPDATED="2013-09-10 16:27:42.614" ORDERRELEVANT="[null]" NAME="Weißtanne" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="933" INDESCRIPTION_ID="1001" AREA_ID="[null]" LANGUAGE_ID="349" STATUS_ID="[null]" ASSOCIATEDSPECIMENOROBSERVATION_ID="[null]" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
- <DESCRIPTIONBASE DTYPE="TaxonDescription" ID="1000" CREATED="2013-09-10 16:27:42.0" UUID="b193e846-0b08-4032-bf8d-7aa900ae0714" UPDATED="2013-09-10 16:27:42.603" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Taxon description for Abies balsamea" IMAGEGALLERY="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" TAXON_ID="1002" TAXONNAME_ID="[null]"/>
- <DESCRIPTIONBASE DTYPE="TaxonDescription" ID="1001" CREATED="2013-09-10 16:27:42.0" UUID="900108d8-e6ce-495e-b32e-7aad3099135e" UPDATED="2013-09-10 16:27:42.612" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Taxon description for Abies alba" IMAGEGALLERY="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" TAXON_ID="1001" TAXONNAME_ID="[null]"/>
- <HOMOTYPICALGROUP ID="1000" CREATED="2013-09-10 16:27:42.0" UUID="6fb9c8ae-c73d-47ca-8815-f0d1236777bb" UPDATED="2013-09-10 16:27:42.587" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
- <HOMOTYPICALGROUP ID="1001" CREATED="2013-09-10 16:27:42.0" UUID="614415c1-b4ff-43a7-89bf-49ee8149c71c" UPDATED="2013-09-10 16:27:42.589" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
- <HOMOTYPICALGROUP ID="1002" CREATED="2013-09-10 16:27:42.0" UUID="5ac87148-fa0d-4ab0-bd76-b757254be6c3" UPDATED="2013-09-10 16:27:42.591" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
- <HOMOTYPICALGROUP ID="1003" CREATED="2013-09-10 16:27:42.0" UUID="a25acff3-97c3-453b-9cdf-b606857b27bf" UPDATED="2013-09-10 16:27:42.593" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
- <HOMOTYPICALGROUP ID="1004" CREATED="2013-09-10 16:27:42.0" UUID="2c9e6ed3-ce0e-48d4-bfc9-15354807f840" UPDATED="2013-09-10 16:27:42.595" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
- <HOMOTYPICALGROUP ID="1005" CREATED="2013-09-10 16:27:42.0" UUID="73b14b05-d32e-4622-ad81-3b01df70979e" UPDATED="2013-09-10 16:27:42.598" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
- <HOMOTYPICALGROUP ID="1006" CREATED="2013-09-10 16:27:42.0" UUID="40c25c98-68aa-4f93-b883-add0772432d7" UPDATED="2013-09-10 16:27:42.6" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
- <CLASSIFICATION ID="1000" CREATED="2013-09-10 16:27:42.0" UUID="d7c741e3-ae9e-4a7d-a566-9e3a7a0b51ce" UPDATED="2013-09-10 16:27:42.602" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="European Abies" MICROREFERENCE="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="1000" REFERENCE_ID="[null]"/>
- <CLASSIFICATION ID="1001" CREATED="2013-09-10 16:27:42.0" UUID="056d8c0c-29c0-4314-a63b-bf8e1d2c6020" UPDATED="2013-09-10 16:27:42.602" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies alternative" MICROREFERENCE="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="1001" REFERENCE_ID="[null]"/>
- <CLASSIFICATION_TAXONNODE CLASSIFICATION_ID="1000" ROOTNODES_ID="1000"/>
- <CLASSIFICATION_TAXONNODE CLASSIFICATION_ID="1001" ROOTNODES_ID="1001"/>
- <TAXONNODE ID="1000" CREATED="2013-09-10 16:27:42.0" UUID="670e63ea-014c-4d31-aec4-b5f05bdfae0e" UPDATED="2013-09-10 16:27:42.61" COUNTCHILDREN="0" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="1000" PARENT_ID="[null]" REFERENCEFORPARENTCHILDRELATION_ID="[null]" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="1002"/>
- <TAXONNODE ID="1001" CREATED="2013-09-10 16:27:42.0" UUID="d528f4aa-b760-4d27-8a32-ec30b1b4639b" UPDATED="2013-09-10 16:27:42.611" COUNTCHILDREN="0" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="1001" PARENT_ID="[null]" REFERENCEFORPARENTCHILDRELATION_ID="[null]" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="1006"/>
- <LANGUAGESTRING ID="1000" CREATED="2013-09-10 16:27:42.0" UUID="aa0a9453-de3b-4536-ba35-e59e69762e37" UPDATED="2013-09-10 16:27:42.569" TEXT="European Abies" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LANGUAGE_ID="406"/>
- <LANGUAGESTRING ID="1001" CREATED="2013-09-10 16:27:42.0" UUID="5dd7997b-e132-4c04-be43-2d92bebda481" UPDATED="2013-09-10 16:27:42.571" TEXT="Abies alternative" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LANGUAGE_ID="406"/>
- <LANGUAGESTRING ID="1002" CREATED="2013-09-10 16:27:42.0" UUID="8adbe39f-c40a-4d9f-800e-710e8b57f9f9" UPDATED="2013-09-10 16:27:42.608" TEXT="Бальзам ньыв (лат. Abies balsamea) – быдмассэзлӧн пожум котырись ньыв увтырын торья вид. Ньывпуыс быдмӧ 14–20 метра вылына да овлӧ 10–60 см кыза диаметрын. Ньывпу пантасьӧ Ойвыв Америкаын." CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LANGUAGE_ID="229"/>
- <LANGUAGESTRING ID="1003" CREATED="2013-09-10 16:27:42.0" UUID="62522319-2af9-429d-894f-50e5ab7720bf" UPDATED="2013-09-10 16:27:42.61" TEXT="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." CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LANGUAGE_ID="349"/>
- <DESCRIPTIONELEMENTBASE_LANGUAGESTRING DESCRIPTIONELEMENTBASE_ID="1001" MULTILANGUAGETEXT_ID="1002" MULTILANGUAGETEXT_MAPKEY_ID="229"/>
- <DESCRIPTIONELEMENTBASE_LANGUAGESTRING DESCRIPTIONELEMENTBASE_ID="1003" MULTILANGUAGETEXT_ID="1003" MULTILANGUAGETEXT_MAPKEY_ID="349"/>
+ <TAXONBASE DTYPE="Taxon" ID="5000" CREATED="2013-09-13 13:13:04.0" UUID="a619a823-a467-46b7-b3f8-d21db6c28087" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies sec. Kohlbecker, A., Testcase standart views, 2013" APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5000" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/>
+ <TAXONBASE DTYPE="Taxon" ID="5001" CREATED="2013-09-13 13:13:04.0" UUID="95cf39d8-ec26-4746-b48c-540dc5e60e02" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies alba sec. Kohlbecker, A., Testcase standart views, 2013" APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5001" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/>
+ <TAXONBASE DTYPE="Taxon" ID="5002" CREATED="2013-09-13 13:13:04.0" UUID="f65d47bd-4f49-4ab1-bc4a-bc4551eaa1a8" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies balsamea sec. Kohlbecker, A., Testcase standart views, 2013" APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5002" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/>
+ <TAXONBASE DTYPE="Taxon" ID="5003" CREATED="2013-09-13 13:13:04.0" UUID="39a76ea4-f9cc-4b1f-a248-19bbf353ba9d" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies grandis sec. Kohlbecker, A., Testcase standart views, 2013" APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5003" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/>
+ <TAXONBASE DTYPE="Taxon" ID="5004" CREATED="2013-09-13 13:13:04.0" UUID="ce1ac463-4e9f-4c6c-96fc-ecd217783d20" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies kawakamii sec. Kohlbecker, A., Testcase standart views, 2013" APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5004" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/>
+ <TAXONBASE DTYPE="Taxon" ID="5005" CREATED="2013-09-13 13:13:04.0" UUID="6d8599d7-9172-44d4-ab4b-ac3b71891db4" UPDATED="2013-09-13 13:13:04.895" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies kawakamii sec. Komarov, V. L., Flora SSSR 29" APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5004" SEC_ID="5001" TAXONOMICPARENTCACHE_ID="[null]"/>
+ <TAXONBASE DTYPE="Synonym" ID="5006" CREATED="2013-09-13 13:13:04.0" UUID="fc685ba3-d39a-4fb1-8c23-665c1a041c94" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies subalpina sec. Kohlbecker, A., Testcase standart views, 2013" APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="[null]" TAXONSTATUSUNKNOWN="[null]" TAXONOMICCHILDRENCOUNT="[null]" UNPLACED="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5005" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/>
+ <TAXONBASE DTYPE="Taxon" ID="5007" CREATED="2013-09-13 13:13:04.0" UUID="4beb9910-f8d6-4421-9ebd-e13d15a26467" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies lasiocarpa sec. Kohlbecker, A., Testcase standart views, 2013" APPENDEDPHRASE="[null]" DOUBTFUL="false" USENAMECACHE="false" EXCLUDED="false" TAXONSTATUSUNKNOWN="false" TAXONOMICCHILDRENCOUNT="0" UNPLACED="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5006" SEC_ID="5000" TAXONOMICPARENTCACHE_ID="[null]"/>
+ <TAXONNAMEBASE DTYPE="BotanicalName" ID="5000" CREATED="2013-09-13 13:13:04.0" UUID="9ddaab90-a816-405a-afa5-da1bb3bcd7a7" UPDATED="2013-09-13 13:13:04.881" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies" APPENDEDPHRASE="[null]" FULLTITLECACHE="Abies" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Abies" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5000" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="774" BASIONYMAUTHORTEAM_ID="[null]" COMBINATIONAUTHORTEAM_ID="[null]" EXBASIONYMAUTHORTEAM_ID="[null]" EXCOMBINATIONAUTHORTEAM_ID="[null]"/>
+ <TAXONNAMEBASE DTYPE="BotanicalName" ID="5001" CREATED="2013-09-13 13:13:04.0" UUID="21ede2d4-0e6e-4661-9b29-8a5f6f7485b6" UPDATED="2013-09-13 13:13:04.884" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies alba" APPENDEDPHRASE="[null]" FULLTITLECACHE="Abies alba" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Abies alba" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5001" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORTEAM_ID="[null]" COMBINATIONAUTHORTEAM_ID="[null]" EXBASIONYMAUTHORTEAM_ID="[null]" EXCOMBINATIONAUTHORTEAM_ID="[null]"/>
+ <TAXONNAMEBASE DTYPE="BotanicalName" ID="5002" CREATED="2013-09-13 13:13:04.0" UUID="10f9ba4f-e90d-409b-96f3-c1fc8d2dd627" UPDATED="2013-09-13 13:13:04.887" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies balsamea" APPENDEDPHRASE="[null]" FULLTITLECACHE="Abies balsamea" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Abies balsamea" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5002" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORTEAM_ID="[null]" COMBINATIONAUTHORTEAM_ID="[null]" EXBASIONYMAUTHORTEAM_ID="[null]" EXCOMBINATIONAUTHORTEAM_ID="[null]"/>
+ <TAXONNAMEBASE DTYPE="BotanicalName" ID="5003" CREATED="2013-09-13 13:13:04.0" UUID="d2a100c4-c5e0-449b-a750-143acc72de14" UPDATED="2013-09-13 13:13:04.889" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies grandis" APPENDEDPHRASE="[null]" FULLTITLECACHE="Abies grandis" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Abies grandis" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5003" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORTEAM_ID="[null]" COMBINATIONAUTHORTEAM_ID="[null]" EXBASIONYMAUTHORTEAM_ID="[null]" EXCOMBINATIONAUTHORTEAM_ID="[null]"/>
+ <TAXONNAMEBASE DTYPE="BotanicalName" ID="5004" CREATED="2013-09-13 13:13:04.0" UUID="0fd6ba4f-d482-48fc-98c6-bf5e33824623" UPDATED="2013-09-13 13:13:04.892" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies kawakamii" APPENDEDPHRASE="[null]" FULLTITLECACHE="Abies kawakamii" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Abies kawakamii" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5004" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORTEAM_ID="[null]" COMBINATIONAUTHORTEAM_ID="[null]" EXBASIONYMAUTHORTEAM_ID="[null]" EXCOMBINATIONAUTHORTEAM_ID="[null]"/>
+ <TAXONNAMEBASE DTYPE="BotanicalName" ID="5005" CREATED="2013-09-13 13:13:04.0" UUID="3ce0be8f-db90-4646-91a6-5410d317b88d" UPDATED="2013-09-13 13:13:04.896" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies subalpina" APPENDEDPHRASE="[null]" FULLTITLECACHE="Abies subalpina" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Abies subalpina" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5005" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORTEAM_ID="[null]" COMBINATIONAUTHORTEAM_ID="[null]" EXBASIONYMAUTHORTEAM_ID="[null]" EXCOMBINATIONAUTHORTEAM_ID="[null]"/>
+ <TAXONNAMEBASE DTYPE="BotanicalName" ID="5006" CREATED="2013-09-13 13:13:04.0" UUID="96d15383-b6d0-414d-a086-e840f80740cb" UPDATED="2013-09-13 13:13:04.899" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies lasiocarpa" APPENDEDPHRASE="[null]" FULLTITLECACHE="Abies lasiocarpa" NOMENCLATURALMICROREFERENCE="[null]" PARSINGPROBLEM="0" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PROTECTEDFULLTITLECACHE="false" AUTHORSHIPCACHE="" BINOMHYBRID="false" GENUSORUNINOMIAL="[null]" HYBRIDFORMULA="false" INFRAGENERICEPITHET="[null]" INFRASPECIFICEPITHET="[null]" MONOMHYBRID="false" NAMECACHE="Abies lasiocarpa" PROTECTEDAUTHORSHIPCACHE="false" PROTECTEDNAMECACHE="true" SPECIFICEPITHET="[null]" TRINOMHYBRID="false" NAMEAPPROBATION="[null]" SUBGENUSAUTHORSHIP="[null]" ANAMORPHIC="false" CULTIVARNAME="[null]" ACRONYM="[null]" BREED="[null]" ORIGINALPUBLICATIONYEAR="[null]" PUBLICATIONYEAR="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" HOMOTYPICALGROUP_ID="5006" NOMENCLATURALREFERENCE_ID="[null]" RANK_ID="765" BASIONYMAUTHORTEAM_ID="[null]" COMBINATIONAUTHORTEAM_ID="[null]" EXBASIONYMAUTHORTEAM_ID="[null]" EXCOMBINATIONAUTHORTEAM_ID="[null]"/>
+ <SYNONYMRELATIONSHIP ID="5000" CREATED="2013-09-13 13:13:04.0" UUID="2521d294-6d6a-49f3-942b-df5d164212a7" UPDATED="2013-09-13 13:13:04.901" CITATIONMICROREFERENCE="[null]" ORIGINALNAMESTRING="[null]" DOUBTFUL="false" PARTIAL="false" PROPARTE="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CITATION_ID="[null]" RELATEDFROM_ID="5006" RELATEDTO_ID="5007" TYPE_ID="848"/>
+ <TAXONRELATIONSHIP ID="5000" CREATED="2013-09-13 13:13:04.0" UUID="1eecc625-a63f-4545-b0c4-d8ffd8ba97e8" UPDATED="2013-09-13 13:13:04.915" CITATIONMICROREFERENCE="[null]" ORIGINALNAMESTRING="[null]" DOUBTFUL="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CITATION_ID="[null]" RELATEDFROM_ID="5005" RELATEDTO_ID="5002" TYPE_ID="888"/>
+ <REFERENCE DTYPE="[null]" ID="5000" CREATED="2013-09-13 13:13:04.0" UUID="6d8c8dc3-e6e4-4e29-b962-5114d441a523" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="true" TITLECACHE="Kohlbecker, A., Testcase standart views, 2013" DATEPUBLISHED_END="[null]" DATEPUBLISHED_FREETEXT="[null]" DATEPUBLISHED_START="[null]" EDITION="[null]" EDITOR="[null]" ISBN="[null]" ISSN="[null]" NOMENCLATURALLYRELEVANT="false" ORGANIZATION="[null]" PAGES="[null]" PARSINGPROBLEM="0" PLACEPUBLISHED="[null]" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PUBLISHER="[null]" REFERENCEABSTRACT="[null]" SERIES="[null]" SERIESPART="[null]" TITLE="[null]" REFTYPE="1" URI="[null]" VOLUME="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" AUTHORTEAM_ID="[null]" INREFERENCE_ID="[null]" INSTITUTION_ID="[null]" SCHOOL_ID="[null]"/>
+ <REFERENCE DTYPE="[null]" ID="5001" CREATED="2013-09-13 13:13:04.0" UUID="9f394d23-e623-4d9d-be2e-e24838e24b21" UPDATED="[null]" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="true" TITLECACHE="Komarov, V. L., Flora SSSR 29" DATEPUBLISHED_END="[null]" DATEPUBLISHED_FREETEXT="[null]" DATEPUBLISHED_START="[null]" EDITION="[null]" EDITOR="[null]" ISBN="[null]" ISSN="[null]" NOMENCLATURALLYRELEVANT="false" ORGANIZATION="[null]" PAGES="[null]" PARSINGPROBLEM="0" PLACEPUBLISHED="[null]" PROBLEMENDS="-1" PROBLEMSTARTS="-1" PUBLISHER="[null]" REFERENCEABSTRACT="[null]" SERIES="[null]" SERIESPART="[null]" TITLE="[null]" REFTYPE="1" URI="[null]" VOLUME="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" AUTHORTEAM_ID="[null]" INREFERENCE_ID="[null]" INSTITUTION_ID="[null]" SCHOOL_ID="[null]"/>
+ <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="5000" CREATED="2013-09-13 13:13:04.0" UUID="e13eed48-6b7f-4b0a-ac8b-2dd3cec6e277" UPDATED="2013-09-13 13:13:04.904" ORDERRELEVANT="[null]" NAME="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="937" INDESCRIPTION_ID="5000" AREA_ID="[null]" LANGUAGE_ID="[null]" STATUS_ID="[null]" ASSOCIATEDSPECIMENOROBSERVATION_ID="[null]" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
+ <DESCRIPTIONELEMENTBASE DTYPE="CommonTaxonName" ID="5001" CREATED="2013-09-13 13:13:04.0" UUID="ab42a6ad-6c46-4950-ad69-8ccb05e4874f" UPDATED="2013-09-13 13:13:04.908" ORDERRELEVANT="[null]" NAME="Balsam-Tanne" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="933" INDESCRIPTION_ID="5000" AREA_ID="[null]" LANGUAGE_ID="349" STATUS_ID="[null]" ASSOCIATEDSPECIMENOROBSERVATION_ID="[null]" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
+ <DESCRIPTIONELEMENTBASE DTYPE="CommonTaxonName" ID="5002" CREATED="2013-09-13 13:13:04.0" UUID="e450a07f-4213-4ae9-8d3d-4e4982f9c709" UPDATED="2013-09-13 13:13:04.908" ORDERRELEVANT="[null]" NAME="Бальзам ньыв" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="933" INDESCRIPTION_ID="5000" AREA_ID="[null]" LANGUAGE_ID="229" STATUS_ID="[null]" ASSOCIATEDSPECIMENOROBSERVATION_ID="[null]" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
+ <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="5003" CREATED="2013-09-13 13:13:04.0" UUID="3abf4f1c-595f-444a-977b-008523aa6b75" UPDATED="2013-09-13 13:13:04.909" ORDERRELEVANT="[null]" NAME="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="937" INDESCRIPTION_ID="5000" AREA_ID="[null]" LANGUAGE_ID="[null]" STATUS_ID="[null]" ASSOCIATEDSPECIMENOROBSERVATION_ID="[null]" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
+ <DESCRIPTIONELEMENTBASE DTYPE="Distribution" ID="5004" CREATED="2013-09-13 13:13:04.0" UUID="a63ac503-aacd-4b7b-9faf-356f33f3ce80" UPDATED="2013-09-13 13:13:04.91" ORDERRELEVANT="[null]" NAME="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="923" INDESCRIPTION_ID="5000" AREA_ID="705" LANGUAGE_ID="[null]" STATUS_ID="1994" ASSOCIATEDSPECIMENOROBSERVATION_ID="[null]" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
+ <DESCRIPTIONELEMENTBASE DTYPE="CommonTaxonName" ID="5005" CREATED="2013-09-13 13:13:04.0" UUID="b8588a04-6f02-41a5-ad40-7d2e2ed22bc8" UPDATED="2013-09-13 13:13:04.914" ORDERRELEVANT="[null]" NAME="Weißtanne" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="933" INDESCRIPTION_ID="5001" AREA_ID="[null]" LANGUAGE_ID="349" STATUS_ID="[null]" ASSOCIATEDSPECIMENOROBSERVATION_ID="[null]" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
+ <DESCRIPTIONELEMENTBASE DTYPE="CommonTaxonName" ID="5006" CREATED="2013-09-13 13:13:04.0" UUID="60708ad0-b1c0-4651-8ff9-af27cf5d5623" UPDATED="2013-09-13 13:13:04.914" ORDERRELEVANT="[null]" NAME="silver fir" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" FEATURE_ID="933" INDESCRIPTION_ID="5001" AREA_ID="[null]" LANGUAGE_ID="406" STATUS_ID="[null]" ASSOCIATEDSPECIMENOROBSERVATION_ID="[null]" UNIT_ID="[null]" TAXON2_ID="[null]" FORMAT_ID="[null]"/>
+ <DESCRIPTIONBASE DTYPE="TaxonDescription" ID="5000" CREATED="2013-09-13 13:13:04.0" UUID="900108d8-e6ce-495e-b32e-7aad3099135e" UPDATED="2013-09-13 13:13:04.903" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Taxon description for Abies balsamea" IMAGEGALLERY="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" TAXON_ID="5002" TAXONNAME_ID="[null]"/>
+ <DESCRIPTIONBASE DTYPE="TaxonDescription" ID="5001" CREATED="2013-09-13 13:13:04.0" UUID="ec8bba03-d993-4c85-8472-18b14942464b" UPDATED="2013-09-13 13:13:04.913" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Taxon description for Abies alba" IMAGEGALLERY="false" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" TAXON_ID="5001" TAXONNAME_ID="[null]"/>
+ <HOMOTYPICALGROUP ID="5000" CREATED="2013-09-13 13:13:04.0" UUID="ec1781cb-7c4d-4730-979f-990307bb6cc2" UPDATED="2013-09-13 13:13:04.881" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
+ <HOMOTYPICALGROUP ID="5001" CREATED="2013-09-13 13:13:04.0" UUID="f3a0b9b3-b76b-4aa8-b9df-1498f0bcf7c0" UPDATED="2013-09-13 13:13:04.884" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
+ <HOMOTYPICALGROUP ID="5002" CREATED="2013-09-13 13:13:04.0" UUID="1474a04f-a1db-4232-9f4a-d4630897eb8c" UPDATED="2013-09-13 13:13:04.888" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
+ <HOMOTYPICALGROUP ID="5003" CREATED="2013-09-13 13:13:04.0" UUID="2e0b00e4-bb55-44d5-87af-66cd518cbe8c" UPDATED="2013-09-13 13:13:04.891" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
+ <HOMOTYPICALGROUP ID="5004" CREATED="2013-09-13 13:13:04.0" UUID="75d6fe4c-f3ef-4593-9a58-36e5d9228019" UPDATED="2013-09-13 13:13:04.893" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
+ <HOMOTYPICALGROUP ID="5005" CREATED="2013-09-13 13:13:04.0" UUID="9d6ecae6-d085-41a2-b169-a4cdf108f839" UPDATED="2013-09-13 13:13:04.897" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
+ <HOMOTYPICALGROUP ID="5006" CREATED="2013-09-13 13:13:04.0" UUID="a1b5c08a-4f9c-49d3-87bd-5d3a060b7c51" UPDATED="2013-09-13 13:13:04.9" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]"/>
+ <CLASSIFICATION ID="5000" CREATED="2013-09-13 13:13:04.0" UUID="2a5ceebb-4830-4524-b330-78461bf8cb6b" UPDATED="2013-09-13 13:13:04.902" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="European Abies" MICROREFERENCE="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5000" REFERENCE_ID="[null]"/>
+ <CLASSIFICATION ID="5001" CREATED="2013-09-13 13:13:04.0" UUID="d7c741e3-ae9e-4a7d-a566-9e3a7a0b51ce" UPDATED="2013-09-13 13:13:04.902" LSID_AUTHORITY="[null]" LSID_LSID="[null]" LSID_NAMESPACE="[null]" LSID_OBJECT="[null]" LSID_REVISION="[null]" PROTECTEDTITLECACHE="false" TITLECACHE="Abies alternative" MICROREFERENCE="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" NAME_ID="5001" REFERENCE_ID="[null]"/>
+ <CLASSIFICATION_TAXONNODE CLASSIFICATION_ID="5000" ROOTNODES_ID="5000"/>
+ <CLASSIFICATION_TAXONNODE CLASSIFICATION_ID="5001" ROOTNODES_ID="5001"/>
+ <TAXONNODE ID="5000" CREATED="2013-09-13 13:13:04.0" UUID="79f220ff-fe23-4e8a-ba8f-380ec85d2b76" UPDATED="2013-09-13 13:13:04.911" COUNTCHILDREN="0" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5000" PARENT_ID="[null]" REFERENCEFORPARENTCHILDRELATION_ID="[null]" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="5002"/>
+ <TAXONNODE ID="5001" CREATED="2013-09-13 13:13:04.0" UUID="f34b925b-5318-468f-b70d-1b513f81fa63" UPDATED="2013-09-13 13:13:04.912" COUNTCHILDREN="0" MICROREFERENCEFORPARENTCHILDRELATION="[null]" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" CLASSIFICATION_ID="5001" PARENT_ID="[null]" REFERENCEFORPARENTCHILDRELATION_ID="[null]" SYNONYMTOBEUSED_ID="[null]" TAXON_ID="5007"/>
+ <LANGUAGESTRING ID="5000" CREATED="2013-09-13 13:13:04.0" UUID="af7ab714-3e70-4722-b3b4-20e7155d6902" UPDATED="2013-09-13 13:13:04.871" TEXT="European Abies" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LANGUAGE_ID="406"/>
+ <LANGUAGESTRING ID="5001" CREATED="2013-09-13 13:13:04.0" UUID="56902e55-d798-4fe6-a62b-b7ced46a1394" UPDATED="2013-09-13 13:13:04.873" TEXT="Abies alternative" CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LANGUAGE_ID="406"/>
+ <LANGUAGESTRING ID="5002" CREATED="2013-09-13 13:13:04.0" UUID="43ff4fe5-5df1-4b1f-a14c-c60e1e668bb1" UPDATED="2013-09-13 13:13:04.907" TEXT="Бальзам ньыв (лат. Abies balsamea) – быдмассэзлӧн пожум котырись ньыв увтырын торья вид. Ньывпуыс быдмӧ 14–20 метра вылына да овлӧ 10–60 см кыза диаметрын. Ньывпу пантасьӧ Ойвыв Америкаын." CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LANGUAGE_ID="229"/>
+ <LANGUAGESTRING ID="5003" CREATED="2013-09-13 13:13:04.0" UUID="2e2ba1cf-7157-4f45-a69c-edde0251023b" UPDATED="2013-09-13 13:13:04.91" TEXT="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." CREATEDBY_ID="[null]" UPDATEDBY_ID="[null]" LANGUAGE_ID="349"/>
+ <DESCRIPTIONELEMENTBASE_LANGUAGESTRING DESCRIPTIONELEMENTBASE_ID="5000" MULTILANGUAGETEXT_ID="5002" MULTILANGUAGETEXT_MAPKEY_ID="229"/>
+ <DESCRIPTIONELEMENTBASE_LANGUAGESTRING DESCRIPTIONELEMENTBASE_ID="5003" MULTILANGUAGETEXT_ID="5003" MULTILANGUAGETEXT_MAPKEY_ID="349"/>
+ <HIBERNATE_SEQUENCES SEQUENCE_NAME="CdmMetaData" NEXT_VAL="5003"/>
+ <HIBERNATE_SEQUENCES SEQUENCE_NAME="Classification" NEXT_VAL="5002"/>
+ <HIBERNATE_SEQUENCES SEQUENCE_NAME="DescriptionBase" NEXT_VAL="5002"/>
+ <HIBERNATE_SEQUENCES SEQUENCE_NAME="DescriptionElementBase" NEXT_VAL="5007"/>
+ <HIBERNATE_SEQUENCES SEQUENCE_NAME="GrantedAuthorityImpl" NEXT_VAL="5001"/>
+ <HIBERNATE_SEQUENCES SEQUENCE_NAME="HomotypicalGroup" NEXT_VAL="5007"/>
+ <HIBERNATE_SEQUENCES SEQUENCE_NAME="LanguageString" NEXT_VAL="5004"/>
+ <HIBERNATE_SEQUENCES SEQUENCE_NAME="Reference" NEXT_VAL="5002"/>
+ <HIBERNATE_SEQUENCES SEQUENCE_NAME="SynonymRelationship" NEXT_VAL="5001"/>
+ <HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonBase" NEXT_VAL="5008"/>
+ <HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonNameBase" NEXT_VAL="5007"/>
+ <HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonNode" NEXT_VAL="5002"/>
+ <HIBERNATE_SEQUENCES SEQUENCE_NAME="TaxonRelationship" NEXT_VAL="5001"/>
+ <HIBERNATE_SEQUENCES SEQUENCE_NAME="UserAccount" NEXT_VAL="5001"/>
</dataset>
#log4j.logger.org.apache.lucene=debug
#log4j.logger.org.apache.lucene.index.IndexWriter=debug
#log4j.logger.org.apache.lucene.store=debug
-log4j.logger.eu.etaxonomy.cdm.search.LuceneSearch=warn
+#log4j.logger.eu.etaxonomy.cdm.api.service.search=debug
+#log4j.logger.eu.etaxonomy.cdm.api.service=debug
+log4j.logger.eu.etaxonomy.cdm.api.service.search.LuceneSearch=warn
### *** Profiling Logger ************ ###
database.driverClassName=org.h2.Driver\r
#database.driverClassName=com.p6spy.engine.spy.P6SpyDriver\r
database.url=jdbc:h2:mem:cdm2\r
-#database.url=jdbc:h2:file:~/.h2/cdm\r
+#database.url=jdbc:h2:file:~/.h2/cdm;TRACE_LEVEL_FILE=2\r
database.dialect=h2\r
dbMaintainer.script.fileExtensions=h2.sql\r
database.userName=sa\r