NameRegistry.java
package eu.javaexperience.patterns.structure.named;
import java.util.Collection;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import eu.javaexperience.asserts.AssertArgument;
public abstract class NameRegistry<E extends NamedItem>
{
protected ConcurrentMap<String, E> namedElements = new ConcurrentHashMap<>();
public boolean addNamedElement(E elem)
{
String name = elem.getName();
AssertArgument.assertNotNull(name, "element name");
return null == namedElements.putIfAbsent(name, elem);
}
public void assertAddNamedElement(E elem)
{
String name = elem.getName();
AssertArgument.assertNotNull(name, "element name");
if(null != namedElements.putIfAbsent(name, elem))
{
throw new IllegalArgumentException("Element with name: \""+name+"\" already in registry");
}
}
public boolean isNameReserved(String name)
{
return namedElements.containsKey(name);
}
public E getByName(String name)
{
return namedElements.get(name);
}
public E assertGetByName(String name)
{
E e = getByName(name);
if(null == e)
{
throw new RuntimeException("Entity with name \""+name+"\" doesn't exists.");
}
return e;
}
public Set<String> getNames()
{
return namedElements.keySet();
}
public Collection<E> getElements()
{
return namedElements.values();
}
//TODO mediators add/remove
}