001 // Copyright 2010 Google Inc. All Rights Reserved.
002
003 package com.google.common.util.concurrent;
004
005 import com.google.common.collect.ForwardingQueue;
006
007 import java.util.Collection;
008 import java.util.concurrent.BlockingQueue;
009 import java.util.concurrent.TimeUnit;
010
011 /**
012 * A {@link BlockingQueue} which forwards all its method calls to another
013 * {@link BlockingQueue}. Subclasses should override one or more methods to
014 * modify the behavior of the backing collection as desired per the <a
015 * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
016 *
017 * @author Raimundo Mirisola
018 *
019 * @param <E> the type of elements held in this collection
020 * @since 4
021 */
022 public abstract class ForwardingBlockingQueue<E> extends ForwardingQueue<E>
023 implements BlockingQueue<E> {
024
025 /** Constructor for use by subclasses. */
026 protected ForwardingBlockingQueue() {}
027
028 @Override protected abstract BlockingQueue<E> delegate();
029
030 @Override public int drainTo(
031 Collection<? super E> c, int maxElements) {
032 return delegate().drainTo(c, maxElements);
033 }
034
035 @Override public int drainTo(Collection<? super E> c) {
036 return delegate().drainTo(c);
037 }
038
039 @Override public boolean offer(E e, long timeout, TimeUnit unit)
040 throws InterruptedException {
041 return delegate().offer(e, timeout, unit);
042 }
043
044 @Override public E poll(long timeout, TimeUnit unit)
045 throws InterruptedException {
046 return delegate().poll(timeout, unit);
047 }
048
049 @Override public void put(E e) throws InterruptedException {
050 delegate().put(e);
051 }
052
053 @Override public int remainingCapacity() {
054 return delegate().remainingCapacity();
055 }
056
057 @Override public E take() throws InterruptedException {
058 return delegate().take();
059 }
060 }