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;

Reply via email to