Revision 0c392a47
Added by Andreas Müller about 12 years ago
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
latest updates to PESI export