ref #6630 and ref #6368 remove generics from TaxonName
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / tcsxml / in / TcsXmlTaxonImport.java
index 29b3d96ef8f3ebd040827260ac13fab927c2dc22..6be1640d063b2e054dd87fd3a82326b8b9afd275 100644 (file)
@@ -1,9 +1,16 @@
 /**\r
- * \r
- */\r
+* Copyright (C) 2009 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
 package eu.etaxonomy.cdm.io.tcsxml.in;\r
 \r
 import java.util.ArrayList;\r
+import java.util.HashMap;\r
 import java.util.HashSet;\r
 import java.util.Iterator;\r
 import java.util.List;\r
@@ -22,17 +29,15 @@ import eu.etaxonomy.cdm.api.service.ITaxonService;
 import eu.etaxonomy.cdm.common.ResultWrapper;\r
 import eu.etaxonomy.cdm.common.XmlHelp;\r
 import eu.etaxonomy.cdm.io.common.ICdmIO;\r
-import eu.etaxonomy.cdm.io.common.IImportConfigurator;\r
 import eu.etaxonomy.cdm.io.common.ImportHelper;\r
 import eu.etaxonomy.cdm.io.common.MapWrapper;\r
-import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
+import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.description.CommonTaxonName;\r
 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
-import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.reference.Generic;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.cdm.model.name.TaxonName;\r
+import eu.etaxonomy.cdm.model.reference.Reference;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
@@ -43,26 +48,26 @@ import eu.etaxonomy.cdm.model.taxon.TaxonBase;
  *\r
  */\r
 @Component\r
