Author: xor
Date: 2008-10-28 17:41:52 +0000 (Tue, 28 Oct 2008)
New Revision: 23153

Modified:
   trunk/plugins/FMSPlugin/FMSBoard.java
Log:
Implementation.

Modified: trunk/plugins/FMSPlugin/FMSBoard.java
===================================================================
--- trunk/plugins/FMSPlugin/FMSBoard.java       2008-10-28 13:41:14 UTC (rev 
23152)
+++ trunk/plugins/FMSPlugin/FMSBoard.java       2008-10-28 17:41:52 UTC (rev 
23153)
@@ -3,14 +3,27 @@
  * http://www.gnu.org/ for further details of the GPL. */
 package plugins.FMSPlugin;

+import java.util.Collections;
+import java.util.Hashtable;
 import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.NoSuchElementException;

+import freenet.keys.FreenetURI;
+
 /**
  * @author xor
  *
  */
 public class FMSBoard {

+       private final FMSBoard self = this;
+       /*
+        * FIXME: We need a datastructure which is a HashTable and a LinkedList 
which is sorted by Date of the messages.
+        * java.util.LinkedHashSet is the right thing but it does not provide 
sorting. 
+        */
+       private final Hashtable<FreenetURI, FMSMessage> mMessages = new 
HashTable<FreenetURI, FMSMessage>();
+       private final LinkedList<FMSMessage> mMessagesSorted = new 
LinkedList<FMSMessage>();
        private final FMSMessageManager mMessageManager;
        private final String mName;
        private String mDescription;
@@ -19,6 +32,7 @@
                if(newName==null || newName.isEmpty())
                        throw new IllegalArgumentException("Empty board name.");

+
                assert(newMessageManager != null);
                mMessageManager = newMessageManager;
                // FIXME: Remove anything dangerous from name and description.
@@ -53,8 +67,32 @@
         * @param identity The identity viewing the board.
         * @return An iterator of the message which the identity will see 
(based on its trust levels).
         */
-       public Iterator<FMSMessage> messageIterator(FMSOwnIdentity identity) {
-               return mMessageManager.messageIterator(identity);
+       public synchronized Iterator<FMSMessage> messageIterator(final 
FMSOwnIdentity identity) {
+               return new Iterator<FMSMessage>() {
+                       private final FMSOwnIdentity mIdentity = identity;
+                       private Iterator<FMSMessage> iter = 
self.mMessagesSorted.iterator();
+                       private FMSMessage next = iter.hasNext() ? iter.next() 
: null;
+
+                       public boolean hasNext() {
+                               for(; next != null; next = iter.hasNext() ? 
iter.next() : null)
+                               {
+                                       
if(mIdentity.wantsMessagesFrom(identity))
+                                               return true;
+                               }
+                               return false;
+                       }
+
+                       public FMSMessage next() {
+                               FMSMessage result = hasNext() ? next : null;
+                               next = iter.hasNext() ? iter.next() : null;
+                               return result;
+                       }
+
+                       public void remove() {
+                               throw new UnsupportedOperationException();
+                       }
+                       
+               }
        }

 }


Reply via email to