Project

General

Profile

« Previous | Next » 

Revision 17d546a5

Added by Katja Luther over 4 years ago

ref #1445: smaller changes in activators

View differences:

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;
7 6
import java.util.Iterator;
8 7
import java.util.List;
9 8
import java.util.Map;
10 9
import java.util.Set;
11 10
import java.util.UUID;
12 11

  
13
import com.sun.media.jfxmedia.logging.Logger;
12
import org.apache.log4j.Logger;
14 13

  
15 14
import eu.etaxonomy.cdm.api.application.CdmApplicationController;
16 15
import eu.etaxonomy.cdm.app.common.CdmDestinations;
17
import eu.etaxonomy.cdm.app.util.TestDatabase;
16
import eu.etaxonomy.cdm.app.pesi.ErmsImportActivator;
18 17
import eu.etaxonomy.cdm.database.DbSchemaValidation;
19 18
import eu.etaxonomy.cdm.database.ICdmDataSource;
20 19
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
......
27 26
import eu.etaxonomy.cdm.model.name.TaxonName;
28 27
import eu.etaxonomy.cdm.model.reference.Reference;
29 28
import eu.etaxonomy.cdm.model.taxon.Classification;
29
import eu.etaxonomy.cdm.model.taxon.Synonym;
30 30
import eu.etaxonomy.cdm.model.taxon.Taxon;
31 31
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
32 32
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
33 33
import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
34 34

  
35 35
public class FaunaEuErmsFindIdenticalNamesActivator {
36

  
36
	private static final Logger logger = Logger.getLogger(FaunaEuErmsFindIdenticalNamesActivator.class);
37 37
	//static final ICdmDataSource faunaEuropaeaSource = CdmDestinations.localH2();
38 38
	static final ICdmDataSource faunaEuropaeaSource = CdmDestinations.cdm_test_local_faunaEu_mysql();
39 39
	static Reference faunaSec;
......
83 83
		faunaSec = appCtrFaunaEu.getReferenceService().load(UUID.fromString("6786d863-75d4-4796-b916-c1c3dff4cb70"));
84 84
		ermsSec = appCtrFaunaEu.getReferenceService().load(UUID.fromString("7744bc26-f914-42c4-b54a-dd2a030a8bb7"));
85 85
		Map<String, List<TaxonName>> namesOfIdenticalTaxa = appCtrFaunaEu.getTaxonService().findIdenticalTaxonNameIds(ermsSec, faunaSec, propertyPaths);
86
		//List<UUID> namesOfIdenticalTaxa = appCtrFaunaEu.getTaxonService().findIdenticalTaxonNameIds(propertyPaths);
87

  
88
		System.err.println("first name: " + namesOfIdenticalTaxa.get(0) + " " + namesOfIdenticalTaxa.size());
89
		//TaxonName zooName = namesOfIdenticalTaxa.get(0);
90
		//System.err.println(zooName + " nr of taxa " + namesOfIdenticalTaxa.size());
91
		//TaxonNameComparator taxComp = new TaxonNameComparator();
92

  
93
		//Collections.sort(namesOfIdenticalTaxa,taxComp);
94
		System.err.println(namesOfIdenticalTaxa.get(0) + " - " + namesOfIdenticalTaxa.get(1) + " - " + namesOfIdenticalTaxa.get(2));
86
			
95 87
		List<FaunaEuErmsMerging> mergingObjects = new ArrayList<>();
96 88
		FaunaEuErmsMerging mergeObject;
97 89
		TaxonName faunaEuTaxName;
98 90
		TaxonName ermsTaxName;
99

  
91
		System.err.println("Start creating merging objects");
100 92
		mergingObjects= sc.createMergeObjects(namesOfIdenticalTaxa, appCtrFaunaEu);
93
		boolean resultOK = true;
94
		System.err.println("Start creating csv files");
95
		resultOK = resultOK && sc.writeSameNamesdifferentAuthorToCsv(mergingObjects, sFileName + "_authors.csv");
96
		resultOK = resultOK &&sc.writeSameNamesdifferentStatusToCsv(mergingObjects, sFileName + "_status.csv");
97
		resultOK = resultOK &&sc.writeSameNamesToCsVFile(mergingObjects, sFileName + "_names.csv");
98
		resultOK = resultOK &&sc.writeSameNamesdifferentPhylumToCsv(mergingObjects, sFileName + "_phylum.csv");
99
		resultOK = resultOK &&sc.writeSameNamesDifferentParentToCsv(mergingObjects, sFileName + "parent.csv");
101 100

  
102
		sc.writeSameNamesdifferentAuthorToCsv(mergingObjects, sFileName + "_authors.csv");
103
		sc.writeSameNamesdifferentStatusToCsv(mergingObjects, sFileName + "_status.csv");
104
		sc.writeSameNamesToCsVFile(mergingObjects, sFileName + "_names.csv");
105
		sc.writeSameNamesdifferentPhylumToCsv(mergingObjects, sFileName + "_phylum.csv");
106

  
107

  
108
		System.out.println("End merging Fauna Europaea and Erms");
101
		System.err.println("End merging Fauna Europaea and Erms" + resultOK);
102
		System.exit(0);
109 103

  
110 104
	}
