Project

General

Profile

Download (23.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.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.common.OrderedTermVocabulary;
37
import eu.etaxonomy.cdm.model.common.OriginalSourceType;
38
import eu.etaxonomy.cdm.model.common.TermType;
39
import eu.etaxonomy.cdm.model.common.TermVocabulary;
40
import eu.etaxonomy.cdm.model.location.NamedArea;
41
import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
42
import eu.etaxonomy.cdm.model.location.NamedAreaType;
43
import eu.etaxonomy.cdm.model.reference.Reference;
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
	}
75

    
76
	@Override
77
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
78
		String strQuery =
79
		          " SELECT * "
80
		        + " FROM emArea a "
81
                + " WHERE (a.AreaId IN (" + ID_LIST_TOKEN + ")  )"
82
		        + " ORDER BY a.AreaId "
83
                ;
84
		return strQuery;
85
	}
86

    
87
	private Map<Integer, NamedArea> euroMedAreas = new HashMap<>();
88

    
89

    
90
    @Override
91
    public boolean doPartition(@SuppressWarnings("rawtypes") ResultSetPartitioner partitioner, BerlinModelImportState state)  {
92
        TermVocabulary<?> voc = getVocabularyService().find(BerlinModelTransformer.uuidVocEuroMedAreas);
93
        if (voc == null){
94
            try {
95
                createEuroMedAreas(state);
96
                createCaucasusAreas(state);
97
            } catch (SQLException e) {
98
                logger.warn("Exception when creating areas: " + e.getMessage());
99
                e.printStackTrace();
100
            }
101
        }
102
        return true;
103
    }
104

    
105

    
106

    
107
    private TermVocabulary<NamedArea> createEuroMedAreas(BerlinModelImportState state) throws SQLException {
108

    
109
	    logger.warn("Start creating E+M areas");
110
		Source source = state.getConfig().getSource();
111
		Reference sourceReference = state.getConfig().getSourceReference();
112

    
113
		TransactionStatus txStatus = this.startTransaction();
114

    
115
		sourceReference = getSourceReference(sourceReference);
116

    
117
		TermVocabulary<NamedArea> euroMedAreasVoc = makeEmptyEuroMedVocabulary();
118

    
119
		MarkerType eurMarkerType = getMarkerType(state, BerlinModelTransformer.uuidEurArea, "eur", "eur Area", "eur", getEuroMedMarkerTypeVoc());
120
		MarkerType euroMedAreaMarkerType = getMarkerType(state, BerlinModelTransformer.uuidEurMedArea, "EuroMedArea", "EuroMedArea", "EuroMedArea", getEuroMedMarkerTypeVoc());
121
		ExtensionType isoCodeExtType = getExtensionType(state, BerlinModelTransformer.uuidIsoCode, "IsoCode", "IsoCode", "iso");
122
		ExtensionType tdwgCodeExtType = getExtensionType(state, BerlinModelTransformer.uuidTdwgAreaCode, "TDWG code", "TDWG Area code", "tdwg");
123
		ExtensionType mclCodeExtType = getExtensionType(state, BerlinModelTransformer.uuidMclCode, "MCL code", "MedCheckList code", "mcl");
124
		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);
125
		NamedAreaLevel areaLevelEm1 = getNamedAreaLevel(state, BerlinModelTransformer.uuidEuroMedAreaLevelFirst, "Euro+Med 1. area level", "Euro+Med 1. area level", "e+m 1.", null);
126
		NamedAreaLevel areaLevelEm2 = getNamedAreaLevel(state, BerlinModelTransformer.uuidEuroMedAreaLevelSecond, "Euro+Med 2. area level", "Euro+Med 2. area level", "Euro+Med 1. area level", null);
127

    
128

    
129
		String sql = "SELECT * , CASE WHEN EMCode = 'EM' THEN 'a' ELSE 'b' END as isEM " +
130
				" FROM emArea " +
131
				" ORDER BY isEM, EMCode";
132
		ResultSet rs = source.getResultSet(sql);
133

    
134
		NamedArea euroMedArea = null;
135
		NamedArea lastLevel1Area = null;
136

    
137
		//euroMedArea (EMCode = 'EM')
138
		rs.next();
