summaryrefslogtreecommitdiff
path: root/same/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'same/src/main/java/com')
-rw-r--r--same/src/main/java/com/orbekk/same/Variable.java2
-rw-r--r--same/src/main/java/com/orbekk/same/VariableFactory.java30
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