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