]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.server/src/org/simantics/document/server/state/StateNodeManager.java
Ability to get StatePropertyNode from StateNodeManager
[simantics/platform.git] / bundles / org.simantics.document.server / src / org / simantics / document / server / state / StateNodeManager.java
index 0b48e27220bbdf2fa130400b30857f2ad5ef2214..399fbd7d19c17d99c868ab4a28a7c455e3215539 100644 (file)
@@ -1,9 +1,7 @@
 package org.simantics.document.server.state;
 
 import java.io.IOException;
-import java.util.Collections;
 import java.util.Map;
-import java.util.Set;
 
 import org.simantics.databoard.Bindings;
 import org.simantics.databoard.binding.Binding;
@@ -11,38 +9,19 @@ import org.simantics.databoard.binding.error.BindingConstructionException;
 import org.simantics.databoard.binding.mutable.Variant;
 import org.simantics.databoard.serialization.RuntimeSerializerConstructionException;
 import org.simantics.databoard.serialization.SerializerConstructionException;
-import org.simantics.db.layer0.variable.NodeSupport;
-import org.simantics.simulator.toolkit.StandardNodeManager;
 import org.simantics.simulator.toolkit.StandardRealm;
+import org.simantics.simulator.toolkit.db.StandardVariableNodeManager;
 import org.simantics.simulator.variable.exceptions.NodeManagerException;
 import org.slf4j.LoggerFactory;
 
-public class StateNodeManager extends StandardNodeManager<StateNode, StateNodeManagerSupport> {
+public class StateNodeManager extends StandardVariableNodeManager<StateNode, StateNodeManagerSupport> {
 
        private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(StateNodeManager.class);
 
-       private NodeSupport<StateNode> support;
-
        public StateNodeManager(StandardRealm<StateNode, StateNodeManagerSupport> realm, StateNode root) {
                super(realm, root);
        }
 
-       public void registerSupport(NodeSupport<StateNode> support) {
-               this.support = support;
-       }
-
-       @Override
-       public Set<String> getClassifications(StateNode node) throws NodeManagerException {
-               return Collections.emptySet();
-       }
-
-       @Override
-       public void refreshVariable(StateNode node) {
-               super.refreshVariable(node);
-               support.valueCache.clearExpired();
-               support.structureCache.clearExpired();
-       }
-
        public void setState(String key, Object value) {
                try {
                        getRealm().syncExec(() -> {
@@ -63,6 +42,31 @@ public class StateNodeManager extends StandardNodeManager<StateNode, StateNodeMa
                        LOGGER.error("Setting state was interrupted.", e);
                }
        }
+       private class PropertyRunnable implements Runnable {
+               String key;
+               StatePropertyNode propertyNode;
+               
+               public PropertyRunnable(String key) {
+                       this.key = key;
+               }
+               
+               @Override
+               public void run() {
+                       StateRootNode rootNode = (StateRootNode) getRoot();
+                       propertyNode = rootNode.getProperty(key);
+               }
+       }
+       
+       public StatePropertyNode getState(String key) {
+               try {
+                       PropertyRunnable r = new PropertyRunnable(key);
+                       getRealm().syncExec(r);
+                       return r.propertyNode;
+               } catch (InterruptedException e) {
+                       LOGGER.error("Getting state was interrupted.", e);
+                       return null;
+               }
+       }
 
        public byte[] serialize() {
                final byte [][] result = new byte[1][];