111 105

  
......
157 151
		}
158 152
		return true;
159 153
	}
154
	
155
	private boolean writeSameNamesDifferentParentToCsv(List<FaunaEuErmsMerging> mergingObjects, String sfileName){
156
		try
157
		{
158
		    FileWriter writer = new FileWriter(sfileName);
159

  
160
		    //create Header
161
		   String firstLine = "same names but different parent";
162
		   createHeader(writer, firstLine);
163

  
164
			//write data
165
			for (FaunaEuErmsMerging merging : mergingObjects){
166
		    	//TODO
167
				if ((merging.getParentStringInErms()== null )^ (merging.getParentStringInFaunaEu()== null)){
168
					writeCsvLine(writer, merging) ;
169
				}else if(!((merging.getParentStringInErms()==null) && (merging.getParentStringInFaunaEu()==null))){
170
					if(!merging.getParentStringInErms().equals(merging.getParentStringInFaunaEu())){
171
						writeCsvLine(writer, merging) ;
172
					}
173
				}
174
			}
175
			writer.flush();
176
			writer.close();
177
		}
178
		catch(IOException e)
179
		{
180
		 return false;
181
		}
182
		return true;
183
	}
160 184

  
161 185
	private boolean writeSameNamesdifferentRankToCsv(List<FaunaEuErmsMerging> mergingObjects, String sfileName){
162 186
		try
......
264 288
			//write data
265 289
			for (FaunaEuErmsMerging merging : mergingObjects){
266 290

  
267
				if (!merging.getAuthorInErms().equals(merging.getAuthorInFaunaEu())){
291
				if (merging.getAuthorInErms() != null && merging.getAuthorInFaunaEu() != null && !merging.getAuthorInErms().equals(merging.getAuthorInFaunaEu())){
268 292
					 writeCsvLine(writer, merging);
293
				}else if ((merging.getAuthorInErms() == null && merging.getAuthorInFaunaEu() != null) || (merging.getAuthorInErms() != null && merging.getAuthorInFaunaEu() == null)) {
294
					writeCsvLine(writer, merging);
269 295
				}
270 296
			}
271 297

  
......
298 324
			writer.append("synonym");
299 325
		}
300 326
		writer.append(';');
301
		writer.append(merging.getPhylumInFaunaEu().getTaxonTitleCache());
327
		writer.append(merging.getPhylumInFaunaEu() != null? merging.getPhylumInFaunaEu().getTaxonTitleCache(): "");
302 328
		writer.append(';');
303 329
		writer.append(merging.getParentStringInFaunaEu());
304 330
		writer.append(';');
......
322 348
		}
323 349

  
324 350
		writer.append(';');
325
		writer.append(merging.getPhylumInErms().getTaxonTitleCache());
351
		writer.append(merging.getPhylumInErms() != null? merging.getPhylumInErms().getTaxonTitleCache():"");
326 352
		writer.append(';');
327 353
		writer.append(merging.getParentStringInErms());
328 354
		writer.append(';');
