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);
}
/**