Project

General

Profile

« Previous | Next » 

Revision c972cf2d

Added by Katja Luther over 4 years ago

ref #1445: adapt merging activator to changes in cdmlib

View differences:

cdm-pesi/src/main/java/eu/etaxonomy/cdm/app/pesi/merging/FaunaEuErmsFindIdenticalNamesActivator.java
6 6
import java.util.HashSet;
7 7
import java.util.Iterator;
8 8
import java.util.List;
9
import java.util.Map;
9 10
import java.util.Set;
10 11
import java.util.UUID;
11 12

  
13
import com.sun.media.jfxmedia.logging.Logger;
14

  
12 15
import eu.etaxonomy.cdm.api.application.CdmApplicationController;
13 16
import eu.etaxonomy.cdm.app.common.CdmDestinations;
14 17
import eu.etaxonomy.cdm.app.util.TestDatabase;
15 18
import eu.etaxonomy.cdm.database.DbSchemaValidation;
16 19
import eu.etaxonomy.cdm.database.ICdmDataSource;
17 20
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
21
import eu.etaxonomy.cdm.io.api.application.CdmIoApplicationController;
18 22
import eu.etaxonomy.cdm.io.pesi.merging.FaunaEuErmsMerging;
19 23
import eu.etaxonomy.cdm.model.common.CdmBase;
20 24
import eu.etaxonomy.cdm.model.common.IdentifiableSource;
21 25
import eu.etaxonomy.cdm.model.name.IZoologicalName;
22 26
import eu.etaxonomy.cdm.model.name.Rank;
23 27
import eu.etaxonomy.cdm.model.name.TaxonName;
28
import eu.etaxonomy.cdm.model.reference.Reference;
24 29
import eu.etaxonomy.cdm.model.taxon.Classification;
25 30
import eu.etaxonomy.cdm.model.taxon.Taxon;
31
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
26 32
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
27 33
import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
28 34

  
......
30 36

  
31 37
	//static final ICdmDataSource faunaEuropaeaSource = CdmDestinations.localH2();
32 38
	static final ICdmDataSource faunaEuropaeaSource = CdmDestinations.cdm_test_local_faunaEu_mysql();
39
	static Reference faunaSec;
40
	static Reference ermsSec;
33 41

  
34 42
	//TODO hole aus beiden DB alle TaxonNameBases
35 43

  
36 44
	private CdmApplicationController initDb(ICdmDataSource db) {
37 45

  
38 46
		// Init source DB
39
		CdmApplicationController appCtrInit = null;
47
		//CdmApplicationController appCtrInit = null;
48
		CdmApplicationController appCtrInit = CdmIoApplicationController.NewInstance(db, DbSchemaValidation.VALIDATE, false);
40 49

  
41
		appCtrInit = TestDatabase.initDb(db, DbSchemaValidation.VALIDATE, false);
50
		
51
		//appCtrInit = TestDatabase.initDb(db, DbSchemaValidation.VALIDATE, false);
42 52

  
43 53
		return appCtrInit;
44 54
	}
......
52 62
		FaunaEuErmsFindIdenticalNamesActivator sc = new FaunaEuErmsFindIdenticalNamesActivator();
53 63

  
54 64
		CdmApplicationController appCtrFaunaEu = sc.initDb(faunaEuropaeaSource);
55
		String sFileName = "c:\\test";
65
		String sFileName = "C:\\Users\\k.luther\\test";
56 66
		//CdmApplicationController appCtrErms = sc.initDb(ermsSource);
57 67
		List<String> propertyPaths = new ArrayList<>();
58 68
		propertyPaths.add("sources.*");
......
62 72
		propertyPaths.add("taxonBases.relationsFromThisTaxon");
63 73
		propertyPaths.add("taxonBases.taxonNodes.*");
64 74
		propertyPaths.add("taxonBases.taxonNodes.parent.*");
75
		propertyPaths.add("taxonBases.taxonNodes.childNodes.*");
76
		propertyPaths.add("taxonBases.taxonNodes.childNodes.classification.rootNode.childNodes.*");
65 77
		propertyPaths.add("taxonBases.taxonNodes.parent.taxon.name.*");
78
		propertyPaths.add("taxonBases.acceptedTaxon.taxonNodes.*");
79
		propertyPaths.add("taxonBases.acceptedTaxon.taxonNodes.childNodes.*");
80
		propertyPaths.add("taxonBases.acceptedTaxon.taxonNodes.childNodes.classification.rootNode.childNodes.*");
66 81
		System.err.println("Start getIdenticalNames...");
67
		List<UUID> namesOfIdenticalTaxa = appCtrFaunaEu.getTaxonService().findIdenticalTaxonNameIds(propertyPaths);
82
		
83
		faunaSec = appCtrFaunaEu.getReferenceService().load(UUID.fromString("6786d863-75d4-4796-b916-c1c3dff4cb70"));
84
		ermsSec = appCtrFaunaEu.getReferenceService().load(UUID.fromString("7744bc26-f914-42c4-b54a-dd2a030a8bb7"));
