SharedMapDecorator.java
/*
 * Copyright 2004-2012 the original author or authors.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * https://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package org.springframework.binding.collection;
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import org.springframework.core.style.ToStringCreator;
/**
 * A map decorator that implements <code>SharedMap</code>. By default, simply returns the map itself as the mutex.
 * Subclasses may override to return a different mutex object.
 * 
 * @author Keith Donald
 */
public class SharedMapDecorator<K, V> implements SharedMap<K, V>, Serializable {
	/**
	 * The wrapped, target map.
	 */
	private Map<K, V> map;
	/**
	 * Creates a new shared map decorator.
	 * @param map the map that is shared by multiple threads, to be synced
	 */
	public SharedMapDecorator(Map<K, V> map) {
		this.map = map;
	}
	// implementing Map
	public void clear() {
		map.clear();
	}
	public boolean containsKey(Object key) {
		return map.containsKey(key);
	}
	public boolean containsValue(Object value) {
		return map.containsValue(value);
	}
	public Set<Entry<K, V>> entrySet() {
		return map.entrySet();
	}
	public V get(Object key) {
		return map.get(key);
	}
	public boolean isEmpty() {
		return map.isEmpty();
	}
	public Set<K> keySet() {
		return map.keySet();
	}
	public V put(K key, V value) {
		return map.put(key, value);
	}
	public void putAll(Map<? extends K, ? extends V> map) {
		this.map.putAll(map);
	}
	public V remove(Object key) {
		return map.remove(key);
	}
	public int size() {
		return map.size();
	}
	public Collection<V> values() {
		return map.values();
	}
	// implementing SharedMap
	public Object getMutex() {
		return map;
	}
	public String toString() {
		return new ToStringCreator(this).append("map", map).append("mutex", getMutex()).toString();
	}
}