From: Robert Varga Date: Fri, 11 Nov 2022 23:15:20 +0000 (+0100) Subject: Specialize MessageTransformer to NetconfMessage X-Git-Tag: v5.0.0~102 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=77b39a857a710bf06cd977f9b7779202bb9b732f;p=netconf.git Specialize MessageTransformer to NetconfMessage There is no use pretending we handle anything but NetconfMessage. JIRA: NETCONF-912 Change-Id: I54127020da62f0b3c4d00be0b3a72a08db4aa916 Signed-off-by: Robert Varga --- diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/DeviceActionFactory.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/DeviceActionFactory.java index 463b18927b..c1b24a69f6 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/DeviceActionFactory.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/DeviceActionFactory.java @@ -8,7 +8,6 @@ package org.opendaylight.netconf.sal.connect.api; import org.opendaylight.mdsal.dom.api.DOMActionService; -import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.yangtools.yang.model.api.SchemaContext; public interface DeviceActionFactory { @@ -20,7 +19,7 @@ public interface DeviceActionFactory { * @param schemaContext - schema context of device * @return {@link DOMActionService} of specific device */ - default DOMActionService createDeviceAction(final MessageTransformer messageTransformer, + default DOMActionService createDeviceAction(final MessageTransformer messageTransformer, final RemoteDeviceCommunicator listener, final SchemaContext schemaContext) { return null; } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/MessageTransformer.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/MessageTransformer.java index 6074b8fe2e..c387e2d80c 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/MessageTransformer.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/api/MessageTransformer.java @@ -11,17 +11,18 @@ import org.opendaylight.mdsal.dom.api.DOMActionResult; import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier; import org.opendaylight.mdsal.dom.api.DOMNotification; import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; -public interface MessageTransformer { +public interface MessageTransformer { - DOMNotification toNotification(M message); + DOMNotification toNotification(NetconfMessage message); - M toRpcRequest(QName rpc, NormalizedNode node); + NetconfMessage toRpcRequest(QName rpc, NormalizedNode node); - DOMRpcResult toRpcResult(M message, QName rpc); + DOMRpcResult toRpcResult(NetconfMessage message, QName rpc); /** * Parse action into message for request. @@ -31,7 +32,7 @@ public interface MessageTransformer { * @param payload - input of action * @return message */ - default M toActionRequest(final Absolute action, final DOMDataTreeIdentifier domDataTreeIdentifier, + default NetconfMessage toActionRequest(final Absolute action, final DOMDataTreeIdentifier domDataTreeIdentifier, final NormalizedNode payload) { throw new UnsupportedOperationException(); } @@ -43,7 +44,7 @@ public interface MessageTransformer { * @param message - message to parsing * @return {@link DOMActionResult} */ - default DOMActionResult toActionResult(final Absolute action, final M message) { + default DOMActionResult toActionResult(final Absolute action, final NetconfMessage message) { throw new UnsupportedOperationException(); } } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceActionFactoryImpl.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceActionFactoryImpl.java index 76d755fcd9..9cfb27920b 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceActionFactoryImpl.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/DeviceActionFactoryImpl.java @@ -36,7 +36,7 @@ public class DeviceActionFactoryImpl implements DeviceActionFactory { private static final Logger LOG = LoggerFactory.getLogger(DeviceActionFactoryImpl.class); @Override - public DOMActionService createDeviceAction(final MessageTransformer messageTransformer, + public DOMActionService createDeviceAction(final MessageTransformer messageTransformer, final RemoteDeviceCommunicator listener, final SchemaContext schemaContext) { return (schemaPath, dataTreeIdentifier, input) -> { requireNonNull(schemaPath); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java index 6e05e89a56..20fe41c348 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDevice.java @@ -115,7 +115,7 @@ public class NetconfDevice implements RemoteDevice messageTransformer; + private MessageTransformer messageTransformer; public NetconfDevice(final SchemaResourcesDTO schemaResourcesDTO, final BaseNetconfSchemas baseSchemas, final RemoteDeviceId id, final RemoteDeviceHandler salFacade, @@ -277,7 +277,7 @@ public class NetconfDevice implements RemoteDevice transformer) { + private synchronized void updateTransformer(final MessageTransformer transformer) { messageTransformer = transformer; } diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NotificationHandler.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NotificationHandler.java index ce63849aff..8c40dc4159 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NotificationHandler.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/NotificationHandler.java @@ -27,16 +27,16 @@ import org.slf4j.LoggerFactory; * Handles incoming notifications. Either caches them(until onRemoteSchemaUp is called) or passes to sal Facade. */ final class NotificationHandler { - private static final Logger LOG = LoggerFactory.getLogger(NotificationHandler.class); private final RemoteDeviceHandler salFacade; + // FIXME: better implementation? private final List queue = new LinkedList<>(); private final RemoteDeviceId id; - private boolean passNotifications = false; + private boolean passNotifications = false; private NotificationFilter filter; - private MessageTransformer messageTransformer; + private MessageTransformer messageTransformer; NotificationHandler(final RemoteDeviceHandler salFacade, final RemoteDeviceId id) { this.salFacade = requireNonNull(salFacade); @@ -55,8 +55,8 @@ final class NotificationHandler { * Forward all cached notifications and pass all notifications from this point directly to sal facade. * @param transformer Message transformer */ - synchronized void onRemoteSchemaUp(final MessageTransformer transformer) { - this.messageTransformer = requireNonNull(transformer); + synchronized void onRemoteSchemaUp(final MessageTransformer transformer) { + messageTransformer = requireNonNull(transformer); passNotifications = true; @@ -92,7 +92,7 @@ final class NotificationHandler { } synchronized void addNotificationFilter(final NotificationFilter newFilter) { - this.filter = newFilter; + filter = newFilter; } synchronized void onRemoteSchemaDown() { diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpc.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpc.java index f0f01ec910..3284b67e69 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpc.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpc.java @@ -37,11 +37,11 @@ import org.opendaylight.yangtools.yang.model.api.SchemaContext; */ public final class NetconfDeviceRpc implements DOMRpcService { private final RemoteDeviceCommunicator communicator; - private final MessageTransformer transformer; + private final MessageTransformer transformer; private final SchemaContext schemaContext; public NetconfDeviceRpc(final SchemaContext schemaContext, final RemoteDeviceCommunicator communicator, - final MessageTransformer transformer) { + final MessageTransformer transformer) { this.communicator = communicator; this.transformer = transformer; this.schemaContext = requireNonNull(schemaContext); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpc.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpc.java index af6bd7515a..8a067b4db0 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpc.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/SchemalessNetconfDeviceRpc.java @@ -52,7 +52,7 @@ public final class SchemalessNetconfDeviceRpc implements DOMRpcService { @Override public ListenableFuture invokeRpc(final QName type, final NormalizedNode input) { - final MessageTransformer transformer; + final MessageTransformer transformer; if (input instanceof DOMSourceAnyxmlNode) { transformer = schemalessTransformer; } else if (isBaseRpc(type)) { @@ -65,7 +65,7 @@ public final class SchemalessNetconfDeviceRpc implements DOMRpcService { } private ListenableFuture handleRpc(final @NonNull QName type, final @NonNull NormalizedNode input, - final MessageTransformer transformer) { + final MessageTransformer transformer) { final ListenableFuture> delegateFuture = listener.sendRequest( transformer.toRpcRequest(type, input), type); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseRpcSchemalessTransformer.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseRpcSchemalessTransformer.java index 57e0c2a72e..f3a9d010d8 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseRpcSchemalessTransformer.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/BaseRpcSchemalessTransformer.java @@ -36,7 +36,7 @@ import org.w3c.dom.Element; /** * Transforms base netconf RPCs. */ -public class BaseRpcSchemalessTransformer implements MessageTransformer { +public class BaseRpcSchemalessTransformer implements MessageTransformer { private final ImmutableMap mappedRpcs; private final EffectiveModelContext modelContext; private final MessageCounter counter; diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java index 591a940279..779a2cc7c8 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/NetconfMessageTransformer.java @@ -100,7 +100,7 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; -public class NetconfMessageTransformer implements MessageTransformer { +public class NetconfMessageTransformer implements MessageTransformer { private static final Logger LOG = LoggerFactory.getLogger(NetconfMessageTransformer.class); private static final ImmutableSet BASE_OR_NOTIFICATION_NS = ImmutableSet.of( @@ -235,16 +235,14 @@ public class NetconfMessageTransformer implements MessageTransformer schemaBuilder, final InstanceIdentifierBuilder instanceBuilder) { - if (schemaNode instanceof ContainerSchemaNode) { - final var containerSchema = (ContainerSchemaNode) schemaNode; + if (schemaNode instanceof ContainerSchemaNode containerSchema) { instanceBuilder.node(QName.create(xmlNode.getNamespaceURI(), xmlNode.getLocalName())); schemaBuilder.add(containerSchema.getQName()); Entry xmlContainerChildPair = findXmlContainerChildPair(xmlNode, containerSchema); return traverseXmlNodeContainingNotification(xmlContainerChildPair.getKey(), xmlContainerChildPair.getValue(), schemaBuilder, instanceBuilder); - } else if (schemaNode instanceof ListSchemaNode) { - final var listSchema = (ListSchemaNode) schemaNode; + } else if (schemaNode instanceof ListSchemaNode listSchema) { instanceBuilder.node(QName.create(xmlNode.getNamespaceURI(), xmlNode.getLocalName())); schemaBuilder.add(listSchema.getQName()); diff --git a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/SchemalessMessageTransformer.java b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/SchemalessMessageTransformer.java index b26d4c1e7c..58d8437e21 100644 --- a/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/SchemalessMessageTransformer.java +++ b/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/schema/mapping/SchemalessMessageTransformer.java @@ -31,7 +31,7 @@ import org.w3c.dom.Element; /** * Transforms anyxml rpcs for schemaless netconf devices. */ -public class SchemalessMessageTransformer implements MessageTransformer { +public class SchemalessMessageTransformer implements MessageTransformer { // TODO maybe we should move this somewhere else as this // might be used in applications using schemaless mountpoints public static final NodeIdentifier SCHEMALESS_NOTIFICATION_PAYLOAD = diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java index 656b669787..33c2099983 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java @@ -578,8 +578,8 @@ public class NetconfDeviceTest extends AbstractTestModelTest { return MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor()); } - public MessageTransformer getMessageTransformer() throws Exception { - final MessageTransformer messageTransformer = mockClass(MessageTransformer.class); + public MessageTransformer getMessageTransformer() throws Exception { + final MessageTransformer messageTransformer = mockClass(MessageTransformer.class); doReturn(NOTIFICATION).when(messageTransformer).toRpcRequest(any(QName.class), any(NormalizedNode.class)); doReturn(RPC_RESULT).when(messageTransformer).toRpcResult(any(NetconfMessage.class), any(QName.class)); doReturn(COMPOSITE_NODE).when(messageTransformer).toNotification(any(NetconfMessage.class)); diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java index 87de50aac2..e00e2cb18d 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/sal/NetconfDeviceRpcTest.java @@ -98,7 +98,7 @@ public class NetconfDeviceRpcTest extends AbstractBaseSchemasTest { @Test public void testDeadlock() throws Exception { // when rpc is successful, but transformer fails for some reason - final MessageTransformer failingTransformer = mock(MessageTransformer.class); + final MessageTransformer failingTransformer = mock(MessageTransformer.class); final RemoteDeviceCommunicator communicatorMock = mock(RemoteDeviceCommunicator.class); final NetconfMessage msg = null; final RpcResult result = RpcResultBuilder.success(msg).build(); diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOpsTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOpsTest.java index ae7ad4b53f..b522d26701 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOpsTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/util/NetconfBaseOpsTest.java @@ -115,8 +115,8 @@ public class NetconfBaseOpsTest extends AbstractTestModelTest { .thenReturn(RpcResultBuilder.success(ok).buildFuture()); when(listener.sendRequest(any(), eq(NetconfMessageTransformUtil.NETCONF_COMMIT_QNAME))) .thenReturn(RpcResultBuilder.success(ok).buildFuture()); - final MessageTransformer transformer = new NetconfMessageTransformer( - new EmptyMountPointContext(SCHEMA_CONTEXT), true, BASE_SCHEMAS.getBaseSchema()); + final MessageTransformer transformer = new NetconfMessageTransformer(new EmptyMountPointContext(SCHEMA_CONTEXT), + true, BASE_SCHEMAS.getBaseSchema()); final DOMRpcService rpc = new NetconfDeviceRpc(SCHEMA_CONTEXT, listener, transformer); final RemoteDeviceId id = new RemoteDeviceId("device-1", InetSocketAddress.createUnresolved("localhost", 17830));