Project

General

Profile

Download (23.9 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
package eu.etaxonomy.cdm.io.berlinModel.in;
10

    
11
import java.sql.ResultSet;
12
import java.sql.SQLException;
13
import java.util.HashMap;
14
import java.util.Map;
15
import java.util.UUID;
16

    
17
import org.apache.commons.lang.StringUtils;
18
import org.apache.logging.log4j.LogManager;
19
import org.apache.logging.log4j.Logger;
20
import org.springframework.stereotype.Component;
21
import org.springframework.transaction.TransactionStatus;
22

    
23
import eu.etaxonomy.cdm.common.URI;
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
 * @author a.mueller
47
 * @since 20.03.2008
48
 */
49
@Component
50
public class BerlinModelAreaImport  extends BerlinModelImportBase {
51

    
52
    private static final long serialVersionUID = -2810052908318645219L;
53
    private static final Logger logger = LogManager.getLogger();
54

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

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

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

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

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

    
90
    @Override
91
    public boolean doPartition(@SuppressWarnings("rawtypes") ResultSetPartitioner partitioner, BerlinModelImportState state) {
92
        // not relevant
93
        return true;
94
    }
95

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

    
111
    private TermVocabulary<NamedArea> createEuroMedAreas(BerlinModelImportState state) throws SQLException {
112

    
113
	    logger.warn("Start creating E+M areas");
114
		Source source = state.getConfig().getSource();
115
		Reference sourceReference = state.getConfig().getSourceReference();
116

    
117
		TransactionStatus txStatus = this.startTransaction();
118

    
119
		sourceReference = getSourceReference(sourceReference);
120

    
121
		TermVocabulary<NamedArea> euroMedAreasVoc = makeEmptyEuroMedVocabulary();
122

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

    
132

    
133
		String sql = "SELECT * , CASE WHEN EMCode = 'EM' THEN 'a' ELSE 'b' END as isEM " +
134
				" FROM emArea " +
135
				" WHERE areaId not IN (1, 14, 20, 21, 33, 646, 647, 653, 654, 1718) " +
136
				" ORDER BY isEM, EMCode";
137
		ResultSet rs = source.getResultSet(sql);
138

    
139
		NamedArea euroMedArea = null;
140
		NamedArea lastLevel1Area = null;
141

    
142
		//euroMedArea (EMCode = 'EM')
143
		rs.next();
144
		euroMedArea = makeSingleEuroMedArea(rs, eurMarkerType, euroMedAreaMarkerType, isoCodeExtType, tdwgCodeExtType, mclCodeExtType,
145
				areaLevelTop, areaLevelEm1 , areaLevelEm2, sourceReference, euroMedArea, lastLevel1Area);
146
		euroMedAreasVoc.addTerm(euroMedArea);
147

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

    
162
		markAreasAsHidden(state, euroMedAreasVoc);
163

    
164
	    getVocabularyService().saveOrUpdate(euroMedAreasVoc);
165

    
166
		try {
167
            commitTransaction(txStatus);
168
        } catch (Exception e) {
169
             e.printStackTrace();
170
             logger.error("An exception occurred when trying to commit E+M Areas");
171
        }
172
		logger.warn("Created E+M areas");
173

    
174
		return euroMedAreasVoc;
175
	}
176

    
177
	/**
178
     * @param areaLevelEm2
179
	 * @param euroMedAreas2
180
     */
181
    private void emAreaFinetuning(TermVocabulary<NamedArea> euroMedAreas, NamedAreaLevel areaLevelEm2) {
182
        //CZ
183
        NamedArea oldArea = euroMedAreas.getTermByIdInvocabulary("Cz");
184
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Cs"), areaLevelEm2);
185
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sk"), areaLevelEm2);
186

    
187
        //Ju
188
        oldArea = euroMedAreas.getTermByIdInvocabulary("Ju");
189
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("BH"), areaLevelEm2);
190
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Cg"), areaLevelEm2);
191
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Ct"), areaLevelEm2);
192
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Mk"), areaLevelEm2);
193
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sl"), areaLevelEm2);
194
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sr"), areaLevelEm2);
195
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Yu(K)"), areaLevelEm2);
196
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("SM"), areaLevelEm2);
197

    
198
        //IJ
199
        oldArea = euroMedAreas.getTermByIdInvocabulary("IJ");
200
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Ir"), areaLevelEm2);
201
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Jo"), areaLevelEm2);
202

    
203
        //LS
204
        oldArea = euroMedAreas.getTermByIdInvocabulary("LS");
205
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Le"), areaLevelEm2);
206
        makeSubterm(oldArea, euroMedAreas.getTermByIdInvocabulary("Sy"), areaLevelEm2);
207

    
208
    }
