rename ISectionBase -> ISection
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / berlinModel / BerlinModelTransformer.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.cdm.io.berlinModel;
11
12 import java.sql.ResultSet;
13 import java.sql.SQLException;
14 import java.util.UUID;
15
16 import org.apache.log4j.Logger;
17
18 import eu.etaxonomy.cdm.common.ResultWrapper;
19 import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
20 import eu.etaxonomy.cdm.model.common.Language;
21 import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
22 import eu.etaxonomy.cdm.model.common.RelationshipBase;
23 import eu.etaxonomy.cdm.model.common.RelationshipTermBase;
24 import eu.etaxonomy.cdm.model.description.AbsenceTerm;
25 import eu.etaxonomy.cdm.model.description.Feature;
26 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
27 import eu.etaxonomy.cdm.model.description.PresenceTerm;
28 import eu.etaxonomy.cdm.model.name.HybridRelationshipType;
29 import eu.etaxonomy.cdm.model.name.NameRelationshipType;
30 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
31 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
32 import eu.etaxonomy.cdm.model.name.Rank;
33 import eu.etaxonomy.cdm.model.name.RankClass;
34 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
35 import eu.etaxonomy.cdm.model.reference.ISection;
36 import eu.etaxonomy.cdm.model.reference.Reference;
37 import eu.etaxonomy.cdm.model.reference.ReferenceType;
38 import eu.etaxonomy.cdm.model.taxon.Synonym;
39 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
40 import eu.etaxonomy.cdm.model.taxon.Taxon;
41 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
42 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
43 import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
44
45 /**
46 * @author a.mueller
47 * @created 20.03.2008
48 * @version 1.0
49 */
50 public class BerlinModelTransformer {
51 private static final Logger logger = Logger.getLogger(BerlinModelTransformer.class);
52
53 //ranks
54 public static UUID uuidRankCollSpecies = UUID.fromString("e14630ee-9446-4bb4-a7b7-4c3881bc5d94");
55 public static UUID uuidRankProles = UUID.fromString("8810d1ba-6a34-4ae3-a355-919ccd1cd1a5");
56 public static UUID uuidRankRace = UUID.fromString("196dee39-cfd8-4460-8bf0-88b83da27f62");
57 public static UUID uuidRankSublusus = UUID.fromString("1fafa596-a8e7-4e62-a378-3cc8cb3627ca");
58
59 //named areas
60 public static UUID euroMedUuid = UUID.fromString("9fe09988-58c0-4c06-8474-f660a0c50014");
61
62 public static UUID uuidEasternEuropeanRussia = UUID.fromString("3f013375-0e0a-40c3-8a14-84c0535fab40");
63 public static UUID uuidSerbiaMontenegro = UUID.fromString("8926dbe6-863e-47a9-98a0-7dc9ed2c57f7");
64 public static UUID uuidSerbia = UUID.fromString("4ffed197-3d7e-4cd9-8984-e64b8dee9512");
65 public static UUID uuidLebanonSyria = UUID.fromString("0c45f250-99da-4b19-aa89-c3e56cfdf103");
66 public static UUID uuidUssr = UUID.fromString("a512e00a-45f3-4be5-82fa-bba8d675696f");
67 public static UUID uuidSicilyMalta = UUID.fromString("424d81ee-d272-4ae8-9600-0a334049cd72");
68
69 public static UUID uuidDesertas = UUID.fromString("36f5e93e-34e8-45b5-a401-f0e0faad21cf");
70 public static UUID uuidMadeira = UUID.fromString("086e27ee-78ff-4236-aca9-9850850cd355");
71 public static UUID uuidPortoSanto = UUID.fromString("1f9ab6a0-a402-4dfe-8c5b-b1844eb4d8e5");
72 //azores
73 public static UUID uuidFlores = UUID.fromString("ef0067c2-8bbb-4e37-8462-97b03f51ba43");
74 public static UUID uuidCorvo = UUID.fromString("b1e6117c-2be1-43a3-9233-227dd90bdee9");
75 public static UUID uuidFaial = UUID.fromString("14f6dcdb-6524-4700-b80c-66424952ef2b");
76 public static UUID uuidGraciosa = UUID.fromString("05f93a7b-d813-4833-864f-eedbba747133");
77 public static UUID uuidSaoJorge = UUID.fromString("578e0ecd-b5e3-4c87-8ecc-0fc4c7e217d9");
78 public static UUID uuidSaoMiguel = UUID.fromString("0e2f6ad8-7afb-4f01-b134-4f71991e877a");
79 public static UUID uuidPico = UUID.fromString("98cc566f-4110-43d5-830f-68436a009f49");
80 public static UUID uuidSantaMaria = UUID.fromString("bd5e5d4a-22b7-41aa-8e58-1d1d73a9954d");
81 public static UUID uuidTerceira = UUID.fromString("6fc257c0-a131-41f0-b6c3-51ef9c4fa962");
82 //Canyry islands
83 public static UUID uuidGranCanaria = UUID.fromString("a0240c35-0e05-4157-8321-67ba8e31fdb9");
84 public static UUID uuidFuerteventura = UUID.fromString("549ce2c1-6d49-4bf3-b75d-cf3f4b5a1398");
85 public static UUID uuidGomera = UUID.fromString("895fab09-7478-4210-b42a-423d23c6f85e");
86 public static UUID uuidHierro = UUID.fromString("d137b6a5-31bc-418c-9403-f042017dc04b");
87 public static UUID uuidLanzaroteWithGraciosa = UUID.fromString("c9b08dc1-f301-4d9d-b447-b8744602c776");
88 public static UUID uuidLaPalma = UUID.fromString("fdb3f2b2-f154-4f04-9f31-240a47a0e780");
89 public static UUID uuidTenerife = UUID.fromString("73658c7e-a568-465e-bd84-4554fc93ca56");
90 //Baleares
91 public static UUID uuidIbizaWithFormentera = UUID.fromString("1cda2a33-3469-49d5-8e77-cb5451110519");
92 public static UUID uuidMallorca = UUID.fromString("a10cba04-b4b5-4a4b-b69a-fcd4b3916fec");
93 public static UUID uuidMenorca = UUID.fromString("9f6ede48-27f8-4270-bf4e-c97eaa86aab7");
94
95 //russia
96 public static UUID uuidRussiaNorthern = UUID.fromString("c23bc1c9-a775-4426-b883-07d4d7d47eed");
97 public static UUID uuidRussiaBaltic = UUID.fromString("579dad44-9439-4b19-8716-ab90d8f27944");
98 public static UUID uuidRussiaCentral = UUID.fromString("8bbc8c6a-2ef2-4024-ad51-66fe34c70092");
99 public static UUID uuidRussiaSouthWest = UUID.fromString("daa5c207-5567-4690-8742-5e4d153b6a64");
100 public static UUID uuidRussiaSouthEast = UUID.fromString("e8516598-b529-489e-9ee8-63bbbd295c1b");
101 public static UUID uuidEastAegeanIslands = UUID.fromString("1c429593-c493-46e6-971a-0d70be690da8");
102 public static UUID uuidTurkishEastAegeanIslands = UUID.fromString("ba35dba3-ac70-41ae-81c2-2070943f44f2");
103 public static UUID uuidBalticStates = UUID.fromString("bf9d64f6-3183-4fa5-8e90-73090e7a2282");
104 public static final UUID uuidTurkey = UUID.fromString("d344ee2c-14c8-438d-b03d-11538edb1268");
105 public static final UUID uuidCaucasia = UUID.fromString("ebfd3fd1-3859-4e5e-95c7-f66010599d7e");
106
107 //language areas
108 public static final UUID uuidUkraineAndCrimea = UUID.fromString("99d4d1c2-09f6-416e-86a3-bdde5cae52af");
109 public static final UUID uuidAzerbaijanNakhichevan = UUID.fromString("232fbef0-9f4a-4cab-8ac1-e14c717e9de6");
110
111 //Marker Types
112 public static final UUID uuidMisappliedCommonName = UUID.fromString("25f5cfc3-16ab-4aba-a008-0db0f2cf7f9d");
113
114 //Extension Types
115 public static final UUID uuidSpeciesExpertName = UUID.fromString("2e8153d2-7412-49e4-87e1-5c38f4c5153a");
116 public static final UUID uuidExpertName = UUID.fromString("24becb79-a90c-47d3-be35-efc87bb48fd3");
117
118 public static final UUID DETAIL_EXT_UUID = UUID.fromString("c3959b4f-d876-4b7a-a739-9260f4cafd1c");
119 public static final UUID ID_IN_SOURCE_EXT_UUID = UUID.fromString("23dac094-e793-40a4-bad9-649fc4fcfd44");
120
121 //languages
122 public static final UUID uuidLangMajorcan = UUID.fromString("82d696d7-cb4e-49de-ac89-63a0e12ca766");
123
124 //REFERENCES
125 public static int REF_ARTICLE = 1;
126 public static int REF_PART_OF_OTHER_TITLE = 2;
127 public static int REF_BOOK = 3;
128 public static int REF_DATABASE = 4;
129 public static int REF_INFORMAL = 5;
130 public static int REF_NOT_APPLICABLE = 6;
131 public static int REF_WEBSITE = 7;
132 public static int REF_CD = 8;
133 public static int REF_JOURNAL = 9;
134 public static int REF_UNKNOWN = 10;
135 public static int REF_PRINT_SERIES = 55;
136 public static int REF_CONFERENCE_PROCEEDINGS = 56;
137 public static int REF_JOURNAL_VOLUME = 57;
138
139
140
141 //NameStatus
142 public static int NAME_ST_NOM_INVAL = 1;
143 public static int NAME_ST_NOM_ILLEG = 2;
144 public static int NAME_ST_NOM_NUD = 3;
145 public static int NAME_ST_NOM_REJ = 4;
146 public static int NAME_ST_NOM_REJ_PROP = 5;
147 public static int NAME_ST_NOM_UTIQUE_REJ = 6;
148 public static int NAME_ST_NOM_UTIQUE_REJ_PROP = 7;
149 public static int NAME_ST_NOM_CONS = 8;
150 public static int NAME_ST_NOM_CONS_PROP = 9;
151 public static int NAME_ST_ORTH_CONS = 10;
152 public static int NAME_ST_ORTH_CONS_PROP = 11;
153 public static int NAME_ST_NOM_SUPERFL = 12;
154 public static int NAME_ST_NOM_AMBIG = 13;
155 public static int NAME_ST_NOM_PROVIS = 14;
156 public static int NAME_ST_NOM_DUB = 15;
157 public static int NAME_ST_NOM_NOV = 16;
158 public static int NAME_ST_NOM_CONFUS = 17;
159 public static int NAME_ST_NOM_ALTERN = 18;
160 public static int NAME_ST_COMB_INVAL = 19;
161
162
163 //NameRelationShip
164 public static int NAME_REL_IS_BASIONYM_FOR = 1;
165 public static int NAME_REL_IS_LATER_HOMONYM_OF = 2;
166 public static int NAME_REL_IS_REPLACED_SYNONYM_FOR = 3;
167 public static int NAME_REL_IS_VALIDATION_OF = 4;
168 public static int NAME_REL_IS_LATER_VALIDATION_OF = 5;
169 public static int NAME_REL_IS_TYPE_OF = 6;
170 public static int NAME_REL_IS_CONSERVED_TYPE_OF =7;
171 public static int NAME_REL_IS_REJECTED_TYPE_OF = 8;
172 public static int NAME_REL_IS_FIRST_PARENT_OF = 9;
173 public static int NAME_REL_IS_SECOND_PARENT_OF = 10;
174 public static int NAME_REL_IS_FEMALE_PARENT_OF = 11;
175 public static int NAME_REL_IS_MALE_PARENT_OF = 12;
176 public static int NAME_REL_IS_CONSERVED_AGAINST =13;
177 public static int NAME_REL_IS_REJECTED_IN_FAVOUR_OF = 14;
178 public static int NAME_REL_IS_TREATED_AS_LATER_HOMONYM_OF = 15;
179 public static int NAME_REL_IS_ORTHOGRAPHIC_VARIANT_OF = 16;
180 public static int NAME_REL_IS_ALTERNATIVE_NAME_FOR = 17;
181 public static int NAME_REL_HAS_SAME_TYPE_AS = 18;
182 public static int NAME_REL_IS_LECTOTYPE_OF = 61;
183 public static int NAME_REL_TYPE_NOT_DESIGNATED = 62;
184
185 //NameFacts
186 public static String NAME_FACT_PROTOLOGUE = "Protologue";
187 public static String NAME_FACT_ALSO_PUBLISHED_IN = "Also published in";
188 public static String NAME_FACT_BIBLIOGRAPHY = "Bibliography";
189
190 //TaxonRelationShip
191 public static int TAX_REL_IS_INCLUDED_IN = 1;
192 public static int TAX_REL_IS_SYNONYM_OF = 2;
193 public static int TAX_REL_IS_MISAPPLIED_NAME_OF = 3;
194 public static int TAX_REL_IS_PROPARTE_SYN_OF = 4;
195 public static int TAX_REL_IS_PARTIAL_SYN_OF = 5;
196 public static int TAX_REL_IS_HETEROTYPIC_SYNONYM_OF = 6;
197 public static int TAX_REL_IS_HOMOTYPIC_SYNONYM_OF = 7;
198 public static int TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF = 101;
199 public static int TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF = 102;
200 public static int TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF = 103;
201 public static int TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF = 104;
202
203
204
205 //TaxonStatus
206 public static int T_STATUS_ACCEPTED = 1;
207 public static int T_STATUS_SYNONYM = 2;
208 public static int T_STATUS_PARTIAL_SYN = 3;
209 public static int T_STATUS_PRO_PARTE_SYN = 4;
210 public static int T_STATUS_UNRESOLVED = 5;
211 public static int T_STATUS_ORPHANED = 6;
212
213
214 //Facts
215 public static int FACT_DESCRIPTION = 1;
216 public static int FACT_GROWTH_FORM = 2;
217 public static int FACT_HARDINESS = 3;
218 public static int FACT_ECOLOGY = 4;
219 public static int FACT_PHENOLOGY = 5;
220 public static int FACT_KARYOLOGY = 6;
221 public static int FACT_ILLUSTRATION = 7;
222 public static int FACT_IDENTIFICATION = 8;
223 public static int FACT_OBSERVATION = 9;
224 public static int FACT_DISTRIBUTION_EM = 10;
225 public static int FACT_DISTRIBUTION_WORLD = 11;
226 //E+M
227 public static final UUID uuidFeatureMaps = UUID.fromString("8367730e-f3c3-4361-8360-a2057e4295ed");
228 public static final UUID uuidFeatureConservationStatus = UUID.fromString("a32f33cd-1966-4a22-986c-94c5e688bbd1");
229 public static final UUID uuidFeatureUse = UUID.fromString("199bbbd8-2db6-4335-b454-2e92ae02b699");
230 public static final UUID uuidFeatureComments = UUID.fromString("31cc2b92-5cad-44e9-b50f-b8af591a527c");
231 public static final UUID uuidFeatureDistrEM = UUID.fromString("a5ba7e7f-ca7f-4f50-afc7-73e76b3231d4");
232 public static final UUID uuidFeatureDistrWorld = UUID.fromString("e4e24080-7017-47e6-924e-d2560fa68fb8");
233 public static final UUID uuidFeatureEditorBrackets = UUID.fromString("b3b5bc1a-7ba8-4a39-9c0d-63ba599eb5d8");
234 public static final UUID uuidFeatureEditorParenthesis = UUID.fromString("6ee10a2e-ff02-4cf4-a520-89630edc5b44");
235 public static final UUID uuidFeatureInedited = UUID.fromString("c93e2968-bc52-4165-9755-ce37611faf01");
236 public static final UUID uuidFeatureCommentsEditing = UUID.fromString("7a155021-158a-48bb-81d0-9a72b718e2de");
237
238
239
240 public static UUID uuidNomStatusCombIned = UUID.fromString("dde8a2e7-bf9e-42ec-b186-d5bde9c9c128");
241 public static UUID uuidNomStatusSpNovIned = UUID.fromString("1a359ca1-9364-43bc-93e4-834bdcd52b72");
242 public static UUID uuidNomStatusNomOrthCons = UUID.fromString("0f838183-ffa0-4014-928e-0e3a27eb3918");
243
244 static NomenclaturalStatusType nomStatusCombIned;
245 static NomenclaturalStatusType nomStatusSpNovIned;
246 static NomenclaturalStatusType nomStatusNomOrthCons;
247
248 public static NomenclaturalStatusType nomStatusTypeAbbrev2NewNomStatusType(String nomStatus){
249 NomenclaturalStatusType result = null;
250 if (nomStatus == null){
251 return null;
252 }else if (nomStatus.equalsIgnoreCase("comb. ined.")){
253 if (nomStatusCombIned == null){
254 nomStatusCombIned = NomenclaturalStatusType.NewInstance("comb. ined.", "comb. ined.", "comb. ined.", Language.LATIN());
255 nomStatusCombIned.setUuid(uuidNomStatusCombIned);
256 NomenclaturalStatusType.ALTERNATIVE().getVocabulary().addTerm(nomStatusCombIned);
257 }
258 result = nomStatusCombIned;
259 }else if (nomStatus.equalsIgnoreCase("sp. nov. ined.")){
260 if (nomStatusSpNovIned == null){
261 nomStatusSpNovIned = NomenclaturalStatusType.NewInstance("sp. nov. ined.", "sp. nov. ined.", "sp. nov. ined.", Language.LATIN());
262 nomStatusSpNovIned.setUuid(uuidNomStatusSpNovIned);
263 NomenclaturalStatusType.ALTERNATIVE().getVocabulary().addTerm(nomStatusSpNovIned);
264 }
265 result = nomStatusSpNovIned;
266 }else if (nomStatus.equalsIgnoreCase("nom. & orth. cons.")){
267 if (nomStatusNomOrthCons == null){
268 nomStatusNomOrthCons = NomenclaturalStatusType.NewInstance("nom. & orth. cons.", "nom. & orth. cons.", "nom. & orth. cons.", Language.LATIN());
269 nomStatusNomOrthCons.setUuid(uuidNomStatusNomOrthCons);
270 NomenclaturalStatusType.ALTERNATIVE().getVocabulary().addTerm(nomStatusNomOrthCons);
271 }
272 result = nomStatusNomOrthCons;
273 }
274 return result;
275 }
276
277
278 public static NomenclaturalStatus nomStatusFkToNomStatus(int nomStatusFk, String nomStatusLabel) throws UnknownCdmTypeException{
279 if (nomStatusFk == NAME_ST_NOM_INVAL){
280 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.INVALID());
281 }else if (nomStatusFk == NAME_ST_NOM_ILLEG){
282 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.ILLEGITIMATE());
283 }else if (nomStatusFk == NAME_ST_NOM_NUD){
284 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.NUDUM());
285 }else if (nomStatusFk == NAME_ST_NOM_REJ){
286 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.REJECTED());
287 }else if (nomStatusFk == NAME_ST_NOM_REJ_PROP){
288 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.REJECTED_PROP());
289 }else if (nomStatusFk == NAME_ST_NOM_UTIQUE_REJ){
290 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.UTIQUE_REJECTED());
291 }else if (nomStatusFk == NAME_ST_NOM_UTIQUE_REJ_PROP){
292 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.UTIQUE_REJECTED_PROP());
293 }else if (nomStatusFk == NAME_ST_NOM_CONS){
294 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONSERVED());
295 }else if (nomStatusFk == NAME_ST_NOM_CONS_PROP){
296 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONSERVED_PROP());
297 }else if (nomStatusFk == NAME_ST_ORTH_CONS){
298 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.ORTHOGRAPHY_CONSERVED());
299 }else if (nomStatusFk == NAME_ST_ORTH_CONS_PROP){
300 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.ORTHOGRAPHY_CONSERVED_PROP());
301 }else if (nomStatusFk == NAME_ST_NOM_SUPERFL){
302 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.SUPERFLUOUS());
303 }else if (nomStatusFk == NAME_ST_NOM_AMBIG){
304 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.AMBIGUOUS());
305 }else if (nomStatusFk == NAME_ST_NOM_PROVIS){
306 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.PROVISIONAL());
307 }else if (nomStatusFk == NAME_ST_NOM_DUB){
308 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.DOUBTFUL());
309 }else if (nomStatusFk == NAME_ST_NOM_NOV){
310 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.NOVUM());
311 }else if (nomStatusFk == NAME_ST_NOM_CONFUS){
312 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.CONFUSUM());
313 }else if (nomStatusFk == NAME_ST_NOM_ALTERN){
314 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.ALTERNATIVE());
315 }else if (nomStatusFk == NAME_ST_COMB_INVAL){
316 return NomenclaturalStatus.NewInstance(NomenclaturalStatusType.COMBINATION_INVALID());
317 }else {
318 NomenclaturalStatusType statusType = nomStatusTypeAbbrev2NewNomStatusType(nomStatusLabel);
319 NomenclaturalStatus result = NomenclaturalStatus.NewInstance(statusType);
320 if (result != null){
321 return result;
322 }
323 throw new UnknownCdmTypeException("Unknown NomenclaturalStatus (id=" + Integer.valueOf(nomStatusFk).toString() + ")");
324 }
325 }
326
327
328 //TypeDesignation
329 public static SpecimenTypeDesignationStatus typeStatusId2TypeStatus (int typeStatusId) throws UnknownCdmTypeException{
330 switch (typeStatusId){
331 case 0: return null;
332 case 1: return SpecimenTypeDesignationStatus.HOLOTYPE();
333 case 2: return SpecimenTypeDesignationStatus.LECTOTYPE();
334 case 3: return SpecimenTypeDesignationStatus.NEOTYPE();
335 case 4: return SpecimenTypeDesignationStatus.EPITYPE();
336 case 5: return SpecimenTypeDesignationStatus.ISOLECTOTYPE();
337 case 6: return SpecimenTypeDesignationStatus.ISONEOTYPE();
338 case 7: return SpecimenTypeDesignationStatus.ISOTYPE();
339 case 8: return SpecimenTypeDesignationStatus.PARANEOTYPE();
340 case 9: return SpecimenTypeDesignationStatus.PARATYPE();
341 case 10: return SpecimenTypeDesignationStatus.SECOND_STEP_LECTOTYPE();
342 case 11: return SpecimenTypeDesignationStatus.SECOND_STEP_NEOTYPE();
343 case 12: return SpecimenTypeDesignationStatus.SYNTYPE();
344 case 21: return SpecimenTypeDesignationStatus.ICONOTYPE();
345 case 22: return SpecimenTypeDesignationStatus.PHOTOTYPE();
346 default: {
347 throw new UnknownCdmTypeException("Unknown TypeDesignationStatus (id=" + Integer.valueOf(typeStatusId).toString() + ")");
348 }
349 }
350 }
351
352 //TypeDesignation
353 public static TaxonRelationshipType taxonRelId2TaxonRelType (int relTaxonTypeId, ResultWrapper<Boolean> isInverse) throws UnknownCdmTypeException{
354 isInverse.setValue(false);
355 switch (relTaxonTypeId){
356 case 0: return null;
357 case 11: return TaxonRelationshipType.CONGRUENT_TO();
358 case 12: isInverse.setValue(true); return TaxonRelationshipType.INCLUDES();
359 case 13: isInverse.setValue(true); return TaxonRelationshipType.CONGRUENT_OR_INCLUDES();
360 case 14: return TaxonRelationshipType.INCLUDES();
361 case 15: return TaxonRelationshipType.CONGRUENT_OR_INCLUDES();
362 case 16: return TaxonRelationshipType.INCLUDED_OR_INCLUDES();
363 case 17: return TaxonRelationshipType.CONGRUENT_OR_INCLUDED_OR_INCLUDES();
364 case 18: return TaxonRelationshipType.OVERLAPS();
365 case 19: return TaxonRelationshipType.CONGRUENT_OR_OVERLAPS();
366 case 20: isInverse.setValue(true); return TaxonRelationshipType.INCLUDES_OR_OVERLAPS();
367 case 21: isInverse.setValue(true); return TaxonRelationshipType.CONGRUENT_OR_INCLUDES_OR_OVERLAPS();
368 case 22: return TaxonRelationshipType.INCLUDES_OR_OVERLAPS();
369 case 23: return TaxonRelationshipType.CONGRUENT_OR_INCLUDES_OR_OVERLAPS();
370 case 24: return TaxonRelationshipType.INCLUDED_OR_INCLUDES_OR_OVERLAPS();
371
372 case 26: return TaxonRelationshipType.EXCLUDES();
373
374 //TODO other relationshipTypes
375
376 case 40: return TaxonRelationshipType.NOT_CONGRUENT_TO();
377
378 //FIXME doubtful
379 case 43: return TaxonRelationshipType.CONGRUENT_TO();
380 default: {
381 throw new UnknownCdmTypeException("Unknown TypeDesignationStatus (id=" + Integer.valueOf(relTaxonTypeId).toString() + ")");
382 }
383 }
384 }
385
386 //TypeDesignation
387 public static HybridRelationshipType relNameId2HybridRel (int relNameId) throws UnknownCdmTypeException{
388 switch (relNameId){
389 case 0: return null;
390 case 9: return HybridRelationshipType.FIRST_PARENT();
391 case 10: return HybridRelationshipType.SECOND_PARENT();
392 case 11: return HybridRelationshipType.FEMALE_PARENT();
393 case 12: return HybridRelationshipType.MALE_PARENT();
394 default: {
395 throw new UnknownCdmTypeException("Unknown HybridRelationshipType (id=" + Integer.valueOf(relNameId).toString() + ")");
396 }
397 }
398 }
399
400 //OccStatus
401 public static PresenceAbsenceTermBase<?> occStatus2PresenceAbsence (int occStatusId) throws UnknownCdmTypeException{
402 switch (occStatusId){
403 case 0: return null;
404 case 110: return AbsenceTerm.CULTIVATED_REPORTED_IN_ERROR();
405 case 120: return PresenceTerm.CULTIVATED();
406 case 210: return AbsenceTerm.INTRODUCED_REPORTED_IN_ERROR();
407 case 220: return PresenceTerm.INTRODUCED_PRESENCE_QUESTIONABLE();
408 case 230: return AbsenceTerm.INTRODUCED_FORMERLY_INTRODUCED();
409 case 240: return PresenceTerm.INTRODUCED_DOUBTFULLY_INTRODUCED();
410 case 250: return PresenceTerm.INTRODUCED();
411 case 260: return PresenceTerm.INTRODUCED_UNCERTAIN_DEGREE_OF_NATURALISATION();
412 case 270: return PresenceTerm.INTRODUCED_ADVENTITIOUS();
413 case 280: return PresenceTerm.INTRODUCED_NATURALIZED();
414 case 310: return AbsenceTerm.NATIVE_REPORTED_IN_ERROR();
415 case 320: return PresenceTerm.NATIVE_PRESENCE_QUESTIONABLE();
416 case 330: return AbsenceTerm.NATIVE_FORMERLY_NATIVE();
417 case 340: return PresenceTerm.NATIVE_DOUBTFULLY_NATIVE();
418 case 350: return PresenceTerm.NATIVE();
419 case 999: {
420 logger.info("endemic for EM can not be transformed in legal status. Used 'PRESENT' instead");
421 //TODO preliminary
422 return PresenceTerm.PRESENT();
423 }
424 default: {
425 throw new UnknownCdmTypeException("Unknown occurrence status (id=" + Integer.valueOf(occStatusId).toString() + ")");
426 }
427 }
428 }
429
430
431 //FactCategory
432 public static Feature factCategory2Feature (int factCategoryId) throws UnknownCdmTypeException{
433 switch (factCategoryId){
434 case 0: return null;
435 case 1: return Feature.DESCRIPTION();
436 case 4: return Feature.ECOLOGY();
437 case 5: return Feature.PHENOLOGY();
438 case 12: return Feature.COMMON_NAME();
439 case 13: return Feature.OCCURRENCE();
440 case 99: return Feature.CITATION();
441 default: {
442 throw new UnknownCdmTypeException("Unknown FactCategory (id=" + Integer.valueOf(factCategoryId).toString() + ")");
443 }
444 }
445 }
446
447 public static UUID getFeatureUuid(String key) throws UndefinedTransformerMethodException {
448 if (key == null){
449 return null;
450 }else if (key.equalsIgnoreCase("14-Maps")){ return uuidFeatureMaps;
451 }else if (key.equalsIgnoreCase("301-Conservation Status")){ return uuidFeatureConservationStatus;
452 }else if (key.equalsIgnoreCase("302-Use")){ return uuidFeatureUse;
453 }else if (key.equalsIgnoreCase("303-Comments")){ return uuidFeatureComments;
454
455 }else if (key.equalsIgnoreCase("10-general distribution (Euro+Med)")){ return uuidFeatureDistrEM;
456 }else if (key.equalsIgnoreCase("11-general distribution (world)")){ return uuidFeatureDistrWorld;
457 }else if (key.equalsIgnoreCase("250-Editor_Brackets")){ return uuidFeatureEditorBrackets;
458 }else if (key.equalsIgnoreCase("251-Editor_Parenthesis")){ return uuidFeatureEditorParenthesis;
459 }else if (key.equalsIgnoreCase("252-Inedited")){ return uuidFeatureInedited;
460 }else if (key.equalsIgnoreCase("253-Comments on editing process")){ return uuidFeatureCommentsEditing;
461
462 }else{
463 return null;
464 }
465 }
466
467
468 static Rank collSpeciesRank;
469 /**
470 * @param i
471 * @return
472 */
473 private static Rank rankId2NewRank(Integer rankId, boolean switchRank) {
474 Rank result = null;
475 if (rankId == null){
476 return null;
477 }else if (rankId == 57){
478
479 if (collSpeciesRank == null){
480 collSpeciesRank = Rank.NewInstance(RankClass.SpeciesGroup, "Collective species", "Coll. species", "coll.");
481 collSpeciesRank.setUuid(uuidRankCollSpecies);
482 OrderedTermVocabulary<Rank> voc = (OrderedTermVocabulary<Rank>)Rank.SPECIES().getVocabulary();
483 voc.addTermBelow(collSpeciesRank, Rank.SPECIESGROUP());
484 }
485 result = collSpeciesRank;
486 }
487 return result;
488 }
489
490
491 public static Rank rankId2Rank (ResultSet rs, boolean useUnknown, boolean switchSpeciesGroup) throws UnknownCdmTypeException{
492 Rank result;
493 try {
494 int rankId = rs.getInt("rankFk");
495
496 String abbrev = rs.getString("rankAbbrev");
497 String rankName = rs.getString("rank");
498 if (logger.isDebugEnabled()){logger.debug(rankId);}
499 if (logger.isDebugEnabled()){logger.debug(abbrev);}
500 if (logger.isDebugEnabled()){logger.debug(rankName);}
501
502 if (switchSpeciesGroup){
503 if (rankId == 59){
504 rankId = 57;
505 }else if (rankId == 57){
506 rankId = 59;
507 }
508 }
509 try {
510 result = Rank.getRankByNameOrIdInVoc(abbrev);
511 } catch (UnknownCdmTypeException e) {
512 try {
513 result = Rank.getRankByNameOrIdInVoc(rankName);
514 } catch (UnknownCdmTypeException e1) {
515 switch (rankId){
516 case 0: return null;
517 case 1: return Rank.KINGDOM();
518 case 3: return Rank.SUBKINGDOM();
519 case 5: return Rank.PHYLUM();
520 case 7: return Rank.SUBPHYLUM();
521 case 8: return Rank.DIVISION();
522 case 9: return Rank.SUBDIVISION();
523 case 10: return Rank.CLASS();
524 case 13: return Rank.SUBCLASS();
525 case 16: return Rank.SUPERORDER();
526 case 18: return Rank.ORDER();
527 case 19: return Rank.SUBORDER();
528 case 20: return Rank.FAMILY();
529 case 25: return Rank.SUBFAMILY();
530 case 30: return Rank.TRIBE();
531 case 35: return Rank.SUBTRIBE();
532 case 40: return Rank.GENUS();
533 case 42: return Rank.SUBGENUS();
534 case 45: return Rank.SECTION_BOTANY();
535 case 47: return Rank.SUBSECTION_BOTANY();
536 case 50: return Rank.SERIES();
537 case 52: return Rank.SUBSERIES();
538 case 58: return Rank.SPECIESAGGREGATE();
539 case 59: return Rank.SPECIESGROUP();
540 case 60: return Rank.SPECIES();
541 case 61: return Rank.GREX();
542 case 65: return Rank.SUBSPECIES();
543 case 66: {System.out.println("Rank 66 not yet implemented"); throw new UnknownCdmTypeException("Unknown Rank id" + Integer.valueOf(rankId).toString());}
544 case 67: {System.out.println("Rank 67 not yet implemented"); throw new UnknownCdmTypeException("Unknown Rank id" + Integer.valueOf(rankId).toString());}
545 case 68: return Rank.CONVAR();
546 case 70: return Rank.VARIETY();
547 case 73: return Rank.SUBVARIETY();
548 case 80: return Rank.FORM();
549 case 82: return Rank.SUBFORM();
550 case 84: return Rank.SPECIALFORM();
551 case 98: return Rank.INFRAGENERICTAXON();
552 case 99: return Rank.INFRASPECIFICTAXON();
553
554 case 750: return Rank.SUPERCLASS();
555 case 780: return Rank.INFRACLASS();
556 case 820: return Rank.INFRAORDER();
557
558 case 830: return Rank.SUPERFAMILY();
559
560 default: {
561 Rank rank = rankId2NewRank(57, switchSpeciesGroup);
562 if (rank != null){
563 return rank;
564 }
565 if (useUnknown){
566 logger.error("Rank unknown: " + rankId + ". Created UNKNOWN_RANK");
567 return Rank.UNKNOWN_RANK();
568 }
569 throw new UnknownCdmTypeException("Unknown Rank id" + Integer.valueOf(rankId).toString());
570 }
571 }
572 }
573 }
574 return result;
575 } catch (SQLException e) {
576 e.printStackTrace();
577 logger.warn("Exception occurred. Created UNKNOWN_RANK instead");
578 return Rank.UNKNOWN_RANK();
579 }
580 }
581
582
583 public static Integer rank2RankId (Rank rank){
584 if (rank == null){
585 return null;
586 }
587 else if (rank.equals(Rank.KINGDOM())){ return 1;}
588 else if (rank.equals(Rank.SUBKINGDOM())){ return 3;}
589 else if (rank.equals(Rank.PHYLUM())){ return 5;}
590 else if (rank.equals(Rank.SUBPHYLUM())){ return 7;}
591 else if (rank.equals(Rank.DIVISION())){ return 8;}
592 else if (rank.equals(Rank.SUBDIVISION())){ return 9;}
593
594 else if (rank.equals(Rank.CLASS())){ return 10;}
595 else if (rank.equals(Rank.SUBCLASS())){ return 13;}
596 else if (rank.equals(Rank.SUPERORDER())){ return 16;}
597 else if (rank.equals(Rank.ORDER())){ return 18;}
598 else if (rank.equals(Rank.SUBORDER())){ return 19;}
599 else if (rank.equals(Rank.FAMILY())){ return 20;}
600 else if (rank.equals(Rank.SUBFAMILY())){ return 25;}
601 else if (rank.equals(Rank.TRIBE())){ return 30;}
602 else if (rank.equals(Rank.SUBTRIBE())){ return 35;}
603 else if (rank.equals(Rank.GENUS())){ return 40;}
604 else if (rank.equals(Rank.SUBGENUS())){ return 42;}
605 else if (rank.equals(Rank.SECTION_BOTANY())){ return 45;}
606 else if (rank.equals(Rank.SUBSECTION_BOTANY())){ return 47;}
607 else if (rank.equals(Rank.SERIES())){ return 50;}
608 else if (rank.equals(Rank.SUBSERIES())){ return 52;}
609 else if (rank.equals(Rank.SPECIESAGGREGATE())){ return 58;}
610 //TODO
611 // else if (rank.equals(Rank.XXX())){ return 59;}
612 else if (rank.equals(Rank.SPECIES())){ return 60;}
613 else if (rank.equals(Rank.SUBSPECIES())){ return 65;}
614 else if (rank.equals(Rank.CONVAR())){ return 68;}
615 else if (rank.equals(Rank.VARIETY())){ return 70;}
616 else if (rank.equals(Rank.SUBVARIETY())){ return 73;}
617 else if (rank.equals(Rank.FORM())){ return 80;}
618 else if (rank.equals(Rank.SUBFORM())){ return 82;}
619 else if (rank.equals(Rank.SPECIALFORM())){ return 84;}
620 else if (rank.equals(Rank.INFRAGENERICTAXON())){ return 98;}
621 else if (rank.equals(Rank.INFRASPECIFICTAXON())){ return 99;}
622
623 else if (rank.equals(Rank.SUPERCLASS())){ return 750;}
624 else if (rank.equals(Rank.INFRACLASS())){ return 780;}
625 else if (rank.equals(Rank.INFRAORDER())){ return 820;}
626 else if (rank.equals(Rank.SUPERFAMILY())){ return 830;}
627
628 else {
629 //TODO Exception
630 logger.warn("Rank not yet supported in Berlin Model: "+ rank.getLabel());
631 return null;
632 }
633 }
634
635 public static Integer textData2FactCategoryFk (Feature feature){
636 if (feature == null){return null;}
637 if (feature.equals(Feature.DESCRIPTION())){
638 return 1;
639 }else if (feature.equals(Feature.ECOLOGY())){
640 return 4;
641 }else if (feature.equals(Feature.PHENOLOGY())){
642 return 5;
643 }else if (feature.equals(Feature.COMMON_NAME())){
644 return 12;
645 }else if (feature.equals(Feature.OCCURRENCE())){
646 return 13;
647 }else if (feature.equals(Feature.CITATION())){
648 return 99;
649 }else{
650 logger.debug("Unknown Feature.");
651 return null;
652 }
653 }
654
655
656 public static Integer taxonBase2statusFk (TaxonBase<?> taxonBase){
657 if (taxonBase == null){return null;}
658 if (taxonBase.isInstanceOf(Taxon.class)){
659 return T_STATUS_ACCEPTED;
660 }else if (taxonBase.isInstanceOf(Synonym.class)){
661 return T_STATUS_SYNONYM;
662 }else{
663 logger.warn("Unknown ");
664 return T_STATUS_UNRESOLVED;
665 }
666 //TODO
667 // public static int T_STATUS_PARTIAL_SYN = 3;
668 // public static int T_STATUS_PRO_PARTE_SYN = 4;
669 // public static int T_STATUS_UNRESOLVED = 5;
670 // public static int T_STATUS_ORPHANED = 6;
671 }
672
673 public static Integer ref2refCategoryId (Reference<?> ref){
674 if (ref == null){
675 return null;
676 }
677 else if (ref.getType().equals(ReferenceType.Article)){ return REF_ARTICLE;}
678 else if (ref instanceof ISection){ return REF_PART_OF_OTHER_TITLE;}
679 else if (ref.getType().equals(ReferenceType.Book)){ return REF_BOOK;}
680 else if (ref.getType().equals(ReferenceType.Database)){ return REF_DATABASE;}
681 // else if (ref instanceof SectionBas){ return REF_INFORMAL;}
682 // else if (ref instanceof SectionBas){ return REF_NOT_APPLICABLE;}
683 else if (ref.getType().equals(ReferenceType.WebPage)){ return REF_WEBSITE;}
684 else if (ref.getType().equals(ReferenceType.CdDvd)){ return REF_CD;}
685 else if (ref.getType().equals(ReferenceType.Journal)){ return REF_JOURNAL;}
686 else if (ref.getType().equals(ReferenceType.Generic)){ return REF_UNKNOWN;}
687 else if (ref.getType().equals(ReferenceType.PrintSeries)){
688 logger.warn("Print Series is not a standard Berlin Model category");
689 return REF_PRINT_SERIES;
690 }
691 else if (ref.getType().equals(ReferenceType.Proceedings)){
692 logger.warn("Proceedings is not a standard Berlin Model category");
693 return REF_CONFERENCE_PROCEEDINGS;
694 }
695 // else if (ref instanceof ){ return REF_JOURNAL_VOLUME;}
696 else if (ref.getType().equals(ReferenceType.Patent)){ return REF_NOT_APPLICABLE;}
697 else if (ref.getType().equals(ReferenceType.PersonalCommunication)){ return REF_INFORMAL;}
698 else if (ref.getType().equals(ReferenceType.Report)){ return REF_NOT_APPLICABLE;}
699 else if (ref.getType().equals(ReferenceType.Thesis)){ return REF_NOT_APPLICABLE;}
700 else if (ref.getType().equals(ReferenceType.Report)){ return REF_NOT_APPLICABLE;}
701
702 else {
703 //TODO Exception
704 logger.warn("Reference type not yet supported in Berlin Model: "+ ref.getClass().getSimpleName());
705 return null;
706 }
707 }
708
709
710 public static Integer taxRelation2relPtQualifierFk (RelationshipBase<?,?,?> rel){
711 if (rel == null){
712 return null;
713 }
714 // else if (rel instanceof SynonymRelationship){
715 // return ;
716 // }else if (rel instanceof TaxonRelationship){
717 RelationshipTermBase<?> type = rel.getType();
718 if (type.equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN())) {return TAX_REL_IS_INCLUDED_IN;
719 }else if (type.equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())) {return TAX_REL_IS_MISAPPLIED_NAME_OF;
720 }else if (type.equals(SynonymRelationshipType.SYNONYM_OF())) {return TAX_REL_IS_SYNONYM_OF;
721 }else if (type.equals(SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF())) {return TAX_REL_IS_HOMOTYPIC_SYNONYM_OF;
722 }else if (type.equals(SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF())) {return TAX_REL_IS_HETEROTYPIC_SYNONYM_OF;
723 }else if (type.equals(TaxonRelationshipType.CONGRUENT_TO())) {return 11;
724 // public static int TAX_REL_IS_PROPARTE_SYN_OF = 4;
725 // public static int TAX_REL_IS_PARTIAL_SYN_OF = 5;
726 // public static int TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF = 101;
727 // public static int TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF = 102;
728 // public static int TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF = 103;
729 // public static int TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF = 104;
730
731 }else {
732 //TODO Exception
733 logger.warn("Relationship type not yet supported by Berlin Model export: "+ rel.getType());
734 return null;
735 }
736 }
737
738 public static Integer nomStatus2nomStatusFk (NomenclaturalStatusType status){
739 if (status == null){
740 return null;
741 }
742 if (status.equals(NomenclaturalStatusType.INVALID())) {return NAME_ST_NOM_INVAL;
743 }else if (status.equals(NomenclaturalStatusType.ILLEGITIMATE())) {return NAME_ST_NOM_ILLEG;
744 }else if (status.equals(NomenclaturalStatusType.NUDUM())) {return NAME_ST_NOM_NUD;
745 }else if (status.equals(NomenclaturalStatusType.REJECTED())) {return NAME_ST_NOM_REJ;
746 }else if (status.equals(NomenclaturalStatusType.REJECTED_PROP())) {return NAME_ST_NOM_REJ_PROP;
747 }else if (status.equals(NomenclaturalStatusType.UTIQUE_REJECTED())) {return NAME_ST_NOM_UTIQUE_REJ;
748 }else if (status.equals(NomenclaturalStatusType.UTIQUE_REJECTED_PROP())) {return NAME_ST_NOM_UTIQUE_REJ_PROP;
749 }else if (status.equals(NomenclaturalStatusType.CONSERVED())) {return NAME_ST_NOM_CONS;
750
751 }else if (status.equals(NomenclaturalStatusType.CONSERVED_PROP())) {return NAME_ST_NOM_CONS_PROP;
752 }else if (status.equals(NomenclaturalStatusType.ORTHOGRAPHY_CONSERVED())) {return NAME_ST_ORTH_CONS;
753 }else if (status.equals(NomenclaturalStatusType.ORTHOGRAPHY_CONSERVED_PROP())) {return NAME_ST_ORTH_CONS_PROP;
754 }else if (status.equals(NomenclaturalStatusType.SUPERFLUOUS())) {return NAME_ST_NOM_SUPERFL;
755 }else if (status.equals(NomenclaturalStatusType.AMBIGUOUS())) {return NAME_ST_NOM_AMBIG;
756 }else if (status.equals(NomenclaturalStatusType.PROVISIONAL())) {return NAME_ST_NOM_PROVIS;
757 }else if (status.equals(NomenclaturalStatusType.DOUBTFUL())) {return NAME_ST_NOM_DUB;
758 }else if (status.equals(NomenclaturalStatusType.NOVUM())) {return NAME_ST_NOM_NOV;
759
760 }else if (status.equals(NomenclaturalStatusType.CONFUSUM())) {return NAME_ST_NOM_CONFUS;
761 }else if (status.equals(NomenclaturalStatusType.ALTERNATIVE())) {return NAME_ST_NOM_ALTERN;
762 }else if (status.equals(NomenclaturalStatusType.COMBINATION_INVALID())) {return NAME_ST_COMB_INVAL;
763 //TODO
764 }else {
765 //TODO Exception
766 logger.warn("NomStatus type not yet supported by Berlin Model export: "+ status);
767 return null;
768 }
769 }
770
771
772
773 public static Integer nameRel2RelNameQualifierFk (RelationshipBase<?,?,?> rel){
774 if (rel == null){
775 return null;
776 }
777 RelationshipTermBase<?> type = rel.getType();
778 if (type.equals(NameRelationshipType.BASIONYM())) {return NAME_REL_IS_BASIONYM_FOR;
779 }else if (type.equals(NameRelationshipType.LATER_HOMONYM())) {return NAME_REL_IS_LATER_HOMONYM_OF;
780 }else if (type.equals(NameRelationshipType.REPLACED_SYNONYM())) {return NAME_REL_IS_REPLACED_SYNONYM_FOR;
781 //TODO
782 }else if (type.equals(NameRelationshipType.VALIDATED_BY_NAME())) {return NAME_REL_IS_VALIDATION_OF;
783 }else if (type.equals(NameRelationshipType.LATER_VALIDATED_BY_NAME())) {return NAME_REL_IS_LATER_VALIDATION_OF;
784 }else if (type.equals(NameRelationshipType.CONSERVED_AGAINST())) {return NAME_REL_IS_CONSERVED_AGAINST;
785
786
787 }else if (type.equals(NameRelationshipType.TREATED_AS_LATER_HOMONYM())) {return NAME_REL_IS_TREATED_AS_LATER_HOMONYM_OF;
788 }else if (type.equals(NameRelationshipType.ORTHOGRAPHIC_VARIANT())) {return NAME_REL_IS_ORTHOGRAPHIC_VARIANT_OF;
789 }else {
790 //TODO Exception
791 logger.warn("Relationship type not yet supported by Berlin Model export: "+ rel.getType());
792 return null;
793 }
794
795 //NameRelationShip
796
797 // }else if (type.equals(NameRelationshipType.())) {return NAME_REL_IS_REJECTED_IN_FAVOUR_OF;
798
799 // public static int NAME_REL_IS_FIRST_PARENT_OF = 9;
800 // public static int NAME_REL_IS_SECOND_PARENT_OF = 10;
801 // public static int NAME_REL_IS_FEMALE_PARENT_OF = 11;
802 // public static int NAME_REL_IS_MALE_PARENT_OF = 12;
803 //
804 // public static int NAME_REL_IS_REJECTED_IN_FAVOUR_OF = 14;
805 // }else if (type.equals(NameRelationshipType.)) {return NAME_REL_IS_REJECTED_TYPE_OF;
806 //
807 // public static int NAME_REL_HAS_SAME_TYPE_AS = 18;
808 // public static int NAME_REL_IS_LECTOTYPE_OF = 61;
809 // public static int NAME_REL_TYPE_NOT_DESIGNATED = 62;
810
811 // }else if (type.equals(NameRelationshipType.LATER_VALIDATED_BY_NAME())) {return NAME_REL_IS_TYPE_OF;
812
813
814 }
815
816 public static UUID getWebMarkerUuid (int markerCategoryId){
817 if (markerCategoryId == 1){
818 return UUID.fromString("d8554418-d1ae-471d-a1bd-a0cbc7ab860c"); //any as not to find in cichorieae
819 }else if (markerCategoryId == 2){
820 return UUID.fromString("7f189c48-8632-4870-9ec8-e4d2489f324e");
821 }else if (markerCategoryId == 3){
822 return UUID.fromString("9a115e6b-8210-4dd3-825a-6fed11016c63");
823 }else if (markerCategoryId == 4){
824 return UUID.fromString("1d287011-2054-41c5-a919-17ac1d0a9270");
825 }else if (markerCategoryId == 9){
826 return UUID.fromString("cc5eca5c-1ae5-4feb-9a95-507fc167b0c9");
827 }else{
828 logger.warn("Unknown webMarker category: " + markerCategoryId);
829 return null;
830 }
831
832 }
833
834 }