2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.io
.berlinModel
;
12 import java
.sql
.ResultSet
;
13 import java
.sql
.SQLException
;
15 import org
.apache
.log4j
.Logger
;
17 import eu
.etaxonomy
.cdm
.common
.ResultWrapper
;
18 import eu
.etaxonomy
.cdm
.model
.common
.RelationshipBase
;
19 import eu
.etaxonomy
.cdm
.model
.common
.RelationshipTermBase
;
20 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
21 import eu
.etaxonomy
.cdm
.model
.description
.PresenceAbsenceTermBase
;
22 import eu
.etaxonomy
.cdm
.model
.description
.PresenceTerm
;
23 import eu
.etaxonomy
.cdm
.model
.name
.HybridRelationshipType
;
24 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationshipType
;
25 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalStatus
;
26 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalStatusType
;
27 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
28 import eu
.etaxonomy
.cdm
.model
.name
.SpecimenTypeDesignationStatus
;
29 import eu
.etaxonomy
.cdm
.model
.reference
.Article
;
30 import eu
.etaxonomy
.cdm
.model
.reference
.Book
;
31 import eu
.etaxonomy
.cdm
.model
.reference
.CdDvd
;
32 import eu
.etaxonomy
.cdm
.model
.reference
.Database
;
33 import eu
.etaxonomy
.cdm
.model
.reference
.Generic
;
34 import eu
.etaxonomy
.cdm
.model
.reference
.Journal
;
35 import eu
.etaxonomy
.cdm
.model
.reference
.Patent
;
36 import eu
.etaxonomy
.cdm
.model
.reference
.PersonalCommunication
;
37 import eu
.etaxonomy
.cdm
.model
.reference
.PrintSeries
;
38 import eu
.etaxonomy
.cdm
.model
.reference
.Proceedings
;
39 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceBase
;
40 import eu
.etaxonomy
.cdm
.model
.reference
.Report
;
41 import eu
.etaxonomy
.cdm
.model
.reference
.SectionBase
;
42 import eu
.etaxonomy
.cdm
.model
.reference
.Thesis
;
43 import eu
.etaxonomy
.cdm
.model
.reference
.WebPage
;
44 import eu
.etaxonomy
.cdm
.model
.taxon
.Synonym
;
45 import eu
.etaxonomy
.cdm
.model
.taxon
.SynonymRelationshipType
;
46 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
47 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
48 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonRelationshipType
;
49 import eu
.etaxonomy
.cdm
.strategy
.exceptions
.UnknownCdmTypeException
;
56 public final class BerlinModelTransformer
{
57 private static final Logger logger
= Logger
.getLogger(BerlinModelTransformer
.class);
60 public static int REF_ARTICLE
= 1;
61 public static int REF_PART_OF_OTHER_TITLE
= 2;
62 public static int REF_BOOK
= 3;
63 public static int REF_DATABASE
= 4;
64 public static int REF_INFORMAL
= 5;
65 public static int REF_NOT_APPLICABLE
= 6;
66 public static int REF_WEBSITE
= 7;
67 public static int REF_CD
= 8;
68 public static int REF_JOURNAL
= 9;
69 public static int REF_UNKNOWN
= 10;
70 public static int REF_PRINT_SERIES
= 55;
71 public static int REF_CONFERENCE_PROCEEDINGS
= 56;
72 public static int REF_JOURNAL_VOLUME
= 57;
77 public static int NAME_ST_NOM_INVAL
= 1;
78 public static int NAME_ST_NOM_ILLEG
= 2;
79 public static int NAME_ST_NOM_NUD
= 3;
80 public static int NAME_ST_NOM_REJ
= 4;
81 public static int NAME_ST_NOM_REJ_PROP
= 5;
82 public static int NAME_ST_NOM_UTIQUE_REJ
= 6;
83 public static int NAME_ST_NOM_UTIQUE_REJ_PROP
= 7;
84 public static int NAME_ST_NOM_CONS
= 8;
85 public static int NAME_ST_NOM_CONS_PROP
= 9;
86 public static int NAME_ST_ORTH_CONS
= 10;
87 public static int NAME_ST_ORTH_CONS_PROP
= 11;
88 public static int NAME_ST_NOM_SUPERFL
= 12;
89 public static int NAME_ST_NOM_AMBIG
= 13;
90 public static int NAME_ST_NOM_PROVIS
= 14;
91 public static int NAME_ST_NOM_DUB
= 15;
92 public static int NAME_ST_NOM_NOV
= 16;
93 public static int NAME_ST_NOM_CONFUS
= 17;
94 public static int NAME_ST_NOM_ALTERN
= 18;
95 public static int NAME_ST_COMB_INVAL
= 19;
99 public static int NAME_REL_IS_BASIONYM_FOR
= 1;
100 public static int NAME_REL_IS_LATER_HOMONYM_OF
= 2;
101 public static int NAME_REL_IS_REPLACED_SYNONYM_FOR
= 3;
102 public static int NAME_REL_IS_VALIDATION_OF
= 4;
103 public static int NAME_REL_IS_LATER_VALIDATION_OF
= 5;
104 public static int NAME_REL_IS_TYPE_OF
= 6;
105 public static int NAME_REL_IS_CONSERVED_TYPE_OF
=7;
106 public static int NAME_REL_IS_REJECTED_TYPE_OF
= 8;
107 public static int NAME_REL_IS_FIRST_PARENT_OF
= 9;
108 public static int NAME_REL_IS_SECOND_PARENT_OF
= 10;
109 public static int NAME_REL_IS_FEMALE_PARENT_OF
= 11;
110 public static int NAME_REL_IS_MALE_PARENT_OF
= 12;
111 public static int NAME_REL_IS_CONSERVED_AGAINST
=13;
112 public static int NAME_REL_IS_REJECTED_IN_FAVOUR_OF
= 14;
113 public static int NAME_REL_IS_TREATED_AS_LATER_HOMONYM_OF
= 15;
114 public static int NAME_REL_IS_ORTHOGRAPHIC_VARIANT_OF
= 16;
115 public static int NAME_REL_HAS_SAME_TYPE_AS
= 18;
116 public static int NAME_REL_IS_LECTOTYPE_OF
= 61;
117 public static int NAME_REL_TYPE_NOT_DESIGNATED
= 62;
120 public static String NAME_FACT_PROTOLOGUE
= "Protologue";
121 public static String NAME_FACT_ALSO_PUBLISHED_IN
= "Also published in";
124 public static int TAX_REL_IS_INCLUDED_IN
= 1;
125 public static int TAX_REL_IS_SYNONYM_OF
= 2;
126 public static int TAX_REL_IS_MISAPPLIED_NAME_OF
= 3;
127 public static int TAX_REL_IS_PROPARTE_SYN_OF
= 4;
128 public static int TAX_REL_IS_PARTIAL_SYN_OF
= 5;
129 public static int TAX_REL_IS_HETEROTYPIC_SYNONYM_OF
= 6;
130 public static int TAX_REL_IS_HOMOTYPIC_SYNONYM_OF
= 7;
131 public static int TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF
= 101;
132 public static int TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF
= 102;
133 public static int TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF
= 103;
134 public static int TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF
= 104;
139 public static int T_STATUS_ACCEPTED
= 1;
140 public static int T_STATUS_SYNONYM
= 2;
141 public static int T_STATUS_PARTIAL_SYN
= 3;
142 public static int T_STATUS_PRO_PARTE_SYN
= 4;
143 public static int T_STATUS_UNRESOLVED
= 5;
144 public static int T_STATUS_ORPHANED
= 6;
148 public static int FACT_DESCRIPTION
= 1;
149 public static int FACT_GROWTH_FORM
= 2;
150 public static int FACT_HARDINESS
= 3;
151 public static int FACT_ECOLOGY
= 4;
152 public static int FACT_PHENOLOGY
= 5;
153 public static int FACT_KARYOLOGY
= 6;
154 public static int FACT_ILLUSTRATION
= 7;
155 public static int FACT_IDENTIFICATION
= 8;
156 public static int FACT_OBSERVATION
= 9;
157 public static int FACT_DISTRIBUTION_EM
= 10;
158 public static int FACT_DISTRIBUTION_WORLD
= 11;
161 public static NomenclaturalStatus
nomStatusFkToNomStatus(int nomStatusFk
) throws UnknownCdmTypeException
{
162 if (nomStatusFk
== NAME_ST_NOM_INVAL
){
163 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.INVALID());
164 }else if (nomStatusFk
== NAME_ST_NOM_ILLEG
){
165 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.ILLEGITIMATE());
166 }else if (nomStatusFk
== NAME_ST_NOM_NUD
){
167 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.NUDUM());
168 }else if (nomStatusFk
== NAME_ST_NOM_REJ
){
169 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.REJECTED());
170 }else if (nomStatusFk
== NAME_ST_NOM_REJ_PROP
){
171 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.REJECTED_PROP());
172 }else if (nomStatusFk
== NAME_ST_NOM_UTIQUE_REJ
){
173 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.UTIQUE_REJECTED());
174 }else if (nomStatusFk
== NAME_ST_NOM_UTIQUE_REJ_PROP
){
175 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.UTIQUE_REJECTED_PROP());
176 }else if (nomStatusFk
== NAME_ST_NOM_CONS
){
177 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.CONSERVED());
178 }else if (nomStatusFk
== NAME_ST_NOM_CONS_PROP
){
179 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.CONSERVED_PROP());
180 }else if (nomStatusFk
== NAME_ST_ORTH_CONS
){
181 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.ORTHOGRAPHY_CONSERVED());
182 }else if (nomStatusFk
== NAME_ST_ORTH_CONS_PROP
){
183 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.ORTHOGRAPHY_CONSERVED_PROP());
184 }else if (nomStatusFk
== NAME_ST_NOM_SUPERFL
){
185 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.SUPERFLUOUS());
186 }else if (nomStatusFk
== NAME_ST_NOM_AMBIG
){
187 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.AMBIGUOUS());
188 }else if (nomStatusFk
== NAME_ST_NOM_PROVIS
){
189 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.PROVISIONAL());
190 }else if (nomStatusFk
== NAME_ST_NOM_DUB
){
191 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.DOUBTFUL());
192 }else if (nomStatusFk
== NAME_ST_NOM_NOV
){
193 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.NOVUM());
194 }else if (nomStatusFk
== NAME_ST_NOM_CONFUS
){
195 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.CONFUSUM());
196 }else if (nomStatusFk
== NAME_ST_NOM_ALTERN
){
197 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.ALTERNATIVE());
198 }else if (nomStatusFk
== NAME_ST_COMB_INVAL
){
199 return NomenclaturalStatus
.NewInstance(NomenclaturalStatusType
.COMBINATION_INVALID());
201 throw new UnknownCdmTypeException("Unknown NomenclaturalStatus (id=" + Integer
.valueOf(nomStatusFk
).toString() + ")");
207 public static SpecimenTypeDesignationStatus
typeStatusId2TypeStatus (int typeStatusId
) throws UnknownCdmTypeException
{
208 switch (typeStatusId
){
210 case 1: return SpecimenTypeDesignationStatus
.HOLOTYPE();
211 case 2: return SpecimenTypeDesignationStatus
.LECTOTYPE();
212 case 3: return SpecimenTypeDesignationStatus
.NEOTYPE();
213 case 4: return SpecimenTypeDesignationStatus
.EPITYPE();
214 case 5: return SpecimenTypeDesignationStatus
.ISOLECTOTYPE();
215 case 6: return SpecimenTypeDesignationStatus
.ISONEOTYPE();
216 case 7: return SpecimenTypeDesignationStatus
.ISOTYPE();
217 case 8: return SpecimenTypeDesignationStatus
.PARANEOTYPE();
218 case 9: return SpecimenTypeDesignationStatus
.PARATYPE();
219 case 10: return SpecimenTypeDesignationStatus
.SECOND_STEP_LECTOTYPE();
220 case 11: return SpecimenTypeDesignationStatus
.SECOND_STEP_NEOTYPE();
221 case 12: return SpecimenTypeDesignationStatus
.SYNTYPE();
222 case 21: return SpecimenTypeDesignationStatus
.ICONOTYPE();
223 case 22: return SpecimenTypeDesignationStatus
.PHOTOTYPE();
225 throw new UnknownCdmTypeException("Unknown TypeDesignationStatus (id=" + Integer
.valueOf(typeStatusId
).toString() + ")");
231 public static TaxonRelationshipType
taxonRelId2TaxonRelType (int relTaxonTypeId
, ResultWrapper
<Boolean
> isInverse
) throws UnknownCdmTypeException
{
232 isInverse
.setValue(false);
233 switch (relTaxonTypeId
){
235 case 11: return TaxonRelationshipType
.CONGRUENT_TO();
236 case 12: isInverse
.setValue(true); return TaxonRelationshipType
.INCLUDES();
237 case 13: isInverse
.setValue(true); return TaxonRelationshipType
.CONGRUENT_OR_INCLUDES();
238 case 14: return TaxonRelationshipType
.INCLUDES();
239 case 15: return TaxonRelationshipType
.CONGRUENT_OR_INCLUDES();
240 case 16: return TaxonRelationshipType
.INCLUDED_OR_INCLUDES();
241 case 17: return TaxonRelationshipType
.CONGRUENT_OR_INCLUDED_OR_INCLUDES();
242 case 18: return TaxonRelationshipType
.OVERLAPS();
243 case 19: return TaxonRelationshipType
.CONGRUENT_OR_OVERLAPS();
244 case 20: isInverse
.setValue(true); return TaxonRelationshipType
.INCLUDES_OR_OVERLAPS();
245 case 21: isInverse
.setValue(true); return TaxonRelationshipType
.CONGRUENT_OR_INCLUDES_OR_OVERLAPS();
246 case 22: return TaxonRelationshipType
.INCLUDES_OR_OVERLAPS();
247 case 23: return TaxonRelationshipType
.CONGRUENT_OR_INCLUDES_OR_OVERLAPS();
248 case 24: return TaxonRelationshipType
.INCLUDED_OR_INCLUDES_OR_OVERLAPS();
250 case 26: return TaxonRelationshipType
.OVERLAPS();
251 //TODO other relationshipTypes
254 case 43: return TaxonRelationshipType
.CONGRUENT_TO();
256 throw new UnknownCdmTypeException("Unknown TypeDesignationStatus (id=" + Integer
.valueOf(relTaxonTypeId
).toString() + ")");
262 public static HybridRelationshipType
relNameId2HybridRel (int relNameId
) throws UnknownCdmTypeException
{
265 case 9: return HybridRelationshipType
.FIRST_PARENT();
266 case 10: return HybridRelationshipType
.SECOND_PARENT();
267 case 11: return HybridRelationshipType
.FEMALE_PARENT();
268 case 12: return HybridRelationshipType
.MALE_PARENT();
270 throw new UnknownCdmTypeException("Unknown HybridRelationshipType (id=" + Integer
.valueOf(relNameId
).toString() + ")");
276 public static PresenceAbsenceTermBase
<?
> occStatus2PresenceAbsence (int occStatusId
) throws UnknownCdmTypeException
{
277 switch (occStatusId
){
279 case 110: return PresenceTerm
.CULTIVATED_REPORTED_IN_ERROR();
280 case 120: return PresenceTerm
.CULTIVATED();
281 case 210: return PresenceTerm
.INTRODUCED_REPORTED_IN_ERROR();
282 case 220: return PresenceTerm
.INTRODUCED_PRESENCE_QUESTIONABLE();
283 case 230: return PresenceTerm
.INTRODUCED_FORMERLY_INTRODUCED();
284 case 240: return PresenceTerm
.INTRODUCED_DOUBTFULLY_INTRODUCED();
285 case 250: return PresenceTerm
.INTRODUCED();
286 case 260: return PresenceTerm
.INTRODUCED_UNCERTAIN_DEGREE_OF_NATURALISATION();
287 case 270: return PresenceTerm
.INTRODUCED_ADVENTITIOUS();
288 case 280: return PresenceTerm
.INTRODUCED_NATURALIZED();
289 case 310: return PresenceTerm
.NATIVE_REPORTED_IN_ERROR();
290 case 320: return PresenceTerm
.NATIVE_PRESENCE_QUESTIONABLE();
291 case 330: return PresenceTerm
.NATIVE_FORMERLY_NATIVE();
292 case 340: return PresenceTerm
.NATIVE_DOUBTFULLY_NATIVE();
293 case 350: return PresenceTerm
.NATIVE();
295 logger
.info("endemic for EM can not be transformed in legal status. Used 'PRESENT' instead");
297 return PresenceTerm
.PRESENT();
300 throw new UnknownCdmTypeException("Unknown occurrence status (id=" + Integer
.valueOf(occStatusId
).toString() + ")");
307 public static Feature
factCategory2Feature (int factCategoryId
) throws UnknownCdmTypeException
{
308 switch (factCategoryId
){
310 case 1: return Feature
.DESCRIPTION();
311 case 4: return Feature
.ECOLOGY();
312 case 5: return Feature
.PHENOLOGY();
313 case 12: return Feature
.COMMON_NAME();
314 case 13: return Feature
.OCCURRENCE();
315 case 99: return Feature
.CITATION();
317 throw new UnknownCdmTypeException("Unknown FactCategory (id=" + Integer
.valueOf(factCategoryId
).toString() + ")");
324 public static Rank
rankId2Rank (ResultSet rs
, boolean useUnknown
) throws UnknownCdmTypeException
{
327 int rankId
= rs
.getInt("rankFk");
329 String abbrev
= rs
.getString("rankAbbrev");
330 String rankName
= rs
.getString("rank");
331 if (logger
.isDebugEnabled()){logger
.debug(rankId
);}
332 if (logger
.isDebugEnabled()){logger
.debug(abbrev
);}
333 if (logger
.isDebugEnabled()){logger
.debug(rankName
);}
336 result
= Rank
.getRankByNameOrAbbreviation(abbrev
);
337 } catch (UnknownCdmTypeException e
) {
339 result
= Rank
.getRankByNameOrAbbreviation(rankName
);
340 } catch (UnknownCdmTypeException e1
) {
343 case 1: return Rank
.KINGDOM();
344 case 3: return Rank
.SUBKINGDOM();
345 case 5: return Rank
.PHYLUM();
346 case 7: return Rank
.SUBPHYLUM();
347 case 8: return Rank
.DIVISION();
348 case 9: return Rank
.SUBDIVISION();
349 case 10: return Rank
.CLASS();
350 case 13: return Rank
.SUBCLASS();
351 case 16: return Rank
.SUPERORDER();
352 case 18: return Rank
.ORDER();
353 case 19: return Rank
.SUBORDER();
354 case 20: return Rank
.FAMILY();
355 case 25: return Rank
.SUBFAMILY();
356 case 30: return Rank
.TRIBE();
357 case 35: return Rank
.SUBTRIBE();
358 case 40: return Rank
.GENUS();
359 case 42: return Rank
.SUBGENUS();
360 case 45: return Rank
.SECTION_BOTANY();
361 case 47: return Rank
.SUBSECTION_BOTANY();
362 case 50: return Rank
.SERIES();
363 case 52: return Rank
.SUBSERIES();
364 case 58: return Rank
.SPECIESAGGREGATE();
365 case 59: return Rank
.SPECIESGROUP();
366 case 60: return Rank
.SPECIES();
367 case 65: return Rank
.SUBSPECIES();
368 case 68: return Rank
.CONVAR();
369 case 70: return Rank
.VARIETY();
370 case 73: return Rank
.SUBVARIETY();
371 case 80: return Rank
.FORM();
372 case 82: return Rank
.SUBFORM();
373 case 84: return Rank
.SPECIALFORM();
374 case 98: return Rank
.INFRAGENERICTAXON();
375 case 99: return Rank
.INFRASPECIFICTAXON();
377 case 750: return Rank
.SUPERCLASS();
378 case 780: return Rank
.INFRACLASS();
379 case 820: return Rank
.INFRAORDER();
381 case 830: return Rank
.SUPERFAMILY();
385 logger
.error("Rank unknown. Created UNKNOWN_RANK");
386 return Rank
.UNKNOWN_RANK();
388 throw new UnknownCdmTypeException("Unknown Rank id" + Integer
.valueOf(rankId
).toString());
394 } catch (SQLException e
) {
396 logger
.warn("Exception occurred. Created UNKNOWN_RANK instead");
397 return Rank
.UNKNOWN_RANK();
402 public static Integer
rank2RankId (Rank rank
){
406 else if (rank
.equals(Rank
.KINGDOM())){ return 1;}
407 else if (rank
.equals(Rank
.SUBKINGDOM())){ return 3;}
408 else if (rank
.equals(Rank
.PHYLUM())){ return 5;}
409 else if (rank
.equals(Rank
.SUBPHYLUM())){ return 7;}
410 else if (rank
.equals(Rank
.DIVISION())){ return 8;}
411 else if (rank
.equals(Rank
.SUBDIVISION())){ return 9;}
413 else if (rank
.equals(Rank
.CLASS())){ return 10;}
414 else if (rank
.equals(Rank
.SUBCLASS())){ return 13;}
415 else if (rank
.equals(Rank
.SUPERORDER())){ return 16;}
416 else if (rank
.equals(Rank
.ORDER())){ return 18;}
417 else if (rank
.equals(Rank
.SUBORDER())){ return 19;}
418 else if (rank
.equals(Rank
.FAMILY())){ return 20;}
419 else if (rank
.equals(Rank
.SUBFAMILY())){ return 25;}
420 else if (rank
.equals(Rank
.TRIBE())){ return 30;}
421 else if (rank
.equals(Rank
.SUBTRIBE())){ return 35;}
422 else if (rank
.equals(Rank
.GENUS())){ return 40;}
423 else if (rank
.equals(Rank
.SUBGENUS())){ return 42;}
424 else if (rank
.equals(Rank
.SECTION_BOTANY())){ return 45;}
425 else if (rank
.equals(Rank
.SUBSECTION_BOTANY())){ return 47;}
426 else if (rank
.equals(Rank
.SERIES())){ return 50;}
427 else if (rank
.equals(Rank
.SUBSERIES())){ return 52;}
428 else if (rank
.equals(Rank
.SPECIESAGGREGATE())){ return 58;}
430 // else if (rank.equals(Rank.XXX())){ return 59;}
431 else if (rank
.equals(Rank
.SPECIES())){ return 60;}
432 else if (rank
.equals(Rank
.SUBSPECIES())){ return 65;}
433 else if (rank
.equals(Rank
.CONVAR())){ return 68;}
434 else if (rank
.equals(Rank
.VARIETY())){ return 70;}
435 else if (rank
.equals(Rank
.SUBVARIETY())){ return 73;}
436 else if (rank
.equals(Rank
.FORM())){ return 80;}
437 else if (rank
.equals(Rank
.SUBFORM())){ return 82;}
438 else if (rank
.equals(Rank
.SPECIALFORM())){ return 84;}
439 else if (rank
.equals(Rank
.INFRAGENERICTAXON())){ return 98;}
440 else if (rank
.equals(Rank
.INFRASPECIFICTAXON())){ return 99;}
442 else if (rank
.equals(Rank
.SUPERCLASS())){ return 750;}
443 else if (rank
.equals(Rank
.INFRACLASS())){ return 780;}
444 else if (rank
.equals(Rank
.INFRAORDER())){ return 820;}
445 else if (rank
.equals(Rank
.SUPERFAMILY())){ return 830;}
449 logger
.warn("Rank not yet supported in Berlin Model: "+ rank
.getLabel());
454 public static Integer
textData2FactCategoryFk (Feature feature
){
455 if (feature
== null){return null;}
456 if (feature
.equals(Feature
.DESCRIPTION())){
458 }else if (feature
.equals(Feature
.ECOLOGY())){
460 }else if (feature
.equals(Feature
.PHENOLOGY())){
462 }else if (feature
.equals(Feature
.COMMON_NAME())){
464 }else if (feature
.equals(Feature
.OCCURRENCE())){
466 }else if (feature
.equals(Feature
.CITATION())){
469 logger
.debug("Unknown Feature.");
475 public static Integer
taxonBase2statusFk (TaxonBase
<?
> taxonBase
){
476 if (taxonBase
== null){return null;}
477 if (taxonBase
.isInstanceOf(Taxon
.class)){
478 return T_STATUS_ACCEPTED
;
479 }else if (taxonBase
.isInstanceOf(Synonym
.class)){
480 return T_STATUS_SYNONYM
;
482 logger
.warn("Unknown ");
483 return T_STATUS_UNRESOLVED
;
486 // public static int T_STATUS_PARTIAL_SYN = 3;
487 // public static int T_STATUS_PRO_PARTE_SYN = 4;
488 // public static int T_STATUS_UNRESOLVED = 5;
489 // public static int T_STATUS_ORPHANED = 6;
492 public static Integer
ref2refCategoryId (ReferenceBase
<?
> ref
){
496 else if (ref
instanceof Article
){ return REF_ARTICLE
;}
497 else if (ref
instanceof SectionBase
){ return REF_PART_OF_OTHER_TITLE
;}
498 else if (ref
instanceof Book
){ return REF_BOOK
;}
499 else if (ref
instanceof Database
){ return REF_DATABASE
;}
500 // else if (ref instanceof SectionBas){ return REF_INFORMAL;}
501 // else if (ref instanceof SectionBas){ return REF_NOT_APPLICABLE;}
502 else if (ref
instanceof WebPage
){ return REF_WEBSITE
;}
503 else if (ref
instanceof CdDvd
){ return REF_CD
;}
504 else if (ref
instanceof Journal
){ return REF_JOURNAL
;}
505 else if (ref
instanceof Generic
){ return REF_UNKNOWN
;}
506 else if (ref
instanceof PrintSeries
){
507 logger
.warn("Print Series is not a standard Berlin Model category");
508 return REF_PRINT_SERIES
;
510 else if (ref
instanceof Proceedings
){
511 logger
.warn("Proceedings is not a standard Berlin Model category");
512 return REF_CONFERENCE_PROCEEDINGS
;
514 // else if (ref instanceof ){ return REF_JOURNAL_VOLUME;}
515 else if (ref
instanceof Patent
){ return REF_NOT_APPLICABLE
;}
516 else if (ref
instanceof PersonalCommunication
){ return REF_INFORMAL
;}
517 else if (ref
instanceof Report
){ return REF_NOT_APPLICABLE
;}
518 else if (ref
instanceof Thesis
){ return REF_NOT_APPLICABLE
;}
519 else if (ref
instanceof Report
){ return REF_NOT_APPLICABLE
;}
523 logger
.warn("Reference type not yet supported in Berlin Model: "+ ref
.getClass().getSimpleName());
529 public static Integer
taxRelation2relPtQualifierFk (RelationshipBase
<?
,?
,?
> rel
){
533 // else if (rel instanceof SynonymRelationship){
535 // }else if (rel instanceof TaxonRelationship){
536 RelationshipTermBase
<?
> type
= rel
.getType();
537 if (type
.equals(TaxonRelationshipType
.TAXONOMICALLY_INCLUDED_IN())) {return TAX_REL_IS_INCLUDED_IN
;
538 }else if (type
.equals(TaxonRelationshipType
.MISAPPLIED_NAME_FOR())) {return TAX_REL_IS_MISAPPLIED_NAME_OF
;
539 }else if (type
.equals(SynonymRelationshipType
.SYNONYM_OF())) {return TAX_REL_IS_SYNONYM_OF
;
540 }else if (type
.equals(SynonymRelationshipType
.HOMOTYPIC_SYNONYM_OF())) {return TAX_REL_IS_HOMOTYPIC_SYNONYM_OF
;
541 }else if (type
.equals(SynonymRelationshipType
.HETEROTYPIC_SYNONYM_OF())) {return TAX_REL_IS_HETEROTYPIC_SYNONYM_OF
;
542 }else if (type
.equals(TaxonRelationshipType
.CONGRUENT_TO())) {return 11;
543 // public static int TAX_REL_IS_PROPARTE_SYN_OF = 4;
544 // public static int TAX_REL_IS_PARTIAL_SYN_OF = 5;
545 // public static int TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF = 101;
546 // public static int TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF = 102;
547 // public static int TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF = 103;
548 // public static int TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF = 104;
552 logger
.warn("Relationship type not yet supported by Berlin Model export: "+ rel
.getType());
557 public static Integer
nomStatus2nomStatusFk (NomenclaturalStatusType status
){
561 if (status
.equals(NomenclaturalStatusType
.INVALID())) {return NAME_ST_NOM_INVAL
;
562 }else if (status
.equals(NomenclaturalStatusType
.ILLEGITIMATE())) {return NAME_ST_NOM_ILLEG
;
563 }else if (status
.equals(NomenclaturalStatusType
.NUDUM())) {return NAME_ST_NOM_NUD
;
564 }else if (status
.equals(NomenclaturalStatusType
.REJECTED())) {return NAME_ST_NOM_REJ
;
565 }else if (status
.equals(NomenclaturalStatusType
.REJECTED_PROP())) {return NAME_ST_NOM_REJ_PROP
;
566 }else if (status
.equals(NomenclaturalStatusType
.UTIQUE_REJECTED())) {return NAME_ST_NOM_UTIQUE_REJ
;
567 }else if (status
.equals(NomenclaturalStatusType
.UTIQUE_REJECTED_PROP())) {return NAME_ST_NOM_UTIQUE_REJ_PROP
;
568 }else if (status
.equals(NomenclaturalStatusType
.CONSERVED())) {return NAME_ST_NOM_CONS
;
570 }else if (status
.equals(NomenclaturalStatusType
.CONSERVED_PROP())) {return NAME_ST_NOM_CONS_PROP
;
571 }else if (status
.equals(NomenclaturalStatusType
.ORTHOGRAPHY_CONSERVED())) {return NAME_ST_ORTH_CONS
;
572 }else if (status
.equals(NomenclaturalStatusType
.ORTHOGRAPHY_CONSERVED_PROP())) {return NAME_ST_ORTH_CONS_PROP
;
573 }else if (status
.equals(NomenclaturalStatusType
.SUPERFLUOUS())) {return NAME_ST_NOM_SUPERFL
;
574 }else if (status
.equals(NomenclaturalStatusType
.AMBIGUOUS())) {return NAME_ST_NOM_AMBIG
;
575 }else if (status
.equals(NomenclaturalStatusType
.PROVISIONAL())) {return NAME_ST_NOM_PROVIS
;
576 }else if (status
.equals(NomenclaturalStatusType
.DOUBTFUL())) {return NAME_ST_NOM_DUB
;
577 }else if (status
.equals(NomenclaturalStatusType
.NOVUM())) {return NAME_ST_NOM_NOV
;
579 }else if (status
.equals(NomenclaturalStatusType
.CONFUSUM())) {return NAME_ST_NOM_CONFUS
;
580 }else if (status
.equals(NomenclaturalStatusType
.ALTERNATIVE())) {return NAME_ST_NOM_ALTERN
;
581 }else if (status
.equals(NomenclaturalStatusType
.COMBINATION_INVALID())) {return NAME_ST_COMB_INVAL
;
585 logger
.warn("NomStatus type not yet supported by Berlin Model export: "+ status
);
592 public static Integer
nameRel2RelNameQualifierFk (RelationshipBase
<?
,?
,?
> rel
){
596 RelationshipTermBase
<?
> type
= rel
.getType();
597 if (type
.equals(NameRelationshipType
.BASIONYM())) {return NAME_REL_IS_BASIONYM_FOR
;
598 }else if (type
.equals(NameRelationshipType
.LATER_HOMONYM())) {return NAME_REL_IS_LATER_HOMONYM_OF
;
599 }else if (type
.equals(NameRelationshipType
.REPLACED_SYNONYM())) {return NAME_REL_IS_REPLACED_SYNONYM_FOR
;
601 }else if (type
.equals(NameRelationshipType
.VALIDATED_BY_NAME())) {return NAME_REL_IS_VALIDATION_OF
;
602 }else if (type
.equals(NameRelationshipType
.LATER_VALIDATED_BY_NAME())) {return NAME_REL_IS_LATER_VALIDATION_OF
;
603 }else if (type
.equals(NameRelationshipType
.CONSERVED_AGAINST())) {return NAME_REL_IS_CONSERVED_AGAINST
;
606 }else if (type
.equals(NameRelationshipType
.TREATED_AS_LATER_HOMONYM())) {return NAME_REL_IS_TREATED_AS_LATER_HOMONYM_OF
;
607 }else if (type
.equals(NameRelationshipType
.ORTHOGRAPHIC_VARIANT())) {return NAME_REL_IS_ORTHOGRAPHIC_VARIANT_OF
;
610 logger
.warn("Relationship type not yet supported by Berlin Model export: "+ rel
.getType());
616 // }else if (type.equals(NameRelationshipType.())) {return NAME_REL_IS_REJECTED_IN_FAVOUR_OF;
618 // public static int NAME_REL_IS_FIRST_PARENT_OF = 9;
619 // public static int NAME_REL_IS_SECOND_PARENT_OF = 10;
620 // public static int NAME_REL_IS_FEMALE_PARENT_OF = 11;
621 // public static int NAME_REL_IS_MALE_PARENT_OF = 12;
623 // public static int NAME_REL_IS_REJECTED_IN_FAVOUR_OF = 14;
624 // }else if (type.equals(NameRelationshipType.)) {return NAME_REL_IS_REJECTED_TYPE_OF;
626 // public static int NAME_REL_HAS_SAME_TYPE_AS = 18;
627 // public static int NAME_REL_IS_LECTOTYPE_OF = 61;
628 // public static int NAME_REL_TYPE_NOT_DESIGNATED = 62;
630 // }else if (type.equals(NameRelationshipType.LATER_VALIDATED_BY_NAME())) {return NAME_REL_IS_TYPE_OF;