@Override void doSeal() { modification.ready(); } }
@Override void doWrite(final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) { modification.write(path, data); }
@Override public final void delete(final YangInstanceIdentifier path) { modification.delete(path); }
NodeIterator next(final DataTreeModification modification) { while (iterator.hasNext()) { final DataTreeCandidateNode node = iterator.next(); final YangInstanceIdentifier child = path.node(node.getIdentifier()); switch (node.getModificationType()) { case DELETE: modification.delete(child); LOG.debug("Modification {} deleted path {}", modification, child); break; case APPEARED: case DISAPPEARED: case SUBTREE_MODIFIED: LOG.debug("Modification {} modified path {}", modification, child); return new NodeIterator(this, child, node.getChildNodes().iterator()); case UNMODIFIED: LOG.debug("Modification {} unmodified path {}", modification, child); // No-op break; case WRITE: modification.write(child, node.getDataAfter().get()); LOG.debug("Modification {} written path {}", modification, child); break; default: throw new IllegalArgumentException("Unsupported modification " + node.getModificationType()); } } return parent; } }
@Override public DataTree create(final DataTreeConfiguration treeConfig, final SchemaContext initialSchemaContext, final NormalizedNodeContainer<?, ?, ?> initialRoot) throws DataValidationFailedException { final DataTree ret = create(treeConfig, initialSchemaContext, false); final DataTreeModification mod = ret.takeSnapshot().newModification(); mod.write(YangInstanceIdentifier.EMPTY, initialRoot); mod.ready(); ret.validate(mod); final DataTreeCandidate candidate = ret.prepare(mod); ret.commit(candidate); return ret; }
private NormalizedNodeAggregator combine() throws DataValidationFailedException { final DataTreeModification mod = dataTree.takeSnapshot().newModification(); for (final Optional<NormalizedNode<?,?>> node : nodes) { if (node.isPresent()) { mod.merge(rootIdentifier, node.get()); } } mod.ready(); dataTree.validate(mod); final DataTreeCandidate candidate = dataTree.prepare(mod); dataTree.commit(candidate); return this; }
@Override public final void merge(final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) { modification.merge(path, data); }
@Override public void ready() { try { delegate.ready(); } catch (SchemaValidationFailedException e) { DataTreeModification newModification = dataTree.takeSnapshot().newModification(); delegate.applyToCursor(new PruningDataTreeModificationCursor(newModification, this)); delegate = newModification; delegate.ready(); } }
/** * Exposed for {@link SnapshotBackedReadWriteTransaction}'s sake only. The contract does * not allow data access after the transaction has been closed or readied. * * @param path Path to read * @return null if the the transaction has been closed; */ final Optional<NormalizedNode<?, ?>> readSnapshotNode(final YangInstanceIdentifier path) { return readyImpl == null ? null : mutableTree.readNode(path); }
@Override public void applyToCursor(DataTreeModificationCursor dataTreeModificationCursor) { delegate.applyToCursor(dataTreeModificationCursor); }
@Override public synchronized DataTreeModification newModification() { return delegate.newModification(); }
NodeIterator next(final DataTreeModification modification) { while (iterator.hasNext()) { final DataTreeCandidateNode node = iterator.next(); final YangInstanceIdentifier child = path.node(node.getIdentifier()); switch (node.getModificationType()) { case DELETE: modification.delete(child); LOG.debug("Modification {} deleted path {}", modification, child); break; case APPEARED: case DISAPPEARED: case SUBTREE_MODIFIED: LOG.debug("Modification {} modified path {}", modification, child); return new NodeIterator(this, child, node.getChildNodes().iterator()); case UNMODIFIED: LOG.debug("Modification {} unmodified path {}", modification, child); // No-op break; case WRITE: modification.write(child, node.getDataAfter().get()); LOG.debug("Modification {} written path {}", modification, child); break; default: throw new IllegalArgumentException("Unsupported modification " + node.getModificationType()); } } return parent; } }
@Override public DataTree create(final DataTreeConfiguration treeConfig, final SchemaContext initialSchemaContext, final NormalizedNodeContainer<?, ?, ?> initialRoot) throws DataValidationFailedException { final DataTree ret = create(treeConfig, initialSchemaContext, false); final DataTreeModification mod = ret.takeSnapshot().newModification(); mod.write(YangInstanceIdentifier.EMPTY, initialRoot); mod.ready(); ret.validate(mod); final DataTreeCandidate candidate = ret.prepare(mod); ret.commit(candidate); return ret; }
@Override public synchronized void merge(final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) { delegate.merge(path, data); }
@Override public synchronized Optional<NormalizedNode<?, ?>> readNode(final YangInstanceIdentifier path) { return delegate.readNode(path); }
@Override public synchronized void applyToCursor(@Nonnull final DataTreeModificationCursor cursor) { delegate.applyToCursor(cursor); }
@Override public synchronized DataTreeModification newModification() { return delegate.newModification(); }
@Override public synchronized void write(final YangInstanceIdentifier path, final NormalizedNode<?, ?> data) { delegate.write(path, data); }
@Override public synchronized void ready() { delegate.ready(); }