Project

General

Profile

Download (29.4 KB) Statistics
| Branch: | 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.pesi.faunaEuropaea;
11

    
12
import java.sql.ResultSet;
13
import java.sql.SQLException;
14
import java.util.HashMap;
15
import java.util.HashSet;
16
import java.util.List;
17
import java.util.Map;
18
import java.util.Set;
19
import java.util.UUID;
20

    
21
import org.apache.log4j.Logger;
22
import org.springframework.stereotype.Component;
23
import org.springframework.transaction.TransactionStatus;
24

    
25
import eu.etaxonomy.cdm.io.common.Source;
26
import eu.etaxonomy.cdm.model.common.CdmBase;
27
import eu.etaxonomy.cdm.model.common.TermType;
28
import eu.etaxonomy.cdm.model.common.TermVocabulary;
29
import eu.etaxonomy.cdm.model.description.Distribution;
30
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
31
import eu.etaxonomy.cdm.model.description.TaxonDescription;
32
import eu.etaxonomy.cdm.model.location.NamedArea;
33
import eu.etaxonomy.cdm.model.taxon.Taxon;
34
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
35

    
36

    
37
/**
38
 * @author a.babadshanjan
39
 * @created 12.05.2009
40
 * @version 1.0
41
 */
42
@Component
43
public class FaunaEuropaeaDistributionImport extends FaunaEuropaeaImportBase {
44
	private static final Logger logger = Logger.getLogger(FaunaEuropaeaDistributionImport.class);
45

    
46

    
47
	@Override
48
	protected boolean doCheck(FaunaEuropaeaImportState state) {
49
		boolean result = true;
50
		FaunaEuropaeaImportConfigurator fauEuConfig = state.getConfig();
51
		logger.warn("Checking for Distributions not yet fully implemented");
52
		result &= checkReferenceStatus(fauEuConfig);
53

    
54
		return result;
55
	}
56

    
57
	private boolean checkReferenceStatus(FaunaEuropaeaImportConfigurator fauEuConfig) {
58
		boolean result = true;
59
//		try {
60
//			Source source = fauEuConfig.getSource();
61
//			String sqlStr = "";
62
	//		ResultSet rs = source.getResultSet(sqlStr);
63
			return result;
64
//		} catch (SQLException e) {
65
//			e.printStackTrace();
66
//			return false;
67
//		}
68
	}
69

    
70
	@Override
71
	protected void doInvoke(FaunaEuropaeaImportState state) {
72
		/*
73
		logger.warn("Start distribution doInvoke");
74
		ProfilerController.memorySnapshot();
75
		*/
76

    
77
		if (!state.getConfig().isDoOccurrence()){
78
			return;
79
		}
80

    
81
		int limit = state.getConfig().getLimitSave();
82
		UUID noDataUuid;
83
		/* Taxon store for retrieving taxa from and saving taxa to CDM */
84
		List<TaxonBase> taxonList = null;
85
		/* UUID store as input for retrieving taxa from CDM */
86
		Set<UUID> taxonUuids = null;
87
		/* Store to hold helper objects */
88
		Map<UUID, FaunaEuropaeaDistributionTaxon> fauEuTaxonMap = null;
89

    
90

    
91
		TransactionStatus txStatus = null;
92

    
93
		//txStatus = startTransaction();
94
		/*PresenceAbsenceTerm noDataStatusTerm = PresenceAbsenceTerm.NewPresenceInstance("no data", "no data", "nod");
95
		noDataUuid = noDataStatusTerm.getUuid();
96
		TermVocabulary<PresenceAbsenceTerm> voc = getVocabularyService().find(30);
97
		HibernateProxyHelper.deproxy(voc, OrderedTermVocabulary.class);
98
		//voc.addTerm(noDataStatusTerm);
99
	//	getVocabularyService().saveOrUpdate(voc);
100
		getTermService().save(noDataStatusTerm);*/
101
		//commitTransaction(txStatus);
102

    
103
	//	FaunaEuropaeaTransformer.setUUIDs(noDataUuid);
104
		logger.info("create termvoc");
105
		createTermVocabulary(txStatus, state);
106

    
107
		FaunaEuropaeaImportConfigurator fauEuConfig = state.getConfig();
108
		Source source = fauEuConfig.getSource();
109

    
110
        int i = 0;
111

    
112
		String selectCount =
113
			" SELECT count(*) ";
114

    
115
		String selectColumns =
116
			" SELECT distribution.*, Area.*, Taxon.UUID ";
117

    
118
		String fromClause =
119
			" FROM distribution INNER JOIN " +
120
            " Area ON distribution.dis_ara_id = Area.ara_id INNER JOIN " +
121
            " Taxon ON distribution.dis_tax_id = Taxon.TAX_ID ";
122
		String orderBy = " ORDER BY distribution.dis_tax_id";
123

    
124
		String countQuery =
125
			selectCount + fromClause;
126

    
127
		String selectQuery =
128
			selectColumns + fromClause + orderBy;
129

    
130

    
131

    
132
		if(logger.isInfoEnabled()) { logger.info("Start making distributions..."); }
133

    
134
		try {
135
			ResultSet rs = source.getResultSet(countQuery);
136
			rs.next();
137
			int count = rs.getInt(1);
138

    
139
			rs = source.getResultSet(selectQuery);
140

    
141
			if (logger.isInfoEnabled()) {
142
				logger.info("Number of rows: " + count);
143
				logger.info("Count Query: " + countQuery);
144
				logger.info("Select Query: " + selectQuery);
145
			}
146

    
147
			//int taxonId;
148

    
149
			while (rs.next()) {
150
				if ((i++ % limit) == 0) {
151

    
152
					txStatus = startTransaction();
153
					taxonUuids = new HashSet<UUID>(limit);
154
					fauEuTaxonMap = new HashMap<UUID, FaunaEuropaeaDistributionTaxon>(limit);
155

    
156
					if(logger.isInfoEnabled()) {
157
						logger.info("i = " + i + " - Distribution import transaction started");
158
					}
159
				}
160

    
161
				//taxonId = rs.getInt("dis_tax_id");
162
				int disId = rs.getInt("dis_id");
163
				int occStatusId = rs.getInt("dis_present");
164
				int areaId = rs.getInt("ara_id");
165
				String areaName = rs.getString("ara_name");
166
				String areaCode = rs.getString("ara_code");
167
				int extraLimital = rs.getInt("ara_extralimital");
168
				UUID currentTaxonUuid = null;
169
				if (resultSetHasColumn(rs,"UUID")){
170
					currentTaxonUuid = UUID.fromString(rs.getString("UUID"));
171
				} else {
172
					currentTaxonUuid = UUID.randomUUID();
173
				}
174

    
175
				FaunaEuropaeaDistribution fauEuDistribution = new FaunaEuropaeaDistribution();
176
				fauEuDistribution.setDistributionId(disId);
177
				fauEuDistribution.setOccurrenceStatusId(occStatusId);
178
				fauEuDistribution.setAreaId(areaId);
179
				fauEuDistribution.setAreaName(areaName);
180
				fauEuDistribution.setAreaCode(areaCode);
181
				fauEuDistribution.setExtraLimital(extraLimital);
182

    
183
				if (!taxonUuids.contains(currentTaxonUuid)) {
184
					taxonUuids.add(currentTaxonUuid);
185
					FaunaEuropaeaDistributionTaxon fauEuDistributionTaxon =
186
						new FaunaEuropaeaDistributionTaxon(currentTaxonUuid);
187
					fauEuTaxonMap.put(currentTaxonUuid, fauEuDistributionTaxon);
188
					fauEuDistributionTaxon = null;
189
				} else {
190
					if (logger.isTraceEnabled()) {
191
						logger.trace("Taxon (" + currentTaxonUuid + ") already stored.");
192
						continue;
193
					}
194
				}
195

    
196
				fauEuTaxonMap.get(currentTaxonUuid).addDistribution(fauEuDistribution);
197

    
198
				if (((i % limit) == 0 && i != 1 ) || i == count ) {
199

    
200
					try {
201
						commitTaxaAndDistribution(state, taxonUuids, fauEuTaxonMap, txStatus);
202
						taxonUuids = null;
203
						taxonList = null;
204
						fauEuTaxonMap = null;
205

    
206
					} catch (Exception e) {
207
						logger.error("Commit of taxa and distributions failed" + e.getMessage());
208
						e.printStackTrace();
209
					}
210

    
211
					if(logger.isInfoEnabled()) { logger.info("i = " + i + " - Transaction committed");}
212
				}
213

    
214

    
215
			}
216
			if (taxonUuids != null){
217
				try {
218
					commitTaxaAndDistribution(state, taxonUuids, fauEuTaxonMap, txStatus);
219
					taxonUuids = null;
220
					taxonList = null;
221
					fauEuTaxonMap = null;
222
				} catch (Exception e) {
223
					logger.error("Commit of taxa and distributions failed");
224
					logger.error(e.getMessage());
225
					e.printStackTrace();
226
				}
227
			}
228
			rs = null;
229
		} catch (SQLException e) {
230
			logger.error("SQLException:" +  e);
231
			state.setUnsuccessfull();
232
		}
233

    
234
		if(logger.isInfoEnabled()) { logger.info("End making distributions..."); }
235

    
236

    
237
		return;
238
	}
239

    
240
	/**
241
     *
242
     */
243
    private void createTermVocabulary(TransactionStatus txStatus, FaunaEuropaeaImportState state) {
244
        TermVocabulary<NamedArea> faunaEuAreaVocabulary = TermVocabulary.NewInstance(TermType.NamedArea, "Areas for Fauna Europaea distribution data", "FE areas", "FE", null);
245

    
246
       NamedArea area;
247

    
248
       area =NamedArea.NewInstance(null, "Andorra", "AD");
249
       area.setUuid(UUID.randomUUID());
250
       area.setIdInVocabulary("AD");
251
       state.putNamedArea(area);
252
       faunaEuAreaVocabulary.addTerm(area);
253
       area = NamedArea.NewInstance(null, "Albania", "AL");
254
       area.setIdInVocabulary("AL");
255
       area.setUuid(UUID.randomUUID());
256
       state.putNamedArea(area);
257
       faunaEuAreaVocabulary.addTerm(area);
258
       area = NamedArea.NewInstance(null, "Austria", "AT");
259
       area.setIdInVocabulary("AT");
260
       area.setUuid(UUID.randomUUID());
261
       state.putNamedArea(area);
262
       faunaEuAreaVocabulary.addTerm(area);
263
       area = NamedArea.NewInstance(null, "Bosnia and Herzegovina", "BA");
264
       area.setUuid(UUID.randomUUID());
265
       area.setIdInVocabulary("BA");
266
       state.putNamedArea(area);
267
       faunaEuAreaVocabulary.addTerm(area);
268
       area = NamedArea.NewInstance(null, "Belgium", "BE");
269
       area.setUuid(UUID.randomUUID());
270
       area.setIdInVocabulary("BE");
271
       state.putNamedArea(area);
272
       faunaEuAreaVocabulary.addTerm(area);
273
       area = NamedArea.NewInstance(null, "Bulgaria", "BG");
274
       area.setUuid(UUID.randomUUID());
275
       area.setIdInVocabulary("BG");
276
       state.putNamedArea(area);
277
       faunaEuAreaVocabulary.addTerm(area);
278
       area = NamedArea.NewInstance(null, "Belarus", "BY");
279
       area.setUuid(UUID.randomUUID());
280
       area.setIdInVocabulary("BY");
281
       state.putNamedArea(area);
282
       faunaEuAreaVocabulary.addTerm(area);
283
       area = NamedArea.NewInstance(null, "Switzerland", "CH");
284
       area.setUuid(UUID.randomUUID());
285
       area.setIdInVocabulary("CH");
286
       state.putNamedArea(area);
287
       faunaEuAreaVocabulary.addTerm(area);
288
       area = NamedArea.NewInstance(null, "Cyprus", "CY");
289
       area.setUuid(UUID.randomUUID());
290
       area.setIdInVocabulary("CY");
291
       state.putNamedArea(area);
292
       faunaEuAreaVocabulary.addTerm(area);
293
       area = NamedArea.NewInstance(null, "Czech Republic", "CZ");
294
       area.setUuid(UUID.randomUUID());
295
       area.setIdInVocabulary("CZ");
296
       state.putNamedArea(area);
297
       faunaEuAreaVocabulary.addTerm(area);
298
       area = NamedArea.NewInstance(null, "Germany", "DE");
299
       area.setUuid(UUID.randomUUID());
300
       area.setIdInVocabulary("DE");
301
       state.putNamedArea(area);
302
       faunaEuAreaVocabulary.addTerm(area);
303
       area = NamedArea.NewInstance("Incl. Bornholm I.", "Danish mainland", "DK-DEN");
304
       area.setUuid(UUID.randomUUID());
305
       area.setIdInVocabulary("DK-DEN");
306
       state.putNamedArea(area);
307
       faunaEuAreaVocabulary.addTerm(area);
308
       area = NamedArea.NewInstance(null, "Faroe Is.", "DK-FOR");
309
       area.setUuid(UUID.randomUUID());
310
       area.setIdInVocabulary("DK-FOR");
311
       state.putNamedArea(area);
312
       faunaEuAreaVocabulary.addTerm(area);
313
       area = NamedArea.NewInstance(null, "Estonia", "EE");
314
       area.setUuid(UUID.randomUUID());
315
       area.setIdInVocabulary("EE");
316
       state.putNamedArea(area);
317
       faunaEuAreaVocabulary.addTerm(area);
318
       area = NamedArea.NewInstance("Incl. Mallorca I., Menorca I., and Pityuses Is.(=Ibiza I. + Formentera I.)", "Balearic Is.", "ES-BAL");
319
       area.setUuid(UUID.randomUUID());
320
       area.setIdInVocabulary("ES-BAL");
321
       state.putNamedArea(area);
322
       faunaEuAreaVocabulary.addTerm(area);
323
       area = NamedArea.NewInstance(null, "Canary Is.", "ES-CNY");
324
       area.setUuid(UUID.randomUUID());
325
       area.setIdInVocabulary("ES-CNY");
326
       state.putNamedArea(area);
327
       faunaEuAreaVocabulary.addTerm(area);
328
       area = NamedArea.NewInstance("Incl. Alboran I.", "Spanish mainland", "ES-SPA");
329
       area.setUuid(UUID.randomUUID());
330
       area.setIdInVocabulary("ES-SPA");
331
       state.putNamedArea(area);
332
       faunaEuAreaVocabulary.addTerm(area);
333
       area = NamedArea.NewInstance(null, "Finland", "FI");
334
       area.setUuid(UUID.randomUUID());
335
       area.setIdInVocabulary("FI");
336
       state.putNamedArea(area);
337
       faunaEuAreaVocabulary.addTerm(area);
338
       area = NamedArea.NewInstance(null, "Corsica", "FR-COR");
339
       area.setUuid(UUID.randomUUID());
340
       area.setIdInVocabulary("FR-COR");
341
       state.putNamedArea(area);
342
       faunaEuAreaVocabulary.addTerm(area);
343
       area = NamedArea.NewInstance(null, "French mainland", "FR-FRA");
344
       area.setUuid(UUID.randomUUID());
345
       area.setIdInVocabulary("FR-FRA");
346
       state.putNamedArea(area);
347
       faunaEuAreaVocabulary.addTerm(area);
348
       area = NamedArea.NewInstance("Incl. Jersey, Guernsey, Alderney", "Channel Is.", "GB-CI");
349
       area.setUuid(UUID.randomUUID());
350
       area.setIdInVocabulary("GB-CI");
351
       state.putNamedArea(area);
352
       faunaEuAreaVocabulary.addTerm(area);
353
       area = NamedArea.NewInstance(null, "Gibraltar", "GB-GI");
354
       area.setUuid(UUID.randomUUID());
355
       area.setIdInVocabulary("GB-GI");
356
       state.putNamedArea(area);
357
       faunaEuAreaVocabulary.addTerm(area);
358
       area = NamedArea.NewInstance("Incl. Shetlands, Orkneys, Hebrides and Man Is.", "Britain I.", "GB-GRB");
359
       area.setUuid(UUID.randomUUID());
360
       area.setIdInVocabulary("GB-GRB");
361
       state.putNamedArea(area);
362
       faunaEuAreaVocabulary.addTerm(area);
363
       area = NamedArea.NewInstance(null, "Northern Ireland", "GB-NI");
364
       area.setUuid(UUID.randomUUID());
365
       area.setIdInVocabulary("GB-NI");
366
       state.putNamedArea(area);
367
       faunaEuAreaVocabulary.addTerm(area);
368
       area = NamedArea.NewInstance("Incl. Andípsara, Áyios Evstrátios, Foúrnoi,Ikaría, Khíos, "
369
               + "Lésvos, Límnos, Oinoúsa, Psará, Sámos, Skópelos Kaloyeroi and other smaller"
370
               + " islands","Vóreion Aiyáion (North Aegean Is.)", "GR-AEG");
371
       area.setUuid(UUID.randomUUID());
372
       area.setIdInVocabulary("GR-AEG");
373
       state.putNamedArea(area);
374
       faunaEuAreaVocabulary.addTerm(area);
375
       area = NamedArea.NewInstance("Incl. Amorgós, Anáfi, Ánidros, Ándros, Andíparos, Denoúsa, Folégandros, "
376
               + "Íos, Iráklia, Káros, Kímolos, Kéa, Kýthnos, Mílos, Mýkonos, Náxos, Páros, Políaigos, Sérifos, "
377
               + "Sífnos, Síkinos, Sýros, Thíra, Tínos, Yiarós and other smaller islands", "Kikládes (Cyclades Is.)", "GR-CYC");
378
       area.setUuid(UUID.randomUUID());
379
       area.setIdInVocabulary("GR-CYC");
380
       state.putNamedArea(area);
381
       faunaEuAreaVocabulary.addTerm(area);
382
       area = NamedArea.NewInstance("Incl. Alimniá, Árkoi, Astipálaia, Avgonísi, Ankathonísi, Farmakonísi, Ioinianísia,"
383
               + " Kálimnos, Kalolímnos, Kandelioúsa, Kárpathos, Kásos, Khálki, Khamilí, Kínaros, Kos, Léros, Levítha, "
384
               + "Lipsói, Meyísti, Nísiros, Ofidoúsa, Pátmos, Ródhos, Saría, Sími, Sírina, Tílos, Tría Nisiá, Yialí "
385
               + "and other smaller islands", "Dodekánisos (Dodecanese Is.) ", "GR-DOD");
386
       area.setUuid(UUID.randomUUID());
387
       area.setIdInVocabulary("GR-DOD");
388
       state.putNamedArea(area);
389
       faunaEuAreaVocabulary.addTerm(area);
390
       area = NamedArea.NewInstance(" Incl. Andikíthira I., Evvia I., Ionian Is., Samothráki I., Northern Sporades Is., Thásos I.",
391
               "Greek mainland", "GR-GRC");
392
       area.setUuid(UUID.randomUUID());
393
       area.setIdInVocabulary("GR-GRC");
394
       state.putNamedArea(area);
395
       faunaEuAreaVocabulary.addTerm(area);
396
       area = NamedArea.NewInstance("Incl. small adjacent islands like Gávdhos. Note that Andikíthira I. although being "
397
               + "closer to Kriti than to mainland, belongs to a mainland province", "Kriti (Crete)", "GR-KRI");
398
       area.setUuid(UUID.randomUUID());
399
       area.setIdInVocabulary("GR-KRI");
400
       state.putNamedArea(area);
401
       faunaEuAreaVocabulary.addTerm(area);
402
       area = NamedArea.NewInstance(null, "Croatia", "HR");
403
       area.setUuid(UUID.randomUUID());
404
       area.setIdInVocabulary("HR");
405
       state.putNamedArea(area);
406
       faunaEuAreaVocabulary.addTerm(area);
407
       area = NamedArea.NewInstance(null, "Hungary", "HU");
408
       area.setUuid(UUID.randomUUID());
409
       area.setIdInVocabulary("HU");
410
       state.putNamedArea(area);
411
       faunaEuAreaVocabulary.addTerm(area);
412
       area = NamedArea.NewInstance(null, "Ireland", "IE");
413
       area.setUuid(UUID.randomUUID());
414
       area.setIdInVocabulary("IE");
415
       state.putNamedArea(area);
416
       faunaEuAreaVocabulary.addTerm(area);
417
       area = NamedArea.NewInstance(null, "Iceland", "IS");
418
       area.setUuid(UUID.randomUUID());
419
       area.setIdInVocabulary("IS");
420
       state.putNamedArea(area);
421
       faunaEuAreaVocabulary.addTerm(area);
422
       area = NamedArea.NewInstance(null, "Italian mainland", "IT-ITA");
423
       area.setUuid(UUID.randomUUID());
424
       area.setIdInVocabulary("IT-ITA");
425
       state.putNamedArea(area);
426
       faunaEuAreaVocabulary.addTerm(area);
427
       area = NamedArea.NewInstance(null, "Sardinia", "IT-SAR");
428
       area.setUuid(UUID.randomUUID());
429
       area.setIdInVocabulary("IT-SAR");
430
       state.putNamedArea(area);
431
       faunaEuAreaVocabulary.addTerm(area);
432
       area = NamedArea.NewInstance(" Incl. adjacent Italian islands (Lipari Is., Ustica I., Egadi Is., "
433
               + "Pantelleria I., Pelagie Is.) ", "Sicily", "IT-SI");
434
       area.setUuid(UUID.randomUUID());
435
       area.setIdInVocabulary("IT-SI");
436
       state.putNamedArea(area);
437
       faunaEuAreaVocabulary.addTerm(area);
438
       area = NamedArea.NewInstance(null, "Liechtenstein", "LI");
439
       area.setUuid(UUID.randomUUID());
440
       area.setIdInVocabulary("LI");
441
       state.putNamedArea(area);
442
       faunaEuAreaVocabulary.addTerm(area);
443
       area = NamedArea.NewInstance(null, "Lithuania", "LT");
444
       area.setUuid(UUID.randomUUID());
445
       area.setIdInVocabulary("LT");
446
       state.putNamedArea(area);
447
       faunaEuAreaVocabulary.addTerm(area);
448
       area = NamedArea.NewInstance(null, "Luxembourg", "LU");
449
       area.setUuid(UUID.randomUUID());
450
       area.setIdInVocabulary("LU");
451
       state.putNamedArea(area);
452
       faunaEuAreaVocabulary.addTerm(area);
453
       area = NamedArea.NewInstance(null, "Latvia", "LV");
454
       area.setUuid(UUID.randomUUID());
455
       area.setIdInVocabulary("LV");
456
       state.putNamedArea(area);
457
       faunaEuAreaVocabulary.addTerm(area);
458
       area = NamedArea.NewInstance(null, "Monaco", "MC");
459
       area.setUuid(UUID.randomUUID());
460
       area.setIdInVocabulary("MC");
461
       state.putNamedArea(area);
462
       faunaEuAreaVocabulary.addTerm(area);
463
       area = NamedArea.NewInstance(null, "Moldova, Republic of", "MD");
464
       area.setUuid(UUID.randomUUID());
465
       area.setIdInVocabulary("MD");
466
       state.putNamedArea(area);
467
       faunaEuAreaVocabulary.addTerm(area);
468
       area = NamedArea.NewInstance(null, "Macedonia, the former Yugoslav Republic of", "MK");
469
       area.setUuid(UUID.randomUUID());
470
       area.setIdInVocabulary("MK");
471
       state.putNamedArea(area);
472
       faunaEuAreaVocabulary.addTerm(area);
473
       area = NamedArea.NewInstance(null, "Malta", "MT");
474
       area.setUuid(UUID.randomUUID());
475
       area.setIdInVocabulary("MT");
476
       state.putNamedArea(area);
477
       faunaEuAreaVocabulary.addTerm(area);
478
       area = NamedArea.NewInstance(null, "The Netherlands", "NL");
479
       area.setUuid(UUID.randomUUID());
480
       area.setIdInVocabulary("NL");
481
       state.putNamedArea(area);
482
       faunaEuAreaVocabulary.addTerm(area);
483
       area = NamedArea.NewInstance(null, "Norwegian mainland", "NO-NOR");
484
       area.setUuid(UUID.randomUUID());
485
       area.setIdInVocabulary("NO-NOR");
486
       state.putNamedArea(area);
487
       faunaEuAreaVocabulary.addTerm(area);
488
       area = NamedArea.NewInstance("Incl. Bear I.", "Svalbard & Jan Mayen", "NO-SVA");
489
       area.setUuid(UUID.randomUUID());
490
       area.setIdInVocabulary("NO-SVA");
491
       state.putNamedArea(area);
492
       faunaEuAreaVocabulary.addTerm(area);
493
       area = NamedArea.NewInstance(null, "Poland", "PL");
494
       area.setUuid(UUID.randomUUID());
495
       area.setIdInVocabulary("PL");
496
       state.putNamedArea(area);
497
       faunaEuAreaVocabulary.addTerm(area);
498
       area = NamedArea.NewInstance(null, "Azores Is.", "PT-AZO");
499
       area.setUuid(UUID.randomUUID());
500
       area.setIdInVocabulary("PT-AZO");
501
       state.putNamedArea(area);
502
       faunaEuAreaVocabulary.addTerm(area);
503
       area = NamedArea.NewInstance(null, "Madeira Is.", "PT-MDR");
504
       area.setUuid(UUID.randomUUID());
505
       area.setIdInVocabulary("PT-MDR");
506
       state.putNamedArea(area);
507
       faunaEuAreaVocabulary.addTerm(area);
508
       area = NamedArea.NewInstance(null, "Portuguese mainland", "PT-POR");
509
       area.setUuid(UUID.randomUUID());
510
       area.setIdInVocabulary("PT-POR");
511
       state.putNamedArea(area);
512
       faunaEuAreaVocabulary.addTerm(area);
513
       area = NamedArea.NewInstance(null, "Selvagens Is.", "PT-SEL");
514
       area.setUuid(UUID.randomUUID());
515
       area.setIdInVocabulary("PT-SEL");
516
       state.putNamedArea(area);
517
       faunaEuAreaVocabulary.addTerm(area);
518
       area = NamedArea.NewInstance(null, "Romania", "RO");
519
       area.setUuid(UUID.randomUUID());
520
       area.setIdInVocabulary("RO");
521
       state.putNamedArea(area);
522
       faunaEuAreaVocabulary.addTerm(area);
523
       area = NamedArea.NewInstance("Excl. Ushakova I. and Vize I.", "Franz Josef Land", "RU-FJL");
524
       area.setUuid(UUID.randomUUID());
525
       area.setIdInVocabulary("RU-FJL");
526
       state.putNamedArea(area);
527
       faunaEuAreaVocabulary.addTerm(area);
528
       area = NamedArea.NewInstance(null, "Kaliningrad Region", "RU-KGD");
529
       area.setUuid(UUID.randomUUID());
530
       area.setIdInVocabulary("RU-KGD");
531
       state.putNamedArea(area);
532
       faunaEuAreaVocabulary.addTerm(area);
533
       area = NamedArea.NewInstance(null, "Novaya Zemlya", "RU-NOZ");
534
       area.setUuid(UUID.randomUUID());
535
       area.setIdInVocabulary("RU-NOZ");
536
       state.putNamedArea(area);
537
       faunaEuAreaVocabulary.addTerm(area);
538
       area = NamedArea.NewInstance(null, "Central European Russia", "RU-RUC");
539
       area.setUuid(UUID.randomUUID());
540
       area.setIdInVocabulary("RU-RUC");
541
       state.putNamedArea(area);
542
       faunaEuAreaVocabulary.addTerm(area);
543
       area = NamedArea.NewInstance(null, "East European Russia", "RU-RUE");
544
       area.setUuid(UUID.randomUUID());
545
       area.setIdInVocabulary("RU-RUE");
546
       state.putNamedArea(area);
547

    
548
       faunaEuAreaVocabulary.addTerm(area);
549
       area = NamedArea.NewInstance(null, "North European Russia", "RU-RUN");
550
       area.setUuid(UUID.randomUUID());
551
       area.setIdInVocabulary("RU-RUN");
552
       state.putNamedArea(area);
553
       faunaEuAreaVocabulary.addTerm(area);
554
       area = NamedArea.NewInstance(null, "South European Russia", "RU-RUS");
555
       area.setUuid(UUID.randomUUID());
556
       area.setIdInVocabulary("RU-RUS");
557
       state.putNamedArea(area);
558
       faunaEuAreaVocabulary.addTerm(area);
559
       area = NamedArea.NewInstance(null, "Northwest European Russia", "RU-RUW");
560
       area.setUuid(UUID.randomUUID());
561
       area.setIdInVocabulary("RU-RUW");
562
       state.putNamedArea(area);
563
       faunaEuAreaVocabulary.addTerm(area);
564
       area = NamedArea.NewInstance("Incl. Gotland I.", "Sweden", "SE");
565
       area.setUuid(UUID.randomUUID());
566
       area.setIdInVocabulary("SE");
567
       state.putNamedArea(area);
568
       faunaEuAreaVocabulary.addTerm(area);
569
       area = NamedArea.NewInstance(null, "Slovenia", "SI");
570
       area.setUuid(UUID.randomUUID());
571
       area.setIdInVocabulary("SI");
572
       state.putNamedArea(area);
573
       faunaEuAreaVocabulary.addTerm(area);
574
       area = NamedArea.NewInstance(null, "Slovakia", "SK");
575
       area.setUuid(UUID.randomUUID());
576
       area.setIdInVocabulary("SK");
577
       state.putNamedArea(area);
578
       faunaEuAreaVocabulary.addTerm(area);
579
       area = NamedArea.NewInstance(null, "San Marino", "SM");
580
       area.setUuid(UUID.randomUUID());
581
       area.setIdInVocabulary("SM");
582
       state.putNamedArea(area);
583
       faunaEuAreaVocabulary.addTerm(area);
584
       area = NamedArea.NewInstance("Incl. Imroz I. - Gökçeada, but not those in the Sea of Marmara",
585
               "European Turkey", "TR-TUE");
586
       area.setUuid(UUID.randomUUID());
587
       area.setIdInVocabulary("TR-TUE");
588
       state.putNamedArea(area);
589
       faunaEuAreaVocabulary.addTerm(area);
590
       area = NamedArea.NewInstance(null, "Ukraine", "UA");
591
       area.setUuid(UUID.randomUUID());
592
       area.setIdInVocabulary("UA");
593
       state.putNamedArea(area);
594
       faunaEuAreaVocabulary.addTerm(area);
595
       area = NamedArea.NewInstance(null, "Vatican City", "VA");
596
       area.setUuid(UUID.randomUUID());
597
       area.setIdInVocabulary("VA");
598
       state.putNamedArea(area);
599
       faunaEuAreaVocabulary.addTerm(area);
600
       area = NamedArea.NewInstance("Incl. Serbia, Kosovo, Voivodina, Montenegro", "Yugoslavia", "YU");
601
       area.setUuid(UUID.randomUUID());
602
       area.setIdInVocabulary("YU");
603
       state.putNamedArea(area);
604
       faunaEuAreaVocabulary.addTerm(area);
605
       area = NamedArea.NewInstance(null, "Afro-tropical region", "AFR");
606
       area.setUuid(UUID.randomUUID());
607
       area.setIdInVocabulary("AFR");
608
       state.putNamedArea(area);
609
       faunaEuAreaVocabulary.addTerm(area);
610
       area = NamedArea.NewInstance(null, "Australian region", "AUS");
611
       area.setUuid(UUID.randomUUID());
612
       area.setIdInVocabulary("AUS");
613
       state.putNamedArea(area);
614
       faunaEuAreaVocabulary.addTerm(area);
615
       area = NamedArea.NewInstance("East of the border line here defined", "East Palaearctic", "EPA");
616
       area.setUuid(UUID.randomUUID());
617
       area.setIdInVocabulary("EPA");
618
       state.putNamedArea(area);
619
       faunaEuAreaVocabulary.addTerm(area);
620
       area = NamedArea.NewInstance("Not including Sinai Peninsula", "North Africa", "NAF");
621
       area.setUuid(UUID.randomUUID());
622
       area.setIdInVocabulary("NAF");
623
       state.putNamedArea(area);
624
       faunaEuAreaVocabulary.addTerm(area);
625
       area = NamedArea.NewInstance(null, "Nearctic region", "NEA");
626
       area.setUuid(UUID.randomUUID());
627
       area.setIdInVocabulary("NEA");
628
       state.putNamedArea(area);
629
       faunaEuAreaVocabulary.addTerm(area);
630
       area = NamedArea.NewInstance(null, "Neotropical region", "NEO");
631
       area.setUuid(UUID.randomUUID());
632
       area.setIdInVocabulary("NEO");
633
       state.putNamedArea(area);
634
       faunaEuAreaVocabulary.addTerm(area);
635
       area = NamedArea.NewInstance("Asian Turkey, Caucasian Russian republics, Georgia, Armenia, Azerbaijan, "
636
               + "Lebanon, Syria, Israel, Jordan, Sinai Peninsula (Egypt), Arabian peninsula, Iran, Iraq",
637
               "Near East", "NRE");
638
       area.setUuid(UUID.randomUUID());
639
       area.setIdInVocabulary("NRE");
640
       state.putNamedArea(area);
641
       faunaEuAreaVocabulary.addTerm(area);
642
       area = NamedArea.NewInstance(null, "Oriental region", "ORR");
643
       area.setUuid(UUID.randomUUID());
644
       area.setIdInVocabulary("ORR");
645
       state.putNamedArea(area);
646
       faunaEuAreaVocabulary.addTerm(area);
647
       if (txStatus == null){
648
           txStatus = startTransaction();
649
       }
650
       //txStatus = startTransaction();
651
       faunaEuAreaVocabulary = getVocabularyService().save(faunaEuAreaVocabulary);
652
       logger.info("save voc");
653
       commitTransaction(txStatus);
654
       state.setAreaVoc(faunaEuAreaVocabulary);
655

    
656

    
657
    }
658

    
659
    private void commitTaxaAndDistribution(
660
			FaunaEuropaeaImportState state,
661
			Set<UUID> taxonUuids,
662
			Map<UUID, FaunaEuropaeaDistributionTaxon> fauEuTaxonMap,
663
			TransactionStatus txStatus) throws Exception {
664
		 List<TaxonBase> taxonList = prepareTaxaAndDistribution(getTaxonService().find(taxonUuids), fauEuTaxonMap, state);
665

    
666
		getTaxonService().save(taxonList);
667
		taxonList = null;
668
		taxonUuids = null;
669
		fauEuTaxonMap = null;
670
		commitTransaction(txStatus);
671

    
672
	}
673

    
674
	private List<TaxonBase> prepareTaxaAndDistribution(List<TaxonBase> taxonList, Map<UUID, FaunaEuropaeaDistributionTaxon> fauEuTaxonMap,  FaunaEuropaeaImportState state) throws Exception{
675

    
676
		Distribution newDistribution = null;
677
		NamedArea namedArea;
678
		PresenceAbsenceTerm presenceAbsenceStatus;
679
		FaunaEuropaeaDistributionTaxon fauEuHelperTaxon;
680
		UUID taxonUuid;
681
		TaxonDescription taxonDescription;
682
		Taxon taxon;
683
		for (TaxonBase<?> taxonBase : taxonList) {
684

    
685
			if (taxonBase != null) {
686

    
687
				if (taxonBase instanceof Taxon) {
688
					taxon = CdmBase.deproxy(taxonBase, Taxon.class);
689
				} else {
690
					logger.warn("TaxonBase (" + taxonBase.getId() + " is not of type Taxon but: "
691
							+ taxonBase.getClass().getSimpleName());
692
					continue;
693
				}
694

    
695

    
696
				Set<TaxonDescription> descriptionSet = taxon.getDescriptions();
697
				if (descriptionSet.size() > 0) {
698
					taxonDescription = descriptionSet.iterator().next();
699
				} else {
700
					taxonDescription = TaxonDescription.NewInstance();
701
					taxon.addDescription(taxonDescription);
702
				}
703

    
704
				taxonUuid = taxonBase.getUuid();
705
				fauEuHelperTaxon= fauEuTaxonMap.get(taxonUuid);
706

    
707
				for (FaunaEuropaeaDistribution fauEuHelperDistribution : fauEuHelperTaxon.getDistributions()) {
708
					namedArea = null;
709
					newDistribution = null;
710
					presenceAbsenceStatus = null;
711

    
712
					presenceAbsenceStatus = FaunaEuropaeaTransformer.occStatus2PresenceAbsence(fauEuHelperDistribution.getOccurrenceStatusId());
713

    
714

    
715
					namedArea = state.areaId2NamedArea(fauEuHelperDistribution, state);
716
					if (namedArea == null){
717
                        logger.warn("Area " + fauEuHelperDistribution.getAreaCode() + "not found in FE transformer");
718
                    }
719
					if (namedArea == null){
720
						//UUID areaUuid= FaunaEuropaeaTransformer.getUUIDByAreaAbbr(fauEuHelperDistribution.getAreaCode());
721
						//if (areaUuid == null){
722
							//logger.warn("Area " + fauEuHelperDistribution.getAreaCode() + "not found in FE transformer");
723
					//	}
724
//						namedArea = getNamedArea(state, areaUuid, fauEuHelperDistribution.getAreaName(), fauEuHelperDistribution.getAreaName(), fauEuHelperDistribution.getAreaCode(), null, null, state.getAreaVoc(), TermMatchMode.UUID_ABBREVLABEL);
725
//						namedArea.setIdInVocabulary(fauEuHelperDistribution.getAreaCode());
726
//					    state.putNamedArea(namedArea);
727
					}
728

    
729
					newDistribution = Distribution.NewInstance(namedArea, presenceAbsenceStatus);
730
					newDistribution.setCreated(null);
731

    
732
					taxonDescription.addElement(newDistribution);
733

    
734
				}
735
			}
736
		}
737

    
738
		taxonDescription= null;
739
		newDistribution = null;
740
		namedArea= null;
741
		return taxonList;
742
	}
743

    
744
    @Override
745
    protected boolean isIgnore(FaunaEuropaeaImportState state){
746
		return !state.getConfig().isDoOccurrence();
747
	}
748
}
(4-4/20)