Project

General

Profile

Download (21.7 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.sql.ResultSet;
13
import java.sql.SQLException;
14
import java.util.HashMap;
15
import java.util.HashSet;
16
import java.util.Map;
17
import java.util.Set;
18
import java.util.UUID;
19

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

    
24
import eu.etaxonomy.cdm.common.CdmUtils;
25
import eu.etaxonomy.cdm.database.update.DatabaseTypeNotSupportedException;
26
import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer;
27
import eu.etaxonomy.cdm.io.berlinModel.in.validation.BerlinModelTaxonNameImportValidator;
28
import eu.etaxonomy.cdm.io.common.IImportConfigurator;
29
import eu.etaxonomy.cdm.io.common.IOValidator;
30
import eu.etaxonomy.cdm.io.common.ImportHelper;
31
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
32
import eu.etaxonomy.cdm.io.common.Source;
33
import eu.etaxonomy.cdm.model.agent.Person;
34
import eu.etaxonomy.cdm.model.agent.Team;
35
import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
36
import eu.etaxonomy.cdm.model.common.CdmBase;
37
import eu.etaxonomy.cdm.model.common.Extension;
38
import eu.etaxonomy.cdm.model.common.ExtensionType;
39
import eu.etaxonomy.cdm.model.common.Language;
40
import eu.etaxonomy.cdm.model.common.Representation;
41
import eu.etaxonomy.cdm.model.name.BotanicalName;
42
import eu.etaxonomy.cdm.model.name.CultivarPlantName;
43
import eu.etaxonomy.cdm.model.name.NonViralName;
44
import eu.etaxonomy.cdm.model.name.Rank;
45
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
46
import eu.etaxonomy.cdm.model.name.ZoologicalName;
47
import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;
48
import eu.etaxonomy.cdm.model.reference.Reference;
49
import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
50

    
51
/**
52
 * @author a.mueller
53
 * @created 20.03.2008
54
 * @version 1.0
55
 */
56
@Component
57
public class BerlinModelTaxonNameImport extends BerlinModelImportBase {
58
	private static final boolean BLANK_TO_NULL = true;
59

    
60
	private static final Logger logger = Logger.getLogger(BerlinModelTaxonNameImport.class);
61

    
62
	public static final String NAMESPACE = "TaxonName";
63
	
64
	public static final UUID SOURCE_ACC_UUID = UUID.fromString("c3959b4f-d876-4b7a-a739-9260f4cafd1c");
65
	
66
	private static int modCount = 5000;
67
	private static final String pluralString = "TaxonNames";
68
	private static final String dbTableName = "Name";
69

    
70

    
71
	public BerlinModelTaxonNameImport(){
72
		super(dbTableName, pluralString);
73
	}
74

    
75

    
76
	@Override
77
	protected String getIdQuery(BerlinModelImportState state) {
78
		if (state.getConfig().getNameIdTable()==null ){
79
			return super.getIdQuery(state);
80
		}else{
81
			return "SELECT nameId FROM " + state.getConfig().getNameIdTable() + ""; 
82
		}
83
	}
84
	
85
	@Override
86
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
87
		Source source = config.getSource();
88
		
89
			String facultativCols = "";
90
			String strFacTable = "RefDetail";
91
			String strFacColumn = "IdInSource";
92
			String strColAlias = null;
93
			if (checkSqlServerColumnExists(source, strFacTable, strFacColumn)){
94
				facultativCols +=  ", " + strFacTable + "." + strFacColumn ;
95
				if (! CdmUtils.Nz(strColAlias).equals("") ){
96
					facultativCols += " AS " + strColAlias;
97
				}
98
			}
99

    
100
		String strRecordQuery = 
101
					"SELECT Name.* , RefDetail.RefDetailId, RefDetail.RefFk, " +
102
                      		" RefDetail.FullRefCache, RefDetail.FullNomRefCache, RefDetail.PreliminaryFlag AS RefDetailPrelim, RefDetail.Details, " + 
103
                      		" RefDetail.SecondarySources, Rank.RankAbbrev, Rank.Rank " +
104
                      		facultativCols +
105
                    " FROM Name LEFT OUTER JOIN RefDetail ON Name.NomRefDetailFk = RefDetail.RefDetailId AND  " +
106
                    	" Name.NomRefFk = RefDetail.RefFk " +
107
                    	" LEFT OUTER JOIN Rank ON Name.RankFk = Rank.rankID " + 
108
                " WHERE name.nameId IN ("+ID_LIST_TOKEN+") ";
109
					//strQuery += " AND RefDetail.PreliminaryFlag = 1 ";
110
					//strQuery += " AND Name.Created_When > '03.03.2004' ";
111
		return strRecordQuery +  "";
112
	}
113

    
114

    
115

    
116
	@Override
117
	protected void doInvoke(BerlinModelImportState state) {
118
		//update rank labels if necessary
119
		String strAbbrev = state.getConfig().getInfrGenericRankAbbrev();
120
		Rank rank = Rank.INFRAGENERICTAXON();
121
		testRankAbbrev(strAbbrev, rank);
122
		
123
		strAbbrev = state.getConfig().getInfrSpecificRankAbbrev();
124
		rank = Rank.INFRASPECIFICTAXON();
125
		testRankAbbrev(strAbbrev, rank);
126
		
127
		super.doInvoke(state);
128
	}
129

    
130
	private void testRankAbbrev(String strAbbrev, Rank rank) {
131
		if (strAbbrev != null){
132
			Representation rep = rank.getRepresentation(Language.ENGLISH());
133
			rep.setAbbreviatedLabel(strAbbrev);
134
			getTermService().saveOrUpdate(rank);
135
		}
136
	}
137

    
138
	@Override
139
	public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state) {
140
		String dbAttrName;
141
		String cdmAttrName;
142
		boolean success = true ;
143
		BerlinModelImportConfigurator config = state.getConfig();
144
		Set<TaxonNameBase> namesToSave = new HashSet<TaxonNameBase>();
145
		Map<String, Team> teamMap = (Map<String, Team>) partitioner.getObjectMap(BerlinModelAuthorTeamImport.NAMESPACE);
146
			
147
		ResultSet rs = partitioner.getResultSet();
148
			
149
		try {
150
			int i = 0;
151
			//for each reference
152
			while (rs.next()){
153
				
154
				if ((i++ % modCount) == 0 && i != 1 ){ logger.info("Names handled: " + (i-1));}
155
				
156
				//create TaxonName element
157
				int nameId = rs.getInt("nameId");
158
				Object authorFk = rs.getObject("AuthorTeamFk");
159
				Object exAuthorFk = rs.getObject("ExAuthorTeamFk");
160
				Object basAuthorFk = rs.getObject("BasAuthorTeamFk");
161
				Object exBasAuthorFk = rs.getObject("ExBasAuthorTeamFk");
162
				String strCultivarGroupName = rs.getString("CultivarGroupName");
163
				String strCultivarName = rs.getString("CultivarName");
164
				String nameCache = rs.getString("NameCache");
165
				String fullNameCache = rs.getString("FullNameCache");
166
				String uuid = null;
167
				if (resultSetHasColumn(rs,"UUID")){
168
					uuid = rs.getString("UUID");
169
				}
170
				
171
				try {
172
					
173
					//define rank
174
					boolean useUnknownRank = true;
175
					Rank rank = BerlinModelTransformer.rankId2Rank(rs, useUnknownRank, config.isSwitchSpeciesGroup());
176
					
177
					boolean allowInfraSpecTaxonRank = state.getConfig().isAllowInfraSpecTaxonRank() ;
178
					if (rank == null || rank.equals(Rank.UNKNOWN_RANK()) || (rank.equals(Rank.INFRASPECIFICTAXON()) && ! allowInfraSpecTaxonRank)){
179
						rank = handleProlesAndRaceSublusus(state, rs, rank);
180
					}
181
					
182
					if (rank.getId() == 0){
183
						getTermService().save(rank);
184
						logger.warn("Rank did not yet exist: " +  rank.getTitleCache());
185
					}
186
					
187
					//create TaxonNameBase
188
					TaxonNameBase<?,?> taxonNameBase;
189
					if (config.getNomenclaturalCode() != null){
190
						taxonNameBase = config.getNomenclaturalCode().getNewTaxonNameInstance(rank);
191
						//check cultivar
192
						if (taxonNameBase instanceof BotanicalName){
193
							if (isNotBlank(strCultivarGroupName) && isNotBlank(strCultivarName)){
194
								taxonNameBase = CultivarPlantName.NewInstance(rank);
195
							}
196
						}
197
					}else{
198
						taxonNameBase = NonViralName.NewInstance(rank);
199
					}
200
					if (uuid != null){
201
						taxonNameBase.setUuid(UUID.fromString(uuid));
202
					}
203
					
204
					if (rank == null){
205
						//TODO rank should never be null or a more sophisticated algorithm has to be implemented for genus/supraGenericName
206
						logger.warn("Rank is null. Genus epethiton was imported. May be wrong");
207
						success = false;
208
					}
209
					
210
					//epithets
211
					if (rank != null && rank.isSupraGeneric()){
212
						dbAttrName = "supraGenericName";
213
					}else{
214
						dbAttrName = "genus";
215
					}
216
					cdmAttrName = "genusOrUninomial";
217
					success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName, BLANK_TO_NULL);
218
					
219
					dbAttrName = "genusSubdivisionEpi";
220
					cdmAttrName = "infraGenericEpithet";
221
					success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName, BLANK_TO_NULL);
222
					
223
					dbAttrName = "speciesEpi";
224
					cdmAttrName = "specificEpithet";
225
					success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName, BLANK_TO_NULL);
226
					
227
	
228
					dbAttrName = "infraSpeciesEpi";
229
					cdmAttrName = "infraSpecificEpithet";
230
					success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName, BLANK_TO_NULL);
