import org.apache.commons.lang.StringUtils;\r
import org.apache.log4j.Logger;\r
\r
+import eu.etaxonomy.cdm.io.common.DbImportStateBase;\r
import eu.etaxonomy.cdm.io.common.mapping.InputTransformerBase;\r
import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;\r
import eu.etaxonomy.cdm.model.common.ExtensionType;\r
import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.common.RelationshipTermBase;\r
import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;\r
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymType;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
import eu.etaxonomy.cdm.model.term.TermType;\r
import eu.etaxonomy.cdm.model.term.TermVocabulary;\r
\r
}\r
}\r
\r
+ @Override\r
+ public RelationshipTermBase<?>[] getSynonymRelationTypesByKey(String unacceptreason, DbImportStateBase<?,?> state) {\r
+\r
+ RelationshipTermBase<?>[] result = new RelationshipTermBase[4];\r
+ SynonymType synType = SynonymType.SYNONYM_OF();\r
+ TaxonRelationshipType taxonRelType = getSynTaxonRelType(state);\r
+ NameRelationshipType nameType = null;\r
+// HybridRelationshipType hybridType = null;\r
+\r
+ //according to SQL script erms300_Match_Relation&Status.sql\r
+\r
+ boolean handled = false;\r
+ if (isBlank(unacceptreason)){\r
+ handled = true; //no change\r
+ }else if (unacceptreason.matches("(synonym|superseded recombination|transferred to .*)")){\r
+ handled = true; //no change\r
+ }else{\r
+ if (unacceptreason.matches("(?i)(.*bas[iy][no].*ny.*|.*homot.*syn.*|objective syny?onym)")){\r
+ synType = SynonymType.HOMOTYPIC_SYNONYM_OF();\r
+ taxonRelType = getHomoSynTaxonRelType(state);\r
+ }else if (unacceptreason.matches("(?i)(heterotypic|subjective) synonym")){\r
+ synType = SynonymType.HETEROTYPIC_SYNONYM_OF();\r
+// taxonRelType = getHeteroSynTaxRelType(state); //do nothing\r
+ }else if (unacceptreason.matches("(?i)part.*\\s+synonym.*")){\r
+ synType = null;\r
+ taxonRelType = TaxonRelationshipType.PRO_PARTE_SYNONYM_FOR();\r
+ }else if (unacceptreason.matches("(?i)misapplied.*")){\r
+ synType = null;\r
+ taxonRelType = TaxonRelationshipType.MISAPPLIED_NAME_FOR();\r
+ }else if (unacceptreason.matches("(?i)(.*jun.*syn.*|\\(synonym\\)|reverted genus transfer)")){\r
+ handled = true; //no change\r
+ }else if (unacceptreason.matches("(?i)(currently (placed|held)|sy).*")){\r
+ handled = true; //no change\r
+ }\r
+\r
+ //name relations\r
+ if (unacceptreason.matches("(?i)(.*spell.*|lapsus .*)")){\r
+ nameType = NameRelationshipType.ORTHOGRAPHIC_VARIANT();\r
+ }else if (unacceptreason.matches("(?i).*homon.*")){\r
+ nameType = NameRelationshipType.LATER_HOMONYM();\r
+ }else if (unacceptreason.matches("(?i)(.*genus transfer.*|genus change)")){\r
+ //TODO check with above (synonym relations) reverted genus transfer\r
+ nameType = NameRelationshipType.BASIONYM();\r
+ }else if (unacceptreason.matches("(?i)(original combination|Subsequent combination)")){\r
+ nameType = NameRelationshipType.BASIONYM();\r
+ }else if (unacceptreason.matches("(?i).*bas[iy][no].*ny.*")){\r
+ nameType = NameRelationshipType.BASIONYM();\r
+ }\r
+\r
+ if(handled == true && SynonymType.SYNONYM_OF().equals(synType) ||\r
+ getSynTaxonRelType(state).equals(taxonRelType) ||nameType == null){\r
+ logger.warn("Unaccept reason not yet handled: " + unacceptreason);\r
+ }\r
+ }\r
+// update Match_RelStat set RelTaxon = 1 where tu_unacceptreason like '%bas[iy][no]%ny%'\r
+// update Match_RelStat set RelTaxon = 1 where tu_unacceptreason = 'original combination' or tu_unacceptreason = 'Subsequent combination'\r
+// update Match_RelStat set RelTaxon = 1 where tu_unacceptreason like '%genus transfer%' or tu_unacceptreason = 'genus change'\r
+// update Match_RelStat set RelTaxon = 2 where tu_unacceptreason like '%homon%'\r
+// update Match_RelStat set RelTaxon = 16 where tu_unacceptreason like '%spell%'\r
+// update Match_RelStat set RelTaxon = 16 where tu_unacceptreason like 'lapsus calami%' --AM: lapsus% should be enough\r
+\r
+// update Match_RelStat set RelTaxon = 102 where tu_unacceptreason like 'currently placed%'\r
+// update Match_RelStat set RelTaxon = 102 where tu_unacceptreason like 'currently held%'\r
+// update Match_RelStat set RelTaxon = 102 where tu_unacceptreason like 'sy%' or tu_unacceptreason like '%jun%syn%'\r
+// update Match_RelStat set RelTaxon = 102 where tu_unacceptreason = '(synonym)'\r
+// update Match_RelStat set RelTaxon = 102 where tu_unacceptreason = 'reverted genus transfer'\r
+// update Match_RelStat set RelTaxon = 103 where tu_unacceptreason like 'misapplied%'\r
+// update Match_RelStat set RelTaxon = 104 where tu_unacceptreason like 'part% synonym%'\r
+// update Match_RelStat set RelTaxon = 106 where tu_unacceptreason = 'heterotypic synonym' or tu_unacceptreason = 'subjective synonym'\r
+// update Match_RelStat set RelTaxon = 107 where tu_unacceptreason like '%homot%syn%' or tu_unacceptreason = 'objective synonym'\r
+// update Match_RelStat set RelTaxon = 107 where tu_unacceptreason like '%bas[iy][no]%ny%'\r
+//\r
+\r
+ if (synType != null){\r
+ result[0]= synType;\r
+ }\r
+ if (taxonRelType != null){\r
+ result[1]= taxonRelType;\r
+ }\r
+ if (nameType != null){\r
+ result[2]= nameType;\r
+ }\r
+// if (hybridType != null){\r
+// result[3]= hybridType;\r
+// }\r
+\r
+ return result;\r
+ }\r
+\r
+ private TaxonRelationshipType getSynTaxonRelType(DbImportStateBase<?, ?> state) {\r
+ @SuppressWarnings("unchecked")\r
+ TaxonRelationshipType result = state.getCurrentIO().getTaxonRelationshipType(state,\r
+ TaxonRelationshipType.uuidSynonymOfTaxonRelationship,\r
+ "is taxon synonym of",\r
+ "is synonym of relation used by synonym that are of class Taxon as they can not be handled differently",\r
+ null, null);\r
+ return result;\r
+ }\r
+\r
+ private TaxonRelationshipType getHomoSynTaxonRelType(DbImportStateBase<?, ?> state) {\r
+ String labelHomoRel = "Heterotypic synonym taxon relationship";\r
+ @SuppressWarnings("unchecked")\r
+ TaxonRelationshipType result = state.getCurrentIO().getTaxonRelationshipType(\r
+ state, TaxonRelationshipType.uuidHomotypicSynonymTaxonRelationship, labelHomoRel, labelHomoRel, null, null);\r
+ return result;\r
+ }\r
+\r
+ private TaxonRelationshipType getHeteroSynTaxRelType(DbImportStateBase<?, ?> state) {\r
+ String labelHeteroRel = "Heterotypic synonym taxon relationship";\r
+ @SuppressWarnings("unchecked")\r
+ TaxonRelationshipType result = state.getCurrentIO().getTaxonRelationshipType(\r
+ state, TaxonRelationshipType.uuidHeterotypicSynonymTaxonRelationship, labelHeteroRel, labelHeteroRel, null, null);\r
+ return result;\r
+ }\r
+\r
\r
}\r