......
332 358

  
333 359

  
334 360
	private List<FaunaEuErmsMerging> createMergeObjects(Map<String,List<TaxonName>> names, CdmApplicationController appCtr){
335

  
361
		Classification faunaEuClassification = appCtr.getClassificationService().load(UUID.fromString("44d8605e-a7ce-41e1-bee9-99edfec01e7c"));
362
		Classification ermsClassification = appCtr.getClassificationService().load(UUID.fromString("6fa988a9-10b7-48b0-a370-2586fbc066eb"));
336 363
		List<FaunaEuErmsMerging> merge = new ArrayList<>();
337
		TaxonName zooName, zooName2;
364
		
338 365
		FaunaEuErmsMerging mergeObject;
339 366
		String idInSource1;
340 367
		List<TaxonName> identicalNames;
368
		
341 369
		for (String nameCache: names.keySet()){
342 370
			identicalNames = names.get(nameCache);
343 371
			
344 372
			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"));
373
			
374
			
348 375
			//getPhylum
349 376
			TaxonNodeDto phylum1 = null;
350 377
			TaxonName faunaEuName = null;
......
366 393
					//TODO: find the two correct names
367 394
				}
368 395
			}else {
369
				System.err.println(nameCache + " has more than two identical namecaches");
370
				return null;
396
				logger.debug(nameCache + " has more than two identical namecaches");
397
				continue;
371 398
			}
372 399
			phylum1 = null;
373
			if (faunaEuName != null && !faunaEuName.getRank().isHigher(Rank.PHYLUM())){
400
			if (faunaEuName.getRank().equals(Rank.PHYLUM())) {
401
				Taxon taxon = null;
402
				taxon = getAcceptedTaxon(faunaEuName);
403
				if (taxon != null) {
404
					phylum1 = new TaxonNodeDto(taxon.getTaxonNode(faunaEuClassification));
405
				}
406
				
407
			}
408
			if (phylum1 == null && faunaEuName != null && !faunaEuName.getRank().isHigher(Rank.PHYLUM())){
374 409
					phylum1 =appCtr.getTaxonNodeService().taxonNodeDtoParentRank(faunaEuClassification, Rank.PHYLUM(), faunaEuName);
375 410
			}
376 411

  
377 412
			TaxonNodeDto phylum2 = null;
378
			if (ermsName != null && !ermsName.getRank().isHigher(Rank.PHYLUM())){
413
			if (ermsName.getRank().equals(Rank.PHYLUM())) {
414
				Taxon taxon = null;
415
				taxon = getAcceptedTaxon(ermsName);
416
				if (taxon != null) {
417
					phylum2 = new TaxonNodeDto(taxon.getTaxonNode(ermsClassification));
418
				}
419
				
420
			}
421
			if (phylum2 == null && ermsName != null && !ermsName.getRank().isHigher(Rank.PHYLUM())){
379 422
				phylum2 = appCtr.getTaxonNodeService().taxonNodeDtoParentRank(ermsClassification, Rank.PHYLUM(), ermsName);
380 423
			}
381 424
			mergeObject.setPhylumInErms(phylum1);
......
429 472
					String parentNameCache = parentName.getNameCache();
430 473
					mergeObject.setParentStringInErms(parentNameCache);
431 474
					mergeObject.setParentRankStringInErms(parentName.getRank().getLabel());
432
					//System.err.println("parentName: " + parentNameCache);
475
					
433 476
				}
434 477
			}else{
435 478
				mergeObject.setStatInErms(false);
479
				TaxonNode parentNode = getAcceptedNode(ermsName);
480
				//TODO: ändern mit erweitertem Initializer..
481
				if (parentNode != null){
482
				    TaxonName parentName = HibernateProxyHelper.deproxy(parentNode.getTaxon().getName());
483
					String parentNameCache = parentName.getNameCache();
484
					mergeObject.setParentStringInErms(parentNameCache);
485
					mergeObject.setParentRankStringInErms(parentName.getRank().getLabel());
486
					
487
				}
436 488
			}
437 489
			taxa = faunaEuName.getTaxa();