85
		Map<String, List<TaxonName>> namesOfIdenticalTaxa = appCtrFaunaEu.getTaxonService().findIdenticalTaxonNameIds(ermsSec, faunaSec, propertyPaths);
68 86
		//List<UUID> namesOfIdenticalTaxa = appCtrFaunaEu.getTaxonService().findIdenticalTaxonNameIds(propertyPaths);
69 87

  
70 88
		System.err.println("first name: " + namesOfIdenticalTaxa.get(0) + " " + namesOfIdenticalTaxa.size());
......
313 331
	}
314 332

  
315 333

  
316
	private List<FaunaEuErmsMerging> createMergeObjects(List<UUID> uuids, CdmApplicationController appCtr){
334
	private List<FaunaEuErmsMerging> createMergeObjects(Map<String,List<TaxonName>> names, CdmApplicationController appCtr){
317 335

  
318 336
		List<FaunaEuErmsMerging> merge = new ArrayList<>();
319 337
		TaxonName zooName, zooName2;
320 338
		FaunaEuErmsMerging mergeObject;
321 339
		String idInSource1;
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);
340
		List<TaxonName> identicalNames;
341
		for (String nameCache: names.keySet()){
342
			identicalNames = names.get(nameCache);
343
			
344
			mergeObject = new FaunaEuErmsMerging();
345
			//TODO:überprüfen, ob die beiden Namen identisch sind und aus unterschiedlichen DB kommen
346
			Classification faunaEuClassification = appCtr.getClassificationService().load(UUID.fromString("44d8605e-a7ce-41e1-bee9-99edfec01e7c"));
347
			Classification ermsClassification = appCtr.getClassificationService().load(UUID.fromString("6fa988a9-10b7-48b0-a370-2586fbc066eb"));
348
			//getPhylum
349
			TaxonNodeDto phylum1 = null;
350
			TaxonName faunaEuName = null;
351
			TaxonName ermsName = null;
352
			TaxonBase tempName = null;
353
			if (identicalNames.size() == 2) {
354
				Set<TaxonBase> taxonBases = identicalNames.get(0).getTaxonBases();
355
				if (taxonBases.size()==1) {
356
					Iterator<TaxonBase> it = taxonBases.iterator();
357
					tempName = it.next();
358
					if (tempName.getSec().equals(faunaSec)) {
359
						faunaEuName = identicalNames.get(0);
360
						ermsName = identicalNames.get(1);
361
					}else {
362
						faunaEuName = identicalNames.get(1);
363
						ermsName = identicalNames.get(0);
364
					}
365
				}else {
366
					//TODO: find the two correct names
336 367
				}
337
	
338
				TaxonNodeDto phylum2 = null;
339
				if (!zooName2.getRank().isHigher(Rank.PHYLUM())){
340
					phylum2 = appCtr.getTaxonNodeService().taxonNodeDtoParentRank(ermsClassification, Rank.PHYLUM(), zooName2);
368
			}else {
369
				System.err.println(nameCache + " has more than two identical namecaches");
370
				return null;
371
			}
372
			phylum1 = null;
373
			if (faunaEuName != null && !faunaEuName.getRank().isHigher(Rank.PHYLUM())){
374
					phylum1 =appCtr.getTaxonNodeService().taxonNodeDtoParentRank(faunaEuClassification, Rank.PHYLUM(), faunaEuName);
375
			}
376

  
377
			TaxonNodeDto phylum2 = null;
378
			if (ermsName != null && !ermsName.getRank().isHigher(Rank.PHYLUM())){
379
				phylum2 = appCtr.getTaxonNodeService().taxonNodeDtoParentRank(ermsClassification, Rank.PHYLUM(), ermsName);
380
			}
381
			mergeObject.setPhylumInErms(phylum1);
382
			mergeObject.setPhylumInFaunaEu(phylum2);
383

  
384
			//getUuids
385
			mergeObject.setUuidErms(ermsName.getUuid().toString());
386
			mergeObject.setUuidFaunaEu(faunaEuName.getUuid().toString());
387

  
388
			Iterator<IdentifiableSource> sources = ermsName.getSources().iterator();
389
			if (sources.hasNext()){
390
				IdentifiableSource source = sources.next();
391
				idInSource1 = source.getIdInSource();
392
				mergeObject.setIdInErms(idInSource1);
393
			}
394
			sources = faunaEuName.getSources().iterator();
395
			if (sources.hasNext()){
396
				IdentifiableSource source = sources.next();
397
				idInSource1 = source.getIdInSource();
398
				mergeObject.setIdInFaunaEu(idInSource1);
399
			}
400

  
401
			mergeObject.setNameCacheInErms(ermsName.getNameCache());
402
			mergeObject.setNameCacheInFaunaEu(faunaEuName.getNameCache());
403

  
404
			mergeObject.setAuthorInErms(ermsName.getAuthorshipCache());
405
			mergeObject.setAuthorInFaunaEu(faunaEuName.getAuthorshipCache());
406
			Set<Taxon> taxa = ermsName.getTaxa();
407
			if (!taxa.isEmpty()){
408
				mergeObject.setStatInErms(true);
409
				Iterator<Taxon> taxaIterator = taxa.iterator();
410
				Taxon taxon = null;
411
				while (taxaIterator.hasNext()){
412
					taxon = taxaIterator.next();
413
					if (!taxon.isMisapplication()){
414
						break;
415
					}
341 416
				}
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);
417
				Set<TaxonNode> nodes = taxon.getTaxonNodes();
418
				Iterator<TaxonNode> taxonNodeIterator = nodes.iterator();
419
				TaxonNode node, parentNode = null;
420
				while (taxonNodeIterator.hasNext()){
421
					node = taxonNodeIterator.next();
422
					if (!node.isTopmostNode()){
423
						parentNode = node.getParent();
424
					}
354 425
				}
355
				sources = zooName2.getSources().iterator();
356
				if (sources.hasNext()){
357
					IdentifiableSource source = sources.next();
358
					idInSource1 = source.getIdInSource();
359
					mergeObject.setIdInFaunaEu(idInSource1);
426
				//TODO: ändern mit erweitertem Initializer..
427
				if (parentNode != null){
428
				    TaxonName parentName = HibernateProxyHelper.deproxy(parentNode.getTaxon().getName());
429
					String parentNameCache = parentName.getNameCache();
430
					mergeObject.setParentStringInErms(parentNameCache);
431
					mergeObject.setParentRankStringInErms(parentName.getRank().getLabel());
432
					//System.err.println("parentName: " + parentNameCache);
360 433
				}
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
						}
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);
434
			}else{
435
				mergeObject.setStatInErms(false);
436
			}
437
			taxa = faunaEuName.getTaxa();
438
			if (!taxa.isEmpty()){
439
				mergeObject.setStatInFaunaEu(true);
440
				Iterator<Taxon> taxaIterator = taxa.iterator();
441
				Taxon taxon = null;
442
				while (taxaIterator.hasNext()){
443
					taxon = taxaIterator.next();
444
					if (!taxon.isMisapplication()){
445
						break;
394 446
					}
395
				}else{
396
					mergeObject.setStatInErms(false);
397 447
				}
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
						}
448
				Set<TaxonNode> nodes = taxon.getTaxonNodes();
449
				Iterator<TaxonNode> taxonNodeIterator = nodes.iterator();
450
				TaxonNode node, parentNode = null;
451
				while (taxonNodeIterator.hasNext()){
452
					node = taxonNodeIterator.next();
453
					if (!node.isTopmostNode()){
454
						parentNode = node.getParent();
408 455
					}
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);
434 456
				}
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());
457
				//TODO: ändern mit erweitertem Initializer..
