package com.thaiopensource.util;
public class SinglePropertyMap<T> implements PropertyMap {
private final PropertyId<T> pid;
private final T value;
private SinglePropertyMap(PropertyId<T> pid, T value) {
if (!(pid.getValueClass().isInstance(value))) {
if (value == null)
throw new NullPointerException();
throw new ClassCastException();
}
this.pid = pid;
this.value = value;
}
public <V> V get(PropertyId<V> pid) {
if (pid != this.pid)
return null;
// it would be nice to avoid the cast,
// but I can't figure out how to do it
return pid.getValueClass().cast(value);
}
public boolean contains(PropertyId<?> pid) {
return pid == this.pid;
}
public int size() {
return 1;
}
public PropertyId<?> getKey(int i) {
if (i != 0)
throw new IndexOutOfBoundsException();
return pid;
}
public static <T> SinglePropertyMap newInstance(PropertyId<T> pid, T value) {
return new SinglePropertyMap<T>(pid, value);
}
}