Project

General

Profile

« Previous | Next » 

Revision 8422c0cd

Added by Andreas Müller almost 8 years ago

Remove generics from Reference in cdmlib-app #5830

View differences:

app-import/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/BerlinModelCommonNamesImport.java
1 1
/**
2 2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy 
3
* European Distributed Institute of Taxonomy
4 4
* http://www.e-taxonomy.eu
5
* 
5
*
6 6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7 7
* See LICENSE.TXT at the top of this package for the full license terms.
8 8
*/
......
52 52
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
53 53

  
54 54
/**
55
 * 
55
 *
56 56
 * @author a.mueller
57 57
 * @created 20.03.2008
58 58
 */
......
63 63
	public static final UUID REFERENCE_LANGUAGE_ISO639_2_UUID = UUID.fromString("40c4f8dd-3d9c-44a4-b77a-76e137a89a5f");
64 64
	public static final UUID REFERENCE_LANGUAGE_STRING_UUID = UUID.fromString("2a1b678f-c27d-48c1-b43e-98fd0d426305");
65 65
	public static final UUID STATUS_ANNOTATION_UUID = UUID.fromString("e3f7b80a-1286-458d-812c-5e818f731968");
66
	
66

  
67 67
	public static final String NAMESPACE = "common name";
68
	
69
	
68

  
69

  
70 70
	private static final String pluralString = "common names";
71 71
	private static final String dbTableName = "emCommonName";
72 72

  
......
77 77
	public BerlinModelCommonNamesImport(){
78 78
		super(dbTableName, pluralString);
79 79
	}
80
	
80

  
81 81
	@Override
82 82
	protected String getIdQuery(BerlinModelImportState state) {
83 83
		String result = " SELECT CommonNameId FROM emCommonName WHERE (1=1) ";
84 84
		if (StringUtils.isNotBlank(state.getConfig().getCommonNameFilter())){
85 85
			result += " AND " + state.getConfig().getCommonNameFilter();
86 86
		}
87
		
87

  
88 88
		return result;
89 89
	}
90 90

  
91 91
	@Override
92 92
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
93 93
		String recordQuery = "";
94
		recordQuery = 
94
		recordQuery =
95 95
				" SELECT     cn.CommonNameId, cn.CommonName, PTaxon.RIdentifier AS taxonId, cn.PTNameFk, cn.RefFk AS refId, cn.Status, cn.RegionFks, cn.MisNameRefFk, " +
96 96
					       "               cn.NameInSourceFk, cn.Created_When, cn.Updated_When, cn.Created_Who, cn.Updated_Who, cn.Note AS Notes, languageCommonName.Language, " +
97 97
					       "               languageCommonName.LanguageOriginal, languageCommonName.ISO639_1, languageCommonName.ISO639_2,   " +
98 98
					       "               emLanguageReference.RefFk AS languageRefRefFk, emLanguageReference.ReferenceShort, emLanguageReference.ReferenceLong,  " +
99
					       "               emLanguageReference.LanguageFk, languageReferenceLanguage.Language AS refLanguage, languageReferenceLanguage.ISO639_2 AS refLanguageIso639_2,  "+ 
99
					       "               emLanguageReference.LanguageFk, languageReferenceLanguage.Language AS refLanguage, languageReferenceLanguage.ISO639_2 AS refLanguageIso639_2,  "+
100 100
					       "               misappliedTaxon.RIdentifier AS misappliedTaxonId " +
101 101
					" FROM         PTaxon AS misappliedTaxon RIGHT OUTER JOIN " +
102
					    "                  emLanguage AS languageReferenceLanguage RIGHT OUTER JOIN " + 
102
					    "                  emLanguage AS languageReferenceLanguage RIGHT OUTER JOIN " +
103 103
					               "       emLanguageReference ON languageReferenceLanguage.LanguageId = emLanguageReference.LanguageFk RIGHT OUTER JOIN " +
104 104
					               "       emCommonName AS cn INNER JOIN " +
105 105
					               "       PTaxon ON cn.PTNameFk = PTaxon.PTNameFk AND cn.PTRefFk = PTaxon.PTRefFk ON  " +
