Project

General

Profile

Download (20.6 KB) Statistics
| Branch: | Revision:
1
package eu.etaxonomy.cdm.app.pesi.merging;
2

    
3
import java.io.FileWriter;
4
import java.io.IOException;
5
import java.util.ArrayList;
6
import java.util.Iterator;
7
import java.util.List;
8
import java.util.Map;
9
import java.util.Set;
10
import java.util.UUID;
11

    
12
import org.apache.log4j.Logger;
13

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

    
35
public class FaunaEuErmsFindIdenticalNamesActivator {
36
	private static final Logger logger = Logger.getLogger(FaunaEuErmsFindIdenticalNamesActivator.class);
37
	//static final ICdmDataSource faunaEuropaeaSource = CdmDestinations.localH2();
38
	static final ICdmDataSource faunaEuropaeaSource = CdmDestinations.cdm_test_local_faunaEu_mysql();
39
	static Reference faunaSec;
40
	static Reference ermsSec;
41

    
42
	//TODO hole aus beiden DB alle TaxonNameBases
43

    
44
	private CdmApplicationController initDb(ICdmDataSource db) {
45

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

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

    
53
		return appCtrInit;
54
	}
55

    
56

    
57
	/**
58
	 * @param args
59
	 */
60
	public static void main(String[] args) {
61

    
62
		FaunaEuErmsFindIdenticalNamesActivator sc = new FaunaEuErmsFindIdenticalNamesActivator();
63

    
64
		CdmApplicationController appCtrFaunaEu = sc.initDb(faunaEuropaeaSource);
65
		String sFileName = "C:\\Users\\k.luther\\test";
66
		//CdmApplicationController appCtrErms = sc.initDb(ermsSource);
67
		List<String> propertyPaths = new ArrayList<>();
68
		propertyPaths.add("sources.*");
69
		propertyPaths.add("sources.idInSource");
70
		propertyPaths.add("sources.idNamespace");
71
		propertyPaths.add("taxonBases.*");
72
		propertyPaths.add("taxonBases.relationsFromThisTaxon");
73
		propertyPaths.add("taxonBases.taxonNodes.*");
74
		propertyPaths.add("taxonBases.taxonNodes.parent.*");
75
		propertyPaths.add("taxonBases.taxonNodes.childNodes.*");
76
		propertyPaths.add("taxonBases.taxonNodes.childNodes.classification.rootNode.childNodes.*");
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.*");
81
		System.err.println("Start getIdenticalNames...");
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);
86
			
87
		List<FaunaEuErmsMerging> mergingObjects = new ArrayList<>();
88
		FaunaEuErmsMerging mergeObject;
89
		TaxonName faunaEuTaxName;
90
		TaxonName ermsTaxName;
91
		System.err.println("Start creating merging objects");
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");
100

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

    
104
	}
105

    
106
	private boolean writeSameNamesToCsVFile(
107
			List<FaunaEuErmsMerging> mergingObjects, String string) {
108
	    try{
109
    		FileWriter writer = new FileWriter(string);
110

    
111
    	    //create Header
112
    	    String firstLine = "same names";
113
    	    createHeader(writer, firstLine);
114
    		for (FaunaEuErmsMerging merging : mergingObjects){
115
    	    	writeCsvLine(writer, merging) ;
116
    		}
117
    		writer.flush();
118
    		writer.close();
119
    	}catch(IOException e){
120
    	    return false;
121
    	}
122
    	return true;
123
	}
124

    
125
	private boolean writeSameNamesdifferentPhylumToCsv(List<FaunaEuErmsMerging> mergingObjects, String sfileName){
126
		try
127
		{
128
		    FileWriter writer = new FileWriter(sfileName);
129

    
130
		    //create Header
131
		   String firstLine = "same names but different phylum";
132
		   createHeader(writer, firstLine);
133

    
134
			//write data
135
			for (FaunaEuErmsMerging merging : mergingObjects){
136
		    	//TODO
137
				if ((merging.getPhylumInErms()== null )^ (merging.getPhylumInFaunaEu()== null)){
138
					writeCsvLine(writer, merging) ;
139
				}else if(!((merging.getPhylumInErms()==null) && (merging.getPhylumInFaunaEu()==null))){
140
					if(!merging.getPhylumInErms().equals(merging.getPhylumInFaunaEu())){
141
						writeCsvLine(writer, merging) ;
142
					}
143
				}
144
			}
145
			writer.flush();
146
			writer.close();
147
		}
148
		catch(IOException e)
149
		{
150
		 return false;
151
		}
152
		return true;
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
	}
