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 Object getValue(Node node, Binding binding) throws NodeManagerException, BindingException {
try {
- return getValue(node).getValue(binding);
+ Variant value = getValue(node);
+ if(NodeManager.PENDING_NODE_VALUE == value)
+ return value;
+ return value.getValue(binding);
} catch (AdaptException e) {
throw new BindingException(e);
}
Variant variant = valueCache.get(node);
if(variant == null) {
Object value = realm.getEngine().getEngineValue(node);
+ if(NodeManager.PENDING_NODE_VALUE == value)
+ return (Variant)value;
Binding binding = realm.getEngine().getEngineBinding(node);
variant = new Variant(binding, value);
valueCache.put(node, variant);