1 package org.opendaylight.openflowplugin.openflow.md.queue;
3 import java.util.Collection;
4 import java.util.Iterator;
5 import java.util.Queue;
7 import org.opendaylight.openflowplugin.api.openflow.md.queue.QueueItem;
8 import org.opendaylight.openflowplugin.api.openflow.md.queue.WaterMarkListener;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
12 import com.google.common.base.Preconditions;
14 public class WrapperQueueImpl<E> implements Queue<E> {
16 protected static final Logger LOG = LoggerFactory
17 .getLogger(WrapperQueueImpl.class);
19 private int lowWaterMark;
20 private int highWaterMark;
22 private WaterMarkListener queueListenerMark;
24 private Queue<E> queueDefault;
26 private boolean flooded;
32 public WrapperQueueImpl(int capacity, Queue<E> queueDefault,
33 WaterMarkListener queueListenerMark) {
34 this.queueListenerMark = queueListenerMark;
35 this.queueDefault = Preconditions.checkNotNull(queueDefault);
37 this.highWaterMark = (int) (capacity * 0.8);
38 this.lowWaterMark = (int) (capacity * 0.65);
42 * Marking checks size of {@link #queueDefault} and on the basis of this is
45 private void marking() {
46 if (queueDefault.size() >= highWaterMark && !flooded) {
47 queueListenerMark.onHighWaterMark();
49 } else if (queueDefault.size() <= lowWaterMark && flooded) {
50 queueListenerMark.onLowWaterMark();
56 * @return true if flooded
58 public boolean isFlooded() {
63 * poll {@link QueueItem} and call {@link #marking()} for check marks and
64 * set autoRead if it need it
69 E nextQueueItem = queueDefault.poll();
74 public boolean add(E e) {
75 return queueDefault.add(e);
79 return queueDefault.size();
82 public boolean isEmpty() {
83 return queueDefault.isEmpty();
86 public boolean contains(Object o) {
87 return queueDefault.contains(o);
90 public boolean offer(E e) {
91 boolean enqueueResult = queueDefault.offer(e);
96 public Iterator<E> iterator() {
97 return queueDefault.iterator();
101 return queueDefault.remove();
104 public Object[] toArray() {
105 return queueDefault.toArray();
109 return queueDefault.element();
113 return queueDefault.peek();
116 public <T> T[] toArray(T[] a) {
117 return queueDefault.toArray(a);
120 public boolean remove(Object o) {
121 return queueDefault.remove(o);
124 public boolean containsAll(Collection<?> c) {
125 return queueDefault.containsAll(c);
128 public boolean addAll(Collection<? extends E> c) {
129 return queueDefault.addAll(c);
132 public boolean removeAll(Collection<?> c) {
133 return queueDefault.removeAll(c);
136 public boolean retainAll(Collection<?> c) {
137 return queueDefault.retainAll(c);
140 public void clear() {
141 queueDefault.clear();
144 public boolean equals(Object o) {
145 return queueDefault.equals(o);
148 public int hashCode() {
149 return queueDefault.hashCode();