/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.utils.incubator;
import java.util.HashMap;
import java.util.Map;
/**
* A simple {@link ServiceRegistryAccessFactory} implementation for unit tests.
*
* Typical usage in test setups:<code><pre>
ServiceRegistry.setAccessFactory(new MockServiceRegistry());
ServiceRegistry.createPublisherAccessFor(this).registerService(<service interface>, <implementation>);
* </pre></code>
*
* @author Robert Mischke
*/
public class MockServiceRegistry implements ServiceRegistryAccessFactory {
private final Map<Class<?>, Object> services = new HashMap<>();
private final AccessAdapter adapter = new AccessAdapter();
/**
* Internal {@link ServiceRegistryPublisherAccess} implementation.
*
* @author Robert Mischke
*/
private final class AccessAdapter implements ServiceRegistryPublisherAccess {
@Override
@SuppressWarnings("unchecked")
public <T> T getService(Class<T> clazz) {
return (T) services.get(clazz);
}
@Override
public <T> void registerService(Class<T> clazz, Object implementation) {
services.put(clazz, implementation);
}
@Override
public void dispose() {}
}
@Override
public ServiceRegistryAccess createAccessFor(Object caller) {
return adapter;
}
@Override
public ServiceRegistryPublisherAccess createPublisherAccessFor(Object caller) {
return adapter;
}
}