139
		euroMedArea = makeSingleEuroMedArea(rs, eurMarkerType, euroMedAreaMarkerType, isoCodeExtType, tdwgCodeExtType, mclCodeExtType,
140
				areaLevelTop, areaLevelEm1 , areaLevelEm2, sourceReference, euroMedArea, lastLevel1Area);
141
		euroMedAreasVoc.addTerm(euroMedArea);
142

    
143
		//all other areas
144
		while (rs.next()){
145
			NamedArea newArea = makeSingleEuroMedArea(rs, eurMarkerType, euroMedAreaMarkerType,
146
					isoCodeExtType, tdwgCodeExtType, mclCodeExtType,
147
					areaLevelTop, areaLevelEm1 , areaLevelEm2, sourceReference, euroMedArea, lastLevel1Area);
148
			if (newArea != null){
149
    			euroMedAreasVoc.addTerm(newArea);
150
    			if (newArea.getPartOf().equals(euroMedArea)){
151
    				lastLevel1Area = newArea;
152
    			}
153
			}
154
		}
155
		emAreaFinetuning(euroMedAreasVoc, areaLevelEm2);
156

    
157
		markAreasAsHidden(state, euroMedAreasVoc);
158

    
159
	    getVocabularyService().saveOrUpdate(euroMedAreasVoc);
160

    
161
		try {
162
            commitTransaction(txStatus);
163
        } catch (Exception e) {
164
             e.printStackTrace();
165
             logger.error("An exception occurred when trying to commit E+M Areas");
166
        }
167
		logger.warn("Created E+M areas");
168

    
169
		return euroMedAreasVoc;
170
	}
171

    
172
	/**
173
     * @param areaLevelEm2
174
	 * @param euroMedAreas2
175
     */
176
    private void emAreaFinetuning(TermVocabulary<NamedArea> euroMedAreas, NamedAreaLevel areaLevelEm2) {
177
        //CZ
178
        NamedArea oldArea = euroMedAreas.getTermByIdInvocabulary("Cz");
179
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Cs"), areaLevelEm2);
180
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sk"), areaLevelEm2);
181

    
182
        //Ju
183
        oldArea = euroMedAreas.getTermByIdInvocabulary("Ju");
184
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("BH"), areaLevelEm2);
185
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Cg"), areaLevelEm2);
186
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Ct"), areaLevelEm2);
187
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Mk"), areaLevelEm2);
188
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sl"), areaLevelEm2);
189
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sr"), areaLevelEm2);
190

    
191
        //IJ
192
        oldArea = euroMedAreas.getTermByIdInvocabulary("IJ");
193
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Ir"), areaLevelEm2);
194
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Jo"), areaLevelEm2);
195

    
196
        //LS
197
        oldArea = euroMedAreas.getTermByIdInvocabulary("LS");
198
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Le"), areaLevelEm2);
199
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sy"), areaLevelEm2);
200

    
201
    }
202

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

    
206
        try {
207

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

    
211
            //Add hidden area marker to Rs(C) and Rs(N)
212
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs);
213
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_B);
214
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_C);
215
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_E);
216
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_N);
217
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_K);
218
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_W);
219
        } catch (Exception e) {
220
            e.printStackTrace();
221
            logger.error("Exception in markAreasAsHidden: " + e.getMessage());
222
        }
223

    
224
    }
225

    
226
    private void hideArea(TermVocabulary<NamedArea> euroMedAreasVoc, MarkerType hiddenAreaMarkerType, UUID areaUuid) {
227
        for (NamedArea namedArea : euroMedAreasVoc){
228
            if (namedArea.getUuid().equals(areaUuid)){
229
                namedArea.addMarker(Marker.NewInstance(hiddenAreaMarkerType, true));
230
                return;
231
            }
232
        }
233
    }
234

    
235
    /**
236
     * @param oldArea
237
     * @param namedArea
238
     * @param areaLevelEm2
239
     */
240
    private void makeSubterm(NamedArea oldArea, NamedArea namedArea, NamedAreaLevel areaLevelEm2) {
241
        namedArea.setLevel(areaLevelEm2);
242
        namedArea.setPartOf(oldArea);
243
    }
244

    
245

    
246
	/**
247
	 * @param eurMarkerType
248
	 * @param euroMedAreaMarkerType
249
	 * @param isoCodeExtType
250
	 * @param tdwgCodeExtType
251
	 * @param mclCodeExtType
252
	 * @param rs
253
	 * @param areaLevelEm2
254
	 * @param areaLevelEm1
255
	 * @param areaLevelTop
256
	 * @throws SQLException
257
	 */
