diff options
Diffstat (limited to 'same/src/main/java/com/orbekk')
| -rw-r--r-- | same/src/main/java/com/orbekk/same/VariableFactory.java | 21 | 
1 files changed, 17 insertions, 4 deletions
| diff --git a/same/src/main/java/com/orbekk/same/VariableFactory.java b/same/src/main/java/com/orbekk/same/VariableFactory.java index 87db576..49604c6 100644 --- a/same/src/main/java/com/orbekk/same/VariableFactory.java +++ b/same/src/main/java/com/orbekk/same/VariableFactory.java @@ -9,6 +9,8 @@ import org.codehaus.jackson.type.TypeReference;  import org.slf4j.Logger;  import org.slf4j.LoggerFactory; +import com.orbekk.same.State.Component; +  /**   * TODO: Use WeakReference in order to make variables GC-able.   */ @@ -17,11 +19,12 @@ public class VariableFactory {      private Client.ClientInterface client;      private ObjectMapper mapper = new ObjectMapper(); -    private class VariableImpl<T> implements Variable<T> { +    private class VariableImpl<T> implements Variable<T>, StateChangedListener {          String identifier;          TypeReference<T> type;          T value;          long revision = 0; +        OnChangeListener<T> listener = null;          public VariableImpl(String identifier, TypeReference<T> type) {              this.identifier = identifier; @@ -59,8 +62,17 @@ public class VariableFactory {          }          @Override -        public void setOnChangeListener(Variable.OnChangeListener<T> listener) { -            throw new RuntimeException("Not implemented."); +        public void setOnChangeListener(OnChangeListener<T> listener) { +            this.listener = listener; +        } + +        @Override +        public void stateChanged(Component component) { +            if (component.getName().equals(identifier)) { +                if (listener != null) { +                    listener.valueChanged(this); +                } +            }          }      } @@ -73,8 +85,9 @@ public class VariableFactory {      }      public <T> Variable<T> create(String identifier, TypeReference<T> type) { -        Variable<T> variable = new VariableImpl<T>(identifier, type); +        VariableImpl<T> variable = new VariableImpl<T>(identifier, type);          variable.update(); +        client.addStateListener(variable);          return variable;      } | 
