Project

General

Profile

Download (24.8 KB) Statistics
| Branch: | Tag: | Revision:
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

    
15
import org.apache.log4j.Logger;
16

    
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.Report;
40
import eu.etaxonomy.cdm.model.reference.SectionBase;
41
import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;
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;
50

    
51
/**
52
 * @author a.mueller
53
 * @created 20.03.2008
54
 * @version 1.0
55
 */
56
public final class BerlinModelTransformer {
57
	private static final Logger logger = Logger.getLogger(BerlinModelTransformer.class);
58
 
59
	//REFERENCES
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;
73
	
74

    
75
	
76
	//NameStatus
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;
96
	
97
	
98
	//NameRelationShip
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;
118
	
119
	//NameFacts
120
	public static String NAME_FACT_PROTOLOGUE = "Protologue";
121
	public static String NAME_FACT_ALSO_PUBLISHED_IN = "Also published in";
122
	
123
	//TaxonRelationShip
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;
135
	
136
	
137

    
138
	//TaxonStatus
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;
145
	
146
	
147
	//Facts
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;
159
	
160
	//TypeDesignation
161
	public static SpecimenTypeDesignationStatus typeStatusId2TypeStatus (int typeStatusId)  throws UnknownCdmTypeException{
162
		switch (typeStatusId){
163
			case 0: return null;
164
			case 1: return SpecimenTypeDesignationStatus.HOLOTYPE();
165
			case 2: return SpecimenTypeDesignationStatus.LECTOTYPE();
166
			case 3: return SpecimenTypeDesignationStatus.NEOTYPE();
167
			case 4: return SpecimenTypeDesignationStatus.EPITYPE();
168
			case 5: return SpecimenTypeDesignationStatus.ISOLECTOTYPE();
169
			case 6: return SpecimenTypeDesignationStatus.ISONEOTYPE();
170
			case 7: return SpecimenTypeDesignationStatus.ISOTYPE();
171
			case 8: return SpecimenTypeDesignationStatus.PARANEOTYPE();
172
			case 9: return SpecimenTypeDesignationStatus.PARATYPE();
173
			case 10: return SpecimenTypeDesignationStatus.SECOND_STEP_LECTOTYPE();
174
			case 11: return SpecimenTypeDesignationStatus.SECOND_STEP_NEOTYPE();
175
			case 12: return SpecimenTypeDesignationStatus.SYNTYPE();
176
			case 21: return SpecimenTypeDesignationStatus.ICONOTYPE();
177
			case 22: return SpecimenTypeDesignationStatus.PHOTOTYPE();
178
			default: {
179
				throw new UnknownCdmTypeException("Unknown TypeDesignationStatus (id=" + Integer.valueOf(typeStatusId).toString() + ")");
180
			}
181
		}
182
	}
183
	
184
	//TypeDesignation
185
	public static TaxonRelationshipType taxonRelId2TaxonRelType (int relTaxonTypeId, ResultWrapper<Boolean> isInverse)  throws UnknownCdmTypeException{
186
		isInverse.setValue(false);
187
		switch (relTaxonTypeId){
188
			case 0: return null;
189
			case 11: return TaxonRelationshipType.CONGRUENT_TO();
190
			case 12: isInverse.setValue(true); return TaxonRelationshipType.INCLUDES();
191
			case 13: isInverse.setValue(true); return TaxonRelationshipType.CONGRUENT_OR_INCLUDES();
192
			case 14: return TaxonRelationshipType.INCLUDES();
193
			case 15: return TaxonRelationshipType.CONGRUENT_OR_INCLUDES();
194
			case 16: return TaxonRelationshipType.INCLUDED_OR_INCLUDES();
195
			case 17: return TaxonRelationshipType.CONGRUENT_OR_INCLUDED_OR_INCLUDES();
196
			case 18: return TaxonRelationshipType.OVERLAPS();
197
			case 19: return TaxonRelationshipType.CONGRUENT_OR_OVERLAPS();
198
			case 20: isInverse.setValue(true); return TaxonRelationshipType.INCLUDES_OR_OVERLAPS();
199
			case 21: isInverse.setValue(true); return TaxonRelationshipType.CONGRUENT_OR_INCLUDES_OR_OVERLAPS();
200
			case 22: return TaxonRelationshipType.INCLUDES_OR_OVERLAPS();
201
			case 23: return TaxonRelationshipType.CONGRUENT_OR_INCLUDES_OR_OVERLAPS();
202
			case 24: return TaxonRelationshipType.INCLUDED_OR_INCLUDES_OR_OVERLAPS();
203
			
204
			case 26: return TaxonRelationshipType.OVERLAPS();
205
			//TODO other relationshipTypes
206
			
207
			//FIXME doubtful
208
			case 43: return TaxonRelationshipType.CONGRUENT_TO();
209
			default: {
210
				throw new UnknownCdmTypeException("Unknown TypeDesignationStatus (id=" + Integer.valueOf(relTaxonTypeId).toString() + ")");
211
			}
212
		}
213
	}
214
	
215
	//TypeDesignation
216
	public static HybridRelationshipType relNameId2HybridRel (int relNameId)  throws UnknownCdmTypeException{
217
		switch (relNameId){
218
			case 0: return null;
219
			case 9: return HybridRelationshipType.FIRST_PARENT();
220
			case 10: return HybridRelationshipType.SECOND_PARENT();
221
			case 11: return HybridRelationshipType.FEMALE_PARENT();
222
			case 12: return HybridRelationshipType.MALE_PARENT();
223
			default: {
224
				throw new UnknownCdmTypeException("Unknown HybridRelationshipType (id=" + Integer.valueOf(relNameId).toString() + ")");
225
			}
226
		}
227
	}
228
	
229
	//OccStatus
230
	public static PresenceAbsenceTermBase<?> occStatus2PresenceAbsence (int occStatusId)  throws UnknownCdmTypeException{
231
		switch (occStatusId){
232
			case 0: return null;
233
			case 110: return PresenceTerm.CULTIVATED_REPORTED_IN_ERROR();
234
			case 120: return PresenceTerm.CULTIVATED();
235
			case 210: return PresenceTerm.INTRODUCED_REPORTED_IN_ERROR();
236
			case 220: return PresenceTerm.INTRODUCED_PRESENCE_QUESTIONABLE();
237
			case 230: return PresenceTerm.INTRODUCED_FORMERLY_INTRODUCED();
238
			case 240: return PresenceTerm.INTRODUCED_DOUBTFULLY_INTRODUCED();
239
			case 250: return PresenceTerm.INTRODUCED();
240
			case 260: return PresenceTerm.INTRODUCED_UNCERTAIN_DEGREE_OF_NATURALISATION();
241
			case 270: return PresenceTerm.INTRODUCED_ADVENTITIOUS();
242
			case 280: return PresenceTerm.INTRODUCED_NATURALIZED();
243
			case 310: return PresenceTerm.NATIVE_REPORTED_IN_ERROR();
244
			case 320: return PresenceTerm.NATIVE_PRESENCE_QUESTIONABLE();
245
			case 330: return PresenceTerm.NATIVE_FORMERLY_NATIVE();
246
			case 340: return PresenceTerm.NATIVE_DOUBTFULLY_NATIVE();
247
			case 350: return PresenceTerm.NATIVE();
248
			case 999: {
249
					logger.warn("endemic for EM can not be transformed in legal status");
250
					//TODO preliminary
251
					return PresenceTerm.PRESENT();
252
				}
253
			default: {
254
				throw new UnknownCdmTypeException("Unknown occurrence status  (id=" + Integer.valueOf(occStatusId).toString() + ")");
255
			}
256
		}
257
	}
258
	
259
	
260
	//FactCategory
261
	public static Feature factCategory2Feature (int factCategoryId)  throws UnknownCdmTypeException{
262
		switch (factCategoryId){
263
			case 0: return null;
264
			case 1: return Feature.DESCRIPTION();
265
			case 4: return Feature.ECOLOGY();
266
			case 5: return Feature.PHENOLOGY();
267
			case 12: return Feature.COMMON_NAME();
268
			case 13: return Feature.OCCURRENCE();
269
			case 99: return Feature.CITATION();
270
			default: {
271
				throw new UnknownCdmTypeException("Unknown FactCategory (id=" + Integer.valueOf(factCategoryId).toString() + ")");
272
			}
273
		}
274
	}
275
	
276
	
277
	
278
	public static Rank rankId2Rank (ResultSet rs, boolean useUnknown) throws UnknownCdmTypeException{
279
		Rank result;
280
		try {
281
			int rankId = rs.getInt("rankFk");
282
			
283
			String abbrev = rs.getString("rankAbbrev");
284
			String rankName = rs.getString("rank");
285
			if (logger.isDebugEnabled()){logger.debug(rankId);}
286
			if (logger.isDebugEnabled()){logger.debug(abbrev);}
287
			if (logger.isDebugEnabled()){logger.debug(rankName);}
288
			
289
			try {
290
				result = Rank.getRankByNameOrAbbreviation(abbrev);
291
			} catch (UnknownCdmTypeException e) {
292
				try {
293
					result = Rank.getRankByNameOrAbbreviation(rankName);
294
				} catch (UnknownCdmTypeException e1) {
295
					switch (rankId){
296
						case 0: return null;
297
						case 1: return Rank.KINGDOM();
298
						case 3: return Rank.SUBKINGDOM();
299
						case 5: return Rank.PHYLUM();
300
						case 7: return Rank.SUBPHYLUM();
301
						case 8: return Rank.DIVISION();
302
						case 9: return Rank.SUBDIVISION();
303
						case 10: return Rank.CLASS();
304
						case 13: return Rank.SUBCLASS();
305
						case 16: return Rank.SUPERORDER();
306
						case 18: return Rank.ORDER();
307
						case 19: return Rank.SUBORDER();
308
						case 20: return Rank.FAMILY();
309
						case 25: return Rank.SUBFAMILY();
310
						case 30: return Rank.TRIBE();
311
						case 35: return Rank.SUBTRIBE();
312
						case 40: return Rank.GENUS();
313
						case 42: return Rank.SUBGENUS();
314
						case 45: return Rank.SECTION();
315
						case 47: return Rank.SUBSECTION();
316
						case 50: return Rank.SERIES();
317
						case 52: return Rank.SUBSERIES();
318
						case 58: return Rank.SPECIESAGGREGATE();
319
						//FIXME
320
						//case 59: return Rank.SPECIESAGGREGATE();
321
						case 60: return Rank.SPECIES();
322
						case 65: return Rank.SUBSPECIES();
323
						case 68: return Rank.CONVAR();
324
						case 70: return Rank.VARIETY();
325
						case 73: return Rank.SUBVARIETY();
326
						case 80: return Rank.FORM();
327
						case 82: return Rank.SUBFORM();
328
						case 84: return Rank.SPECIALFORM();
329
						case 98: return Rank.INFRAGENERICTAXON();
330
						case 99: return Rank.INFRASPECIFICTAXON();
331
						
332
						case 750: return Rank.SUPERCLASS();
333
						case 780: return Rank.INFRACLASS();
334
						case 820: return Rank.INFRAORDER();
335
						
336
						case 830: return Rank.SUPERFAMILY();
337
						
338
						default: {
339
							if (useUnknown){
340
								logger.error("Rank unknown. Created UNKNOWN_RANK");
341
								return Rank.UNKNOWN_RANK();
342
							}
343
							throw new UnknownCdmTypeException("Unknown Rank id" + Integer.valueOf(rankId).toString());
344
						}
345
					}
346
				}
347
			}
348
			return result;
349
		} catch (SQLException e) {
350
			e.printStackTrace();
351
			logger.warn("Exception occurred. Created UNKNOWN_RANK instead");
352
			return Rank.UNKNOWN_RANK();
353
		}		
354
	}
355
	
356
	
357
	public static Integer rank2RankId (Rank rank){
358
		if (rank.equals(null)){return null;}
359
		else if (rank.equals(Rank.KINGDOM())){		return 1;}
360
		else if (rank.equals(Rank.SUBKINGDOM())){	return 3;}
361
		else if (rank.equals(Rank.PHYLUM())){		return 5;}
362
		else if (rank.equals(Rank.SUBPHYLUM())){	return 7;}
363
		else if (rank.equals(Rank.DIVISION())){		return 8;}
364
		else if (rank.equals(Rank.SUBDIVISION())){	return 9;}
365
		
366
		else if (rank.equals(Rank.CLASS())){		return 10;}
367
		else if (rank.equals(Rank.SUBCLASS())){		return 13;}
368
		else if (rank.equals(Rank.SUPERORDER())){	return 16;}
369
		else if (rank.equals(Rank.ORDER())){		return 18;}
370
		else if (rank.equals(Rank.SUBORDER())){		return 19;}
371
		else if (rank.equals(Rank.FAMILY())){		return 20;}
372
		else if (rank.equals(Rank.SUBFAMILY())){	return 25;}
373
		else if (rank.equals(Rank.TRIBE())){		return 30;}
374
		else if (rank.equals(Rank.SUBTRIBE())){		return 35;}
375
		else if (rank.equals(Rank.GENUS())){		return 40;}
376
		else if (rank.equals(Rank.SUBGENUS())){		return 42;}
377
		else if (rank.equals(Rank.SECTION())){		return 45;}
378
		else if (rank.equals(Rank.SUBSECTION())){	return 47;}
379
		else if (rank.equals(Rank.SERIES())){		return 50;}
380
		else if (rank.equals(Rank.SUBSERIES())){	return 52;}
381
		else if (rank.equals(Rank.SPECIESAGGREGATE())){	return 58;}
382
		//TODO
383
		//		else if (rank.equals(Rank.XXX())){	return 59;}
384
		else if (rank.equals(Rank.SPECIES())){		return 60;}
385
		else if (rank.equals(Rank.SUBSPECIES())){	return 65;}
386
		else if (rank.equals(Rank.CONVAR())){		return 68;}
387
		else if (rank.equals(Rank.VARIETY())){		return 70;}
388
		else if (rank.equals(Rank.SUBVARIETY())){	return 73;}
389
		else if (rank.equals(Rank.FORM())){			return 80;}
390
		else if (rank.equals(Rank.SUBFORM())){		return 82;}
391
		else if (rank.equals(Rank.SPECIALFORM())){	return 84;}
392
		else if (rank.equals(Rank.INFRAGENERICTAXON())){	return 98;}
393
		else if (rank.equals(Rank.INFRASPECIFICTAXON())){	return 99;}
394
		
395
		else if (rank.equals(Rank.SUPERCLASS())){	return 750;}
396
		else if (rank.equals(Rank.INFRACLASS())){	return 780;}
397
		else if (rank.equals(Rank.INFRAORDER())){	return 820;}
398
		else if (rank.equals(Rank.SUPERFAMILY())){	return 830;}
399
		
400
		else {
401
			//TODO Exception
402
			logger.warn("Rank not yet supported in Berlin Model: "+ rank.getLabel());
403
			return null;
404
		}
405
	}
406
	
407
	public static Integer textData2FactCategoryFk (Feature feature){
408
		if (feature.equals(Feature.DESCRIPTION())){
409
			return 1;
410
		}else if (feature.equals(Feature.ECOLOGY())){
411
			return 4;
412
		}else if (feature.equals(Feature.PHENOLOGY())){
413
			return 5;
414
		}else if (feature.equals(Feature.COMMON_NAME())){
415
			return 12;
416
		}else if (feature.equals(Feature.OCCURRENCE())){
417
			return 13;
418
		}else if (feature.equals(Feature.CITATION())){
419
			return 99;
420
		}else{
421
			logger.warn("Unknown Feature. Used DESCRIPTION instead");
422
			return 4;
423
		}
424
	}
425
	
426
	
427
	public static Integer taxonBase2statusFk (TaxonBase<?> taxonBase){
428
		if (taxonBase.isInstanceOf(Taxon.class)){
429
			return T_STATUS_ACCEPTED;
430
		}else if (taxonBase.isInstanceOf(Synonym.class)){
431
			return T_STATUS_SYNONYM;
432
		}else{
433
			logger.warn("Unknown ");
434
			return T_STATUS_UNRESOLVED;
435
		}
436
		//TODO 
437
//		public static int T_STATUS_PARTIAL_SYN = 3;
438
//		public static int T_STATUS_PRO_PARTE_SYN = 4;
439
//		public static int T_STATUS_UNRESOLVED = 5;
440
//		public static int T_STATUS_ORPHANED = 6;
441
	}
442
		
443
	public static Integer ref2refCategoryId (StrictReferenceBase<?> ref){
444
		if (ref == null){
445
			return null;
446
		}
447
		else if (ref instanceof Article){		return REF_ARTICLE;}
448
		else if (ref instanceof SectionBase){	return REF_PART_OF_OTHER_TITLE;}
449
		else if (ref instanceof Book){	return REF_BOOK;}
450
		else if (ref instanceof Database){	return REF_DATABASE;}
451
//		else if (ref instanceof SectionBas){	return REF_INFORMAL;}
452
//		else if (ref instanceof SectionBas){	return REF_NOT_APPLICABLE;}
453
		else if (ref instanceof WebPage){	return REF_WEBSITE;}
454
		else if (ref instanceof CdDvd){	return REF_CD;}
455
		else if (ref instanceof Journal){	return REF_JOURNAL;}
456
		else if (ref instanceof Generic){	return REF_UNKNOWN;}
457
		else if (ref instanceof PrintSeries){	
458
			logger.warn("Print Series is not a standard Berlin Model category");
459
			return REF_PRINT_SERIES;
460
		}
461
		else if (ref instanceof Proceedings){	
462
			logger.warn("Proceedings is not a standard Berlin Model category");
463
			return REF_CONFERENCE_PROCEEDINGS;
464
		}
465
//		else if (ref instanceof ){	return REF_JOURNAL_VOLUME;}
466
		else if (ref instanceof Patent){	return REF_NOT_APPLICABLE;}
467
		else if (ref instanceof PersonalCommunication){	return REF_INFORMAL;}
468
		else if (ref instanceof Report){	return REF_NOT_APPLICABLE;}
469
		else if (ref instanceof Thesis){	return REF_NOT_APPLICABLE;}
470
		else if (ref instanceof Report){	return REF_NOT_APPLICABLE;}
471
		
472
		else {
473
			//TODO Exception
474
			logger.warn("Reference type not yet supported in Berlin Model: "+ ref.getClass().getSimpleName());
475
			return null;
476
		}
477
	}
478
	
479
	
480
	public static Integer taxRelation2relPtQualifierFk (RelationshipBase<?,?,?> rel){
481
		if (rel == null){
482
			return null;
483
		}
484
//		else if (rel instanceof SynonymRelationship){		
485
//			return ;
486
//		}else if (rel instanceof TaxonRelationship){
487
			RelationshipTermBase<?> type = rel.getType();
488
			if (type.equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN())) {return TAX_REL_IS_INCLUDED_IN;
489
			}else if (type.equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())) {return TAX_REL_IS_MISAPPLIED_NAME_OF;
490
			}else if (type.equals(SynonymRelationshipType.SYNONYM_OF())) {return TAX_REL_IS_SYNONYM_OF;
491
			}else if (type.equals(SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF())) {return TAX_REL_IS_HOMOTYPIC_SYNONYM_OF;
492
			}else if (type.equals(SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF())) {return TAX_REL_IS_HETEROTYPIC_SYNONYM_OF;
493
			}else if (type.equals(TaxonRelationshipType.CONGRUENT_TO())) {return 11;
494
//			public static int TAX_REL_IS_PROPARTE_SYN_OF = 4;
495
//			public static int TAX_REL_IS_PARTIAL_SYN_OF = 5;
496
//			public static int TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF = 101;
497
//			public static int TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF = 102;
498
//			public static int TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF = 103;
499
//			public static int TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF = 104;
500
			
501
			}else {
502
				//TODO Exception
503
				logger.warn("Relationship type not yet supported by Berlin Model export: "+ rel.getType());
504
				return null;
505
		}