258
	private NamedArea makeSingleEuroMedArea(ResultSet rs, MarkerType eurMarkerType,
259
			MarkerType euroMedAreaMarkerType, ExtensionType isoCodeExtType,
260
			ExtensionType tdwgCodeExtType, ExtensionType mclCodeExtType,
261
			NamedAreaLevel areaLevelTop, NamedAreaLevel areaLevelEm1, NamedAreaLevel areaLevelEm2,
262
			Reference sourceReference, NamedArea euroMedArea, NamedArea level1Area) throws SQLException {
263

    
264
	    Integer areaId = rs.getInt("AreaId");
265
		String emCode = nullSafeTrim(rs.getString("EMCode"));
266
		String isoCode = nullSafeTrim(rs.getString("ISOCode"));
267
		String tdwgCode = nullSafeTrim(rs.getString("TDWGCode"));
268
		String unit = nullSafeTrim(rs.getString("Unit"));
269
//				      ,[Status]
270
//				      ,[OutputOrder]
271
		boolean eurMarker = rs.getBoolean("eur");
272
		boolean euroMedAreaMarker = rs.getBoolean("EuroMedArea");
273
		String notes = nullSafeTrim(rs.getString("Notes"));
274
		String mclCode = nullSafeTrim(rs.getString("MCLCode"));
275
		String geoSearch = nullSafeTrim(rs.getString("NameForGeoSearch"));
276

    
277

    
278
		if (isBlank(emCode)){
279
			emCode = unit;
280
		}
281

    
282
		//uuid
283
		UUID uuid = BerlinModelTransformer.getEMAreaUuid(emCode);
284
		NamedArea area = (NamedArea)getTermService().find(uuid);
285
		if (area == null){
286
			//label
287
			area = NamedArea.NewInstance(geoSearch, unit, emCode);
288
			if (uuid != null){
289
				area.setUuid(uuid);
290
			}else{
291
			    if (areaId == 211 || areaId == 213){  //Additional Azores and Canary Is. area are merged into primary area, see also area.addSource part below
292
			        return null;
293
			    }
294
				logger.warn("Uuid for emCode could not be defined: " + emCode);
295
			}
296
		}
297

    
298

    
299
		//code
300
		area.setIdInVocabulary(emCode);
301
		//notes
302
		if (StringUtils.isNotEmpty(notes)){
303
			area.addAnnotation(Annotation.NewInstance(notes, AnnotationType.EDITORIAL(), Language.DEFAULT()));
304
		}
305
		//markers
306
		area.addMarker(Marker.NewInstance(eurMarkerType, eurMarker));
307
		area.addMarker(Marker.NewInstance(euroMedAreaMarkerType, euroMedAreaMarker));
308

    
309
		//extensions
310
		if (isNotBlank(isoCode)){
311
			area.addExtension(isoCode, isoCodeExtType);
312
		}
313
		if (isNotBlank(tdwgCode)){
314
			area.addExtension(tdwgCode, tdwgCodeExtType);
315
		}
316
		if (isNotBlank(mclCode)){
317
			area.addExtension(mclCode, mclCodeExtType);
318
		}
319

    
320
		//type
321
		area.setType(NamedAreaType.ADMINISTRATION_AREA());
322

    
323
		//source
324
		area.addSource(OriginalSourceType.Import, String.valueOf(areaId), NAMESPACE, sourceReference, null);
325
		//add duplicate area ids for canary
326
		if (areaId == 624){ //Canary Is.
327
		    area.addSource(OriginalSourceType.Import, String.valueOf(213), NAMESPACE, sourceReference, null);
328
		}
329
		if (areaId == 210){//Azores
330
            area.addSource(OriginalSourceType.Import, String.valueOf(211), NAMESPACE, sourceReference, null);
331
        }
332

    
333
		//parent
334
		if (euroMedArea != null){
335
			if (emCode.contains("(")){
336
				area.setPartOf(level1Area);
337
				area.setLevel(areaLevelEm2);
338
			}else{
339
				area.setPartOf(euroMedArea);
340
				area.setLevel(areaLevelEm1);
341
			}
342
		}else{
343
			area.setLevel(areaLevelTop);
344
		}
345
		this.euroMedAreas.put(areaId, area);
346

    
347
		//save
348
		getTermService().saveOrUpdate(area);
349

    
350
		return area;
351
	}