438 490
			if (!taxa.isEmpty()){
......
462 514
    					String parentNameCache = parentName.getNameCache();
463 515
    					mergeObject.setParentStringInFaunaEu(parentNameCache);
464 516
    					mergeObject.setParentRankStringInFaunaEu(parentName.getRank().getLabel());
465
    					System.err.println("parentName: " + parentNameCache);
517
    					
466 518
					}else{
467
						System.err.println("no zoologicalName: " + parentNode.getTaxon().getName().getTitleCache() +" . "+parentNode.getTaxon().getName().getUuid());
519
						logger.debug("no zoologicalName: " + parentNode.getTaxon().getName().getTitleCache() +" . "+parentNode.getTaxon().getName().getUuid());
468 520
					}
469 521

  
470 522
				}
471
			}else{
472
				mergeObject.setStatInErms(false);
473
			}
474
			taxa = faunaEuName.getTaxa();
475
			if (!taxa.isEmpty()){
476
				mergeObject.setStatInFaunaEu(true);
477 523
			}else{
478 524
				mergeObject.setStatInFaunaEu(false);
479

  
525
				TaxonNode parentNode = getAcceptedNode(faunaEuName);
526
				//TODO: ändern mit erweitertem Initializer..
527
				if (parentNode != null){
528
				    TaxonName parentName = HibernateProxyHelper.deproxy(parentNode.getTaxon().getName());
529
					String parentNameCache = parentName.getNameCache();
530
					mergeObject.setParentStringInFaunaEu(parentNameCache);
531
					mergeObject.setParentRankStringInFaunaEu(parentName.getRank().getLabel());
532
					
533
				}
480 534
			}
535
			
481 536

  
482 537
			mergeObject.setRankInErms(ermsName.getRank().getLabel());
483 538
			mergeObject.setRankInFaunaEu(faunaEuName.getRank().getLabel());
......
513 568
		return merge;
514 569

  
515 570
	}
571

  
572

  
573
	/**
574
	 * @param ermsName
575
	 * @return
576
	 */
577
	private TaxonNode getAcceptedNode(TaxonName ermsName) {
578
		Set<TaxonBase> taxonBases = ermsName.getTaxonBases();
579
		Taxon taxon = null;
580
		if (taxonBases != null && !taxonBases.isEmpty()) {
581
			TaxonBase taxonBase = taxonBases.iterator().next();
582
			if (taxonBase instanceof Synonym) {
583
				taxon = ((Synonym)taxonBase).getAcceptedTaxon();
584
			}
585
		}
586
		
587
		
588
		Set<TaxonNode> nodes = taxon.getTaxonNodes();
589
		
590
		TaxonNode node, parentNode = null;
591
		if (nodes != null && !nodes.isEmpty()) {
592
			parentNode = nodes.iterator().next();
593
		}
594
		return parentNode;
595
	}
596

  
597

  
598
	/**
599
	 * @param ermsName
600
	 * @param taxon
601
	 * @return
602
	 */
603
	private Taxon getAcceptedTaxon(TaxonName ermsName) {
604
		Taxon taxon = null;
605
		if (ermsName.getTaxa() != null && !ermsName.getTaxa().isEmpty()){
606
			taxon = ermsName.getTaxa().iterator().next();
607
			
608
		}else if (ermsName.getTaxonBases() != null && !ermsName.getTaxonBases().isEmpty()){
609
			TaxonBase taxonBase = ermsName.getTaxonBases().iterator().next();
610
			if (taxonBase instanceof Synonym) {
611
				Synonym syn = (Synonym)taxonBase;
612
				taxon = syn.getAcceptedTaxon();
613
			}
614
		}
615
		return taxon;
616
	}
516 617
}
cdm-pesi/src/main/java/eu/etaxonomy/cdm/app/pesi/merging/FaunaEuErmsMergeActivator.java
71 71
		FaunaEuErmsMergeActivator sc = new FaunaEuErmsMergeActivator();
72 72

  
73 73
		sc.initDb(faunaEuropaeaSource);
74

  
74
//we also need to merge names completely identical!
75 75
		sc.mergeAuthors();
76 76

  
77 77
		//set the ranks of Agnatha and Gnathostomata to 50 instead of 45
