sventon subversion web client - http://www.sventon.org
[show recent changes]
 
  Help
HEAD
Rev: 53043 - http://anonsvn.icesoft.org/repo / iceutil / tags / vras-1.3.1 / iceutil / util / src / main / java / org / icesoft / util / concurrent / BlockingQueueActivityReporter.java
Show File - BlockingQueueActivityReporter.java  [show properties]
spinner
package org.icesoft.util.concurrent;
import java.io.Serializable;
import java.util.Collection;
import java.util.HashSet;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
10  import java.util.logging.Level;
11  import java.util.logging.Logger;
12 
13  public class BlockingQueueActivityReporter<E>
14  extends DelegatingBlockingQueue<E>
15  implements BlockingQueue<E>, Collection<E>, Iterable<E>, Queue<E>, Serializable {
16      private static final long serialVersionUID = -7703052913523207245L;
17 
18      private static final Logger LOGGER = Logger.getLogger(BlockingQueueActivityReporter.class.getName());
19 
20      private final Set<BlockingQueueListener> listenerSet = new HashSet<BlockingQueueListener>();
21 
22      public BlockingQueueActivityReporter(final BlockingQueue<E> blockingQueue)
23      throws NullPointerException {
24          super(blockingQueue);
25      }
26 
27      public void addListener(final BlockingQueueListener listener) {
28          if (!getModifiableListenerSet().contains(listener)) {
29              getModifiableListenerSet().add(listener);
30          }
31      }
32 
33      @Override
34      public boolean add(final E element) {
35          for (final BlockingQueueListener _listener : getModifiableListenerSet()) {
36              _listener.onAdd(new BlockingQueueEvent(getBlockingQueue()));
37          }
38          return super.add(element);
39      }
40 
41      @Override
42      public boolean addAll(final Collection<? extends E> collection) {
43          for (final BlockingQueueListener _listener : getModifiableListenerSet()) {
44              _listener.onAddAll(new BlockingQueueEvent(getBlockingQueue()));
45          }
46          return super.addAll(collection);
47      }
48 
49      @Override
50      public E element() {
51          for (final BlockingQueueListener _listener : getModifiableListenerSet()) {
52              _listener.onElement(new BlockingQueueEvent(getBlockingQueue()));
53          }
54          return super.element();
55      }
56 
57      @Override
58      public boolean offer(final E element) {
59          for (final BlockingQueueListener _listener : getModifiableListenerSet()) {
60              _listener.onOffer(new BlockingQueueEvent(getBlockingQueue()));
61          }
62          return super.offer(element);
63      }
64 
65      @Override
66      public boolean offer(final E element, final long timeout, final TimeUnit unit)
67      throws InterruptedException {
68          for (final BlockingQueueListener _listener : getModifiableListenerSet()) {
69              _listener.onOffer(new BlockingQueueEvent(getBlockingQueue()));
70          }
71          return super.offer(element, timeout, unit);
72      }
73 
74      @Override
75      public E peek() {
76          for (final BlockingQueueListener _listener : getModifiableListenerSet()) {
77              _listener.onPeek(new BlockingQueueEvent(getBlockingQueue()));
78          }
79          return super.peek();
80      }
81 
82      @Override
83      public E poll() {
84          for (final BlockingQueueListener _listener : getModifiableListenerSet()) {
85              _listener.onPoll(new BlockingQueueEvent(getBlockingQueue()));
86          }
87          return super.poll();
88      }
89 
90      @Override
91      public E poll(final long timeout, final TimeUnit unit)
92      throws InterruptedException {
93          for (final BlockingQueueListener _listener : getModifiableListenerSet()) {
94              _listener.onPoll(new BlockingQueueEvent(getBlockingQueue()));
95          }
96          return super.poll(timeout, unit);
97      }
98 
99      @Override
100      public void put(final E element)
101      throws InterruptedException {
102          for (final BlockingQueueListener _listener : getModifiableListenerSet()) {
103              _listener.onPut(new BlockingQueueEvent(getBlockingQueue()));
104          }
105          super.put(element);
106      }
107 
108      @Override
109      public E remove() {
110          for (final BlockingQueueListener _listener : getModifiableListenerSet()) {
111              _listener.onRemove(new BlockingQueueEvent(getBlockingQueue()));
112          }
113          return super.remove();
114      }
115 
116      @Override
117      public boolean remove(final Object object) {
118          for (final BlockingQueueListener _listener : getModifiableListenerSet()) {
119              _listener.onRemove(new BlockingQueueEvent(getBlockingQueue()));
120          }
121          return super.remove(object);
122      }
123 
124      @Override
125      public boolean removeAll(final Collection<?> collection) {
126          for (final BlockingQueueListener _listener : getModifiableListenerSet()) {
127              _listener.onRemoveAll(new BlockingQueueEvent(getBlockingQueue()));
128          }
129          return super.removeAll(collection);
130      }
131 
132      @Override
133      public E take()
134      throws InterruptedException {
135          for (final BlockingQueueListener _listener : getModifiableListenerSet()) {
136              _listener.onTake(new BlockingQueueEvent(getBlockingQueue()));
137          }
138          return super.take();
139      }
140 
141      public void removeListener(final BlockingQueueListener listener) {
142          if (getModifiableListenerSet().contains(listener)) {
143              getModifiableListenerSet().remove(listener);
144          }
145      }
146 
147      public BlockingQueueActivityReporter<E> withListener(final BlockingQueueListener listener) {
148          addListener(listener);
149          return this;
150      }
151 
152      protected Set<BlockingQueueListener> getModifiableListenerSet() {
153          return listenerSet;
154      }
155  }


feed icon

sventon 2.5.1