*/
package org.opendaylight.yangtools.yang.data.codec.xml;
+import static com.google.common.base.Preconditions.checkState;
import static java.util.Objects.requireNonNull;
import java.io.IOException;
-import java.util.Collections;
-import java.util.Map;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
-import org.opendaylight.yangtools.yang.common.QName;
+import javax.xml.transform.dom.DOMSource;
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.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.AnyXmlSchemaNode;
}
@Override
- void writeValue(final ValueWriter xmlWriter, final QName qname, final Object value,
- final SchemaNode schemaNode) throws XMLStreamException {
- streamUtils.writeValue(xmlWriter, schemaNode, value, qname.getModule());
+ String encodeValue(final ValueWriter xmlWriter, final Object value, final SchemaNode schemaNode)
+ throws XMLStreamException {
+ return streamUtils.encodeValue(xmlWriter, schemaNode, value, schemaNode.getQName().getModule());
}
@Override
@Override
public void endNode() throws IOException {
final Object schema = tracker.endNode();
- if (schema instanceof ListSchemaNode) {
+ if (schema instanceof ListSchemaNode || schema instanceof LeafListSchemaNode) {
// For lists, we only emit end element on the inner frame
final Object parent = tracker.getParent();
if (parent == schema) {
endElement();
}
- } else if (schema instanceof ContainerSchemaNode) {
- // Emit container end element
+ } else if (schema instanceof ContainerSchemaNode || schema instanceof LeafSchemaNode) {
endElement();
}
}
@Override
- public void leafNode(final NodeIdentifier name, final Object value) throws IOException {
- final LeafSchemaNode schema = tracker.leafNode(name);
- writeElement(schema.getQName(), value, Collections.emptyMap(), schema);
- }
-
- @Override
- public void leafNode(final NodeIdentifier name, final Object value, final Map<QName, String> attributes)
- throws IOException {
- final LeafSchemaNode schema = tracker.leafNode(name);
- writeElement(schema.getQName(), value, attributes, schema);
- }
-
- @Override
- public void leafSetEntryNode(final QName name, final Object value, final Map<QName, String> attributes)
- throws IOException {
- final LeafListSchemaNode schema = tracker.leafSetEntryNode(name);
- writeElement(schema.getQName(), value, attributes, schema);
+ public void startLeafNode(final NodeIdentifier name) throws IOException {
+ tracker.startLeafNode(name);
+ startElement(name.getNodeType());
}
@Override
- public void leafSetEntryNode(final QName name, final Object value) throws IOException {
- final LeafListSchemaNode schema = tracker.leafSetEntryNode(name);
- writeElement(schema.getQName(), value, Collections.emptyMap(), schema);
+ public void startLeafSetEntryNode(final NodeWithValue<?> name) throws IOException {
+ tracker.startLeafSetEntryNode(name);
+ startElement(name.getNodeType());
}
@Override
}
@Override
- public void anyxmlNode(final NodeIdentifier name, final Object value) throws IOException {
- final AnyXmlSchemaNode schema = tracker.anyxmlNode(name);
- anyxmlNode(schema.getQName(), value);
+ public void startAnyxmlNode(final NodeIdentifier name) throws IOException {
+ tracker.startAnyxmlNode(name);
+ startElement(name.getNodeType());
}
@Override
public SchemaContext getSchemaContext() {
return streamUtils.getSchemaContext();
}
+
+ @Override
+ public void scalarValue(final Object value) throws IOException {
+ final Object current = tracker.getParent();
+ checkState(current instanceof LeafSchemaNode || current instanceof LeafListSchemaNode,
+ "Unexpected scalar value %s with %s", value, current);
+ writeValue(value, (SchemaNode) 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);
+ anyxmlValue(value);
+ }
}