X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=common%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fcommon%2Fconverter%2FJsonStringConverter.java;h=e87d0a10326c0b089351df55af556508721ef4db;hb=b1b3bafd549bb501937cea5c976d5344608b6ed3;hp=7f7680b5fa4bdd55cdffa2c1ef9a08b813a91637;hpb=04dc7aa524f9912005ba3bb07dba4b08dbb10a5a;p=transportpce.git diff --git a/common/src/main/java/org/opendaylight/transportpce/common/converter/JsonStringConverter.java b/common/src/main/java/org/opendaylight/transportpce/common/converter/JsonStringConverter.java old mode 100644 new mode 100755 index 7f7680b5f..e87d0a103 --- a/common/src/main/java/org/opendaylight/transportpce/common/converter/JsonStringConverter.java +++ b/common/src/main/java/org/opendaylight/transportpce/common/converter/JsonStringConverter.java @@ -7,18 +7,20 @@ */ 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; @@ -30,8 +32,10 @@ import org.opendaylight.yangtools.yang.data.codec.gson.JSONNormalizedNodeStreamW import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream; 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.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.util.SchemaInferenceStack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,8 +58,6 @@ public class JsonStringConverter { */ public String createJsonStringFromDataObject(final InstanceIdentifier 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(), - @@ -63,13 +65,18 @@ public class JsonStringConverter { */ JSONCodecFactory codecFactory = supplier - .getShared(bindingDOMCodecServices.getRuntimeContext().getEffectiveModelContext()); + .getShared(bindingDOMCodecServices.getRuntimeContext().modelContext()); 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().modelContext()) + .toInference(); + rootNode.modelContext(); + rootNode.modelContext(); + NormalizedNodeStreamWriter jsonStreamWriter = JSONNormalizedNodeStreamWriter + .createExclusiveWriter(codecFactory, rootNode, EffectiveModelContext.NAME.getNamespace(), jsonWriter); try (NormalizedNodeWriter nodeWriter = NormalizedNodeWriter.forStreamWriter(jsonStreamWriter)) { - nodeWriter.write(bindingDOMCodecServices.toNormalizedNode(id, dataObject).getValue()); + nodeWriter.write(bindingDOMCodecServices.toNormalizedDataObject(id, dataObject).node()); nodeWriter.flush(); } JsonObject asJsonObject = JsonParser.parseString(writer.toString()).getAsJsonObject(); @@ -90,17 +97,37 @@ public class JsonStringConverter { @SuppressWarnings("unchecked") public T createDataObjectFromJsonString(YangInstanceIdentifier path, String jsonString, JSONCodecFactorySupplier supplier) { - JsonReader reader = new JsonReader(new StringReader(jsonString)); - NormalizedNodeResult result = new NormalizedNodeResult(); - try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - JsonParserStream jsonParser = JsonParserStream.create(streamWriter, - supplier - .getShared(bindingDOMCodecServices.getRuntimeContext().getEffectiveModelContext()))) { + 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. + */ + @SuppressWarnings("unchecked") + private T createDataObjectFromReader(YangInstanceIdentifier path, Reader inputReader, + JSONCodecFactorySupplier supplier) { + + NormalizationResultHolder result = new NormalizationResultHolder(); + try (JsonReader reader = new JsonReader(inputReader); + NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); + JsonParserStream jsonParser = JsonParserStream + .create( + streamWriter, + supplier.getShared(bindingDOMCodecServices + .getRuntimeContext().modelContext()))) { jsonParser.parse(reader); - return (T) bindingDOMCodecServices - .fromNormalizedNode(path, result.getResult()).getValue(); + return (T) bindingDOMCodecServices.fromNormalizedNode(path, result.getResult().data()).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; } }