506
	}
507
	
508
	public static Integer nomStatus2nomStatusFk (NomenclaturalStatus status){
509
		if (status == null){
510
			return null;
511
		}
512
		if (status.equals(NomenclaturalStatusType.INVALID())) {return NAME_ST_NOM_INVAL;
513
		}else if (status.equals(NomenclaturalStatusType.ILLEGITIMATE())) {return NAME_ST_NOM_ILLEG;
514
		}else if (status.equals(NomenclaturalStatusType.NUDUM())) {return NAME_ST_NOM_NUD;
515
		}else if (status.equals(NomenclaturalStatusType.REJECTED())) {return NAME_ST_NOM_REJ;
516
		}else if (status.equals(NomenclaturalStatusType.REJECTED_PROP())) {return NAME_ST_NOM_REJ_PROP;
517
		}else if (status.equals(NomenclaturalStatusType.UTIQUE_REJECTED())) {return NAME_ST_NOM_UTIQUE_REJ;
518
		}else if (status.equals(NomenclaturalStatusType.UTIQUE_REJECTED_PROP())) {return NAME_ST_NOM_UTIQUE_REJ_PROP;
519
		}else if (status.equals(NomenclaturalStatusType.CONSERVED())) {return NAME_ST_NOM_CONS;
520
		
521
		}else if (status.equals(NomenclaturalStatusType.CONSERVED_PROP())) {return NAME_ST_NOM_CONS_PROP;
522
		}else if (status.equals(NomenclaturalStatusType.ORTHOGRAPHY_CONSERVED())) {return NAME_ST_ORTH_CONS;
523
		}else if (status.equals(NomenclaturalStatusType.ORTHOGRAPHY_CONSERVED_PROP())) {return NAME_ST_ORTH_CONS_PROP;
524
		}else if (status.equals(NomenclaturalStatusType.SUPERFLUOUS())) {return NAME_ST_NOM_SUPERFL;
525
		}else if (status.equals(NomenclaturalStatusType.AMBIGUOUS())) {return NAME_ST_NOM_AMBIG;
526
		}else if (status.equals(NomenclaturalStatusType.PROVISIONAL())) {return NAME_ST_NOM_PROVIS;
527
		}else if (status.equals(NomenclaturalStatusType.DOUBTFUL())) {return NAME_ST_NOM_DUB;
528
		}else if (status.equals(NomenclaturalStatusType.NOVUM())) {return NAME_ST_NOM_NOV;
529
		
530
		}else if (status.equals(NomenclaturalStatusType.CONFUSUM())) {return NAME_ST_NOM_CONFUS;
531
		}else if (status.equals(NomenclaturalStatusType.ALTERNATIVE())) {return NAME_ST_NOM_ALTERN;
532
		}else if (status.equals(NomenclaturalStatusType.COMBINATION_INVALID())) {return NAME_ST_COMB_INVAL;
533
		//TODO
534
		}else {
535
			//TODO Exception
536
			logger.warn("NomStatus type not yet supported by Berlin Model export: "+ status);
537
			return null;
538
		}
539
	}