231
					
232
					dbAttrName = "unnamedNamePhrase";
233
					cdmAttrName = "appendedPhrase";
234
					success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName, BLANK_TO_NULL);
235
					
236
					//Details
237
					dbAttrName = "details";
238
					cdmAttrName = "nomenclaturalMicroReference";
239
					success &= ImportHelper.addStringValue(rs, taxonNameBase, dbAttrName, cdmAttrName, BLANK_TO_NULL);
240
	
241
					//nomRef
242
					success &= makeNomenclaturalReference(config, taxonNameBase, nameId, rs, partitioner);
243
	
244
					//Source_Acc
245
					boolean colExists = true;
246
					try {
247
						colExists = state.getConfig().getSource().checkColumnExists("Name", "Source_Acc");
248
					} catch (DatabaseTypeNotSupportedException e) {
249
						logger.debug("Source does not support 'checkColumnExists'");
250
					}
251
					if (colExists){
252
						String sourceAcc = rs.getString("Source_Acc");
253
						if (StringUtils.isNotBlank(sourceAcc)){
254
							ExtensionType sourceAccExtensionType = getExtensionType(state, SOURCE_ACC_UUID, "Source_Acc","Source_Acc","Source_Acc");
255
							Extension datesExtension = Extension.NewInstance(taxonNameBase, sourceAcc, sourceAccExtensionType);
256
						}
257
					}