-public class TcsXmlTaxonImport  extends TcsXmlImportBase implements ICdmIO<IImportConfigurator> {\r
+public class TcsXmlTaxonImport  extends TcsXmlImportBase implements ICdmIO<TcsXmlImportState> {\r
        private static final Logger logger = Logger.getLogger(TcsXmlTaxonImport.class);\r
 \r
        private static int modCount = 30000;\r
-       \r
+\r
        public TcsXmlTaxonImport(){\r
                super();\r
        }\r
-       \r
-       \r
+\r
+\r
        @Override\r
-       public boolean doCheck(IImportConfigurator config){\r
+       public boolean doCheck(TcsXmlImportState state){\r
                boolean result = true;\r
                logger.warn("Checking for Taxa not yet implemented");\r
                //result &= checkArticlesWithoutJournal(bmiConfig);\r
                //result &= checkPartOfJournal(bmiConfig);\r
-               \r
+\r
                return result;\r
        }\r
-       \r
+\r
        /**\r
         * Computes a list of all TaxonConcept ids (ref-attribute) that are related as synonyms\r
         * @param elTaxonConceptList\r
@@ -71,14 +76,14 @@ public class TcsXmlTaxonImport  extends TcsXmlImportBase implements ICdmIO<IImpo
         */\r
        private Set<String> makeSynonymIds(List<Element> elTaxonConceptList, ResultWrapper<Boolean> success){\r
                //TODO use XPath\r
-               \r
+\r
                 Set<String> result =  new HashSet<String>();\r
-               \r
+\r
                Namespace tcsNamespace;\r
                //for each taxonConcept\r
                for (Element elTaxonConcept : elTaxonConceptList){\r
                        tcsNamespace = elTaxonConcept.getNamespace();\r
-                       \r
+\r
                        String childName = "TaxonRelationships";\r
                        boolean obligatory = false;\r
                        Element elTaxonRelationships = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
@@ -87,42 +92,40 @@ public class TcsXmlTaxonImport  extends TcsXmlImportBase implements ICdmIO<IImpo
                                continue;\r
                        }\r
                        String tcsElementName = "TaxonRelationship";\r
-                       List<Element> elTaxonRelationshipList = elTaxonRelationships.getChildren(tcsElementName, tcsNamespace);\r
+                       List<Element> elTaxonRelationshipList = elTaxonRelationships == null ? new ArrayList<Element>() : elTaxonRelationships.getChildren(tcsElementName, tcsNamespace);\r
                        for (Element elTaxonRelationship : elTaxonRelationshipList){\r
-                               \r
+\r
                                String relationshipType = elTaxonRelationship.getAttributeValue("type");\r
                                if ("has synonym".equalsIgnoreCase(relationshipType)){\r
                                        childName = "ToTaxonConcept";\r
                                        obligatory = true;\r
                                        Element elToTaxonConcept = XmlHelp.getSingleChildElement(success, elTaxonRelationship, childName, tcsNamespace, obligatory);\r
-                                       \r
+\r
                                        String linkType = elToTaxonConcept.getAttributeValue("linkType");\r
                                        if (linkType == null || linkType.equals("local")){\r
                                                String ref = elToTaxonConcept.getAttributeValue("ref");\r
                                                result.add(ref);\r
                                        }else{\r
                                                logger.warn("External link types for synonym not yet implemented");\r
-                                       }               \r
+                                       }\r
                                }\r
                        }\r
                }\r
                return result;\r
        }\r
-       \r
-       \r
-       protected static final ReferenceBase unknownSec(){\r
-               ReferenceBase result = Generic.NewInstance();\r
-               result.setTitleCache("UNKNOWN");\r
-               return result;\r
-       }\r
-       \r
+\r
+\r
+\r
+\r
        @Override\r
-       public boolean doInvoke(TcsXmlImportState state){\r
-               \r
+       public void doInvoke(TcsXmlImportState state){\r
+\r
                logger.info("start make TaxonConcepts ...");\r
                MapWrapper<TaxonBase> taxonMap = (MapWrapper<TaxonBase>)state.getStore(ICdmIO.TAXON_STORE);\r
-               MapWrapper<TaxonNameBase<?,?>> taxonNameMap = (MapWrapper<TaxonNameBase<?,?>>)state.getStore(ICdmIO.TAXONNAME_STORE);\r
-               MapWrapper<ReferenceBase> referenceMap = (MapWrapper<ReferenceBase>)state.getStore(ICdmIO.REFERENCE_STORE);\r
+               MapWrapper<TaxonName> taxonNameMap = (MapWrapper<TaxonName>)state.getStore(ICdmIO.TAXONNAME_STORE);\r
+               MapWrapper<Reference> referenceMap = (MapWrapper<Reference>)state.getStore(ICdmIO.REFERENCE_STORE);\r
+               Map<String, CommonTaxonName> commonNameMap = new HashMap<String, CommonTaxonName>();\r
+\r
                ITaxonService taxonService = getTaxonService();\r
 \r
                ResultWrapper<Boolean> success = ResultWrapper.NewInstance(true);\r
@@ -133,114 +136,162 @@ public class TcsXmlTaxonImport  extends TcsXmlImportBase implements ICdmIO<IImpo
                TcsXmlImportConfigurator config = state.getConfig();\r
                Element elDataSet = getDataSetElement(config);\r
                Namespace tcsNamespace = config.getTcsXmlNamespace();\r
-               \r
+\r
                childName = "TaxonConcepts";\r
                obligatory = false;\r
                Element elTaxonConcepts = XmlHelp.getSingleChildElement(success, elDataSet, childName, tcsNamespace, obligatory);\r
-               \r
+\r
                String tcsElementName = "TaxonConcept";\r
                List<Element> elTaxonConceptList = elTaxonConcepts.getChildren(tcsElementName, tcsNamespace);\r
-               \r
+\r
                Set<String> synonymIdSet = makeSynonymIds(elTaxonConceptList, success);\r
                //TODO make the same for the Assertions\r
-               \r
+\r
                int i = 0;\r
-               \r
+\r
                //for each taxonConcept\r
                for (Element elTaxonConcept : elTaxonConceptList){\r
                        if ((i++ % modCount) == 0 && i > 1){ logger.info("Taxa handled: " + (i-1));}\r
-                       List<String> elementList = new ArrayList<String>();\r
-                       \r
+                       List<String> elementList = new ArrayList<>();\r
+\r
                        //create TaxonName element\r
                        String strId = elTaxonConcept.getAttributeValue("id");\r
                        //TODO\r
                        String strConceptType = elTaxonConcept.getAttributeValue("type"); //original, revision, incomplete, aggregate, nominal\r
                        String strPrimary = elTaxonConcept.getAttributeValue("primary"); //If primary='true' the concept is the first level response to a query. If 'false' the concept may be a secondary concept linked directly or indirectly to the definition of a primary concept.\r
                        String strForm = elTaxonConcept.getAttributeValue("form");  //anamorph, teleomorph, hybrid\r
-                       \r
+\r
                        childName = "Name";\r
                        obligatory = true;\r
                        Element elName = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
-                       TaxonNameBase<?,?> taxonName = makeName(elName, null, taxonNameMap, success);\r
-                       elementList.add(childName.toString());\r
-                       \r
-                       //TODO how to handle\r
-                       childName = "Rank";\r
-                       obligatory = false;\r
-                       Element elRank = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
-                       Rank rank = TcsXmlTaxonNameImport.makeRank(elRank);\r
-                       if (rank != null){\r
-                               logger.warn("Rank in TaxonIO not yet implemented");\r
-                       }\r
-                       elementList.add(childName.toString());\r
-                       \r
-                       childName = "AccordingTo";\r
-                       obligatory = false;\r
-                       Element elAccordingTo = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
-                       ReferenceBase sec = makeAccordingTo(elAccordingTo, referenceMap, success);\r
-                       elementList.add(childName.toString());\r
-                       // TODO may sec be null?\r
-                       if (sec == null){\r
-                               sec = unknownSec();\r
-                       }\r
-                       \r
-                       TaxonBase taxonBase;\r
-                       if (synonymIdSet.contains(strId)){\r
-                               taxonBase = Synonym.NewInstance(taxonName, sec);\r
+                       if (isVernacular(success, elName)){\r
+                               handleVernacularName(success, strId, elName, commonNameMap);\r
                        }else{\r
-                               taxonBase = Taxon.NewInstance(taxonName, sec);  \r
+                               TaxonName taxonName = makeScientificName(elName, null, taxonNameMap, success);\r
+                               elementList.add(childName.toString());\r
+\r
+                               //TODO how to handle\r
+                               childName = "Rank";\r
+                               obligatory = false;\r
+                               Element elRank = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
+                               Rank rank = TcsXmlTaxonNameImport.makeRank(elRank);\r
+                               if (rank != null){\r
+                                       logger.warn("Rank in TaxonIO not yet implemented");\r
+                               }\r
+                               elementList.add(childName.toString());\r
+\r
+                               childName = "AccordingTo";\r
+                               obligatory = false;\r
+                               Element elAccordingTo = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
+                               Reference sec = makeAccordingTo(elAccordingTo, referenceMap, success);\r
+                               elementList.add(childName.toString());\r
+                               // TODO may sec be null?\r
+                               if (sec == null){\r
+                                       sec = unknownSec();\r
+                               }\r
+\r
+                               TaxonBase<?> taxonBase;\r
+                               if (synonymIdSet.contains(strId)){\r
+                                       taxonBase = Synonym.NewInstance(taxonName, sec);\r
+                               }else{\r
+                                       taxonBase = Taxon.NewInstance(taxonName, sec);\r
+                               }\r
+\r
+                               childName = "TaxonRelationships";\r
+                               obligatory = false;\r
+                               Element elTaxonRelationships = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
+                               makeTaxonRelationships(taxonBase, elTaxonRelationships, success);\r
+                               elementList.add(childName.toString());\r
+\r
+                               childName = "SpecimenCircumscription";\r
+                               obligatory = false;\r
+                               Element elSpecimenCircumscription = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
+                               makeSpecimenCircumscription(taxonBase, elSpecimenCircumscription, success);\r
+                               elementList.add(childName.toString());\r
+\r
+                               childName = "CharacterCircumscription";\r
+                               obligatory = false;\r
+                               Element elCharacterCircumscription = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
+                               makeCharacterCircumscription(taxonBase, elCharacterCircumscription, success);\r
+                               elementList.add(childName.toString());\r
+\r
+\r
+                               childName = "ProviderLink";\r
+                               obligatory = false;\r
+                               Element elProviderLink = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
+                               makeProviderLink(taxonBase, elProviderLink, success);\r
+                               elementList.add(childName.toString());\r
+\r
+                               childName = "ProviderSpecificData";\r
+                               obligatory = false;\r
+                               Element elProviderSpecificData = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
+                               makeProviderSpecificData(taxonBase, elProviderSpecificData, success);\r
+                               elementList.add(childName.toString());\r
+\r
+                               testAdditionalElements(elTaxonConcept, elementList);\r
+                               ImportHelper.setOriginalSource(taxonBase, config.getSourceReference(), strId, idNamespace);\r
+                               //delete the version information\r
+\r
+                               taxonMap.put(removeVersionOfRef(strId), taxonBase);\r
                        }\r
-                       \r
-                       childName = "TaxonRelationships";\r
-                       obligatory = false;\r
-                       Element elTaxonRelationships = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
-                       makeTaxonRelationships(taxonBase, elTaxonRelationships, success);\r
-                       elementList.add(childName.toString());\r
-\r
-                       childName = "SpecimenCircumscription";\r
-                       obligatory = false;\r
-                       Element elSpecimenCircumscription = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
-                       makeSpecimenCircumscription(taxonBase, elSpecimenCircumscription, success);\r
-                       elementList.add(childName.toString());\r
-\r
-                       childName = "CharacterCircumscription";\r
-                       obligatory = false;\r
-                       Element elCharacterCircumscription = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
-                       makeCharacterCircumscription(taxonBase, elCharacterCircumscription, success);\r
-                       elementList.add(childName.toString());\r
-\r
-                       \r
-                       childName = "ProviderLink";\r
-                       obligatory = false;\r
-                       Element elProviderLink = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
-                       makeProviderLink(taxonBase, elProviderLink, success);\r
-                       elementList.add(childName.toString());\r
-                       \r
-                       childName = "ProviderSpecificData";\r
-                       obligatory = false;\r
-                       Element elProviderSpecificData = XmlHelp.getSingleChildElement(success, elTaxonConcept, childName, tcsNamespace, obligatory);\r
-                       makeProviderSpecificData(taxonBase, elProviderSpecificData, success);\r
-                       elementList.add(childName.toString());\r
-\r
-                       testAdditionalElements(elTaxonConcept, elementList);\r
-                       ImportHelper.setOriginalSource(taxonBase, config.getSourceReference(), strId, idNamespace);\r
-                       taxonMap.put(strId, taxonBase);\r
-                       \r
+\r
                }\r
+               state.setCommonNameMap(commonNameMap);\r
+\r
                //invokeRelations(source, cdmApp, deleteAll, taxonMap, referenceMap);\r
                logger.info(i + " taxa handled. Saving ...");\r
-               taxonService.saveTaxonAll(taxonMap.objects());\r
+               taxonService.save(taxonMap.objects());\r
                logger.info("end makeTaxa ...");\r
-               return success.getValue();\r
+               if (!success.getValue()){\r
+                       state.setUnsuccessfull();\r
+               }\r
+               return;\r
        }\r
-       \r
-       \r
+\r
+       private void handleVernacularName(ResultWrapper<Boolean> success, String taxonId, Element elName, Map<String, CommonTaxonName> commonNameMap) {\r
+               String name = elName.getTextNormalize();\r
+               //TODO ref\r
+\r
+               Language language = null;\r
+               String strLanguage = elName.getAttributeValue("language");\r
+               //TODO\r
+               //Language\r
+               if (strLanguage != null){\r
+                       language = Language.getLanguageByLabel(strLanguage);\r
+                       if (language == null){\r
+                               language = Language.getLanguageByDescription(strLanguage);\r
+                       }\r
+                       if (language == null){\r
+                               logger.warn("language ("+strLanguage+") not found for name " + name);\r
+                       }\r
+               }\r
+               CommonTaxonName commonName = CommonTaxonName.NewInstance(name, language);\r
+               commonNameMap.put(taxonId, commonName);\r
+\r
+               //TODO check other elements\r
+       }\r
+\r
+\r
+       private boolean isVernacular(ResultWrapper<Boolean> success, Element elName) {\r
+               try{\r
+                       String strScientific = elName.getAttributeValue("scientific");\r
+                       boolean scientific = Boolean.valueOf(strScientific);\r
+                       return ! scientific;\r
+               } catch (Exception e) {\r
+                       logger.warn("Value for scientific is not boolean");\r
+                       success.setValue(false);\r
+                       return false;\r
+               }\r
+       }\r
+\r
+\r
+\r
        private boolean hasIsSynonymRelation(Element taxonConcept, Namespace rdfNamespace){\r
                boolean result = false;\r
                if (taxonConcept == null || ! "TaxonConcept".equalsIgnoreCase(taxonConcept.getName()) ){\r
                        return false;\r
                }\r
-               \r
+\r
                String elName = "relationshipCategory";\r
                Filter filter = new ElementFilter(elName, taxonConcept.getNamespace());\r
                Iterator<Element> relationshipCategories = taxonConcept.getDescendants(filter);\r
@@ -254,97 +305,89 @@ public class TcsXmlTaxonImport  extends TcsXmlImportBase implements ICdmIO<IImpo
                }\r
                return result;\r
        }\r
-       \r
-       \r
+\r
+\r
        /**\r
         * @param elTaxonRelationships\r
         * @param success\r
         */\r
-       private TaxonNameBase<?, ?> makeName(Element elName, NomenclaturalCode code, MapWrapper<? extends TaxonNameBase<?,?>> objectMap, ResultWrapper<Boolean> success){\r
-               TaxonNameBase<?, ?> result = null;\r
+       private TaxonName makeScientificName(Element elName, NomenclaturalCode code, MapWrapper<? extends TaxonName> objectMap, ResultWrapper<Boolean> success){\r
+               TaxonName result = null;\r
                if (elName != null){\r
-                       //scientific\r
-                       try {\r
-                               String strScientific = elName.getAttributeValue("scientific");\r
-                               boolean scientific = Boolean.valueOf(strScientific);\r
-                               if (! scientific){\r
-                                       //TODO\r
-                                       logger.warn("Non scientific names not yet implemented");\r
-                                       success.setValue(false);\r
-                               }\r
-                       } catch (Exception e) {\r
-                               logger.warn("Value for scientific is not boolean");\r
-                       }\r
                        String language = elName.getAttributeValue("language");\r
-                       //TODO\r
                        //Language\r
                        if (language != null){\r
-                               logger.warn("language for name not yet implemented");   \r
-                       }\r
-                       Class<? extends IdentifiableEntity> clazz = (Class<? extends IdentifiableEntity>)NonViralName.class;\r
-                       if (code != null){\r
-                               clazz = code.getCdmClass();\r
+                               logger.warn("language for name not yet implemented. Language for scientific name should always be Latin");\r
                        }\r
-                       result = (TaxonNameBase<?,?>)makeReferenceType (elName, clazz , objectMap, success);\r
+                       Class<? extends IdentifiableEntity> clazz = TaxonName.class;\r
+                       result = (TaxonName)makeReferenceType (elName, clazz , objectMap, success);\r
                        if(result == null){\r
                                logger.warn("Name not found");\r
                                success.setValue(false);\r
+                       }else{\r
+                           if (result.getNameType() == null){\r
+                               if (code == null){\r
+                                   code = NomenclaturalCode.NonViral;\r
+                               }\r
+                               result.setNameType(code);\r
+                           }\r
                        }\r
                }else{\r
                        logger.warn("Name element is null");\r
                }\r
                return result;\r
        }\r
-       \r
-       \r
+\r
+\r
        /**\r
         * @param elTaxonRelationships\r
         * @param success\r
         */\r
-       private void makeTaxonRelationships(TaxonBase name, Element elTaxonRelationships, ResultWrapper<Boolean> success){\r
+       private void makeTaxonRelationships(TaxonBase<?> name, Element elTaxonRelationships, ResultWrapper<Boolean> success){\r
                //TaxonRelationships are handled in TcsXmlTaxonRelationsImport\r
                return;\r
        }\r
-       \r
 \r
-       \r
-       private void makeSpecimenCircumscription(TaxonBase name, Element elSpecimenCircumscription, ResultWrapper<Boolean> success){\r
+\r
+\r
+       private void makeSpecimenCircumscription(TaxonBase<?> name, Element elSpecimenCircumscription, ResultWrapper<Boolean> success){\r
                if (elSpecimenCircumscription != null){\r
                        logger.warn("makeProviderLink not yet implemented");\r
                        success.setValue(false);\r
                }\r
        }\r
-       \r
-       \r
-       private void makeCharacterCircumscription(TaxonBase name, Element elCharacterCircumscription, ResultWrapper<Boolean> success){\r
+\r
+\r
+       private void makeCharacterCircumscription(TaxonBase<?> name, Element elCharacterCircumscription, ResultWrapper<Boolean> success){\r
                if (elCharacterCircumscription != null){\r
                        logger.warn("makeProviderLink not yet implemented");\r
                        success.setValue(false);\r
                }\r
        }\r
-       \r
-       private void makeProviderLink(TaxonBase name, Element elProviderLink, ResultWrapper<Boolean> success){\r
+\r
+       private void makeProviderLink(TaxonBase<?> name, Element elProviderLink, ResultWrapper<Boolean> success){\r
                if (elProviderLink != null){\r
                        logger.warn("makeProviderLink not yet implemented");\r
                        success.setValue(false);\r
                }\r
        }\r
-       \r
 \r
-       private void makeProviderSpecificData(TaxonBase name, Element elProviderSpecificData, ResultWrapper<Boolean> success){\r
+\r
+       private void makeProviderSpecificData(TaxonBase<?> name, Element elProviderSpecificData, ResultWrapper<Boolean> success){\r
                if (elProviderSpecificData != null){\r
                        logger.warn("makeProviderLink not yet implemented");\r
                        success.setValue(false);\r
                }\r
        }\r
-       \r
-       \r
-       \r
+\r
+\r
+\r
        /* (non-Javadoc)\r
         * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
         */\r
-       protected boolean isIgnore(IImportConfigurator config){\r
-               return ! config.isDoTaxa();\r
+       @Override\r
+    protected boolean isIgnore(TcsXmlImportState state){\r
+               return ! state.getConfig().isDoTaxa();\r
        }\r
 \r
 \r