Project

General

Profile

« Previous | Next » 

Revision 0c392a47

Added by Andreas Müller about 12 years ago

latest updates to PESI export

View differences:

cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/out/PesiRelTaxonExport.java
24 24
import eu.etaxonomy.cdm.io.common.Source;
25 25
import eu.etaxonomy.cdm.io.common.mapping.out.MethodMapper;
26 26
import eu.etaxonomy.cdm.model.common.CdmBase;
27
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
27 28
import eu.etaxonomy.cdm.model.common.RelationshipBase;
28 29
import eu.etaxonomy.cdm.model.name.NameRelationship;
29 30
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
......
235 236
		Taxon childNodeTaxon = childNode.getTaxon();
236 237
		if (childNodeTaxon != null) {
237 238
			// TaxonRelationships
238
			Taxon taxon = childNodeTaxon;
239
			Set<TaxonRelationship> taxonRelations = taxon.getRelationsToThisTaxon();
240
			for (TaxonRelationship taxonRelationship : taxonRelations) {
239
			success &= saveTaxonRelationships(state, childNodeTaxon);
240
			// TaxonNameRelationships
241
			success &= saveNameRelationships(state, childNodeTaxon);
242
			// SynonymRelationships
243
			success &= saveSynonymAndSynNameRelationships(state, childNodeTaxon);
244
		}
245
		return success;
246
		
247
	}