......
109 109
			" WHERE cn.CommonNameId IN (" + ID_LIST_TOKEN + ")";
110 110
		return recordQuery;
111 111
	}
112
	
112

  
113 113
	@Override
114 114
	protected void doInvoke(BerlinModelImportState state) {
115 115
		try {
......
122 122
		super.doInvoke(state);
123 123
		return;
124 124
	}
125
	
125

  
126 126
	/**
127
	 * @param state 
128
	 * 
127
	 * @param state
128
	 *
129 129
	 */
130 130
	private void makeRegions(BerlinModelImportState state) {
131 131
		try {
132 132
			SortedSet<Integer> regionFks = new TreeSet<Integer>();
133 133
			Source source = state.getConfig().getSource();
134
			
134

  
135 135
			//fill set with all regionFk from emCommonName.regionFks
136 136
			getRegionFks(state, regionFks, source);
137 137
			//concat filter string
138 138
			String sqlWhere = getSqlWhere(regionFks);
139
			
139

  
140 140
			//get E+M - TDWG Mapping
141 141
			Map<String, String> emTdwgMap = getEmTdwgMap(source);
142 142
			//fill regionMap
143 143
			fillRegionMap(state, sqlWhere, emTdwgMap);
144
			
144

  
145 145
			return;
146 146
		} catch (NumberFormatException e) {
147 147
			e.printStackTrace();
......
158 158
	@Override
159 159
	public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state)  {
160 160
		boolean success = true ;
161
		
161

  
162 162
		Set<TaxonBase> taxaToSave = new HashSet<TaxonBase>();
163
		Map<String, Taxon> taxonMap = (Map<String, Taxon>) partitioner.getObjectMap(BerlinModelTaxonImport.NAMESPACE);
164
		Map<String, TaxonNameBase> taxonNameMap = (Map<String, TaxonNameBase>) partitioner.getObjectMap(BerlinModelTaxonNameImport.NAMESPACE);
165
		
166
		Map<String, Reference> refMap = (Map<String, Reference>) partitioner.getObjectMap(BerlinModelReferenceImport.REFERENCE_NAMESPACE);
167
		
163
		Map<String, Taxon> taxonMap = partitioner.getObjectMap(BerlinModelTaxonImport.NAMESPACE);
164
		Map<String, TaxonNameBase> taxonNameMap = partitioner.getObjectMap(BerlinModelTaxonNameImport.NAMESPACE);
165

  
166
		Map<String, Reference> refMap = partitioner.getObjectMap(BerlinModelReferenceImport.REFERENCE_NAMESPACE);
167

  
168 168
		Map<String, Language> iso6392Map = new HashMap<String, Language>();
169
		
169

  
170 170
	//	logger.warn("MisappliedNameRefFk  not yet implemented for Common Names");
171
		
171

  
172 172
		ResultSet rs = partitioner.getResultSet();
173 173
		try{
174 174
			while (rs.next()){
......
190 190
				String status = rs.getString("Status");
191 191
				Integer nameInSourceFk = nullSafeInt( rs, "NameInSourceFk");
192 192
				Integer misappliedTaxonId = nullSafeInt( rs, "misappliedTaxonId");
193
				
193

  
194 194
				//regions
195 195
				String regionFks  = rs.getString("RegionFks");
196 196
				String[] regionFkSplit = regionFks.split(",");
197
				
197

  
198 198
				//commonNameString
199 199
				if (isBlank(commonNameString)){
200 200
					String message = "CommonName is empty or null. Do not import record for taxon " + taxonId;
201 201
					logger.warn(message);
202 202
					continue;
203 203
				}
204
				
204

  
205 205
				//taxon
206 206
				Taxon taxon = null;
207 207
				TaxonBase<?> taxonBase  = taxonMap.get(String.valueOf(taxonId));
......
214 214
				}else{
215 215
					taxon = CdmBase.deproxy(taxonBase, Taxon.class);
216 216
				}
217
				
217

  
218 218
				//Language
219 219
				Language language = getAndHandleLanguage(iso6392Map, iso639_2, iso639_1, languageString, originalLanguageString, state);
220
				
220

  
221 221
				//CommonTaxonName
222 222
				List<CommonTaxonName> commonTaxonNames = new ArrayList<CommonTaxonName>();
223 223
				for (String regionFk : regionFkSplit){ //
......
242 242
						description.addElement(commonTaxonName);
243 243
					}
244 244
				}
245
					
245

  
246 246
				//Reference/Source
247 247
				if (! CdmUtils.nullSafeEqual(refId, languageRefRefFk)){
248 248
					//use strRefId if languageRefFk is null
......
252 252
						logger.warn("CommonName.RefFk (" + CdmUtils.Nz(refId) + ") and LanguageReference.RefFk " + (languageRefRefFk==null? "null" : languageRefRefFk)  + " are not equal. I will import only languageReference.RefFk");
253 253
					}
254 254
				}
255
				
256
				Reference<?> reference = refMap.get(String.valueOf(languageRefRefFk));
255

  
256
				Reference reference = refMap.get(String.valueOf(languageRefRefFk));
257 257
				if (reference == null && languageRefRefFk != null){
258 258
					logger.warn("CommonName reference was null but reference exists. languageRefRefFk = " + languageRefRefFk + "; commonNameId = " + commonNameId);
259 259
				}
260 260
				String microCitation = null;
261 261
				String originalNameString = null;
262
				
262

  
263 263
				TaxonNameBase<?,?> nameUsedInSource = taxonNameMap.get(String.valueOf(nameInSourceFk));
264 264
				if (nameInSourceFk != null && nameUsedInSource == null){
265 265
					logger.warn("Name used in source (" + nameInSourceFk + ") was not found for common name " + commonNameId);
......
268 268
				for (CommonTaxonName commonTaxonName : commonTaxonNames){
269 269
					commonTaxonName.addSource(source);
270 270
				}
271
				
272
				
271

  
272

  
273 273
				//MisNameRef
274 274
				if (misNameRefFk != null){
275 275
					//Taxon misappliedName = getMisappliedName(biblioRefMap, nomRefMap, misNameRefFk, taxon);
......
284 284
							logger.warn("Misapplied name taxon is not of type Taxon but " + misTaxonBase.getClass().getSimpleName());
285 285
						}
286 286
					}else{
287
						
288
						Reference<?> sec = refMap.get(String.valueOf(misNameRefFk));
287

  
288
						Reference sec = refMap.get(String.valueOf(misNameRefFk));
289 289
						if (nameUsedInSource == null || sec == null){
290 290
							logger.warn("Taxon name or misapplied name reference is null for common name " + commonNameId);
291 291
						}else{
......
299 299
						}
300 300
					}
301 301
					if (misappliedNameTaxon != null){
302
						
302

  
303 303
						if (! taxon.getMisappliedNames().contains(misappliedNameTaxon)){
304 304
							taxon.addMisappliedName(misappliedNameTaxon,state.getTransactionalSourceReference(), null);
305 305
							logger.warn("Misapplied name for common name was not found related to the accepted taxon. Created new relationship. CommonNameId: " + commonNameId);
306 306
						}
307
						
307

  
308 308
						TaxonDescription misappliedNameDescription = getDescription(misappliedNameTaxon);
309 309
						for (CommonTaxonName commonTaxonName : commonTaxonNames){
310 310
							CommonTaxonName commonNameClone = (CommonTaxonName)commonTaxonName.clone();
311 311
							misappliedNameDescription.addElement(commonNameClone);
312
						}	
312
						}
313 313
					}else{
314 314
						logger.warn("Misapplied name is null for common name " + commonNameId);
315 315
					}
316
					
316

  
317 317
				}
