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;
|
ref #1445: merging fauna europaea and erms