184

    
185
	private boolean writeSameNamesdifferentRankToCsv(List<FaunaEuErmsMerging> mergingObjects, String sfileName){
186
		try
187
		{
188
		    FileWriter writer = new FileWriter(sfileName);
189
		    String firstLine = "same names but different rank";
190
		    //create Header
191
		    createHeader(writer, firstLine);
192

    
193
			//write data
194
			for (FaunaEuErmsMerging merging : mergingObjects){
195

    
196
				if (!merging.getRankInErms().equals(merging.getRankInFaunaEu())){
197
					writeCsvLine(writer, merging);
198
				}
199
			}
200
			writer.flush();
201
			writer.close();
202
		}
203
		catch(IOException e)
204
		{
205
		 return false;
206
		}
207
		return true;
208
	}
209

    
210
	private void createHeader(FileWriter writer, String firstLine) throws IOException{
211
		 	writer.append(firstLine);
212
		    writer.append('\n');
213
		    writer.append("uuid in Fauna Europaea");
214
			writer.append(';');
215
			writer.append("id in Fauna Europaea");
216
			writer.append(';');
217
			writer.append("name");
218
			writer.append(';');
219
			writer.append("author");
220
			writer.append(';');
221
			writer.append("rank");
222
			writer.append(';');
223
			writer.append("state");
224
			writer.append(';');
225
			writer.append("phylum");
226
			writer.append(';');
227
			writer.append("parent");
228
			writer.append(';');
229
			writer.append("parent rank");
230
			writer.append(';');
231

    
232
			writer.append("uuid in Erms");
233
			writer.append(';');
234
			writer.append("id in Erms");
235
			writer.append(';');
236
			writer.append("name");
237
			writer.append(';');
238
			writer.append("author");
239
			writer.append(';');
240
			writer.append("rank");
241
			writer.append(';');
242
			writer.append("state");
243
			writer.append(';');
244
			writer.append("phylum");
245
			writer.append(';');
246
			writer.append("parent");
247
			writer.append(';');
248
			writer.append("parent rank");
249
			writer.append('\n');
250
	}
251

    
252
	private boolean writeSameNamesdifferentStatusToCsv(List<FaunaEuErmsMerging> mergingObjects, String sfileName){
253
		try
254
		{
255
		    FileWriter writer = new FileWriter(sfileName);
256

    
257
		    //create Header
258
		    String firstLine = "same names but different status";
259
		    createHeader(writer, firstLine);
260

    
261
			//write data
262
			for (FaunaEuErmsMerging merging : mergingObjects){
263

    
264
				if (merging.isStatInErms()^merging.isStatInFaunaEu()){
265
					 writeCsvLine(writer, merging);
266
				}
267
			}
268

    
269
			writer.flush();
270
			writer.close();
271
		}
272
		catch(IOException e)
273
		{
274
		 return false;
275
		}
276
		return true;
277
	}
