Project

General

Profile

Download (23.8 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.berlinModel.in;
11

    
12
import java.net.URI;
13
import java.sql.ResultSet;
14
import java.sql.SQLException;
15
import java.util.HashMap;
16
import java.util.Map;
17
import java.util.UUID;
18

    
19
import org.apache.commons.lang.StringUtils;
20
import org.apache.log4j.Logger;
21
import org.springframework.stereotype.Component;
22
import org.springframework.transaction.TransactionStatus;
23

    
24
import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer;
25
import eu.etaxonomy.cdm.io.berlinModel.in.validation.BerlinModelAreaImportValidator;
26
import eu.etaxonomy.cdm.io.common.IOValidator;
27
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
28
import eu.etaxonomy.cdm.io.common.Source;
29
import eu.etaxonomy.cdm.model.common.Annotation;
30
import eu.etaxonomy.cdm.model.common.AnnotationType;
31
import eu.etaxonomy.cdm.model.common.CdmBase;
32
import eu.etaxonomy.cdm.model.common.ExtensionType;
33
import eu.etaxonomy.cdm.model.common.Language;
34
import eu.etaxonomy.cdm.model.common.Marker;
35
import eu.etaxonomy.cdm.model.common.MarkerType;
36
import eu.etaxonomy.cdm.model.location.NamedArea;
37
import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
38
import eu.etaxonomy.cdm.model.location.NamedAreaType;
39
import eu.etaxonomy.cdm.model.reference.OriginalSourceType;
40
import eu.etaxonomy.cdm.model.reference.Reference;
41
import eu.etaxonomy.cdm.model.term.OrderedTermVocabulary;
42
import eu.etaxonomy.cdm.model.term.TermType;
43
import eu.etaxonomy.cdm.model.term.TermVocabulary;
44

    
45

    
46
/**
47
 * @author a.mueller
48
 * @since 20.03.2008
49
 */
50
@Component
51
public class BerlinModelAreaImport  extends BerlinModelImportBase {
52

    
53
    private static final long serialVersionUID = -2810052908318645219L;
54
    private static final Logger logger = Logger.getLogger(BerlinModelAreaImport.class);
55

    
56
	public static final String NAMESPACE = "emArea";
57

    
58
	private static final String pluralString = "areas";
59
	private static final String dbTableName = "emArea";  //??
60

    
61
	public BerlinModelAreaImport(){
62
		super(dbTableName, pluralString);
63
	}
64

    
65
	@Override
66
	protected String getIdQuery(BerlinModelImportState state) {
67
//		String result =
68
//		          " SELECT AreaId "
69
//		        + " FROM " + getTableName();
70
//		if (state.getConfig().isEuroMed()){
71
//		    result += " WHERE AreaID NOT IN (1, 21, 650, 653, 1718, 654, 646, 647) ";  //#3986
72
//		}
73
//		return result;
74
	    return null; //not relevant as we have no partitioning here
75
	}
76

    
77
	@Override
78
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
79
//		String strQuery =
80
//		          " SELECT * "
81
//		        + " FROM emArea a "
82
//                + " WHERE (a.AreaId IN (" + ID_LIST_TOKEN + ")  )"
83
//		        + " ORDER BY a.AreaId "
84
//                ;
85
//		return strQuery;
86
	    return null;  //not relevant as we have no partitioning here
87
	}
88

    
89
	private Map<Integer, NamedArea> euroMedAreas = new HashMap<>();
90

    
91

    
92
    /**
93
     * {@inheritDoc}
94
     */
95
    @Override
96
    public boolean doPartition(@SuppressWarnings("rawtypes") ResultSetPartitioner partitioner, BerlinModelImportState state) {
97
        // not relevant
98
        return true;
99
    }
100

    
101
    @Override
102
    public void doInvoke(BerlinModelImportState state)  {
103
        TermVocabulary<?> voc = getVocabularyService().find(BerlinModelTransformer.uuidVocEuroMedAreas);
104
        if (voc == null){
105
            try {
106
                createEuroMedAreas(state);
107
                createCaucasusAreas(state);
108
            } catch (SQLException e) {
109
                logger.warn("Exception when creating areas: " + e.getMessage());
110
                e.printStackTrace();
111
            }
112
        }
113
        return;
114
    }
115

    
116

    
117

    
118
    private TermVocabulary<NamedArea> createEuroMedAreas(BerlinModelImportState state) throws SQLException {
119

    
120
	    logger.warn("Start creating E+M areas");
121
		Source source = state.getConfig().getSource();
122
		Reference sourceReference = state.getConfig().getSourceReference();
123

    
124
		TransactionStatus txStatus = this.startTransaction();
125

    
126
		sourceReference = getSourceReference(sourceReference);
127

    
128
		TermVocabulary<NamedArea> euroMedAreasVoc = makeEmptyEuroMedVocabulary();
129

    
130
		MarkerType eurMarkerType = getMarkerType(state, BerlinModelTransformer.uuidEurArea, "eur", "eur Area", "eur", getEuroMedMarkerTypeVoc(state));
131
		MarkerType euroMedAreaMarkerType = getMarkerType(state, BerlinModelTransformer.uuidEurMedArea, "EuroMedArea", "EuroMedArea", "EuroMedArea", getEuroMedMarkerTypeVoc(state));
132
		ExtensionType isoCodeExtType = getExtensionType(state, BerlinModelTransformer.uuidIsoCode, "IsoCode", "IsoCode", "iso");
133
		ExtensionType tdwgCodeExtType = getExtensionType(state, BerlinModelTransformer.uuidTdwgAreaCode, "TDWG code", "TDWG Area code", "tdwg");
134
		ExtensionType mclCodeExtType = getExtensionType(state, BerlinModelTransformer.uuidMclCode, "MCL code", "MedCheckList code", "mcl");
135
		NamedAreaLevel areaLevelTop = getNamedAreaLevel(state, BerlinModelTransformer.uuidEuroMedAreaLevelTop, "Euro+Med top area level", "Euro+Med top area level. This level is only to be used for the area representing the complete Euro+Med area", "e+m top", null);
136
		NamedAreaLevel areaLevelEm1 = getNamedAreaLevel(state, BerlinModelTransformer.uuidEuroMedAreaLevelFirst, "Euro+Med 1. area level", "Euro+Med 1. area level", "e+m 1.", null);
137
		NamedAreaLevel areaLevelEm2 = getNamedAreaLevel(state, BerlinModelTransformer.uuidEuroMedAreaLevelSecond, "Euro+Med 2. area level", "Euro+Med 2. area level", "Euro+Med 1. area level", null);
138

    
139

    
140
		String sql = "SELECT * , CASE WHEN EMCode = 'EM' THEN 'a' ELSE 'b' END as isEM " +
141
				" FROM emArea " +
142
				" WHERE areaId not IN (1, 14, 20, 21, 33, 646, 647, 653, 654, 1718) " +
143
				" ORDER BY isEM, EMCode";
144
		ResultSet rs = source.getResultSet(sql);
145

    
146
		NamedArea euroMedArea = null;
147
		NamedArea lastLevel1Area = null;
148

    
149
		//euroMedArea (EMCode = 'EM')
150
		rs.next();
151
		euroMedArea = makeSingleEuroMedArea(rs, eurMarkerType, euroMedAreaMarkerType, isoCodeExtType, tdwgCodeExtType, mclCodeExtType,
152
				areaLevelTop, areaLevelEm1 , areaLevelEm2, sourceReference, euroMedArea, lastLevel1Area);
153
		euroMedAreasVoc.addTerm(euroMedArea);
154

    
155
		//all other areas
156
		while (rs.next()){
157
			NamedArea newArea = makeSingleEuroMedArea(rs, eurMarkerType, euroMedAreaMarkerType,
158
					isoCodeExtType, tdwgCodeExtType, mclCodeExtType,
159
					areaLevelTop, areaLevelEm1 , areaLevelEm2, sourceReference, euroMedArea, lastLevel1Area);
160
			if (newArea != null){
161
    			euroMedAreasVoc.addTerm(newArea);
162
    			if (newArea.getPartOf().equals(euroMedArea)){
163
    				lastLevel1Area = newArea;
164
    			}
165
			}
166
		}
167
		emAreaFinetuning(euroMedAreasVoc, areaLevelEm2);
168

    
169
		markAreasAsHidden(state, euroMedAreasVoc);
170

    
171
	    getVocabularyService().saveOrUpdate(euroMedAreasVoc);
172

    
173
		try {
174
            commitTransaction(txStatus);
175
        } catch (Exception e) {
176
             e.printStackTrace();
177
             logger.error("An exception occurred when trying to commit E+M Areas");
178
        }
179
		logger.warn("Created E+M areas");
180

    
181
		return euroMedAreasVoc;
182
	}
183

    
184
	/**
185
     * @param areaLevelEm2
186
	 * @param euroMedAreas2
187
     */
188
    private void emAreaFinetuning(TermVocabulary<NamedArea> euroMedAreas, NamedAreaLevel areaLevelEm2) {
189
        //CZ
190
        NamedArea oldArea = euroMedAreas.getTermByIdInvocabulary("Cz");
191
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Cs"), areaLevelEm2);
192
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sk"), areaLevelEm2);
193

    
194
        //Ju
195
        oldArea = euroMedAreas.getTermByIdInvocabulary("Ju");
196
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("BH"), areaLevelEm2);
197
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Cg"), areaLevelEm2);
198
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Ct"), areaLevelEm2);
199
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Mk"), areaLevelEm2);
200
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sl"), areaLevelEm2);
201
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sr"), areaLevelEm2);
202
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Yu(K)"), areaLevelEm2);
203
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("SM"), areaLevelEm2);
204

    
205
        //IJ
