1
2
3
4
5
6
7
8
9
10 package eu.etaxonomy.cdm.io.tcsxml;
11
12 import org.apache.log4j.Logger;
13
14 import eu.etaxonomy.cdm.common.ResultWrapper;
15 import eu.etaxonomy.cdm.model.common.RelationshipTermBase;
16 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
17 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
18 import eu.etaxonomy.cdm.model.name.Rank;
19 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
20
21
22
23
24
25
26 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
27 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
28
29 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
30 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
31 import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
32
33 public final class TcsXmlTransformer {
34 @SuppressWarnings("unused")
35 private static final Logger logger = Logger.getLogger(TcsXmlTransformer.class);
36
37
38
39 public static SpecimenTypeDesignationStatus typeStatusId2TypeStatus (int typeStatusId) throws UnknownCdmTypeException{
40 switch (typeStatusId){
41 case 1: return SpecimenTypeDesignationStatus.HOLOTYPE();
42 case 2: return SpecimenTypeDesignationStatus.LECTOTYPE();
43 case 3: return SpecimenTypeDesignationStatus.NEOTYPE();
44 case 4: return SpecimenTypeDesignationStatus.EPITYPE();
45 case 5: return SpecimenTypeDesignationStatus.ISOLECTOTYPE();
46 case 6: return SpecimenTypeDesignationStatus.ISONEOTYPE();
47 case 7: return SpecimenTypeDesignationStatus.ISOTYPE();
48 case 8: return SpecimenTypeDesignationStatus.PARANEOTYPE();
49 case 9: return SpecimenTypeDesignationStatus.PARATYPE();
50 case 10: return SpecimenTypeDesignationStatus.SECOND_STEP_LECTOTYPE();
51 case 11: return SpecimenTypeDesignationStatus.SECOND_STEP_NEOTYPE();
52 case 12: return SpecimenTypeDesignationStatus.SYNTYPE();
53 case 21: return SpecimenTypeDesignationStatus.ICONOTYPE();
54 case 22: return SpecimenTypeDesignationStatus.PHOTOTYPE();
55 default: {
56 throw new UnknownCdmTypeException("Unknown TypeDesignationStatus (id=" + Integer.valueOf(typeStatusId).toString() + ")");
57 }
58 }
59 }
60
61
62
63
64
65
66 public static Rank rankCode2Rank (String strRank) throws UnknownCdmTypeException{
67 if (strRank == null){return null;
68
69 }else if (strRank.equals("infragen")){return Rank.INFRAGENUS();
70 }else if (strRank.equals("subgen")){return Rank.SUBGENUS();
71 }else if (strRank.equals("gen")){return Rank.GENUS();
72
73
74 }else if (strRank.equals("aggr")){return Rank.SPECIESAGGREGATE();
75 }else if (strRank.equals("taxinfragen")){return Rank.INFRAGENERICTAXON();
76 }else if (strRank.equals("subser")){return Rank.SUBSERIES();
77 }else if (strRank.equals("ser")){return Rank.SERIES();
78 }else if (strRank.equals("subsect")){return Rank.SUBSECTION_BOTANY();
79 }else if (strRank.equals("sect")){return Rank.SECTION_BOTANY();
80
81 }else if (strRank.equals("subsp_aggr")){return Rank.SUBSPECIFICAGGREGATE();
82 }else if (strRank.equals("ssp")){return Rank.SUBSPECIES();
83 }else if (strRank.equals("sp")){return Rank.SPECIES();
84
85 }else if (strRank.equals("cand")){return Rank.CANDIDATE();
86 }else if (strRank.equals("taxinfrasp")){return Rank.INFRASPECIFICTAXON();
87 }else if (strRank.equals("fsp")){return Rank.SPECIALFORM();
88 }else if (strRank.equals("subsubfm")){return Rank.SUBSUBFORM();
89 }else if (strRank.equals("subfm")){return Rank.SUBFORM();
90 }else if (strRank.equals("fm")){return Rank.FORM();
91 }else if (strRank.equals("subsubvar")){return Rank.SUBSUBVARIETY();
92 }else if (strRank.equals("subvar")){return Rank.SUBVARIETY();
93 }else if (strRank.equals("var")){return Rank.VARIETY();
94
95
96
97 }else if (strRank.equals("infrasp")){return Rank.INFRASPECIES();
98
99 }else if (strRank.equals("infraord")){return Rank.INFRAORDER();
100 }else if (strRank.equals("ord")){return Rank.ORDER();
101 }else if (strRank.equals("superord")){return Rank.SUPERORDER();
102 }else if (strRank.equals("infracl")){return Rank.INFRACLASS();
103 }else if (strRank.equals("subcl")){return Rank.SUBCLASS();
104 }else if (strRank.equals("cl")){return Rank.CLASS();
105 }else if (strRank.equals("supercl")){return Rank.SUPERCLASS();
106 }else if (strRank.equals("infraphyl_div")){return Rank.INFRAPHYLUM();
107 }else if (strRank.equals("subphyl_div")){return Rank.SUBPHYLUM();
108 }else if (strRank.equals("phyl_div")){return Rank.PHYLUM();
109 }else if (strRank.equals("superphyl_div")){return Rank.SUPERPHYLUM();
110 }else if (strRank.equals("infrareg")){return Rank.INFRAKINGDOM();
111 }else if (strRank.equals("subreg")){return Rank.SUBKINGDOM();
112 }else if (strRank.equals("reg")){return Rank.KINGDOM();
113 }else if (strRank.equals("superreg")){return Rank.SUPERKINGDOM();
114 }else if (strRank.equals("dom")){return Rank.DOMAIN();
115 }else if (strRank.equals("taxsupragen")){return Rank.SUPRAGENERICTAXON();
116
117 }else if (strRank.equals("infrafam")){return Rank.FAMILY();
118 }else if (strRank.equals("subfam")){return Rank.FAMILY();
119 }else if (strRank.equals("fam")){return Rank.FAMILY();
120 }else if (strRank.equals("superfam")){return Rank.FAMILY();
121
122 }else if (strRank.equals("intratrib")){return Rank.FAMILY();
123 }else if (strRank.equals("subtrib")){return Rank.FAMILY();
124 }else if (strRank.equals("trib")){return Rank.FAMILY();
125 }else if (strRank.equals("supertrib")){return Rank.FAMILY();
126 }
127 else {
128 throw new UnknownCdmTypeException("Unknown Rank " + strRank);
129 }
130 }
131
132
133
134 public static NomenclaturalCode nomCodeString2NomCode (String nomCode) throws UnknownCdmTypeException{
135 if (nomCode != null){
136 nomCode = nomCode.trim();
137 }
138 if (nomCode == null){ return null;
139 }else if (nomCode.equals("Botanical")){return NomenclaturalCode.ICBN;
140 }else if (nomCode.equals("Zoological")){return NomenclaturalCode.ICZN;
141 }else if (nomCode.equals("Viral")){return NomenclaturalCode.ICVCN;
142 }else if (nomCode.equals("Bacteriological")){return NomenclaturalCode.ICNB;
143 }else if (nomCode.equals("CultivatedPlant")){return NomenclaturalCode.ICNCP;
144
145
146 }
147 else {
148 throw new UnknownCdmTypeException("Unknown Nomenclatural Code " + nomCode);
149 }
150 }
151
152 public static boolean isReverseRelationshipCategory (String tcsRelationshipCategory){
153 String str = tcsRelationshipCategory.replace("http://rs.tdwg.org/ontology/voc/TaxonConcept#", "");
154 if ("HasSynonym".equalsIgnoreCase(str)
155 || "IsParentTaxonOf".equalsIgnoreCase(str)
156 || "IsIncludedIn".equalsIgnoreCase(str)
157 || "DoesNotInclude".equalsIgnoreCase(str)
158 ){
159
160 return true;
161 }
162 return false;
163 }
164
165
166
167 public static ReferenceBase pubTypeStr2PubType (String strPubType) throws UnknownCdmTypeException{
168 String tcsRoot = "http://rs.tdwg.org/ontology/voc/PublicationCitation#";
169 String tcsBook = tcsRoot + "Book";
170 String tcsJournal = tcsRoot + "Journal";
171 String tcsWebPage = tcsRoot + "WebPage";
172 String tcsCommunication = tcsRoot + "Communication";
173 String tcsBookSeries = tcsRoot + "BookSeries";
174 String tcsArticle = tcsRoot + "JournalArticle";
175 String tcsBookSection = tcsRoot + "BookSection";
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197 ReferenceFactory refFactory = ReferenceFactory.newInstance();
198 if (strPubType == null){return null;
199 }else if (tcsBookSection.equals(strPubType)){return refFactory.newBookSection();
200 }else if (tcsBook.equals(strPubType)){return refFactory.newBook();
201 }else if (tcsArticle.equals(strPubType)){return refFactory.newArticle();
202 }else if (tcsJournal.equals(strPubType)){return refFactory.newJournal();
203 }else if (tcsWebPage.equals(strPubType)){return refFactory.newWebPage();
204 }else if (tcsCommunication.equals(strPubType)){return refFactory.newPersonalCommunication();
205 }else if (tcsBookSeries.equals(strPubType)){return refFactory.newPrintSeries();
206 }
207 else {
208 throw new UnknownCdmTypeException("Unknown publication type " + strPubType);
209 }
210 }
211
212
213
214 public static RelationshipTermBase tcsRelationshipType2Relationship (String tcsRelationshipType, ResultWrapper<Boolean> inverse) throws UnknownCdmTypeException{
215 if (tcsRelationshipType == null){ return null;
216
217
218
219 }else if (tcsRelationshipType.equals("has synonym")){inverse.setValue(true); return SynonymRelationshipType.SYNONYM_OF();
220
221
222 }else if (tcsRelationshipType.equals("is child taxon of")){return TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN();
223 }else if (tcsRelationshipType.equals("is parent taxon of")){inverse.setValue(true); return TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN();
224
225
226 }else if (tcsRelationshipType.equals("does not overlap")){return TaxonRelationshipType.DOES_NOT_OVERLAP();
227 }else if (tcsRelationshipType.equals("excludes")){return TaxonRelationshipType.EXCLUDES();
228 }else if (tcsRelationshipType.equals("includes")){return TaxonRelationshipType.INCLUDES();
229 }else if (tcsRelationshipType.equals("is congruent to")){return TaxonRelationshipType.CONGRUENT_TO();
230 }else if (tcsRelationshipType.equals("is not congruent to")){return TaxonRelationshipType.NOT_CONGRUENT_TO();
231 }else if (tcsRelationshipType.equals("is not included in")){return TaxonRelationshipType.NOT_INCLUDED_IN();
232 }else if (tcsRelationshipType.equals("overlaps")){return TaxonRelationshipType.OVERLAPS();
233
234 }else if (tcsRelationshipType.equals("is included in")){inverse.setValue(true); return TaxonRelationshipType.INCLUDES();
235 }else if (tcsRelationshipType.equals("does not include")){inverse.setValue(true); return TaxonRelationshipType.NOT_INCLUDED_IN();
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251 }else {
252 throw new UnknownCdmTypeException("Unknown RelationshipCategory " + tcsRelationshipType);
253 }
254 }
255
256
257
258
259 public static NomenclaturalStatusType nomStatusString2NomStatus (String nomStatus) throws UnknownCdmTypeException{
260
261 if (nomStatus == null){ return null;
262 }else if ("Valid".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.VALID();
263
264 }else if ("Alternative".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.ALTERNATIVE();
265 }else if ("nom. altern.".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.ALTERNATIVE();
266
267 }else if ("Ambiguous".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.AMBIGUOUS();
268
269 }else if ("Doubtful".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.DOUBTFUL();
270
271 }else if ("Confusum".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.CONFUSUM();
272
273 }else if ("Illegitimate".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.ILLEGITIMATE();
274 }else if ("nom. illeg.".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.ILLEGITIMATE();
275
276 }else if ("Superfluous".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.SUPERFLUOUS();
277 }else if ("nom. superfl.".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.SUPERFLUOUS();
278
279 }else if ("Rejected".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.REJECTED();
280 }else if ("nom. rej.".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.REJECTED();
281
282 }else if ("Utique Rejected".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.UTIQUE_REJECTED();
283
284 }else if ("Conserved Prop".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.CONSERVED_PROP();
285
286 }else if ("Orthography Conserved Prop".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.ORTHOGRAPHY_CONSERVED_PROP();
287
288 }else if ("Legitimate".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.LEGITIMATE();
289
290 }else if ("Novum".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.NOVUM();
291 }else if ("nom. nov.".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.NOVUM();
292
293 }else if ("Utique Rejected Prop".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.UTIQUE_REJECTED_PROP();
294
295 }else if ("Orthography Conserved".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.ORTHOGRAPHY_CONSERVED();
296
297 }else if ("Rejected Prop".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.REJECTED_PROP();
298
299 }else if ("Conserved".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.CONSERVED();
300 }else if ("nom. cons.".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.CONSERVED();
301
302 }else if ("Sanctioned".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.SANCTIONED();
303
304 }else if ("Invalid".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.INVALID();
305 }else if ("nom. inval.".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.INVALID();
306
307 }else if ("Nudum".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.NUDUM();
308 }else if ("nom. nud.".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.NUDUM();
309
310 }else if ("Combination Invalid".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.COMBINATION_INVALID();
311
312 }else if ("Provisional".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.PROVISIONAL();
313 }else if ("nom. provis.".equalsIgnoreCase(nomStatus)){return NomenclaturalStatusType.PROVISIONAL();
314 }
315 else {
316 throw new UnknownCdmTypeException("Unknown Nomenclatural status type " + nomStatus);
317 }
318 }
319
320
321 }