use E+M areas in BM import and Pesi export
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / berlinModel / BerlinModelTransformer.java
index 3ec4b8981f401a23607d5865b688382486f56f05..7bfc82add621e37e95b0053b2c99385f8e4c35c0 100644 (file)
+/**\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.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.ISection;\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.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
+ */\r
+public class BerlinModelTransformer {\r
        private static final Logger logger = Logger.getLogger(BerlinModelTransformer.class);\r
\r
+       \r
+       //source Refs\r
+       public static final UUID uuidSourceRefEuroMed = UUID.fromString("0603a84a-f024-4454-ab92-9e2ac0139126");\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
+       \r
+       //E+M areas\r
+       public static UUID uuidEM = UUID.fromString("111BDF38-7A32-440A-9808-8AF1C9E54B51");\r
+       public static UUID uuidEUR = UUID.fromString("80B3CEEE-2F78-45CE-B4F4-E473F5ED8343");\r
+       public static UUID uuid14 = UUID.fromString("4FF83A35-97DE-4C39-BEDE-27EE9ECEFB45");\r
+       public static UUID uuid20 = UUID.fromString("19D93AD1-59E7-49ED-B513-D7D493EDC4DE");\r
+       public static UUID uuid21 = UUID.fromString("1B98DAF0-A709-4871-9A8B-CFDD09F41763");\r
+       public static UUID uuid33 = UUID.fromString("6B719260-1E48-4D85-8BC3-320852E1B331");\r
+       public static UUID uuidDa = UUID.fromString("867871C9-9931-47D0-AEF7-468B9519EBB2");\r
+       public static UUID uuidFe = UUID.fromString("C4EF26AF-11E0-4888-9FC3-5E56F4422BB4");\r
+       public static UUID uuidFa = UUID.fromString("70426E7E-2EAA-4987-95FB-5CB6E56980F3");\r
+       public static UUID uuidBr = UUID.fromString("A22329C4-0B81-4E00-BCC3-2F44A6CA56D0");\r
+       public static UUID uuidIs = UUID.fromString("3D2950E9-C2FD-462E-9697-DCB7241D514E");\r
+       public static UUID uuidHb = UUID.fromString("65E405E7-B3D4-44B6-BE67-4881582EA274");\r
+       public static UUID uuidNo = UUID.fromString("2D3F1181-6838-4034-96CB-F254A558572A");\r
+       public static UUID uuidSb = UUID.fromString("BC847AF8-30C3-48B2-A881-2B2DEAC0A137");\r
+       public static UUID uuidSu = UUID.fromString("F064AB9F-EDDB-47D8-8E54-B9E8AD19111D");\r
+       public static UUID uuidAu = UUID.fromString("37C77C23-9673-4ABC-87C2-B29E9FA87FA8");\r
+       public static UUID uuidBe = UUID.fromString("4840373B-F949-4630-B655-9B37F845CFDA");\r
+       public static UUID uuidCz = UUID.fromString("02E67A70-C192-4A01-A311-99F8C42F9D51");\r
+       public static UUID uuidGe = UUID.fromString("F617DDEA-51C9-4EF1-B7F4-ED22F871631D");\r
+       public static UUID uuidHu = UUID.fromString("AD7EDDB1-C089-436F-88BA-BC9115BBD6E0");\r
+       public static UUID uuidHo = UUID.fromString("00B8FE6D-D04B-4CAC-ADCE-32B44ABB385A");\r
+       public static UUID uuidPo = UUID.fromString("F23864DF-DFD6-4ABC-B7D0-FD97408AE0A9");\r
+       public static UUID uuidHe = UUID.fromString("7C28D878-F16D-4043-A94E-750BEF910064");\r
+       public static UUID uuidBl = UUID.fromString("A4326211-3219-4655-83AD-599D635DB638");\r
+       public static UUID uuidCo = UUID.fromString("3EE3CB3E-23DE-491F-94DF-35DB7A1D3AC0");\r
+       public static UUID uuidGa = UUID.fromString("28591C04-60E3-432A-9D05-CBC945462D2E");\r
+       public static UUID uuidLu = UUID.fromString("205512B0-AA22-4041-B92B-336FEB79FA4F");\r
+       public static UUID uuidSa = UUID.fromString("11368A92-2362-4029-A26A-E35CEC0798C1");\r
+       public static UUID uuidHs = UUID.fromString("6AD92C01-1442-4F2F-BD58-F73075B26C27");\r
+       public static UUID uuidAl = UUID.fromString("635B63DA-0AAF-446C-843E-BEB52E2A1B90");\r
+       public static UUID uuidBu = UUID.fromString("75F3CF66-B272-464E-9B1E-35B8E511936D");\r
+       public static UUID uuidGr = UUID.fromString("34DF8B89-7DFA-4265-9A3E-D540DB72AA77");\r
+       public static UUID uuidIt = UUID.fromString("06B8F41D-B9A8-4B55-8AAB-DE90EB3D0A9C");\r
+       public static UUID uuidCr = UUID.fromString("20A8A822-1C87-43F0-A5EF-2AF1CC5DC0FC");\r
+       public static UUID uuidRm = UUID.fromString("EAB29D40-E3B2-4920-BB1F-8757DFBC9E86");\r
+       public static UUID uuidSi_S = UUID.fromString("DD861671-930F-4C9E-92D8-EADDC28EB6B7");\r
+       public static UUID uuidTu_E = UUID.fromString("2B732609-55DB-4F25-BC73-618FFF515ADC");\r
+       public static UUID uuidJu = UUID.fromString("BD5E6833-7E0E-41A8-83D6-149A31F2CE05");\r
+       public static UUID uuidUk_K = UUID.fromString("40B7219D-E38C-44EB-9877-E311A2734022");\r
+       public static UUID uuidUk = UUID.fromString("7A8DF5D0-3D18-4386-891E-96E11BDB6FEB");\r
+       public static UUID uuidAg = UUID.fromString("548E583C-DBE7-463F-A01B-2A966F2B32D2");\r
+       public static UUID uuidEg = UUID.fromString("9EDDDE2E-95B7-4443-89A8-C30D031E16A5");\r
+       public static UUID uuidLi = UUID.fromString("2F506902-2A56-40C8-84CB-B436C84ED258");\r
+       public static UUID uuidMa = UUID.fromString("D639A7AC-F873-414E-8869-73D10B9CF842");\r
+       public static UUID uuidTn = UUID.fromString("AF4D86D4-2CA0-48A2-BA15-0D74454D1EAD");\r
+       public static UUID uuidAz = UUID.fromString("CEC2EBD3-DFD0-4CE6-827F-BFF8FBAF5283");\r
+       public static UUID uuidSg = UUID.fromString("BC4A0307-B81A-4233-B8BD-EFB9CEDFD530");\r
+       public static UUID uuidAb = UUID.fromString("D3744C2D-2777-4E85-98BF-04D2FD589EBF");\r
+       public static UUID uuidAr = UUID.fromString("535FED1E-3EC9-4563-AF55-E753AEFCFBFE");\r
+       public static UUID uuidAb_A = UUID.fromString("0F4C98BF-AF7B-4CDA-B62C-AD6A1909BFA0");\r
+       public static UUID uuidGg = UUID.fromString("DA1CCDA8-5867-4098-A709-100A66E2150A");\r
+       public static UUID uuidAb_N = UUID.fromString("AA75B0CA-49C9-4F8E-8CC2-2A343EB2FFF4");\r
+       public static UUID uuidCy = UUID.fromString("36EFDF69-09C0-4160-A502-9EEFBC22A984");\r
+       public static UUID uuidAE_G = UUID.fromString("76F5F3F6-9C3E-47F5-8E85-55360C50273C");\r
+       public static UUID uuidLe = UUID.fromString("639F5D97-EC9E-4EE2-ADFC-DFF73F7CC970");\r
+       public static UUID uuidSn = UUID.fromString("5D8E0B00-96CE-4ACC-AF02-62A1B9866144");\r
+       public static UUID uuidTu_A = UUID.fromString("F7B59D79-15C2-47C9-91B0-DEC1F388CB62");\r
+       public static UUID uuidTu = UUID.fromString("DB98809B-EF22-413B-B1EA-A79C4E1C4903");\r
+       public static UUID uuidAu_A = UUID.fromString("AE65867C-00F6-406C-A315-B3E4CC9A93D2");\r
+       public static UUID uuidAu_L = UUID.fromString("78146B6E-E71A-46DA-8DBC-244CC648BBE7");\r
+       public static UUID uuidAz_C = UUID.fromString("D35B8259-CC76-4FB0-AFC0-6A23D657EE3E");\r
+       public static UUID uuidAz_F = UUID.fromString("0F8F470D-CA2A-4130-842A-0A0C6912A123");\r
+       public static UUID uuidAz_G = UUID.fromString("CFF9FC6D-E3B2-45B1-87A9-6FEFB029A12F");\r
+       public static UUID uuidAz_P = UUID.fromString("C8000982-19E8-492E-912D-59EB370E52C0");\r
+       public static UUID uuidAz_S = UUID.fromString("BD852931-47B3-466C-A422-4F312B913CA2");\r
+       public static UUID uuidAz_J = UUID.fromString("4A5CED9F-F078-44B3-94BF-F3EE79315236");\r
+       public static UUID uuidAz_M = UUID.fromString("B8C76F37-6483-474F-85AB-96399219DE57");\r
+       public static UUID uuidAz_T = UUID.fromString("7A52595F-DA5E-440A-B2BD-F63999CE979E");\r
+       public static UUID uuidBe_B = UUID.fromString("9E263401-ACEC-4E2E-AA89-4AAF56AE7180");\r
+       public static UUID uuidBe_L = UUID.fromString("AF71559C-7765-493C-8C9A-1248DFF28789");\r
+       public static UUID uuidBl_I = UUID.fromString("121B07A0-8031-4F22-B9B7-C334FC3204CE");\r
+       public static UUID uuidBl_M = UUID.fromString("E8E8EFDC-E9EB-4B26-9711-F986265AD114");\r
+       public static UUID uuidBl_N = UUID.fromString("D96DD8A7-4BD8-4ADF-8CDB-05873686DB1A");\r
+       public static UUID uuidBH = UUID.fromString("6A109EF5-3AC1-4C59-8599-08F944ABA499");\r
+       public static UUID uuidBy = UUID.fromString("5D972AF7-6AE2-44D1-840B-EDB1DBE8B7AC");\r
+       public static UUID uuidCa = UUID.fromString("CFA26682-B0AB-4FEB-9191-6AA098638382");\r
+       public static UUID uuidCa_F = UUID.fromString("0D8ED2C4-0313-464C-A5B4-EC0A52E45ADF");\r
+       public static UUID uuidCa_G = UUID.fromString("865D1319-B157-4D1A-BBF0-F56B7EB2ED96");\r
+       public static UUID uuidCa_C = UUID.fromString("486FCBED-84C4-4673-8724-9A8A4A6613AD");\r
+       public static UUID uuidCa_H = UUID.fromString("0B57C693-DB09-4D7F-9FA9-0DBBEFF3B3B6");\r
+       public static UUID uuidCa_L = UUID.fromString("A88D6DF4-7924-4BEC-BFA6-071BDA82A4B3");\r
+       public static UUID uuidCa_P = UUID.fromString("BBF04D1A-1FC0-4A7B-BF0B-7D7BF69D8392");\r
+       public static UUID uuidCa_T = UUID.fromString("BBAD170B-285D-4BEA-8C3F-C43894FB75FF");\r
+       public static UUID uuidCs = UUID.fromString("2ADA45F0-C7CC-4026-A8B1-B816971F0753");\r
+       public static UUID uuidCt = UUID.fromString("09B5728A-4775-4530-B362-9B1EF4A9E8C3");\r
+       public static UUID uuidEs = UUID.fromString("1011D427-401B-47EE-A42C-4C1698957D55");\r
+       public static UUID uuidGa_C = UUID.fromString("3653A4DC-1ADE-4237-A62C-4F0AC11E576F");\r
+       public static UUID uuidGa_F = UUID.fromString("860F92B6-5CDA-456B-964C-6162D1D08161");\r
+       public static UUID uuidGg_A = UUID.fromString("5FAD859B-7929-4D5F-B92C-95E3E0469BB2");\r
+       public static UUID uuidGg_D = UUID.fromString("6091C975-B946-4EF3-A18F-2E148EAE6A06");\r
+       public static UUID uuidGg_G = UUID.fromString("048799B0-D7B9-44C6-B2D1-5CA2A49FA175");\r
+       public static UUID uuidHs_A = UUID.fromString("EAED6C21-42E5-496D-B43E-C121F96FA672");\r
+       public static UUID uuidHs_G = UUID.fromString("35350D75-6952-48BD-B265-C005BC1B2909");\r
+       public static UUID uuidHs_S = UUID.fromString("264649F7-192D-4AE5-9840-81FC782F59F0");\r
+       public static UUID uuidIr = UUID.fromString("A3B35528-5FFD-43B1-B605-711807C1EC9F");\r
+       public static UUID uuidIt_I = UUID.fromString("E3BC327E-0B42-4439-811B-595BC55A8FF8");\r
+       public static UUID uuidIt_S = UUID.fromString("57F35807-8CFA-4698-BB04-AAD3549C12EB");\r
+       public static UUID uuidJo = UUID.fromString("567A537D-F2FA-43EF-A20A-AEC76723E269");\r
+       public static UUID uuidKz = UUID.fromString("F8ABE715-D859-4B6F-B8F1-DB1A847DEAC4");\r
+       public static UUID uuidLa = UUID.fromString("8E338882-2631-4AD6-BC53-799C698C807D");\r
+       public static UUID uuidLt = UUID.fromString("ECF200B6-B1DF-414F-B215-EDAC503B1A65");\r
+       public static UUID uuidMa_E = UUID.fromString("80980607-FBD8-46E3-BE56-05D997F2D331");\r
+       public static UUID uuidMa_S = UUID.fromString("B743AE57-DC0B-4CCC-B4D9-7BF51E579E8E");\r
+       public static UUID uuidMk = UUID.fromString("0CE83170-2FA7-4C72-81F7-7FFF17343E48");\r
+       public static UUID uuidMd = UUID.fromString("2CFB90B1-0BA0-4578-AD11-AAD5AAB62899");\r
+       public static UUID uuidMd_D = UUID.fromString("DBE1F3CA-4C7C-4062-AC1E-ADE0C17DCA52");\r
+       public static UUID uuidMd_M = UUID.fromString("4658DADD-60FE-46D8-94E3-C6A6C4646105");\r
+       public static UUID uuidMd_P = UUID.fromString("2C41EB67-A330-4214-B452-6E6741262CE5");\r
+       public static UUID uuidSi_M = UUID.fromString("2920D738-54A1-49CE-AF3A-9CB742064587");\r
+       public static UUID uuidMo = UUID.fromString("64F98B98-1050-42C6-B2C7-F72DA642E4D5");\r
+       public static UUID uuidRf = UUID.fromString("4B6BDFEE-2BCB-4638-99CF-0F9612FA4787");\r
+       public static UUID uuidRf_C = UUID.fromString("1FFAF0B5-6311-4BF6-977F-8940622C4986");\r
+       public static UUID uuidRf_E = UUID.fromString("4280A0F6-298E-4B3C-8CE8-56A1208183F7");\r
+       public static UUID uuidRf_K = UUID.fromString("D9559D9A-1798-4496-8671-DE667CC30EC0");\r
+       public static UUID uuidRf_CS = UUID.fromString("6E886ACC-22C9-4C63-BEA5-A51AD84AF3D1");\r
+       public static UUID uuidRf_N = UUID.fromString("B0D8F65E-B5A4-4C0B-A5EF-54CC9F378CC6");\r
+       public static UUID uuidRf_NW = UUID.fromString("06CC9983-B444-4322-A03E-9A7A2AF1D4AD");\r
+       public static UUID uuidRf_A = UUID.fromString("1786C13D-D26D-49E3-BA60-E3F3E7852713");\r
+       public static UUID uuidRf_S = UUID.fromString("6AAB10D5-05E9-470A-8AF5-B6F8D48A71EC");\r
+       public static UUID uuidSk = UUID.fromString("09267309-E771-4BD7-A67F-B6B4321546E0");\r
+       public static UUID uuidSl = UUID.fromString("BC242D21-98CA-402C-BDB7-3ED347C7BDFD");\r
+       public static UUID uuidSy = UUID.fromString("A5974D4B-F878-422C-A7A8-A1D8268109EF");\r
+       public static UUID uuidUk_U = UUID.fromString("4A6C5155-154E-4B0D-AC73-550B51CCE374");\r
+       public static UUID uuidSM = UUID.fromString("AC360FC1-30F4-444A-92EB-B55BF98B8E97");\r
+       public static UUID uuidYu_K = UUID.fromString("F3F05E88-99AF-48FA-92EF-1A169BCC7ACF");\r
+       public static UUID uuidCg = UUID.fromString("38A4FD15-40D6-43F4-9685-F87465FDBD3F");\r
+       public static UUID uuidSr = UUID.fromString("468CFEA2-008F-40CF-B2C8-ADF5C09C0FA4");\r
+       public static UUID uuidIJ = UUID.fromString("9351B972-0C0B-4A97-87B1-4CC11E67D21E");\r
+       public static UUID uuidLS = UUID.fromString("F7BFDAE0-3DD9-4FC4-9B0B-0BF203B94031");\r
+       public static UUID uuidRs = UUID.fromString("C4A898CE-0F32-44FE-A8A3-278E11A4BA53");\r
+       public static UUID uuidSi = UUID.fromString("DB1FACF2-58A5-483E-9B2A-EB4290CA1B71");\r
+       public static UUID uuidAz_L = UUID.fromString("F5AEF252-C4F8-4ECC-9B6E-4821DB7ADECF");\r
+       public static UUID uuidHb_E = UUID.fromString("1D400E37-F39A-4CAE-8885-CF485B900CC5");\r
+       public static UUID uuidHb_N = UUID.fromString("B1D514DA-B9E6-4F0E-ACE4-18FB061FC132");\r
+       public static UUID uuidGa_M = UUID.fromString("E73942F0-292A-4F6A-8B2F-15AFE8634319");\r
+       public static UUID uuidMa_M = UUID.fromString("D9F7DFFC-0E76-4790-9AAE-B7AEB5AD76ED");\r
+       public static UUID uuidRs_N = UUID.fromString("44F262E3-5091-4D28-8081-440D3978FB0B");\r
+       public static UUID uuidRs_B = UUID.fromString("A575D608-DD53-4C01-B2AF-5067D0711F64");\r
+       public static UUID uuidRs_C = UUID.fromString("DA4E9CC3-B1CC-403A-81FF-BCC5D9FADBD1");\r
+       public static UUID uuidRs_W = UUID.fromString("EFABC8FD-0B3C-475B-B532-E1CA0BA0BDBB");\r
+       public static UUID uuidRs_E = UUID.fromString("7E0F8FA3-5DB9-48F0-9FA8-87FCAB3EAA53");\r
+       public static UUID uuidAE = UUID.fromString("C8FCD4E0-E1A2-4A7D-8EE2-6F397F5C546C");\r
+       public static UUID uuidAE_T = UUID.fromString("AF83B475-BB35-4594-8380-EA64B4313091");\r
+       public static UUID uuidRs_K = UUID.fromString("2188E3A5-0446-47C8-B11B-B4B2B9A71C75");\r
+       public static UUID uuidCc = UUID.fromString("05B0DD06-30F8-477D-BF4C-30D9DEF56320");\r
+       public static UUID uuidBt = UUID.fromString("EE13FB74-F3AC-46B1-9F23-6A25AC504446");\r
+       public static UUID uuidTcs = UUID.fromString("904C3980-B98D-422E-A195-95F4F41FC734");\r
+\r
+\r
+       \r
+       \r
+       \r
+       \r
+       \r
+       \r
+       \r
+       \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
+       public static final UUID uuidEurArea = UUID.fromString("71dd0368-835c-4b53-889a-2bf316e10297");\r
+       public static final UUID uuidEurMedArea = UUID.fromString("aa6a5b25-3ee3-4771-b4d1-b91918f23fa5");\r
+       \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
+       public static final UUID uuidIsoCode = UUID.fromString("048b8153-e3ee-451c-a72c-f1c8bc291c3e");\r
+       public static final UUID uuidTdwgAreaCode = UUID.fromString("73ad0288-b71b-4a14-9c2e-7f81f1e64a36");\r
+       public static final UUID uuidMclCode = UUID.fromString("aa27083a-6a96-42aa-a2f8-5541cf057067");\r
+       \r
+       //Area Level\r
+       public static final UUID uuidAreaLevelTop = UUID.fromString("190d5758-4b96-4016-9412-6dc9c36ef5fd");\r
+       public static final UUID uuidAreaLevelFirst = UUID.fromString("d21503e3-875e-4abc-82ec-f812e3cfea84");\r
+       public static final UUID uuidAreaLevelSecond = UUID.fromString("97ac0bf5-b31c-487a-8ed5-a576f46c902c");\r
+       \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
@@ -22,6 +306,10 @@ public final class BerlinModelTransformer {
        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
@@ -63,17 +351,29 @@ public final class BerlinModelTransformer {
        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 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_HOMOTYPIC_SYNONYM_OF = 6;\r
-       public static int TAX_REL_IS_HETEROTYPIC_SYNONYM_OF = 7;\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
@@ -95,54 +395,812 @@ public final class BerlinModelTransformer {
        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_DISTIRBUTION_EM = 10;\r
-       public static int FACT_DISTIRBUTION_WORLD = 11;\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
-       /** 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 UnknownCdmTypeException{\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
+       \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 = NomenclaturalStatusType.NewInstance("comb. ined.", "comb. ined.", "comb. ined.", Language.LATIN());\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 = NomenclaturalStatusType.NewInstance("sp. nov. ined.", "sp. nov. ined.", "sp. nov. ined.", Language.LATIN());\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 = NomenclaturalStatusType.NewInstance("nom. & orth. cons.", "nom. & orth. cons.", "nom. & orth. cons.", Language.LATIN());\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
+       public static UUID getEMAreaUuid(String areaId){\r
+               if (areaId == null){\r
+                       logger.warn("No AreaId given");\r
+                       return null;\r
+               }else if (areaId.equals("EM")){return uuidEM;\r
+               }else if (areaId.equals("EUR")){return uuidEUR;\r
+               }else if (areaId.equals("14")){return uuid14;\r
+               }else if (areaId.equals("20")){return uuid20;\r
+               }else if (areaId.equals("21")){return uuid21;\r
+               }else if (areaId.equals("33")){return uuid33;\r
+               }else if (areaId.equals("Da")){return uuidDa;\r
+               }else if (areaId.equals("Fe")){return uuidFe;\r
+               }else if (areaId.equals("Fa")){return uuidFa;\r
+               }else if (areaId.equals("Br")){return uuidBr;\r
+               }else if (areaId.equals("Is")){return uuidIs;\r
+               }else if (areaId.equals("Hb")){return uuidHb;\r
+               }else if (areaId.equals("No")){return uuidNo;\r
+               }else if (areaId.equals("Sb")){return uuidSb;\r
+               }else if (areaId.equals("Su")){return uuidSu;\r
+               }else if (areaId.equals("Au")){return uuidAu;\r
+               }else if (areaId.equals("Be")){return uuidBe;\r
+               }else if (areaId.equals("Cz")){return uuidCz;\r
+               }else if (areaId.equals("Ge")){return uuidGe;\r
+               }else if (areaId.equals("Hu")){return uuidHu;\r
+               }else if (areaId.equals("Ho")){return uuidHo;\r
+               }else if (areaId.equals("Po")){return uuidPo;\r
+               }else if (areaId.equals("He")){return uuidHe;\r
+               }else if (areaId.equals("Bl")){return uuidBl;\r
+               }else if (areaId.equals("Co")){return uuidCo;\r
+               }else if (areaId.equals("Ga")){return uuidGa;\r
+               }else if (areaId.equals("Lu")){return uuidLu;\r
+               }else if (areaId.equals("Sa")){return uuidSa;\r
+               }else if (areaId.equals("Hs")){return uuidHs;\r
+               }else if (areaId.equals("Al")){return uuidAl;\r
+               }else if (areaId.equals("Bu")){return uuidBu;\r
+               }else if (areaId.equals("Gr")){return uuidGr;\r
+               }else if (areaId.equals("It")){return uuidIt;\r
+               }else if (areaId.equals("Cr")){return uuidCr;\r
+               }else if (areaId.equals("Rm")){return uuidRm;\r
+               }else if (areaId.equals("Si(S)")){return uuidSi_S;\r
+               }else if (areaId.equals("Tu(E)")){return uuidTu_E;\r
+               }else if (areaId.equals("Ju")){return uuidJu;\r
+               }else if (areaId.equals("Uk(K)")){return uuidUk_K;\r
+               }else if (areaId.equals("Uk")){return uuidUk;\r
+               }else if (areaId.equals("Ag")){return uuidAg;\r
+               }else if (areaId.equals("Eg")){return uuidEg;\r
+               }else if (areaId.equals("Li")){return uuidLi;\r
+               }else if (areaId.equals("Ma")){return uuidMa;\r
+               }else if (areaId.equals("Tn")){return uuidTn;\r
+               }else if (areaId.equals("Az")){return uuidAz;\r
+               }else if (areaId.equals("Sg")){return uuidSg;\r
+               }else if (areaId.equals("Ab")){return uuidAb;\r
+               }else if (areaId.equals("Ar")){return uuidAr;\r
+               }else if (areaId.equals("Ab(A)")){return uuidAb_A;\r
+               }else if (areaId.equals("Gg")){return uuidGg;\r
+               }else if (areaId.equals("Ab(N)")){return uuidAb_N;\r
+               }else if (areaId.equals("Cy")){return uuidCy;\r
+               }else if (areaId.equals("AE(G)")){return uuidAE_G;\r
+               }else if (areaId.equals("Le")){return uuidLe;\r
+               }else if (areaId.equals("Sn")){return uuidSn;\r
+               }else if (areaId.equals("Tu(A)")){return uuidTu_A;\r
+               }else if (areaId.equals("Tu")){return uuidTu;\r
+               }else if (areaId.equals("Au(A)")){return uuidAu_A;\r
+               }else if (areaId.equals("Au(L)")){return uuidAu_L;\r
+               }else if (areaId.equals("Az(C)")){return uuidAz_C;\r
+               }else if (areaId.equals("Az(F)")){return uuidAz_F;\r
+               }else if (areaId.equals("Az(G)")){return uuidAz_G;\r
+               }else if (areaId.equals("Az(P)")){return uuidAz_P;\r
+               }else if (areaId.equals("Az(S)")){return uuidAz_S;\r
+               }else if (areaId.equals("Az(J)")){return uuidAz_J;\r
+               }else if (areaId.equals("Az(M)")){return uuidAz_M;\r
+               }else if (areaId.equals("Az(T)")){return uuidAz_T;\r
+               }else if (areaId.equals("Be(B)")){return uuidBe_B;\r
+               }else if (areaId.equals("Be(L)")){return uuidBe_L;\r
+               }else if (areaId.equals("Bl(I)")){return uuidBl_I;\r
+               }else if (areaId.equals("Bl(M)")){return uuidBl_M;\r
+               }else if (areaId.equals("Bl(N)")){return uuidBl_N;\r
+               }else if (areaId.equals("BH")){return uuidBH;\r
+               }else if (areaId.equals("By")){return uuidBy;\r
+               }else if (areaId.equals("Ca")){return uuidCa;\r
+               }else if (areaId.equals("Ca(F)")){return uuidCa_F;\r
+               }else if (areaId.equals("Ca(G)")){return uuidCa_G;\r
+               }else if (areaId.equals("Ca(C)")){return uuidCa_C;\r
+               }else if (areaId.equals("Ca(H)")){return uuidCa_H;\r
+               }else if (areaId.equals("Ca(L)")){return uuidCa_L;\r
+               }else if (areaId.equals("Ca(P)")){return uuidCa_P;\r
+               }else if (areaId.equals("Ca(T)")){return uuidCa_T;\r
+               }else if (areaId.equals("Cs")){return uuidCs;\r
+               }else if (areaId.equals("Ct")){return uuidCt;\r
+               }else if (areaId.equals("Es")){return uuidEs;\r
+               }else if (areaId.equals("Ga(C)")){return uuidGa_C;\r
+               }else if (areaId.equals("Ga(F)")){return uuidGa_F;\r
+               }else if (areaId.equals("Gg(A)")){return uuidGg_A;\r
+               }else if (areaId.equals("Gg(D)")){return uuidGg_D;\r
+               }else if (areaId.equals("Gg(G)")){return uuidGg_G;\r
+               }else if (areaId.equals("Hs(A)")){return uuidHs_A;\r
+               }else if (areaId.equals("Hs(G)")){return uuidHs_G;\r
+               }else if (areaId.equals("Hs(S)")){return uuidHs_S;\r
+               }else if (areaId.equals("Ir")){return uuidIr;\r
+               }else if (areaId.equals("It(I)")){return uuidIt_I;\r
+               }else if (areaId.equals("It(S)")){return uuidIt_S;\r
+               }else if (areaId.equals("Jo")){return uuidJo;\r
+               }else if (areaId.equals("Kz")){return uuidKz;\r
+               }else if (areaId.equals("La")){return uuidLa;\r
+               }else if (areaId.equals("Lt")){return uuidLt;\r
+               }else if (areaId.equals("Ma(E)")){return uuidMa_E;\r
+               }else if (areaId.equals("Ma(S)")){return uuidMa_S;\r
+               }else if (areaId.equals("Mk")){return uuidMk;\r
+               }else if (areaId.equals("Md")){return uuidMd;\r
+               }else if (areaId.equals("Md(D)")){return uuidMd_D;\r
+               }else if (areaId.equals("Md(M)")){return uuidMd_M;\r
+               }else if (areaId.equals("Md(P)")){return uuidMd_P;\r
+               }else if (areaId.equals("Si(M)")){return uuidSi_M;\r
+               }else if (areaId.equals("Mo")){return uuidMo;\r
+               }else if (areaId.equals("Rf")){return uuidRf;\r
+               }else if (areaId.equals("Rf(C)")){return uuidRf_C;\r
+               }else if (areaId.equals("Rf(E)")){return uuidRf_E;\r
+               }else if (areaId.equals("Rf(K)")){return uuidRf_K;\r
+               }else if (areaId.equals("Rf(CS)")){return uuidRf_CS;\r
+               }else if (areaId.equals("Rf(N)")){return uuidRf_N;\r
+               }else if (areaId.equals("Rf(NW)")){return uuidRf_NW;\r
+               }else if (areaId.equals("Rf(A)")){return uuidRf_A;\r
+               }else if (areaId.equals("Rf(S)")){return uuidRf_S;\r
+               }else if (areaId.equals("Sk")){return uuidSk;\r
+               }else if (areaId.equals("Sl")){return uuidSl;\r
+               }else if (areaId.equals("Sy")){return uuidSy;\r
+               }else if (areaId.equals("Uk(U)")){return uuidUk_U;\r
+               }else if (areaId.equals("SM")){return uuidSM;\r
+               }else if (areaId.equals("Yu(K)")){return uuidYu_K;\r
+               }else if (areaId.equals("Cg")){return uuidCg;\r
+               }else if (areaId.equals("Sr")){return uuidSr;\r
+               }else if (areaId.equals("IJ")){return uuidIJ;\r
+               }else if (areaId.equals("LS")){return uuidLS;\r
+               }else if (areaId.equals("Rs")){return uuidRs;\r
+               }else if (areaId.equals("Si")){return uuidSi;\r
+               }else if (areaId.equals("Az(L)")){return uuidAz_L;\r
+               }else if (areaId.equals("Hb(E)")){return uuidHb_E;\r
+               }else if (areaId.equals("Hb(N)")){return uuidHb_N;\r
+               }else if (areaId.equals("Ga(M)")){return uuidGa_M;\r
+               }else if (areaId.equals("Ma(M)")){return uuidMa_M;\r
+               }else if (areaId.equals("Rs(N)")){return uuidRs_N;\r
+               }else if (areaId.equals("Rs(B)")){return uuidRs_B;\r
+               }else if (areaId.equals("Rs(C)")){return uuidRs_C;\r
+               }else if (areaId.equals("Rs(W)")){return uuidRs_W;\r
+               }else if (areaId.equals("Rs(E)")){return uuidRs_E;\r
+               }else if (areaId.equals("AE")){return uuidAE;\r
+               }else if (areaId.equals("AE(T)")){return uuidAE_T;\r
+               }else if (areaId.equals("Rs(K)")){return uuidRs_K;\r
+               }else if (areaId.equals("Cc")){return uuidCc;\r
+               }else if (areaId.equals("Bt")){return uuidBt;\r
+               }else if (areaId.equals("Tcs")){return uuidTcs;\r
+               }else{\r
+                       logger.warn("Area not found: " + areaId);\r
+                       return null;\r
+               }\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 UnknownCdmTypeException("Unknown TypeDesignationStatus (id=" + Integer.valueOf(typeStatusId).toString() + ")");\r
+                       }\r
+               }\r
+       }\r
+       \r
+       //TypeDesignation\r
+       public static TaxonRelationshipType taxonRelId2TaxonRelType (int relTaxonTypeId, ResultWrapper<Boolean> isInverse, ResultWrapper<Boolean> isDoubtful)  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
+                       case 43: isDoubtful.setValue(true); return TaxonRelationshipType.CONGRUENT_TO();\r
+                       case 48: isDoubtful.setValue(true); return TaxonRelationshipType.INCLUDED_OR_INCLUDES();\r
+                       case 51: isDoubtful.setValue(true); return TaxonRelationshipType.CONGRUENT_OR_OVERLAPS();\r
+                       \r
+                       \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 Rank id" + Integer.valueOf(rankId).toString());\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.getRankByNameOrIdInVoc(abbrev);\r
+                       } catch (UnknownCdmTypeException e) {\r
+                               try {\r
+                                       result = Rank.getRankByNameOrIdInVoc(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 66: {System.out.println("Rank 66 not yet implemented"); throw new UnknownCdmTypeException("Unknown Rank id" + Integer.valueOf(rankId).toString());}\r
+                                               case 67: {System.out.println("Rank 67 not yet implemented"); throw new UnknownCdmTypeException("Unknown Rank id" + Integer.valueOf(rankId).toString());}\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 ISection){      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
+               //Salvador\r
+               }else if (markerCategoryId == 5){\r
+                       return UUID.fromString("7d8875b3-107c-4189-97e5-cadb470e543a");\r
+               }else if (markerCategoryId == 20){\r
+                       return UUID.fromString("3574e2b0-6431-4d71-b456-bc967c80f622");\r
+               }else if (markerCategoryId == 30){\r
+                       return UUID.fromString("9924b27e-0dbe-4d95-ae9b-096fbbc3edcb");\r
+               }else if (markerCategoryId == 40){\r
+                       return UUID.fromString("69241b97-f4d2-4f60-9aed-1c4ccb5bced5");\r
+               }else if (markerCategoryId == 50){\r
+                       return UUID.fromString("f3b62ce3-0212-4542-a74c-0c68d08859b1");\r
+               }else if (markerCategoryId == 55){\r
+                       return UUID.fromString("bec822f2-8242-425f-ad46-f11f0b82f69b");\r
+               }else if (markerCategoryId == 60){\r
+                       return UUID.fromString("722fca60-0416-4bf0-aa4b-a07400f9710d");\r
+               }else if (markerCategoryId == 70){\r
+                       return UUID.fromString("ed57857b-1001-4b09-b48e-d88ab146bb2b");\r
+               }else if (markerCategoryId == 80){\r
+                       return UUID.fromString("637e8b77-1202-462b-9d77-1023f3c192d9");\r
+               }else if (markerCategoryId == 90){\r
+                       return UUID.fromString("c769c231-6e76-46df-88f7-2c459342a3c2");\r
+               }else if (markerCategoryId == 93){\r
+                       return UUID.fromString("075ee97e-246f-4f3d-aa96-16930df6268c");\r
+               }else if (markerCategoryId == 100){\r
+                       return UUID.fromString("e17065bf-3e44-417a-b05c-f82929f680c3");\r
+               }else if (markerCategoryId == 110){\r
+                       return UUID.fromString("e2b8de07-770e-4fda-b445-c4735f4e95c8");\r
+               }else if (markerCategoryId == 900){\r
+                       return UUID.fromString("d029c3c9-944a-4bb9-bba6-12c95da94a04");\r
+               }else if (markerCategoryId == 920){\r
+                       return UUID.fromString("98af97b1-e5e3-4ee4-902e-15032316bfc3");\r
+               }else if (markerCategoryId == 930){\r
+                       return UUID.fromString("4b6c3130-4e50-4f45-8461-d2698cf5f80b");\r
+               }else if (markerCategoryId == 950){\r
+                       return UUID.fromString("1e53f58c-6528-42c6-99ae-0f75a3c3c264");\r
+               }else if (markerCategoryId == 960){\r
+                       return UUID.fromString("1903d460-94cc-4fc4-b2a8-a3fb0cfd69a0");                 \r
+               }else{\r
+                       logger.warn("Unknown webMarker category: " + markerCategoryId);\r
+                       return null;\r
+               }\r
+\r
+       }\r
        \r
 }\r