458
				if (parentNode != null){
459
					if (parentNode.getTaxon().getName().isZoological()){
460

  
461
    					IZoologicalName parentName = CdmBase.deproxy(parentNode.getTaxon().getName());
462
    					String parentNameCache = parentName.getNameCache();
463
    					mergeObject.setParentStringInFaunaEu(parentNameCache);
464
    					mergeObject.setParentRankStringInFaunaEu(parentName.getRank().getLabel());
465
    					System.err.println("parentName: " + parentNameCache);
466
					}else{
467
						System.err.println("no zoologicalName: " + parentNode.getTaxon().getName().getTitleCache() +" . "+parentNode.getTaxon().getName().getUuid());
468
					}
469

  
459 470
				}
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);
471
			}else{
472
				mergeObject.setStatInErms(false);
473
			}
474
			taxa = faunaEuName.getTaxa();
475
			if (!taxa.isEmpty()){
476
				mergeObject.setStatInFaunaEu(true);
477
			}else{
478
				mergeObject.setStatInFaunaEu(false);
479

  
471 480
			}
481

  
482
			mergeObject.setRankInErms(ermsName.getRank().getLabel());
483
			mergeObject.setRankInFaunaEu(faunaEuName.getRank().getLabel());
484

  
485
			//set parent informations
486

  
487

  
488
			/*
489
			Set<HybridRelationship> parentRelations = zooName.getParentRelationships();
490
			Iterator parentIterator = parentRelations.iterator();
491
			HybridRelationship parentRel;
492
			ZoologicalName parentName;
493
			while (parentIterator.hasNext()){
494
				parentRel = (HybridRelationship)parentIterator.next();
495
				parentName = (ZoologicalName)parentRel.getParentName();
496
				mergeObject.setParentRankStringInErms(parentName.getRank().getLabel());
497
				mergeObject.setParentStringInErms(parentName.getNameCache());
498
			}
499

  
500
			parentRelations = zooName2.getParentRelationships();
501
			parentIterator = parentRelations.iterator();
502

  
503
			while (parentIterator.hasNext()){
504
				parentRel = (HybridRelationship)parentIterator.next();
505
				parentName = (ZoologicalName)parentRel.getParentName();
506
				mergeObject.setParentRankStringInFaunaEu(parentName.getRank().getLabel());
507
				mergeObject.setParentStringInFaunaEu(parentName.getNameCache());
508
			}*/
509
			merge.add(mergeObject);
472 510
		}
511
//		}
473 512

  
474 513
		return merge;
475 514

  

Also available in: Unified diff