258
					
259
					//created, notes
260
					boolean excludeUpdated = true;
261
					success &= doIdCreatedUpdatedNotes(state, taxonNameBase, rs, nameId, NAMESPACE, excludeUpdated, false);
262
	
263
					//NonViralName
264
					if (taxonNameBase instanceof NonViralName){
265
						NonViralName<?> nonViralName = (NonViralName<?>)taxonNameBase;
266
						
267
						//authorTeams
268
						if (teamMap != null ){
269
							nonViralName.setCombinationAuthorTeam(getAuthorTeam(teamMap, authorFk, nameId, config));
270
							nonViralName.setExCombinationAuthorTeam(getAuthorTeam(teamMap, exAuthorFk, nameId, config));
271
							nonViralName.setBasionymAuthorTeam(getAuthorTeam(teamMap, basAuthorFk, nameId, config));
272
							nonViralName.setExBasionymAuthorTeam(getAuthorTeam(teamMap, exBasAuthorFk, nameId, config));
273
						}else{
274
							logger.warn("TeamMap is null");
275
							success = false;
276
						}
277
					}//nonviralName
278
					
279
	
280
					
281
					//zoologicalName
282
					if (taxonNameBase instanceof ZoologicalName){
283
						ZoologicalName zooName = (ZoologicalName)taxonNameBase;
284
						makeZoologialName(rs, zooName, nameId);
285
					}