540

    
541
	
542
	
543
	public static Integer nameRel2RelNameQualifierFk (RelationshipBase<?,?,?> rel){
544
		if (rel == null){
545
			return null;
546
		}
547
		RelationshipTermBase<?> type = rel.getType();
548
		if (type.equals(NameRelationshipType.BASIONYM())) {return NAME_REL_IS_BASIONYM_FOR;
549
		}else if (type.equals(NameRelationshipType.LATER_HOMONYM())) {return NAME_REL_IS_LATER_HOMONYM_OF;
550
		}else if (type.equals(NameRelationshipType.REPLACED_SYNONYM())) {return NAME_REL_IS_REPLACED_SYNONYM_FOR;
551
		//TODO
552
		}else if (type.equals(NameRelationshipType.VALIDATED_BY_NAME())) {return NAME_REL_IS_VALIDATION_OF;
553
		}else if (type.equals(NameRelationshipType.LATER_VALIDATED_BY_NAME())) {return NAME_REL_IS_LATER_VALIDATION_OF;
554
		}else if (type.equals(NameRelationshipType.CONSERVED_AGAINST())) {return NAME_REL_IS_CONSERVED_AGAINST;
555
		
556
		
557
		}else if (type.equals(NameRelationshipType.TREATED_AS_LATER_HOMONYM())) {return NAME_REL_IS_TREATED_AS_LATER_HOMONYM_OF;
558
		}else if (type.equals(NameRelationshipType.ORTHOGRAPHIC_VARIANT())) {return NAME_REL_IS_ORTHOGRAPHIC_VARIANT_OF;
559
//		}else if (type.equals(NameRelationshipType.())) {return NAME_REL_IS_ORTHOGRAPHIC_VARIANT_OF;
560
		}else {
561
			//TODO Exception
562
			logger.warn("Relationship type not yet supported by Berlin Model export: "+ rel.getType());
563
			return null;
564
	}
565
			
566
			//NameRelationShip
567

    
568
//	}else if (type.equals(NameRelationshipType.())) {return NAME_REL_IS_REJECTED_IN_FAVOUR_OF;
569

    
570
//			public static int NAME_REL_IS_FIRST_PARENT_OF = 9;
571
//			public static int NAME_REL_IS_SECOND_PARENT_OF = 10;
572
//			public static int NAME_REL_IS_FEMALE_PARENT_OF = 11;
573
//			public static int NAME_REL_IS_MALE_PARENT_OF = 12;
574
//
575
//			public static int NAME_REL_IS_REJECTED_IN_FAVOUR_OF = 14;
576
//	}else if (type.equals(NameRelationshipType.)) {return NAME_REL_IS_REJECTED_TYPE_OF;
577
//			
578
//			public static int NAME_REL_HAS_SAME_TYPE_AS = 18;
579
//			public static int NAME_REL_IS_LECTOTYPE_OF = 61;
580
//			public static int NAME_REL_TYPE_NOT_DESIGNATED = 62;
581

    
582
		//	}else if (type.equals(NameRelationshipType.LATER_VALIDATED_BY_NAME())) {return NAME_REL_IS_TYPE_OF;
583
			
584
			
585
	}
586
	
587

    
588
	
589
	
590
}
(14-14/18)