- output.writeInt(0);
- }
- }
-
- public void writeYangInstanceIdentifier(YangInstanceIdentifier identifier) throws IOException {
- Iterable<YangInstanceIdentifier.PathArgument> pathArguments = identifier.getPathArguments();
- int size = Iterables.size(pathArguments);
- output.writeInt(size);
-
- for(YangInstanceIdentifier.PathArgument pathArgument : pathArguments) {
- writePathArgument(pathArgument);
- }
- }
-
- private void writePathArgument(YangInstanceIdentifier.PathArgument pathArgument) throws IOException {
-
- byte type = PathArgumentTypes.getSerializablePathArgumentType(pathArgument);
-
- output.writeByte(type);
-
- switch(type) {
- case PathArgumentTypes.NODE_IDENTIFIER :
-
- YangInstanceIdentifier.NodeIdentifier nodeIdentifier =
- (YangInstanceIdentifier.NodeIdentifier) pathArgument;
-
- writeQName(nodeIdentifier.getNodeType());
- break;
-
- case PathArgumentTypes.NODE_IDENTIFIER_WITH_PREDICATES:
-
- YangInstanceIdentifier.NodeIdentifierWithPredicates nodeIdentifierWithPredicates =
- (YangInstanceIdentifier.NodeIdentifierWithPredicates) pathArgument;
- writeQName(nodeIdentifierWithPredicates.getNodeType());
-
- writeKeyValueMap(nodeIdentifierWithPredicates.getKeyValues());
- break;
-
- case PathArgumentTypes.NODE_IDENTIFIER_WITH_VALUE :
-
- YangInstanceIdentifier.NodeWithValue nodeWithValue =
- (YangInstanceIdentifier.NodeWithValue) pathArgument;
-
- writeQName(nodeWithValue.getNodeType());
- writeObject(nodeWithValue.getValue());
- break;
-
- case PathArgumentTypes.AUGMENTATION_IDENTIFIER :
-
- YangInstanceIdentifier.AugmentationIdentifier augmentationIdentifier =
- (YangInstanceIdentifier.AugmentationIdentifier) pathArgument;
-
- // No Qname in augmentation identifier
- writeQNameSet(augmentationIdentifier.getPossibleChildNames());
- break;
- default :
- throw new IllegalStateException("Unknown node identifier type is found : " + pathArgument.getClass().toString() );
- }
- }
-
- private void writeKeyValueMap(Map<QName, Object> keyValueMap) throws IOException {
- if(keyValueMap != null && !keyValueMap.isEmpty()) {
- output.writeInt(keyValueMap.size());
- Set<QName> qNameSet = keyValueMap.keySet();
-
- for(QName qName : qNameSet) {
- writeQName(qName);
- writeObject(keyValueMap.get(qName));
- }
- } else {
- output.writeInt(0);
- }
- }
-
- private void writeQNameSet(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 writeObject(Object value) throws IOException {
-
- byte type = ValueTypes.getSerializableType(value);
- // Write object type first
- output.writeByte(type);
-
- switch(type) {
- case ValueTypes.BOOL_TYPE:
- output.writeBoolean((Boolean) value);
- break;
- case ValueTypes.QNAME_TYPE:
- writeQName((QName) value);
- break;
- case ValueTypes.INT_TYPE:
- output.writeInt((Integer) value);
- break;
- case ValueTypes.BYTE_TYPE:
- output.writeByte((Byte) value);
- break;
- case ValueTypes.LONG_TYPE:
- output.writeLong((Long) value);
- break;
- case ValueTypes.SHORT_TYPE:
- output.writeShort((Short) value);
- break;
- case ValueTypes.BITS_TYPE:
- writeObjSet((Set<?>) value);
- break;
- case ValueTypes.BINARY_TYPE:
- byte[] bytes = (byte[]) value;
- output.writeInt(bytes.length);
- output.write(bytes);
- break;
- case ValueTypes.YANG_IDENTIFIER_TYPE:
- writeYangInstanceIdentifier((YangInstanceIdentifier) value);
- break;
- case ValueTypes.NULL_TYPE :
- break;
- default:
- output.writeUTF(value.toString());
- break;