318
				
319
				
318

  
319

  
320 320
				//reference extensions
321 321
				if (reference != null){
322 322
					if (StringUtils.isNotBlank(refLanguage)){
323 323
						ExtensionType refLanguageExtensionType = getExtensionType( state, REFERENCE_LANGUAGE_STRING_UUID, "reference language","The language of the reference","ref. lang.");
324 324
						Extension.NewInstance(reference, refLanguage, refLanguageExtensionType);
325 325
					}
326
					
326

  
327 327
					if (StringUtils.isNotBlank(refLanguageIso639_2)){
328 328
						ExtensionType refLanguageIsoExtensionType = getExtensionType( state, REFERENCE_LANGUAGE_ISO639_2_UUID, "reference language iso 639-2","The iso 639-2 code of the references language","ref. lang. 639-2");
329 329
						Extension.NewInstance(reference, refLanguageIso639_2, refLanguageIsoExtensionType);
......
331 331
				}else if (isNotBlank(refLanguage) || isNotBlank(refLanguageIso639_2)){
332 332
					logger.warn("Reference is null (" + languageRefRefFk + ") but refLanguage (" + CdmUtils.Nz(refLanguage) + ") or iso639_2 (" + CdmUtils.Nz(refLanguageIso639_2) + ") was not null for common name ("+ commonNameId +")");
333 333
				}
334
				
334

  
335 335
				//status
336 336
				if (isNotBlank(status)){
337 337
					AnnotationType statusAnnotationType = getAnnotationType( state, STATUS_ANNOTATION_UUID, "status","The status of this object","status", null);
......
340 340
						commonTaxonName.addAnnotation(annotation);
341 341
					}
342 342
				}