248

  
249
	private boolean saveSynonymAndSynNameRelationships(PesiExportState state, Taxon childNodeTaxon) {
250
		boolean success = true;
251
		for (SynonymRelationship synRel : childNodeTaxon.getSynonymRelations()) { // synonyms of accepted taxon
252
			Synonym synonym = synRel.getSynonym();
253
			TaxonNameBase<?,?> synonymTaxonName = synonym.getName();
254
			if (! isPesiTaxon(synonym)){
255
				logger.warn("Synonym " + synonym.getId() + " of synonym relation " + synRel.getId() + " is not a PESI taxon. Can't export relationship");
256
				continue;
257
			}
258
			
259
			// Store synonym data in Taxon table
260
			invokeSynonyms(state, synonymTaxonName);
261

  
262
			
263
			
264
			Set<SynonymRelationship> synonymRelations = synonym.getSynonymRelations();
265
			state.setCurrentFromObject(synonym);
266
			for (SynonymRelationship synonymRelationship : synonymRelations) {  //needed? Maybe to make sure that there are no partial synonym relations missed ??
241 267
				try {
242
					if (neededValuesNotNull(taxonRelationship, state)) {
268
					if (neededValuesNotNull(synonymRelationship, state)) {
243 269
						doCount(count++, modCount, pluralString);
244
						success &= mapping.invoke(taxonRelationship);
270
						success &= mapping.invoke(synonymRelationship);
271
						
245 272
					}
246 273
				} catch (SQLException e) {
247
					logger.error("TaxonRelationship could not be created for this TaxonRelation (" + taxonRelationship.getUuid() + "): " + e.getMessage());
274
					logger.error("SynonymRelationship (" + synonymRelationship.getUuid() + ") could not be stored : " + e.getMessage());
248 275
				}
249 276
			}
250
			
251
//			// TaxonNameRelationships
252
			TaxonNameBase<?,?> childNodeTaxonName = childNodeTaxon.getName();
253
			
254
			if (childNodeTaxonName != null) {
255

  
256
				Set<NameRelationship> nameRelations = childNodeTaxonName.getRelationsFromThisName();
257
				for (NameRelationship nameRelation : nameRelations) {
258
					try {
259
						if (neededValuesNotNull(nameRelation, state)) {
260
							doCount(count++, modCount, pluralString);
261
							success &= mapping.invoke(nameRelation);
262
						}
263
					} catch (SQLException e) {
264
						logger.error("NameRelationship " + nameRelation.getUuid() + " for " + nameRelation.getFromName().getTitleCache() + " and " + nameRelation.getToName().getTitleCache() + " could not be created: " + e.getMessage());
265
					}
266
				}
267 277

  
268
			}
269
			
270
			// SynonymRelationships
271
			Set<Synonym> synonyms = childNodeTaxon.getSynonyms(); // synonyms of accepted taxon
272
			for (Synonym synonym : synonyms) {
273
				TaxonNameBase<?,?> synonymTaxonName = synonym.getName();
274
				
275
				// Store synonym data in Taxon table
276
				invokeSynonyms(state, synonymTaxonName);
277

  
278
				Set<SynonymRelationship> synonymRelations = synonym.getSynonymRelations();
279
				for (SynonymRelationship synonymRelationship : synonymRelations) {
280
					try {
281
						if (neededValuesNotNull(synonymRelationship, state)) {
282
							doCount(count++, modCount, pluralString);
283
							success &= mapping.invoke(synonymRelationship);
284
							
285
						}
286
					} catch (SQLException e) {
287
						logger.error("SynonymRelationship could not be created for this SynonymRelation (" + synonymRelationship.getUuid() + "): " + e.getMessage());
278
			// SynonymNameRelationship
279
			success &= saveNameRelationships(state, synonym);
280
		}
281
		return success;
282
	}
283

  
284
	private boolean saveNameRelationships(PesiExportState state, TaxonBase taxonBase) {
285
		boolean success = true;
286
		TaxonNameBase<?,?> childNodeTaxonName = taxonBase.getName();
287

  
288
		//from relations
289
		Set<NameRelationship> nameRelations = childNodeTaxonName.getRelationsFromThisName();
290
		state.setCurrentFromObject(taxonBase);
291
		boolean isFrom = true;
292
		success &= saveOneSideNameRelation(state, isFrom, nameRelations);
293
		
294
		//toRelations
295
		nameRelations = childNodeTaxonName.getRelationsToThisName();
296
		state.setCurrentToObject(taxonBase);
297
		isFrom = false;
298
		success &= saveOneSideNameRelation(state, isFrom, nameRelations);
299
		
300
		return success;
301
	}
302

  
303
	private boolean saveOneSideNameRelation(PesiExportState state, boolean isFrom, Set<NameRelationship> nameRelations) {
304
		boolean success = true;
305
		for (NameRelationship nameRelation : nameRelations) {
306
			try {
307
				TaxonNameBase<?,?> relatedName = isFrom ? nameRelation.getToName(): nameRelation.getFromName();
308
				if ( isPurePesiName(relatedName)){
309
					success &= checkAndInvokeNameRelation(state, nameRelation, relatedName, isFrom);
310
				}else{
311
					for (TaxonBase<?> relatedTaxon : getPesiTaxa(relatedName)){
312
						success &= checkAndInvokeNameRelation(state, nameRelation, relatedTaxon, isFrom);
288 313
					}
289 314
				}
315
			} catch (SQLException e) {
316
				logger.error("NameRelationship " + nameRelation.getUuid() + " for " + nameRelation.getFromName().getTitleCache() + " and " + nameRelation.getToName().getTitleCache() + " could not be created: " + e.getMessage());
317
				success = false;
318
			}
319
		}
320
		return success;
321
	}
290 322

  
291
//				// SynonymNameRelationship
292
//				Set<NameRelationship> nameRelations = synonymTaxonName.getRelationsFromThisName();
293
//				for (NameRelationship nameRelation : nameRelations) {
294
//					try {
295
//						if (neededValuesNotNull(nameRelation, state)) {
296
//							doCount(count++, modCount, pluralString);
297
//							success &= mapping.invoke(nameRelation);
298
//						}
299
//					} catch (SQLException e) {
300
//						logger.error("NameRelationship could not be created for this NameRelation (" + nameRelation.getUuid() + "): " + e.getMessage());
301
//					}
302
//				}
323
	private boolean checkAndInvokeNameRelation(PesiExportState state, NameRelationship nameRelation, IdentifiableEntity<?> relatedObject, boolean isFrom) throws SQLException {
324
		boolean success = true;
325
		if (isFrom){
326
			state.setCurrentToObject(relatedObject);
327
		}else{
328
			state.setCurrentFromObject(relatedObject);
329
		}
330
		if (neededValuesNotNull(nameRelation, state)) {
331
			doCount(count++, modCount, pluralString);
332
			success &= mapping.invoke(nameRelation);
333
		}
334
		return success;
335
	}
303 336

  
337
	private boolean saveTaxonRelationships(PesiExportState state, Taxon childNodeTaxon) {
338
		boolean success = true;
339
		Taxon taxon = childNodeTaxon;
340
		Set<TaxonRelationship> taxonRelations = taxon.getRelationsToThisTaxon();
341
		for (TaxonRelationship taxonRelationship : taxonRelations) {
342
			try {
343
				if (neededValuesNotNull(taxonRelationship, state)) {
344
					doCount(count++, modCount, pluralString);
345
					success &= mapping.invoke(taxonRelationship);
346
				}
347
			} catch (SQLException e) {
348
				logger.error("TaxonRelationship could not be created for this TaxonRelation (" + taxonRelationship.getUuid() + "): " + e.getMessage());
304 349
			}
305
			
306 350
		}
307 351
		return success;
308
		
309 352
	}
310 353

  
311 354
	/**
......
482 525
	 * @return The database key of an object in the given relationship.
483 526
	 */
484 527
	private static Integer getObjectFk(RelationshipBase<?, ?, ?> relationship, PesiExportState state, boolean isFrom) {
485
		TaxonBase<?> taxon = null;
528
		TaxonBase<?> taxonBase = null;
486 529
		if (relationship.isInstanceOf(TaxonRelationship.class)) {
487 530
			TaxonRelationship tr = (TaxonRelationship)relationship;
488
			taxon = (isFrom) ? tr.getFromTaxon():  tr.getToTaxon();
531
			taxonBase = (isFrom) ? tr.getFromTaxon():  tr.getToTaxon();
489 532
		} else if (relationship.isInstanceOf(SynonymRelationship.class)) {
490 533
			SynonymRelationship sr = (SynonymRelationship)relationship;
491
			taxon = (isFrom) ? sr.getSynonym() : sr.getAcceptedTaxon();
534
			taxonBase = (isFrom) ? sr.getSynonym() : sr.getAcceptedTaxon();
492 535
		} else if (relationship.isInstanceOf(NameRelationship.class)) {
493
			NameRelationship nr = (NameRelationship)relationship;
494
			TaxonNameBase<?,?> taxonName = (isFrom) ? nr.getFromName() : nr.getToName();
495
			return state.getDbId(taxonName);
536
			if (isFrom){
537
				return state.getDbId(state.getCurrentFromObject());
538
			}else{
539
				return state.getDbId(state.getCurrentToObject());
540
			}
496 541
		}
497
		if (taxon != null) {
498
			if (! isPesiTaxon(taxon)){
499
				logger.warn("Related taxon is not a PESI taxon. Taxon: " + taxon.getId() + "/" + taxon.getUuid() + "; TaxonRel: " +  relationship.getId() + "(" + relationship.getType().getTitleCache() + ")");
542
		if (taxonBase != null) {
543
			if (! isPesiTaxon(taxonBase)){
544
				logger.warn("Related taxonBase is not a PESI taxon. Taxon: " + taxonBase.getId() + "/" + taxonBase.getUuid() + "; TaxonRel: " +  relationship.getId() + "(" + relationship.getType().getTitleCache() + ")");
500 545
				return null;
501 546
			}else{
502
				return state.getDbId(taxon);	
547
				return state.getDbId(taxonBase);	
503 548
			}
504 549
			
505 550
		}

Also available in: Unified diff