From 6ec163993d1baf4ebcddde287c0ade7fb4cf20c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Fri, 13 Jan 2012 13:04:29 +0100 Subject: Maintain a set of recently updated components in State. --- same/src/main/java/com/orbekk/same/State.java | 28 ++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'same') diff --git a/same/src/main/java/com/orbekk/same/State.java b/same/src/main/java/com/orbekk/same/State.java index 303caca..49ee8c4 100644 --- a/same/src/main/java/com/orbekk/same/State.java +++ b/same/src/main/java/com/orbekk/same/State.java @@ -5,6 +5,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.HashMap; +import java.util.Set; +import java.util.TreeSet; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonParseException; @@ -14,11 +16,26 @@ import org.codehaus.jackson.type.TypeReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * This class is not thread-safe. In particular, modifications to this class + * while getUpdatedComponents() is being used is unsafe. When accessing + * updatedComponents, synchronize on State: + * + * + * synchronize (state) { + * for (String component : state.updatedComponents()) { + * // Do work. + * } + * state.clearUpdatedComponents(); + * } + * + */ public class State { private Logger logger = LoggerFactory.getLogger(getClass()); private Map state = new HashMap(); private ObjectMapper mapper = new ObjectMapper(); - + private Set updatedComponents = new TreeSet(); + public State(String networkName) { update(".networkName", networkName, 0); updateFromObject(".participants", new ArrayList(), 0); @@ -36,6 +53,7 @@ public class State { component.setRevision(revision + 1); component.setData(data); state.put(componentName, component); + updatedComponents.add(componentName); return true; } else { return false; @@ -110,6 +128,14 @@ public class State { } } + public Set getUpdatedComponents() { + return updatedComponents; + } + + public void clearUpdatedComponents() { + this.updatedComponents.clear(); + } + public static class Component { private long revision; private String data; -- cgit v1.2.3