*/
package org.opendaylight.transportpce.common.converter;
-import com.google.common.collect.FluentIterable;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
+import java.nio.charset.StandardCharsets;
import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices;
-import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.codec.gson.JsonWriterFactory;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
-import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveStatementInference;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
*/
public String createJsonStringFromDataObject(final InstanceIdentifier<T> id, T dataObject,
JSONCodecFactorySupplier supplier) throws IOException {
- final SchemaPath scPath = SchemaPath.create(FluentIterable.from(id.getPathArguments())
- .transform(input -> BindingReflections.findQName(input.getType())), true);
/*
* This function needs : - context - scPath.getParent() -
* scPath.getLastComponent().getNamespace(), -
JSONCodecFactory codecFactory = supplier
.getShared(bindingDOMCodecServices.getRuntimeContext().getEffectiveModelContext());
try (Writer writer = new StringWriter();
- JsonWriter jsonWriter = JsonWriterFactory.createJsonWriter(writer, 4);) {
- NormalizedNodeStreamWriter jsonStreamWriter = JSONNormalizedNodeStreamWriter.createExclusiveWriter(
- codecFactory, scPath.getParent(), scPath.getLastComponent().getNamespace(), jsonWriter);
+ JsonWriter jsonWriter = JsonWriterFactory.createJsonWriter(writer, 4)) {
+ EffectiveStatementInference rootNode = SchemaInferenceStack
+ .of(bindingDOMCodecServices.getRuntimeContext().getEffectiveModelContext())
+ .toInference();
+ rootNode.getEffectiveModelContext();
+ rootNode.getEffectiveModelContext();
+ NormalizedNodeStreamWriter jsonStreamWriter = JSONNormalizedNodeStreamWriter
+ .createExclusiveWriter(codecFactory, rootNode, EffectiveModelContext.NAME.getNamespace(), jsonWriter);
try (NormalizedNodeWriter nodeWriter = NormalizedNodeWriter.forStreamWriter(jsonStreamWriter)) {
nodeWriter.write(bindingDOMCodecServices.toNormalizedNode(id, dataObject).getValue());
nodeWriter.flush();
@SuppressWarnings("unchecked")
public T createDataObjectFromJsonString(YangInstanceIdentifier path, String jsonString,
JSONCodecFactorySupplier supplier) {
- JsonReader reader = new JsonReader(new StringReader(jsonString));
+ return createDataObjectFromReader(path, new StringReader(jsonString), supplier);
+ }
+
+ public T createDataObjectFromInputStream(YangInstanceIdentifier path, InputStream jsonStream,
+ JSONCodecFactorySupplier supplier) {
+ return createDataObjectFromReader(path, new InputStreamReader(jsonStream, StandardCharsets.UTF_8), supplier);
+ }
+
+ /**
+ * Create a dataObject of T type from Reader.
+ * @param path YangInstanceIdentifier
+ * @param inputReader Reader (could be all class implementing Reader) containing Json data.
+ * @param supplier RFC7951 or DRAFT_LHOTKA_NETMOD_YANG_JSON_02
+ * @return the created object.
+ */
+ private T createDataObjectFromReader(YangInstanceIdentifier path, Reader inputReader,
+ JSONCodecFactorySupplier supplier) {
+
NormalizedNodeResult result = new NormalizedNodeResult();
- try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
- JsonParserStream jsonParser = JsonParserStream.create(streamWriter,
- supplier
- .getShared(bindingDOMCodecServices.getRuntimeContext().getEffectiveModelContext()))) {
+ try (JsonReader reader = new JsonReader(inputReader);
+ NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
+ JsonParserStream jsonParser = JsonParserStream
+ .create(
+ streamWriter,
+ supplier.getShared(bindingDOMCodecServices
+ .getRuntimeContext().getEffectiveModelContext()))) {
jsonParser.parse(reader);
- return (T) bindingDOMCodecServices
- .fromNormalizedNode(path, result.getResult()).getValue();
+ return (T) bindingDOMCodecServices.fromNormalizedNode(path, result.getResult()).getValue();
} catch (IOException e) {
- LOG.warn("An error occured during parsing Json input stream", e);
+ LOG.warn("An error occured during parsing input reader", e);
return null;
}
}