View Javadoc

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.faunaEuropaea;
11  
12  import java.sql.ResultSet;
13  import java.sql.SQLException;
14  import java.util.HashMap;
15  import java.util.Map;
16  import java.util.UUID;
17  
18  import org.apache.log4j.Logger;
19  
20  import eu.etaxonomy.cdm.model.description.AbsenceTerm;
21  import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
22  import eu.etaxonomy.cdm.model.description.PresenceTerm;
23  import eu.etaxonomy.cdm.model.location.NamedArea;
24  import eu.etaxonomy.cdm.model.location.TdwgArea;
25  import eu.etaxonomy.cdm.model.name.Rank;
26  import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
27  
28  /**
29   * @author a.babadshanjan
30   * @created 12.05.2009
31   * @version 1.0
32   */
33  
34  public final class FaunaEuropaeaTransformer {
35  	private static final Logger logger = Logger.getLogger(FaunaEuropaeaTransformer.class);
36  	
37  	// Query
38  	public static final int Q_NO_RESTRICTION = -1;
39  	
40  	// TaxonStatus
41  	public static final int T_STATUS_ACCEPTED = 1;
42  	public static final int T_STATUS_NOT_ACCEPTED = 0;
43  	
44  	// Author
45  	public static final int A_AUCT = 1;
46  	public static final String A_AUCTNAME = "auct.";
47  	
48  	// Parenthesis
49  	public static final int P_PARENTHESIS = 1;
50  	
51  	//new AbsencePresenceTermUUIDs
52  	
53  	public static UUID noData;
54  	//public static UUID doubtfull_present;
55  	
56  	// Rank
57  	public static final int R_KINGDOM = 1;
58  	public static final int R_SUBKINGDOM = 2;
59  	public static final int R_SUPERPHYLUM = 3;
60  	public static final int R_PHYLUM = 4;
61  	public static final int R_SUBPHYLUM = 5;
62  	public static final int R_INFRAPHYLUM = 6;
63  	public static final int R_CLASS = 7;
64  	public static final int R_SUBCLASS = 8;
65  	public static final int R_INFRACLASS = 9;
66  	public static final int R_SUPERORDER = 10;
67  	public static final int R_ORDER = 11;
68  	public static final int R_SUBORDER = 12;
69  	public static final int R_INFRAORDER = 13;
70  	public static final int R_SUPERFAMILY = 14;
71  	public static final int R_FAMILY = 15;
72  	public static final int R_SUBFAMILY = 16;
73  	public static final int R_TRIBE = 17;
74  	public static final int R_SUBTRIBE = 18;
75  	public static final int R_GENUS = 19;
76  	public static final int R_SUBGENUS = 20;
77  	public static final int R_SPECIES = 21;
78  	public static final int R_SUBSPECIES = 22;
79  	
80  	private static Map<String, String> tdwgAreas = null;
81  
82  	public static PresenceAbsenceTermBase<?> occStatus2PresenceAbsence(int occStatusId)  throws UnknownCdmTypeException{
83  	
84  		if (Integer.valueOf(occStatusId) == null) {
85  			return PresenceTerm.PRESENT();
86  		}
87  		switch (occStatusId){
88  		case 0: return PresenceTerm.PRESENT();
89  		case 2: return AbsenceTerm.ABSENT();
90  		case 1: return PresenceTerm.PRESENT_DOUBTFULLY();
91  
92  		default: {
93  
94  			return null;
95  		
96  
97  		}
98  		
99  	}
100 	}
101 	public static void setUUIDs(HashMap<String,UUID> uuids){
102 		noData = uuids.get("noData");
103 		//doubtfull_present = uuids.get("doubtfullPresent");
104 	
105 	}
106 	
107 	public static PresenceAbsenceTermBase<?> occStatus2PresenceAbsence_ (int occStatusId)  throws UnknownCdmTypeException{
108 		switch (occStatusId){
109 			case 0: return null;
110 			//case 110: return AbsenceTerm.CULTIVATED_REPORTED_IN_ERROR();
111 			case 120: return PresenceTerm.CULTIVATED();
112 		//	case 210: return AbsenceTerm.INTRODUCED_REPORTED_IN_ERROR();
113 			case 220: return PresenceTerm.INTRODUCED_PRESENCE_QUESTIONABLE();
114 			case 230: return PresenceTerm.INTRODUCED_FORMERLY_INTRODUCED();
115 			case 240: return PresenceTerm.INTRODUCED_DOUBTFULLY_INTRODUCED();
116 			case 250: return PresenceTerm.INTRODUCED();
117 			case 260: return PresenceTerm.INTRODUCED_UNCERTAIN_DEGREE_OF_NATURALISATION();
118 			case 270: return PresenceTerm.INTRODUCED_ADVENTITIOUS();
119 			case 280: return PresenceTerm.INTRODUCED_NATURALIZED();
120 			//case 310: return AbsenceTerm.NATIVE_REPORTED_IN_ERROR();
121 			case 320: return PresenceTerm.NATIVE_PRESENCE_QUESTIONABLE();
122 			case 330: return PresenceTerm.NATIVE_FORMERLY_NATIVE();
123 			case 340: return PresenceTerm.NATIVE_DOUBTFULLY_NATIVE();
124 			case 350: return PresenceTerm.NATIVE();
125 			case 999: {
126 					logger.warn("endemic for EM can not be transformed in legal status");
127 					//TODO preliminary
128 					return PresenceTerm.PRESENT();
129 				}
130 			default: {
131 				throw new UnknownCdmTypeException("Unknown occurrence status  (id=" + Integer.valueOf(occStatusId).toString() + ")");
132 			}
133 		}
134 	}
135 		
136 	
137 	public static Rank rankId2Rank (ResultSet rs, boolean useUnknown) throws UnknownCdmTypeException {
138 		Rank result;
139 		try {
140 			int rankId = rs.getInt("rnk_id");
141 			int parentRankId = rs.getInt("rnk_rnk_id");
142 			String rankName = rs.getString("rnk_name");
143 			String rankLatinName = rs.getString("rnk_latinname");
144 			int rankCategory = rs.getInt("rnk_category");
145 
146 			if (logger.isDebugEnabled()) {
147 				logger.debug(rankId + ", " + parentRankId + ", " + rankName + ", " + rankCategory);
148 			}
149 
150 			try {
151 				result = Rank.getRankByNameOrAbbreviation(rankName);
152 			} catch (UnknownCdmTypeException e1) {
153 
154 				switch (rankId) {
155 				case 0: return null;
156 				case R_KINGDOM: return Rank.KINGDOM();
157 				case R_SUBKINGDOM: return Rank.SUBKINGDOM();
158 				case R_SUPERPHYLUM: return Rank.SUPERPHYLUM();
159 				case R_PHYLUM: return Rank.PHYLUM();
160 				case R_SUBPHYLUM: return Rank.SUBPHYLUM();
161 				case R_INFRAPHYLUM: return Rank.INFRAPHYLUM();
162 				case R_CLASS: return Rank.CLASS();
163 				case R_SUBCLASS: return Rank.SUBCLASS();
164 				case R_INFRACLASS: return Rank.INFRACLASS();
165 				case R_SUPERORDER: return Rank.SUPERORDER();
166 				case R_ORDER: return Rank.ORDER();
167 				case R_SUBORDER: return Rank.SUBORDER();
168 				case R_INFRAORDER: return Rank.INFRAORDER();
169 				case R_SUPERFAMILY: return Rank.SUPERFAMILY();
170 				case R_FAMILY: return Rank.FAMILY();
171 				case R_SUBFAMILY: return Rank.SUBFAMILY();
172 				case R_TRIBE: return Rank.TRIBE();
173 				case R_SUBTRIBE: return Rank.SUBTRIBE();
174 				case R_GENUS: return Rank.GENUS();
175 				case R_SUBGENUS: return Rank.SUBGENUS();
176 				case R_SPECIES: return Rank.SPECIES();
177 				case R_SUBSPECIES: return Rank.SUBSPECIES();
178 
179 				default: {
180 					if (useUnknown){
181 						logger.error("Rank unknown. Created UNKNOWN_RANK");
182 						return Rank.UNKNOWN_RANK();
183 					}
184 					throw new UnknownCdmTypeException("Unknown Rank id" + Integer.valueOf(rankId).toString());
185 				}
186 				}
187 			}
188 			return result;
189 		} catch (SQLException e) {
190 			e.printStackTrace();
191 			logger.warn("Exception occurred. Created UNKNOWN_RANK instead");
192 			return Rank.UNKNOWN_RANK();
193 		}		
194 	}
195 	
196 	
197 	public static NamedArea areaId2TdwgArea (FaunaEuropaeaDistribution fauEuDistribution) 
198 	throws UnknownCdmTypeException {
199 		
200 		NamedArea tdwgArea = null;
201 		
202 		try {
203 			int areaId = fauEuDistribution.getAreaId();
204 			String areaName = fauEuDistribution.getAreaName();
205 			String areaCode = fauEuDistribution.getAreaCode();
206 			int extraLimital = fauEuDistribution.getExtraLimital();
207 			
208 			//TODO: Verify mappings with comments. Those don't map to TDWG areas.
209 			
210 			if (areaCode.equals("AD")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("SPA-AN");
211 			//else if (areaCode.equals("AFR")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("24"); // Afro-tropical region - Northeast Tropical Africa
212 			else if (areaCode.equals("AL")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("ALB-OO");
213 			else if (areaCode.equals("AT")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("AUT-AU");
214 			//else if (areaCode.equals("AUS")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("50"); // Australian region - Australia
215 			else if (areaCode.equals("BA")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("YUG-BH"); 
216 			else if (areaCode.equals("BE")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("BGM-BE");
217 			else if (areaCode.equals("BG")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("BUL-OO");
218 			else if (areaCode.equals("BY")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("BLR-OO");
219 			else if (areaCode.equals("CH")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("SWI-OO");
220 			else if (areaCode.equals("CY")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("CYP-OO");
221 			else if (areaCode.equals("CZ")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("CZE-CZ");
222 			else if (areaCode.equals("DE")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("GER-OO");
223 			else if (areaCode.equals("DK-DEN")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("DEN-OO");
224 			else if (areaCode.equals("DK-FOR")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("FOR-OO");
225 			else if (areaCode.equals("EE")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("BLT-ES");
226 			//else if (areaCode.equals("EPA")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("3");   // Palaearctic - Asia-Temperate
227 			else if (areaCode.equals("ES-BAL")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("BLT-ES");
228 			else if (areaCode.equals("ES-CNY")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("CNY-OO");
229 			else if (areaCode.equals("ES-SPA")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("SPA-SP");
230 			else if (areaCode.equals("FI")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("FIN-OO");
231 			else if (areaCode.equals("FR-COR")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("COR-OO");
232 			else if (areaCode.equals("FR-FRA")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("FRA-FR");
233 			else if (areaCode.equals("GB-CI")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("FRA-CI");
234 			else if (areaCode.equals("GB-GI")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("SPA-GI");
235 			else if (areaCode.equals("GB-GRB")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("GRB-OO");
236 			else if (areaCode.equals("GB-NI")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("IRE-NI");
237 			//else if (areaCode.equals("GR-AEG")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("EAI-OO"); // North Aegean Is. - East Aegean Is.
238 			//else if (areaCode.equals("GR-CYC")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("GRC-OO"); // Cyclades Is. - Greece
239 			//else if (areaCode.equals("GR-DOD")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("EAI-OO"); // Dodecanese Is. - East Aegean Is.
240 			else if (areaCode.equals("GR-GRC")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("GRC-OO");
241 			else if (areaCode.equals("GR-KRI")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("KRI-OO");
242 			else if (areaCode.equals("HR")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("YUG-CR");
243 			else if (areaCode.equals("HU")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("HUN-OO");
244 			else if (areaCode.equals("IE")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("IRE-IR");
245 			else if (areaCode.equals("IS")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("ICE-OO");
246 			else if (areaCode.equals("IT-ITA")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("ITA-IT");
247 			else if (areaCode.equals("IT-SAR")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("SAR-OO");
248 			else if (areaCode.equals("IT-SI")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("SIC-SI");
249 			else if (areaCode.equals("LI")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("AUT-LI");
250 			else if (areaCode.equals("LT")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("BLT-LI");
251 			else if (areaCode.equals("LU")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("BGM-LU");
252 			else if (areaCode.equals("LV")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("BLT-LA");
253 			else if (areaCode.equals("MC")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("FRA-MO");
254 			else if (areaCode.equals("MD")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("UKR-MO");
255 			else if (areaCode.equals("MK")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("YUG-MA");
256 			else if (areaCode.equals("MT")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("SIC-MA");
257 			//else if (areaCode.equals("NAF")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("20");   // North Africa - Northern Africa
258 			//else if (areaCode.equals("NEA")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("7");	// Nearctic region - Northern America
259 			//else if (areaCode.equals("NEO")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("8");    // Neotropical region - Southern America
260 			else if (areaCode.equals("NL")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("NET-OO");
261 			else if (areaCode.equals("NO-NOR")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("NOR-OO");
262 			else if (areaCode.equals("NO-SVA")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("SVA-OO");
263 			//else if (areaCode.equals("NRE")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("34");   // Near East - Western Asia
264 			//else if (areaCode.equals("ORR")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("35");	// Oriental region - Arabian Peninsula
265 			else if (areaCode.equals("PL")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("POL-OO");
266 			else if (areaCode.equals("PT-AZO")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("AZO-OO");
267 			else if (areaCode.equals("PT-MDR")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("MDR-OO");
268 			else if (areaCode.equals("PT-POR")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("POR-OO");
269 			else if (areaCode.equals("PT-SEL")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("SEL-OO");
270 			else if (areaCode.equals("RO")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("ROM-OO");
271 			else if (areaCode.equals("RU-FJL")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("WSB-OO");
272 			else if (areaCode.equals("RU-KGD")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("BLT-KA");
273 			else if (areaCode.equals("RU-NOZ")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("WSB-OO");
274 			else if (areaCode.equals("RU-RUC")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("RUC-OO");
275 			else if (areaCode.equals("RU-RUE")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("RUE-OO");
276 			else if (areaCode.equals("RU-RUN")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("RUN-OO");
277 			else if (areaCode.equals("RU-RUS")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("RUS-OO");
278 			else if (areaCode.equals("RU-RUW")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("RUW-OO");
279 			else if (areaCode.equals("SE")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("SWE-OO");
280 			else if (areaCode.equals("SI")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("YUG-SL");
281 			else if (areaCode.equals("SK")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("CZE-SK");
282 			else if (areaCode.equals("SM")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("ITA-SM");
283 			else if (areaCode.equals("TR-TUE")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("TUE-OO");
284 			else if (areaCode.equals("UA")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("UKR-UK");
285 			else if (areaCode.equals("VA")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("ITA-VC");
286 			else if (areaCode.equals("YU")) tdwgArea = TdwgArea.getAreaByTdwgAbbreviation("YUG");
287 			else 					
288 				throw new UnknownCdmTypeException("Unknown Area " + areaCode);
289 
290 			if (logger.isDebugEnabled()) {
291 				logger.debug(areaId + ", " + areaName + ", " + areaCode + ", " + extraLimital);
292 			}
293 			
294 		} catch (Exception e) {
295 			//e.printStackTrace();
296 			logger.debug("Exception occurred. Area could not be mapped." + fauEuDistribution.getAreaName());
297 			return null;
298 		}	
299 		
300 		return tdwgArea;
301 	}
302 	
303 	public final static HashMap<String, UUID> abbrToUUID = new HashMap<String,UUID>();
304 	 	static
305 	 	{	
306 	 		abbrToUUID.put("AUS", UUID.fromString("cf979ca8-8cb6-42df-b2ce-1f432ec7c26b"));
307 	 		abbrToUUID.put("AFR", UUID.fromString("07ac5e75-9fc9-4aa0-938c-1324c9618b97"));
308 	 		abbrToUUID.put("EPA", UUID.fromString("e83446d7-7379-4beb-be05-295f8da6f5ae"));
309 	 		abbrToUUID.put("GR-AEG", UUID.fromString("6bd422aa-9911-4b80-8595-0f6d1ecd5eee"));
310 	 		abbrToUUID.put("GR-CYC", UUID.fromString("8e7d7f1e-3e4d-4f7c-96ec-93ec91e528d6"));
311 	 		abbrToUUID.put("GR-DOD", UUID.fromString("6d6f6842-924e-440b-9e7e-3df1922bf4a6"));
312 	 		abbrToUUID.put("NAF", UUID.fromString("d2c54b1e-5f9f-455d-b308-6859cb153c7b"));
313 	 		abbrToUUID.put("NEA", UUID.fromString("aa87f6b8-110b-44b5-a329-91a08f1a4cc9"));
314 	 		abbrToUUID.put("NEO", UUID.fromString("0e6e0ce9-c6ab-46bc-80b9-aee4a0620e78"));
315 	 		abbrToUUID.put("NRE", UUID.fromString("d51876c2-eaf6-4c7f-963e-337dd3e0d729"));
316 	 		abbrToUUID.put("ORR", UUID.fromString("04cab4f8-b316-4e21-9bcc-236a45e4e83d"));
317 	 	}
318 	public static UUID getUUIDByAreaAbbr(String abbr){
319 		return abbrToUUID.get(abbr);
320 	}
321 	
322 }