278

    
279
	private boolean writeSameNamesdifferentAuthorToCsv(List<FaunaEuErmsMerging> mergingObjects, String sfileName){
280
		try
281
		{
282
		    FileWriter writer = new FileWriter(sfileName);
283

    
284
		    //create Header
285
		   String firstLine = "same names but different authors";
286
		   createHeader(writer, firstLine);
287

    
288
			//write data
289
			for (FaunaEuErmsMerging merging : mergingObjects){
290

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

    
298

    
299
			writer.flush();
300
			writer.close();
301
		}
302
		catch(IOException e)
303
		{
304
		 return false;
305
		}
306
		return true;
307
	}
308

    
309
	private void writeCsvLine(FileWriter writer, FaunaEuErmsMerging merging) throws IOException{
310

    
311
		writer.append(merging.getUuidFaunaEu());
312
		writer.append(';');
313
		writer.append(merging.getIdInFaunaEu());
314
		writer.append(';');
315
		writer.append(merging.getNameCacheInFaunaEu());
316
		writer.append(';');
317
		writer.append(merging.getAuthorInFaunaEu());
318
		writer.append(';');
319
		writer.append(merging.getRankInFaunaEu());
320
		writer.append(';');
321
		if (merging.isStatInFaunaEu()){
322
			writer.append("accepted");
323
		}else{
324
			writer.append("synonym");
325
		}
326
		writer.append(';');
327
		writer.append(merging.getPhylumInFaunaEu() != null? merging.getPhylumInFaunaEu().getTaxonTitleCache(): "");
328
		writer.append(';');
329
		writer.append(merging.getParentStringInFaunaEu());
330
		writer.append(';');
331
		writer.append(merging.getParentRankStringInFaunaEu());
332
		writer.append(';');
333

    
334
		writer.append(merging.getUuidErms());
335
		writer.append(';');
336
		writer.append(merging.getIdInErms());
337
		writer.append(';');
338
		writer.append(merging.getNameCacheInErms());
339
		writer.append(';');
340
		writer.append(merging.getAuthorInErms());
341
		writer.append(';');
342
		writer.append(merging.getRankInErms());
343
		writer.append(';');
344
		if (merging.isStatInErms()){
345
			writer.append("accepted");
346
		}else{
347
			writer.append("synonym");
348
		}
349

    
350
		writer.append(';');
351
		writer.append(merging.getPhylumInErms() != null? merging.getPhylumInErms().getTaxonTitleCache():"");
352
		writer.append(';');
353
		writer.append(merging.getParentStringInErms());
354
		writer.append(';');
355
		writer.append(merging.getParentRankStringInErms());
356
		writer.append('\n');
357
	}
358

    
359

    
360
	private List<FaunaEuErmsMerging> createMergeObjects(Map<String,List<TaxonName>> names, CdmApplicationController appCtr){
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"));
363
		List<FaunaEuErmsMerging> merge = new ArrayList<>();
364
		
365
		FaunaEuErmsMerging mergeObject;
366
		String idInSource1;
367
		List<TaxonName> identicalNames;
368
		
369
		for (String nameCache: names.keySet()){
370
			identicalNames = names.get(nameCache);
371
			
372
			mergeObject = new FaunaEuErmsMerging();
373
			
374
			
375
			//getPhylum
376
			TaxonNodeDto phylum1 = null;
377
			TaxonName faunaEuName = null;
378
			TaxonName ermsName = null;
379
			TaxonBase tempName = null;
380
			if (identicalNames.size() == 2) {
381
				Set<TaxonBase> taxonBases = identicalNames.get(0).getTaxonBases();
382
				if (taxonBases.size()==1) {
383
					Iterator<TaxonBase> it = taxonBases.iterator();
384
					tempName = it.next();
385
					if (tempName.getSec().equals(faunaSec)) {
386
						faunaEuName = identicalNames.get(0);
387
						ermsName = identicalNames.get(1);
388
					}else {
389
						faunaEuName = identicalNames.get(1);
390
						ermsName = identicalNames.get(0);
391
					}
392
				}else {
393
					//TODO: find the two correct names
394
				}
395
			}else {
396
				logger.debug(nameCache + " has more than two identical namecaches");
397
				continue;
398
			}
399
			phylum1 = null;
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())){
409
					phylum1 =appCtr.getTaxonNodeService().taxonNodeDtoParentRank(faunaEuClassification, Rank.PHYLUM(), faunaEuName);
410
			}
411

    
412
			TaxonNodeDto phylum2 = null;
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())){
422
				phylum2 = appCtr.getTaxonNodeService().taxonNodeDtoParentRank(ermsClassification, Rank.PHYLUM(), ermsName);
423
			}
424
			mergeObject.setPhylumInErms(phylum1);
425
			mergeObject.setPhylumInFaunaEu(phylum2);
426

    
427
			//getUuids
428
			mergeObject.setUuidErms(ermsName.getUuid().toString());
429
			mergeObject.setUuidFaunaEu(faunaEuName.getUuid().toString());
430

    
431
			Iterator<IdentifiableSource> sources = ermsName.getSources().iterator();
432
			if (sources.hasNext()){
433
				IdentifiableSource source = sources.next();
434
				idInSource1 = source.getIdInSource();
435
				mergeObject.setIdInErms(idInSource1);
436
			}
437
			sources = faunaEuName.getSources().iterator();
438
			if (sources.hasNext()){
439
				IdentifiableSource source = sources.next();
440
				idInSource1 = source.getIdInSource();
441
				mergeObject.setIdInFaunaEu(idInSource1);
442
			}
443

    
444
			mergeObject.setNameCacheInErms(ermsName.getNameCache());
445
			mergeObject.setNameCacheInFaunaEu(faunaEuName.getNameCache());
446

    
447
			mergeObject.setAuthorInErms(ermsName.getAuthorshipCache());
448
			mergeObject.setAuthorInFaunaEu(faunaEuName.getAuthorshipCache());
449
			Set<Taxon> taxa = ermsName.getTaxa();
