package org.simantics.simulator.toolkit;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
*
* @author Antti Villberg
*/
-public abstract class StandardNodeManager<Node, Engine extends StandardNodeManagerSupport<Node>> implements NodeManager<Node> {
+public class StandardNodeManager<Node, Engine extends StandardNodeManagerSupport<Node>> implements NodeManager<Node> {
private static final Logger LOGGER = LoggerFactory.getLogger(StandardNodeManager.class);
- private final Node root;
- private final StandardRealm<Node,Engine> realm;
+ protected final Node root;
+ protected final StandardRealm<Node,Engine> realm;
static final Binding NO_BINDING = new VariantBinding() {
};
- THashMap<Node, Variant> valueCache = new THashMap<>();
+ protected THashMap<Node, Variant> valueCache = new THashMap<>();
protected THashMap<Node, THashSet<Runnable>> listeners = new THashMap<>();
AtomicBoolean fireNodeListenersScheduled = new AtomicBoolean(false);
@Override
public void setValue(Node node, Object value, Binding binding)
throws NodeManagerException {
+ updateValueInner(node, value, binding);
+ refreshVariable(node);
+ }
+
+ //Update the value of the node and remove from valueCache only the references nodes
+ public void setValueAndFireSelectedListeners(Node node, Object value, Binding binding, Set<Node> references) throws NodeManagerException {
+ if(references.size() > 0) {
+ for(Node n : references) {
+ valueCache.remove(n);
+ }
+ }
+ updateValueInner(node, value, binding);
+ fireNodeListenersSync();
+ }
+
+ //Update the value of the node helper method
+ private void updateValueInner(Node node, Object value, Binding binding) throws NodeManagerException {
checkThreadAccess();
Binding targetBinding = realm.getEngine().getEngineBinding(node);
if(binding.equals(targetBinding)) {
throw new NodeManagerException(e);
}
}
- refreshVariable(node);
}
@Override
listeners.clear();
}
+ @Override
+ public Set<String> getClassifications(Node node) throws NodeManagerException {
+ return Collections.emptySet();
+ }
+
}
\ No newline at end of file