Merge branch 'release/4.6.0'
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / tcsxml / in / TcsXmlTaxonRelationsImport.java
index 22ded72fd75028b33265d13cd3d7f2ef210a2963..963c3e3baf0f99bea6965ef29f84356796e713dd 100644 (file)
@@ -22,6 +22,7 @@ import org.jdom.Namespace;
 import org.springframework.beans.factory.annotation.Autowired;\r
 import org.springframework.stereotype.Component;\r
 \r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
 import eu.etaxonomy.cdm.common.ResultWrapper;\r
 import eu.etaxonomy.cdm.common.XmlHelp;\r
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;\r
@@ -35,12 +36,12 @@ import eu.etaxonomy.cdm.model.common.OriginalSourceType;
 import eu.etaxonomy.cdm.model.common.RelationshipTermBase;\r
 import eu.etaxonomy.cdm.model.description.CommonTaxonName;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
-import eu.etaxonomy.cdm.model.name.NonViralName;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameFactory;\r
 import eu.etaxonomy.cdm.model.reference.Reference;\r
 import eu.etaxonomy.cdm.model.taxon.Classification;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymType;\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
@@ -54,7 +55,9 @@ import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
  */\r
 @Component\r
 public class TcsXmlTaxonRelationsImport extends TcsXmlImportBase implements ICdmIO<TcsXmlImportState> {\r
-       private static final Logger logger = Logger.getLogger(TcsXmlTaxonRelationsImport.class);\r
+    private static final long serialVersionUID = 6632990505515905663L;\r
+\r
+    private static final Logger logger = Logger.getLogger(TcsXmlTaxonRelationsImport.class);\r
 \r
        private static int modCount = 30000;\r
 \r
@@ -190,21 +193,20 @@ public class TcsXmlTaxonRelationsImport extends TcsXmlImportBase implements ICdm
                                                //basionymName.getHomotypicalGroup().addTypifiedName(name);\r
                                        } else if (taxonBase instanceof Synonym){\r
                                                Synonym synonym = (Synonym) taxonBase;\r
-                                               ((Taxon)basionym).addSynonym(synonym, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF());\r
+                                               ((Taxon)basionym).addSynonym(synonym, SynonymType.HOMOTYPIC_SYNONYM_OF());\r
                                                basionym.getHomotypicGroup().setGroupBasionym(basionymName);\r
                                                taxonStore.add(basionym);\r
                                        }\r
                                }else{\r
                                        if (taxonBase instanceof Taxon){\r
                                                Synonym synonym = (Synonym) basionym;\r
-                                               ((Taxon)taxonBase).addSynonym(synonym, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF());\r
+                                               ((Taxon)taxonBase).addSynonym(synonym, SynonymType.HOMOTYPIC_SYNONYM_OF());\r
                                                taxonBase.getHomotypicGroup().setGroupBasionym(basionymName);\r
                                                taxonStore.add(taxonBase);\r
                                        } else{\r
-                                               if (((Synonym)taxonBase).getAcceptedTaxa().iterator().hasNext()){\r
-                                                       Taxon acc = ((Synonym)taxonBase).getAcceptedTaxa().iterator().next();\r
-\r
-                                                       acc.addHomotypicSynonym((Synonym)basionym, null, null);\r
+                                           Taxon acc = ((Synonym)taxonBase).getAcceptedTaxon();\r
+                                               if (acc != null){\r
+                                                       acc.addHomotypicSynonym((Synonym)basionym);\r
                                                        basionymName.getHomotypicalGroup().setGroupBasionym(basionymName);\r
                                                }\r
                                        }\r
@@ -212,7 +214,7 @@ public class TcsXmlTaxonRelationsImport extends TcsXmlImportBase implements ICdm
 \r
 \r
                        } else{\r
-                               basionymName = NonViralName.NewInstance(name.getRank());\r
+                               basionymName = TaxonNameFactory.NewNonViralInstance(name.getRank());\r
                                childName = "RelatedName";\r
                                obligatory = true;\r
                                Element elName = XmlHelp.getSingleChildElement(success, elBasionym, childName, tcsNamespace, obligatory);\r
@@ -221,14 +223,14 @@ public class TcsXmlTaxonRelationsImport extends TcsXmlImportBase implements ICdm
                                Synonym basionymSyn = Synonym.NewInstance(basionymName, unknownSec());\r
                                if (taxonBase instanceof Taxon){\r
                                        Taxon taxon = (Taxon)taxonBase;\r
-                                       taxon.addSynonym(basionymSyn, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF());\r
+                                       taxon.addSynonym(basionymSyn, SynonymType.HOMOTYPIC_SYNONYM_OF());\r
                                        taxon.getHomotypicGroup().setGroupBasionym(basionymName);\r
                                        taxonStore.add(taxon);\r
                                } else{\r
                                        Synonym syn = (Synonym) taxonBase;\r
-                                       if (!syn.getAcceptedTaxa().isEmpty()){\r
-                                               Taxon accTaxon = syn.getAcceptedTaxa().iterator().next();\r
-                                               accTaxon.addSynonym(basionymSyn, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF());\r
+                                       if (syn.getAcceptedTaxon() != null){\r
+                                               Taxon accTaxon = syn.getAcceptedTaxon();\r
+                                               accTaxon.addSynonym(basionymSyn, SynonymType.HOMOTYPIC_SYNONYM_OF());\r
                                                accTaxon.getHomotypicGroup().setGroupBasionym(basionymName);\r
                                                taxonStore.add(accTaxon);\r
                                        }\r
@@ -350,7 +352,7 @@ public class TcsXmlTaxonRelationsImport extends TcsXmlImportBase implements ICdm
                                RelationshipTermBase<?> relType = TcsXmlTransformer.tcsRelationshipType2Relationship(strRelType, isInverse);\r
 \r
                                //toTaxon (should be part of relationshipType)\r
-                               boolean isSynonym = (relType instanceof SynonymRelationshipType);\r
+                               boolean isSynonym = (relType instanceof SynonymType);\r
                                TaxonBase toTaxon = getToTaxon(elRelationship, taxonMap, state.getMissingConceptLSIDs(), isSynonym, success, state);\r
 \r
                                if (toTaxon != null && fromTaxon != null){\r
@@ -367,10 +369,8 @@ public class TcsXmlTaxonRelationsImport extends TcsXmlImportBase implements ICdm
                                                success.setValue(false);\r
                                        }else{\r
                                                Taxon taxonTo = (Taxon)toTaxon;\r
-                                               Reference citation = null;\r
-                                               String microReference = null;\r
-                                               if (relType instanceof SynonymRelationshipType){\r
-                                                       SynonymRelationshipType synRelType = (SynonymRelationshipType)relType;\r
+                                               if (relType instanceof SynonymType){\r
+                                                       SynonymType synRelType = (SynonymType)relType;\r
                                                        if (! (fromTaxon instanceof Synonym )){\r
                                                                logger.warn("TaxonBase fromTaxon is not of Type 'Synonym'. Relationship is not added.");\r
                                                                success.setValue(false);\r
@@ -379,11 +379,11 @@ public class TcsXmlTaxonRelationsImport extends TcsXmlImportBase implements ICdm
                                                                TaxonNameBase<?,?> synName = synonym.getName();\r
                                                                TaxonNameBase<?,?> accName = taxonTo.getName();\r
                                                                if (synName != null && accName != null && synName.isHomotypic(accName)\r
-                                                                                       && ( synRelType.equals(SynonymRelationshipType.SYNONYM_OF()))){\r
-                                                                       synRelType = SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF();\r
+                                                                                       && ( synRelType.equals(SynonymType.SYNONYM_OF()))){\r
+                                                                       synRelType = SynonymType.HOMOTYPIC_SYNONYM_OF();\r
                                                                }\r
                                                                if (! relationExists(taxonTo, synonym, synRelType)){\r
-                                                                       taxonTo.addSynonym(synonym, synRelType,  citation, microReference);\r
+                                                                       taxonTo.addSynonym(synonym, synRelType);\r
                                                                }else{\r
                                                                        //TODO citation, microReference\r
                                                                        //TODO different synRelTypes -> warning\r
@@ -391,7 +391,9 @@ public class TcsXmlTaxonRelationsImport extends TcsXmlImportBase implements ICdm
                                                                }\r
                                                        }\r
                                                }else if (relType instanceof TaxonRelationshipType){\r
-                                                       makeTaxonRelationship(state, (TaxonRelationshipType)relType, fromTaxon, taxonTo, citation, microReference, success);\r
+                                                       Reference citation = null;\r
+                                                       String microReference = null;\r
+                                                   makeTaxonRelationship(state, (TaxonRelationshipType)relType, fromTaxon, taxonTo, citation, microReference, success);\r
                                                }else{\r
                                                        logger.warn("Unknown Relationshiptype");\r
                                                        success.setValue(false);\r
@@ -542,7 +544,7 @@ public class TcsXmlTaxonRelationsImport extends TcsXmlImportBase implements ICdm
                                }else{\r
                                        String title = elToTaxonConcept.getTextNormalize();\r
                                        //TODO synonym?\r
-                                       TaxonNameBase<?,?> taxonName = NonViralName.NewInstance(null);\r
+                                       TaxonNameBase<?,?> taxonName = TaxonNameFactory.NewNonViralInstance(null);\r
                                        taxonName.setTitleCache(title, true);\r
                                        logger.warn("Free text related taxon seems to be bug in TCS");\r
                                        if (isSynonym){\r
@@ -559,30 +561,15 @@ public class TcsXmlTaxonRelationsImport extends TcsXmlImportBase implements ICdm
                return result;\r
        }\r
 \r
-\r
-\r
-\r
-\r
-\r
-\r
-       private boolean relationExists(Taxon taxonTo, Synonym synonym, SynonymRelationshipType synRelType){\r
-               if (synonym == null){\r
+       private boolean relationExists(Taxon taxonTo, Synonym synonym, SynonymType synRelType){\r
+               if (synonym == null || taxonTo == null\r
+                       || !taxonTo.equals(synonym.getAcceptedTaxon())){\r
                        return false;\r
-               }\r
-               if (synonym.getRelationType(taxonTo).size() > 0){\r
-                       Set<SynonymRelationshipType> relTypeList = synonym.getRelationType(taxonTo);\r
-                       if (relTypeList.contains(synRelType)){\r
-                               return true;\r
-                       }else{\r
-                               logger.warn("Taxon-Synonym pair has 2 different SynonymRelationships. This is against the rules");\r
-                               return false;\r
-                       }\r
                }else{\r
-                       return false;\r
+                   return CdmUtils.nullSafeEqual(synonym.getType(),synRelType);\r
                }\r
        }\r
 \r
-\r
        private boolean makeHomotypicSynonymRelations(Taxon aboutTaxon){\r
                TaxonNameBase<?,?> aboutName = aboutTaxon.getName();\r
                if (aboutName != null){\r
@@ -594,21 +581,15 @@ public class TcsXmlTaxonRelationsImport extends TcsXmlImportBase implements ICdm
                                }\r
                                Set<Synonym> syns = typifiedName.getSynonyms();\r
                                for(Synonym syn:syns){\r
-                                       aboutTaxon.addSynonym(syn, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF());\r
+                                       aboutTaxon.addSynonym(syn, SynonymType.HOMOTYPIC_SYNONYM_OF());\r
                                }\r
                        }\r
                }\r
                return true;\r
        }\r
 \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
-        */\r
        @Override\r
     protected boolean isIgnore(TcsXmlImportState state){\r
                return ! state.getConfig().isDoRelTaxa();\r
        }\r
-\r
-\r
-\r
 }\r