450
			if (!taxa.isEmpty()){
451
				mergeObject.setStatInErms(true);
452
				Iterator<Taxon> taxaIterator = taxa.iterator();
453
				Taxon taxon = null;
454
				while (taxaIterator.hasNext()){
455
					taxon = taxaIterator.next();
456
					if (!taxon.isMisapplication()){
457
						break;
458
					}
459
				}
460
				Set<TaxonNode> nodes = taxon.getTaxonNodes();
461
				Iterator<TaxonNode> taxonNodeIterator = nodes.iterator();
462
				TaxonNode node, parentNode = null;
463
				while (taxonNodeIterator.hasNext()){
464
					node = taxonNodeIterator.next();
465
					if (!node.isTopmostNode()){
466
						parentNode = node.getParent();
467
					}
468
				}
469
				//TODO: ändern mit erweitertem Initializer..
470
				if (parentNode != null){
471
				    TaxonName parentName = HibernateProxyHelper.deproxy(parentNode.getTaxon().getName());
472
					String parentNameCache = parentName.getNameCache();
473
					mergeObject.setParentStringInErms(parentNameCache);
474
					mergeObject.setParentRankStringInErms(parentName.getRank().getLabel());
475
					
476
				}
477
			}else{
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
				}
488
			}
489
			taxa = faunaEuName.getTaxa();
490
			if (!taxa.isEmpty()){
491
				mergeObject.setStatInFaunaEu(true);
492
				Iterator<Taxon> taxaIterator = taxa.iterator();
493
				Taxon taxon = null;
494
				while (taxaIterator.hasNext()){
495
					taxon = taxaIterator.next();
496
					if (!taxon.isMisapplication()){
497
						break;
498
					}
499
				}
500
				Set<TaxonNode> nodes = taxon.getTaxonNodes();
501
				Iterator<TaxonNode> taxonNodeIterator = nodes.iterator();
502
				TaxonNode node, parentNode = null;
503
				while (taxonNodeIterator.hasNext()){
504
					node = taxonNodeIterator.next();
505
					if (!node.isTopmostNode()){
506
						parentNode = node.getParent();
507
					}
508
				}
509
				//TODO: ändern mit erweitertem Initializer..
510
				if (parentNode != null){
511
					if (parentNode.getTaxon().getName().isZoological()){
512

    
513
    					IZoologicalName parentName = CdmBase.deproxy(parentNode.getTaxon().getName());
514
    					String parentNameCache = parentName.getNameCache();
515
    					mergeObject.setParentStringInFaunaEu(parentNameCache);
516
    					mergeObject.setParentRankStringInFaunaEu(parentName.getRank().getLabel());
517
    					
518
					}else{
519
						logger.debug("no zoologicalName: " + parentNode.getTaxon().getName().getTitleCache() +" . "+parentNode.getTaxon().getName().getUuid());
520
					}
521

    
522
				}
523
			}else{
524
				mergeObject.setStatInFaunaEu(false);
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
				}
534
			}
535
			
536

    
537
			mergeObject.setRankInErms(ermsName.getRank().getLabel());
538
			mergeObject.setRankInFaunaEu(faunaEuName.getRank().getLabel());
539

    
540
			//set parent informations
541

    
542

    
543
			/*
544
			Set<HybridRelationship> parentRelations = zooName.getParentRelationships();
545
			Iterator parentIterator = parentRelations.iterator();
546
			HybridRelationship parentRel;
547
			ZoologicalName parentName;
548
			while (parentIterator.hasNext()){
549
				parentRel = (HybridRelationship)parentIterator.next();
550
				parentName = (ZoologicalName)parentRel.getParentName();
551
				mergeObject.setParentRankStringInErms(parentName.getRank().getLabel());
552
				mergeObject.setParentStringInErms(parentName.getNameCache());
553
			}
554

    
555
			parentRelations = zooName2.getParentRelationships();
556
			parentIterator = parentRelations.iterator();
557

    
558
			while (parentIterator.hasNext()){
559
				parentRel = (HybridRelationship)parentIterator.next();
560
				parentName = (ZoologicalName)parentRel.getParentName();
561
				mergeObject.setParentRankStringInFaunaEu(parentName.getRank().getLabel());
562
				mergeObject.setParentStringInFaunaEu(parentName.getNameCache());
563
			}*/
564
			merge.add(mergeObject);
565
		}
566
//		}
567

    
568
		return merge;
569

    
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
	}
617
}
(1-1/2)