Adapted Redlist Import to new XML Schema...
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / redlist / bfnXml / BfnXmlTransformer.java
1 /**
2 * Copyright (C) 2009 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.redlist.bfnXml;
11
12 import java.util.UUID;
13
14 import org.apache.commons.lang.StringUtils;
15 import org.apache.log4j.Logger;
16
17 import eu.etaxonomy.cdm.common.ResultWrapper;
18 import eu.etaxonomy.cdm.model.common.RelationshipTermBase;
19 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
20 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
21 import eu.etaxonomy.cdm.model.name.Rank;
22 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
23 /*import eu.etaxonomy.cdm.model.reference.Article;
24 import eu.etaxonomy.cdm.model.reference.Book;
25 import eu.etaxonomy.cdm.model.reference.BookSection;
26 import eu.etaxonomy.cdm.model.reference.Journal;
27 import eu.etaxonomy.cdm.model.reference.PersonalCommunication;
28 import eu.etaxonomy.cdm.model.reference.PrintSeries;*/
29 import eu.etaxonomy.cdm.model.reference.Reference;
30 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
31 //import eu.etaxonomy.cdm.model.reference.WebPage;
32 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
33 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
34 import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
35
36 public final class BfnXmlTransformer {
37 @SuppressWarnings("unused")
38 private static final Logger logger = Logger.getLogger(BfnXmlTransformer.class);
39
40 //redList state Vocabularies
41 public static final UUID vocStateRLKat = UUID.fromString("66bbb391-af8a-423b-9506-a235b61af922");
42 public static final UUID vocStateRlKatDiff = UUID.fromString("abe3702e-ddd4-420c-a985-08a0f8138215");
43 public static final UUID vocStateRlAkt = UUID.fromString("a0bb10de-35c1-47f5-b700-02ceb0a6b50c");
44 public static final UUID vocStateRLLang = UUID.fromString("c48d99db-50b6-469f-879d-8bb781842382");
45 public static final UUID vocStateRLKurz = UUID.fromString("46549c3b-d9d0-4d34-9135-4789d5ed6fff");
46 public static final UUID vocStateRLRisk = UUID.fromString("ec38db54-07dd-4e48-8976-bfa4813ffa44");
47 public static final UUID vocStateRLResp = UUID.fromString("c4763d33-75ea-4387-991f-b767650b4899");
48 public static final UUID vocStateRLKatOld = UUID.fromString("e9be0626-e14e-4556-a8af-9d49e6279669");
49 public static final UUID vocStateRLNeo = UUID.fromString("6c55ae1d-046d-4b67-89aa-b24c4888df6a");
50 public static final UUID vocStateRLKatId = UUID.fromString("c54481b3-bf07-43ce-b1cb-09759e4d2a70");
51 public static final UUID vocStateRLSpecialCases = UUID.fromString("ce2f4f8f-4222-429f-938b-77b794ecf704");
52
53 //redlist feature
54 public static final UUID featureRLKat = UUID.fromString("744f8833-619a-4d83-b330-1997c3b2c2f9");
55 public static final UUID featureRlKatDiff = UUID.fromString("bf93361d-0c8c-4961-9f60-20bcb1d3dbaf");
56 public static final UUID featureRlAkt = UUID.fromString("39b6962b-05ba-4cd6-a1a9-337d5d156e2f");
57 public static final UUID featureRLLang = UUID.fromString("f6027318-b17d-49e6-b8eb-7464304044c8");
58 public static final UUID featureRLKurz = UUID.fromString("9ecc65b5-7760-4ce7-add0-950bdcc2c792");
59 public static final UUID featureRLRisk = UUID.fromString("2c8f8ffa-c604-4385-b428-4485f5650735");
60 public static final UUID featureRLResp = UUID.fromString("02d8010f-7d1b-46a3-8c01-b5e6760bfd14");
61 public static final UUID featureRLKatOld = UUID.fromString("bbdff68d-4fa0-438d-afb5-cff89791c93f");
62 public static final UUID featureRLNeo = UUID.fromString("153c7173-6d3d-4bee-b8f2-cf8e63e0bc25");
63 public static final UUID featureRLKatId = UUID.fromString("dc9f5dd2-302c-4a32-bd70-278bbd9abd16");
64 public static final UUID featureRLTaxComment = UUID.fromString("b7c05d78-16a4-4b6e-a03b-fa6bb2ed74ae");
65 public static final UUID featureRLHazardComment = UUID.fromString("5beb1ebf-8643-4d5f-9849-8087c35455bb");
66 public static final UUID featureRLSpecialCases = UUID.fromString("fb92068d-667a-448e-8019-ca4551891b3b");
67 public static final UUID featureRLLastOccurrence = UUID.fromString("218a32be-fb87-41c9-8d64-b21b43b47caa");
68 public static final UUID featureRLAdditionalComment = UUID.fromString("c610c98e-f242-4f3b-9edd-7b84a9435867");
69
70
71 //rl kat state list
72 public static final UUID stateTermRlKat0 = UUID.fromString("05ff7c0f-2fb2-4c10-9527-a2e0c68d68af");
73 public static final UUID stateTermRlKat1 = UUID.fromString("76a6defc-41d0-43bf-a15a-997caeefbbce");
74 public static final UUID stateTermRlKat2 = UUID.fromString("ee6b79b6-8306-42d1-a80a-2963ded7c952");
75 public static final UUID stateTermRlKat3 = UUID.fromString("309bf199-c0a3-4f01-829a-b10aafda4547");
76 public static final UUID stateTermRlKatG = UUID.fromString("fdf9c84e-1b76-4aa8-b676-a614591ad320");
77 public static final UUID stateTermRlKatR = UUID.fromString("a694e7bd-87a4-4d3c-8333-aed5092bcb0e");
78 public static final UUID stateTermRlKatV = UUID.fromString("b1a6695d-65f9-4c53-9765-fd7b54e1674c");
79 public static final UUID stateTermRlKatStar = UUID.fromString("1cda0ef4-cace-42e9-8061-4ada41d03974");
80 public static final UUID stateTermRlKatStar2 = UUID.fromString("539cffb0-29b9-48fd-af6e-abf9c466199c");
81 public static final UUID stateTermRlKatD = UUID.fromString("4d61cadd-b27e-41da-9c91-f29e96adaf89");
82 public static final UUID stateTermRlKatDiamond = UUID.fromString("aedc4006-4097-41cd-bab9-f8607ff84519");
83 public static final UUID stateTermRlKatKN = UUID.fromString("49dc7656-4cef-4b0e-81dd-8422a3d0d06b");
84
85 //rl kat diff state list
86 public static final UUID stateTermRLKatDiffPlus = UUID.fromString("6bc7ddc2-6f25-4076-a392-2626cb7a4b35");
87 public static final UUID stateTermRLKatDiffMinus = UUID.fromString("8f6a8c16-195c-4084-a201-8d702f9636e7");
88 public static final UUID stateTermRLKatDiffEqual = UUID.fromString("5215fd8a-7e70-43a6-abde-4e14966a0e0e");
89
90 //rl kat neo state list
91 public static final UUID stateTermRLKatNeo = UUID.fromString("d9ae3dc2-99c9-40aa-b724-9810ed52ca15");
92
93 //rl kat akt state list
94 public static final UUID stateTermRLKatAktEx = UUID.fromString("a36d4251-0ca1-4818-bbf7-4089a9362a7e");
95 public static final UUID stateTermRLKatAktEs = UUID.fromString("9d2426a2-d845-47df-9607-01addc4e3253");
96 public static final UUID stateTermRLKatAktSs = UUID.fromString("bde09fdd-459a-4f8e-a83c-ee562e220f52");
97 public static final UUID stateTermRLKatAktS = UUID.fromString("3f44fbd3-6d02-4cef-a2c7-c29684b4eb20");
98 public static final UUID stateTermRLKatAktMh = UUID.fromString("88e3cfff-623a-43b0-a708-e4d7125a504c");
99 public static final UUID stateTermRLKatAktH = UUID.fromString("ec96d3f0-0f32-4121-9636-41c44079c9ea");
100 public static final UUID stateTermRLKatAktSh = UUID.fromString("1126e1ad-5c06-43b2-bfd5-8327257a41eb");
101 public static final UUID stateTermRLKatAktQuest = UUID.fromString("2ee9820e-c98d-4d5a-8621-5d7b73be66c2");
102 public static final UUID stateTermRLKatAktNb = UUID.fromString("5da81f91-0089-4360-b07c-b3b833f8fc8e");
103 public static final UUID stateTermRLKatAktKn = UUID.fromString("f10865f9-aa13-4cf0-9e6c-cc657103bd13");
104
105 //rl kat lang state list
106 public static final UUID stateTermRLKatLangLT3 = UUID.fromString("6d23b5f9-ac18-4ecb-9be8-2c6e5e7db736");
107 public static final UUID stateTermRLKatLangLT2 = UUID.fromString("1bd75728-79ed-427d-b96e-858ddca6103d");
108 public static final UUID stateTermRLKatLangLT1 = UUID.fromString("b7c592a4-72cd-4914-87f0-05a6b324af43");
109 public static final UUID stateTermRLKatLangLT = UUID.fromString("5f202b93-6f20-4bae-ba3c-e2792b5451b4");
110 public static final UUID stateTermRLKatLangEqual = UUID.fromString("d66be068-4a0c-4f95-aa6e-9e5804ceb1f1");
111 public static final UUID stateTermRLKatLangGT = UUID.fromString("528185c6-3c12-41bd-a1e5-6ee3d729776c");
112 public static final UUID stateTermRLKatLangQuest = UUID.fromString("53076429-d4ac-427f-a9dc-2c8a15901999");
113
114 //rl kat kurz state list
115 public static final UUID stateTermRLKatKurzDown3 = UUID.fromString("dd97697c-004a-4860-a553-67695d32a992");
116 public static final UUID stateTermRLKatKurzDown2 = UUID.fromString("311a531b-8263-4c72-af79-662ffbc26fbe");
117 public static final UUID stateTermRLKatKurzDown1 = UUID.fromString("d2a2a51f-5c8f-4cef-809a-58162beae5c2");
118 public static final UUID stateTermRLKatKurzEqual = UUID.fromString("0a8cf4c0-8b7c-49d5-9195-0999a0f202ad");
119 public static final UUID stateTermRLKatKurzUp = UUID.fromString("13e7c95c-3ca3-435d-b7b6-4889e594bf2a");
120 public static final UUID stateTermRLKatKurzQuest = UUID.fromString("4eb11517-a874-484d-8390-dbb8c6bda47c");
121
122 //rl kat risk state list
123 public static final UUID stateTermRLKatRiskMinus = UUID.fromString("4e96c671-e1f7-4273-83e7-6650207b57e0");
124 public static final UUID stateTermRLKatRiskEqual = UUID.fromString("d3f00d31-26a4-40c0-99d4-55ea3672ff5d");
125
126 //rl kat resp state list
127 public static final UUID stateTermRLKatRespBang2 = UUID.fromString("d1e6b6cd-bb19-40a3-9d02-33099295e7f7");
128 public static final UUID stateTermRLKatRespBang1 = UUID.fromString("01856904-aced-4889-b955-d16872bcd0e8");
129 public static final UUID stateTermRLKatRespBang = UUID.fromString("c432e39e-ec09-41b7-be9b-28e0d76a4cf9");
130 public static final UUID stateTermRLKatRespQuest = UUID.fromString("4116fbda-a392-417c-be1c-08f5e72f762b");
131 public static final UUID stateTermRLKatRespNb = UUID.fromString("800328ce-f618-4de1-9237-243f16fbe9f9");
132
133 //rl Kat old state list
134 public static final UUID stateTermRLKatOld0 = UUID.fromString("1977b29c-8b63-407a-a11b-ada8726ac653");
135 public static final UUID stateTermRLKatOld1 = UUID.fromString("4f3d3255-7e06-4a4e-83d1-5841beee85d4");
136 public static final UUID stateTermRLKatOld2 = UUID.fromString("65163104-76db-4c20-a00f-5c7531f42b3b");
137 public static final UUID stateTermRLKatOld3 = UUID.fromString("3c0fbb9e-b3fa-4bab-ada2-6efb9b6b9155");
138 public static final UUID stateTermRLKatOldG = UUID.fromString("a3d2daf2-a570-40d7-b08d-d105a30bb5e2");
139 public static final UUID stateTermRLKatOldR = UUID.fromString("d6e511cb-40aa-48ab-8a0d-2365c984d698");
140 public static final UUID stateTermRLKatOldV = UUID.fromString("92a6f1ec-6d61-4879-826a-255c34492507");
141 public static final UUID stateTermRLKatOldStar = UUID.fromString("196310bc-3b8b-43c9-b317-e2b02bff5c8a");
142 public static final UUID stateTermRLKatOldStar2 = UUID.fromString("7fbc42ed-43b6-4198-a9dc-bb97bacb3b9b");
143 public static final UUID stateTermRLKatOldD = UUID.fromString("075a456c-2291-436c-9b9c-b06d95bf6fc6");
144 public static final UUID stateTermRLKatOldNb = UUID.fromString("72faec78-6db9-4471-9a65-c6d2337bd324");
145 public static final UUID stateTermRLKatOldKn = UUID.fromString("92276f3e-3c09-4761-ba5b-b49697c6d5ce");
146 public static final UUID stateTermEmpty = UUID.fromString("1d357340-5329-4f43-a454-7f99625a1d71");
147 public static final UUID stateTermRLSpecialS = UUID.fromString("71fda1f6-a7eb-44a0-aeb8-e7f676096916");
148 public static final UUID stateTermRLSpecialE = UUID.fromString("ef335a01-f4f1-4a02-95a2-2254aa457774");
149 public static final UUID stateTermRLSpecialD = UUID.fromString("6b267cc5-49b6-4ebd-87ec-aa574e9cbcc5");
150
151
152 public static TaxonRelationshipType concept2TaxonRelation(String conceptStatus) throws UnknownCdmTypeException{
153 if(conceptStatus == null) {
154 return null;
155 }else if(conceptStatus.equalsIgnoreCase("!=")){
156 return TaxonRelationshipType.CONGRUENT_TO();
157 }else if(conceptStatus.equalsIgnoreCase("!=,>")){
158 return TaxonRelationshipType.CONGRUENT_OR_INCLUDES();
159 }else if(conceptStatus.equalsIgnoreCase("!=,<")){
160 return TaxonRelationshipType.CONGRUENT_OR_INCLUDED_OR_INCLUDES();
161 }else if(conceptStatus.equalsIgnoreCase(">")){
162 return TaxonRelationshipType.INCLUDES();
163 }else if(conceptStatus.equalsIgnoreCase(">,><")){
164 return TaxonRelationshipType.INCLUDES_OR_OVERLAPS();
165 // }else if(conceptStatus.equalsIgnoreCase("<")){//TODO: should be just Included In
166 // return TaxonRelationshipType.INCLUDED_OR_INCLUDES();
167 }else if(conceptStatus.equalsIgnoreCase(">,><")){//TODO: should be Included In Or Overlaps
168 return TaxonRelationshipType.INCLUDED_OR_INCLUDES_OR_OVERLAPS();
169 }else if(conceptStatus.equalsIgnoreCase("><")){
170 return TaxonRelationshipType.OVERLAPS();
171 }else if(conceptStatus.equalsIgnoreCase("~")){//TODO Included in not here
172 return TaxonRelationshipType.CONGRUENT_OR_INCLUDES_OR_OVERLAPS();
173 }else if(conceptStatus.equalsIgnoreCase("?")){
174 return TaxonRelationshipType.ALL_RELATIONSHIPS();
175 }else if(conceptStatus.equalsIgnoreCase("/=")){
176 return TaxonRelationshipType.EXCLUDES();
177 }else if(conceptStatus.equalsIgnoreCase("\\")){
178 return TaxonRelationshipType.EXCLUDES();
179 }
180 else{
181 throw new UnknownCdmTypeException("Unknown concept relation status " + conceptStatus);
182 }
183 }
184
185
186 /** Creates an cdm-Rank by the tcs rank
187 */
188 public static Rank rankCode2Rank (String strRank) throws UnknownCdmTypeException{
189 if (strRank == null){return null;
190 //genus group
191 }else if (strRank.equals("infragen")){return Rank.INFRAGENUS();
192 }else if (strRank.equals("subgen")){return Rank.SUBGENUS();
193 }else if (strRank.equals("gen")){return Rank.GENUS();
194 //genus subdivision
195 //TODO
196 }else if (strRank.equals("aggr")){return Rank.SPECIESAGGREGATE();
197 }else if (strRank.equals("agg.")){return Rank.SPECIESAGGREGATE();
198 }else if (strRank.equals("taxinfragen")){return Rank.INFRAGENERICTAXON();
199 }else if (strRank.equals("subser")){return Rank.SUBSERIES();
200 }else if (strRank.equals("ser")){return Rank.SERIES();
201 }else if (strRank.equals("subsect")){return Rank.SUBSECTION_BOTANY();
202 }else if (strRank.equals("sect")){return Rank.SECTION_BOTANY();
203 //species group
204 }else if (strRank.equals("subsp_aggr")){return Rank.SUBSPECIFICAGGREGATE();
205 }else if (strRank.equals("ssp")){return Rank.SUBSPECIES();
206 }else if (strRank.equals("subsp.")){return Rank.SUBSPECIES();
207 }else if (strRank.equals("subsp")){return Rank.SUBSPECIES();
208 }else if (strRank.equals("sp")){return Rank.SPECIES();
209 }else if (strRank.equals("spezies")){return Rank.SPECIES();
210 //below subspecies
211 }else if (strRank.equals("cand")){return Rank.CANDIDATE();
212 }else if (strRank.equals("taxinfrasp")){return Rank.INFRASPECIFICTAXON();
213 }else if (strRank.equals("fsp")){return Rank.SPECIALFORM();
214 }else if (strRank.equals("subsubfm")){return Rank.SUBSUBFORM();
215 }else if (strRank.equals("subfm")){return Rank.SUBFORM();
216 }else if (strRank.equals("fm")){return Rank.FORM();
217 }else if (strRank.equals("f.")){return Rank.FORM();
218 }else if (strRank.equals("subsubvar")){return Rank.SUBSUBVARIETY();
219 }else if (strRank.equals("subvar")){return Rank.SUBVARIETY();
220 }else if (strRank.equals("var")){return Rank.VARIETY();
221 }else if (strRank.equals("var.")){return Rank.VARIETY();
222 //TODO -> see documentation, Bacteria status
223 // }else if (strRank.equals("pv")){return Rank;
224 // }else if (strRank.equals("bv")){return Rank.;
225 }else if (strRank.equals("infrasp")){return Rank.INFRASPECIES();
226 //above superfamily
227 }else if (strRank.equals("infraord")){return Rank.INFRAORDER();
228 }else if (strRank.equals("ord")){return Rank.ORDER();
229 }else if (strRank.equals("superord")){return Rank.SUPERORDER();
230 }else if (strRank.equals("infracl")){return Rank.INFRACLASS();
231 }else if (strRank.equals("subcl")){return Rank.SUBCLASS();
232 }else if (strRank.equals("cl")){return Rank.CLASS();
233 }else if (strRank.equals("supercl")){return Rank.SUPERCLASS();
234 }else if (strRank.equals("infraphyl_div")){return Rank.INFRAPHYLUM();
235 }else if (strRank.equals("subphyl_div")){return Rank.SUBPHYLUM();
236 }else if (strRank.equals("phyl_div")){return Rank.PHYLUM();
237 }else if (strRank.equals("superphyl_div")){return Rank.SUPERPHYLUM();
238 }else if (strRank.equals("infrareg")){return Rank.INFRAKINGDOM();
239 }else if (strRank.equals("subreg")){return Rank.SUBKINGDOM();
240 }else if (strRank.equals("reg")){return Rank.KINGDOM();
241 }else if (strRank.equals("superreg")){return Rank.SUPERKINGDOM();
242 }else if (strRank.equals("dom")){return Rank.DOMAIN();
243 }else if (strRank.equals("taxsupragen")){return Rank.SUPRAGENERICTAXON();
244 }else if (strRank.equals("Auswertungsgruppe")){return Rank.EMPIRE();
245 //family group
246 }else if (strRank.equals("infrafam")){return Rank.FAMILY();
247 }else if (strRank.equals("subfam")){return Rank.FAMILY();
248 }else if (strRank.equals("fam")){return Rank.FAMILY();
249 }else if (strRank.equals("superfam")){return Rank.FAMILY();
250 //family subdivision
251 }else if (strRank.equals("intratrib")){return Rank.FAMILY();
252 }else if (strRank.equals("subtrib")){return Rank.FAMILY();
253 }else if (strRank.equals("trib")){return Rank.FAMILY();
254 }else if (strRank.equals("supertrib")){return Rank.FAMILY();
255 }
256 else {
257 throw new UnknownCdmTypeException("Unknown Rank " + strRank);
258 }
259 }
260
261 public static String redListString2RedListCode (String redListCode) throws UnknownCdmTypeException{
262 if (redListCode == null){ return null;
263 }else if (redListCode.equals("#dtpl_RLKat_NULL#")){return "0";
264 }else if (redListCode.equals("#dtpl_RLKat_EINS#")){return "1";
265 }else if (redListCode.equals("#dtpl_RLKat_ZWEI#")){return "2";
266 }else if (redListCode.equals("#dtpl_RLKat_DREI#")){return "3";
267 }else if (redListCode.equals("#dtpl_RLKat_VIER#")){return "4";
268 }else if (redListCode.equals("#dtpl_RLKat_G#")){return "G";
269 }else if (redListCode.equals("#dtpl_RLKat_R#")){return "R";
270 }else if (redListCode.equals("#dtpl_RLKat_V#")){return "V";
271 }else if (redListCode.equals("#dtpl_RLKat_STERN#")){return "*";
272 }else if (redListCode.equals("#dtpl_RLKat_STERN##dtpl_RLKat_STERN#")){return "**";
273 }else if (redListCode.equals("#dtpl_RLKat_D#")){return "D";
274 }else if (redListCode.equals("#dtpl_RLKat_RAUTE#")){
275 char c = 0x2666;
276 return String.valueOf(c);
277 }else if (redListCode.equals("kN")){return "kN";
278 }else if (redListCode.equals("+")){return "+";
279 }else if (redListCode.equals("-")){return "-";
280 }else if (redListCode.equals("=")){return "=";
281 }else if (redListCode.equals("N")){return "N";
282 }else if (redListCode.equals("S")){return "S";
283 }else if (redListCode.equals("E")){return "E";
284 }else if (redListCode.equals("D")){return "D";
285 }else if (redListCode.equals("#dtpl_KurzfBest_RUNTER##dtpl_KurzfBest_RUNTER##dtpl_KurzfBest_RUNTER#")){
286 char c = 0x2193;
287 return String.valueOf(c)+String.valueOf(c)+String.valueOf(c);
288 }else if (redListCode.equals("#dtpl_KurzfBest_RUNTER##dtpl_KurzfBest_RUNTER#")){
289 char c = 0x2193;
290 return String.valueOf(c)+String.valueOf(c);
291 }else if (redListCode.equals("(#dtpl_KurzfBest_RUNTER#)")){
292 char c = 0x2193;
293 return "("+String.valueOf(c)+")";
294 }else if (redListCode.equals("#dtpl_KurzfBest_HOCH#")){
295 char c = 0x2191;
296 return String.valueOf(c);
297 }else if (redListCode.equals("#dtpl_Risiko_MINUS#")){return "-";
298 }else if (redListCode.equals("#dtpl_VERANTW_NB#")){return "nb";
299 }else if (redListCode.equals("#dtpl_TaxBez_GLEICH#")){return "=";
300 }else if (redListCode.equals("#dtpl_TaxBez_KLEINER#")){return "<";
301 }else if (redListCode.equals("#dtpl_TaxBez_GROESSER#")){return ">";
302 }else if (redListCode.equals("#dtpl_TaxBez_UNGLEICH#")){
303 char c = 0x2260;
304 return String.valueOf(c);
305 }else if (redListCode.equals("#dtpl_AlteRLKat_STERN#")){return "*";
306 }else if (redListCode.equals("#dtpl_AlteRLKat_ZWEISTERN#")){return "**";
307 }else if (redListCode.equals("#dtpl_AlteRLKat_NB#")){return "nb";
308 }else if (redListCode.equals("#dtpl_AlteRLKat_KN#")){return "kN";
309 }else if (redListCode.equals("#dtpl_TaxBez_UNGLEICH#")){return "-";
310 }else if (StringUtils.isBlank(redListCode)){return "keine Angabe";
311 }
312 else {
313 throw new UnknownCdmTypeException("Unknown Redlist Code " + redListCode);
314 }
315 }
316
317 public static NomenclaturalCode nomCodeString2NomCode (String nomCode) throws UnknownCdmTypeException{
318 if (nomCode != null){
319 nomCode = nomCode.trim();
320 }
321 if (nomCode == null){ return null;
322 }else if (nomCode.equals("Botanical")){return NomenclaturalCode.ICNAFP;
323 }else if (nomCode.equals("Zoological")){return NomenclaturalCode.ICZN;
324 }else if (nomCode.equals("Viral")){return NomenclaturalCode.ICVCN;
325 }else if (nomCode.equals("Bacteriological")){return NomenclaturalCode.ICNB;
326 }else if (nomCode.equals("CultivatedPlant")){return NomenclaturalCode.ICNCP;
327 //TODO code Indeterminate
328 // }else if (nomCode.equals("Indeterminate")){return NomenclaturalCode.XXX();
329 }
330 else {
331 throw new UnknownCdmTypeException("Unknown Nomenclatural Code " + nomCode);
332 }
333 }
334 public static UUID getRedlistVocabularyUUID(String redListVocabulary) throws UnknownCdmTypeException {
335
336 if(redListVocabulary.equalsIgnoreCase("RL Kat.")) return vocStateRLKat;
337 if(redListVocabulary.equalsIgnoreCase("Kat. +/-")) return vocStateRlKatDiff;
338 if(redListVocabulary.equalsIgnoreCase("aktuelle Bestandsstituation")) return vocStateRlAkt;
339 if(redListVocabulary.equalsIgnoreCase("langfristiger Bestandstrend")) return vocStateRLLang;
340 if(redListVocabulary.equalsIgnoreCase("kurzfristiger Bestandstrend")) return vocStateRLKurz;
341 if(redListVocabulary.equalsIgnoreCase("Risikofaktoren")) return vocStateRLRisk;
342 if(redListVocabulary.equalsIgnoreCase("Verantwortlichkeit")) return vocStateRLResp;
343 if(redListVocabulary.equalsIgnoreCase("alte RL- Kat.")) return vocStateRLKatOld;
344 if(redListVocabulary.equalsIgnoreCase("Neobiota")) return vocStateRLNeo;
345 if(redListVocabulary.equalsIgnoreCase("Eindeutiger Code")) return vocStateRLKatId;
346 if(redListVocabulary.equalsIgnoreCase("Sonderfälle")) return vocStateRLSpecialCases;
347 else{
348 throw new UnknownCdmTypeException("Unknown Vocabulary feature, could not match: " + redListVocabulary);
349 }
350
351 }
352
353
354 public static UUID getRedlistFeatureUUID(String redListFeature) throws UnknownCdmTypeException {
355
356 if(redListFeature.equalsIgnoreCase("RL Kat.")) return featureRLKat;
357 if(redListFeature.equalsIgnoreCase("Kat. +/-")) return featureRlKatDiff;
358 if(redListFeature.equalsIgnoreCase("aktuelle Bestandsstituation")) return featureRlAkt;
359 if(redListFeature.equalsIgnoreCase("langfristiger Bestandstrend")) return featureRLLang;
360 if(redListFeature.equalsIgnoreCase("kurzfristiger Bestandstrend")) return featureRLKurz;
361 if(redListFeature.equalsIgnoreCase("Risikofaktoren")) return featureRLRisk;
362 if(redListFeature.equalsIgnoreCase("Verantwortlichkeit")) return featureRLResp;
363 if(redListFeature.equalsIgnoreCase("alte RL- Kat.")) return featureRLKatOld;
364 if(redListFeature.equalsIgnoreCase("Neobiota")) return featureRLNeo;
365 if(redListFeature.equalsIgnoreCase("Eindeutiger Code")) return featureRLKatId;
366 if(redListFeature.equalsIgnoreCase("Kommentar zur Taxonomie")) return featureRLTaxComment;
367 if(redListFeature.equalsIgnoreCase("Kommentar zur Gefährdung")) return featureRLHazardComment;
368 if(redListFeature.equalsIgnoreCase("Sonderfälle")) return featureRLSpecialCases;
369 if(redListFeature.equalsIgnoreCase("Letzter Nachweis")) return featureRLLastOccurrence;
370 if(redListFeature.equalsIgnoreCase("Weitere Kommentare")) return featureRLAdditionalComment;
371
372 else{
373 throw new UnknownCdmTypeException("Unknown feature, could not match: " + redListFeature);
374 }
375
376 }
377
378 public static UUID getRedlistStateTermUUID(String redListStateTerm, String redListFeature) throws UnknownCdmTypeException {
379 //RL Kat
380 char a = 0x2666;
381 if(redListStateTerm.equalsIgnoreCase("0") && redListFeature.equalsIgnoreCase("RL Kat.")) return stateTermRlKat0;
382 if(redListStateTerm.equalsIgnoreCase("1") && redListFeature.equalsIgnoreCase("RL Kat.")) return stateTermRlKat1;
383 if(redListStateTerm.equalsIgnoreCase("2") && redListFeature.equalsIgnoreCase("RL Kat.")) return stateTermRlKat2;
384 if(redListStateTerm.equalsIgnoreCase("3") && redListFeature.equalsIgnoreCase("RL Kat.")) return stateTermRlKat3;
385 if(redListStateTerm.equalsIgnoreCase("G") && redListFeature.equalsIgnoreCase("RL Kat.")) return stateTermRlKatG;
386 if(redListStateTerm.equalsIgnoreCase("R") && redListFeature.equalsIgnoreCase("RL Kat.")) return stateTermRlKatR;
387 if(redListStateTerm.equalsIgnoreCase("V") && redListFeature.equalsIgnoreCase("RL Kat.")) return stateTermRlKatV;
388 if(redListStateTerm.equalsIgnoreCase("*") && redListFeature.equalsIgnoreCase("RL Kat.")) return stateTermRlKatStar;
389 if(redListStateTerm.equalsIgnoreCase("**") && redListFeature.equalsIgnoreCase("RL Kat.")) return stateTermRlKatStar2;
390 if(redListStateTerm.equalsIgnoreCase("D") && redListFeature.equalsIgnoreCase("RL Kat.")) return stateTermRlKatD;
391 if(redListStateTerm.equalsIgnoreCase(String.valueOf(a)) && redListFeature.equalsIgnoreCase("RL Kat.")) return stateTermRlKatDiamond;
392 if(redListStateTerm.equalsIgnoreCase("kN") && redListFeature.equalsIgnoreCase("RL Kat.")) return stateTermRlKatKN;
393
394 //RL Diff
395 if(redListStateTerm.equalsIgnoreCase("+") && redListFeature.equalsIgnoreCase("Kat. +/-")) return stateTermRLKatDiffPlus;
396 if(redListStateTerm.equalsIgnoreCase("-") && redListFeature.equalsIgnoreCase("Kat. +/-")) return stateTermRLKatDiffMinus;
397 if(redListStateTerm.equalsIgnoreCase("=") && redListFeature.equalsIgnoreCase("Kat. +/-")) return stateTermRLKatDiffEqual;
398
399 //Rl Akt
400 if(redListStateTerm.equalsIgnoreCase("ex") && redListFeature.equalsIgnoreCase("aktuelle Bestandsstituation")) return stateTermRLKatAktEx;
401 if(redListStateTerm.equalsIgnoreCase("es") && redListFeature.equalsIgnoreCase("aktuelle Bestandsstituation")) return stateTermRLKatAktEs;
402 if(redListStateTerm.equalsIgnoreCase("ss") && redListFeature.equalsIgnoreCase("aktuelle Bestandsstituation")) return stateTermRLKatAktSs;
403 if(redListStateTerm.equalsIgnoreCase("s") && redListFeature.equalsIgnoreCase("aktuelle Bestandsstituation")) return stateTermRLKatAktS;
404 if(redListStateTerm.equalsIgnoreCase("mh") && redListFeature.equalsIgnoreCase("aktuelle Bestandsstituation")) return stateTermRLKatAktMh;
405 if(redListStateTerm.equalsIgnoreCase("h") && redListFeature.equalsIgnoreCase("aktuelle Bestandsstituation")) return stateTermRLKatAktH;
406 if(redListStateTerm.equalsIgnoreCase("sh") && redListFeature.equalsIgnoreCase("aktuelle Bestandsstituation")) return stateTermRLKatAktSh;
407 if(redListStateTerm.equalsIgnoreCase("?") && redListFeature.equalsIgnoreCase("aktuelle Bestandsstituation")) return stateTermRLKatAktQuest;
408 if(redListStateTerm.equalsIgnoreCase("nb") && redListFeature.equalsIgnoreCase("aktuelle Bestandsstituation")) return stateTermRLKatAktNb;
409 if(redListStateTerm.equalsIgnoreCase("kN") && redListFeature.equalsIgnoreCase("aktuelle Bestandsstituation")) return stateTermRLKatAktKn;
410
411 //RL Lang
412 if(redListStateTerm.equalsIgnoreCase("<<<") && redListFeature.equalsIgnoreCase("langfristiger Bestandstrend")) return stateTermRLKatLangLT3;
413 if(redListStateTerm.equalsIgnoreCase("<<") && redListFeature.equalsIgnoreCase("langfristiger Bestandstrend")) return stateTermRLKatLangLT2;
414 if(redListStateTerm.equalsIgnoreCase("<") && redListFeature.equalsIgnoreCase("langfristiger Bestandstrend")) return stateTermRLKatLangLT1;
415 if(redListStateTerm.equalsIgnoreCase("(<)") && redListFeature.equalsIgnoreCase("langfristiger Bestandstrend")) return stateTermRLKatLangLT;
416 if(redListStateTerm.equalsIgnoreCase("=") && redListFeature.equalsIgnoreCase("langfristiger Bestandstrend")) return stateTermRLKatLangEqual;
417 if(redListStateTerm.equalsIgnoreCase(">") && redListFeature.equalsIgnoreCase("langfristiger Bestandstrend")) return stateTermRLKatLangGT;
418 if(redListStateTerm.equalsIgnoreCase("?") && redListFeature.equalsIgnoreCase("langfristiger Bestandstrend")) return stateTermRLKatLangQuest;
419
420 //RL Kurz
421 char c = 0x2193;
422 char b = 0x2191;
423 if(redListStateTerm.equalsIgnoreCase(String.valueOf(c)+String.valueOf(c)+String.valueOf(c)) && redListFeature.equalsIgnoreCase("kurzfristiger Bestandstrend")) return stateTermRLKatKurzDown3;
424 if(redListStateTerm.equalsIgnoreCase(String.valueOf(c)+String.valueOf(c)) && redListFeature.equalsIgnoreCase("kurzfristiger Bestandstrend")) return stateTermRLKatKurzDown2;
425 if(redListStateTerm.equalsIgnoreCase("("+String.valueOf(c)+")") && redListFeature.equalsIgnoreCase("kurzfristiger Bestandstrend")) return stateTermRLKatKurzDown1;
426 if(redListStateTerm.equalsIgnoreCase("=") && redListFeature.equalsIgnoreCase("kurzfristiger Bestandstrend")) return stateTermRLKatKurzEqual;
427 if(redListStateTerm.equalsIgnoreCase(String.valueOf(b)) && redListFeature.equalsIgnoreCase("kurzfristiger Bestandstrend")) return stateTermRLKatKurzUp;
428 if(redListStateTerm.equalsIgnoreCase("?") && redListFeature.equalsIgnoreCase("kurzfristiger Bestandstrend")) return stateTermRLKatKurzQuest;
429
430 //RL Risk
431 if(redListStateTerm.equalsIgnoreCase("-") && redListFeature.equalsIgnoreCase("Risikofaktoren")) return stateTermRLKatRiskMinus;
432 if(redListStateTerm.equalsIgnoreCase("=") && redListFeature.equalsIgnoreCase("Risikofaktoren")) return stateTermRLKatRiskEqual;
433
434 //RL Resp
435 if(redListStateTerm.equalsIgnoreCase("!!") && redListFeature.equalsIgnoreCase("Verantwortlichkeit")) return stateTermRLKatRespBang2;
436 if(redListStateTerm.equalsIgnoreCase("!") && redListFeature.equalsIgnoreCase("Verantwortlichkeit")) return stateTermRLKatRespBang1;
437 if(redListStateTerm.equalsIgnoreCase("(!)") && redListFeature.equalsIgnoreCase("Verantwortlichkeit")) return stateTermRLKatRespBang;
438 if(redListStateTerm.equalsIgnoreCase("?") && redListFeature.equalsIgnoreCase("Verantwortlichkeit")) return stateTermRLKatRespQuest;
439 if(redListStateTerm.equalsIgnoreCase("nb") && redListFeature.equalsIgnoreCase("Verantwortlichkeit")) return stateTermRLKatRespNb;
440
441 //RL Kat Old
442 if(redListStateTerm.equalsIgnoreCase("0") && redListFeature.equalsIgnoreCase("alte RL- Kat.")) return stateTermRLKatOld0;
443 if(redListStateTerm.equalsIgnoreCase("1") && redListFeature.equalsIgnoreCase("alte RL- Kat.")) return stateTermRLKatOld1;
444 if(redListStateTerm.equalsIgnoreCase("2") && redListFeature.equalsIgnoreCase("alte RL- Kat.")) return stateTermRLKatOld2;
445 if(redListStateTerm.equalsIgnoreCase("3") && redListFeature.equalsIgnoreCase("alte RL- Kat.")) return stateTermRLKatOld3;
446 if(redListStateTerm.equalsIgnoreCase("G") && redListFeature.equalsIgnoreCase("alte RL- Kat.")) return stateTermRLKatOldG;
447 if(redListStateTerm.equalsIgnoreCase("R") && redListFeature.equalsIgnoreCase("alte RL- Kat.")) return stateTermRLKatOldR;
448 if(redListStateTerm.equalsIgnoreCase("V") && redListFeature.equalsIgnoreCase("alte RL- Kat.")) return stateTermRLKatOldV;
449 if(redListStateTerm.equalsIgnoreCase("*") && redListFeature.equalsIgnoreCase("alte RL- Kat.")) return stateTermRLKatOldStar;
450 if(redListStateTerm.equalsIgnoreCase("**") && redListFeature.equalsIgnoreCase("alte RL- Kat.")) return stateTermRLKatOldStar2;
451 if(redListStateTerm.equalsIgnoreCase("D") && redListFeature.equalsIgnoreCase("alte RL- Kat.")) return stateTermRLKatOldD;
452 if(redListStateTerm.equalsIgnoreCase("nb") && redListFeature.equalsIgnoreCase("alte RL- Kat.")) return stateTermRLKatOldNb;
453 if(redListStateTerm.equalsIgnoreCase("kN") && redListFeature.equalsIgnoreCase("alte RL- Kat.")) return stateTermRLKatOldKn;
454
455 //RL Neo
456 if(redListStateTerm.equalsIgnoreCase("N") && redListFeature.equalsIgnoreCase("Neobiota")) return stateTermRLKatNeo;
457
458 //RL Special
459 if(redListStateTerm.equalsIgnoreCase("S") && redListFeature.equalsIgnoreCase("Sonderfälle")) return stateTermRLSpecialS;
460 if(redListStateTerm.equalsIgnoreCase("E") && redListFeature.equalsIgnoreCase("Sonderfälle")) return stateTermRLSpecialE;
461 if(redListStateTerm.equalsIgnoreCase("D") && redListFeature.equalsIgnoreCase("Sonderfälle")) return stateTermRLSpecialD;
462
463
464
465 //RL Empty
466 if(StringUtils.isBlank(redListStateTerm) || redListStateTerm.equalsIgnoreCase("keine Angabe")) return stateTermEmpty;
467
468 else
469 throw new UnknownCdmTypeException("Unknown State, could not match: " + redListStateTerm +"\n In Category: " + redListFeature);
470
471 }
472
473 }