/*
* Copyright (C) 2010 Brockmann Consult GmbH (info@brockmann-consult.de)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 3 of the License, or (at your option)
* any later version.
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, see http://www.gnu.org/licenses/
*/
package com.bc.ceres.core;
import junit.framework.TestCase;
import java.util.Set;
import java.util.HashSet;
public class ServiceRegistryFactoryTest extends TestCase {
public void testGetServiceRegistry() {
ServiceRegistryManager instance = ServiceRegistryManager.getInstance();
assertNotNull(instance);
ServiceRegistry<A> serviceRegistryA = instance.getServiceRegistry(A.class);
ListenerA listenerA = new ListenerA();
serviceRegistryA.addListener(listenerA);
ServiceRegistry<B> serviceRegistryB = instance.getServiceRegistry(B.class);
ListenerB listenerB = new ListenerB();
serviceRegistryB.addListener(listenerB);
A a1 = new A("foo") {};
A a2 = new A("grunt") {};
B b1 = new B("bar") {};
B b2 = new B("baz") {};
serviceRegistryA.addService(a1);
serviceRegistryA.addService(a2);
serviceRegistryB.addService(b1);
serviceRegistryB.addService(b2);
assertSame(a1, serviceRegistryA.getService(a1.getClass().getName()));
assertSame(a2, serviceRegistryA.getService(a2.getClass().getName()));
assertSame(b1, serviceRegistryB.getService(b1.getClass().getName()));
assertSame(b2, serviceRegistryB.getService(b2.getClass().getName()));
assertTrue(listenerA.services.contains(a1));
assertTrue(listenerA.services.contains(a2));
assertTrue(listenerB.services.contains(b1));
assertTrue(listenerB.services.contains(b2));
Set<A> servicesA = serviceRegistryA.getServices();
for (A serviceA : servicesA) {
serviceRegistryA.removeService(serviceA);
}
Set<B> servicesB = serviceRegistryB.getServices();
for (B serviceB : servicesB) {
serviceRegistryB.removeService(serviceB);
}
assertFalse(listenerA.services.contains(a1));
assertFalse(listenerA.services.contains(a2));
assertFalse(listenerB.services.contains(b1));
assertFalse(listenerB.services.contains(b2));
}
class S {
String id;
public S(String id) {
this.id = id;
}
@Override
public String toString() {
return id;
}
}
class A extends S {
public A(String id) {
super(id);
}
}
class B extends S {
public B(String id) {
super(id);
}
}
private class ListenerBase {
public Set<Object> services = new HashSet<Object>(4);
public void serviceAdded(Object service) {
services.add(service);
}
public void serviceRemoved(Object service) {
services.remove(service);
}
}
private class ListenerA extends ListenerBase implements ServiceRegistryListener<A> {
public void serviceAdded(ServiceRegistry<A> registry, A service) {
serviceAdded(service);
}
public void serviceRemoved(ServiceRegistry<A> registry, A service) {
serviceRemoved(service);
}
}
private class ListenerB extends ListenerBase implements ServiceRegistryListener<B> {
public void serviceAdded(ServiceRegistry<B> registry, B service) {
serviceAdded(service);
}
public void serviceRemoved(ServiceRegistry<B> registry, B service) {
serviceRemoved(service);
}
}
}