206
        oldArea = euroMedAreas.getTermByIdInvocabulary("IJ");
207
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Ir"), areaLevelEm2);
208
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Jo"), areaLevelEm2);
209

    
210
        //LS
211
        oldArea = euroMedAreas.getTermByIdInvocabulary("LS");
212
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Le"), areaLevelEm2);
213
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sy"), areaLevelEm2);
214

    
215
    }
216

    
217
    //5.Mark areas to be hidden #3979 .5
218
    private void markAreasAsHidden(BerlinModelImportState state, TermVocabulary<NamedArea> euroMedAreasVoc) {
219

    
220
        try {
221

    
222
            MarkerType hiddenAreaMarkerType = getMarkerType(state, BerlinModelTransformer.uuidHiddenArea,
223
                    "Hidden Area","Used to hide distributions for the named areas in publications", null, getEuroMedMarkerTypeVoc(state));
224

    
225
            //Add hidden area marker to Rs(C) and Rs(N)
226
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs);
227
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_B);
228
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_C);
229
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_E);
230
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_N);
231
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_K);
232
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_W);
233
        } catch (Exception e) {
234
            e.printStackTrace();
235
            logger.error("Exception in markAreasAsHidden: " + e.getMessage());
236
        }
237

    
238
    }
239

    
240
    private void hideArea(TermVocabulary<NamedArea> euroMedAreasVoc, MarkerType hiddenAreaMarkerType, UUID areaUuid) {
241
        for (NamedArea namedArea : euroMedAreasVoc){
242
            if (namedArea.getUuid().equals(areaUuid)){
243
                namedArea.addMarker(Marker.NewInstance(hiddenAreaMarkerType, true));
244
                return;
245
            }
246
        }
247
    }