343
				
343

  
344 344
				//Notes
345 345
				for (CommonTaxonName commonTaxonName : commonTaxonNames){
346 346
					doIdCreatedUpdatedNotes(state, commonTaxonName, rs, String.valueOf(commonNameId), NAMESPACE);
......
354 354
			return false;
355 355
		} catch (ClassCastException e) {
356 356
			e.printStackTrace();
357
		} 	
358
			
357
		}
358

  
359 359
		//	logger.info( i + " names handled");
360 360
		getTaxonService().save(taxaToSave);
361 361
		return success;
......
367 367
	 * @param iso639_2
368 368
	 * @param languageString
369 369
	 * @param originalLanguageString
370
	 * @param state 
370
	 * @param state
371 371
	 * @return
372 372
	 */
373 373
	private Language getAndHandleLanguage(Map<String, Language> iso639Map,	String iso639_2, String iso639_1, String languageString, String originalLanguageString, BerlinModelImportState state) {
......
375 375
		if (isNotBlank(iso639_2)|| isNotBlank(iso639_1)  ){
376 376
			//TODO test performance, implement in state
377 377
			language = getLanguageFromIsoMap(iso639Map, iso639_2, iso639_1);
378
			
378

  
379 379
			if (language == null){
380 380
				language = getTermService().getLanguageByIso(iso639_2);
381 381
				iso639Map.put(iso639_2, language);
......
437 437
				getTermService().saveOrUpdate(language);
438 438
			}
439 439
		}
440
		
440

  
441 441
	}
442
	
442

  
443 443

  
444 444

  
445 445
	/**
......
449 449
	 * @param source
450 450
	 * @return
451 451
	 * @throws SQLException
452
	 * 
452
	 *
453 453
	 */