209

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

    
213
        try {
214

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

    
218
            //Add hidden area marker to Rs(C) and Rs(N)
219
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs);
220
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_B);
221
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_C);
222
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_E);
223
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_N);
224
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_K);
225
            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_W);
226
        } catch (Exception e) {
227
            e.printStackTrace();
228
            logger.error("Exception in markAreasAsHidden: " + e.getMessage());
229
        }
230

    
231
    }
232

    
233
    private void hideArea(TermVocabulary<NamedArea> euroMedAreasVoc, MarkerType hiddenAreaMarkerType, UUID areaUuid) {
234
        for (NamedArea namedArea : euroMedAreasVoc.getTerms()){
235
            if (namedArea.getUuid().equals(areaUuid)){
236
                namedArea.addMarker(Marker.NewInstance(hiddenAreaMarkerType, true));
237
                return;
238
            }
239
        }
240
    }
241

    
242
    /**
243
     * @param oldArea
244
     * @param namedArea
245
     * @param areaLevelEm2
246
     */
247
    private void makeSubterm(NamedArea oldArea, NamedArea namedArea, NamedAreaLevel areaLevelEm2) {
248
        namedArea.setLevel(areaLevelEm2);
249
        namedArea.setPartOf(oldArea);
250
    }
251

    
252

    
253
	/**
254
	 * @param eurMarkerType
255
	 * @param euroMedAreaMarkerType
256
	 * @param isoCodeExtType
257
	 * @param tdwgCodeExtType
258
	 * @param mclCodeExtType
259
	 * @param rs
260
	 * @param areaLevelEm2
261
	 * @param areaLevelEm1
262
	 * @param areaLevelTop
263
	 * @throws SQLException
264
	 */
265
	private NamedArea makeSingleEuroMedArea(ResultSet rs, MarkerType eurMarkerType,
266
			MarkerType euroMedAreaMarkerType, ExtensionType isoCodeExtType,
267
			ExtensionType tdwgCodeExtType, ExtensionType mclCodeExtType,
268
			NamedAreaLevel areaLevelTop, NamedAreaLevel areaLevelEm1, NamedAreaLevel areaLevelEm2,
269
			Reference sourceReference, NamedArea euroMedArea, NamedArea level1Area) throws SQLException {
270

    
271
	    Integer areaId = rs.getInt("AreaId");
272
		String emCode = nullSafeTrim(rs.getString("EMCode"));
273
		String isoCode = nullSafeTrim(rs.getString("ISOCode"));
274
		String tdwgCode = nullSafeTrim(rs.getString("TDWGCode"));
275
		String unit = nullSafeTrim(rs.getString("Unit"));
276
//				      ,[Status]
277
//				      ,[OutputOrder]
278
		boolean eurMarker = rs.getBoolean("eur");
279
		boolean euroMedAreaMarker = rs.getBoolean("EuroMedArea");
280
		String notes = nullSafeTrim(rs.getString("Notes"));
281
		String mclCode = nullSafeTrim(rs.getString("MCLCode"));
282
		String geoSearch = nullSafeTrim(rs.getString("NameForGeoSearch"));
283

    
284

    
285
		if (isBlank(emCode)){
286
			emCode = unit;
287
		}
288

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

    
305

    
306
		//code
307
		area.setIdInVocabulary(emCode);
308
		//notes
309
		if (StringUtils.isNotEmpty(notes)){
310
			area.addAnnotation(Annotation.NewInstance(notes, AnnotationType.EDITORIAL(), Language.DEFAULT()));
311
		}
312
		//markers
313
		area.addMarker(Marker.NewInstance(eurMarkerType, eurMarker));
314
		area.addMarker(Marker.NewInstance(euroMedAreaMarkerType, euroMedAreaMarker));
315

    
316
		//extensions
317
		if (isNotBlank(isoCode)){
318
			area.addExtension(isoCode, isoCodeExtType);
319
		}
320
		if (isNotBlank(tdwgCode)){
321
			area.addExtension(tdwgCode, tdwgCodeExtType);
322
		}
323
		if (isNotBlank(mclCode)){
324
			area.addExtension(mclCode, mclCodeExtType);
325
		}
326

    
327
		//type
328
		area.setType(NamedAreaType.ADMINISTRATION_AREA());
329

    
330
		//source
331
		area.addSource(OriginalSourceType.Import, String.valueOf(areaId), NAMESPACE, sourceReference, null);
332
		//add duplicate area ids for canary
333
		if (areaId == 624){ //Canary Is.
334
		    area.addSource(OriginalSourceType.Import, String.valueOf(213), NAMESPACE, sourceReference, null);
335
		}
336
		if (areaId == 210){//Azores
337
            area.addSource(OriginalSourceType.Import, String.valueOf(211), NAMESPACE, sourceReference, null);
338
        }
339

    
340
		//parent
341
		if (euroMedArea != null){
342
			if (emCode.contains("(") && !emCode.startsWith("Yu(K)")){
343
				area.setPartOf(level1Area);
344
				area.setLevel(areaLevelEm2);
345
			}else{
346
				area.setPartOf(euroMedArea);
347
				area.setLevel(areaLevelEm1);
348
			}
349
		}else{
350
			area.setLevel(areaLevelTop);
351
		}
352
		this.euroMedAreas.put(areaId, area);
353

    
354
		//save
355
		getTermService().saveOrUpdate(area);
356

    
357
		return area;
358
	}