248

    
249
    /**
250
     * @param oldArea
251
     * @param namedArea
252
     * @param areaLevelEm2
253
     */
254
    private void makeSubterm(NamedArea oldArea, NamedArea namedArea, NamedAreaLevel areaLevelEm2) {
255
        namedArea.setLevel(areaLevelEm2);
256
        namedArea.setPartOf(oldArea);
257
    }
258

    
259

    
260
	/**
261
	 * @param eurMarkerType
262
	 * @param euroMedAreaMarkerType
263
	 * @param isoCodeExtType
264
	 * @param tdwgCodeExtType
265
	 * @param mclCodeExtType
266
	 * @param rs
267
	 * @param areaLevelEm2
268
	 * @param areaLevelEm1
269
	 * @param areaLevelTop
270
	 * @throws SQLException
271
	 */
272
	private NamedArea makeSingleEuroMedArea(ResultSet rs, MarkerType eurMarkerType,
273
			MarkerType euroMedAreaMarkerType, ExtensionType isoCodeExtType,
274
			ExtensionType tdwgCodeExtType, ExtensionType mclCodeExtType,
275
			NamedAreaLevel areaLevelTop, NamedAreaLevel areaLevelEm1, NamedAreaLevel areaLevelEm2,
276
			Reference sourceReference, NamedArea euroMedArea, NamedArea level1Area) throws SQLException {
277

    
278
	    Integer areaId = rs.getInt("AreaId");
279
		String emCode = nullSafeTrim(rs.getString("EMCode"));
280
		String isoCode = nullSafeTrim(rs.getString("ISOCode"));
281
		String tdwgCode = nullSafeTrim(rs.getString("TDWGCode"));
282
		String unit = nullSafeTrim(rs.getString("Unit"));
283
//				      ,[Status]
284
//				      ,[OutputOrder]
285
		boolean eurMarker = rs.getBoolean("eur");
286
		boolean euroMedAreaMarker = rs.getBoolean("EuroMedArea");
287
		String notes = nullSafeTrim(rs.getString("Notes"));
288
		String mclCode = nullSafeTrim(rs.getString("MCLCode"));
289
		String geoSearch = nullSafeTrim(rs.getString("NameForGeoSearch"));
290

    
291

    
292
		if (isBlank(emCode)){
293
			emCode = unit;
294
		}
295

    
296
		//uuid
297
		UUID uuid = BerlinModelTransformer.getEMAreaUuid(emCode);
298
		NamedArea area = (NamedArea)getTermService().find(uuid);
299
		if (area == null){
300
			//label
301
			area = NamedArea.NewInstance(geoSearch, unit, emCode);
302
			if (uuid != null){
303
				area.setUuid(uuid);
304
			}else{
305
			    if (areaId == 211 || areaId == 213){  //Additional Azores and Canary Is. area are merged into primary area, see also area.addSource part below
306
			        return null;
307
			    }
308
				logger.warn("Uuid for emCode could not be defined: " + emCode);
309
			}
310
		}
311

    
312

    
313
		//code
314
		area.setIdInVocabulary(emCode);
315
		//notes
316
		if (StringUtils.isNotEmpty(notes)){
317
			area.addAnnotation(Annotation.NewInstance(notes, AnnotationType.EDITORIAL(), Language.DEFAULT()));
318
		}
319
		//markers
320
		area.addMarker(Marker.NewInstance(eurMarkerType, eurMarker));
321
		area.addMarker(Marker.NewInstance(euroMedAreaMarkerType, euroMedAreaMarker));
322

    
323
		//extensions
324
		if (isNotBlank(isoCode)){
325
			area.addExtension(isoCode, isoCodeExtType);
326
		}
327
		if (isNotBlank(tdwgCode)){
328
			area.addExtension(tdwgCode, tdwgCodeExtType);
329
		}
330
		if (isNotBlank(mclCode)){
331
			area.addExtension(mclCode, mclCodeExtType);
332
		}
333

    
334
		//type
335
		area.setType(NamedAreaType.ADMINISTRATION_AREA());
336

    
337
		//source
338
		area.addSource(OriginalSourceType.Import, String.valueOf(areaId), NAMESPACE, sourceReference, null);
339
		//add duplicate area ids for canary
340
		if (areaId == 624){ //Canary Is.
341
		    area.addSource(OriginalSourceType.Import, String.valueOf(213), NAMESPACE, sourceReference, null);
342
		}
343
		if (areaId == 210){//Azores
344
            area.addSource(OriginalSourceType.Import, String.valueOf(211), NAMESPACE, sourceReference, null);
345
        }
346

    
347
		//parent
348
		if (euroMedArea != null){
349
			if (emCode.contains("(") && !emCode.startsWith("Yu(K)")){
350
				area.setPartOf(level1Area);
351
				area.setLevel(areaLevelEm2);
352
			}else{
353
				area.setPartOf(euroMedArea);
354
				area.setLevel(areaLevelEm1);
355
			}
356
		}else{
357
			area.setLevel(areaLevelTop);
358
		}
359
		this.euroMedAreas.put(areaId, area);
360

    
361
		//save
362
		getTermService().saveOrUpdate(area);
363

    
364
		return area;
365
	}
