You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2009/09/17 20:07:38 UTC

svn commit: r816313 - in /incubator/pivot/trunk/core/src/org/apache/pivot/collections: ./ concurrent/

Author: gbrown
Date: Thu Sep 17 18:07:37 2009
New Revision: 816313

URL: http://svn.apache.org/viewvc?rev=816313&view=rev
Log:
Add collection events to Stack and Queue; implement ArrayStack, ArrayQueue, LinkedStack, and LinkedQueue via encapsulation rather than inheritance.


Modified:
    incubator/pivot/trunk/core/src/org/apache/pivot/collections/ArrayQueue.java
    incubator/pivot/trunk/core/src/org/apache/pivot/collections/ArrayStack.java
    incubator/pivot/trunk/core/src/org/apache/pivot/collections/LinkedQueue.java
    incubator/pivot/trunk/core/src/org/apache/pivot/collections/LinkedStack.java
    incubator/pivot/trunk/core/src/org/apache/pivot/collections/Queue.java
    incubator/pivot/trunk/core/src/org/apache/pivot/collections/QueueListener.java
    incubator/pivot/trunk/core/src/org/apache/pivot/collections/Stack.java
    incubator/pivot/trunk/core/src/org/apache/pivot/collections/StackListener.java
    incubator/pivot/trunk/core/src/org/apache/pivot/collections/concurrent/SynchronizedQueue.java
    incubator/pivot/trunk/core/src/org/apache/pivot/collections/concurrent/SynchronizedStack.java

Modified: incubator/pivot/trunk/core/src/org/apache/pivot/collections/ArrayQueue.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/org/apache/pivot/collections/ArrayQueue.java?rev=816313&r1=816312&r2=816313&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/org/apache/pivot/collections/ArrayQueue.java (original)
+++ incubator/pivot/trunk/core/src/org/apache/pivot/collections/ArrayQueue.java Thu Sep 17 18:07:37 2009
@@ -17,7 +17,9 @@
 package org.apache.pivot.collections;
 
 import java.util.Comparator;
+import java.util.Iterator;
 
+import org.apache.pivot.util.ImmutableIterator;
 import org.apache.pivot.util.ListenerList;
 
 
@@ -25,9 +27,10 @@
  * Implementation of the {@link Queue} interface that is backed by an
  * array.
  */
