2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.navigation
.navigator
;
12 import java
.util
.ArrayList
;
13 import java
.util
.Iterator
;
14 import java
.util
.List
;
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
;
23 * Retrieves the elements of a <code>Taxon</code>'s synonymy list, including misapplied names,
26 * Note: does not return an entry for the <code>Taxon</code> itself.
33 public class IterableSynonymyList
implements Iterable
<TaxonBase
> {
38 * <p>Constructor for IterableSynonymyList.</p>
40 * @param taxon a {@link eu.etaxonomy.cdm.model.taxon.Taxon} object.
42 public IterableSynonymyList(Taxon taxon
) {
49 * @return a {@link java.util.Iterator} object.
51 public Iterator
<TaxonBase
> iterator() {
52 return new TaxonIterator(taxon
);
55 class TaxonIterator
implements Iterator
<TaxonBase
> {
57 List
<TaxonBase
> synonymyList
;
60 public TaxonIterator(Taxon taxon
) {
61 synonymyList
= new ArrayList
<TaxonBase
>();
62 HomotypicalGroup homotypicGroup
= taxon
.getHomotypicGroup();
64 if (homotypicGroup
!= null) {
65 List
<Synonym
> homotypicSynonyms
= taxon
.getSynonymsInGroup(homotypicGroup
);
66 for (Synonym synonym
: homotypicSynonyms
) {
68 // Make sure synonym belongs to the taxon
69 if (synonym
.getAcceptedTaxon() != null && synonym
.getAcceptedTaxon().equals(taxon
)) {
70 synonymyList
.add(synonym
);
75 List
<HomotypicalGroup
> heterotypicGroups
= taxon
.getHeterotypicSynonymyGroups();
76 for (HomotypicalGroup heterotypicGroup
: heterotypicGroups
) {
78 // Make sure this is not the taxon's homotypic group
79 if (!heterotypicGroup
.equals(homotypicGroup
)) {
81 List
<Synonym
> heterotypicSynonyms
= taxon
.getSynonymsInGroup(heterotypicGroup
);
82 for (Synonym synonym
: heterotypicSynonyms
) {
84 // Make sure synonym belongs to the taxon
85 if (synonym
.getAcceptedTaxon() != null && synonym
.getAcceptedTaxon().equals(taxon
)) {
86 synonymyList
.add(synonym
);
92 Set
<Taxon
> misappliedNames
= taxon
.getMisappliedNames();
93 for (Taxon misappliedName
: misappliedNames
) {
94 synonymyList
.add(misappliedName
);
99 public boolean hasNext() {
100 if (synonymyList
.size() == index
) {
106 public TaxonBase
next() {
107 TaxonBase next
= synonymyList
.get(index
);
112 public void remove() {}