You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by jf...@apache.org on 2019/08/17 15:42:09 UTC

[plc4x] 01/02: Initial design for new API.

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

jfeinauer pushed a commit to branch feature/new-api
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 939b5590765a782e881a151524c2d048495fb979
Author: Julian Feinauer <j....@pragmaticminds.de>
AuthorDate: Wed Aug 14 17:38:51 2019 +0200

    Initial design for new API.
---
 .../org/apache/plc4x/java/base/next/Example.java   | 27 ++++++++++++++++++++++
 .../apache/plc4x/java/base/next/PlcConnection.java | 14 +++++++++++
 .../org/apache/plc4x/java/base/next/PlcDriver.java | 11 +++++++++
 .../plc4x/java/base/next/PlcDriverManager.java     | 11 +++++++++
 .../plc4x/java/base/next/PlcReadRequest.java       |  4 ++++
 .../apache/plc4x/java/base/next/PlcRequest.java    | 11 +++++++++
 .../apache/plc4x/java/base/next/PlcResponse.java   |  4 ++++
 .../plc4x/java/base/next/PlcTransaction.java       | 13 +++++++++++
 .../java/base/next/PlcTransactionResponse.java     |  4 ++++
 .../plc4x/java/base/next/PlcWriteRequest.java      |  4 ++++
 .../apache/plc4x/java/base/next/ResponseCode.java  |  8 +++++++
 .../plc4x/java/base/next/TransactionLevel.java     |  5 ++++
 .../developers/writing-driver/writing-driver.adoc  | 27 +++++++++++++++++++++-
 13 files changed, 142 insertions(+), 1 deletion(-)

diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/Example.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/Example.java
new file mode 100644
index 0000000..062b60b
--- /dev/null
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/Example.java
@@ -0,0 +1,27 @@
+package org.apache.plc4x.java.base.next;
+
+import java.util.concurrent.ExecutionException;
+
+public class Example {
+
+    public static void main(String[] args) throws ExecutionException, InterruptedException {
+        PlcDriverManager driverManager = null;
+
+        // Get a Connection
+        PlcConnection conn = driverManager
+            .connect("s7://xxxxxx")
+            .get();
+
+        // Get a Driver
+        PlcDriver driver = driverManager
+            .getDriver("s7://xxxxx");
+
+        // Get Connection from Driver
+        PlcConnection conn2 = driver.connect()
+            .get();
+
+        // Now do a request
+//        conn.startTransaction(TransactionLevel.WEAK)
+//            .read("field")
+    }
+}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcConnection.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcConnection.java
new file mode 100644
index 0000000..26d5955
--- /dev/null
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcConnection.java
@@ -0,0 +1,14 @@
+package org.apache.plc4x.java.base.next;
+
+import java.util.concurrent.Future;
+
+public interface PlcConnection {
+
+    Future<PlcResponse> execute(PlcRequest request);
+
+    Future<PlcResponse> read(String fieldQuery);
+
+    <T> Future<PlcResponse> write(String fieldQuery, T value);
+
+    PlcTransaction startTransaction(TransactionLevel level);
+}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcDriver.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcDriver.java
new file mode 100644
index 0000000..b9eb0d2
--- /dev/null
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcDriver.java
@@ -0,0 +1,11 @@
+package org.apache.plc4x.java.base.next;
+
+import java.util.concurrent.Future;
+
+public interface PlcDriver {
+
+    boolean validate(String fieldQuery);
+
+    Future<PlcConnection> connect();
+
+}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcDriverManager.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcDriverManager.java
new file mode 100644
index 0000000..2db4efe
--- /dev/null
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcDriverManager.java
@@ -0,0 +1,11 @@
+package org.apache.plc4x.java.base.next;
+
+import java.util.concurrent.Future;
+
+public interface PlcDriverManager {
+
+    Future<PlcConnection> connect(String connection);
+
+    PlcDriver getDriver(String connection);
+
+}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcReadRequest.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcReadRequest.java
new file mode 100644
index 0000000..a488880
--- /dev/null
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcReadRequest.java
@@ -0,0 +1,4 @@
+package org.apache.plc4x.java.base.next;
+
+public class PlcReadRequest implements PlcRequest {
+}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcRequest.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcRequest.java
new file mode 100644
index 0000000..69df72d
--- /dev/null
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcRequest.java
@@ -0,0 +1,11 @@
+package org.apache.plc4x.java.base.next;
+
+import java.util.List;
+
+public interface PlcRequest {
+
+    List<String> getRequestItems();
+
+    ResponseCode getResponseCode();
+
+}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcResponse.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcResponse.java
new file mode 100644
index 0000000..9e55091
--- /dev/null
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcResponse.java
@@ -0,0 +1,4 @@
+package org.apache.plc4x.java.base.next;
+
+public interface PlcResponse {
+}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcTransaction.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcTransaction.java
new file mode 100644
index 0000000..c6b5d90
--- /dev/null
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcTransaction.java
@@ -0,0 +1,13 @@
+package org.apache.plc4x.java.base.next;
+
+import java.util.concurrent.Future;
+
+public interface PlcTransaction {
+
+    PlcTransaction read(String alias, String fieldQuery);
+
+    <T> PlcTransaction write(String alias, String fieldQuery, T value);
+
+    Future<PlcTransactionResponse> execute();
+
+}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcTransactionResponse.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcTransactionResponse.java
new file mode 100644
index 0000000..cd664da
--- /dev/null
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcTransactionResponse.java
@@ -0,0 +1,4 @@
+package org.apache.plc4x.java.base.next;
+
+public class PlcTransactionResponse {
+}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcWriteRequest.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcWriteRequest.java
new file mode 100644
index 0000000..0f525da
--- /dev/null
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/PlcWriteRequest.java
@@ -0,0 +1,4 @@
+package org.apache.plc4x.java.base.next;
+
+public class PlcWriteRequest implements PlcRequest {
+}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/ResponseCode.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/ResponseCode.java
new file mode 100644
index 0000000..66a131b
--- /dev/null
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/ResponseCode.java
@@ -0,0 +1,8 @@
+package org.apache.plc4x.java.base.next;
+
+/**
+ * Request Level Response Code.
+ * Is this necessary??
+ */
+public enum ResponseCode {
+}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/TransactionLevel.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/TransactionLevel.java
new file mode 100644
index 0000000..9c5cb57
--- /dev/null
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/next/TransactionLevel.java
@@ -0,0 +1,5 @@
+package org.apache.plc4x.java.base.next;
+
+public enum TransactionLevel {
+    WEAK
+}
diff --git a/src/site/asciidoc/developers/writing-driver/writing-driver.adoc b/src/site/asciidoc/developers/writing-driver/writing-driver.adoc
index f071fac..784a058 100644
--- a/src/site/asciidoc/developers/writing-driver/writing-driver.adoc
+++ b/src/site/asciidoc/developers/writing-driver/writing-driver.adoc
@@ -54,4 +54,29 @@ The general pipeline for a Protocol looks like the following:
 +-------------------------------------+
 ....
 
-A driver has the task to assemble the pipeline for the protocol(s).
\ No newline at end of file
+A driver has the task to assemble the pipeline for the protocol(s).
+
+== Sequence Diagram
+
+[ditaa,full-cycle]
+....
+    +----------------+  +----------------+  +----------------+  +----------------+
+    |   Driver       |  |   Connection   |  |   Protocol L1  |  |   Protocol L2  |
+    +----------------+  +----------------+  +----------------+  +----------------+
+ connect()  |                   |                   |                   |
+----------->|                   |                   |                   |
+ Future     |------------------>|                   |                   |
+<-----------|                   |                   |                   |
+ complete   |                   |                   |                   |
+<-------------------------------|                   |                   |
+ read       |                   |                   |                   |
+------------------------------->|                   |                   |
+ Future     |                   |------------------>|                   |
+<-------------------------------|                   |------------------>|
+            |                   |                   |                   |- - - - ->
+            |                   |                   |                   |<- - - - -
+            |                   |                   |<------------------|
+ complete   |                   |<------------------|                   |
+<-------------------------------|                   |                   |
+            |                   |                   |                   |
+....
\ No newline at end of file