From ef8563e3106f1774b05fe5ea94f538e9983b0182 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Thu, 23 Feb 2012 14:02:57 +0100 Subject: Support several state listeners in Client. --- same/src/main/java/com/orbekk/same/Client.java | 20 +++++++++++++------- same/src/test/java/com/orbekk/same/ClientTest.java | 9 +++++++++ 2 files changed, 22 insertions(+), 7 deletions(-) (limited to 'same') diff --git a/same/src/main/java/com/orbekk/same/Client.java b/same/src/main/java/com/orbekk/same/Client.java index 4c03f31..3799041 100644 --- a/same/src/main/java/com/orbekk/same/Client.java +++ b/same/src/main/java/com/orbekk/same/Client.java @@ -2,6 +2,7 @@ package com.orbekk.same; import static com.orbekk.same.StackTraceUtil.throwableToString; +import java.util.ArrayList; import java.util.List; import org.codehaus.jackson.type.TypeReference; @@ -15,7 +16,8 @@ public class Client implements DiscoveryListener { private ConnectionManager connections; private State state; private String myUrl; - private StateChangedListener stateListener; + private List stateListeners = + new ArrayList(); private NetworkNotificationListener networkListener; public class ClientInterface { @@ -44,6 +46,14 @@ public class Client implements DiscoveryListener { throw new UpdateConflict("Unable to contact master. Update fails."); } } + + public void addStateListener(StateChangedListener listener) { + stateListeners.add(listener); + } + + public void removeStateListener(StateChangedListener listener) { + stateListeners.remove(listener); + } } private ClientInterface clientInterface = new ClientInterface(); @@ -53,8 +63,8 @@ public class Client implements DiscoveryListener { public void setState(String component, String data, long revision) throws Exception { boolean status = state.update(component, data, revision); if (status) { - if (stateListener != null) { - stateListener.stateChanged(state.getComponent(component)); + for (StateChangedListener listener : stateListeners) { + listener.stateChanged(state.getComponent(component)); } } else { logger.warn("Ignoring update: {}", @@ -153,10 +163,6 @@ public class Client implements DiscoveryListener { return state; } - public void setStateChangedListener(StateChangedListener listener) { - this.stateListener = listener; - } - public void setNetworkListener(NetworkNotificationListener listener) { this.networkListener = listener; } diff --git a/same/src/test/java/com/orbekk/same/ClientTest.java b/same/src/test/java/com/orbekk/same/ClientTest.java index a4671d4..91f9760 100644 --- a/same/src/test/java/com/orbekk/same/ClientTest.java +++ b/same/src/test/java/com/orbekk/same/ClientTest.java @@ -34,4 +34,13 @@ public class ClientTest { client.discover("mockClient/ClientService.json"); verify(mockClient).notifyNetwork("ClientNetwork", "master"); } + + @Test public void stateListenerReceivesUpdate() throws Exception { + StateChangedListener listener = mock(StateChangedListener.class); + client.getInterface().addStateListener(listener); + clientS.setState("StateListenerVariable", "100", 1); + State.Component component = state.getComponent("StateListenerVariable"); + assertEquals("100", component.getData()); + verify(listener).stateChanged(eq(component)); + } } -- cgit v1.2.3