Home | History | Annotate | Download | only in collect
      1 /*
      2  * Copyright (C) 2007 The Guava Authors
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.google.common.collect;
     18 
     19 import com.google.common.annotations.GwtCompatible;
     20 
     21 import java.util.Collection;
     22 import java.util.Map;
     23 import java.util.Map.Entry;
     24 import java.util.Set;
     25 
     26 import javax.annotation.Nullable;
     27 
     28 /**
     29  * A multimap which forwards all its method calls to another multimap.
     30  * Subclasses should override one or more methods to modify the behavior of
     31  * the backing multimap as desired per the <a
     32  * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
     33  *
     34  * @author Robert Konigsberg
     35  * @since 2.0 (imported from Google Collections Library)
     36  */
     37 @GwtCompatible
     38 public abstract class ForwardingMultimap<K, V> extends ForwardingObject
     39     implements Multimap<K, V> {
     40 
     41   /** Constructor for use by subclasses. */
     42   protected ForwardingMultimap() {}
     43 
     44   @Override protected abstract Multimap<K, V> delegate();
     45 
     46   @Override
     47   public Map<K, Collection<V>> asMap() {
     48     return delegate().asMap();
     49   }
     50 
     51   @Override
     52   public void clear() {
     53     delegate().clear();
     54   }
     55 
     56   @Override
     57   public boolean containsEntry(@Nullable Object key, @Nullable Object value) {
     58     return delegate().containsEntry(key, value);
     59   }
     60 
     61   @Override
     62   public boolean containsKey(@Nullable Object key) {
     63     return delegate().containsKey(key);
     64   }
     65 
     66   @Override
     67   public boolean containsValue(@Nullable Object value) {
     68     return delegate().containsValue(value);
     69   }
     70 
     71   @Override
     72   public Collection<Entry<K, V>> entries() {
     73     return delegate().entries();
     74   }
     75 
     76   @Override
     77   public Collection<V> get(@Nullable K key) {
     78     return delegate().get(key);
     79   }
     80 
     81   @Override
     82   public boolean isEmpty() {
     83     return delegate().isEmpty();
     84   }
     85 
     86   @Override
     87   public Multiset<K> keys() {
     88     return delegate().keys();
     89   }
     90 
     91   @Override
     92   public Set<K> keySet() {
     93     return delegate().keySet();
     94   }
     95 
     96   @Override
     97   public boolean put(K key, V value) {
     98     return delegate().put(key, value);
     99   }
    100 
    101   @Override
    102   public boolean putAll(K key, Iterable<? extends V> values) {
    103     return delegate().putAll(key, values);
    104   }
    105 
    106   @Override
    107   public boolean putAll(Multimap<? extends K, ? extends V> multimap) {
    108     return delegate().putAll(multimap);
    109   }
    110 
    111   @Override
    112   public boolean remove(@Nullable Object key, @Nullable Object value) {
    113     return delegate().remove(key, value);
    114   }
    115 
    116   @Override
    117   public Collection<V> removeAll(@Nullable Object key) {
    118     return delegate().removeAll(key);
    119   }
    120 
    121   @Override
    122   public Collection<V> replaceValues(K key, Iterable<? extends V> values) {
    123     return delegate().replaceValues(key, values);
    124   }
    125 
    126   @Override
    127   public int size() {
    128     return delegate().size();
    129   }
    130 
    131   @Override
    132   public Collection<V> values() {
    133     return delegate().values();
    134   }
    135 
    136   @Override public boolean equals(@Nullable Object object) {
    137     return object == this || delegate().equals(object);
    138   }
    139 
    140   @Override public int hashCode() {
    141     return delegate().hashCode();
    142   }
    143 }
    144