Project

General

Profile

Download (29.2 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
 * @since 12.05.2009
40
 */
41
@Component
42
public class FaunaEuropaeaDistributionImport extends FaunaEuropaeaImportBase {
43
    private static final long serialVersionUID = 746146902707885655L;
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
		logger.warn("Checking for Distributions not yet implemented");
51
		return result;
52
	}
53

    
54
	@Override
55
	protected void doInvoke(FaunaEuropaeaImportState state) {
56
		/*
57
		logger.warn("Start distribution doInvoke");
58
		ProfilerController.memorySnapshot();
59
		*/
60

    
61
		if (!state.getConfig().isDoOccurrence()){
62
			return;
63
		}
64

    
65
		int limit = state.getConfig().getLimitSave();
66
		UUID noDataUuid;
67
		/* Taxon store for retrieving taxa from and saving taxa to CDM */
68
		List<TaxonBase> taxonList = null;
69
		/* UUID store as input for retrieving taxa from CDM */
70
		Set<UUID> taxonUuids = null;
71
		/* Store to hold helper objects */
72
		Map<UUID, FaunaEuropaeaDistributionTaxon> fauEuTaxonMap = null;
73

    
74

    
75
		TransactionStatus txStatus = null;
76

    
77
		//txStatus = startTransaction();
78
		/*PresenceAbsenceTerm noDataStatusTerm = PresenceAbsenceTerm.NewPresenceInstance("no data", "no data", "nod");
79
		noDataUuid = noDataStatusTerm.getUuid();
80
		TermVocabulary<PresenceAbsenceTerm> voc = getVocabularyService().find(30);
81
		HibernateProxyHelper.deproxy(voc, OrderedTermVocabulary.class);
82
		//voc.addTerm(noDataStatusTerm);
83
	//	getVocabularyService().saveOrUpdate(voc);
84
		getTermService().save(noDataStatusTerm);*/
85
		//commitTransaction(txStatus);
86

    
87
	//	FaunaEuropaeaTransformer.setUUIDs(noDataUuid);
88
		logger.info("create termvoc");
89
		createTermVocabulary(txStatus, state);
90

    
91
		FaunaEuropaeaImportConfigurator fauEuConfig = state.getConfig();
92
		Source source = fauEuConfig.getSource();
93

    
94
        int i = 0;
95

    
96
		String selectCount =
97
			" SELECT count(*) ";
98

    
99
		String selectColumns =
100
			" SELECT distribution.*, Area.*, Taxon.UUID ";
101

    
102
		String fromClause =
103
			" FROM distribution INNER JOIN " +
104
            " Area ON distribution.dis_ara_id = Area.ara_id INNER JOIN " +
105
            " Taxon ON distribution.dis_tax_id = Taxon.TAX_ID ";
106
		String orderBy = " ORDER BY distribution.dis_tax_id";
107

    
108
		String countQuery =
109
			selectCount + fromClause;
110

    
111
		String selectQuery =
112
			selectColumns + fromClause + orderBy;
113

    
114
		if(logger.isInfoEnabled()) { logger.info("Start making distributions..."); }
115

    
116
		try {
117
			ResultSet rs = source.getResultSet(countQuery);
118
			rs.next();
119
			int count = rs.getInt(1);
120

    
121
			rs = source.getResultSet(selectQuery);
122

    
123
			if (logger.isInfoEnabled()) {
124
				logger.info("Number of rows: " + count);
125
				logger.info("Count Query: " + countQuery);
126
				logger.info("Select Query: " + selectQuery);
127
			}
128

    
129
			//int taxonId;
130

    
131
			while (rs.next()) {
132
				if ((i++ % limit) == 0) {
133

    
134
					txStatus = startTransaction();
135
					taxonUuids = new HashSet<>(limit);
136
					fauEuTaxonMap = new HashMap<>(limit);
137

    
138
					if(logger.isInfoEnabled()) {
139
						logger.info("i = " + i + " - Distribution import transaction started");
140
					}
141
				}
142

    
143
				//taxonId = rs.getInt("dis_tax_id");
144
				int disId = rs.getInt("dis_id");
145
				int occStatusId = rs.getInt("dis_present");
146
				int areaId = rs.getInt("ara_id");
147
				String areaName = rs.getString("ara_name");
148
				String areaCode = rs.getString("ara_code");
149
				int extraLimital = rs.getInt("ara_extralimital");
150
				UUID currentTaxonUuid = null;
151
				if (resultSetHasColumn(rs,"UUID")){
152
					currentTaxonUuid = UUID.fromString(rs.getString("UUID"));
153
				} else {
154
					currentTaxonUuid = UUID.randomUUID();
155
				}
156

    
157
				FaunaEuropaeaDistribution fauEuDistribution = new FaunaEuropaeaDistribution();
158
				fauEuDistribution.setDistributionId(disId);
159
				fauEuDistribution.setOccurrenceStatusId(occStatusId);
160
				fauEuDistribution.setAreaId(areaId);
161
				fauEuDistribution.setAreaName(areaName);
162
				fauEuDistribution.setAreaCode(areaCode);
163
				fauEuDistribution.setExtraLimital(extraLimital);
164

    
165
				if (!taxonUuids.contains(currentTaxonUuid)) {
166
					taxonUuids.add(currentTaxonUuid);
167
					FaunaEuropaeaDistributionTaxon fauEuDistributionTaxon =
168
						new FaunaEuropaeaDistributionTaxon(currentTaxonUuid);
169
					fauEuTaxonMap.put(currentTaxonUuid, fauEuDistributionTaxon);
170
					fauEuDistributionTaxon = null;
171
				} else {
172
					if (logger.isTraceEnabled()) {
173
						logger.trace("Taxon (" + currentTaxonUuid + ") already stored.");
174
						continue;
175
					}
176
				}
177

    
178
				fauEuTaxonMap.get(currentTaxonUuid).addDistribution(fauEuDistribution);
179

    
180
				if (((i % limit) == 0 && i != 1 ) || i == count ) {
181

    
182
					try {
183
						commitTaxaAndDistribution(state, taxonUuids, fauEuTaxonMap, txStatus);
184
						taxonUuids = null;
185
						taxonList = null;
186
						fauEuTaxonMap = null;
187

    
188
					} catch (Exception e) {
189
						logger.error("Commit of taxa and distributions failed" + e.getMessage());
190
						e.printStackTrace();
191
					}
192

    
193
					if(logger.isInfoEnabled()) { logger.info("i = " + i + " - Transaction committed");}
194
				}
195

    
196

    
197
			}
198
			if (taxonUuids != null){
199
				try {
200
					commitTaxaAndDistribution(state, taxonUuids, fauEuTaxonMap, txStatus);
201
					taxonUuids = null;
202
					taxonList = null;
203
					fauEuTaxonMap = null;
204
				} catch (Exception e) {
205
					logger.error("Commit of taxa and distributions failed");
206
					logger.error(e.getMessage());
207
					e.printStackTrace();
208
				}
209
			}
210
			rs = null;
211
		} catch (SQLException e) {
212
			logger.error("SQLException:" +  e);
213
			state.setUnsuccessfull();
214
		}
215

    
216
		if(logger.isInfoEnabled()) { logger.info("End making distributions..."); }
217

    
218

    
219
		return;
220
	}
221

    
222
	/**
223
     *
224
     */
225
    private void createTermVocabulary(TransactionStatus txStatus, FaunaEuropaeaImportState state) {
226
       TermVocabulary<NamedArea> faunaEuAreaVocabulary = TermVocabulary.NewInstance(TermType.NamedArea, "Areas for Fauna Europaea distribution data", "FE areas", "FE", null);
227
       faunaEuAreaVocabulary.setUuid(FaunaEuropaeaTransformer.uuidFauEuArea);
228

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

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

    
638
    private void commitTaxaAndDistribution(
639
			FaunaEuropaeaImportState state,
640
			Set<UUID> taxonUuids,
641
			Map<UUID, FaunaEuropaeaDistributionTaxon> fauEuTaxonMap,
642
			TransactionStatus txStatus) throws Exception {
643

    
644
        List<TaxonBase> taxonList = prepareTaxaAndDistribution(getTaxonService().find(taxonUuids), fauEuTaxonMap, state);
645

    
646
		getTaxonService().save(taxonList);
647
		taxonList = null;
648
		taxonUuids = null;
649
		fauEuTaxonMap = null;
650
		commitTransaction(txStatus);
651

    
652
	}
653

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

    
656
		Distribution newDistribution = null;
657
		NamedArea namedArea;
658
		PresenceAbsenceTerm presenceAbsenceStatus;
659
		FaunaEuropaeaDistributionTaxon fauEuHelperTaxon;
660
		UUID taxonUuid;
661
		TaxonDescription taxonDescription;
662
		Taxon taxon;
663
		for (TaxonBase<?> taxonBase : taxonList) {
664

    
665
			if (taxonBase != null) {
666

    
667
				if (taxonBase instanceof Taxon) {
668
					taxon = CdmBase.deproxy(taxonBase, Taxon.class);
669
				} else {
670
					logger.warn("TaxonBase (" + taxonBase.getId() + " is not of type Taxon but: "
671
							+ taxonBase.getClass().getSimpleName());
672
					continue;
673
				}
674

    
675
				Set<TaxonDescription> descriptionSet = taxon.getDescriptions();
676
				if (descriptionSet.size() > 0) {
677
					taxonDescription = descriptionSet.iterator().next();
678
				} else {
679
					taxonDescription = TaxonDescription.NewInstance();
680
					taxon.addDescription(taxonDescription);
681
					taxonDescription.setDefault(true);
682
					//addOriginalSource(taxonDescription, null, "Default Import", state.getConfig().getSourceReference());
683
				}
684

    
685
				taxonUuid = taxonBase.getUuid();
686
				fauEuHelperTaxon= fauEuTaxonMap.get(taxonUuid);
687

    
688
				for (FaunaEuropaeaDistribution fauEuHelperDistribution : fauEuHelperTaxon.getDistributions()) {
689
					namedArea = null;
690
					newDistribution = null;
691
					presenceAbsenceStatus = null;
692

    
693
					presenceAbsenceStatus = FaunaEuropaeaTransformer.occStatus2PresenceAbsence(fauEuHelperDistribution.getOccurrenceStatusId());
694

    
695

    
696
					namedArea = state.areaId2NamedArea(fauEuHelperDistribution, state);
697
					if (namedArea == null){
698
                        logger.warn("Area " + fauEuHelperDistribution.getAreaCode() + "not found in FE transformer");
699
                    }
700
					if (namedArea == null){
701
						//UUID areaUuid= FaunaEuropaeaTransformer.getUUIDByAreaAbbr(fauEuHelperDistribution.getAreaCode());
702
						//if (areaUuid == null){
703
							//logger.warn("Area " + fauEuHelperDistribution.getAreaCode() + "not found in FE transformer");
704
					//	}
705
//						namedArea = getNamedArea(state, areaUuid, fauEuHelperDistribution.getAreaName(), fauEuHelperDistribution.getAreaName(), fauEuHelperDistribution.getAreaCode(), null, null, state.getAreaVoc(), TermMatchMode.UUID_ABBREVLABEL);
706
//						namedArea.setIdInVocabulary(fauEuHelperDistribution.getAreaCode());
707
//					    state.putNamedArea(namedArea);
708
					}
709

    
710
					newDistribution = Distribution.NewInstance(namedArea, presenceAbsenceStatus);
711
					newDistribution.setCreated(null);
712

    
713
					taxonDescription.addElement(newDistribution);
714

    
715
				}
716
			}
717
		}
718

    
719
		taxonDescription= null;
720
		newDistribution = null;
721
		namedArea= null;
722
		return taxonList;
723
	}
724

    
725
    @Override
726
    protected boolean isIgnore(FaunaEuropaeaImportState state){
727
		return !state.getConfig().isDoOccurrence();
728
	}
729
}
(4-4/20)