366

    
367
	private String nullSafeTrim(String string) {
368
		if (string == null){
369
			return null;
370
		}else{
371
			return string.trim();
372
		}
373
	}
374

    
375
	/**
376
	 *
377
	 */
378
	private OrderedTermVocabulary<NamedArea> makeEmptyEuroMedVocabulary() {
379
		TermType type = TermType.NamedArea;
380
		String description = "Euro+Med area vocabulary";
381
		String label = "E+M areas";
382
		String abbrev = null;
383
		URI termSourceUri = null;
384
		OrderedTermVocabulary<NamedArea> result = OrderedTermVocabulary.NewInstance(type, description, label, abbrev, termSourceUri);
385

    
386
		result.setUuid(BerlinModelTransformer.uuidVocEuroMedAreas);
387
		getVocabularyService().save(result);
388
		return result;
389
	}
390

    
391

    
392
    /**
393
     * @param state
394
     */
395
    private void createCaucasusAreas(BerlinModelImportState state) {
396
        OrderedTermVocabulary<NamedArea> voc = makeEmptyCaucasusVocabulary(state);
397
        NamedArea last = null;
398
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc1, "Western Ciscaucasia","WCC","1","");
399
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc1a, "Azov-Kuban","Az.-Kub.","1","a");
400
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc1b, "Western Stavropol","W. Stavr.","1","b");
401
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc2, "Eastern Ciscaucasia","ECC","2","");
402
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc2a, "Eastern Stavropol","E. Stavr.","2","a");
403
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc2b, "Terek-Kuma","Ter.-Kuma ","2","b");
404
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc2c, "Terek-Sulak","Ter.-Sul.","2","c");
405
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc3, "Western Caucasus","WC","3","");
406
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc3a, "Adagum-Pshish","Adag.-Pshish","3","a");
407
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc3b, "Belaja-Laba","Bel.-Laba","3","b");
408
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc3c, "Urup-Teberda","Urup-Teb.","3","c");
409
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc3d, "Upper Kuban","U. Kub.","3","d");
410
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc4, "Central Caucasus","CC","4","");
411
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc4a, "Upper Kuma","U. Kuma","4","a");
412
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc4b, "Malka","Malka","4","b");
413
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc4c, "Upper Terek","U. Ter.","4","c");
414
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc5, "Eastern Caucasus","EC","5","");
415
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc5a, "Assa-Argun","Assa-Arg.","5","a");
416
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc5b, "Upper Sulak","U. Sulak","5","b");
417
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc5c, "Manas-Samur","Man.-Samur","5","c");
418
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc5d, "Kubinsky","Kubin.","5","d");
419
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc6, "North-Western Transcaucasia","NWTC","6","");
420
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc6a, "Anapa-Gelendzhik","Anapa-Gel.","6","a");
421
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc6b, "Pshada-Dzubga","Pshada-Dzhubga ","6","b");
422
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc7, "Western Transcaucasia","WTC","7","");
423
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc7a, "Tuapse-Adler","Tuap.-Adl.","7","a");
424
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc7b, "Abkhasia","Abkh.","7","b");
425
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc7c, "Inguri-Rioni","Ing.-Rioni","7","c");
426
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc7d, "Rioni-Kvirili","Rioni-Kvir.","7","d");
427
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc7e, "Adzharia","Adzh.","7","e");
428
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc8, "Central Transcaucasia","CTC","8","");
429
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc8a, "Karthalinia-South Ossetia","Kart.-S. Oss.","8","a");
430
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc8b, "Trialetia-Lower Karthalinia","Trial.-L. Kart.","8","b");
431
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc8c, "Lori","Lori","8","c");
432
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc9, "Eastern Transcaucasia","ETC","9","");
433
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc9a, "Alazan-Agrichay","Alaz.-Agrich.","9","a");
434
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc9b, "Shirvan","Shirv.","9","b");
435
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc9c, "Iori-Sheki","Iori-Sheki","9","c");
436
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc9d, "Murghuz-Murovdagh","Murgh.-Murovd.","9","d");
437
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc9e, "Lower Kura","L. Kura","9","e");
438
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc9f, "Karabagh","Karab.","9","f");
439
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc10, "South-Western Transcaucasia","SWTC","10","");
440
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc10a, "Meskhetia","Meskh.","10","a");
441
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc10b, "Dzhavachetia-Upper Akhurjan","Dzhav.-U. Akh.","10","b");
442
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc10c, "Aragatz","Arag.","10","c");
443
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc11, "Southern Transcaucasia","STC","11","");
444
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc11a, "Erevan","Erev.","11","a");
445
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc11b, "Sevan","Sevan","11","b");
446
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc11c, "Daraleghiz","Dar.","11","c");
447
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc11d, "Nakhitshevan","Nakh.","11","d");
448
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc11e, "Zangezur","Zang.","11","e");
449
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc11f, "Megri-Zangelan","Megri-Zan.","11","f");
450
        last = makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc11g, "Southern Karabagh","S. Karab.","11","g");
