This is an automated email from the ASF dual-hosted git repository. cdutz pushed a commit to branch feat/extended-metadata in repository https://gitbox.apache.org/repos/asf/plc4x.git
commit 6a7121b54e72a1b5d1831534c6c1292e76d77754 Author: Christofer Dutz <[email protected]> AuthorDate: Fri Feb 20 12:46:41 2026 +0100 chore: Removed no longer needed if statement as the root cause was elsewhere. --- RELEASE_NOTES | 6 +++ .../java/api/metadata/PlcConnectionMetadata.java | 24 ++++++++++ .../readwrite/connection/CtrlXConnection.java | 20 ++++++++ .../org/apache/plc4x/java/eip/base/EIPDriver.java | 1 + .../plc4x/java/mock/connection/MockConnection.java | 20 ++++++++ .../readwrite/protocol/S7HGeneratedDriverBase.java | 2 +- .../s7/readwrite/protocol/S7HPlcConnection.java | 20 +++----- .../simulated/connection/SimulatedConnection.java | 3 +- .../java/spi/connection/AbstractPlcConnection.java | 54 +++++++++++++++++++--- .../spi/connection/DefaultNettyPlcConnection.java | 8 +++- .../java/spi/connection/GeneratedDriverBase.java | 1 + .../java/spi/connection/PlcConnectionFactory.java | 2 + .../java/opm/PlcEntityManagerComplexTest.java | 20 ++++++++ 13 files changed, 156 insertions(+), 25 deletions(-) diff --git a/RELEASE_NOTES b/RELEASE_NOTES index 73c3ffadbc..e8e5b6d35b 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -29,6 +29,12 @@ Incompatible changes PlcConnectionStateChangedEvent events which have many more state change options beyond a simple connected and disconnected event. +- PlcConnectionMetadata interface was extended to expose additional + information about the connection itself. + - protocol code + - protocol name + - transport code + - transport name Bug Fixes --------- diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/metadata/PlcConnectionMetadata.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/metadata/PlcConnectionMetadata.java index c4d6b6d5bf..f1bba4544b 100644 --- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/metadata/PlcConnectionMetadata.java +++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/metadata/PlcConnectionMetadata.java @@ -24,6 +24,30 @@ package org.apache.plc4x.java.api.metadata; */ public interface PlcConnectionMetadata { + /** + * Returns the protocol code of the driver used to create this connection. + * @return protocol code + */ + String getProtocolCode(); + + /** + * Returns the human-readable name of the protocol of the driver used to create this connection. + * @return protocol name + */ + String getProtocolName(); + + /** + * Returns the code of the transport used to create this connection. + * @return transport code + */ + String getTransportCode(); + + /** + * Returns the human-readable name of the transport used to create this connection. + * @return transport name + */ + String getTransportName(); + /** * Indicates that the connection supports reading. */ diff --git a/plc4j/drivers/ctrlx/src/main/java/org/apache/plc4x/java/ctrlx/readwrite/connection/CtrlXConnection.java b/plc4j/drivers/ctrlx/src/main/java/org/apache/plc4x/java/ctrlx/readwrite/connection/CtrlXConnection.java index c4affe182b..888e43d380 100644 --- a/plc4j/drivers/ctrlx/src/main/java/org/apache/plc4x/java/ctrlx/readwrite/connection/CtrlXConnection.java +++ b/plc4j/drivers/ctrlx/src/main/java/org/apache/plc4x/java/ctrlx/readwrite/connection/CtrlXConnection.java @@ -128,6 +128,26 @@ public class CtrlXConnection implements PlcConnection, PlcPinger, PlcBrowser { @Override public PlcConnectionMetadata getMetadata() { return new PlcConnectionMetadata() { + @Override + public String getProtocolCode() { + return "ctrlx"; + } + + @Override + public String getProtocolName() { + return ""; + } + + @Override + public String getTransportCode() { + return "tcp"; + } + + @Override + public String getTransportName() { + return ""; + } + @Override public boolean isReadSupported() { return true; diff --git a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/base/EIPDriver.java b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/base/EIPDriver.java index 02f4be1d48..bc7f564ac0 100644 --- a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/base/EIPDriver.java +++ b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/base/EIPDriver.java @@ -208,6 +208,7 @@ public class EIPDriver extends GeneratedDriverBase<EipPacket> { } return new DefaultNettyPlcConnection( + getProtocolCode(), getProtocolName(), transport.getTransportCode(), transport.getTransportName(), canPing(), canRead(), canWrite(), canSubscribe(), canBrowse(), getValueHandler(), configuration, diff --git a/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/connection/MockConnection.java b/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/connection/MockConnection.java index b3c4d3a371..469b38e565 100644 --- a/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/connection/MockConnection.java +++ b/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/connection/MockConnection.java @@ -106,6 +106,26 @@ public class MockConnection implements PlcConnection, PlcReader, PlcWriter, PlcS @Override public PlcConnectionMetadata getMetadata() { return new PlcConnectionMetadata() { + @Override + public String getProtocolCode() { + return "mock"; + } + + @Override + public String getProtocolName() { + return "mock"; + } + + @Override + public String getTransportCode() { + return "test"; + } + + @Override + public String getTransportName() { + return "test"; + } + @Override public boolean isReadSupported() { return true; diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7HGeneratedDriverBase.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7HGeneratedDriverBase.java index f721e664fd..c501c8f21d 100644 --- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7HGeneratedDriverBase.java +++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7HGeneratedDriverBase.java @@ -158,7 +158,7 @@ public class S7HGeneratedDriverBase extends GeneratedDriverBase<TPKTPacket> { awaitDiscoverComplete = Boolean.parseBoolean(System.getProperty(PROPERTY_PLC4X_FORCE_AWAIT_DISCOVER_COMPLETE)); } - return new S7HPlcConnection( + return new S7HPlcConnection(getProtocolCode(), getProtocolName(), transport.getTransportCode(), transport.getTransportName(), canPing(), canRead(), canWrite(), canSubscribe(), canBrowse(), getValueHandler(), diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7HPlcConnection.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7HPlcConnection.java index dbf749b4f8..f138391a3f 100644 --- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7HPlcConnection.java +++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/protocol/S7HPlcConnection.java @@ -20,16 +20,10 @@ package org.apache.plc4x.java.s7.readwrite.protocol; import io.netty.buffer.ByteBuf; import io.netty.channel.Channel; -import io.netty.channel.ChannelHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import io.netty.channel.ChannelInitializer; -import io.netty.channel.ChannelPipeline; import io.netty.channel.embedded.EmbeddedChannel; import io.netty.handler.codec.MessageToMessageCodec; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; -import java.util.List; import org.apache.commons.lang3.concurrent.BasicThreadFactory; import org.apache.plc4x.java.api.authentication.PlcAuthentication; import org.apache.plc4x.java.s7.readwrite.ControllerType; @@ -44,7 +38,6 @@ import org.apache.plc4x.java.s7.readwrite.TPKTPacket; import org.apache.plc4x.java.spi.configuration.ConfigurationFactory; import org.apache.plc4x.java.spi.connection.ChannelFactory; import org.apache.plc4x.java.spi.connection.DefaultNettyPlcConnection; -import org.apache.plc4x.java.spi.connection.PlcTagHandler; import org.apache.plc4x.java.spi.connection.ProtocolStackConfigurer; import org.apache.plc4x.java.spi.events.CloseConnectionEvent; import org.apache.plc4x.java.spi.events.ConnectedEvent; @@ -55,15 +48,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.concurrent.*; -import java.util.stream.Stream; import org.apache.plc4x.java.api.exceptions.PlcUnsupportedOperationException; -import org.apache.plc4x.java.api.listener.ConnectionStateListener; import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest; import org.apache.plc4x.java.s7.readwrite.utils.S7PlcSubscriptionRequest; -import org.apache.plc4x.java.spi.events.ConnectEvent; -import org.apache.plc4x.java.spi.events.DisconnectedEvent; -import org.apache.plc4x.java.spi.events.DiscoverEvent; -import org.apache.plc4x.java.spi.events.DiscoveredEvent; /** * This object generates the main connection and includes the management @@ -100,6 +87,10 @@ public class S7HPlcConnection extends DefaultNettyPlcConnection implements Runna protected int retrysPing = 0; public S7HPlcConnection( + String protocolCode, + String protocolName, + String transportCode, + String transportName, boolean canPing, boolean canRead, boolean canWrite, @@ -116,7 +107,8 @@ public class S7HPlcConnection extends DefaultNettyPlcConnection implements Runna ProtocolStackConfigurer<TPKTPacket> stackConfigurer, BaseOptimizer optimizer, PlcAuthentication authentication) { - super(canPing, + super(protocolCode, protocolName, transportCode, transportName, + canPing, canRead, canWrite, canSubscribe, diff --git a/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedConnection.java b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedConnection.java index 92b320def8..f2d39a17a0 100644 --- a/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedConnection.java +++ b/plc4j/drivers/simulated/src/main/java/org/apache/plc4x/java/simulated/connection/SimulatedConnection.java @@ -68,7 +68,8 @@ public class SimulatedConnection extends AbstractPlcConnection implements PlcRea private final Map<Integer, Consumer<PlcSubscriptionEvent>> consumerIdMap = new ConcurrentHashMap<>(); public SimulatedConnection(SimulatedDevice device) { - super(true, true, true, true, false, + super("simulated", "Simulated PLC4X Datasource", "test", "Test", + true, true, true, true, false, new DefaultPlcValueHandler(), new SimulatedTagHandler(), null, null); this.device = device; } diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/AbstractPlcConnection.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/AbstractPlcConnection.java index 8674e6489f..9ca4be9d28 100644 --- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/AbstractPlcConnection.java +++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/AbstractPlcConnection.java @@ -62,21 +62,33 @@ public abstract class AbstractPlcConnection implements PlcConnection, PlcConnect protected static final Logger logger = LoggerFactory.getLogger(AbstractPlcConnection.class); - private boolean canPing = false; - private boolean canRead = false; - private boolean canWrite = false; - private boolean canSubscribe = false; - private boolean canBrowse = false; + private final String protocolCode; + private final String protocolName; + private final String transportCode; + private final String transportName; + private final boolean canPing; + private final boolean canRead; + private final boolean canWrite; + private final boolean canSubscribe; + private final boolean canBrowse; private final PlcValueHandler valueHandler; private final BaseOptimizer optimizer; private final PlcAuthentication authentication; private Plc4xProtocolBase<? extends Message> protocol; private PlcTagHandler tagHandler; - protected AbstractPlcConnection(boolean canPing, boolean canRead, boolean canWrite, + protected AbstractPlcConnection(String protocolCode, + String protocolName, + String transportCode, + String transportName, + boolean canPing, boolean canRead, boolean canWrite, boolean canSubscribe, boolean canBrowse, PlcValueHandler valueHandler, BaseOptimizer optimizer, PlcAuthentication authentication) { + this.protocolCode = protocolCode; + this.protocolName = protocolName; + this.transportCode = transportCode; + this.transportName = transportName; this.canPing = canPing; this.canRead = canRead; this.canWrite = canWrite; @@ -87,11 +99,19 @@ public abstract class AbstractPlcConnection implements PlcConnection, PlcConnect this.authentication = authentication; } - protected AbstractPlcConnection(boolean canPing, boolean canRead, boolean canWrite, + protected AbstractPlcConnection(String protocolCode, + String protocolName, + String transportCode, + String transportName, + boolean canPing, boolean canRead, boolean canWrite, boolean canSubscribe, boolean canBrowse, PlcValueHandler valueHandler, PlcTagHandler tagHandler, BaseOptimizer optimizer, PlcAuthentication authentication) { + this.protocolCode = protocolCode; + this.protocolName = protocolName; + this.transportCode = transportCode; + this.transportName = transportName; this.canPing = canPing; this.canRead = canRead; this.canWrite = canWrite; @@ -358,6 +378,26 @@ public abstract class AbstractPlcConnection implements PlcConnection, PlcConnect return Optional.of(plcValue); } + @Override + public String getProtocolCode() { + return protocolCode; + } + + @Override + public String getProtocolName() { + return protocolName; + } + + @Override + public String getTransportCode() { + return transportCode; + } + + @Override + public String getTransportName() { + return transportName; + } + protected PlcReadRequest getFilteredReadRequest(DefaultPlcReadRequest readRequest) { LinkedHashMap<String, PlcTagItem<PlcTag>> filteredTags = new LinkedHashMap<>(); for (String tagName : readRequest.getTagNames()) { diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java index 8cc242d688..39d1196fb4 100644 --- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java +++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/DefaultNettyPlcConnection.java @@ -63,7 +63,11 @@ public class DefaultNettyPlcConnection extends AbstractPlcConnection implements protected Channel channel; protected boolean connected; - public DefaultNettyPlcConnection(boolean canPing, + public DefaultNettyPlcConnection(String protocolCode, + String protocolName, + String transportCode, + String transportName, + boolean canPing, boolean canRead, boolean canWrite, boolean canSubscribe, @@ -78,7 +82,7 @@ public class DefaultNettyPlcConnection extends AbstractPlcConnection implements ProtocolStackConfigurer<?> stackConfigurer, BaseOptimizer optimizer, PlcAuthentication authentication) { - super(canPing, canRead, canWrite, canSubscribe, canBrowse, valueHandler, optimizer, authentication); + super(protocolCode, protocolName, transportCode, transportName, canPing, canRead, canWrite, canSubscribe, canBrowse, valueHandler, optimizer, authentication); this.configuration = configuration; this.channelFactory = channelFactory; this.fireDiscoverEvent = fireDiscoverEvent; diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/GeneratedDriverBase.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/GeneratedDriverBase.java index 959b73de16..03012e717d 100644 --- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/GeneratedDriverBase.java +++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/connection/GeneratedDriverBase.java @@ -400,6 +400,7 @@ public abstract class GeneratedDriverBase<BASE_PACKET extends Message> implement } return new DefaultNettyPlcConnection( + protocolCode, getProtocolName(), transport.getTransportCode(), transport.getTransportName(), canPing(), canRead(), canWrite(), canSubscribe(), canBrowse(), getValueHandler(), configuration, diff --git a/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/connection/PlcConnectionFactory.java b/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/connection/PlcConnectionFactory.java index ff65f43479..53bea5e05d 100644 --- a/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/connection/PlcConnectionFactory.java +++ b/plc4j/spi/src/test/java/org/apache/plc4x/java/spi/connection/PlcConnectionFactory.java @@ -40,6 +40,8 @@ public class PlcConnectionFactory { <T extends Message> DefaultNettyPlcConnection create(ChannelFactory channelFactory, ProtocolStackConfigurer<T> stackConfigurer) { return new DefaultNettyPlcConnection( + // This only seems to be called from tests. + "", "", "", "", true, true, true, true, true, null, null, channelFactory, fireDiscovery, // force discovery diff --git a/plc4j/tools/opm/src/test/java/org/apache/plc4x/java/opm/PlcEntityManagerComplexTest.java b/plc4j/tools/opm/src/test/java/org/apache/plc4x/java/opm/PlcEntityManagerComplexTest.java index 1548efb18a..e800ce9e96 100644 --- a/plc4j/tools/opm/src/test/java/org/apache/plc4x/java/opm/PlcEntityManagerComplexTest.java +++ b/plc4j/tools/opm/src/test/java/org/apache/plc4x/java/opm/PlcEntityManagerComplexTest.java @@ -206,6 +206,26 @@ public class PlcEntityManagerComplexTest implements WithAssertions { when(mock.getConnection(ArgumentMatchers.anyString())).thenReturn(connection); when(connection.getMetadata()).thenReturn(new PlcConnectionMetadata() { + @Override + public String getProtocolCode() { + return ""; + } + + @Override + public String getProtocolName() { + return ""; + } + + @Override + public String getTransportCode() { + return ""; + } + + @Override + public String getTransportName() { + return ""; + } + @Override public boolean isReadSupported() { return true;
