package de.axone.data.collections;
import java.util.Collection;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
public class SingleImmutableMap<K,V> implements Map<K,V>{
private final K key;
private final V value;
private Set<K> keySet;
private Set<V> valueSet;
private Set<Map.Entry<K,V>> entrySet;
public SingleImmutableMap( K key, V value ){
this.key = key;
this.value = value;
}
@Override
public int size() {
return 1;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public boolean containsKey( Object key ) {
return Objects.equals( key, this.key );
}
@Override
public boolean containsValue( Object value ) {
return Objects.equals( value, this.value );
}
@Override
public V get( Object key ) {
if( Objects.equals( key, this.key ) ) return value;
else return null;
}
@Override
public V put( K key, V value ) {
throw new UnsupportedOperationException( "Map is immutable" );
}
@Override
public V remove( Object key ) {
throw new UnsupportedOperationException( "Map is immutable" );
}
@Override
public void putAll( Map<? extends K, ? extends V> m ) {
throw new UnsupportedOperationException( "Map is immutable" );
}
@Override
public void clear() {
throw new UnsupportedOperationException( "Map is immutable" );
}
@Override
public Set<K> keySet() {
if( keySet == null ) keySet = new SingleImmutableSet<K>( key );
return keySet;
}
@Override
public Collection<V> values() {
if( valueSet == null ) valueSet = new SingleImmutableSet<V>( value );
return valueSet;
}
@Override
public Set<java.util.Map.Entry<K, V>> entrySet() {
if( entrySet == null ) entrySet = new SingleImmutableSet<Map.Entry<K,V>>( new MyMapEntry() );
return entrySet;
}
private final class MyMapEntry implements Map.Entry<K,V> {
@Override
public K getKey() {
return key;
}
@Override
public V getValue() {
return value;
}
@Override
public V setValue( V value ) {
throw new UnsupportedOperationException( "Map is immutable" );
}
}
}