359

    
360
	private String nullSafeTrim(String string) {
361
		if (string == null){
362
			return null;
363
		}else{
364
			return string.trim();
365
		}
366
	}
367

    
368
	/**
369
	 *
370
	 */
371
	private OrderedTermVocabulary<NamedArea> makeEmptyEuroMedVocabulary() {
372
		TermType type = TermType.NamedArea;
373
		String description = "Euro+Med area vocabulary";
374
		String label = "E+M Areas";
375
		String abbrev = null;
376
		URI termSourceUri = null;
377
		OrderedTermVocabulary<NamedArea> result = OrderedTermVocabulary.NewOrderedInstance(type, null, description, label, abbrev, termSourceUri);
378

    
379
		result.setUuid(BerlinModelTransformer.uuidVocEuroMedAreas);
380
		getVocabularyService().save(result);
381
		return result;
382
	}
383

    
384

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

    
447
	/**
448
     * @param state
449
	 * @param voc
450
     * @param uuidCauc1
451
     * @param string
452
     * @param string2
453
     * @param string3
454
     * @param string4
455
     * @return
456
     */
457
    private NamedArea makeSingleArea(BerlinModelImportState state, OrderedTermVocabulary<NamedArea> voc, NamedArea last,
458
            UUID uuid, String label, String labelAbbrev,
459
            String mainLevel, String subLevel) {
460

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

    
479
    /**
480
     * @param state
481
     */
482
    private OrderedTermVocabulary<NamedArea> makeEmptyCaucasusVocabulary(BerlinModelImportState state) {
483
        TermType type = TermType.NamedArea;
484
        String description = "E+M Caucasus area vocabulary";
485
        String label = "E+M Caucasus Areas";
486
        String abbrev = null;
487
        URI termSourceUri = null;
488
        OrderedTermVocabulary<NamedArea> result = OrderedTermVocabulary.NewOrderedInstance(type, null, description, label, abbrev, termSourceUri);
489
        result.setUuid(BerlinModelTransformer.uuidVocCaucasusAreas);
490
        getVocabularyService().save(result);
491
        return result;
492
    }
493

    
494
    @Override
495
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, BerlinModelImportState state) {
496
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
497
		return result;
498
	}
499

    
500
	@Override
501
	protected boolean doCheck(BerlinModelImportState state){
502
		IOValidator<BerlinModelImportState> validator = new BerlinModelAreaImportValidator();
503
		return validator.validate(state);
504
	}
505

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