286
					//botanicalName  
287
					else if (taxonNameBase instanceof BotanicalName){
288
						BotanicalName botName = (BotanicalName)taxonNameBase;
289
						success &= makeBotanicalNamePart(rs, botName) ;
290
						
291
					}
292
					
293
	//				dbAttrName = "preliminaryFlag";
294
					Boolean preliminaryFlag = rs.getBoolean("PreliminaryFlag");
295
					Boolean hybridFormulaFlag = rs.getBoolean("HybridFormulaFlag");  //hybrid flag does not lead to cache update in Berlin Model
296
					if (preliminaryFlag == true || hybridFormulaFlag == true){
297
						//Computes all caches and sets 
298
						taxonNameBase.setTitleCache(fullNameCache, true);
299
						taxonNameBase.setFullTitleCache(taxonNameBase.getFullTitleCache(), true);
300
						if (taxonNameBase instanceof NonViralName){
301
							NonViralName<?> nvn = (NonViralName<?>)taxonNameBase;
302
							nvn.setNameCache(nameCache, true);
303
							nvn.setAuthorshipCache(nvn.getAuthorshipCache(), true);
304
						}
305
					}
306
					namesToSave.add(taxonNameBase);
307
					
308
				}
309
				catch (UnknownCdmTypeException e) {
310
					logger.warn("Name with id " + nameId + " has unknown rankId " + " and could not be saved.");
311
					success = false; 
312
				}
313
				
314
			} //while rs.hasNext()
315
		} catch (SQLException e) {
316
			logger.error("SQLException:" +  e);
317
			return false;
318
		}
319

    
320
			
321
//		logger.info( i + " names handled");
322
		getNameService().save(namesToSave);
323
		return success;
324
	}
325

    
326

    
327
	private Rank handleProlesAndRaceSublusus(BerlinModelImportState state, ResultSet rs, Rank rank) throws SQLException {
328
		Rank result;
329
		String rankAbbrev = rs.getString("RankAbbrev");
330
//		String rankStr = rs.getString("Rank");
331
		if (CdmUtils.nullSafeEqual(rankAbbrev, "prol.") ){
332
			result = Rank.PROLES();
333
		}else if(CdmUtils.nullSafeEqual(rankAbbrev, "race")){
334
			result = Rank.RACE();
335
		}else if(CdmUtils.nullSafeEqual(rankAbbrev, "sublusus")){
336
			result = Rank.SUBLUSUS();
337
		}else{
338
			result = rank;
339
			logger.warn("Unhandled rank: " + rankAbbrev);
340
		}
341
		return result;
342
	}
343
	
344
	@Override
