You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2018/09/13 09:43:36 UTC

[incubator-plc4x] 03/05: adjusted subscription api to new API requirements

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch feature/api-redesign-chris-c
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit f16b6715002fafe85c521afc86fd7930c448b9d7
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Sep 13 10:59:48 2018 +0200

    adjusted subscription api to new API requirements
---
 .../java/api/messages/PlcSubscriptionRequest.java  |  2 -
 .../java/api/model/PlcSubscriptionHandle.java      |  2 +-
 .../base/connection/AbstractPlcConnection.java     | 25 ++++++-
 .../base/messages/DefaultPlcSubscriptionEvent.java |  6 ++
 .../messages/DefaultPlcSubscriptionRequest.java    | 76 ++++++++++++++++------
 .../messages/DefaultPlcSubscriptionResponse.java   | 28 ++++++--
 .../messages/DefaultPlcUnsubscriptionRequest.java  | 57 +++++++++++++++-
 .../messages/InternalPlcSubscriptionRequest.java   |  2 +
 .../messages/InternalPlcUnsubscriptionRequest.java |  4 ++
 .../base/model/DefaultPlcConsumerRegistration.java | 73 +++++++++++++++++++++
 .../InternalPlcConsumerRegistration.java}          |  9 ++-
 .../InternalPlcSubscriptionHandle.java}            |  8 +--
 12 files changed, 251 insertions(+), 41 deletions(-)

diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcSubscriptionRequest.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcSubscriptionRequest.java
index 77a124c..19cd66e 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcSubscriptionRequest.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcSubscriptionRequest.java
@@ -22,8 +22,6 @@ import java.time.Duration;
 
 public interface PlcSubscriptionRequest extends PlcFieldRequest {
 
-    PlcSubscriptionRequest.Builder builder();
-
     interface Builder extends PlcMessageBuilder<PlcSubscriptionRequest> {
         /**
          * Adds a new field to the to be constructed request which should be polled cyclically.
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcSubscriptionHandle.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcSubscriptionHandle.java
index f2fea40..d295e9e 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcSubscriptionHandle.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/model/PlcSubscriptionHandle.java
@@ -23,7 +23,7 @@ package org.apache.plc4x.java.api.model;
  * different data is used to identify a subscription. This interface is
  * to be implemented in the individual Driver implementations to contain
  * all information needed to pull or unsubscribe any form of subscription.
- *
+ * <p>
  * For every subscribed item, a separate {@link PlcSubscriptionHandle} object is
  * returned in order to allow fine granular unsubscriptions.
  */
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/AbstractPlcConnection.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/AbstractPlcConnection.java
index bb1b11f..7c8ce2c 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/AbstractPlcConnection.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/connection/AbstractPlcConnection.java
@@ -20,10 +20,14 @@ package org.apache.plc4x.java.base.connection;
 
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelHandler;
-import org.apache.plc4x.java.api.connection.*;
+import org.apache.plc4x.java.api.connection.PlcConnection;
+import org.apache.plc4x.java.api.connection.PlcReader;
+import org.apache.plc4x.java.api.connection.PlcSubscriber;
+import org.apache.plc4x.java.api.connection.PlcWriter;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
 import org.apache.plc4x.java.api.exceptions.PlcIoException;
 
+import java.util.Objects;
 import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
@@ -101,7 +105,7 @@ public abstract class AbstractPlcConnection implements PlcConnection {
     }
 
     @Override
-    public Optional<PlcReader>getReader() {
+    public Optional<PlcReader> getReader() {
         if (this instanceof PlcReader) {
             return Optional.of((PlcReader) this);
         }
@@ -124,4 +128,21 @@ public abstract class AbstractPlcConnection implements PlcConnection {
         return Optional.empty();
     }
 
+    /**
+     * Can be used to check and cast a parameter to its required internal type (can be used for general type checking too).
+     *
+     * @param o     the object to be checked against target {@code clazz}.
+     * @param clazz the expected {@code clazz}.
+     * @param <T>   the type of the expected {@code clazz}.
+     * @return the cast type of {@code clazz}.
+     */
+    protected <T> T checkInternal(Object o, Class<T> clazz) {
+        Objects.requireNonNull(o);
+        Objects.requireNonNull(clazz);
+        if (!clazz.isInstance(o)) {
+            throw new IllegalArgumentException("illegal type " + o.getClass() + ". Expected " + clazz);
+        }
+        return clazz.cast(o);
+    }
+
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionEvent.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionEvent.java
index ce5790f..dbfcd4c 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionEvent.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionEvent.java
@@ -26,10 +26,16 @@ import org.apache.plc4x.java.api.types.PlcResponseCode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.util.Calendar;
 import java.util.Collection;
 
 public class DefaultPlcSubscriptionEvent implements InternalPlcSubscriptionEvent {
 
+
+    public DefaultPlcSubscriptionEvent(Calendar timeStamp, byte[] bytes) {
+        // TODO: move to instant
+    }
+
     @Override
     public int getNumberOfValues(String name) {
         return 0;
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionRequest.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionRequest.java
index 2a50cc4..357dd8f 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionRequest.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionRequest.java
@@ -18,12 +18,17 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages;
 
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
 import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.types.PlcSubscriptionType;
+import org.apache.plc4x.java.base.connection.PlcFieldHandler;
+import org.apache.plc4x.java.base.messages.items.FieldItem;
 
 import java.time.Duration;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
+import java.util.*;
+import java.util.function.BiFunction;
 
 public class DefaultPlcSubscriptionRequest implements InternalPlcSubscriptionRequest {
 
@@ -48,28 +53,59 @@ public class DefaultPlcSubscriptionRequest implements InternalPlcSubscriptionReq
     }
 
     @Override
-    public Builder builder() {
-        return new Builder() {
-            @Override
-            public Builder addCyclicField(String name, String fieldQuery, Duration pollingInterval) {
-                return null;
-            }
+    public PlcSubscriptionType getPlcSubscriptionType() {
+        return null;
+    }
 
-            @Override
-            public Builder addChangeOfStateField(String name, String fieldQuery) {
-                return null;
-            }
+    public static class Builder implements PlcSubscriptionRequest.Builder {
 
-            @Override
-            public Builder addEventField(String name, String fieldQuery) {
-                return null;
-            }
+        private final PlcFieldHandler fieldHandler;
+        private final Map<String, BuilderItem<Object>> fields;
+
+        public Builder(PlcFieldHandler fieldHandler) {
+            this.fieldHandler = fieldHandler;
+            fields = new TreeMap<>();
+        }
 
-            @Override
-            public PlcSubscriptionRequest build() {
-                return null;
+        @Override
+        public PlcSubscriptionRequest.Builder addCyclicField(String name, String fieldQuery, Duration pollingInterval) {
+            return null;
+        }
+
+        @Override
+        public PlcSubscriptionRequest.Builder addChangeOfStateField(String name, String fieldQuery) {
+            return null;
+        }
+
+        @Override
+        public PlcSubscriptionRequest.Builder addEventField(String name, String fieldQuery) {
+            return null;
+        }
+
+        @Override
+        public PlcSubscriptionRequest build() {
+            LinkedHashMap<String, Pair<PlcField, FieldItem>> parsedFields = new LinkedHashMap<>();
+            fields.forEach((name, builderItem) -> {
+                // Compile the query string.
+                PlcField parsedField = fieldHandler.createField(builderItem.fieldQuery);
+                // Encode the payload.
+                // TODO: Depending on the field type, handle the FieldItem creation differently.
+                FieldItem fieldItem = builderItem.encoder.apply(parsedField, null);
+                parsedFields.put(name, new ImmutablePair<>(parsedField, fieldItem));
+            });
+            return new DefaultPlcSubscriptionRequest();
+        }
+
+        private static class BuilderItem<T> {
+            private final String fieldQuery;
+            private final BiFunction<PlcField, T[], FieldItem> encoder;
+
+            private BuilderItem(String fieldQuery, BiFunction<PlcField, T[], FieldItem> encoder) {
+                this.fieldQuery = fieldQuery;
+                this.encoder = encoder;
             }
-        };
+        }
+
     }
 
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionResponse.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionResponse.java
index 0993c64..a8924e9 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionResponse.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcSubscriptionResponse.java
@@ -18,43 +18,59 @@
  */
 package org.apache.plc4x.java.base.messages;
 
+import org.apache.commons.lang3.NotImplementedException;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
 import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
 
 import java.util.Collection;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 public class DefaultPlcSubscriptionResponse implements InternalPlcSubscriptionResponse {
 
+    private final InternalPlcSubscriptionRequest request;
+
+    private final Map<String, Pair<PlcResponseCode, PlcSubscriptionHandle>> values;
+
+    public DefaultPlcSubscriptionResponse(InternalPlcSubscriptionRequest request, Map<String, Pair<PlcResponseCode, PlcSubscriptionHandle>> values) {
+        this.request = request;
+        this.values = values;
+    }
+
     @Override
     public PlcSubscriptionHandle getSubscriptionHandle(String name) {
-        return null;
+        // TODO: add safety
+        return values.get(name).getValue();
     }
 
     @Override
     public Collection<String> getFieldNames() {
-        return null;
+        return values.keySet();
     }
 
     @Override
     public PlcField getField(String name) {
-        return null;
+        // TODO: or should subscription handle be a successor of PlcField?
+        throw new NotImplementedException("field access not implemented");
     }
 
     @Override
     public PlcResponseCode getResponseCode(String name) {
-        return null;
+        // TODO: add safety
+        return values.get(name).getKey();
     }
 
     @Override
     public PlcSubscriptionRequest getRequest() {
-        return null;
+        return request;
     }
 
     @Override
     public Collection<PlcSubscriptionHandle> getSubscriptionHandles() {
-        return null;
+        return values.values().stream().map(Pair::getValue).collect(Collectors.toList());
     }
 
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcUnsubscriptionRequest.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcUnsubscriptionRequest.java
index 801a4d1..cfbf1e1 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcUnsubscriptionRequest.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/DefaultPlcUnsubscriptionRequest.java
@@ -18,10 +18,17 @@
  */
 package org.apache.plc4x.java.base.messages;
 
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.plc4x.java.api.messages.PlcUnsubscriptionRequest;
 import org.apache.plc4x.java.api.model.PlcField;
+import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
+import org.apache.plc4x.java.base.connection.PlcFieldHandler;
+import org.apache.plc4x.java.base.messages.items.FieldItem;
+import org.apache.plc4x.java.base.model.InternalPlcSubscriptionHandle;
 
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
+import java.util.*;
+import java.util.function.BiFunction;
 
 public class DefaultPlcUnsubscriptionRequest implements InternalPlcUnsubscriptionRequest {
 
@@ -45,4 +52,50 @@ public class DefaultPlcUnsubscriptionRequest implements InternalPlcUnsubscriptio
         return null;
     }
 
+    @Override
+    public Collection<? extends InternalPlcSubscriptionHandle> getInternalPlcSubscriptionHandles() {
+        return null;
+    }
+
+    public static class Builder implements PlcUnsubscriptionRequest.Builder {
+
+        private final PlcFieldHandler fieldHandler;
+        private final Map<String, BuilderItem<Object>> fields;
+
+        public Builder(PlcFieldHandler fieldHandler) {
+            this.fieldHandler = fieldHandler;
+            fields = new TreeMap<>();
+        }
+
+        @Override
+        public PlcUnsubscriptionRequest.Builder addField(String name, PlcSubscriptionHandle handle) {
+            return null;
+        }
+
+        @Override
+        public PlcUnsubscriptionRequest build() {
+            LinkedHashMap<String, Pair<PlcField, FieldItem>> parsedFields = new LinkedHashMap<>();
+            fields.forEach((name, builderItem) -> {
+                // Compile the query string.
+                PlcField parsedField = fieldHandler.createField(builderItem.fieldQuery);
+                // Encode the payload.
+                // TODO: Depending on the field type, handle the FieldItem creation differently.
+                FieldItem fieldItem = builderItem.encoder.apply(parsedField, null);
+                parsedFields.put(name, new ImmutablePair<>(parsedField, fieldItem));
+            });
+            return new DefaultPlcUnsubscriptionRequest();
+        }
+
+        private static class BuilderItem<T> {
+            private final String fieldQuery;
+            private final BiFunction<PlcField, T[], FieldItem> encoder;
+
+            private BuilderItem(String fieldQuery, BiFunction<PlcField, T[], FieldItem> encoder) {
+                this.fieldQuery = fieldQuery;
+                this.encoder = encoder;
+            }
+        }
+
+    }
+
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/InternalPlcSubscriptionRequest.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/InternalPlcSubscriptionRequest.java
index ec912a3..7cd2167 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/InternalPlcSubscriptionRequest.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/InternalPlcSubscriptionRequest.java
@@ -19,8 +19,10 @@
 package org.apache.plc4x.java.base.messages;
 
 import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
+import org.apache.plc4x.java.api.types.PlcSubscriptionType;
 
 public interface InternalPlcSubscriptionRequest extends PlcSubscriptionRequest {
 
+    PlcSubscriptionType getPlcSubscriptionType();
 
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/InternalPlcUnsubscriptionRequest.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/InternalPlcUnsubscriptionRequest.java
index 3bd3545..18b1ce5 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/InternalPlcUnsubscriptionRequest.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/InternalPlcUnsubscriptionRequest.java
@@ -19,7 +19,11 @@
 package org.apache.plc4x.java.base.messages;
 
 import org.apache.plc4x.java.api.messages.PlcUnsubscriptionRequest;
+import org.apache.plc4x.java.base.model.InternalPlcSubscriptionHandle;
+
+import java.util.Collection;
 
 public interface InternalPlcUnsubscriptionRequest extends PlcUnsubscriptionRequest {
 
+    Collection<? extends InternalPlcSubscriptionHandle> getInternalPlcSubscriptionHandles();
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/model/DefaultPlcConsumerRegistration.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/model/DefaultPlcConsumerRegistration.java
new file mode 100644
index 0000000..28583b3
--- /dev/null
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/model/DefaultPlcConsumerRegistration.java
@@ -0,0 +1,73 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements.  See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership.  The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied.  See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+package org.apache.plc4x.java.base.model;
+
+import org.apache.plc4x.java.api.messages.PlcSubscriptionEvent;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Objects;
+import java.util.function.Consumer;
+
+public class DefaultPlcConsumerRegistration implements InternalPlcConsumerRegistration {
+
+    private final Collection<? extends InternalPlcSubscriptionHandle> handles;
+    private final int consumerHash;
+
+    public DefaultPlcConsumerRegistration(Consumer<PlcSubscriptionEvent> consumer, InternalPlcSubscriptionHandle... handles) {
+        consumerHash = Objects.requireNonNull(consumer).hashCode();
+        this.handles = Arrays.asList(Objects.requireNonNull(handles));
+    }
+
+    @Override
+    public int getConsumerHash() {
+        return consumerHash;
+    }
+
+    @Override
+    public Collection<? extends InternalPlcSubscriptionHandle> getAssociatedHandles() {
+        return handles;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (!(o instanceof DefaultPlcConsumerRegistration)) {
+            return false;
+        }
+        DefaultPlcConsumerRegistration that = (DefaultPlcConsumerRegistration) o;
+        return consumerHash == that.consumerHash &&
+            Objects.equals(handles, that.handles);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(handles, consumerHash);
+    }
+
+    @Override
+    public String toString() {
+        return "DefaultPlcConsumerRegistration{" +
+            "handles=" + handles +
+            ", consumerHash=" + consumerHash +
+            '}';
+    }
+}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/InternalPlcSubscriptionRequest.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/model/InternalPlcConsumerRegistration.java
similarity index 70%
copy from plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/InternalPlcSubscriptionRequest.java
copy to plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/model/InternalPlcConsumerRegistration.java
index ec912a3..bddb889 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/InternalPlcSubscriptionRequest.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/model/InternalPlcConsumerRegistration.java
@@ -16,11 +16,14 @@
  specific language governing permissions and limitations
  under the License.
  */
-package org.apache.plc4x.java.base.messages;
+package org.apache.plc4x.java.base.model;
 
-import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
+import org.apache.plc4x.java.api.model.PlcConsumerRegistration;
 
-public interface InternalPlcSubscriptionRequest extends PlcSubscriptionRequest {
+import java.util.Collection;
 
+public interface InternalPlcConsumerRegistration extends PlcConsumerRegistration {
+    int getConsumerHash();
 
+    Collection<? extends InternalPlcSubscriptionHandle> getAssociatedHandles();
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/InternalPlcSubscriptionRequest.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/model/InternalPlcSubscriptionHandle.java
similarity index 80%
copy from plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/InternalPlcSubscriptionRequest.java
copy to plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/model/InternalPlcSubscriptionHandle.java
index ec912a3..32e9000 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/InternalPlcSubscriptionRequest.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/model/InternalPlcSubscriptionHandle.java
@@ -16,11 +16,9 @@
  specific language governing permissions and limitations
  under the License.
  */
-package org.apache.plc4x.java.base.messages;
-
-import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
-
-public interface InternalPlcSubscriptionRequest extends PlcSubscriptionRequest {
+package org.apache.plc4x.java.base.model;
 
+import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
 
+public interface InternalPlcSubscriptionHandle extends PlcSubscriptionHandle {
 }