package org.opendaylight.netconf.util;
import static com.google.common.base.Preconditions.checkArgument;
-import static org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter.UNKNOWN_SIZE;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import java.io.IOException;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
final Iterator<PathArgument> others) throws IOException {
verifyActualPathArgument(first);
- emitElementStart(writer, first);
+ emitElementStart(writer, first, others.hasNext() ? 1 : 0);
if (others.hasNext()) {
final PathArgument childPath = others.next();
final StreamingContext<?> childOp = getChildOperation(childPath);
final PathNode subtree) throws IOException {
verifyActualPathArgument(first);
- emitElementStart(writer, first);
+ final Collection<PathNode> children = subtree.children();
+ emitElementStart(writer, first, children.size());
for (final PathNode node : subtree.children()) {
emitChildTreeNode(writer, node);
}
}
}
- abstract void emitElementStart(NormalizedNodeStreamWriter writer, PathArgument arg) throws IOException;
+ abstract void emitElementStart(NormalizedNodeStreamWriter writer, PathArgument arg,
+ int childSizeHint) throws IOException;
@SuppressWarnings("checkstyle:illegalCatch")
StreamingContext<?> getChildOperation(final PathArgument childPath) {
}
@Override
- void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg) throws IOException {
- writer.startChoiceNode(getIdentifier(), UNKNOWN_SIZE);
+ void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg,
+ final int childSizeHint) throws IOException {
+ writer.startChoiceNode(getIdentifier(), childSizeHint);
}
}
}
@Override
- void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg) throws IOException {
+ void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg,
+ final int childSizeHint) throws IOException {
final NodeIdentifierWithPredicates identifier = (NodeIdentifierWithPredicates) arg;
- writer.startMapEntryNode(identifier, UNKNOWN_SIZE);
+ writer.startMapEntryNode(identifier, childSizeHint);
for (Entry<QName, Object> entry : identifier.entrySet()) {
writer.startLeafNode(new NodeIdentifier(entry.getKey()));
}
@Override
- void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg) throws IOException {
- writer.startUnkeyedListItem(getIdentifier(), UNKNOWN_SIZE);
+ void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg,
+ final int childSizeHint) throws IOException {
+ writer.startUnkeyedListItem(getIdentifier(), childSizeHint);
}
}
}
@Override
- void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg) throws IOException {
- writer.startContainerNode(getIdentifier(), UNKNOWN_SIZE);
+ void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg,
+ final int childSizeHint) throws IOException {
+ writer.startContainerNode(getIdentifier(), childSizeHint);
}
}
}
@Override
- void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg) throws IOException {
- writer.startOrderedLeafSet(getIdentifier(), UNKNOWN_SIZE);
+ void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg,
+ final int childSizeHint) throws IOException {
+ writer.startOrderedLeafSet(getIdentifier(), childSizeHint);
}
}
}
@Override
- void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg) throws IOException {
- writer.startLeafSet(getIdentifier(), UNKNOWN_SIZE);
+ void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg,
+ final int childSizeHint) throws IOException {
+ writer.startLeafSet(getIdentifier(), childSizeHint);
}
}
}
@Override
- void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg) throws IOException {
+ void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg,
+ final int childSizeHint) throws IOException {
writer.startAugmentationNode(getIdentifier());
}
}
}
@Override
- void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg) throws IOException {
- writer.startMapNode(getIdentifier(), UNKNOWN_SIZE);
+ void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg,
+ final int childSizeHint) throws IOException {
+ writer.startMapNode(getIdentifier(), childSizeHint);
}
}
}
@Override
- void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg) throws IOException {
- writer.startOrderedMapNode(getIdentifier(), UNKNOWN_SIZE);
+ void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg,
+ final int childSizeHint) throws IOException {
+ writer.startOrderedMapNode(getIdentifier(), childSizeHint);
}
}
}
@Override
- void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg) throws IOException {
- writer.startUnkeyedList(getIdentifier(), UNKNOWN_SIZE);
+ void emitElementStart(final NormalizedNodeStreamWriter writer, final PathArgument arg,
+ final int childSizeHint) throws IOException {
+ writer.startUnkeyedList(getIdentifier(), childSizeHint);
}
}
}