Project

General

Profile

Download (2.93 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
6
* The contents of this file are subject to the Mozilla Public License Version 1.1
7
* See LICENSE.TXT at the top of this package for the full license terms.
8
*/
9

    
10
package eu.etaxonomy.taxeditor.navigation.navigator;
11

    
12
import java.util.ArrayList;
13
import java.util.Iterator;
14
import java.util.List;
15
import java.util.Set;
16

    
17
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
18
import eu.etaxonomy.cdm.model.taxon.Synonym;
19
import eu.etaxonomy.cdm.model.taxon.Taxon;
20
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
21

    
22
/**
23
 * Retrieves the elements of a <code>Taxon</code>'s synonymy list, including misapplied names,
24
 * using an iterator.
25
 * <p>
26
 * Note: does not return an entry for the <code>Taxon</code> itself.
27
 * </p>
28
 *
29
 * @author p.ciardelli
30
 * @created 09.05.2008
31
 */
32
public class IterableSynonymyList implements Iterable<TaxonBase> {
33

    
34
	private Taxon taxon;
35

    
36
	/**
37
	 * <p>Constructor for IterableSynonymyList.</p>
38
	 *
39
	 * @param taxon a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
40
	 */
41
	public IterableSynonymyList(Taxon taxon) {
42
		this.taxon = taxon;
43
	}
44

    
45
	/**
46
	 * <p>iterator</p>
47
	 *
48
	 * @return a {@link java.util.Iterator} object.
49
	 */
50
	@Override
51
    public Iterator<TaxonBase> iterator() {
52
		return new TaxonIterator(taxon);
53
	}
54

    
55
	class TaxonIterator implements Iterator<TaxonBase> {
56

    
57
		List<TaxonBase> synonymyList;
58
		int index = 0;
59

    
60
		public TaxonIterator(Taxon taxon) {
61
			synonymyList = new ArrayList<>();
62
			HomotypicalGroup homotypicGroup = taxon.getHomotypicGroup();
63

    
64
			if (homotypicGroup != null) {
65
				List<Synonym> homotypicSynonyms = taxon.getSynonymsInGroup(homotypicGroup);
66
				for (Synonym synonym : homotypicSynonyms) {
67

    
68
					// Make sure synonym belongs to the taxon
69
					if (synonym.getAcceptedTaxon() != null && synonym.getAcceptedTaxon().equals(taxon)) {
70
						synonymyList.add(synonym);
71
					}
72
				}
73
			}
74

    
75
			List<HomotypicalGroup> heterotypicGroups = taxon.getHeterotypicSynonymyGroups();
76
			for (HomotypicalGroup heterotypicGroup : heterotypicGroups) {
77

    
78
				// Make sure this is not the taxon's homotypic group
79
				if (!heterotypicGroup.equals(homotypicGroup)) {
80

    
81
					List<Synonym> heterotypicSynonyms = taxon.getSynonymsInGroup(heterotypicGroup);
82
					for (Synonym synonym : heterotypicSynonyms) {
83

    
84
						// Make sure synonym belongs to the taxon
85
						if (synonym.getAcceptedTaxon() != null && synonym.getAcceptedTaxon().equals(taxon)) {
86
							synonymyList.add(synonym);
87
						}
88
					}
89
				}
90
			}
91

    
92
			Set<Taxon> misappliedNames = taxon.getMisappliedNames(true);
93
			for (Taxon misappliedName : misappliedNames) {
94
				synonymyList.add(misappliedName);
95
			}
96

    
97
		}
98

    
99
		@Override
100
        public boolean hasNext() {
101
			if (synonymyList.size() == index) {
102
				return false;
103
			}
104
			return true;
105
		}
106

    
107
		@Override
108
        public TaxonBase next() {
109
			TaxonBase next = synonymyList.get(index);
110
			index++;
111
			return next;
112
		}
113

    
114
		@Override
115
        public void remove() {}
116
	}
117
}
(2-2/6)