11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/*
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2009 The Guava Authors
31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License");
51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * you may not use this file except in compliance with the License.
61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * You may obtain a copy of the License at
71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0
91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software
111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS,
121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * See the License for the specific language governing permissions and
141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License.
151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.collect;
181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible;
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection;
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map;
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set;
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/**
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * A table which forwards all its method calls to another table. Subclasses
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * should override one or more methods to modify the behavior of the backing
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * map as desired per the <a
291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Gregory Kick
321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @since 7.0
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible
350888a09821a98ac0680fad765217302858e70fa4Paul Duffinpublic abstract class ForwardingTable<R, C, V> extends ForwardingObject
360888a09821a98ac0680fad765217302858e70fa4Paul Duffin    implements Table<R, C, V> {
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /** Constructor for use by subclasses. */
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  protected ForwardingTable() {}
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
400888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override protected abstract Table<R, C, V> delegate();
417dd252788645e940eada959bdde927426e2531c9Paul Duffin
420888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Set<Cell<R, C, V>> cellSet() {
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().cellSet();
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
470888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void clear() {
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    delegate().clear();
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
520888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Map<R, V> column(C columnKey) {
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().column(columnKey);
551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
570888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Set<C> columnKeySet() {
591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().columnKeySet();
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
620888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Map<C, Map<R, V>> columnMap() {
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().columnMap();
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
670888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public boolean contains(Object rowKey, Object columnKey) {
691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().contains(rowKey, columnKey);
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
720888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public boolean containsColumn(Object columnKey) {
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().containsColumn(columnKey);
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
770888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public boolean containsRow(Object rowKey) {
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().containsRow(rowKey);
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
820888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public boolean containsValue(Object value) {
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().containsValue(value);
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
870888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public V get(Object rowKey, Object columnKey) {
891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().get(rowKey, columnKey);
901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
920888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public boolean isEmpty() {
941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().isEmpty();
951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
970888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public V put(R rowKey, C columnKey, V value) {
991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().put(rowKey, columnKey, value);
1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1020888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void putAll(Table<? extends R, ? extends C, ? extends V> table) {
1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    delegate().putAll(table);
1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1070888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public V remove(Object rowKey, Object columnKey) {
1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().remove(rowKey, columnKey);
1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1120888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Map<C, V> row(R rowKey) {
1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().row(rowKey);
1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1170888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Set<R> rowKeySet() {
1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().rowKeySet();
1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1220888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Map<R, Map<C, V>> rowMap() {
1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().rowMap();
1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1270888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public int size() {
1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().size();
1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1320888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Collection<V> values() {
1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().values();
1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1370888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override public boolean equals(Object obj) {
1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return (obj == this) || delegate().equals(obj);
1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1410888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override public int hashCode() {
1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().hashCode();
1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
145