451
        makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc12, "Talysch","T","12","");
452
    }
453

    
454
	/**
455
     * @param state
456
	 * @param voc
457
     * @param uuidCauc1
458
     * @param string
459
     * @param string2
460
     * @param string3
461
     * @param string4
462
     * @return
463
     */
464
    private NamedArea makeSingleArea(BerlinModelImportState state, OrderedTermVocabulary<NamedArea> voc, NamedArea last,
465
            UUID uuid, String label, String labelAbbrev,
466
            String mainLevel, String subLevel) {
467

    
468
        NamedArea namedArea = NamedArea.NewInstance(label, label, labelAbbrev);
469
        namedArea.setUuid(uuid);
470
        if (isBlank(subLevel)){
471
            namedArea.setLevel(getNamedAreaLevel(state, BerlinModelTransformer.uuidCaucasusAreaLevelFirst, "Caucasus main areas", "Caucasus main areas", "Cauc. I", null));
472
        }else{
473
            namedArea.setLevel(getNamedAreaLevel(state, BerlinModelTransformer.uuidCaucasusAreaLevelSecond, "Caucasus sub areas", "Caucasus sub areas", "Cauc. II", null));
474
            if(last.getPartOf() != null){
475
                namedArea.setPartOf(last.getPartOf());
476
            }else{
477
                namedArea.setPartOf(last);
478
            }
479
        }
480
        String idInVoc = mainLevel + subLevel;
481
        namedArea.setIdInVocabulary(idInVoc);
482
        voc.addTerm(namedArea);
483
        return namedArea;
484
    }
