import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.dom.DOMSource;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.rfc7952.model.api.AnnotationSchemaNode;
import org.opendaylight.yangtools.yang.common.AnnotationName;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
import org.opendaylight.yangtools.yang.data.util.NormalizedNodeStreamWriterStack;
-import org.opendaylight.yangtools.yang.model.api.AnydataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ContainerLike;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-import org.opendaylight.yangtools.yang.model.api.LeafListSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.LeafSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
import org.opendaylight.yangtools.yang.model.api.TypedDataSchemaNode;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnydataEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.AnyxmlEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ContainerEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.InputEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.LeafListEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ListEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.OutputEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.type.LeafrefTypeDefinition;
final class SchemaAwareXMLStreamNormalizedNodeStreamWriter
private final NormalizedNodeStreamWriterStack tracker;
private final SchemaAwareXMLStreamWriterUtils streamUtils;
- SchemaAwareXMLStreamNormalizedNodeStreamWriter(final XMLStreamWriter writer, final EffectiveModelContext context,
- final NormalizedNodeStreamWriterStack tracker) {
- super(writer);
+ private SchemaAwareXMLStreamNormalizedNodeStreamWriter(final XMLStreamWriter writer,
+ final EffectiveModelContext modelContext, final NormalizedNodeStreamWriterStack tracker,
+ final @Nullable PreferredPrefixes pref) {
+ super(writer, pref);
this.tracker = requireNonNull(tracker);
- streamUtils = new SchemaAwareXMLStreamWriterUtils(context);
+ streamUtils = new SchemaAwareXMLStreamWriterUtils(modelContext, pref);
+ }
+
+ SchemaAwareXMLStreamNormalizedNodeStreamWriter(final XMLStreamWriter writer,
+ final EffectiveModelContext modelContext, final NormalizedNodeStreamWriterStack tracker,
+ final boolean modelPrefixes) {
+ this(writer, modelContext, tracker, modelPrefixes ? new PreferredPrefixes.Shared(modelContext) : null);
}
@Override
@Override
public void endNode() throws IOException {
- final Object schema = tracker.endNode();
- if (schema instanceof ListSchemaNode || schema instanceof LeafListSchemaNode) {
+ final var schema = tracker.endNode();
+ if (schema instanceof ListEffectiveStatement || schema instanceof LeafListEffectiveStatement) {
// For lists, we only emit end element on the inner frame
- final Object parent = tracker.getParent();
- if (parent == schema) {
+ if (tracker.currentStatement() == schema) {
endElement();
}
- } else if (schema instanceof ContainerLike || schema instanceof LeafSchemaNode
- || schema instanceof AnydataSchemaNode || schema instanceof AnyxmlSchemaNode) {
+ } else if (schema instanceof ContainerEffectiveStatement || schema instanceof LeafEffectiveStatement
+ || schema instanceof AnydataEffectiveStatement || schema instanceof AnyxmlEffectiveStatement
+ || schema instanceof InputEffectiveStatement || schema instanceof OutputEffectiveStatement
+ || schema instanceof NotificationEffectiveStatement) {
endElement();
}
}
@Override
public void scalarValue(final Object value) throws IOException {
- final Object current = tracker.getParent();
+ final var current = tracker.currentStatement();
if (current instanceof TypedDataSchemaNode typedSchema) {
writeValue(value, typedSchema);
- } else if (current instanceof AnydataSchemaNode) {
+ } else if (current instanceof AnydataEffectiveStatement) {
anydataValue(value);
} else {
throw new IllegalStateException("Unexpected scalar value " + value + " with " + current);
@Override
public void domSourceValue(final DOMSource value) throws IOException {
- final Object current = tracker.getParent();
- checkState(current instanceof AnyxmlSchemaNode, "Unexpected value %s with %s", value, current);
+ final var current = tracker.currentStatement();
+ checkState(current instanceof AnyxmlEffectiveStatement, "Unexpected value %s with %s", value, current);
anyxmlValue(value);
}