Revision ff5db610
Added by Katja Luther over 4 years ago
cdm-pesi/src/main/java/eu/etaxonomy/cdm/app/pesi/merging/FaunaEuErmsFindIdenticalNamesActivator.java | ||
---|---|---|
3 | 3 |
import java.io.FileWriter; |
4 | 4 |
import java.io.IOException; |
5 | 5 |
import java.util.ArrayList; |
6 |
import java.util.HashSet; |
|
6 | 7 |
import java.util.Iterator; |
7 | 8 |
import java.util.List; |
8 | 9 |
import java.util.Set; |
10 |
import java.util.UUID; |
|
9 | 11 |
|
10 | 12 |
import eu.etaxonomy.cdm.api.application.CdmApplicationController; |
11 | 13 |
import eu.etaxonomy.cdm.app.common.CdmDestinations; |
14 |
import eu.etaxonomy.cdm.app.util.TestDatabase; |
|
12 | 15 |
import eu.etaxonomy.cdm.database.DbSchemaValidation; |
13 | 16 |
import eu.etaxonomy.cdm.database.ICdmDataSource; |
14 | 17 |
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper; |
... | ... | |
18 | 21 |
import eu.etaxonomy.cdm.model.name.IZoologicalName; |
19 | 22 |
import eu.etaxonomy.cdm.model.name.Rank; |
20 | 23 |
import eu.etaxonomy.cdm.model.name.TaxonName; |
24 |
import eu.etaxonomy.cdm.model.taxon.Classification; |
|
21 | 25 |
import eu.etaxonomy.cdm.model.taxon.Taxon; |
22 | 26 |
import eu.etaxonomy.cdm.model.taxon.TaxonNode; |
27 |
import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto; |
|
23 | 28 |
|
24 | 29 |
public class FaunaEuErmsFindIdenticalNamesActivator { |
25 | 30 |
|
26 |
static final ICdmDataSource faunaEuropaeaSource = CdmDestinations.localH2(); |
|
27 |
//static final ICdmDataSource ermsSource = CdmDestinations.cdm_test_andreasM();
|
|
31 |
//static final ICdmDataSource faunaEuropaeaSource = CdmDestinations.localH2();
|
|
32 |
static final ICdmDataSource faunaEuropaeaSource = CdmDestinations.cdm_test_local_faunaEu_mysql();
|
|
28 | 33 |
|
29 | 34 |
//TODO hole aus beiden DB alle TaxonNameBases |
30 | 35 |
|
... | ... | |
59 | 64 |
propertyPaths.add("taxonBases.taxonNodes.parent.*"); |
60 | 65 |
propertyPaths.add("taxonBases.taxonNodes.parent.taxon.name.*"); |
61 | 66 |
System.err.println("Start getIdenticalNames..."); |
62 |
List<TaxonName> namesOfIdenticalTaxa = appCtrFaunaEu.getTaxonService().findIdenticalTaxonNameIds(propertyPaths);
|
|
67 |
List<UUID> namesOfIdenticalTaxa = appCtrFaunaEu.getTaxonService().findIdenticalTaxonNameIds(propertyPaths);
|
|
63 | 68 |
//List<UUID> namesOfIdenticalTaxa = appCtrFaunaEu.getTaxonService().findIdenticalTaxonNameIds(propertyPaths); |
64 | 69 |
|
65 | 70 |
System.err.println("first name: " + namesOfIdenticalTaxa.get(0) + " " + namesOfIdenticalTaxa.size()); |
66 |
TaxonName zooName = namesOfIdenticalTaxa.get(0); |
|
67 |
System.err.println(zooName + " nr of taxa " + namesOfIdenticalTaxa.size()); |
|
71 |
//TaxonName zooName = namesOfIdenticalTaxa.get(0);
|
|
72 |
//System.err.println(zooName + " nr of taxa " + namesOfIdenticalTaxa.size());
|
|
68 | 73 |
//TaxonNameComparator taxComp = new TaxonNameComparator(); |
69 | 74 |
|
70 | 75 |
//Collections.sort(namesOfIdenticalTaxa,taxComp); |
... | ... | |
275 | 280 |
writer.append("synonym"); |
276 | 281 |
} |
277 | 282 |
writer.append(';'); |
278 |
writer.append(merging.getPhylumInFaunaEu()); |
|
283 |
writer.append(merging.getPhylumInFaunaEu().getTaxonTitleCache());
|
|
279 | 284 |
writer.append(';'); |
280 | 285 |
writer.append(merging.getParentStringInFaunaEu()); |
281 | 286 |
writer.append(';'); |
... | ... | |
299 | 304 |
} |
300 | 305 |
|
301 | 306 |
writer.append(';'); |
302 |
writer.append(merging.getPhylumInErms()); |
|
307 |
writer.append(merging.getPhylumInErms().getTaxonTitleCache());
|
|
303 | 308 |
writer.append(';'); |
304 | 309 |
writer.append(merging.getParentStringInErms()); |
305 | 310 |
writer.append(';'); |
... | ... | |
308 | 313 |
} |
309 | 314 |
|
310 | 315 |
|
311 |
private List<FaunaEuErmsMerging> createMergeObjects(List<TaxonName> names, CdmApplicationController appCtr){
|
|
316 |
private List<FaunaEuErmsMerging> createMergeObjects(List<UUID> uuids, CdmApplicationController appCtr){
|
|
312 | 317 |
|
313 | 318 |
List<FaunaEuErmsMerging> merge = new ArrayList<>(); |
314 | 319 |
TaxonName zooName, zooName2; |
315 | 320 |
FaunaEuErmsMerging mergeObject; |
316 | 321 |
String idInSource1; |
317 |
for (int i = 0; i<names.size()-1; i=i+2){ |
|
318 |
zooName = names.get(i); |
|
319 |
zooName2 = names.get(i+1); |
|
320 |
mergeObject = new FaunaEuErmsMerging(); |
|
321 |
//TODO:überprüfen, ob die beiden Namen identisch sind und aus unterschiedlichen DB kommen |
|
322 |
|
|
323 |
//getPhylum |
|
324 |
String phylum1 = null; |
|
325 |
if (!zooName.getRank().isHigher(Rank.PHYLUM())){ |
|
326 |
phylum1 =appCtr.getTaxonService().getPhylumName(zooName); |
|
327 |
} |
|
328 |
|
|
329 |
String phylum2 = null; |
|
330 |
if (!zooName2.getRank().isHigher(Rank.PHYLUM())){ |
|
331 |
phylum2 = appCtr.getTaxonService().getPhylumName(zooName2); |
|
332 |
} |
|
333 |
mergeObject.setPhylumInErms(phylum1); |
|
334 |
mergeObject.setPhylumInFaunaEu(phylum2); |
|
335 |
|
|
336 |
//getUuids |
|
337 |
mergeObject.setUuidErms(zooName.getUuid().toString()); |
|
338 |
mergeObject.setUuidFaunaEu(zooName.getUuid().toString()); |
|
339 |
|
|
340 |
Iterator<IdentifiableSource> sources = zooName.getSources().iterator(); |
|
341 |
if (sources.hasNext()){ |
|
342 |
IdentifiableSource source = sources.next(); |
|
343 |
idInSource1 = source.getIdInSource(); |
|
344 |
mergeObject.setIdInErms(idInSource1); |
|
345 |
} |
|
346 |
sources = zooName2.getSources().iterator(); |
|
347 |
if (sources.hasNext()){ |
|
348 |
IdentifiableSource source = sources.next(); |
|
349 |
idInSource1 = source.getIdInSource(); |
|
350 |
mergeObject.setIdInFaunaEu(idInSource1); |
|
351 |
} |
|
352 |
|
|
353 |
mergeObject.setNameCacheInErms(zooName.getNameCache()); |
|
354 |
mergeObject.setNameCacheInFaunaEu(zooName2.getNameCache()); |
|
355 |
|
|
356 |
mergeObject.setAuthorInErms(zooName.getAuthorshipCache()); |
|
357 |
mergeObject.setAuthorInFaunaEu(zooName2.getAuthorshipCache()); |
|
358 |
Set<Taxon> taxa = zooName.getTaxa(); |
|
359 |
if (!taxa.isEmpty()){ |
|
360 |
mergeObject.setStatInErms(true); |
|
361 |
Iterator<Taxon> taxaIterator = taxa.iterator(); |
|
362 |
Taxon taxon = null; |
|
363 |
while (taxaIterator.hasNext()){ |
|
364 |
taxon = taxaIterator.next(); |
|
365 |
if (!taxon.isMisapplication()){ |
|
366 |
break; |
|
367 |
} |
|
322 |
for(int j = 0; j<uuids.size()-1; j = j + 500) { |
|
323 |
Set<UUID> subset = new HashSet( uuids.subList(j, j+499)); |
|
324 |
List<TaxonName> names = appCtr.getNameService().find(subset); |
|
325 |
for (int i = 0; i<names.size()-1; i=i+2){ |
|
326 |
zooName = names.get(i); |
|
327 |
zooName2 = names.get(i+1); |
|
328 |
mergeObject = new FaunaEuErmsMerging(); |
|
329 |
//TODO:überprüfen, ob die beiden Namen identisch sind und aus unterschiedlichen DB kommen |
|
330 |
Classification faunaEuClassification = appCtr.getClassificationService().load(UUID.fromString("44d8605e-a7ce-41e1-bee9-99edfec01e7c")); |
|
331 |
Classification ermsClassification = appCtr.getClassificationService().load(UUID.fromString("6fa988a9-10b7-48b0-a370-2586fbc066eb")); |
|
332 |
//getPhylum |
|
333 |
TaxonNodeDto phylum1 = null; |
|
334 |
if (!zooName.getRank().isHigher(Rank.PHYLUM())){ |
|
335 |
phylum1 =appCtr.getTaxonNodeService().taxonNodeDtoParentRank(faunaEuClassification, Rank.PHYLUM(), zooName); |
|
368 | 336 |
} |
369 |
Set<TaxonNode> nodes = taxon.getTaxonNodes(); |
|
370 |
Iterator<TaxonNode> taxonNodeIterator = nodes.iterator(); |
|
371 |
TaxonNode node, parentNode = null; |
|
372 |
while (taxonNodeIterator.hasNext()){ |
|
373 |
node = taxonNodeIterator.next(); |
|
374 |
if (!node.isTopmostNode()){ |
|
375 |
parentNode = node.getParent(); |
|
376 |
} |
|
337 |
|
|
338 |
TaxonNodeDto phylum2 = null; |
|
339 |
if (!zooName2.getRank().isHigher(Rank.PHYLUM())){ |
|
340 |
phylum2 = appCtr.getTaxonNodeService().taxonNodeDtoParentRank(ermsClassification, Rank.PHYLUM(), zooName2); |
|
377 | 341 |
} |
378 |
//TODO: ändern mit erweitertem Initializer.. |
|
379 |
if (parentNode != null){ |
|
380 |
TaxonName parentName = HibernateProxyHelper.deproxy(parentNode.getTaxon().getName()); |
|
381 |
String parentNameCache = parentName.getNameCache(); |
|
382 |
mergeObject.setParentStringInErms(parentNameCache); |
|
383 |
mergeObject.setParentRankStringInErms(parentName.getRank().getLabel()); |
|
384 |
//System.err.println("parentName: " + parentNameCache); |
|
342 |
mergeObject.setPhylumInErms(phylum1); |
|
343 |
mergeObject.setPhylumInFaunaEu(phylum2); |
|
344 |
|
|
345 |
//getUuids |
|
346 |
mergeObject.setUuidErms(zooName.getUuid().toString()); |
|
347 |
mergeObject.setUuidFaunaEu(zooName.getUuid().toString()); |
|
348 |
|
|
349 |
Iterator<IdentifiableSource> sources = zooName.getSources().iterator(); |
|
350 |
if (sources.hasNext()){ |
|
351 |
IdentifiableSource source = sources.next(); |
|
352 |
idInSource1 = source.getIdInSource(); |
|
353 |
mergeObject.setIdInErms(idInSource1); |
|
385 | 354 |
} |
386 |
}else{ |
|
387 |
mergeObject.setStatInErms(false); |
|
388 |
} |
|
389 |
taxa = zooName2.getTaxa(); |
|
390 |
if (!taxa.isEmpty()){ |
|
391 |
mergeObject.setStatInFaunaEu(true); |
|
392 |
Iterator<Taxon> taxaIterator = taxa.iterator(); |
|
393 |
Taxon taxon = null; |
|
394 |
while (taxaIterator.hasNext()){ |
|
395 |
taxon = taxaIterator.next(); |
|
396 |
if (!taxon.isMisapplication()){ |
|
397 |
break; |
|
398 |
} |
|
355 |
sources = zooName2.getSources().iterator(); |
|
356 |
if (sources.hasNext()){ |
|
357 |
IdentifiableSource source = sources.next(); |
|
358 |
idInSource1 = source.getIdInSource(); |
|
359 |
mergeObject.setIdInFaunaEu(idInSource1); |
|
399 | 360 |
} |
400 |
Set<TaxonNode> nodes = taxon.getTaxonNodes(); |
|
401 |
Iterator<TaxonNode> taxonNodeIterator = nodes.iterator(); |
|
402 |
TaxonNode node, parentNode = null; |
|
403 |
while (taxonNodeIterator.hasNext()){ |
|
404 |
node = taxonNodeIterator.next(); |
|
405 |
if (!node.isTopmostNode()){ |
|
406 |
parentNode = node.getParent(); |
|
361 |
|
|
362 |
mergeObject.setNameCacheInErms(zooName.getNameCache()); |
|
363 |
mergeObject.setNameCacheInFaunaEu(zooName2.getNameCache()); |
|
364 |
|
|
365 |
mergeObject.setAuthorInErms(zooName.getAuthorshipCache()); |
|
366 |
mergeObject.setAuthorInFaunaEu(zooName2.getAuthorshipCache()); |
|
367 |
Set<Taxon> taxa = zooName.getTaxa(); |
|
368 |
if (!taxa.isEmpty()){ |
|
369 |
mergeObject.setStatInErms(true); |
|
370 |
Iterator<Taxon> taxaIterator = taxa.iterator(); |
|
371 |
Taxon taxon = null; |
|
372 |
while (taxaIterator.hasNext()){ |
|
373 |
taxon = taxaIterator.next(); |
|
374 |
if (!taxon.isMisapplication()){ |
|
375 |
break; |
|
376 |
} |
|
407 | 377 |
} |
378 |
Set<TaxonNode> nodes = taxon.getTaxonNodes(); |
|
379 |
Iterator<TaxonNode> taxonNodeIterator = nodes.iterator(); |
|
380 |
TaxonNode node, parentNode = null; |
|
381 |
while (taxonNodeIterator.hasNext()){ |
|
382 |
node = taxonNodeIterator.next(); |
|
383 |
if (!node.isTopmostNode()){ |
|
384 |
parentNode = node.getParent(); |
|
385 |
} |
|
386 |
} |
|
387 |
//TODO: ändern mit erweitertem Initializer.. |
|
388 |
if (parentNode != null){ |
|
389 |
TaxonName parentName = HibernateProxyHelper.deproxy(parentNode.getTaxon().getName()); |
|
390 |
String parentNameCache = parentName.getNameCache(); |
|
391 |
mergeObject.setParentStringInErms(parentNameCache); |
|
392 |
mergeObject.setParentRankStringInErms(parentName.getRank().getLabel()); |
|
393 |
//System.err.println("parentName: " + parentNameCache); |
|
394 |
} |
|
395 |
}else{ |
|
396 |
mergeObject.setStatInErms(false); |
|
408 | 397 |
} |
409 |
//TODO: ändern mit erweitertem Initializer.. |
|
410 |
if (parentNode != null){ |
|
411 |
if (parentNode.getTaxon().getName().isZoological()){ |
|
412 |
|
|
413 |
IZoologicalName parentName = CdmBase.deproxy(parentNode.getTaxon().getName()); |
|
414 |
String parentNameCache = parentName.getNameCache(); |
|
415 |
mergeObject.setParentStringInFaunaEu(parentNameCache); |
|
416 |
mergeObject.setParentRankStringInFaunaEu(parentName.getRank().getLabel()); |
|
417 |
System.err.println("parentName: " + parentNameCache); |
|
418 |
}else{ |
|
419 |
System.err.println("no zoologicalName: " + parentNode.getTaxon().getName().getTitleCache() +" . "+parentNode.getTaxon().getName().getUuid()); |
|
398 |
taxa = zooName2.getTaxa(); |
|
399 |
if (!taxa.isEmpty()){ |
|
400 |
mergeObject.setStatInFaunaEu(true); |
|
401 |
Iterator<Taxon> taxaIterator = taxa.iterator(); |
|
402 |
Taxon taxon = null; |
|
403 |
while (taxaIterator.hasNext()){ |
|
404 |
taxon = taxaIterator.next(); |
|
405 |
if (!taxon.isMisapplication()){ |
|
406 |
break; |
|
407 |
} |
|
420 | 408 |
} |
421 |
|
|
409 |
Set<TaxonNode> nodes = taxon.getTaxonNodes(); |
|
410 |
Iterator<TaxonNode> taxonNodeIterator = nodes.iterator(); |
|
411 |
TaxonNode node, parentNode = null; |
|
412 |
while (taxonNodeIterator.hasNext()){ |
|
413 |
node = taxonNodeIterator.next(); |
|
414 |
if (!node.isTopmostNode()){ |
|
415 |
parentNode = node.getParent(); |
|
416 |
} |
|
417 |
} |
|
418 |
//TODO: ändern mit erweitertem Initializer.. |
|
419 |
if (parentNode != null){ |
|
420 |
if (parentNode.getTaxon().getName().isZoological()){ |
|
421 |
|
|
422 |
IZoologicalName parentName = CdmBase.deproxy(parentNode.getTaxon().getName()); |
|
423 |
String parentNameCache = parentName.getNameCache(); |
|
424 |
mergeObject.setParentStringInFaunaEu(parentNameCache); |
|
425 |
mergeObject.setParentRankStringInFaunaEu(parentName.getRank().getLabel()); |
|
426 |
System.err.println("parentName: " + parentNameCache); |
|
427 |
}else{ |
|
428 |
System.err.println("no zoologicalName: " + parentNode.getTaxon().getName().getTitleCache() +" . "+parentNode.getTaxon().getName().getUuid()); |
|
429 |
} |
|
430 |
|
|
431 |
} |
|
432 |
}else{ |
|
433 |
mergeObject.setStatInErms(false); |
|
422 | 434 |
} |
423 |
}else{ |
|
424 |
mergeObject.setStatInErms(false); |
|
425 |
} |
|
426 |
taxa = zooName2.getTaxa(); |
|
427 |
if (!taxa.isEmpty()){ |
|
428 |
mergeObject.setStatInFaunaEu(true); |
|
429 |
}else{ |
|
430 |
mergeObject.setStatInFaunaEu(false); |
|
431 |
|
|
432 |
} |
|
433 |
|
|
434 |
mergeObject.setRankInErms(zooName.getRank().getLabel()); |
|
435 |
mergeObject.setRankInFaunaEu(zooName2.getRank().getLabel()); |
|
436 |
|
|
437 |
//set parent informations |
|
438 |
|
|
439 |
|
|
440 |
/* |
|
441 |
Set<HybridRelationship> parentRelations = zooName.getParentRelationships(); |
|
442 |
Iterator parentIterator = parentRelations.iterator(); |
|
443 |
HybridRelationship parentRel; |
|
444 |
ZoologicalName parentName; |
|
445 |
while (parentIterator.hasNext()){ |
|
446 |
parentRel = (HybridRelationship)parentIterator.next(); |
|
447 |
parentName = (ZoologicalName)parentRel.getParentName(); |
|
448 |
mergeObject.setParentRankStringInErms(parentName.getRank().getLabel()); |
|
449 |
mergeObject.setParentStringInErms(parentName.getNameCache()); |
|
435 |
taxa = zooName2.getTaxa(); |
|
436 |
if (!taxa.isEmpty()){ |
|
437 |
mergeObject.setStatInFaunaEu(true); |
|
438 |
}else{ |
|
439 |
mergeObject.setStatInFaunaEu(false); |
|
440 |
|
|
441 |
} |
|
442 |
|
|
443 |
mergeObject.setRankInErms(zooName.getRank().getLabel()); |
|
444 |
mergeObject.setRankInFaunaEu(zooName2.getRank().getLabel()); |
|
445 |
|
|
446 |
//set parent informations |
|
447 |
|
|
448 |
|
|
449 |
/* |
|
450 |
Set<HybridRelationship> parentRelations = zooName.getParentRelationships(); |
|
451 |
Iterator parentIterator = parentRelations.iterator(); |
|
452 |
HybridRelationship parentRel; |
|
453 |
ZoologicalName parentName; |
|
454 |
while (parentIterator.hasNext()){ |
|
455 |
parentRel = (HybridRelationship)parentIterator.next(); |
|
456 |
parentName = (ZoologicalName)parentRel.getParentName(); |
|
457 |
mergeObject.setParentRankStringInErms(parentName.getRank().getLabel()); |
|
458 |
mergeObject.setParentStringInErms(parentName.getNameCache()); |
|
459 |
} |
|
460 |
|
|
461 |
parentRelations = zooName2.getParentRelationships(); |
|
462 |
parentIterator = parentRelations.iterator(); |
|
463 |
|
|
464 |
while (parentIterator.hasNext()){ |
|
465 |
parentRel = (HybridRelationship)parentIterator.next(); |
|
466 |
parentName = (ZoologicalName)parentRel.getParentName(); |
|
467 |
mergeObject.setParentRankStringInFaunaEu(parentName.getRank().getLabel()); |
|
468 |
mergeObject.setParentStringInFaunaEu(parentName.getNameCache()); |
|
469 |
}*/ |
|
470 |
merge.add(mergeObject); |
|
450 | 471 |
} |
451 |
|
|
452 |
parentRelations = zooName2.getParentRelationships(); |
|
453 |
parentIterator = parentRelations.iterator(); |
|
454 |
|
|
455 |
while (parentIterator.hasNext()){ |
|
456 |
parentRel = (HybridRelationship)parentIterator.next(); |
|
457 |
parentName = (ZoologicalName)parentRel.getParentName(); |
|
458 |
mergeObject.setParentRankStringInFaunaEu(parentName.getRank().getLabel()); |
|
459 |
mergeObject.setParentStringInFaunaEu(parentName.getNameCache()); |
|
460 |
}*/ |
|
461 |
merge.add(mergeObject); |
|
462 | 472 |
} |
463 | 473 |
|
464 | 474 |
return merge; |
Also available in: Unified diff
ref #1445: merging fauna europaea and erms