Checkin before trying a totally different iterator approach.
authorp.ciardelli <p.ciardelli@localhost>
Fri, 9 May 2008 09:52:10 +0000 (09:52 +0000)
committerp.ciardelli <p.ciardelli@localhost>
Fri, 9 May 2008 09:52:10 +0000 (09:52 +0000)
.gitattributes
eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/IterableSynonymyList.java [new file with mode: 0644]

index a2d7d3eb6d93946d1c929b4038790c2cba2ea27b..beaf4ceb66ffedc3a7dc1722d3099e8ec268e13b 100644 (file)
@@ -398,6 +398,7 @@ eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EditorMas
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/EmptyEditorView.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/FavoritesTableViewer.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/IFavoritesDraggable.java -text
+eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/IterableSynonymyList.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/LeftPane.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MoveDialogView.java -text
 eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/MultiPageTaxonEditor.java -text
diff --git a/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/IterableSynonymyList.java b/eclipseprojects/eu.etaxonomy.taxeditor/src/eu/etaxonomy/taxeditor/view/IterableSynonymyList.java
new file mode 100644 (file)
index 0000000..1d5b017
--- /dev/null
@@ -0,0 +1,108 @@
+\r
+package eu.etaxonomy.taxeditor.view;\r
+\r
+import java.util.Iterator;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.model.name.HomotypicalGroup;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+\r
+/**\r
+ * Provides a way to retrieve the elements of a taxon's synonymy list\r
+ *  using an iterator. Note: does not return the taxon itself.\r
+ * \r
+ * @author p.ciardelli\r
+ * @created 09.05.2008\r
+ * @version 1.0\r
+ */\r
+public class IterableSynonymyList implements Iterable {\r
+       private static final Logger logger = Logger\r
+                       .getLogger(IterableSynonymyList.class);\r
+       \r
+       private Taxon taxon;\r
+\r
+       public IterableSynonymyList(Taxon taxon) {\r
+               this.taxon = taxon;\r
+       }\r
+\r
+       @Override\r
+       public Iterator iterator() {\r
+               Iterator<?> iterator = new Iterator() {\r
+                       \r
+                       boolean returnedHomotypicSynonyms = false;\r
+                       boolean returnedHeterotypicSynonyms = false;\r
+                       boolean returnedMisappliedNames = false;\r
+\r
+                       int indexHomotypicSynonyms = 0;\r
+                       int indexHeterotypicSynonymyGroups = 0;\r
+                       int indexCurrentHeterotypicGroup = 0;\r
+                       int indexHeterotypicSynonyms = 0;\r
+                       int indexMisappliedNames = 0;\r
+                       \r
+                       List<Synonym> homotypicSynonyms = null;\r
+                       List<HomotypicalGroup> heterotypicGroups = null;\r
+                       List<Synonym> currentHeterotypicGroup = null;\r
+                       \r
+                       @Override\r
+                       public boolean hasNext() {\r
+                               boolean returnedAll = returnedHomotypicSynonyms \r
+                                                                               && returnedHeterotypicSynonyms \r
+                                                                               && returnedMisappliedNames; \r
+                               return !returnedAll;\r
+                       }\r
+\r
+                       @Override\r
+                       public Object next() {\r
+                               if (!returnedHomotypicSynonyms) {\r
+                                       if (homotypicSynonyms == null) {\r
+                                               HomotypicalGroup homotypicGroup = taxon.getHomotypicGroup();\r
+                                               List<Synonym> homotypicSynonyms = homotypicGroup.getSynonymsInGroup(taxon.getSec());\r
+                                       }\r
+                                       if (homotypicSynonyms.size() == indexHomotypicSynonyms) {\r
+                                               returnedHomotypicSynonyms = true;\r
+                                       } else {\r
+                                               Synonym synonym = homotypicSynonyms.get(indexHomotypicSynonyms);\r
+                                               indexHomotypicSynonyms++;\r
+                                               return synonym;\r
+                                       }\r
+                                       \r
+                               }\r
+                               \r
+                               if (!returnedHeterotypicSynonyms) {\r
+                                       if (heterotypicGroups == null) {\r
+                                               heterotypicGroups = taxon.getHeterotypicSynonymyGroups();\r
+                                       }\r
+                                       // Check if current heterotypic group has next\r
+                                       boolean getNewGroup = false;\r
+                                       if (currentHeterotypicGroup != null && currentHeterotypicGroup.size() == indexCurrentHeterotypicGroup) {\r
+                                               indexHeterotypicSynonymyGroups++;\r
+                                               getNewGroup = true;\r
+                                       }\r
+                                       if (heterotypicGroups.size() == indexHeterotypicSynonymyGroups) {\r
+                                               returnedHeterotypicSynonyms = true;\r
+                                       } else {\r
+                                               \r
+                                               if (currentHeterotypicGroup == null || getNewGroup) {\r
+                                                       indexCurrentHeterotypicGroup = 0;\r
+                                                       currentHeterotypicGroup = (List<Synonym>) heterotypicGroups.get(indexCurrentHeterotypicGroup);\r
+                                               }\r
+                                               \r
+                                               indexCurrentHeterotypicGroup++;\r
+                                       }\r
+                               }\r
+                               return null;\r
+                       }\r
+\r
+                       @Override\r
+                       public void remove() {\r
+                               // TODO Auto-generated method stub\r
+                               \r
+                       }\r
+                       \r
+               };\r
+               return iterator;\r
+       }\r
+}\r