001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.commons.collections; 018 019 import java.util.Collection; 020 import java.util.Map; 021 import java.util.Set; 022 023 /** 024 * <p>This <code>Map</code> wraps another <code>Map</code> 025 * implementation, using the wrapped instance for its default 026 * implementation. This class is used as a framework on which to 027 * build to extensions for its wrapped <code>Map</code> object which 028 * would be unavailable or inconvenient via sub-classing (but usable 029 * via composition).</p> 030 * 031 * <p>This implementation does not perform any special processing with 032 * {@link #entrySet()}, {@link #keySet()} or {@link #values()}. Instead 033 * it simply returns the set/collection from the wrapped map. This may be 034 * undesirable, for example if you are trying to write a validating 035 * implementation it would provide a loophole around the validation. But, 036 * you might want that loophole, so this class is kept simple.</p> 037 * 038 * @deprecated Moved to map subpackage as AbstractMapDecorator. It will be removed in v4.0. 039 * @since Commons Collections 2.0 040 * @version $Revision: 646777 $ $Date: 2008-04-10 13:33:15 +0100 (Thu, 10 Apr 2008) $ 041 * 042 * @author Daniel Rall 043 * @author Stephen Colebourne 044 */ 045 public abstract class ProxyMap implements Map { 046 047 /** 048 * The <code>Map</code> to delegate to. 049 */ 050 protected Map map; 051 052 /** 053 * Constructor that uses the specified map to delegate to. 054 * <p> 055 * Note that the map is used for delegation, and is not copied. This is 056 * different to the normal use of a <code>Map</code> parameter in 057 * collections constructors. 058 * 059 * @param map the <code>Map</code> to delegate to 060 */ 061 public ProxyMap(Map map) { 062 this.map = map; 063 } 064 065 /** 066 * Invokes the underlying {@link Map#clear()} method. 067 */ 068 public void clear() { 069 map.clear(); 070 } 071 072 /** 073 * Invokes the underlying {@link Map#containsKey(Object)} method. 074 */ 075 public boolean containsKey(Object key) { 076 return map.containsKey(key); 077 } 078 079 /** 080 * Invokes the underlying {@link Map#containsValue(Object)} method. 081 */ 082 public boolean containsValue(Object value) { 083 return map.containsValue(value); 084 } 085 086 /** 087 * Invokes the underlying {@link Map#entrySet()} method. 088 */ 089 public Set entrySet() { 090 return map.entrySet(); 091 } 092 093 /** 094 * Invokes the underlying {@link Map#equals(Object)} method. 095 */ 096 public boolean equals(Object m) { 097 return map.equals(m); 098 } 099 100 /** 101 * Invokes the underlying {@link Map#get(Object)} method. 102 */ 103 public Object get(Object key) { 104 return map.get(key); 105 } 106 107 /** 108 * Invokes the underlying {@link Map#hashCode()} method. 109 */ 110 public int hashCode() { 111 return map.hashCode(); 112 } 113 114 /** 115 * Invokes the underlying {@link Map#isEmpty()} method. 116 */ 117 public boolean isEmpty() { 118 return map.isEmpty(); 119 } 120 121 /** 122 * Invokes the underlying {@link Map#keySet()} method. 123 */ 124 public Set keySet() { 125 return map.keySet(); 126 } 127 128 /** 129 * Invokes the underlying {@link Map#put(Object,Object)} method. 130 */ 131 public Object put(Object key, Object value) { 132 return map.put(key, value); 133 } 134 135 /** 136 * Invokes the underlying {@link Map#putAll(Map)} method. 137 */ 138 public void putAll(Map t) { 139 map.putAll(t); 140 } 141 142 /** 143 * Invokes the underlying {@link Map#remove(Object)} method. 144 */ 145 public Object remove(Object key) { 146 return map.remove(key); 147 } 148 149 /** 150 * Invokes the underlying {@link Map#size()} method. 151 */ 152 public int size() { 153 return map.size(); 154 } 155 156 /** 157 * Invokes the underlying {@link Map#values()} method. 158 */ 159 public Collection values() { 160 return map.values(); 161 } 162 163 }