package net.sf.openrocket.preset;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class TypedPropertyMap implements Cloneable {
private final Map<TypedKey<?>, Object> delegate;
public TypedPropertyMap() {
delegate = new LinkedHashMap<TypedKey<?>, Object>();
}
public int size() {
return delegate.size();
}
public boolean isEmpty() {
return delegate.isEmpty();
}
public boolean containsKey(Object key) {
return delegate.containsKey(key);
}
public boolean containsValue(Object value) {
return delegate.containsValue(value);
}
@SuppressWarnings("unchecked")
public <T> T get(TypedKey<T> key) {
return (T) delegate.get(key);
}
@SuppressWarnings("unchecked")
public <T> T put(TypedKey<T> key, T value) {
return (T) delegate.put(key, value);
}
public Object remove(Object key) {
return delegate.remove(key);
}
public void putAll(TypedPropertyMap other) {
if (other == null) {
return;
}
delegate.putAll(other.delegate);
}
public void clear() {
delegate.clear();
}
public Set<TypedKey<?>> keySet() {
return delegate.keySet();
}
public Collection<Object> values() {
return delegate.values();
}
public Set<Entry<TypedKey<?>, Object>> entrySet() {
return delegate.entrySet();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("TypedPropertyMap: { ");
for( Map.Entry<TypedKey<?>, Object> e : delegate.entrySet() ) {
sb.append(e.getKey()).append(" => ").append(String.valueOf(e.getValue()));
}
sb.append("}");
return sb.toString();
}
@Override
protected TypedPropertyMap clone() throws CloneNotSupportedException {
TypedPropertyMap clone = new TypedPropertyMap();
clone.putAll(this);
return clone;
}
}