@Override public final void write(final byte[] bytes, final int off, final int len) throws IOException { ensureHeaderWritten(); output.write(bytes, off, len); }
@Override public void close() throws IOException { flush(); }
@Override public void writeNormalizedNode(final NormalizedNode<?, ?> node) throws IOException { ensureHeaderWritten(); normalizedNodeWriter().write(node); }
@Override public void writeYangInstanceIdentifier(final YangInstanceIdentifier identifier) throws IOException { ensureHeaderWritten(); writeYangInstanceIdentifierInternal(identifier); }
private void startNode(final QName qname, final byte nodeType) throws IOException { Preconditions.checkNotNull(qname, "QName of node identifier should not be null."); ensureHeaderWritten(); // First write the type of node output.writeByte(nodeType); // Write Start Tag writeQName(qname); }
@Override public void leafSetEntryNode(final QName name, final Object value) throws IOException, IllegalArgumentException { LOG.trace("Writing a new leaf set entry node"); output.writeByte(NodeTypes.LEAF_SET_ENTRY_NODE); // lastLeafSetQName is set if the parent LeafSetNode was previously written. Otherwise this is a // stand alone LeafSetEntryNode so write out it's name here. if (lastLeafSetQName == null) { writeQName(name); } writeObject(value); }
@Override public void writePathArgument(final PathArgument pathArgument) throws IOException { byte type = PathArgumentTypes.getSerializablePathArgumentType(pathArgument); output.writeByte(type); switch(type) { case PathArgumentTypes.NODE_IDENTIFIER: NodeIdentifier nodeIdentifier = (NodeIdentifier) pathArgument; writeQName(nodeIdentifier.getNodeType()); break; case PathArgumentTypes.NODE_IDENTIFIER_WITH_PREDICATES: NodeIdentifierWithPredicates nodeIdentifierWithPredicates = (NodeIdentifierWithPredicates) pathArgument; writeQName(nodeIdentifierWithPredicates.getNodeType()); writeKeyValueMap(nodeIdentifierWithPredicates.getKeyValues()); break; case PathArgumentTypes.NODE_IDENTIFIER_WITH_VALUE : NodeWithValue<?> nodeWithValue = (NodeWithValue<?>) pathArgument; writeQName(nodeWithValue.getNodeType()); writeObject(nodeWithValue.getValue()); break; case PathArgumentTypes.AUGMENTATION_IDENTIFIER : AugmentationIdentifier augmentationIdentifier = (AugmentationIdentifier) pathArgument; // No Qname in augmentation identifier writeQNameSet(augmentationIdentifier.getPossibleChildNames()); break; default : throw new IllegalStateException("Unknown node identifier type is found : " + pathArgument.getClass().toString() ); } }
break; case ValueTypes.QNAME_TYPE: writeQName((QName) value); break; case ValueTypes.INT_TYPE: break; case ValueTypes.BITS_TYPE: writeObjSet((Set<?>) value); break; case ValueTypes.BINARY_TYPE: break; case ValueTypes.YANG_IDENTIFIER_TYPE: writeYangInstanceIdentifierInternal((YangInstanceIdentifier) value); break; case ValueTypes.EMPTY_TYPE:
@Override public void startYangModeledAnyXmlNode(final NodeIdentifier name, final int childSizeHint) throws IOException, IllegalArgumentException { Preconditions.checkNotNull(name, "Node identifier should not be null"); LOG.trace("Starting a new yang modeled anyXml node"); startNode(name.getNodeType(), NodeTypes.YANG_MODELED_ANY_XML_NODE); }
@Override public void leafNode(final NodeIdentifier name, final Object value) throws IOException, IllegalArgumentException { Preconditions.checkNotNull(name, "Node identifier should not be null"); LOG.debug("Writing a new leaf node"); startNode(name.getNodeType(), NodeTypes.LEAF_NODE); writeObject(value); }
@Override public void startMapEntryNode(final NodeIdentifierWithPredicates identifier, final int childSizeHint) throws IOException, IllegalArgumentException { Preconditions.checkNotNull(identifier, "Node identifier should not be null"); LOG.trace("Starting a new map entry node"); startNode(identifier.getNodeType(), NodeTypes.MAP_ENTRY_NODE); writeKeyValueMap(identifier.getKeyValues()); }
private void ensureHeaderWritten() throws IOException { if (!headerWritten) { output.writeByte(TokenTypes.SIGNATURE_MARKER); output.writeShort(streamVersion()); headerWritten = true; } }
private void writeQNameSet(final Set<QName> children) throws IOException { // Write each child's qname separately, if list is empty send count as 0 if (children != null && !children.isEmpty()) { output.writeInt(children.size()); for (QName qname : children) { writeQName(qname); } } else { LOG.debug("augmentation node does not have any child"); output.writeInt(0); } }
private void writeYangInstanceIdentifierInternal(final YangInstanceIdentifier identifier) throws IOException { Collection<PathArgument> pathArguments = identifier.getPathArguments(); output.writeInt(pathArguments.size()); for (PathArgument pathArgument : pathArguments) { writePathArgument(pathArgument); } }
writeQName(nodeIdentifier.getNodeType()); break; writeQName(nodeIdentifierWithPredicates.getNodeType()); writeKeyValueMap(nodeIdentifierWithPredicates.getKeyValues()); break; writeQName(nodeWithValue.getNodeType()); writeObject(nodeWithValue.getValue()); break; writeQNameSet(augmentationIdentifier.getPossibleChildNames()); break; default :
break; case ValueTypes.QNAME_TYPE: writeQName((QName) value); break; case ValueTypes.INT_TYPE: break; case ValueTypes.BITS_TYPE: writeObjSet((Set<?>) value); break; case ValueTypes.BINARY_TYPE: break; case ValueTypes.YANG_IDENTIFIER_TYPE: writeYangInstanceIdentifierInternal((YangInstanceIdentifier) value); break; case ValueTypes.NULL_TYPE :
@Override public void startMapNode(final NodeIdentifier name, final int childSizeHint) throws IOException, IllegalArgumentException { Preconditions.checkNotNull(name, "Node identifier should not be null"); LOG.trace("Starting a new map node"); startNode(name.getNodeType(), NodeTypes.MAP_NODE); }
@Override public void leafSetEntryNode(final QName name, final Object value) throws IOException, IllegalArgumentException { LOG.debug("Writing a new leaf set entry node"); output.writeByte(NodeTypes.LEAF_SET_ENTRY_NODE); // lastLeafSetQName is set if the parent LeafSetNode was previously written. Otherwise this is a // stand alone LeafSetEntryNode so write out it's name here. if(lastLeafSetQName == null) { writeQName(name); } writeObject(value); }
@Override public void leafNode(final NodeIdentifier name, final Object value) throws IOException, IllegalArgumentException { Preconditions.checkNotNull(name, "Node identifier should not be null"); LOG.trace("Writing a new leaf node"); startNode(name.getNodeType(), NodeTypes.LEAF_NODE); writeObject(value); }
private void startNode(final QName qName, final byte nodeType) throws IOException { Preconditions.checkNotNull(qName, "QName of node identifier should not be null."); ensureHeaderWritten(); // First write the type of node output.writeByte(nodeType); // Write Start Tag writeQName(qName); }