From 88be0ab9b716b74e1d71c5e4d44549dbb164621c Mon Sep 17 00:00:00 2001 From: Gilles Thouenon Date: Fri, 25 Feb 2022 18:12:46 +0100 Subject: [PATCH] Remove usage of SchemaPath from converters - Update code of JSON/XML serializer/deserializer to not use anymore the SchemaPath object coming from yangtools, because it is marked as deprecated and should be removed in Sulfur. - Bump GNPy version to 2.4.3 JIRA: TRNSPRTPCE-627 Signed-off-by: Gilles Thouenon Change-Id: Id583e292533783c1fe8d61f9f6cb882d5024ba6d --- .../common/converter/JsonStringConverter.java | 27 +++---- .../src/test/resources/expected_string.json | 2 +- .../test/resources/event_alarm_service.json | 2 +- .../src/test/resources/expected_event.json | 2 +- .../expected_event_alarm_service.json | 2 +- .../AbstractDataObjectConverter.java | 14 ++-- .../test/converter/DataObjectConverter.java | 4 +- .../converter/JSONDataObjectConverter.java | 10 +-- .../converter/XMLDataObjectConverter.java | 71 ++++++++----------- tox.ini | 2 +- 10 files changed, 60 insertions(+), 76 deletions(-) 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 index 7f7680b5f..f29e66056 100644 --- 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,7 +7,6 @@ */ 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; @@ -18,7 +17,6 @@ import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; 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; @@ -31,7 +29,9 @@ 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.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 +54,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(), - @@ -66,8 +64,13 @@ public class JsonStringConverter { .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); + 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(); @@ -93,12 +96,12 @@ public class JsonStringConverter { 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()))) { + 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); return null; diff --git a/common/src/test/resources/expected_string.json b/common/src/test/resources/expected_string.json index 73dcdfbdb..f27cf978c 100644 --- a/common/src/test/resources/expected_string.json +++ b/common/src/test/resources/expected_string.json @@ -1 +1 @@ -{"request":{"topology":{"connections":[{"from_node":"127.0.0.51","to_node":"127.0.0.50"},{"from_node":"127.0.0.30","to_node":"127.0.0.31"},{"from_node":"127.0.0.10","to_node":"243.0.0.1"},{"from_node":"243.0.0.1","to_node":"127.0.0.30"},{"from_node":"127.0.0.20","to_node":"127.0.0.21"},{"from_node":"127.0.0.20","to_node":"243.0.0.2"},{"from_node":"243.0.0.2","to_node":"127.0.0.10"},{"from_node":"127.0.0.20","to_node":"243.0.0.3"},{"from_node":"243.0.0.3","to_node":"127.0.0.50"},{"from_node":"127.0.0.40","to_node":"127.0.0.41"},{"from_node":"127.0.0.40","to_node":"243.0.0.4"},{"from_node":"243.0.0.4","to_node":"127.0.0.30"},{"from_node":"127.0.0.50","to_node":"243.0.0.5"},{"from_node":"243.0.0.5","to_node":"127.0.0.30"},{"from_node":"127.0.0.31","to_node":"127.0.0.30"},{"from_node":"127.0.0.50","to_node":"127.0.0.51"},{"from_node":"127.0.0.20","to_node":"243.0.0.6"},{"from_node":"243.0.0.6","to_node":"127.0.0.30"},{"from_node":"127.0.0.30","to_node":"243.0.0.7"},{"from_node":"243.0.0.7","to_node":"127.0.0.40"},{"from_node":"127.0.0.11","to_node":"127.0.0.10"},{"from_node":"127.0.0.30","to_node":"243.0.0.8"},{"from_node":"243.0.0.8","to_node":"127.0.0.10"},{"from_node":"127.0.0.40","to_node":"243.0.0.9"},{"from_node":"243.0.0.9","to_node":"127.0.0.50"},{"from_node":"127.0.0.30","to_node":"243.0.0.10"},{"from_node":"243.0.0.10","to_node":"127.0.0.50"},{"from_node":"127.0.0.50","to_node":"243.0.0.11"},{"from_node":"243.0.0.11","to_node":"127.0.0.20"},{"from_node":"127.0.0.50","to_node":"243.0.0.12"},{"from_node":"243.0.0.12","to_node":"127.0.0.40"},{"from_node":"127.0.0.21","to_node":"127.0.0.20"},{"from_node":"127.0.0.41","to_node":"127.0.0.40"},{"from_node":"127.0.0.30","to_node":"243.0.0.13"},{"from_node":"243.0.0.13","to_node":"127.0.0.20"},{"from_node":"127.0.0.10","to_node":"127.0.0.11"},{"from_node":"127.0.0.10","to_node":"243.0.0.14"},{"from_node":"243.0.0.14","to_node":"127.0.0.20"}],"elements":[{"uid":"127.0.0.11","metadata":{"location":{"latitude":0,"longitude":0,"region":"XPONDER-1"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.10","metadata":{"location":{"latitude":0,"longitude":0,"region":"OpenROADM-1"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20}},{"uid":"127.0.0.51","metadata":{"location":{"latitude":0,"longitude":0,"region":"XPONDER-5"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.50","metadata":{"location":{"latitude":0,"longitude":0,"region":"OpenROADM-5"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20}},{"uid":"127.0.0.31","metadata":{"location":{"latitude":0,"longitude":0,"region":"XPONDER-3"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.30","metadata":{"location":{"latitude":0,"longitude":0,"region":"OpenROADM-3"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20}},{"uid":"127.0.0.21","metadata":{"location":{"latitude":0,"longitude":0,"region":"XPONDER-2"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.40","metadata":{"location":{"latitude":0,"longitude":0,"region":"OpenROADM-4"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20}},{"uid":"127.0.0.20","metadata":{"location":{"latitude":0,"longitude":0,"region":"OpenROADM-2"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20}},{"uid":"127.0.0.41","metadata":{"location":{"latitude":0,"longitude":0,"region":"XPONDER-4"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"243.0.0.12","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.29}},{"uid":"243.0.0.11","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":60,"con_out":0,"loss_coef":0.12}},{"uid":"243.0.0.10","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":60,"con_out":0,"loss_coef":0.12}},{"uid":"243.0.0.14","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.29}},{"uid":"243.0.0.13","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":140,"con_out":0,"loss_coef":0.2127659574468085124099303584443987347185611724853515625}},{"uid":"243.0.0.8","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.11999999999999999555910790149937383830547332763671875}},{"uid":"243.0.0.9","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.29}},{"uid":"243.0.0.4","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.29}},{"uid":"243.0.0.5","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":60,"con_out":0,"loss_coef":0.12}},{"uid":"243.0.0.6","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":140,"con_out":0,"loss_coef":0.2127659574468085124099303584443987347185611724853515625}},{"uid":"243.0.0.7","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.29}},{"uid":"243.0.0.1","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.11999999999999999555910790149937383830547332763671875}},{"uid":"243.0.0.2","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.29}},{"uid":"243.0.0.3","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":60,"con_out":0,"loss_coef":0.12}}]},"service":{"path-request":[{"request-id":"2","bidirectional":false,"dst-tp-id":"ZHN0VHBJZA\u003d\u003d","src-tp-id":"c3JjVHBJZA\u003d\u003d","path-constraints":{"te-bandwidth":{"spacing":50000000000,"trx_mode":"W100G","trx_type":"openroadm-beta1","effective-freq-slot":[{"N":0,"M":4}],"path_bandwidth":100,"technology":"flexi-grid"}},"source":"127.0.0.11","explicit-route-objects":{"route-object-include-exclude":[{"index":0,"num-unnum-hop":{"hop-type":"STRICT","link-tp-id":"1","node-id":"127.0.0.20"},"explicit-route-usage":"gnpy-path-computation-simplified:route-include-ero"},{"index":1,"num-unnum-hop":{"hop-type":"STRICT","link-tp-id":"1","node-id":"127.0.0.30"},"explicit-route-usage":"gnpy-path-computation-simplified:route-include-ero"}]},"destination":"127.0.0.41"}]}}} \ No newline at end of file +{"gnpy-api:request":{"topology":{"connections":[{"from_node":"127.0.0.51","to_node":"127.0.0.50"},{"from_node":"127.0.0.30","to_node":"127.0.0.31"},{"from_node":"127.0.0.10","to_node":"243.0.0.1"},{"from_node":"243.0.0.1","to_node":"127.0.0.30"},{"from_node":"127.0.0.20","to_node":"127.0.0.21"},{"from_node":"127.0.0.20","to_node":"243.0.0.2"},{"from_node":"243.0.0.2","to_node":"127.0.0.10"},{"from_node":"127.0.0.20","to_node":"243.0.0.3"},{"from_node":"243.0.0.3","to_node":"127.0.0.50"},{"from_node":"127.0.0.40","to_node":"127.0.0.41"},{"from_node":"127.0.0.40","to_node":"243.0.0.4"},{"from_node":"243.0.0.4","to_node":"127.0.0.30"},{"from_node":"127.0.0.50","to_node":"243.0.0.5"},{"from_node":"243.0.0.5","to_node":"127.0.0.30"},{"from_node":"127.0.0.31","to_node":"127.0.0.30"},{"from_node":"127.0.0.50","to_node":"127.0.0.51"},{"from_node":"127.0.0.20","to_node":"243.0.0.6"},{"from_node":"243.0.0.6","to_node":"127.0.0.30"},{"from_node":"127.0.0.30","to_node":"243.0.0.7"},{"from_node":"243.0.0.7","to_node":"127.0.0.40"},{"from_node":"127.0.0.11","to_node":"127.0.0.10"},{"from_node":"127.0.0.30","to_node":"243.0.0.8"},{"from_node":"243.0.0.8","to_node":"127.0.0.10"},{"from_node":"127.0.0.40","to_node":"243.0.0.9"},{"from_node":"243.0.0.9","to_node":"127.0.0.50"},{"from_node":"127.0.0.30","to_node":"243.0.0.10"},{"from_node":"243.0.0.10","to_node":"127.0.0.50"},{"from_node":"127.0.0.50","to_node":"243.0.0.11"},{"from_node":"243.0.0.11","to_node":"127.0.0.20"},{"from_node":"127.0.0.50","to_node":"243.0.0.12"},{"from_node":"243.0.0.12","to_node":"127.0.0.40"},{"from_node":"127.0.0.21","to_node":"127.0.0.20"},{"from_node":"127.0.0.41","to_node":"127.0.0.40"},{"from_node":"127.0.0.30","to_node":"243.0.0.13"},{"from_node":"243.0.0.13","to_node":"127.0.0.20"},{"from_node":"127.0.0.10","to_node":"127.0.0.11"},{"from_node":"127.0.0.10","to_node":"243.0.0.14"},{"from_node":"243.0.0.14","to_node":"127.0.0.20"}],"elements":[{"uid":"127.0.0.11","metadata":{"location":{"latitude":0,"longitude":0,"region":"XPONDER-1"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.10","metadata":{"location":{"latitude":0,"longitude":0,"region":"OpenROADM-1"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20}},{"uid":"127.0.0.51","metadata":{"location":{"latitude":0,"longitude":0,"region":"XPONDER-5"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.50","metadata":{"location":{"latitude":0,"longitude":0,"region":"OpenROADM-5"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20}},{"uid":"127.0.0.31","metadata":{"location":{"latitude":0,"longitude":0,"region":"XPONDER-3"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.30","metadata":{"location":{"latitude":0,"longitude":0,"region":"OpenROADM-3"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20}},{"uid":"127.0.0.21","metadata":{"location":{"latitude":0,"longitude":0,"region":"XPONDER-2"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"127.0.0.40","metadata":{"location":{"latitude":0,"longitude":0,"region":"OpenROADM-4"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20}},{"uid":"127.0.0.20","metadata":{"location":{"latitude":0,"longitude":0,"region":"OpenROADM-2"}},"type":"gnpy-network-topology:Roadm","params":{"target_pch_out_db":-20}},{"uid":"127.0.0.41","metadata":{"location":{"latitude":0,"longitude":0,"region":"XPONDER-4"}},"type":"gnpy-network-topology:Transceiver"},{"uid":"243.0.0.12","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.29}},{"uid":"243.0.0.11","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":60,"con_out":0,"loss_coef":0.12}},{"uid":"243.0.0.10","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":60,"con_out":0,"loss_coef":0.12}},{"uid":"243.0.0.14","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.29}},{"uid":"243.0.0.13","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":140,"con_out":0,"loss_coef":0.2127659574468085124099303584443987347185611724853515625}},{"uid":"243.0.0.8","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.11999999999999999555910790149937383830547332763671875}},{"uid":"243.0.0.9","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.29}},{"uid":"243.0.0.4","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.29}},{"uid":"243.0.0.5","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":60,"con_out":0,"loss_coef":0.12}},{"uid":"243.0.0.6","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":140,"con_out":0,"loss_coef":0.2127659574468085124099303584443987347185611724853515625}},{"uid":"243.0.0.7","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.29}},{"uid":"243.0.0.1","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.11999999999999999555910790149937383830547332763671875}},{"uid":"243.0.0.2","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":100,"con_out":0,"loss_coef":0.29}},{"uid":"243.0.0.3","metadata":{"location":{"latitude":0,"city":"N/A","longitude":0,"region":"N/A"}},"type":"gnpy-network-topology:Fiber","type_variety":"SSMF","params":{"length_units":"gnpy-network-topology:km","att_in":0,"con_in":0,"length":60,"con_out":0,"loss_coef":0.12}}]},"service":{"path-request":[{"request-id":"2","bidirectional":false,"dst-tp-id":"ZHN0VHBJZA\u003d\u003d","src-tp-id":"c3JjVHBJZA\u003d\u003d","path-constraints":{"te-bandwidth":{"spacing":50000000000,"trx_mode":"W100G","trx_type":"openroadm-beta1","effective-freq-slot":[{"N":0,"M":4}],"path_bandwidth":100,"technology":"flexi-grid"}},"source":"127.0.0.11","explicit-route-objects":{"route-object-include-exclude":[{"index":0,"num-unnum-hop":{"hop-type":"STRICT","link-tp-id":"1","node-id":"127.0.0.20"},"explicit-route-usage":"gnpy-path-computation-simplified:route-include-ero"},{"index":1,"num-unnum-hop":{"hop-type":"STRICT","link-tp-id":"1","node-id":"127.0.0.30"},"explicit-route-usage":"gnpy-path-computation-simplified:route-include-ero"}]},"destination":"127.0.0.41"}]}}} \ No newline at end of file diff --git a/nbinotifications/src/test/resources/event_alarm_service.json b/nbinotifications/src/test/resources/event_alarm_service.json index 7dfe5da93..83ee959c3 100755 --- a/nbinotifications/src/test/resources/event_alarm_service.json +++ b/nbinotifications/src/test/resources/event_alarm_service.json @@ -1,5 +1,5 @@ { - "notification-alarm-service": { + "nbi-notifications:notification-alarm-service": { "service-name": "service1", "operational-state": "inService", "message": "The service is now inService", diff --git a/nbinotifications/src/test/resources/expected_event.json b/nbinotifications/src/test/resources/expected_event.json index 25a6b851d..5a0199c16 100644 --- a/nbinotifications/src/test/resources/expected_event.json +++ b/nbinotifications/src/test/resources/expected_event.json @@ -1,5 +1,5 @@ { - "notification-process-service":{ + "nbi-notifications:notification-process-service":{ "common-id":"commond-id", "message":"message", "operational-state":"inService", diff --git a/nbinotifications/src/test/resources/expected_event_alarm_service.json b/nbinotifications/src/test/resources/expected_event_alarm_service.json index b194ee19f..68480455f 100755 --- a/nbinotifications/src/test/resources/expected_event_alarm_service.json +++ b/nbinotifications/src/test/resources/expected_event_alarm_service.json @@ -1,5 +1,5 @@ { - "notification-alarm-service": { + "nbi-notifications:notification-alarm-service": { "message": "The service is now inService", "operational-state": "inService", "service-name": "service1", diff --git a/test-common/src/main/java/org/opendaylight/transportpce/test/converter/AbstractDataObjectConverter.java b/test-common/src/main/java/org/opendaylight/transportpce/test/converter/AbstractDataObjectConverter.java index 83de9e9e8..9601b7945 100644 --- a/test-common/src/main/java/org/opendaylight/transportpce/test/converter/AbstractDataObjectConverter.java +++ b/test-common/src/main/java/org/opendaylight/transportpce/test/converter/AbstractDataObjectConverter.java @@ -7,8 +7,6 @@ */ package org.opendaylight.transportpce.test.converter; -import java.util.ArrayList; -import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Optional; @@ -24,7 +22,6 @@ 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.NormalizedNodes; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -100,19 +97,16 @@ public abstract class AbstractDataObjectConverter implements DataObjectConverter @Override @SuppressWarnings("unchecked") - public Optional getDataObjectFromRpc( - @Nonnull NormalizedNode normalizedNode, - @Nonnull SchemaPath rpcSchemaPath) { + public Optional getDataObjectFromRpc(@Nonnull NormalizedNode normalizedNode) { if (! (normalizedNode instanceof ContainerNode)) { LOG.error("converting normalized node is not ContainerNode. It's actual type is {}", normalizedNode.getClass().getSimpleName()); return Optional.empty(); } - List qnameList = new ArrayList<>(); - rpcSchemaPath.getPathFromRoot().forEach(qnameList::add); - T rpcDataObject = (T) codecRegistry - .fromNormalizedNodeRpcData(Absolute.of(qnameList), (ContainerNode) normalizedNode); + T rpcDataObject = (T) codecRegistry.fromNormalizedNodeRpcData( + Absolute.of(QName.create(schemaContext.getClass().getSimpleName())), + (ContainerNode) normalizedNode); return Optional.ofNullable(rpcDataObject); } diff --git a/test-common/src/main/java/org/opendaylight/transportpce/test/converter/DataObjectConverter.java b/test-common/src/main/java/org/opendaylight/transportpce/test/converter/DataObjectConverter.java index e45866ad5..94f619355 100644 --- a/test-common/src/main/java/org/opendaylight/transportpce/test/converter/DataObjectConverter.java +++ b/test-common/src/main/java/org/opendaylight/transportpce/test/converter/DataObjectConverter.java @@ -18,7 +18,6 @@ import org.opendaylight.yangtools.yang.binding.Notification; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.model.api.SchemaNode; -import org.opendaylight.yangtools.yang.model.api.SchemaPath; public interface DataObjectConverter { @@ -27,8 +26,7 @@ public interface DataObjectConverter { @Nonnull QName rootNode); Optional getDataObjectFromRpc( - @Nonnull NormalizedNode normalizedNode, - @Nonnull SchemaPath rpcSchemaPath); + @Nonnull NormalizedNode normalizedNode); Optional transformIntoNormalizedNode( @Nonnull InputStream inputStream); diff --git a/test-common/src/main/java/org/opendaylight/transportpce/test/converter/JSONDataObjectConverter.java b/test-common/src/main/java/org/opendaylight/transportpce/test/converter/JSONDataObjectConverter.java index 1e33514fa..aaf32eef0 100644 --- a/test-common/src/main/java/org/opendaylight/transportpce/test/converter/JSONDataObjectConverter.java +++ b/test-common/src/main/java/org/opendaylight/transportpce/test/converter/JSONDataObjectConverter.java @@ -32,8 +32,9 @@ import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream; 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.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.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -102,10 +103,9 @@ public final class JSONDataObjectConverter extends AbstractDataObjectConverter { JsonWriter jsonWriter = new JsonWriter(writer); JSONCodecFactory jsonCodecFactory = JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.createLazy(getSchemaContext()); - NormalizedNodeStreamWriter create = - JSONNormalizedNodeStreamWriter.createExclusiveWriter(jsonCodecFactory, - (SchemaPath)null, null, jsonWriter); - + EffectiveStatementInference rootNode = SchemaInferenceStack.of(getSchemaContext()).toInference(); + NormalizedNodeStreamWriter create = JSONNormalizedNodeStreamWriter.createExclusiveWriter( + jsonCodecFactory, rootNode, EffectiveModelContext.NAME.getNamespace(), jsonWriter); try (NormalizedNodeWriter normalizedNodeWriter = NormalizedNodeWriter.forStreamWriter(create);) { normalizedNodeWriter .write(convertType.toNormalizedNodes(dataObjectClass.cast(object), dataObjectClass).get()); diff --git a/test-common/src/main/java/org/opendaylight/transportpce/test/converter/XMLDataObjectConverter.java b/test-common/src/main/java/org/opendaylight/transportpce/test/converter/XMLDataObjectConverter.java index 7583e21ba..b973ca758 100644 --- a/test-common/src/main/java/org/opendaylight/transportpce/test/converter/XMLDataObjectConverter.java +++ b/test-common/src/main/java/org/opendaylight/transportpce/test/converter/XMLDataObjectConverter.java @@ -37,8 +37,8 @@ import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult; 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; @@ -95,8 +95,7 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter { * @return {@link Optional} instance of {@link NormalizedNode}. */ @Override - public Optional transformIntoNormalizedNode( - @Nonnull InputStream inputStream) { + public Optional transformIntoNormalizedNode(@Nonnull InputStream inputStream) { try { XMLStreamReader reader = this.xmlInputFactory.createXMLStreamReader(inputStream); return parseInputXML(reader); @@ -106,26 +105,29 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter { } } - public Optional transformIntoNormalizedNode( - @Nonnull Reader inputReader, SchemaNode parentSchema) { + @Override + public Optional 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 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 transformIntoNormalizedNode( - @Nonnull Reader inputReader) { + public Optional transformInschemaContexttoNormalizedNode(@Nonnull Reader inputReader) { try { XMLStreamReader reader = this.xmlInputFactory.createXMLStreamReader(inputReader); return parseInputXML(reader); @@ -140,10 +142,7 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter { ConvertType 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()); @@ -172,11 +171,17 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter { @Override public Writer writerFromDataObject(@Nonnull DataObject object, Class dataObjectClass, ConvertType convertType) { + Writer writer = new StringWriter(); + Optional 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.get()); normalizedNodeWriter.flush(); } catch (IOException ioe) { throw new IllegalStateException(ioe); @@ -184,20 +189,16 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter { return writer; } - private Optional parseInputXML( - XMLStreamReader reader) { + private Optional parseInputXML(XMLStreamReader reader) { return parseInputXML(reader, getSchemaContext()); } private Optional parseInputXML(XMLStreamReader reader, SchemaNode parentSchemaNode) { NormalizedNodeResult result = new NormalizedNodeResult(); - EffectiveStatementInference schema = SchemaInferenceStack.ofSchemaPath(getSchemaContext(), - parentSchemaNode.getPath()).toInference(); + EffectiveStatementInference schema = SchemaInferenceStack.of(getSchemaContext()).toInference(); try (NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result); - XmlParserStream xmlParser = XmlParserStream + XmlParserStream xmlParser = XmlParserStream .create(streamWriter, schema)) { -// XmlParserStream xmlParser = XmlParserStream -// .create(streamWriter, XmlCodecFactory.create(getSchemaContext()), parentSchemaNode)) { xmlParser.parse(reader); } catch (XMLStreamException | URISyntaxException | IOException | SAXException e) { LOG.warn("An error occured during parsing XML input stream", e); @@ -206,29 +207,17 @@ public final class XMLDataObjectConverter extends AbstractDataObjectConverter { return Optional.ofNullable(result.getResult()); } - 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); } diff --git a/tox.ini b/tox.ini index 76c6b76cc..6d0867e1c 100644 --- a/tox.ini +++ b/tox.ini @@ -64,7 +64,7 @@ deps = -r{toxinidir}/tests/requirements.txt -r{toxinidir}/tests/test-requirements.txt setuptools>=7.0 - gnpy4tpce==2.4.2 + gnpy4tpce==2.4.3 whitelist_externals = launch_tests.sh passenv = LAUNCHER USE_LIGHTY USE_ODL_RESTCONF_VERSION basepython = python3.8 -- 2.36.6