package brainslug.flow.context;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class HashMapRegistry implements Registry {
Map<Class<?>, Object> classesRegistry = new ConcurrentHashMap<Class<?>, Object>();
Map<String, Object> nameRegistry = new ConcurrentHashMap<String, Object>();
@Override
public <T> T getService(Class<T> serviceClass) {
if(classesRegistry.get(serviceClass) == null) {
throw new IllegalStateException("no service with class " + serviceClass + " registered");
}
return (T) classesRegistry.get(serviceClass);
}
@Override
public <T> void registerService(Class<T> serviceClass, T serviceInstance) {
if(classesRegistry.get(serviceClass) != null) {
throw new IllegalStateException("service class already registered " + serviceClass);
}
classesRegistry.put(serviceClass, serviceInstance);
}
@Override
public <T> T getService(String name, Class<T> clazz) {
if(nameRegistry.get(name) == null) {
throw new IllegalStateException("no service with name " + name + " registered");
}
return (T) nameRegistry.get(name);
}
@Override
public Object getService(String name) {
return getService(name, Object.class);
}
@Override
public <T> void registerService(String name, T serviceInstance) {
if(nameRegistry.get(name) != null) {
throw new IllegalStateException("service already registered " + name);
}
nameRegistry.put(name, serviceInstance);
}
}