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.Beta;
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible;
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Collection;
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Map;
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Set;
251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/**
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * A table which forwards all its method calls to another table. Subclasses
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * should override one or more methods to modify the behavior of the backing
291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * map as desired per the <a
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * href="http://en.wikipedia.org/wiki/Decorator_pattern">decorator pattern</a>.
311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Gregory Kick
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @since 7.0
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@Beta
361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic abstract class ForwardingTable<R, C, V> extends ForwardingObject
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    implements Table<R, C, V> {
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  /** Constructor for use by subclasses. */
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  protected ForwardingTable() {}
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override protected abstract Table<R, C, V> delegate();
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Set<Cell<R, C, V>> cellSet() {
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().cellSet();
471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void clear() {
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    delegate().clear();
521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Map<R, V> column(C columnKey) {
561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().column(columnKey);
571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Set<C> columnKeySet() {
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().columnKeySet();
621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Map<C, Map<R, V>> columnMap() {
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().columnMap();
671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public boolean contains(Object rowKey, Object columnKey) {
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().contains(rowKey, columnKey);
721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public boolean containsColumn(Object columnKey) {
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().containsColumn(columnKey);
771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public boolean containsRow(Object rowKey) {
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().containsRow(rowKey);
821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public boolean containsValue(Object value) {
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().containsValue(value);
871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public V get(Object rowKey, Object columnKey) {
911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().get(rowKey, columnKey);
921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public boolean isEmpty() {
961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().isEmpty();
971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public V put(R rowKey, C columnKey, V value) {
1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().put(rowKey, columnKey, value);
1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void putAll(Table<? extends R, ? extends C, ? extends V> table) {
1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    delegate().putAll(table);
1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public V remove(Object rowKey, Object columnKey) {
1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().remove(rowKey, columnKey);
1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Map<C, V> row(R rowKey) {
1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().row(rowKey);
1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Set<R> rowKeySet() {
1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().rowKeySet();
1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Map<R, Map<C, V>> rowMap() {
1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().rowMap();
1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public int size() {
1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().size();
1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override
1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public Collection<V> values() {
1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().values();
1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override public boolean equals(Object obj) {
1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return (obj == this) || delegate().equals(obj);
1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @Override public int hashCode() {
1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    return delegate().hashCode();
1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
147