-public class ArrayQueue<T> extends ArrayList<T> implements Queue<T> {
+public class ArrayQueue<T> implements Queue<T> {
     private static final long serialVersionUID = 0;
 
+    private ArrayList<T> arrayList = new ArrayList<T>();
     private transient QueueListenerList<T> queueListeners = new QueueListenerList<T>();
 
     public ArrayQueue() {
@@ -35,19 +38,19 @@
     }
 
     public ArrayQueue(Comparator<T> comparator) {
-        super(comparator);
+        setComparator(comparator);
     }
 
     public ArrayQueue(int capacity) {
-        super(capacity);
+        ensureCapacity(capacity);
     }
 
     @Override
     public void enqueue(T item) {
         if (getComparator() == null) {
-            insert(item, 0);
+            arrayList.insert(item, 0);
         } else {
-            add(item);
+            arrayList.add(item);
         }
 
         queueListeners.itemEnqueued(this, item);
@@ -55,12 +58,12 @@
 
     @Override
     public T dequeue() {
-        int length = getLength();
+        int length = arrayList.getLength();
         if (length == 0) {
             throw new IllegalStateException();
         }
 
-        T item = remove(length - 1, 1).get(0);
+        T item = arrayList.remove(length - 1, 1).get(0);
         queueListeners.itemDequeued(this, item);
 
         return item;
@@ -69,17 +72,47 @@
     @Override
     public T peek() {
         T item = null;
-        int length = getLength();
+        int length = arrayList.getLength();
         if (length > 0) {
-            item = get(length - 1);
+            item = arrayList.get(length - 1);
         }
 
         return item;
     }
 
     @Override
+    public void clear() {
+        if (arrayList.getLength() > 0) {
+            arrayList.clear();
+            queueListeners.queueCleared(this);
+        }
+    }
+
+    @Override
     public boolean isEmpty() {
-        return (getLength() == 0);
+        return (arrayList.getLength() == 0);
+    }
+
+    public void ensureCapacity(int capacity) {
+        arrayList.ensureCapacity(capacity);
+    }
+
+    @Override
+    public Comparator<T> getComparator() {
+        return arrayList.getComparator();
+    }
+
+    @Override
+    public void setComparator(Comparator<T> comparator) {
+        Comparator<T> previousComparator = getComparator();
+        arrayList.setComparator(comparator);
+
+        queueListeners.comparatorChanged(this, previousComparator);
+    }
+
+    @Override
+    public Iterator<T> iterator() {
+        return new ImmutableIterator<T>(arrayList.iterator());
     }
 
     @Override

Modified: incubator/pivot/trunk/core/src/org/apache/pivot/collections/ArrayStack.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/org/apache/pivot/collections/ArrayStack.java?rev=816313&r1=816312&r2=816313&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/org/apache/pivot/collections/ArrayStack.java (original)
+++ incubator/pivot/trunk/core/src/org/apache/pivot/collections/ArrayStack.java Thu Sep 17 18:07:37 2009
@@ -17,7 +17,9 @@
 package org.apache.pivot.collections;
 
 import java.util.Comparator;
+import java.util.Iterator;
 
+import org.apache.pivot.util.ImmutableIterator;
 import org.apache.pivot.util.ListenerList;
 
 
@@ -25,9 +27,10 @@
  * Implementation of the {@link Stack} interface that is backed by an
  * array.
  */
-public class ArrayStack<T> extends ArrayList<T> implements Stack<T> {
+public class ArrayStack<T> implements Stack<T> {
     private static final long serialVersionUID = 0;
 
+    private ArrayList<T> arrayList = new ArrayList<T>();
     private transient StackListenerList<T> stackListeners = new StackListenerList<T>();
 
     public ArrayStack() {
@@ -35,27 +38,27 @@
     }
 
     public ArrayStack(Comparator<T> comparator) {
-        super(comparator);
+        setComparator(comparator);
     }
 
     public ArrayStack(int capacity) {
-        super(capacity);
+        ensureCapacity(capacity);
     }
 
     @Override
     public void push(T item) {
-        add(item);
+        arrayList.add(item);
         stackListeners.itemPushed(this, item);
     }
 
     @Override
     public T pop() {
-        int length = getLength();
+        int length = arrayList.getLength();
         if (length == 0) {
             throw new IllegalStateException();
         }
 
-        T item = remove(length - 1, 1).get(0);
+        T item = arrayList.remove(length - 1, 1).get(0);
         stackListeners.itemPopped(this, item);
 
         return item;
@@ -64,17 +67,47 @@
     @Override
     public T peek() {
         T item = null;
-        int length = getLength();
+        int length = arrayList.getLength();
         if (length > 0) {
-            item = get(length - 1);
+            item = arrayList.get(length - 1);
         }
 
         return item;
     }
 
     @Override
+    public void clear() {
+        if (arrayList.getLength() > 0) {
+            arrayList.clear();
+            stackListeners.stackCleared(this);
+        }
+    }
+
+    @Override
     public boolean isEmpty() {
-        return (getLength() == 0);
+        return (arrayList.getLength() == 0);
+    }
+
+    public void ensureCapacity(int capacity) {
+        arrayList.ensureCapacity(capacity);
+    }
+
+    @Override
+    public Comparator<T> getComparator() {
+        return arrayList.getComparator();
+    }
+
+    @Override
+    public void setComparator(Comparator<T> comparator) {
+        Comparator<T> previousComparator = getComparator();
+        arrayList.setComparator(comparator);
+
+        stackListeners.comparatorChanged(this, previousComparator);
+    }
+
+    @Override
+    public Iterator<T> iterator() {
+        return new ImmutableIterator<T>(arrayList.iterator());
     }
 
     @Override

Modified: incubator/pivot/trunk/core/src/org/apache/pivot/collections/LinkedQueue.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/org/apache/pivot/collections/LinkedQueue.java?rev=816313&r1=816312&r2=816313&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/org/apache/pivot/collections/LinkedQueue.java (original)
+++ incubator/pivot/trunk/core/src/org/apache/pivot/collections/LinkedQueue.java Thu Sep 17 18:07:37 2009
@@ -17,7 +17,9 @@
 package org.apache.pivot.collections;
 
 import java.util.Comparator;
+import java.util.Iterator;
 
+import org.apache.pivot.util.ImmutableIterator;
 import org.apache.pivot.util.ListenerList;
 
 
@@ -25,9 +27,10 @@
  * Implementation of the {@link Queue} interface that is backed by a linked
  * list.
  */
-public class LinkedQueue<T> extends LinkedList<T> implements Queue<T> {
+public class LinkedQueue<T> implements Queue<T> {
     private static final long serialVersionUID = 0;
 
+    private LinkedList<T> linkedList = new LinkedList<T>();
     private transient QueueListenerList<T> queueListeners = new QueueListenerList<T>();
 
     public LinkedQueue() {
@@ -35,15 +38,15 @@
     }
 
     public LinkedQueue(Comparator<T> comparator) {
-        super(comparator);
+        setComparator(comparator);
     }
 
     @Override
     public void enqueue(T item) {
         if (getComparator() == null) {
-            insert(item, 0);
+            linkedList.insert(item, 0);
         } else {
-            add(item);
+            linkedList.add(item);
         }
 
         queueListeners.itemEnqueued(this, item);
@@ -51,12 +54,12 @@
 
     @Override
     public T dequeue() {
-        int length = getLength();
+        int length = linkedList.getLength();
         if (length == 0) {
             throw new IllegalStateException();
         }
 
-        T item = remove(length - 1, 1).get(0);
+        T item = linkedList.remove(length - 1, 1).get(0);
         queueListeners.itemDequeued(this, item);
 
         return item;
@@ -65,17 +68,43 @@
     @Override
     public T peek() {
         T item = null;
-        int length = getLength();
+        int length = linkedList.getLength();
         if (length > 0) {
-            item = get(length - 1);
+            item = linkedList.get(length - 1);
         }
 
         return item;
     }
 
     @Override
+    public void clear() {
+        if (linkedList.getLength() > 0) {
+            linkedList.clear();
+            queueListeners.queueCleared(this);
+        }
+    }
+
+    @Override
     public boolean isEmpty() {
-        return (getLength() == 0);
+        return (linkedList.getLength() == 0);
+    }
+
+    @Override
+    public Comparator<T> getComparator() {
+        return linkedList.getComparator();
+    }
+
+    @Override
+    public void setComparator(Comparator<T> comparator) {
+        Comparator<T> previousComparator = getComparator();
+        linkedList.setComparator(comparator);
+
+        queueListeners.comparatorChanged(this, previousComparator);
+    }
+
+    @Override
+    public Iterator<T> iterator() {
+        return new ImmutableIterator<T>(linkedList.iterator());
     }
 
     @Override

Modified: incubator/pivot/trunk/core/src/org/apache/pivot/collections/LinkedStack.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/org/apache/pivot/collections/LinkedStack.java?rev=816313&r1=816312&r2=816313&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/org/apache/pivot/collections/LinkedStack.java (original)
+++ incubator/pivot/trunk/core/src/org/apache/pivot/collections/LinkedStack.java Thu Sep 17 18:07:37 2009
@@ -17,17 +17,19 @@
 package org.apache.pivot.collections;
 
 import java.util.Comparator;
+import java.util.Iterator;
 
+import org.apache.pivot.util.ImmutableIterator;
 import org.apache.pivot.util.ListenerList;
 
-
 /**
  * Implementation of the {@link Stack} interface that is backed by a linked
  * list.
  */
-public class LinkedStack<T> extends LinkedList<T> implements Stack<T> {
+public class LinkedStack<T> implements Stack<T> {
     private static final long serialVersionUID = 0;
 
+    private LinkedList<T> linkedList = new LinkedList<T>();
     private transient StackListenerList<T> stackListeners = new StackListenerList<T>();
 
     public LinkedStack() {
@@ -35,23 +37,23 @@
     }
 
     public LinkedStack(Comparator<T> comparator) {
-        super(comparator);
+        setComparator(comparator);
     }
 
     @Override
     public void push(T item) {
-        add(item);
+        linkedList.add(item);
         stackListeners.itemPushed(this, item);
     }
 
     @Override
     public T pop() {
-        int length = getLength();
+        int length = linkedList.getLength();
         if (length == 0) {
             throw new IllegalStateException();
         }
 
-        T item = remove(length - 1, 1).get(0);
+        T item = linkedList.remove(length - 1, 1).get(0);
         stackListeners.itemPopped(this, item);
 
         return item;
@@ -60,17 +62,43 @@
     @Override
     public T peek() {
         T item = null;
-        int length = getLength();
+        int length = linkedList.getLength();
         if (length > 0) {
-            item = get(length - 1);
+            item = linkedList.get(length - 1);
         }
 
         return item;
     }
 
     @Override
+    public void clear() {
+        if (linkedList.getLength() > 0) {
+            linkedList.clear();
+            stackListeners.stackCleared(this);
+        }
+    }
+
+    @Override
     public boolean isEmpty() {
-        return (getLength() == 0);
+        return (linkedList.getLength() == 0);
+    }
+
+    @Override
+    public Comparator<T> getComparator() {
+        return linkedList.getComparator();
+    }
+
+    @Override
+    public void setComparator(Comparator<T> comparator) {
+        Comparator<T> previousComparator = getComparator();
+        linkedList.setComparator(comparator);
+
+        stackListeners.comparatorChanged(this, previousComparator);
+    }
+
+    @Override
+    public Iterator<T> iterator() {
+        return new ImmutableIterator<T>(linkedList.iterator());
     }
 
     @Override

Modified: incubator/pivot/trunk/core/src/org/apache/pivot/collections/Queue.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/org/apache/pivot/collections/Queue.java?rev=816313&r1=816312&r2=816313&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/org/apache/pivot/collections/Queue.java (original)
+++ incubator/pivot/trunk/core/src/org/apache/pivot/collections/Queue.java Thu Sep 17 18:07:37 2009
@@ -16,6 +16,8 @@
  */
 package org.apache.pivot.collections;
 
+import java.util.Comparator;
+
 import org.apache.pivot.util.ListenerList;
 
 /**
@@ -41,6 +43,20 @@
                 listener.itemDequeued(queue, item);
             }
         }
+
+        @Override
+        public void queueCleared(Queue<T> queue) {
+            for (QueueListener<T> listener : this) {
+                listener.queueCleared(queue);
+            }
+        }
+
+        @Override
+        public void comparatorChanged(Queue<T> queue, Comparator<T> previousComparator) {
+            for (QueueListener<T> listener : this) {
+                listener.comparatorChanged(queue, previousComparator);
+            }
+        }
     }
 
     /**

Modified: incubator/pivot/trunk/core/src/org/apache/pivot/collections/QueueListener.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/org/apache/pivot/collections/QueueListener.java?rev=816313&r1=816312&r2=816313&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/org/apache/pivot/collections/QueueListener.java (original)
+++ incubator/pivot/trunk/core/src/org/apache/pivot/collections/QueueListener.java Thu Sep 17 18:07:37 2009
@@ -16,6 +16,8 @@
  */
 package org.apache.pivot.collections;
 
+import java.util.Comparator;
+
 /**
  * Queue listener interface.
  */
@@ -35,4 +37,19 @@
      * @param item
      */
     public void itemDequeued(Queue<T> queue, T item);
+
+    /**
+     * Called when a queue has been cleared.
+     *
+     * @param queue
+     */
+    public void queueCleared(Queue<T> queue);
+
+    /**
+     * Called when a queue's comparator has changed.
+     *
+     * @param queue
+     * @param previousComparator
+     */
+    public void comparatorChanged(Queue<T> queue, Comparator<T> previousComparator);
 }

Modified: incubator/pivot/trunk/core/src/org/apache/pivot/collections/Stack.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/org/apache/pivot/collections/Stack.java?rev=816313&r1=816312&r2=816313&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/org/apache/pivot/collections/Stack.java (original)
+++ incubator/pivot/trunk/core/src/org/apache/pivot/collections/Stack.java Thu Sep 17 18:07:37 2009
@@ -16,6 +16,8 @@
  */
 package org.apache.pivot.collections;
 
+import java.util.Comparator;
+
 import org.apache.pivot.util.ListenerList;
 
 /**
@@ -41,6 +43,20 @@
                 listener.itemPopped(stack, item);
             }
         }
+
+        @Override
+        public void stackCleared(Stack<T> stack) {
+            for (StackListener<T> listener : this) {
+                listener.stackCleared(stack);
+            }
+        }
+
+        @Override
+        public void comparatorChanged(Stack<T> stack, Comparator<T> previousComparator) {
+            for (StackListener<T> listener : this) {
+                listener.comparatorChanged(stack, previousComparator);
+            }
+        }
     }
 
     /**

Modified: incubator/pivot/trunk/core/src/org/apache/pivot/collections/StackListener.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/org/apache/pivot/collections/StackListener.java?rev=816313&r1=816312&r2=816313&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/org/apache/pivot/collections/StackListener.java (original)
+++ incubator/pivot/trunk/core/src/org/apache/pivot/collections/StackListener.java Thu Sep 17 18:07:37 2009
@@ -16,6 +16,8 @@
  */
 package org.apache.pivot.collections;
 
+import java.util.Comparator;
+
 /**
  * Stack listener interface.
  */
@@ -35,4 +37,19 @@
      * @param item
      */
     public void itemPopped(Stack<T> stack, T item);
+
+    /**
+     * Called when a stack has been cleared.
+     *
+     * @param stack
+     */
+    public void stackCleared(Stack<T> stack);
+
+    /**
+     * Called when a stack's comparator has changed.
+     *
+     * @param stack
+     * @param previousComparator
+     */
+    public void comparatorChanged(Stack<T> stack, Comparator<T> previousComparator);
 }

Modified: incubator/pivot/trunk/core/src/org/apache/pivot/collections/concurrent/SynchronizedQueue.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/org/apache/pivot/collections/concurrent/SynchronizedQueue.java?rev=816313&r1=816312&r2=816313&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/org/apache/pivot/collections/concurrent/SynchronizedQueue.java (original)
+++ incubator/pivot/trunk/core/src/org/apache/pivot/collections/concurrent/SynchronizedQueue.java Thu Sep 17 18:07:37 2009
@@ -94,8 +94,10 @@
 
     @Override
     public synchronized void clear() {
-        // TODO Fire event
-        queue.clear();
+        if (!queue.isEmpty()) {
+            queue.clear();
+            queueListeners.queueCleared(this);
+        }
     }
 
     @Override
@@ -110,8 +112,9 @@
 
     @Override
     public synchronized void setComparator(Comparator<T> comparator) {
-        // TODO Fire event
+        Comparator<T> previousComparator = getComparator();
         queue.setComparator(comparator);
+        queueListeners.comparatorChanged(this, previousComparator);
     }
 
     /**

Modified: incubator/pivot/trunk/core/src/org/apache/pivot/collections/concurrent/SynchronizedStack.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/core/src/org/apache/pivot/collections/concurrent/SynchronizedStack.java?rev=816313&r1=816312&r2=816313&view=diff
==============================================================================
--- incubator/pivot/trunk/core/src/org/apache/pivot/collections/concurrent/SynchronizedStack.java (original)
+++ incubator/pivot/trunk/core/src/org/apache/pivot/collections/concurrent/SynchronizedStack.java Thu Sep 17 18:07:37 2009
@@ -95,8 +95,10 @@
 
     @Override
     public synchronized void clear() {
-        // TODO Fire event
-        stack.clear();
+        if (!stack.isEmpty()) {
+            stack.clear();
+            stackListeners.stackCleared(this);
+        }
     }
 
     @Override
@@ -111,8 +113,9 @@
 
     @Override
     public synchronized void setComparator(Comparator<T> comparator) {
-        // TODO Fire event
+        Comparator<T> previousComparator = getComparator();
         stack.setComparator(comparator);
+        stackListeners.comparatorChanged(this, previousComparator);
     }
 
     /**