352

    
353
	private String nullSafeTrim(String string) {
354
		if (string == null){
355
			return null;
356
		}else{
357
			return string.trim();
358
		}
359
	}
360

    
361
	/**
362
	 *
363
	 */
364
	private OrderedTermVocabulary<NamedArea> makeEmptyEuroMedVocabulary() {
365
		TermType type = TermType.NamedArea;
366
		String description = "Euro+Med area vocabulary";
367
		String label = "E+M areas";
368
		String abbrev = null;
369
		URI termSourceUri = null;
370
		OrderedTermVocabulary<NamedArea> result = OrderedTermVocabulary.NewInstance(type, description, label, abbrev, termSourceUri);
371

    
372
		result.setUuid(BerlinModelTransformer.uuidVocEuroMedAreas);
373
		getVocabularyService().save(result);
374
		return result;
375
	}
376

    
377

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

    
440
	/**
441
     * @param state
442
	 * @param voc
443
     * @param uuidCauc1
444
     * @param string
445
     * @param string2
446
     * @param string3
447
     * @param string4
448
     * @return
449
     */
450
    private NamedArea makeSingleArea(BerlinModelImportState state, OrderedTermVocabulary<NamedArea> voc, NamedArea last,
451
            UUID uuid, String label, String labelAbbrev,
452
            String mainLevel, String subLevel) {
453

    
454
        NamedArea namedArea = NamedArea.NewInstance(label, label, labelAbbrev);
455
        namedArea.setUuid(uuid);
456
        if (isBlank(subLevel)){
457
            namedArea.setLevel(getNamedAreaLevel(state, BerlinModelTransformer.uuidCaucasusAreaLevelFirst, "Caucasus main areas", "Caucasus main areas", "Cauc. I", null));
458
        }else{
459
            namedArea.setLevel(getNamedAreaLevel(state, BerlinModelTransformer.uuidCaucasusAreaLevelSecond, "Caucasus sub areas", "Caucasus sub areas", "Cauc. II", null));
460
            if(last.getPartOf() != null){
461
                namedArea.setPartOf(last.getPartOf());
462
            }else{
463
                namedArea.setPartOf(last);
464
            }
465
        }
466
        String idInVoc = mainLevel + subLevel;
467
        namedArea.setIdInVocabulary(idInVoc);
468
        voc.addTerm(namedArea);
469
        return namedArea;
470
    }
471

    
472
    /**
473
     * @param state
474
     */
475
    private OrderedTermVocabulary<NamedArea> makeEmptyCaucasusVocabulary(BerlinModelImportState state) {
476
        TermType type = TermType.NamedArea;
477
        String description = "E+M Caucasus area vocabulary";
478
        String label = "E+M Caucasus Areas";
479
        String abbrev = null;
480
        URI termSourceUri = null;
481
        OrderedTermVocabulary<NamedArea> result = OrderedTermVocabulary.NewInstance(type, description, label, abbrev, termSourceUri);
482
        result.setUuid(BerlinModelTransformer.uuidVocCaucasusAreas);
483
        getVocabularyService().save(result);
484
        return result;
485
    }
486

    
487
    @Override
488
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, BerlinModelImportState state) {
489
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
490
		return result;
491
	}
492

    
493
	@Override
494
	protected boolean doCheck(BerlinModelImportState state){
495
		IOValidator<BerlinModelImportState> validator = new BerlinModelAreaImportValidator();
496
		return validator.validate(state);
497
	}
498

    
499

    
500
	@Override
501
	protected boolean isIgnore(BerlinModelImportState state){
502
		if (state.getConfig().isDoNamedAreas()){
503
		    return false;
504
		}else if (! (state.getConfig().isDoOccurrence() || state.getConfig().isDoCommonNames())){
505
			return true;
506
		}else{
507
			if (!this.checkSqlServerColumnExists(state.getConfig().getSource(), "emArea", "AreaId")){
508
				logger.error("emArea table or AreaId column do not exist. Must ignore area import");
509
				return true;
510
			}else{
511
			    TermVocabulary<?> voc = getVocabularyService().find(BerlinModelTransformer.uuidVocEuroMedAreas);
512
		        return voc != null;
513
			}
514
		}
515
	}
516

    
517
}
(1-1/22)