ref #1444 implement ERMS getSynonymRelationTypesByKey
authorAndreas Müller <a.mueller@bgbm.org>
Sun, 6 Oct 2019 07:53:09 +0000 (09:53 +0200)
committerAndreas Müller <a.mueller@bgbm.org>
Sun, 6 Oct 2019 07:53:09 +0000 (09:53 +0200)
cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/erms/ErmsTransformer.java

index 79e03156cfa959bae4924895726a0dc96e21c30a..ef561d8cc13113d6b75fa7300ca9fb41374ee4fd 100644 (file)
@@ -16,14 +16,19 @@ import java.util.UUID;
 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
@@ -673,5 +678,120 @@ public final class ErmsTransformer extends InputTransformerBase {
           }\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