diff options
Diffstat (limited to 'same/src/main')
-rw-r--r-- | same/src/main/java/com/orbekk/same/Variable.java | 2 | ||||
-rw-r--r-- | same/src/main/java/com/orbekk/same/VariableFactory.java | 30 |
2 files changed, 29 insertions, 3 deletions
diff --git a/same/src/main/java/com/orbekk/same/Variable.java b/same/src/main/java/com/orbekk/same/Variable.java index 63f8063..b6d3b7f 100644 --- a/same/src/main/java/com/orbekk/same/Variable.java +++ b/same/src/main/java/com/orbekk/same/Variable.java @@ -11,7 +11,7 @@ public interface Variable<T> { } T get(); - void set(T value); + void set(T value) throws UpdateConflict; void update(); void setOnChangeListener(OnChangeListener<T> listener); } diff --git a/same/src/main/java/com/orbekk/same/VariableFactory.java b/same/src/main/java/com/orbekk/same/VariableFactory.java index 81b7615..79c2cdc 100644 --- a/same/src/main/java/com/orbekk/same/VariableFactory.java +++ b/same/src/main/java/com/orbekk/same/VariableFactory.java @@ -1,17 +1,27 @@ package com.orbekk.same; +import java.io.IOException; + +import org.codehaus.jackson.JsonGenerationException; +import org.codehaus.jackson.map.JsonMappingException; +import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * TODO: Use WeakReference in order to make variables GC-able. */ public class VariableFactory { - Client.ClientInterface client; + private Logger logger = LoggerFactory.getLogger(getClass()); + private Client.ClientInterface client; + private ObjectMapper mapper = new ObjectMapper(); private class VariableImpl<T> implements Variable<T> { String identifier; TypeReference<T> type; T value; + long revision = 0; public VariableImpl(String identifier, TypeReference<T> type) { this.identifier = identifier; @@ -24,7 +34,23 @@ public class VariableFactory { } @Override - public void set(T value) { + public void set(T value) throws UpdateConflict { + try { + String serializedValue = mapper.writeValueAsString(value); + client.set(identifier, serializedValue, revision); + } catch (JsonGenerationException e) { + logger.warn("Failed to convert to JSON: {}", value); + logger.warn("Parse exception.", e); + throw new RuntimeException(e); + } catch (JsonMappingException e) { + logger.warn("Failed to convert to JSON: {}", value); + logger.warn("Parse exception.", e); + throw new RuntimeException(e); + } catch (IOException e) { + logger.warn("Failed to cornvert to JSON: {}", value); + logger.warn("Parse exception.", e); + throw new RuntimeException(e); + } } @Override |