/**
* StandardNodeManager gives default implementations to some methods
* of NodeManager.
- *
+ *
* @author Antti Villberg
*/
public abstract class StandardNodeManager<Node, Engine extends StandardNodeManagerSupport<Node>> implements NodeManager<Node> {
return System.identityHashCode(o1);
} else {
if(o1.equals(o2)) return 0;
- return System.identityHashCode(o1) - System.identityHashCode(o2);
+ return System.identityHashCode(o1) - System.identityHashCode(o2);
}
}
}
};
- THashMap<Node, Variant> valueCache = new THashMap<>();
- protected THashMap<Node, THashSet<Runnable>> listeners = new THashMap<>();
+ THashMap<Node, Variant> valueCache = new THashMap<>();
+ protected THashMap<Node, THashSet<Runnable>> listeners = new THashMap<>();
AtomicBoolean fireNodeListenersScheduled = new AtomicBoolean(false);
Runnable fireNodeListeners = new Runnable() {
}
};
- Runnable clearValueCache = () -> valueCache.clear();
+ Runnable clearValueCache = () -> valueCache.clear();
public StandardNodeManager(StandardRealm<Node,Engine> realm, Node root) {
assert(realm != null);
}
}
+ public void refreshVariable(Node node) {
+ realm.asyncExec(() -> {
+ valueCache.remove(node);
+ synchronized(listeners) {
+ THashSet<Runnable> runnables = listeners.get(node);
+ if (runnables != null) {
+ for (Runnable r : runnables) {
+ r.run();
+ }
+ }
+ }
+ });
+ }
+
public void refreshVariables() {
realm.asyncExec(clearValueCache);
fireNodeListeners();
throw new NodeManagerException(e);
}
}
- refreshVariables();
+ refreshVariable(node);
}
@Override
String id = getRealmId();
int lastSlash = id.lastIndexOf("/");
if(lastSlash == -1) throw new IllegalStateException("Invalid realm id " + id);
- String name = id.substring(lastSlash+1);
+ String name = id.substring(lastSlash+1);
return name;
} else {
return realm.getEngine().getName(node);