import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
-import java.net.URISyntaxException;
import java.util.Optional;
-import javax.annotation.Nonnull;
import javax.xml.XMLConstants;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
+import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeSerializer;
import org.opendaylight.transportpce.test.DataStoreContext;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
import org.opendaylight.yangtools.yang.data.codec.xml.XMLStreamNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.codec.xml.XmlCodecFactory;
import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
+import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveStatementInference;
import org.opendaylight.yangtools.yang.model.api.SchemaNode;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
public final class XMLDataObjectConverter extends AbstractDataObjectConverter {
* @param dataStoreContextUtil datastore context util used to extract codec and schema context
* @return {@link AbstractDataObjectConverter}
*/
- public static XMLDataObjectConverter createWithDataStoreUtil(@Nonnull DataStoreContext dataStoreContextUtil) {
+ public static XMLDataObjectConverter createWithDataStoreUtil(@NonNull DataStoreContext dataStoreContextUtil) {
BindingNormalizedNodeSerializer bindingToNormalizedNodeCodec =
- dataStoreContextUtil.getBindingToNormalizedNodeCodec();
+ dataStoreContextUtil.getBindingDOMCodecServices();
return new XMLDataObjectConverter(dataStoreContextUtil.getSchemaContext(), bindingToNormalizedNodeCodec);
}
* @param codecRegistry codec registry used for converting
* @return new {@link XMLDataObjectConverter}
*/
- public static XMLDataObjectConverter createWithSchemaContext(@Nonnull EffectiveModelContext schemaContext,
- @Nonnull BindingNormalizedNodeSerializer codecRegistry) {
+ public static XMLDataObjectConverter createWithSchemaContext(@NonNull EffectiveModelContext schemaContext,
+ @NonNull BindingNormalizedNodeSerializer codecRegistry) {
return new XMLDataObjectConverter(schemaContext, codecRegistry);
}
* @return {@link Optional} instance of {@link NormalizedNode}.
*/
@Override
- public Optional<NormalizedNode<? extends YangInstanceIdentifier.PathArgument, ?>> transformIntoNormalizedNode(
- @Nonnull InputStream inputStream) {
+ public Optional<NormalizedNode> transformIntoNormalizedNode(@NonNull InputStream inputStream) {
try {
XMLStreamReader reader = this.xmlInputFactory.createXMLStreamReader(inputStream);
return parseInputXML(reader);
}
}
- public Optional<NormalizedNode<? extends YangInstanceIdentifier.PathArgument, ?>> transformIntoNormalizedNode(
- @Nonnull Reader inputReader, SchemaNode parentSchema) {
+ @Override
+ public Optional<NormalizedNode> transformIntoNormalizedNode(@NonNull Reader inputReader) {
try {
XMLStreamReader reader = this.xmlInputFactory.createXMLStreamReader(inputReader);
- return parseInputXML(reader, parentSchema);
+ return parseInputXML(reader);
} catch (XMLStreamException e) {
LOG.warn("XMLStreamException: {}", e.getMessage());
return Optional.empty();
}
}
+ @Override
+ public Optional<NormalizedNode> transformIntoNormalizedNode(Reader inputReader, SchemaNode parentSchema) {
+ throw new UnsupportedOperationException("Not Implemented yet");
+ }
+
/**
* Transforms the XML input stream into normalized nodes.
*
* @param inputReader of the given XML
* @return {@link Optional} instance of {@link NormalizedNode}.
*/
- @Override
- public Optional<NormalizedNode<? extends YangInstanceIdentifier.PathArgument, ?>> transformIntoNormalizedNode(
- @Nonnull Reader inputReader) {
+ public Optional<NormalizedNode> transformInschemaContexttoNormalizedNode(@NonNull Reader inputReader) {
try {
XMLStreamReader reader = this.xmlInputFactory.createXMLStreamReader(inputReader);
return parseInputXML(reader);
}
@Override
- public <T extends DataObject> Writer writerFromRpcDataObject(@Nonnull DataObject object, Class<T> dataObjectClass,
+ public <T extends DataObject> Writer writerFromRpcDataObject(@NonNull DataObject object, Class<T> dataObjectClass,
ConvertType<T> convertType, QName rpcOutputQName, String rpcName) {
Writer writer = new StringWriter();
XMLStreamWriter xmlStreamWriter = createXmlStreamWriter(writer);
- SchemaPath rpcOutputSchemaPath = SchemaPath.create(true, QName.create(rpcOutputQName.getModule(), rpcName),
- rpcOutputQName);
- try (NormalizedNodeWriter normalizedNodeWriter = createWriterBackedNormalizedNodeWriter(xmlStreamWriter,
- rpcOutputSchemaPath)) {
+ try (NormalizedNodeWriter normalizedNodeWriter = createWriterBackedNormalizedNodeWriter(xmlStreamWriter)) {
xmlStreamWriter.writeStartElement(XMLConstants.DEFAULT_NS_PREFIX,
rpcOutputQName.getLocalName(), rpcOutputQName.getNamespace().toString());
xmlStreamWriter.writeDefaultNamespace(rpcOutputQName.getNamespace().toString());
- NormalizedNode<?, ?> rpcOutputNormalizedNode = convertType.toNormalizedNodes(dataObjectClass.cast(object),
- dataObjectClass).get();
- for (final NormalizedNode<?, ?> child : ((ContainerNode)rpcOutputNormalizedNode).getValue()) {
+ NormalizedNode rpcOutputNormalizedNode =
+ convertType.toNormalizedNodes(dataObjectClass.cast(object), dataObjectClass).orElseThrow();
+ for (final NormalizedNode child : ((ContainerNode)rpcOutputNormalizedNode).body()) {
normalizedNodeWriter.write(child);
}
normalizedNodeWriter.flush();
*
*/
@Override
- public <T extends DataObject> Writer writerFromDataObject(@Nonnull DataObject object, Class<T> dataObjectClass,
+ public <T extends DataObject> Writer writerFromDataObject(@NonNull DataObject object, Class<T> dataObjectClass,
ConvertType<T> convertType) {
+
Writer writer = new StringWriter();
+ Optional<NormalizedNode> normalizedNode = convertType
+ .toNormalizedNodes(dataObjectClass.cast(object), dataObjectClass);
+ if (normalizedNode.isEmpty()) {
+ LOG.warn("enable to convert {} to {}", dataObjectClass, object.getClass());
+ return writer;
+ }
- try (NormalizedNodeWriter normalizedNodeWriter = createWriterBackedNormalizedNodeWriter(writer, null)) {
- normalizedNodeWriter
- .write(convertType.toNormalizedNodes(dataObjectClass.cast(object), dataObjectClass).get());
+ try (NormalizedNodeWriter normalizedNodeWriter = createWriterBackedNormalizedNodeWriter(writer)) {
+ normalizedNodeWriter.write(normalizedNode.orElseThrow());
normalizedNodeWriter.flush();
} catch (IOException ioe) {
throw new IllegalStateException(ioe);
return writer;
}
- private Optional<NormalizedNode<? extends YangInstanceIdentifier.PathArgument, ?>> parseInputXML(
- XMLStreamReader reader) {
+ private Optional<NormalizedNode> parseInputXML(XMLStreamReader reader) {
return parseInputXML(reader, getSchemaContext());
}
- private Optional<NormalizedNode<? extends YangInstanceIdentifier.PathArgument, ?>> parseInputXML(
- XMLStreamReader reader, SchemaNode parentSchemaNode) {
- NormalizedNodeResult result = new NormalizedNodeResult();
+ private Optional<NormalizedNode> parseInputXML(XMLStreamReader reader, SchemaNode parentSchemaNode) {
+ NormalizationResultHolder result = new NormalizationResultHolder();
+ EffectiveStatementInference schema = SchemaInferenceStack.of(getSchemaContext()).toInference();
try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
- XmlParserStream xmlParser = XmlParserStream
- .create(streamWriter, XmlCodecFactory.create(getSchemaContext()), parentSchemaNode)) {
+ XmlParserStream xmlParser = XmlParserStream
+ .create(streamWriter, schema)) {
xmlParser.parse(reader);
- } catch (XMLStreamException | URISyntaxException | IOException | SAXException e) {
+ } catch (XMLStreamException | IOException e) {
LOG.warn("An error occured during parsing XML input stream", e);
return Optional.empty();
}
- return Optional.ofNullable(result.getResult());
+ return Optional.ofNullable(result.getResult().data());
}
- private NormalizedNodeWriter createWriterBackedNormalizedNodeWriter(Writer backingWriter, SchemaPath pathToParent) {
+ private NormalizedNodeWriter createWriterBackedNormalizedNodeWriter(Writer backingWriter) {
XMLStreamWriter createXMLStreamWriter = createXmlStreamWriter(backingWriter);
NormalizedNodeStreamWriter streamWriter;
- if (pathToParent == null) {
- streamWriter = XMLStreamNormalizedNodeStreamWriter.create(createXMLStreamWriter,
- getSchemaContext());
- } else {
- streamWriter = XMLStreamNormalizedNodeStreamWriter.create(createXMLStreamWriter,
- getSchemaContext(), pathToParent);
- }
+ streamWriter = XMLStreamNormalizedNodeStreamWriter.create(createXMLStreamWriter, getSchemaContext());
return NormalizedNodeWriter.forStreamWriter(streamWriter);
}
- private NormalizedNodeWriter createWriterBackedNormalizedNodeWriter(XMLStreamWriter backingWriter,
- SchemaPath pathToParent) {
- NormalizedNodeStreamWriter streamWriter;
- if (pathToParent == null) {
- streamWriter = XMLStreamNormalizedNodeStreamWriter.create(backingWriter,
- getSchemaContext());
- } else {
- streamWriter = XMLStreamNormalizedNodeStreamWriter.create(backingWriter,
- getSchemaContext(), pathToParent);
- }
+ private NormalizedNodeWriter createWriterBackedNormalizedNodeWriter(XMLStreamWriter backingWriter) {
+ Inference rootNode = SchemaInferenceStack.of(getSchemaContext()).toInference();
+ NormalizedNodeStreamWriter streamWriter = XMLStreamNormalizedNodeStreamWriter
+ .create(backingWriter, rootNode);
return NormalizedNodeWriter.forStreamWriter(streamWriter);
}