/** * {@inheritDoc} This implementation returns the parent model of the * {@link TrackedNodeModel} used by this configuration. */ @Override protected InMemoryNodeModel getSubConfigurationParentModel() { return getTrackedModel().getParentModel(); }
@Override public void addProperty(final String key, final Iterable<?> values, final NodeKeyResolver<ImmutableNode> resolver) { getParentModel().addProperty(key, getSelector(), values, resolver); }
@Override public void addNodes(final String key, final Collection<? extends ImmutableNode> nodes, final NodeKeyResolver<ImmutableNode> resolver) { getParentModel().addNodes(key, getSelector(), nodes, resolver); }
@Override public void setProperty(final String key, final Object value, final NodeKeyResolver<ImmutableNode> resolver) { getParentModel().setProperty(key, getSelector(), value, resolver); }
@Override public List<QueryResult<ImmutableNode>> clearTree(final String key, final NodeKeyResolver<ImmutableNode> resolver) { return getParentModel().clearTree(key, getSelector(), resolver); }
@Override public void clearProperty(final String key, final NodeKeyResolver<ImmutableNode> resolver) { getParentModel().clearProperty(key, getSelector(), resolver); }
/** * {@inheritDoc} This implementation clears the sub tree spanned by the * associate tracked node. This has the side effect that this in any case * becomes detached. * * @param resolver */ @Override public void clear(final NodeKeyResolver<ImmutableNode> resolver) { getParentModel().clearTree(null, getSelector(), resolver); }
@Override public void setRootNode(final ImmutableNode newRoot) { getParentModel().replaceTrackedNode(getSelector(), newRoot); }
@Override public NodeHandler<ImmutableNode> getNodeHandler() { return getParentModel().getTrackedNodeHandler(getSelector()); }
/** * Closes this model. This causes the tracked node this model is based upon * to be released (i.e. {@link InMemoryNodeModel#untrackNode(NodeSelector)} * is called). This method should be called when this model is no longer * needed. This implementation is idempotent; it is safe to call * {@code close()} multiple times - only the first invocation has an effect. * After this method has been called this model can no longer be used * because there is no guarantee that the node can still be accessed from * the parent model. */ public void close() { if (closed.compareAndSet(false, true)) { getParentModel().untrackNode(getSelector()); } }