......
142 142
			UUID uuidErms = UUID.fromString(row.get(ermsUuid));
143 143
			taxonFaunaEu = appCtrInit.getTaxonService().find(uuidFaunaEu);
144 144
			taxonErms = appCtrInit.getTaxonService().find(uuidErms);
145

  
145
// which information should be used can be found in last row -> needs to be done manually
146 146
			if (Integer.parseInt(row.get(18)) == 1){
147 147
				//isFaunaEu = 1 -> copy the author of Fauna Europaea to Erms
148 148
				if (((IZoologicalName)taxonFaunaEu.getName()).getBasionymAuthorship()!= null){
......
219 219
		// update nameRelationships -> if the nameRelationship does not exist, then create a new one with ermsAcc as relatedTo TaxonName
220 220
		updateNameRelationships(ermsAccFaEuSyn);
221 221

  
222
		//delete all synonyms of FaunaEu Syn
222
		//delete all synonyms of FaunaEu Syn TODO: move sources and additional informations to erms taxon
223 223
		for (List<String> rowList: ermsAccFaEuSyn){
224 224
			UUID faunaUUID = UUID.fromString(rowList.get(faunaEuUuid));
225 225
			//UUID ermsUUID = UUID.fromString(rowList.get(ermsUuid));
226 226
			Synonym syn = (Synonym)appCtrInit.getTaxonService().find(faunaUUID);
227
			// remove synonym from taxon then delete
227 228
			appCtrInit.getTaxonService().deleteSynonym(syn, null);
228 229
		}
229 230

  
......
231 232
	}
232 233

  
233 234
	private  void mergeErmsSynFaunaEuAcc (List<List<String>> ermsAccFaEuSyn){
234
		//occurence: verknüpfe statt dem Fauna Europaea Taxon das akzeptierte Taxon, des Synonyms mit der Occurence (CDM -> distribution)
235
		//suche distribution (über das Taxon der TaxonDescription), dessen Taxon, das entsprechende Fauna Eu Taxon ist und verkn�pfe es mit dem akzeptieren Taxon des Erms Syn
235
		//occurence: verkn?pfe statt dem Fauna Europaea Taxon das akzeptierte Taxon, des Synonyms mit der Occurence (CDM -> distribution)
236
		//suche distribution (?ber das Taxon der TaxonDescription), dessen Taxon, das entsprechende Fauna Eu Taxon ist und verkn?pfe es mit dem akzeptieren Taxon des Erms Syn
236 237
		for (List<String> row: ermsAccFaEuSyn){
237 238
		    Taxon taxonFaunaEu = (Taxon)appCtrInit.getTaxonService().find(UUID.fromString(row.get(faunaEuUuid)));
238 239
			Synonym synErms = (Synonym)appCtrInit.getTaxonService().find(UUID.fromString(row.get(ermsUuid)));
......
284 285
				}
285 286

  
286 287
			}
288
			//the fauna eu taxon should now only contain synonyms not existing in erms
287 289
			moveFaunaEuSynonymsToErmsTaxon(taxonFaunaEu, taxonErms);
288 290
			moveAllInformationsFromFaunaEuToErms(taxonFaunaEu, taxonErms);
289 291
			moveOriginalDbToErmsTaxon(taxonFaunaEu, taxonErms);
......
302 304
	private void updateNameRelationships(List<List<String>> ermsAccFaEuSyn){
303 305
		//suche alle NameRelationships aus FaunaEu und Erms, wo (faunaEu)relatedFrom.name.titleCache = (erms)relatedFrom.name.titleCache und ersetze in der faunaEu Relationship den relatedTo.name durch den relatedTo.name der erms-relationship
304 306
		//wenn es diese relationship noch nicht gibt und der typ der gleiche ist!!
305
		//wenn der relatedTo Name zu einem Erms Taxon und einem FaunaEu Synonym gehört
307
		//wenn der relatedTo Name zu einem Erms Taxon und einem FaunaEu Synonym geh?rt
306 308

  
307 309
		Synonym synFaunaEu;
308 310
		Taxon taxonErms;

Also available in: Unified diff