345
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, BerlinModelImportState state) {
346
		String nameSpace;
347
		Class<?> cdmClass;
348
		Set<String> idSet;
349
			
350
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
351
		
352
		try{
353
			Set<String> teamIdSet = new HashSet<String>();
354
			Set<String> referenceIdSet = new HashSet<String>();
355
			Set<String> refDetailIdSet = new HashSet<String>();
356
			while (rs.next()){
357
				handleForeignKey(rs, teamIdSet, "AuthorTeamFk");
358
				handleForeignKey(rs, teamIdSet, "ExAuthorTeamFk");
359
				handleForeignKey(rs, teamIdSet, "BasAuthorTeamFk");
360
				handleForeignKey(rs, teamIdSet, "ExBasAuthorTeamFk");
361
				handleForeignKey(rs, referenceIdSet, "nomRefFk");
362
				handleForeignKey(rs, refDetailIdSet, "nomRefDetailFk");
363
			}
364
			
365
			//team map
366
			nameSpace = BerlinModelAuthorTeamImport.NAMESPACE;
367
			cdmClass = Team.class;
368
			idSet = teamIdSet;
369
			Map<String, Person> teamMap = (Map<String, Person>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
370
			result.put(nameSpace, teamMap);
371

    
372
			//reference map
373
			nameSpace = BerlinModelReferenceImport.REFERENCE_NAMESPACE;
374
			cdmClass = Reference.class;
375
			idSet = referenceIdSet;
376
			Map<String, Reference> referenceMap = (Map<String, Reference>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
377
			result.put(nameSpace, referenceMap);
378
			
379
			//refDetail map
380
			nameSpace = BerlinModelRefDetailImport.REFDETAIL_NAMESPACE;
381
			cdmClass = Reference.class;
382
			idSet = refDetailIdSet;
383
			Map<String, Reference> refDetailMap= (Map<String, Reference>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
384
			result.put(nameSpace, refDetailMap);
385
			
386
		} catch (SQLException e) {
387
			throw new RuntimeException(e);
388
		}
389
		return result;
390
	}
391
	
392
	private boolean makeZoologialName(ResultSet rs, ZoologicalName zooName, int nameId) 
393
					throws SQLException{
394
		boolean success = true;
395
		//publicationYear
396
		String authorTeamYear = rs.getString("authorTeamYear");
397
		try {
398
			if (! "".equals(CdmUtils.Nz(authorTeamYear).trim())){
399
				Integer publicationYear  = Integer.valueOf(authorTeamYear.trim());
400
				zooName.setPublicationYear(publicationYear);
401
			}
402
		} catch (NumberFormatException e) {
403
			logger.warn("authorTeamYear could not be parsed for taxonName: "+ nameId);
404
		}
405
		//original publication year
406
		String basAuthorTeamYear = rs.getString("basAuthorTeamYear");
407
		try {
408
			if (! "".equals(CdmUtils.Nz(basAuthorTeamYear).trim())){
409
				Integer OriginalPublicationYear  = Integer.valueOf(basAuthorTeamYear.trim());
410
				zooName.setOriginalPublicationYear(OriginalPublicationYear);
411
			}
412
		} catch (NumberFormatException e) {
413
			logger.warn("basAuthorTeamYear could not be parsed for taxonName: "+ nameId);
414
		}
415
		return success;
416
	}
417
	
418
	private boolean makeBotanicalNamePart(ResultSet rs, BotanicalName botanicalName)throws SQLException{
419
		boolean success = true;
420
		String dbAttrName;
421
		String cdmAttrName;
422
		
423
		dbAttrName = "HybridFormulaFlag";
424
		cdmAttrName = "isHybridFormula";
425
		success &= ImportHelper.addBooleanValue(rs, botanicalName, dbAttrName, cdmAttrName);
426

    
427
		dbAttrName = "MonomHybFlag";
428
		cdmAttrName = "isMonomHybrid";
429
		success &= ImportHelper.addBooleanValue(rs, botanicalName, dbAttrName, cdmAttrName);
430

    
431
		dbAttrName = "BinomHybFlag";
432
		cdmAttrName = "isBinomHybrid";
433
		success &= ImportHelper.addBooleanValue(rs, botanicalName, dbAttrName, cdmAttrName);
434

    
435
		dbAttrName = "TrinomHybFlag";
436
		cdmAttrName = "isTrinomHybrid";
437
		success &= ImportHelper.addBooleanValue(rs, botanicalName, dbAttrName, cdmAttrName);
438

    
439
		try {
440
			String strCultivarGroupName = rs.getString("CultivarGroupName");
441
			String strCultivarName = rs.getString("CultivarName");
442
			if (botanicalName instanceof CultivarPlantName){
443
				CultivarPlantName cultivarName = (CultivarPlantName)botanicalName;
444
				String concatCultivarName = CdmUtils.concat("-", strCultivarName, strCultivarGroupName);
445
				if (CdmUtils.isNotEmpty(strCultivarGroupName) && CdmUtils.isNotEmpty(strCultivarName)){
446
					logger.warn("CDM does not support cultivarGroupName and CultivarName together: " + concatCultivarName);
447
				}
448
				cultivarName.setCultivarName(strCultivarGroupName);
449
			}
450
		} catch (SQLException e) {
451
			throw e;
452
		}
453
		return success;
454
	}
455
	
456
	
457
	private boolean makeNomenclaturalReference(IImportConfigurator config, TaxonNameBase taxonNameBase, 
458
					int nameId, ResultSet rs, ResultSetPartitioner partitioner) throws SQLException{
459
		Map<String, Reference> refMap = partitioner.getObjectMap(BerlinModelReferenceImport.REFERENCE_NAMESPACE);
460
		Map<String, Reference> refDetailMap = partitioner.getObjectMap(BerlinModelRefDetailImport.REFDETAIL_NAMESPACE);
461
		
462
		Object nomRefFkObj = rs.getObject("NomRefFk");
463
		Object nomRefDetailFkObj = rs.getObject("NomRefDetailFk");
464
		boolean refDetailPrelim = rs.getBoolean("RefDetailPrelim");
465
		
466
		boolean success = true;
467
		//nomenclatural Reference
468
		if (refMap != null){
469
			if (nomRefFkObj != null){
470
				String nomRefFk = String.valueOf(nomRefFkObj);
471
				String nomRefDetailFk = String.valueOf(nomRefDetailFkObj);
472
				//get nomRef
473
				Reference<?> nomReference = 
474
					getReferenceFromMaps(refDetailMap, refMap, nomRefDetailFk, nomRefFk);
475
				
476
				
477
				//setNomRef
478
				if (nomReference == null ){
479
					//TODO
480
					if (! config.isIgnoreNull()){
481
						logger.warn("Nomenclatural reference (nomRefFk = " + nomRefFk + ") for TaxonName (nameId = " + nameId + ")"+
482
							" was not found in reference store. Nomenclatural reference was not set!!");
483
					}
484
				}else{
485
					if (! INomenclaturalReference.class.isAssignableFrom(nomReference.getClass())){
486
						logger.warn("Nomenclatural reference (nomRefFk = " + nomRefFk + ") for TaxonName (nameId = " + nameId + ")"+
487
								" is not assignable from INomenclaturalReference. (Class = " + nomReference.getClass()+ ")");
488
					}
489
					nomReference.setNomenclaturallyRelevant(true);
490
					taxonNameBase.setNomenclaturalReference(nomReference);
491
				}
492
			}
493
		}
494
		return success;
495
	}
496
	
497
	private static TeamOrPersonBase getAuthorTeam(Map<String, Team> teamMap, Object teamIdObject, int nameId, BerlinModelImportConfigurator bmiConfig){
498
		if (teamIdObject == null){
499
			return null;
500
		}else {
501
			String teamId = String.valueOf(teamIdObject);
502
			TeamOrPersonBase author = teamMap.get(teamId);
503
			if (author == null){
504
				//TODO
505
				if (!bmiConfig.isIgnoreNull() && ! (teamId.equals(0) && bmiConfig.isIgnore0AuthorTeam()) ){ 
506
					logger.warn("AuthorTeam (teamId = " + teamId + ") for TaxonName (nameId = " + nameId + ")"+
507
				" was not found in authorTeam store. Relation was not set!!");}
508
				return null;
509
			}else{
510
				return author;
511
			}
512
		}
513
	}
514
	
515
	@Override
516
	protected boolean doCheck(BerlinModelImportState state){
517
		IOValidator<BerlinModelImportState> validator = new BerlinModelTaxonNameImportValidator();
518
		return validator.validate(state);
519
	}
520
	
521
	protected boolean isIgnore(BerlinModelImportState state){
522
		return ! state.getConfig().isDoTaxonNames();
523
	}
524

    
525

    
526

    
527

    
528

    
529
	
530
//FOR FUTURE USE , DONT DELETE	
531
//	new CdmStringMapper("nameId", "nameId"),
532
//	new CdmStringMapper("rankFk", "rankFk"),
533
//	new CdmStringMapper("nameCache", "nameCache"),
534
//	new CdmStringMapper("unnamedNamePhrase", "unnamedNamePhrase"),
535
//	new CdmStringMapper("fullNameCache", "fullNameCache"),
536
//	new CdmStringMapper("preliminaryFlag", "preliminaryFlag"),
537
//	new CdmStringMapper("supragenericName", "supragenericName"),
538
//	new CdmStringMapper("genus", "genus"),
539
//	new CdmStringMapper("genusSubdivisionEpi", "genusSubdivisionEpi"),
540
//	new CdmStringMapper("speciesEpi", "speciesEpi"),
541
//	new CdmStringMapper("infraSpeciesEpi", "infraSpeciesEpi"),
542
//	new CdmStringMapper("authorTeamFk", "authorTeamFk"),
543
//	new CdmStringMapper("exAuthorTeamFk", "exAuthorTeamFk"),
544
//	new CdmStringMapper("basAuthorTeamFk", "basAuthorTeamFk"),
545
//	new CdmStringMapper("exBasAuthorTeamFk", "exBasAuthorTeamFk"),
546
//	new CdmStringMapper("hybridFormulaFlag", "hybridFormulaFlag"),
547
//	new CdmStringMapper("monomHybFlag", "monomHybFlag"),
548
//	new CdmStringMapper("binomHybFlag", "binomHybFlag"),
549
//	new CdmStringMapper("trinomHybFlag", "trinomHybFlag"),
550
//	new CdmStringMapper("cultivarGroupName", "cultivarGroupName"),
551
//	new CdmStringMapper("cultivarName", "cultivarName"),
552
//	new CdmStringMapper("nomRefFk", "nomRefFk"),
553
//	new CdmStringMapper("nomRefDetailFk", "nomRefDetailFk"),
554
//	new CdmStringMapper("nameSourceRefFk", "nameSourceRefFk"),
555
//	new CdmStringMapper("source_Acc", "source_Acc"),
556
//	new CdmStringMapper("created_When", "created_When"),
557
//	new CdmStringMapper("created_Who", "created_Who"),
558
//	new CdmStringMapper("notes", "notes"),
559
//	new CdmStringMapper("parsingComments", "parsingComments"),
560
//	new CdmStringMapper("oldNomRefFk", "oldNomRefFk"),
561
//	new CdmStringMapper("oldNomRefDetailFk", "oldNomRefDetailFk"),
562
//	new CdmStringMapper("updated_Who", "updated_Who"),
563
//	new CdmStringMapper("orthoProjection", "orthoProjection"),
564

    
565
	
566
}
(15-15/21)