import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
-import org.opendaylight.yangtools.yang.data.impl.codec.SchemaTracker;
-import org.opendaylight.yangtools.yang.model.api.AnyDataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode;
+import org.opendaylight.yangtools.yang.data.util.NormalizedNodeInferenceStack;
+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.EffectiveModelContextProvider;
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.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider;
import org.opendaylight.yangtools.yang.model.api.SchemaNode;
import org.opendaylight.yangtools.yang.model.api.TypedDataSchemaNode;
-final class SchemaAwareXMLStreamNormalizedNodeStreamWriter extends XMLStreamNormalizedNodeStreamWriter<SchemaNode>
- implements SchemaContextProvider {
- private final SchemaTracker tracker;
+final class SchemaAwareXMLStreamNormalizedNodeStreamWriter
+ extends XMLStreamNormalizedNodeStreamWriter<TypedDataSchemaNode> implements EffectiveModelContextProvider {
+ private final NormalizedNodeInferenceStack tracker;
private final SchemaAwareXMLStreamWriterUtils streamUtils;
- SchemaAwareXMLStreamNormalizedNodeStreamWriter(final XMLStreamWriter writer, final SchemaContext context,
- final SchemaTracker tracker) {
+ SchemaAwareXMLStreamNormalizedNodeStreamWriter(final XMLStreamWriter writer, final EffectiveModelContext context,
+ final NormalizedNodeInferenceStack tracker) {
super(writer);
this.tracker = requireNonNull(tracker);
this.streamUtils = new SchemaAwareXMLStreamWriterUtils(context);
}
@Override
- String encodeValue(final ValueWriter xmlWriter, final Object value, final SchemaNode schemaNode)
+ String encodeValue(final ValueWriter xmlWriter, final Object value, final TypedDataSchemaNode schemaNode)
throws XMLStreamException {
- return streamUtils.encodeValue(xmlWriter, schemaNode, value, schemaNode.getQName().getModule());
+ return streamUtils.encodeValue(xmlWriter, schemaNode, schemaNode.getType(), value,
+ schemaNode.getQName().getModule());
}
@Override
String encodeAnnotationValue(final ValueWriter xmlWriter, final QName qname, final Object value)
throws XMLStreamException {
- final Optional<AnnotationSchemaNode> optAnnotation = AnnotationSchemaNode.find(streamUtils.getSchemaContext(),
- qname);
+ final Optional<AnnotationSchemaNode> optAnnotation =
+ AnnotationSchemaNode.find(streamUtils.getEffectiveModelContext(), qname);
if (optAnnotation.isPresent()) {
- return streamUtils.encodeValue(xmlWriter, optAnnotation.get(), value, qname.getModule());
+ final AnnotationSchemaNode schema = optAnnotation.get();
+ return streamUtils.encodeValue(xmlWriter, schema, schema.getType(), value, qname.getModule());
}
checkArgument(!qname.getRevision().isPresent(), "Failed to find bound annotation %s", qname);
if (parent == schema) {
endElement();
}
- } else if (schema instanceof ContainerSchemaNode || schema instanceof LeafSchemaNode
- || schema instanceof AnyDataSchemaNode || schema instanceof AnyXmlSchemaNode) {
+ } else if (schema instanceof ContainerLike || schema instanceof LeafSchemaNode
+ || schema instanceof AnydataSchemaNode || schema instanceof AnyxmlSchemaNode) {
endElement();
}
}
}
@Override
- public void startYangModeledAnyXmlNode(final NodeIdentifier name, final int childSizeHint) throws IOException {
- final SchemaNode schema = tracker.startYangModeledAnyXmlNode(name);
- startElement(schema.getQName());
- }
-
- @Override
- public void startAnyxmlNode(final NodeIdentifier name) throws IOException {
- tracker.startAnyxmlNode(name);
- startElement(name.getNodeType());
+ public boolean startAnyxmlNode(final NodeIdentifier name, final Class<?> objectModel) throws IOException {
+ if (DOMSource.class.isAssignableFrom(objectModel)) {
+ tracker.startAnyxmlNode(name);
+ startElement(name.getNodeType());
+ return true;
+ }
+ return false;
}
@Override
- public SchemaContext getSchemaContext() {
- return streamUtils.getSchemaContext();
+ public EffectiveModelContext getEffectiveModelContext() {
+ return streamUtils.getEffectiveModelContext();
}
@Override
public void scalarValue(final Object value) throws IOException {
final Object current = tracker.getParent();
if (current instanceof TypedDataSchemaNode) {
- writeValue(value, (SchemaNode) current);
- } else if (current instanceof AnyDataSchemaNode) {
+ writeValue(value, (TypedDataSchemaNode) current);
+ } else if (current instanceof AnydataSchemaNode) {
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 scala value %s with %s", value, current);
+ checkState(current instanceof AnyxmlSchemaNode, "Unexpected scala value %s with %s", value, current);
anyxmlValue(value);
}