import static com.google.common.base.Preconditions.checkState;
import static java.util.Objects.requireNonNull;
+import java.io.IOException;
import java.util.ArrayDeque;
import java.util.Deque;
import javax.xml.transform.dom.DOMSource;
import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.odlext.model.api.YangModeledAnyXmlSchemaNode;
+import org.opendaylight.yangtools.odlext.model.api.YangModeledAnyxmlSchemaNode;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.NormalizedNodeContainerBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableAnyXmlNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableAnydataNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableAugmentationNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableChoiceNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder;
+import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetEntryNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableLeafSetNodeBuilder;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder;
* @param result {@link NormalizedNodeResult} object which will hold result value.
* @return {@link NormalizedNodeStreamWriter} which will write item to supplied result holder.
*/
- public static NormalizedNodeStreamWriter from(final NormalizedNodeResult result) {
+ public static @NonNull NormalizedNodeStreamWriter from(final NormalizedNodeResult result) {
return result instanceof NormalizedNodeMetadataResult ? from((NormalizedNodeMetadataResult) result)
: new ImmutableNormalizedNodeStreamWriter(result);
}
* @param result {@link NormalizedNodeResult} object which will hold result value.
* @return {@link NormalizedNodeStreamWriter} which will write item to supplied result holder.
*/
- public static NormalizedNodeStreamWriter from(final NormalizedNodeMetadataResult result) {
+ public static @NonNull NormalizedNodeStreamWriter from(final NormalizedNodeMetadataResult result) {
return new ImmutableMetadataNormalizedNodeStreamWriter(result);
}
@Override
public void startLeafNode(final NodeIdentifier name) {
checkDataNodeContainer();
- enter(name, InterningLeafNodeBuilder.forSchema(nextSchema));
+ enter(name, leafNodeBuilder(nextSchema));
nextSchema = null;
}
checkArgument(current instanceof ImmutableLeafSetNodeBuilder
|| current instanceof ImmutableOrderedLeafSetNodeBuilder || current instanceof NormalizedNodeResultBuilder,
"LeafSetEntryNode is not valid for parent %s", current);
- enter(name, ImmutableLeafSetEntryNodeBuilder.create());
+ enter(name, leafsetEntryNodeBuilder());
nextSchema = null;
}
}
@Override
- public void startAnyxmlNode(final NodeIdentifier name) {
+ public boolean startAnyxmlNode(final NodeIdentifier name, final Class<?> objectModel) {
checkDataNodeContainer();
- enter(name, ImmutableAnyXmlNodeBuilder.create());
- nextSchema = null;
+ if (DOMSource.class.isAssignableFrom(objectModel)) {
+ enter(name, ImmutableAnyXmlNodeBuilder.create());
+ nextSchema = null;
+ return true;
+ }
+ return false;
}
@Override
public void startYangModeledAnyXmlNode(final NodeIdentifier name, final int childSizeHint) {
checkDataNodeContainer();
- checkArgument(nextSchema instanceof YangModeledAnyXmlSchemaNode,
- "Schema of this node should be instance of YangModeledAnyXmlSchemaNode");
- final YangModeledAnyXmlSchemaNode anyxmlSchema = (YangModeledAnyXmlSchemaNode) nextSchema;
+ checkArgument(nextSchema instanceof YangModeledAnyxmlSchemaNode,
+ "Schema of this node should be instance of YangModeledAnyxmlSchemaNode");
+ final YangModeledAnyxmlSchemaNode anyxmlSchema = (YangModeledAnyxmlSchemaNode) nextSchema;
enter(name, UNKNOWN_SIZE == childSizeHint ? ImmutableYangModeledAnyXmlNodeBuilder.create(anyxmlSchema)
: ImmutableYangModeledAnyXmlNodeBuilder.create(anyxmlSchema, childSizeHint));
}
writeChild(product);
}
+ @Override
+ public boolean startAnydataNode(final NodeIdentifier name, final Class<?> objectModel) throws IOException {
+ checkDataNodeContainer();
+ enter(name, ImmutableAnydataNodeBuilder.create(objectModel));
+ // We support all object models
+ return true;
+ }
+
/**
* Add a child not to the currently-open builder.
*
builders.push(builder);
}
+ private <T> ImmutableLeafNodeBuilder<T> leafNodeBuilder(final DataSchemaNode schema) {
+ final InterningLeafNodeBuilder<T> interning = InterningLeafNodeBuilder.forSchema(schema);
+ return interning != null ? interning : leafNodeBuilder();
+ }
+
+ <T> ImmutableLeafNodeBuilder<T> leafNodeBuilder() {
+ return new ImmutableLeafNodeBuilder<>();
+ }
+
+ <T> ImmutableLeafSetEntryNodeBuilder<T> leafsetEntryNodeBuilder() {
+ return ImmutableLeafSetEntryNodeBuilder.create();
+ }
+
private void checkDataNodeContainer() {
@SuppressWarnings("rawtypes")
final NormalizedNodeContainerBuilder current = currentContainer();