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
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
*/\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
//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
\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
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
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
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
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
}\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
}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
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
}\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