package de.axone.data;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public abstract class MapProxy<K,V> implements Map<K,V>{
public enum Mapping{ hash, tree };
private final Map<K,V> mapped;
protected final Mapping mapping;
public MapProxy(){
this( Mapping.hash );
}
public MapProxy( Mapping mapping ){
this.mapping = mapping;
this.mapped = genMap();
}
public MapProxy( Map<K,V> mapped ){
this.mapped = mapped;
this.mapping = null;
}
protected Map<K,V> genMap(){
Map<K,V> result;
if( mapping == null ) throw new IllegalStateException( "No mapping set" );
switch( mapping ){
case hash: result = new HashMap<>(); break;
case tree: result = new TreeMap<>(); break;
default:
throw new IllegalArgumentException( "Unsupported mapping: " + mapping );
}
return result;
}
@Override
public int size() {
return mapped.size();
}
@Override
public boolean isEmpty() {
return mapped.isEmpty();
}
@Override
public boolean containsKey( Object key ) {
return mapped.containsKey( key );
}
@Override
public boolean containsValue( Object value ) {
return mapped.containsValue( value );
}
@Override
public V get( Object key ) {
return mapped.get( key );
}
@Override
public V put( K key, V value ) {
return mapped.put( key, value );
}
@Override
public V remove( Object key ) {
return mapped.remove( key );
}
@Override
public void putAll( Map<? extends K, ? extends V> m ) {
mapped.putAll( m );
}
@Override
public void clear() {
mapped.clear();
}
@Override
public Set<K> keySet() {
return mapped.keySet();
}
@Override
public Collection<V> values() {
return mapped.values();
}
@Override
public Set<java.util.Map.Entry<K, V>> entrySet() {
return mapped.entrySet();
}
}