485

    
486
    /**
487
     * @param state
488
     */
489
    private OrderedTermVocabulary<NamedArea> makeEmptyCaucasusVocabulary(BerlinModelImportState state) {
490
        TermType type = TermType.NamedArea;
491
        String description = "E+M Caucasus area vocabulary";
492
        String label = "E+M Caucasus Areas";
493
        String abbrev = null;
494
        URI termSourceUri = null;
495
        OrderedTermVocabulary<NamedArea> result = OrderedTermVocabulary.NewInstance(type, description, label, abbrev, termSourceUri);
496
        result.setUuid(BerlinModelTransformer.uuidVocCaucasusAreas);
497
        getVocabularyService().save(result);
498
        return result;
499
    }
500

    
501
    @Override
502
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, BerlinModelImportState state) {
503
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
504
		return result;
505
	}
506

    
507
	@Override
508
	protected boolean doCheck(BerlinModelImportState state){
509
		IOValidator<BerlinModelImportState> validator = new BerlinModelAreaImportValidator();
510
		return validator.validate(state);
511
	}
512

    
513

    
514
	@Override
515
	protected boolean isIgnore(BerlinModelImportState state){
516
		if (state.getConfig().isDoNamedAreas()){
517
		    return false;
518
		}else if (! (state.getConfig().isDoOccurrence() || state.getConfig().isDoCommonNames())){
519
			return true;
520
		}else{
521
			if (!this.checkSqlServerColumnExists(state.getConfig().getSource(), "emArea", "AreaId")){
522
				logger.error("emArea table or AreaId column do not exist. Must ignore area import");
523
				return true;
524
			}else{
525
			    TermVocabulary<?> voc = getVocabularyService().find(BerlinModelTransformer.uuidVocEuroMedAreas);
526
		        return voc != null;
527
			}
528
		}
529
	}
530

    
531

    
532
}
(1-1/22)