+/**\r
+* Copyright (C) 2007 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.berlinModel;\r
\r
+import java.sql.ResultSet;\r
+import java.sql.SQLException;\r
+import java.util.UUID;\r
+\r
import org.apache.log4j.Logger;\r
\r
+import eu.etaxonomy.cdm.common.ResultWrapper;\r
+import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;\r
+import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;\r
+import eu.etaxonomy.cdm.model.common.RelationshipBase;\r
+import eu.etaxonomy.cdm.model.common.RelationshipTermBase;\r
+import eu.etaxonomy.cdm.model.common.Representation;\r
+import eu.etaxonomy.cdm.model.description.AbsenceTerm;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
+import eu.etaxonomy.cdm.model.description.PresenceTerm;\r
+import eu.etaxonomy.cdm.model.name.HybridRelationshipType;\r
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
import eu.etaxonomy.cdm.model.name.Rank;\r
+import eu.etaxonomy.cdm.model.name.RankClass;\r
+import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;\r
+import eu.etaxonomy.cdm.model.reference.ISectionBase;\r
+import eu.etaxonomy.cdm.model.reference.Reference;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceType;\r
import eu.etaxonomy.cdm.model.taxon.Synonym;\r
import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
import eu.etaxonomy.cdm.model.taxon.Taxon;\r
-import eu.etaxonomy.cdm.strategy.exceptions.UnknownRankException;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
+import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;\r
\r
-public final class BerlinModelTransformer {\r
+/**\r
+ * @author a.mueller\r
+ * @created 20.03.2008\r
+ * @version 1.0\r
+ */\r
+public class BerlinModelTransformer {\r
private static final Logger logger = Logger.getLogger(BerlinModelTransformer.class);\r
- \r
+ \r
+ //ranks\r
+ public static UUID uuidRankCollSpecies = UUID.fromString("e14630ee-9446-4bb4-a7b7-4c3881bc5d94");\r
+ public static UUID uuidRankProles = UUID.fromString("8810d1ba-6a34-4ae3-a355-919ccd1cd1a5");\r
+ public static UUID uuidRankRace = UUID.fromString("196dee39-cfd8-4460-8bf0-88b83da27f62");\r
+ public static UUID uuidRankSublusus = UUID.fromString("1fafa596-a8e7-4e62-a378-3cc8cb3627ca");\r
+ \r
+ //named areas\r
+ public static UUID euroMedUuid = UUID.fromString("9fe09988-58c0-4c06-8474-f660a0c50014");\r
+ \r
+ public static UUID uuidEasternEuropeanRussia = UUID.fromString("3f013375-0e0a-40c3-8a14-84c0535fab40");\r
+ public static UUID uuidSerbiaMontenegro = UUID.fromString("8926dbe6-863e-47a9-98a0-7dc9ed2c57f7");\r
+ public static UUID uuidSerbia = UUID.fromString("4ffed197-3d7e-4cd9-8984-e64b8dee9512");\r
+ public static UUID uuidLebanonSyria = UUID.fromString("0c45f250-99da-4b19-aa89-c3e56cfdf103");\r
+ public static UUID uuidUssr = UUID.fromString("a512e00a-45f3-4be5-82fa-bba8d675696f");\r
+ public static UUID uuidSicilyMalta = UUID.fromString("424d81ee-d272-4ae8-9600-0a334049cd72");\r
+ \r
+ public static UUID uuidDesertas = UUID.fromString("36f5e93e-34e8-45b5-a401-f0e0faad21cf");\r
+ public static UUID uuidMadeira = UUID.fromString("086e27ee-78ff-4236-aca9-9850850cd355");\r
+ public static UUID uuidPortoSanto = UUID.fromString("1f9ab6a0-a402-4dfe-8c5b-b1844eb4d8e5");\r
+ //azores\r
+ public static UUID uuidFlores = UUID.fromString("ef0067c2-8bbb-4e37-8462-97b03f51ba43");\r
+ public static UUID uuidCorvo = UUID.fromString("b1e6117c-2be1-43a3-9233-227dd90bdee9");\r
+ public static UUID uuidFaial = UUID.fromString("14f6dcdb-6524-4700-b80c-66424952ef2b");\r
+ public static UUID uuidGraciosa = UUID.fromString("05f93a7b-d813-4833-864f-eedbba747133");\r
+ public static UUID uuidSaoJorge = UUID.fromString("578e0ecd-b5e3-4c87-8ecc-0fc4c7e217d9");\r
+ public static UUID uuidSaoMiguel = UUID.fromString("0e2f6ad8-7afb-4f01-b134-4f71991e877a");\r
+ public static UUID uuidPico = UUID.fromString("98cc566f-4110-43d5-830f-68436a009f49");\r
+ public static UUID uuidSantaMaria = UUID.fromString("bd5e5d4a-22b7-41aa-8e58-1d1d73a9954d");\r
+ public static UUID uuidTerceira = UUID.fromString("6fc257c0-a131-41f0-b6c3-51ef9c4fa962");\r
+ //Canyry islands\r
+ public static UUID uuidGranCanaria = UUID.fromString("a0240c35-0e05-4157-8321-67ba8e31fdb9");\r
+ public static UUID uuidFuerteventura = UUID.fromString("549ce2c1-6d49-4bf3-b75d-cf3f4b5a1398");\r
+ public static UUID uuidGomera = UUID.fromString("895fab09-7478-4210-b42a-423d23c6f85e");\r
+ public static UUID uuidHierro = UUID.fromString("d137b6a5-31bc-418c-9403-f042017dc04b");\r
+ public static UUID uuidLanzaroteWithGraciosa = UUID.fromString("c9b08dc1-f301-4d9d-b447-b8744602c776");\r
+ public static UUID uuidLaPalma = UUID.fromString("fdb3f2b2-f154-4f04-9f31-240a47a0e780");\r
+ public static UUID uuidTenerife = UUID.fromString("73658c7e-a568-465e-bd84-4554fc93ca56");\r
+ //Baleares\r
+ public static UUID uuidIbizaWithFormentera = UUID.fromString("1cda2a33-3469-49d5-8e77-cb5451110519");\r
+ public static UUID uuidMallorca = UUID.fromString("a10cba04-b4b5-4a4b-b69a-fcd4b3916fec");\r
+ public static UUID uuidMenorca = UUID.fromString("9f6ede48-27f8-4270-bf4e-c97eaa86aab7");\r
+ \r
+ //russia\r
+ public static UUID uuidRussiaNorthern = UUID.fromString("c23bc1c9-a775-4426-b883-07d4d7d47eed");\r
+ public static UUID uuidRussiaBaltic = UUID.fromString("579dad44-9439-4b19-8716-ab90d8f27944");\r
+ public static UUID uuidRussiaCentral = UUID.fromString("8bbc8c6a-2ef2-4024-ad51-66fe34c70092");\r
+ public static UUID uuidRussiaSouthWest = UUID.fromString("daa5c207-5567-4690-8742-5e4d153b6a64");\r
+ public static UUID uuidRussiaSouthEast = UUID.fromString("e8516598-b529-489e-9ee8-63bbbd295c1b");\r
+ public static UUID uuidEastAegeanIslands = UUID.fromString("1c429593-c493-46e6-971a-0d70be690da8");\r
+ public static UUID uuidTurkishEastAegeanIslands = UUID.fromString("ba35dba3-ac70-41ae-81c2-2070943f44f2");\r
+ public static UUID uuidBalticStates = UUID.fromString("bf9d64f6-3183-4fa5-8e90-73090e7a2282");\r
+ public static final UUID uuidTurkey = UUID.fromString("d344ee2c-14c8-438d-b03d-11538edb1268");\r
+ public static final UUID uuidCaucasia = UUID.fromString("ebfd3fd1-3859-4e5e-95c7-f66010599d7e");\r
+ \r
+ //language areas\r
+ public static final UUID uuidUkraineAndCrimea = UUID.fromString("99d4d1c2-09f6-416e-86a3-bdde5cae52af");\r
+ public static final UUID uuidAzerbaijanNakhichevan = UUID.fromString("232fbef0-9f4a-4cab-8ac1-e14c717e9de6");\r
+ \r
+ //Marker Types\r
+ public static final UUID uuidMisappliedCommonName = UUID.fromString("25f5cfc3-16ab-4aba-a008-0db0f2cf7f9d");\r
+ \r
+ //Extension Types\r
+ public static final UUID uuidSpeciesExpertName = UUID.fromString("2e8153d2-7412-49e4-87e1-5c38f4c5153a");\r
+ public static final UUID uuidExpertName = UUID.fromString("24becb79-a90c-47d3-be35-efc87bb48fd3");\r
+ \r
+ public static final UUID DETAIL_EXT_UUID = UUID.fromString("c3959b4f-d876-4b7a-a739-9260f4cafd1c");\r
+ public static final UUID ID_IN_SOURCE_EXT_UUID = UUID.fromString("23dac094-e793-40a4-bad9-649fc4fcfd44");\r
+ \r
+ //languages\r
+ public static final UUID uuidLangMajorcan = UUID.fromString("82d696d7-cb4e-49de-ac89-63a0e12ca766");\r
+\r
//REFERENCES\r
public static int REF_ARTICLE = 1;\r
public static int REF_PART_OF_OTHER_TITLE = 2;\r
public static int REF_CD = 8;\r
public static int REF_JOURNAL = 9;\r
public static int REF_UNKNOWN = 10;\r
+ public static int REF_PRINT_SERIES = 55;\r
+ public static int REF_CONFERENCE_PROCEEDINGS = 56;\r
+ public static int REF_JOURNAL_VOLUME = 57;\r
+ \r
+\r
+ \r
+ //NameStatus\r
+ public static int NAME_ST_NOM_INVAL = 1;\r
+ public static int NAME_ST_NOM_ILLEG = 2;\r
+ public static int NAME_ST_NOM_NUD = 3;\r
+ public static int NAME_ST_NOM_REJ = 4;\r
+ public static int NAME_ST_NOM_REJ_PROP = 5;\r
+ public static int NAME_ST_NOM_UTIQUE_REJ = 6;\r
+ public static int NAME_ST_NOM_UTIQUE_REJ_PROP = 7;\r
+ public static int NAME_ST_NOM_CONS = 8;\r
+ public static int NAME_ST_NOM_CONS_PROP = 9;\r
+ public static int NAME_ST_ORTH_CONS = 10;\r
+ public static int NAME_ST_ORTH_CONS_PROP = 11;\r
+ public static int NAME_ST_NOM_SUPERFL = 12;\r
+ public static int NAME_ST_NOM_AMBIG = 13;\r
+ public static int NAME_ST_NOM_PROVIS = 14;\r
+ public static int NAME_ST_NOM_DUB = 15;\r
+ public static int NAME_ST_NOM_NOV = 16;\r
+ public static int NAME_ST_NOM_CONFUS = 17;\r
+ public static int NAME_ST_NOM_ALTERN = 18;\r
+ public static int NAME_ST_COMB_INVAL = 19;\r
+ \r
+ \r
+ //NameRelationShip\r
+ public static int NAME_REL_IS_BASIONYM_FOR = 1;\r
+ public static int NAME_REL_IS_LATER_HOMONYM_OF = 2;\r
+ public static int NAME_REL_IS_REPLACED_SYNONYM_FOR = 3;\r
+ public static int NAME_REL_IS_VALIDATION_OF = 4;\r
+ public static int NAME_REL_IS_LATER_VALIDATION_OF = 5;\r
+ public static int NAME_REL_IS_TYPE_OF = 6;\r
+ public static int NAME_REL_IS_CONSERVED_TYPE_OF =7;\r
+ public static int NAME_REL_IS_REJECTED_TYPE_OF = 8;\r
+ public static int NAME_REL_IS_FIRST_PARENT_OF = 9;\r
+ public static int NAME_REL_IS_SECOND_PARENT_OF = 10;\r
+ public static int NAME_REL_IS_FEMALE_PARENT_OF = 11;\r
+ public static int NAME_REL_IS_MALE_PARENT_OF = 12;\r
+ public static int NAME_REL_IS_CONSERVED_AGAINST =13;\r
+ public static int NAME_REL_IS_REJECTED_IN_FAVOUR_OF = 14;\r
+ public static int NAME_REL_IS_TREATED_AS_LATER_HOMONYM_OF = 15;\r
+ public static int NAME_REL_IS_ORTHOGRAPHIC_VARIANT_OF = 16;\r
+ public static int NAME_REL_IS_ALTERNATIVE_NAME_FOR = 17;\r
+ public static int NAME_REL_HAS_SAME_TYPE_AS = 18;\r
+ public static int NAME_REL_IS_LECTOTYPE_OF = 61;\r
+ public static int NAME_REL_TYPE_NOT_DESIGNATED = 62;\r
+ \r
+ //NameFacts\r
+ public static String NAME_FACT_PROTOLOGUE = "Protologue";\r
+ public static String NAME_FACT_ALSO_PUBLISHED_IN = "Also published in";\r
+ public static String NAME_FACT_BIBLIOGRAPHY = "Bibliography";\r
\r
//TaxonRelationShip\r
- public static int IS_INCLUDED_IN = 1;\r
- public static int IS_SYNONYM_OF = 2;\r
- public static int IS_MISAPPLIED_NAME_OF = 3;\r
- public static int IS_HOMOTYPIC_SYNONYM_OF = 6;\r
- public static int IS_HETEROTYPIC_SYNONYM_OF = 7;\r
+ public static int TAX_REL_IS_INCLUDED_IN = 1;\r
+ public static int TAX_REL_IS_SYNONYM_OF = 2;\r
+ public static int TAX_REL_IS_MISAPPLIED_NAME_OF = 3;\r
+ public static int TAX_REL_IS_PROPARTE_SYN_OF = 4;\r
+ public static int TAX_REL_IS_PARTIAL_SYN_OF = 5;\r
+ public static int TAX_REL_IS_HETEROTYPIC_SYNONYM_OF = 6;\r
+ public static int TAX_REL_IS_HOMOTYPIC_SYNONYM_OF = 7;\r
+ public static int TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF = 101;\r
+ public static int TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF = 102;\r
+ public static int TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF = 103;\r
+ public static int TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF = 104;\r
\r
\r
+\r
+ //TaxonStatus\r
+ public static int T_STATUS_ACCEPTED = 1;\r
+ public static int T_STATUS_SYNONYM = 2;\r
+ public static int T_STATUS_PARTIAL_SYN = 3;\r
+ public static int T_STATUS_PRO_PARTE_SYN = 4;\r
+ public static int T_STATUS_UNRESOLVED = 5;\r
+ public static int T_STATUS_ORPHANED = 6;\r
\r
- /** Creates an cdm-Rank by the berlinModel rankId\r
- * @param doubt doubtfulFalg\r
- * @return "true" if doubt = "a"\r
- */\r
- public static Rank rankId2Rank (int rankId) throws UnknownRankException{\r
- switch (rankId){\r
- case 1: return Rank.KINGDOM();\r
- case 3: return Rank.SUBKINGDOM();\r
- case 5: return Rank.PHYLUM();\r
- case 7: return Rank.SUBPHYLUM();\r
- case 8: return Rank.DIVISION();\r
- case 9: return Rank.SUBDIVISION();\r
- case 10: return Rank.CLASS();\r
- case 13: return Rank.SUBCLASS();\r
- case 16: return Rank.SUPERORDER();\r
- case 18: return Rank.ORDER();\r
- case 19: return Rank.SUBORDER();\r
- case 20: return Rank.FAMILY();\r
- case 25: return Rank.SUBFAMILY();\r
- case 30: return Rank.TRIBE();\r
- case 35: return Rank.SUBTRIBE();\r
- case 40: return Rank.GENUS();\r
- case 42: return Rank.SUBGENUS();\r
- case 45: return Rank.SECTION();\r
- case 47: return Rank.SUBSECTION();\r
- case 50: return Rank.SERIES();\r
- case 52: return Rank.SUBSERIES();\r
- case 58: return Rank.SPECIESAGGREGATE();\r
- //FIXME\r
- //case 59: return Rank.SPECIESAGGREGATE();\r
- case 60: return Rank.SPECIES();\r
- case 65: return Rank.SUBSPECIES();\r
- case 68: return Rank.CONVAR();\r
- case 70: return Rank.VARIETY();\r
- case 73: return Rank.SUBVARIETY();\r
- case 80: return Rank.FORM();\r
- case 82: return Rank.SUBFORM();\r
- case 84: return Rank.SPECIALFORM();\r
- case 98: return Rank.INFRAGENERICTAXON();\r
- case 99: return Rank.INFRASPECIFICTAXON();\r
+ \r
+ //Facts\r
+ public static int FACT_DESCRIPTION = 1;\r
+ public static int FACT_GROWTH_FORM = 2;\r
+ public static int FACT_HARDINESS = 3;\r
+ public static int FACT_ECOLOGY = 4;\r
+ public static int FACT_PHENOLOGY = 5;\r
+ public static int FACT_KARYOLOGY = 6;\r
+ public static int FACT_ILLUSTRATION = 7;\r
+ public static int FACT_IDENTIFICATION = 8;\r
+ public static int FACT_OBSERVATION = 9;\r
+ public static int FACT_DISTRIBUTION_EM = 10;\r
+ public static int FACT_DISTRIBUTION_WORLD = 11;\r
+ //E+M\r
+ public static final UUID uuidFeatureMaps = UUID.fromString("8367730e-f3c3-4361-8360-a2057e4295ed");\r
+ public static final UUID uuidFeatureConservationStatus = UUID.fromString("a32f33cd-1966-4a22-986c-94c5e688bbd1");\r
+ public static final UUID uuidFeatureUse = UUID.fromString("199bbbd8-2db6-4335-b454-2e92ae02b699");\r
+ public static final UUID uuidFeatureComments = UUID.fromString("31cc2b92-5cad-44e9-b50f-b8af591a527c");\r
+ public static final UUID uuidFeatureDistrEM = UUID.fromString("a5ba7e7f-ca7f-4f50-afc7-73e76b3231d4");\r
+ public static final UUID uuidFeatureDistrWorld = UUID.fromString("e4e24080-7017-47e6-924e-d2560fa68fb8");\r
+ public static final UUID uuidFeatureEditorBrackets = UUID.fromString("b3b5bc1a-7ba8-4a39-9c0d-63ba599eb5d8");\r
+ public static final UUID uuidFeatureEditorParenthesis = UUID.fromString("6ee10a2e-ff02-4cf4-a520-89630edc5b44");\r
+ public static final UUID uuidFeatureInedited = UUID.fromString("c93e2968-bc52-4165-9755-ce37611faf01");\r
+ public static final UUID uuidFeatureCommentsEditing = UUID.fromString("7a155021-158a-48bb-81d0-9a72b718e2de");\r
+ \r
+ \r
+ \r
+ public static UUID uuidNomStatusCombIned = UUID.fromString("dde8a2e7-bf9e-42ec-b186-d5bde9c9c128");\r
+ public static UUID uuidNomStatusSpNovIned = UUID.fromString("1a359ca1-9364-43bc-93e4-834bdcd52b72");\r
+ public static UUID uuidNomStatusNomOrthCons = UUID.fromString("0f838183-ffa0-4014-928e-0e3a27eb3918");\r
+ \r
+ static NomenclaturalStatusType nomStatusCombIned;\r
+ static NomenclaturalStatusType nomStatusSpNovIned;\r
+ static NomenclaturalStatusType nomStatusNomOrthCons;\r
+ \r
+ public static NomenclaturalStatusType nomStatusTypeAbbrev2NewNomStatusType(String nomStatus){\r
+ NomenclaturalStatusType result = null;\r
+ if (nomStatus == null){\r
+ return null;\r
+ }else if (nomStatus.equalsIgnoreCase("comb. ined.")){\r
+ if (nomStatusCombIned == null){\r
+ nomStatusCombIned = new NomenclaturalStatusType();\r
+ Representation representation = Representation.NewInstance("comb. ined.", "comb. ined.", "comb. ined.", Language.LATIN());\r
+ nomStatusCombIned.addRepresentation(representation);\r
+ nomStatusCombIned.setUuid(uuidNomStatusCombIned);\r
+ NomenclaturalStatusType.ALTERNATIVE().getVocabulary().addTerm(nomStatusCombIned);\r
+ }\r
+ result = nomStatusCombIned;\r
+ }else if (nomStatus.equalsIgnoreCase("sp. nov. ined.")){\r
+ if (nomStatusSpNovIned == null){\r
+ nomStatusSpNovIned = new NomenclaturalStatusType();\r
+ Representation representation = Representation.NewInstance("sp. nov. ined.", "sp. nov. ined.", "sp. nov. ined.", Language.LATIN());\r
+ nomStatusSpNovIned.addRepresentation(representation);\r
+ nomStatusSpNovIned.setUuid(uuidNomStatusSpNovIned);\r
+ NomenclaturalStatusType.ALTERNATIVE().getVocabulary().addTerm(nomStatusSpNovIned);\r
+ }\r
+ result = nomStatusSpNovIned;\r
+ }else if (nomStatus.equalsIgnoreCase("nom. & orth. cons.")){\r
+ if (nomStatusNomOrthCons == null){\r
+ nomStatusNomOrthCons = new NomenclaturalStatusType();\r
+ Representation representation = Representation.NewInstance("nom. & orth. cons.", "nom. & orth. cons.", "nom. & orth. cons.", Language.LATIN());\r
+ nomStatusNomOrthCons.addRepresentation(representation);\r
+ nomStatusNomOrthCons.setUuid(uuidNomStatusNomOrthCons);\r
+ NomenclaturalStatusType.ALTERNATIVE().getVocabulary().addTerm(nomStatusNomOrthCons);\r
+ }\r
+ result = nomStatusNomOrthCons;\r
+ }\r
+ return result;\r
+ }\r
+\r
+ \r
+ public static NomenclaturalStatus nomStatusFkToNomStatus(int nomStatusFk, String nomStatusLabel) throws UnknownCdmTypeException{\r
+ if (nomStatusFk == NAME_ST_NOM_INVAL){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.INVALID());\r
+ }else if (nomStatusFk == NAME_ST_NOM_ILLEG){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.ILLEGITIMATE());\r
+ }else if (nomStatusFk == NAME_ST_NOM_NUD){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.NUDUM());\r
+ }else if (nomStatusFk == NAME_ST_NOM_REJ){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.REJECTED());\r
+ }else if (nomStatusFk == NAME_ST_NOM_REJ_PROP){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.REJECTED_PROP());\r
+ }else if (nomStatusFk == NAME_ST_NOM_UTIQUE_REJ){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.UTIQUE_REJECTED());\r
+ }else if (nomStatusFk == NAME_ST_NOM_UTIQUE_REJ_PROP){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.UTIQUE_REJECTED_PROP());\r
+ }else if (nomStatusFk == NAME_ST_NOM_CONS){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONSERVED());\r
+ }else if (nomStatusFk == NAME_ST_NOM_CONS_PROP){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONSERVED_PROP());\r
+ }else if (nomStatusFk == NAME_ST_ORTH_CONS){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.ORTHOGRAPHY_CONSERVED());\r
+ }else if (nomStatusFk == NAME_ST_ORTH_CONS_PROP){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.ORTHOGRAPHY_CONSERVED_PROP());\r
+ }else if (nomStatusFk == NAME_ST_NOM_SUPERFL){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.SUPERFLUOUS());\r
+ }else if (nomStatusFk == NAME_ST_NOM_AMBIG){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.AMBIGUOUS());\r
+ }else if (nomStatusFk == NAME_ST_NOM_PROVIS){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.PROVISIONAL());\r
+ }else if (nomStatusFk == NAME_ST_NOM_DUB){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.DOUBTFUL());\r
+ }else if (nomStatusFk == NAME_ST_NOM_NOV){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.NOVUM());\r
+ }else if (nomStatusFk == NAME_ST_NOM_CONFUS){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONFUSUM());\r
+ }else if (nomStatusFk == NAME_ST_NOM_ALTERN){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.ALTERNATIVE());\r
+ }else if (nomStatusFk == NAME_ST_COMB_INVAL){\r
+ return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.COMBINATION_INVALID());\r
+ }else {\r
+ NomenclaturalStatusType statusType = nomStatusTypeAbbrev2NewNomStatusType(nomStatusLabel);\r
+ NomenclaturalStatus result = NomenclaturalStatus.NewInstance(statusType);\r
+ if (result != null){\r
+ return result;\r
+ }\r
+ throw new UnknownCdmTypeException("Unknown NomenclaturalStatus (id=" + Integer.valueOf(nomStatusFk).toString() + ")");\r
+ }\r
+ }\r
+ \r
+ \r
+ //TypeDesignation\r
+ public static SpecimenTypeDesignationStatus typeStatusId2TypeStatus (int typeStatusId) throws UnknownCdmTypeException{\r
+ switch (typeStatusId){\r
+ case 0: return null;\r
+ case 1: return SpecimenTypeDesignationStatus.HOLOTYPE();\r
+ case 2: return SpecimenTypeDesignationStatus.LECTOTYPE();\r
+ case 3: return SpecimenTypeDesignationStatus.NEOTYPE();\r
+ case 4: return SpecimenTypeDesignationStatus.EPITYPE();\r
+ case 5: return SpecimenTypeDesignationStatus.ISOLECTOTYPE();\r
+ case 6: return SpecimenTypeDesignationStatus.ISONEOTYPE();\r
+ case 7: return SpecimenTypeDesignationStatus.ISOTYPE();\r
+ case 8: return SpecimenTypeDesignationStatus.PARANEOTYPE();\r
+ case 9: return SpecimenTypeDesignationStatus.PARATYPE();\r
+ case 10: return SpecimenTypeDesignationStatus.SECOND_STEP_LECTOTYPE();\r
+ case 11: return SpecimenTypeDesignationStatus.SECOND_STEP_NEOTYPE();\r
+ case 12: return SpecimenTypeDesignationStatus.SYNTYPE();\r
+ case 21: return SpecimenTypeDesignationStatus.ICONOTYPE();\r
+ case 22: return SpecimenTypeDesignationStatus.PHOTOTYPE();\r
default: {\r
- throw new UnknownRankException("Unknown Rank id" + Integer.valueOf(rankId).toString());\r
+ throw new UnknownCdmTypeException("Unknown TypeDesignationStatus (id=" + Integer.valueOf(typeStatusId).toString() + ")");\r
}\r
+ }\r
+ }\r
+ \r
+ //TypeDesignation\r
+ public static TaxonRelationshipType taxonRelId2TaxonRelType (int relTaxonTypeId, ResultWrapper<Boolean> isInverse) throws UnknownCdmTypeException{\r
+ isInverse.setValue(false);\r
+ switch (relTaxonTypeId){\r
+ case 0: return null;\r
+ case 11: return TaxonRelationshipType.CONGRUENT_TO();\r
+ case 12: isInverse.setValue(true); return TaxonRelationshipType.INCLUDES();\r
+ case 13: isInverse.setValue(true); return TaxonRelationshipType.CONGRUENT_OR_INCLUDES();\r
+ case 14: return TaxonRelationshipType.INCLUDES();\r
+ case 15: return TaxonRelationshipType.CONGRUENT_OR_INCLUDES();\r
+ case 16: return TaxonRelationshipType.INCLUDED_OR_INCLUDES();\r
+ case 17: return TaxonRelationshipType.CONGRUENT_OR_INCLUDED_OR_INCLUDES();\r
+ case 18: return TaxonRelationshipType.OVERLAPS();\r
+ case 19: return TaxonRelationshipType.CONGRUENT_OR_OVERLAPS();\r
+ case 20: isInverse.setValue(true); return TaxonRelationshipType.INCLUDES_OR_OVERLAPS();\r
+ case 21: isInverse.setValue(true); return TaxonRelationshipType.CONGRUENT_OR_INCLUDES_OR_OVERLAPS();\r
+ case 22: return TaxonRelationshipType.INCLUDES_OR_OVERLAPS();\r
+ case 23: return TaxonRelationshipType.CONGRUENT_OR_INCLUDES_OR_OVERLAPS();\r
+ case 24: return TaxonRelationshipType.INCLUDED_OR_INCLUDES_OR_OVERLAPS();\r
+ \r
+ case 26: return TaxonRelationshipType.EXCLUDES();\r
+ \r
+ //TODO other relationshipTypes\r
+ \r
+ case 40: return TaxonRelationshipType.NOT_CONGRUENT_TO();\r
+ \r
+ //FIXME doubtful\r
+ case 43: return TaxonRelationshipType.CONGRUENT_TO();\r
+ default: {\r
+ throw new UnknownCdmTypeException("Unknown TypeDesignationStatus (id=" + Integer.valueOf(relTaxonTypeId).toString() + ")");\r
+ }\r
+ }\r
+ }\r
+ \r
+ //TypeDesignation\r
+ public static HybridRelationshipType relNameId2HybridRel (int relNameId) throws UnknownCdmTypeException{\r
+ switch (relNameId){\r
+ case 0: return null;\r
+ case 9: return HybridRelationshipType.FIRST_PARENT();\r
+ case 10: return HybridRelationshipType.SECOND_PARENT();\r
+ case 11: return HybridRelationshipType.FEMALE_PARENT();\r
+ case 12: return HybridRelationshipType.MALE_PARENT();\r
+ default: {\r
+ throw new UnknownCdmTypeException("Unknown HybridRelationshipType (id=" + Integer.valueOf(relNameId).toString() + ")");\r
+ }\r
+ }\r
+ }\r
+ \r
+ //OccStatus\r
+ public static PresenceAbsenceTermBase<?> occStatus2PresenceAbsence (int occStatusId) throws UnknownCdmTypeException{\r
+ switch (occStatusId){\r
+ case 0: return null;\r
+ case 110: return AbsenceTerm.CULTIVATED_REPORTED_IN_ERROR();\r
+ case 120: return PresenceTerm.CULTIVATED();\r
+ case 210: return AbsenceTerm.INTRODUCED_REPORTED_IN_ERROR();\r
+ case 220: return PresenceTerm.INTRODUCED_PRESENCE_QUESTIONABLE();\r
+ case 230: return AbsenceTerm.INTRODUCED_FORMERLY_INTRODUCED();\r
+ case 240: return PresenceTerm.INTRODUCED_DOUBTFULLY_INTRODUCED();\r
+ case 250: return PresenceTerm.INTRODUCED();\r
+ case 260: return PresenceTerm.INTRODUCED_UNCERTAIN_DEGREE_OF_NATURALISATION();\r
+ case 270: return PresenceTerm.INTRODUCED_ADVENTITIOUS();\r
+ case 280: return PresenceTerm.INTRODUCED_NATURALIZED();\r
+ case 310: return AbsenceTerm.NATIVE_REPORTED_IN_ERROR();\r
+ case 320: return PresenceTerm.NATIVE_PRESENCE_QUESTIONABLE();\r
+ case 330: return AbsenceTerm.NATIVE_FORMERLY_NATIVE();\r
+ case 340: return PresenceTerm.NATIVE_DOUBTFULLY_NATIVE();\r
+ case 350: return PresenceTerm.NATIVE();\r
+ case 999: {\r
+ logger.info("endemic for EM can not be transformed in legal status. Used 'PRESENT' instead");\r
+ //TODO preliminary\r
+ return PresenceTerm.PRESENT();\r
+ }\r
+ default: {\r
+ throw new UnknownCdmTypeException("Unknown occurrence status (id=" + Integer.valueOf(occStatusId).toString() + ")");\r
+ }\r
+ }\r
+ }\r
+ \r
+ \r
+ //FactCategory\r
+ public static Feature factCategory2Feature (int factCategoryId) throws UnknownCdmTypeException{\r
+ switch (factCategoryId){\r
+ case 0: return null;\r
+ case 1: return Feature.DESCRIPTION();\r
+ case 4: return Feature.ECOLOGY();\r
+ case 5: return Feature.PHENOLOGY();\r
+ case 12: return Feature.COMMON_NAME();\r
+ case 13: return Feature.OCCURRENCE();\r
+ case 99: return Feature.CITATION();\r
+ default: {\r
+ throw new UnknownCdmTypeException("Unknown FactCategory (id=" + Integer.valueOf(factCategoryId).toString() + ")");\r
+ }\r
+ }\r
+ }\r
+ \r
+ public static UUID getFeatureUuid(String key) throws UndefinedTransformerMethodException {\r
+ if (key == null){\r
+ return null;\r
+ }else if (key.equalsIgnoreCase("14-Maps")){ return uuidFeatureMaps;\r
+ }else if (key.equalsIgnoreCase("301-Conservation Status")){ return uuidFeatureConservationStatus;\r
+ }else if (key.equalsIgnoreCase("302-Use")){ return uuidFeatureUse;\r
+ }else if (key.equalsIgnoreCase("303-Comments")){ return uuidFeatureComments;\r
+ \r
+ }else if (key.equalsIgnoreCase("10-general distribution (Euro+Med)")){ return uuidFeatureDistrEM;\r
+ }else if (key.equalsIgnoreCase("11-general distribution (world)")){ return uuidFeatureDistrWorld;\r
+ }else if (key.equalsIgnoreCase("250-Editor_Brackets")){ return uuidFeatureEditorBrackets;\r
+ }else if (key.equalsIgnoreCase("251-Editor_Parenthesis")){ return uuidFeatureEditorParenthesis;\r
+ }else if (key.equalsIgnoreCase("252-Inedited")){ return uuidFeatureInedited;\r
+ }else if (key.equalsIgnoreCase("253-Comments on editing process")){ return uuidFeatureCommentsEditing;\r
+ \r
+ }else{\r
+ return null;\r
+ }\r
+ }\r
+ \r
+ \r
+ static Rank collSpeciesRank;\r
+ /**\r
+ * @param i\r
+ * @return\r
+ */\r
+ private static Rank rankId2NewRank(Integer rankId, boolean switchRank) {\r
+ Rank result = null;\r
+ if (rankId == null){\r
+ return null;\r
+ }else if (rankId == 57){\r
+ \r
+ if (collSpeciesRank == null){\r
+ collSpeciesRank = Rank.NewInstance(RankClass.SpeciesGroup, "Collective species", "Coll. species", "coll.");\r
+ collSpeciesRank.setUuid(uuidRankCollSpecies);\r
+ OrderedTermVocabulary<Rank> voc = (OrderedTermVocabulary<Rank>)Rank.SPECIES().getVocabulary();\r
+ voc.addTermBelow(collSpeciesRank, Rank.SPECIESGROUP());\r
+ }\r
+ result = collSpeciesRank;\r
+ }\r
+ return result;\r
+ }\r
+\r
+ \r
+ public static Rank rankId2Rank (ResultSet rs, boolean useUnknown, boolean switchSpeciesGroup) throws UnknownCdmTypeException{\r
+ Rank result;\r
+ try {\r
+ int rankId = rs.getInt("rankFk");\r
+ \r
+ String abbrev = rs.getString("rankAbbrev");\r
+ String rankName = rs.getString("rank");\r
+ if (logger.isDebugEnabled()){logger.debug(rankId);}\r
+ if (logger.isDebugEnabled()){logger.debug(abbrev);}\r
+ if (logger.isDebugEnabled()){logger.debug(rankName);}\r
+ \r
+ if (switchSpeciesGroup){\r
+ if (rankId == 59){\r
+ rankId = 57;\r
+ }else if (rankId == 57){\r
+ rankId = 59;\r
+ }\r
+ }\r
+ try {\r
+ result = Rank.getRankByNameOrAbbreviation(abbrev);\r
+ } catch (UnknownCdmTypeException e) {\r
+ try {\r
+ result = Rank.getRankByNameOrAbbreviation(rankName);\r
+ } catch (UnknownCdmTypeException e1) {\r
+ switch (rankId){\r
+ case 0: return null;\r
+ case 1: return Rank.KINGDOM();\r
+ case 3: return Rank.SUBKINGDOM();\r
+ case 5: return Rank.PHYLUM();\r
+ case 7: return Rank.SUBPHYLUM();\r
+ case 8: return Rank.DIVISION();\r
+ case 9: return Rank.SUBDIVISION();\r
+ case 10: return Rank.CLASS();\r
+ case 13: return Rank.SUBCLASS();\r
+ case 16: return Rank.SUPERORDER();\r
+ case 18: return Rank.ORDER();\r
+ case 19: return Rank.SUBORDER();\r
+ case 20: return Rank.FAMILY();\r
+ case 25: return Rank.SUBFAMILY();\r
+ case 30: return Rank.TRIBE();\r
+ case 35: return Rank.SUBTRIBE();\r
+ case 40: return Rank.GENUS();\r
+ case 42: return Rank.SUBGENUS();\r
+ case 45: return Rank.SECTION_BOTANY();\r
+ case 47: return Rank.SUBSECTION_BOTANY();\r
+ case 50: return Rank.SERIES();\r
+ case 52: return Rank.SUBSERIES();\r
+ case 58: return Rank.SPECIESAGGREGATE();\r
+ case 59: return Rank.SPECIESGROUP();\r
+ case 60: return Rank.SPECIES();\r
+ case 61: return Rank.GREX();\r
+ case 65: return Rank.SUBSPECIES();\r
+ case 68: return Rank.CONVAR();\r
+ case 70: return Rank.VARIETY();\r
+ case 73: return Rank.SUBVARIETY();\r
+ case 80: return Rank.FORM();\r
+ case 82: return Rank.SUBFORM();\r
+ case 84: return Rank.SPECIALFORM();\r
+ case 98: return Rank.INFRAGENERICTAXON();\r
+ case 99: return Rank.INFRASPECIFICTAXON();\r
+ \r
+ case 750: return Rank.SUPERCLASS();\r
+ case 780: return Rank.INFRACLASS();\r
+ case 820: return Rank.INFRAORDER();\r
+ \r
+ case 830: return Rank.SUPERFAMILY();\r
+ \r
+ default: {\r
+ Rank rank = rankId2NewRank(57, switchSpeciesGroup);\r
+ if (rank != null){\r
+ return rank;\r
+ }\r
+ if (useUnknown){\r
+ logger.error("Rank unknown: " + rankId + ". Created UNKNOWN_RANK");\r
+ return Rank.UNKNOWN_RANK();\r
+ }\r
+ throw new UnknownCdmTypeException("Unknown Rank id" + Integer.valueOf(rankId).toString());\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return result;\r
+ } catch (SQLException e) {\r
+ e.printStackTrace();\r
+ logger.warn("Exception occurred. Created UNKNOWN_RANK instead");\r
+ return Rank.UNKNOWN_RANK();\r
} \r
}\r
+\r
+\r
+ public static Integer rank2RankId (Rank rank){\r
+ if (rank == null){\r
+ return null;\r
+ }\r
+ else if (rank.equals(Rank.KINGDOM())){ return 1;}\r
+ else if (rank.equals(Rank.SUBKINGDOM())){ return 3;}\r
+ else if (rank.equals(Rank.PHYLUM())){ return 5;}\r
+ else if (rank.equals(Rank.SUBPHYLUM())){ return 7;}\r
+ else if (rank.equals(Rank.DIVISION())){ return 8;}\r
+ else if (rank.equals(Rank.SUBDIVISION())){ return 9;}\r
+ \r
+ else if (rank.equals(Rank.CLASS())){ return 10;}\r
+ else if (rank.equals(Rank.SUBCLASS())){ return 13;}\r
+ else if (rank.equals(Rank.SUPERORDER())){ return 16;}\r
+ else if (rank.equals(Rank.ORDER())){ return 18;}\r
+ else if (rank.equals(Rank.SUBORDER())){ return 19;}\r
+ else if (rank.equals(Rank.FAMILY())){ return 20;}\r
+ else if (rank.equals(Rank.SUBFAMILY())){ return 25;}\r
+ else if (rank.equals(Rank.TRIBE())){ return 30;}\r
+ else if (rank.equals(Rank.SUBTRIBE())){ return 35;}\r
+ else if (rank.equals(Rank.GENUS())){ return 40;}\r
+ else if (rank.equals(Rank.SUBGENUS())){ return 42;}\r
+ else if (rank.equals(Rank.SECTION_BOTANY())){ return 45;}\r
+ else if (rank.equals(Rank.SUBSECTION_BOTANY())){ return 47;}\r
+ else if (rank.equals(Rank.SERIES())){ return 50;}\r
+ else if (rank.equals(Rank.SUBSERIES())){ return 52;}\r
+ else if (rank.equals(Rank.SPECIESAGGREGATE())){ return 58;}\r
+ //TODO\r
+ // else if (rank.equals(Rank.XXX())){ return 59;}\r
+ else if (rank.equals(Rank.SPECIES())){ return 60;}\r
+ else if (rank.equals(Rank.SUBSPECIES())){ return 65;}\r
+ else if (rank.equals(Rank.CONVAR())){ return 68;}\r
+ else if (rank.equals(Rank.VARIETY())){ return 70;}\r
+ else if (rank.equals(Rank.SUBVARIETY())){ return 73;}\r
+ else if (rank.equals(Rank.FORM())){ return 80;}\r
+ else if (rank.equals(Rank.SUBFORM())){ return 82;}\r
+ else if (rank.equals(Rank.SPECIALFORM())){ return 84;}\r
+ else if (rank.equals(Rank.INFRAGENERICTAXON())){ return 98;}\r
+ else if (rank.equals(Rank.INFRASPECIFICTAXON())){ return 99;}\r
+ \r
+ else if (rank.equals(Rank.SUPERCLASS())){ return 750;}\r
+ else if (rank.equals(Rank.INFRACLASS())){ return 780;}\r
+ else if (rank.equals(Rank.INFRAORDER())){ return 820;}\r
+ else if (rank.equals(Rank.SUPERFAMILY())){ return 830;}\r
+ \r
+ else {\r
+ //TODO Exception\r
+ logger.warn("Rank not yet supported in Berlin Model: "+ rank.getLabel());\r
+ return null;\r
+ }\r
+ }\r
+ \r
+ public static Integer textData2FactCategoryFk (Feature feature){\r
+ if (feature == null){return null;}\r
+ if (feature.equals(Feature.DESCRIPTION())){\r
+ return 1;\r
+ }else if (feature.equals(Feature.ECOLOGY())){\r
+ return 4;\r
+ }else if (feature.equals(Feature.PHENOLOGY())){\r
+ return 5;\r
+ }else if (feature.equals(Feature.COMMON_NAME())){\r
+ return 12;\r
+ }else if (feature.equals(Feature.OCCURRENCE())){\r
+ return 13;\r
+ }else if (feature.equals(Feature.CITATION())){\r
+ return 99;\r
+ }else{\r
+ logger.debug("Unknown Feature.");\r
+ return null;\r
+ }\r
+ }\r
+ \r
+ \r
+ public static Integer taxonBase2statusFk (TaxonBase<?> taxonBase){\r
+ if (taxonBase == null){return null;} \r
+ if (taxonBase.isInstanceOf(Taxon.class)){\r
+ return T_STATUS_ACCEPTED;\r
+ }else if (taxonBase.isInstanceOf(Synonym.class)){\r
+ return T_STATUS_SYNONYM;\r
+ }else{\r
+ logger.warn("Unknown ");\r
+ return T_STATUS_UNRESOLVED;\r
+ }\r
+ //TODO \r
+// public static int T_STATUS_PARTIAL_SYN = 3;\r
+// public static int T_STATUS_PRO_PARTE_SYN = 4;\r
+// public static int T_STATUS_UNRESOLVED = 5;\r
+// public static int T_STATUS_ORPHANED = 6;\r
+ }\r
+ \r
+ public static Integer ref2refCategoryId (Reference<?> ref){\r
+ if (ref == null){\r
+ return null;\r
+ }\r
+ else if (ref.getType().equals(ReferenceType.Article)){ return REF_ARTICLE;}\r
+ else if (ref instanceof ISectionBase){ return REF_PART_OF_OTHER_TITLE;}\r
+ else if (ref.getType().equals(ReferenceType.Book)){ return REF_BOOK;}\r
+ else if (ref.getType().equals(ReferenceType.Database)){ return REF_DATABASE;}\r
+// else if (ref instanceof SectionBas){ return REF_INFORMAL;}\r
+// else if (ref instanceof SectionBas){ return REF_NOT_APPLICABLE;}\r
+ else if (ref.getType().equals(ReferenceType.WebPage)){ return REF_WEBSITE;}\r
+ else if (ref.getType().equals(ReferenceType.CdDvd)){ return REF_CD;}\r
+ else if (ref.getType().equals(ReferenceType.Journal)){ return REF_JOURNAL;}\r
+ else if (ref.getType().equals(ReferenceType.Generic)){ return REF_UNKNOWN;}\r
+ else if (ref.getType().equals(ReferenceType.PrintSeries)){ \r
+ logger.warn("Print Series is not a standard Berlin Model category");\r
+ return REF_PRINT_SERIES;\r
+ }\r
+ else if (ref.getType().equals(ReferenceType.Proceedings)){ \r
+ logger.warn("Proceedings is not a standard Berlin Model category");\r
+ return REF_CONFERENCE_PROCEEDINGS;\r
+ }\r
+// else if (ref instanceof ){ return REF_JOURNAL_VOLUME;}\r
+ else if (ref.getType().equals(ReferenceType.Patent)){ return REF_NOT_APPLICABLE;}\r
+ else if (ref.getType().equals(ReferenceType.PersonalCommunication)){ return REF_INFORMAL;}\r
+ else if (ref.getType().equals(ReferenceType.Report)){ return REF_NOT_APPLICABLE;}\r
+ else if (ref.getType().equals(ReferenceType.Thesis)){ return REF_NOT_APPLICABLE;}\r
+ else if (ref.getType().equals(ReferenceType.Report)){ return REF_NOT_APPLICABLE;}\r
\r
+ else {\r
+ //TODO Exception\r
+ logger.warn("Reference type not yet supported in Berlin Model: "+ ref.getClass().getSimpleName());\r
+ return null;\r
+ }\r
+ }\r
+ \r
+ \r
+ public static Integer taxRelation2relPtQualifierFk (RelationshipBase<?,?,?> rel){\r
+ if (rel == null){\r
+ return null;\r
+ }\r
+// else if (rel instanceof SynonymRelationship){ \r
+// return ;\r
+// }else if (rel instanceof TaxonRelationship){\r
+ RelationshipTermBase<?> type = rel.getType();\r
+ if (type.equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN())) {return TAX_REL_IS_INCLUDED_IN;\r
+ }else if (type.equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())) {return TAX_REL_IS_MISAPPLIED_NAME_OF;\r
+ }else if (type.equals(SynonymRelationshipType.SYNONYM_OF())) {return TAX_REL_IS_SYNONYM_OF;\r
+ }else if (type.equals(SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF())) {return TAX_REL_IS_HOMOTYPIC_SYNONYM_OF;\r
+ }else if (type.equals(SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF())) {return TAX_REL_IS_HETEROTYPIC_SYNONYM_OF;\r
+ }else if (type.equals(TaxonRelationshipType.CONGRUENT_TO())) {return 11;\r
+// public static int TAX_REL_IS_PROPARTE_SYN_OF = 4;\r
+// public static int TAX_REL_IS_PARTIAL_SYN_OF = 5;\r
+// public static int TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF = 101;\r
+// public static int TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF = 102;\r
+// public static int TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF = 103;\r
+// public static int TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF = 104;\r
+ \r
+ }else {\r
+ //TODO Exception\r
+ logger.warn("Relationship type not yet supported by Berlin Model export: "+ rel.getType());\r
+ return null;\r
+ }\r
+ }\r
+ \r
+ public static Integer nomStatus2nomStatusFk (NomenclaturalStatusType status){\r
+ if (status == null){\r
+ return null;\r
+ }\r
+ if (status.equals(NomenclaturalStatusType.INVALID())) {return NAME_ST_NOM_INVAL;\r
+ }else if (status.equals(NomenclaturalStatusType.ILLEGITIMATE())) {return NAME_ST_NOM_ILLEG;\r
+ }else if (status.equals(NomenclaturalStatusType.NUDUM())) {return NAME_ST_NOM_NUD;\r
+ }else if (status.equals(NomenclaturalStatusType.REJECTED())) {return NAME_ST_NOM_REJ;\r
+ }else if (status.equals(NomenclaturalStatusType.REJECTED_PROP())) {return NAME_ST_NOM_REJ_PROP;\r
+ }else if (status.equals(NomenclaturalStatusType.UTIQUE_REJECTED())) {return NAME_ST_NOM_UTIQUE_REJ;\r
+ }else if (status.equals(NomenclaturalStatusType.UTIQUE_REJECTED_PROP())) {return NAME_ST_NOM_UTIQUE_REJ_PROP;\r
+ }else if (status.equals(NomenclaturalStatusType.CONSERVED())) {return NAME_ST_NOM_CONS;\r
+ \r
+ }else if (status.equals(NomenclaturalStatusType.CONSERVED_PROP())) {return NAME_ST_NOM_CONS_PROP;\r
+ }else if (status.equals(NomenclaturalStatusType.ORTHOGRAPHY_CONSERVED())) {return NAME_ST_ORTH_CONS;\r
+ }else if (status.equals(NomenclaturalStatusType.ORTHOGRAPHY_CONSERVED_PROP())) {return NAME_ST_ORTH_CONS_PROP;\r
+ }else if (status.equals(NomenclaturalStatusType.SUPERFLUOUS())) {return NAME_ST_NOM_SUPERFL;\r
+ }else if (status.equals(NomenclaturalStatusType.AMBIGUOUS())) {return NAME_ST_NOM_AMBIG;\r
+ }else if (status.equals(NomenclaturalStatusType.PROVISIONAL())) {return NAME_ST_NOM_PROVIS;\r
+ }else if (status.equals(NomenclaturalStatusType.DOUBTFUL())) {return NAME_ST_NOM_DUB;\r
+ }else if (status.equals(NomenclaturalStatusType.NOVUM())) {return NAME_ST_NOM_NOV;\r
+ \r
+ }else if (status.equals(NomenclaturalStatusType.CONFUSUM())) {return NAME_ST_NOM_CONFUS;\r
+ }else if (status.equals(NomenclaturalStatusType.ALTERNATIVE())) {return NAME_ST_NOM_ALTERN;\r
+ }else if (status.equals(NomenclaturalStatusType.COMBINATION_INVALID())) {return NAME_ST_COMB_INVAL;\r
+ //TODO\r
+ }else {\r
+ //TODO Exception\r
+ logger.warn("NomStatus type not yet supported by Berlin Model export: "+ status);\r
+ return null;\r
+ }\r
+ }\r
+\r
+ \r
+ \r
+ public static Integer nameRel2RelNameQualifierFk (RelationshipBase<?,?,?> rel){\r
+ if (rel == null){\r
+ return null;\r
+ }\r
+ RelationshipTermBase<?> type = rel.getType();\r
+ if (type.equals(NameRelationshipType.BASIONYM())) {return NAME_REL_IS_BASIONYM_FOR;\r
+ }else if (type.equals(NameRelationshipType.LATER_HOMONYM())) {return NAME_REL_IS_LATER_HOMONYM_OF;\r
+ }else if (type.equals(NameRelationshipType.REPLACED_SYNONYM())) {return NAME_REL_IS_REPLACED_SYNONYM_FOR;\r
+ //TODO\r
+ }else if (type.equals(NameRelationshipType.VALIDATED_BY_NAME())) {return NAME_REL_IS_VALIDATION_OF;\r
+ }else if (type.equals(NameRelationshipType.LATER_VALIDATED_BY_NAME())) {return NAME_REL_IS_LATER_VALIDATION_OF;\r
+ }else if (type.equals(NameRelationshipType.CONSERVED_AGAINST())) {return NAME_REL_IS_CONSERVED_AGAINST;\r
+ \r
+ \r
+ }else if (type.equals(NameRelationshipType.TREATED_AS_LATER_HOMONYM())) {return NAME_REL_IS_TREATED_AS_LATER_HOMONYM_OF;\r
+ }else if (type.equals(NameRelationshipType.ORTHOGRAPHIC_VARIANT())) {return NAME_REL_IS_ORTHOGRAPHIC_VARIANT_OF;\r
+ }else {\r
+ //TODO Exception\r
+ logger.warn("Relationship type not yet supported by Berlin Model export: "+ rel.getType());\r
+ return null;\r
+ }\r
+ \r
+ //NameRelationShip\r
+\r
+// }else if (type.equals(NameRelationshipType.())) {return NAME_REL_IS_REJECTED_IN_FAVOUR_OF;\r
+\r
+// public static int NAME_REL_IS_FIRST_PARENT_OF = 9;\r
+// public static int NAME_REL_IS_SECOND_PARENT_OF = 10;\r
+// public static int NAME_REL_IS_FEMALE_PARENT_OF = 11;\r
+// public static int NAME_REL_IS_MALE_PARENT_OF = 12;\r
+//\r
+// public static int NAME_REL_IS_REJECTED_IN_FAVOUR_OF = 14;\r
+// }else if (type.equals(NameRelationshipType.)) {return NAME_REL_IS_REJECTED_TYPE_OF;\r
+// \r
+// public static int NAME_REL_HAS_SAME_TYPE_AS = 18;\r
+// public static int NAME_REL_IS_LECTOTYPE_OF = 61;\r
+// public static int NAME_REL_TYPE_NOT_DESIGNATED = 62;\r
+\r
+ // }else if (type.equals(NameRelationshipType.LATER_VALIDATED_BY_NAME())) {return NAME_REL_IS_TYPE_OF;\r
+ \r
+ \r
+ }\r
+ \r
+ public static UUID getWebMarkerUuid (int markerCategoryId){\r
+ if (markerCategoryId == 1){\r
+ return UUID.fromString("d8554418-d1ae-471d-a1bd-a0cbc7ab860c"); //any as not to find in cichorieae\r
+ }else if (markerCategoryId == 2){\r
+ return UUID.fromString("7f189c48-8632-4870-9ec8-e4d2489f324e");\r
+ }else if (markerCategoryId == 3){\r
+ return UUID.fromString("9a115e6b-8210-4dd3-825a-6fed11016c63");\r
+ }else if (markerCategoryId == 4){\r
+ return UUID.fromString("1d287011-2054-41c5-a919-17ac1d0a9270");\r
+ }else if (markerCategoryId == 9){\r
+ return UUID.fromString("cc5eca5c-1ae5-4feb-9a95-507fc167b0c9");\r
+ }else{\r
+ logger.warn("Unknown webMarker category: " + markerCategoryId);\r
+ return null;\r
+ }\r
+ \r
+ }\r
\r
}\r