454 454
	private void getRegionFks(BerlinModelImportState state, SortedSet<Integer> regionFks, Source source) throws SQLException {
455 455
		String sql = " SELECT DISTINCT RegionFks FROM emCommonName";
456 456
		if (state.getConfig().getCommonNameFilter() != null){
457
			sql += " WHERE " + state.getConfig().getCommonNameFilter(); 
457
			sql += " WHERE " + state.getConfig().getCommonNameFilter();
458 458
		}
459
		
459

  
460 460
		ResultSet rs = source.getResultSet(sql);
461 461
		while (rs.next()){
462
			String strRegionFks = rs.getString("RegionFks"); 
462
			String strRegionFks = rs.getString("RegionFks");
463 463
			if (isBlank(strRegionFks)){
464 464
				continue;
465 465
			}
466
			
466

  
467 467
			String[] regionFkArray = strRegionFks.split(",");
468 468
			for (String regionFk: regionFkArray){
469 469
				regionFk = regionFk.trim();
......
526 526
	/**
527 527
	 * Returns the are for a given TDWG code. See {@link #getEmTdwgMap(Source)} for exceptions from
528 528
	 * the TDWG code
529
	 * @param state 
529
	 * @param state
530 530
	 * @param tdwgCode
531 531
	 */
532 532
	private NamedArea getNamedArea(BerlinModelImportState state, String tdwgCode) {
......
559 559
	private String getSqlWhere(SortedSet<Integer> regionFks) {
560 560
		String sqlWhere = "";
561 561
		for (Integer regionFk : regionFks){
562
			sqlWhere += regionFk + ","; 
562
			sqlWhere += regionFk + ",";
563 563
		}
564 564
		sqlWhere = sqlWhere.substring(0, sqlWhere.length()-1);
565 565
		return sqlWhere;
......
567 567

  
568 568
	/**
569 569
	 * Returns a map which is filled by the emCode->TdwgCode mapping defined in emArea.
570
	 * Some exceptions are defined for emCode 'Ab','Rf','Uk' and some additional mapping is added 
570
	 * Some exceptions are defined for emCode 'Ab','Rf','Uk' and some additional mapping is added
571 571
	 * for 'Ab / Ab(A)', 'Ga / Ga(F)', 'It / It(I)', 'Ar / Ar(A)','Hs / Hs(S)'
572 572
	 * @param source
573 573
	 * @throws SQLException
......
583 583
			String TDWGCode = rs.getString("TDWGCode");
584 584
			if (StringUtils.isNotBlank(emCode) ){
585 585
				emCode = emCode.trim();
586
				if (emCode.equalsIgnoreCase("Ab") || emCode.equalsIgnoreCase("Rf")|| 
586
				if (emCode.equalsIgnoreCase("Ab") || emCode.equalsIgnoreCase("Rf")||
587 587
						emCode.equalsIgnoreCase("Uk") || emCode.equalsIgnoreCase("Gg")){
588 588
					emTdwgMap.put(emCode, emCode);
589 589
				}else if (StringUtils.isNotBlank(TDWGCode)){
......
597 597
		emTdwgMap.put("Uk / Uk(U)", "Uk");
598 598
		emTdwgMap.put("Ar / Ar(A)", "TCS-AR");
599 599
		emTdwgMap.put("Hs / Hs(S)", "SPA-SP");
600
		
600

  
601 601
		return emTdwgMap;
602 602
	}
603 603

  
......
626 626
		Class<?> cdmClass;
627 627
		Set<String> idSet;
628 628
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
629
		
629

  
630 630
		String pos = "0";
631 631
		try{
632 632
			Set<String> taxonIdSet = new HashSet<String>();
......
641 641
				handleForeignKey(rs, nameIdSet, "PTNameFk");
642 642
				handleForeignKey(rs, referenceIdSet, "MisNameRefFk");
643 643
			}
644
			
644

  
645 645
			//name map
646 646
			nameSpace = BerlinModelTaxonNameImport.NAMESPACE;
647 647
			cdmClass = TaxonNameBase.class;
648 648
			idSet = nameIdSet;
649 649
			Map<String, TaxonNameBase<?,?>> nameMap = (Map<String, TaxonNameBase<?,?>>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
650 650
			result.put(nameSpace, nameMap);
651
			
651

  
652 652
			//taxon map
653 653
			nameSpace = BerlinModelTaxonImport.NAMESPACE;
654 654
			cdmClass = TaxonBase.class;
655 655
			idSet = taxonIdSet;
656 656
			Map<String, TaxonBase<?>> taxonMap = (Map<String, TaxonBase<?>>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
657 657
			result.put(nameSpace, taxonMap);
658
			
658

  
659 659
			//reference map
660 660
			nameSpace = BerlinModelReferenceImport.REFERENCE_NAMESPACE;
661 661
			cdmClass = Reference.class;
......
670 670
		}
671 671
		return result;
672 672
	}
673
		
673

  
674 674

  
675 675
	@Override
676 676
	protected boolean doCheck(BerlinModelImportState state){

Also available in: Unified diff