package org.archstudio.myx.fw;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Map;
import com.google.common.collect.Maps;
public class Services {
Map<Class<?>, Object> services = Maps.newHashMap();
public <T> T add(T service) {
add(service.getClass(), service);
return service;
}
public void addAll(Object... services) {
for (Object o : services) {
add(o);
}
}
private void add(Class<?> c, Object o) {
if (c == null) {
return;
}
services.put(c, o);
for (Class<?> i : c.getInterfaces()) {
add(i, o);
}
add(c.getSuperclass(), o);
}
public boolean has(Class<?> serviceClass) {
return services.containsKey(serviceClass);
}
@SuppressWarnings("unchecked")
public <C> C get(Class<C> serviceClass) {
return checkNotNull((C) services.get(serviceClass));
}
}