package common.init;

import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import common.collect.Maps;

public class RegistrySimple<K, V> implements IRegistry<K, V>
{
    protected final Map<K, V> registryObjects = this.createUnderlyingMap();

    protected Map<K, V> createUnderlyingMap()
    {
        return Maps.<K, V>newHashMap();
    }

    public V getObject(K name)
    {
        return this.registryObjects.get(name);
    }

    /**
     * Register an object on this registry.
     */
    public void putObject(K key, V value)
    {
        if (key == null) {
			throw new NullPointerException("Key is null");
		}
        if (value == null) {
			throw new NullPointerException("Value is null");
		}

//        if (this.registryObjects.containsKey(key))
//        {
//            Log.CONFIG.debug("Füge doppelten Schlüssel \'" + key + "\' der Registry hinzu");
//        }

        this.registryObjects.put(key, value);
    }

    public Set<K> getKeys()
    {
        return Collections.<K>unmodifiableSet(this.registryObjects.keySet());
    }

    /**
     * Does this registry contain an entry for the given key?
     */
    public boolean containsKey(K key)
    {
        return this.registryObjects.containsKey(key);
    }

    public Iterator<V> iterator()
    {
        return this.registryObjects.values().iterator();
    }
}
