You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by ke...@apache.org on 2017/12/27 21:43:08 UTC

[incubator-plc4x] 04/05: WIP PLC4X-12: apply current changes to scala api

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

keinmark pushed a commit to branch PLC4X-12
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit 1d0d7cbcf412a4719b1e0abddb84315138479072
Author: Mark Keinhörster <ma...@codecentric.de>
AuthorDate: Wed Dec 27 22:37:55 2017 +0100

    WIP PLC4X-12: apply current changes to scala api
---
 .../api/connection/PlcMessageConversions.scala     | 45 ++++++++++++++++++----
 .../plc4x/scala/api/connection/PlcReader.scala     |  4 +-
 .../plc4x/scala/api/messages/PlcMessage.scala      | 27 +++++++++----
 .../plc4x/scala/api/messages/items/PlcItems.scala  | 19 +++++++++
 4 files changed, 78 insertions(+), 17 deletions(-)

diff --git a/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/connection/PlcMessageConversions.scala b/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/connection/PlcMessageConversions.scala
index 7ec2a2f..aff0121 100644
--- a/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/connection/PlcMessageConversions.scala
+++ b/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/connection/PlcMessageConversions.scala
@@ -18,19 +18,50 @@ under the License.
 */
 package org.apache.plc4x.scala.api.connection
 
-import org.apache.plc4x.java.messages.{PlcSimpleReadRequest, PlcSimpleReadResponse}
-import org.apache.plc4x.java.types.Value
-import org.apache.plc4x.scala.api.messages.{SimpleReadRequest, SimpleReadResponse}
+import scala.collection.JavaConverters._
+import org.apache.plc4x.java.api.messages.{PlcReadRequest => jPlcReadRequest, PlcReadResponse => jPlcReadResponse}
+import org.apache.plc4x.java.api.messages.items.{ReadRequestItem => jReadRequestItem, ReadResponseItem => jReadResponseItem}
+import org.apache.plc4x.java.api.types.ResponseCode
+import org.apache.plc4x.scala.api.messages.items.{ReadRequestItem, ReadResponseItem}
+import org.apache.plc4x.scala.api.messages.{PlcReadRequest, PlcReadResponse}
 
 private[connection] object PlcMessageConversions {
 
-    implicit class SimpleRequestOps[T](req: SimpleReadRequest[T]) {
+    implicit class requestItemOps(item: ReadRequestItem){
 
-        def toJava: PlcSimpleReadRequest[Value[T]] = new PlcSimpleReadRequest[Value[T]](classOf[Value[T]], req.address, req.size)
+        def toJava: jReadRequestItem = new jReadRequestItem(item.datatype, item.address, item.size)
     }
 
-    implicit class PlcSimpleReadResponseOps[T](resp: PlcSimpleReadResponse[Value[T]]) {
+    implicit class jRequestItemOps(item: jReadRequestItem){
 
-        def toScala: SimpleReadResponse[T] = SimpleReadResponse(resp.getAddress, resp.getValue.getValue, resp.getSize)
+        def toScala: ReadRequestItem = new ReadRequestItem(item.getDatatype(), item.getAddress(), item.getSize())
+    }
+
+    implicit class RequestOps(req: PlcReadRequest) {
+
+        def toJava: jPlcReadRequest = new jPlcReadRequest(req.readRequestItems.map(e => e.toJava).asJava)
+    }
+
+    implicit class jRequestOps(req: jPlcReadRequest) {
+
+        def toScala: PlcReadRequest = PlcReadRequest(req.getReadRequestItems().asScala.map(e => e.toScala).toList)
+    }
+
+    implicit class jResponseItemOps(item: jReadResponseItem){
+
+        def toScala: ReadResponseItem =
+            ReadResponseItem(item.getRequestItem().toScala, item.getResponseCode(), item.getValues().asScala.toList)
+    }
+
+    implicit class responseItemOps(item: ReadResponseItem){
+
+        def toJava: jReadResponseItem =
+           new jReadResponseItem(item.readRequestItem.toJava, item.responseCode, item.values.asJava)
+    }
+
+    implicit class ResponseOps(resp: jPlcReadResponse) {
+
+        def toScala: PlcReadResponse =
+            PlcReadResponse(resp.getRequest().toScala, resp.getResponseItems().asScala.map(e => e.toScala).toList)
     }
 }
diff --git a/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/connection/PlcReader.scala b/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/connection/PlcReader.scala
index 1bb3111..4129098 100644
--- a/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/connection/PlcReader.scala
+++ b/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/connection/PlcReader.scala
@@ -20,7 +20,7 @@ package org.apache.plc4x.scala.api.connection
 
 import org.apache.plc4x.java.api.connection.{PlcReader => JPlcReader}
 import org.apache.plc4x.scala.api.connection.PlcMessageConversions._
-import org.apache.plc4x.scala.api.messages.{SimpleReadRequest, SimpleReadResponse}
+import org.apache.plc4x.scala.api.messages.{PlcReadRequest, PlcReadResponse}
 
 import scala.compat.java8.FutureConverters._
 import scala.concurrent.{ExecutionContext, Future}
@@ -39,7 +39,7 @@ trait PlcReader {
       * @tparam T The value type that should be used.
       * @return a [[Future]] giving async access to the returned value.
       */
-    def read[T](readRequest: SimpleReadRequest[T])(implicit ec: ExecutionContext): Future[SimpleReadResponse[T]] =
+    def read[T](readRequest: PlcReadRequest)(implicit ec: ExecutionContext): Future[PlcReadResponse] =
         reader.read(readRequest.toJava).toScala.map { _.toScala }
 
 }
diff --git a/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/messages/PlcMessage.scala b/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/messages/PlcMessage.scala
index b0af69d..a27c9ea 100644
--- a/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/messages/PlcMessage.scala
+++ b/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/messages/PlcMessage.scala
@@ -19,18 +19,29 @@ under the License.
 package org.apache.plc4x.scala.api.messages
 
 import org.apache.plc4x.java.api.model.Address
+import items.{ReadRequestItem, ReadResponseItem}
+
+import scala.collection.immutable.List
 
 sealed trait PlcMessage
 
-sealed trait PlcRequest extends PlcMessage {
-    def address: Address
+sealed trait PlcRequest extends PlcMessage
+
+final case class PlcReadRequest(readRequestItems: List[ReadRequestItem]){
+    def addItem(item: ReadRequestItem) = PlcReadRequest(item::readRequestItems)
+    def getNumItems = readRequestItems.size
+}
+object PlcReadRequest{
+    def apply(): PlcReadRequest =
+        PlcReadRequest(List[ReadRequestItem]())
+    def apply(readRequestItems: List[ReadRequestItem]): PlcReadRequest =
+        PlcReadRequest(readRequestItems)
+    def apply(datatype: Class[_], address: Address, size: Int = 1): PlcReadRequest =
+        PlcReadRequest(List(ReadRequestItem(datatype, address, size)))
 }
 
-final case class SimpleReadRequest[T](address: Address, size: Int = 1)
+sealed trait PlcResponse extends PlcMessage
+
+final case class PlcReadResponse(readRequest: PlcReadRequest, responseItems: List[ReadResponseItem])
 
-sealed trait PlcResponse[T] extends PlcMessage {
-    def address: Address
-    def value: T
-}
 
-final case class SimpleReadResponse[T](address: Address, value: T, size: Int)
diff --git a/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/messages/items/PlcItems.scala b/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/messages/items/PlcItems.scala
new file mode 100644
index 0000000..61ac21a
--- /dev/null
+++ b/plc4s/api/src/main/scala/org/apache/plc4x/scala/api/messages/items/PlcItems.scala
@@ -0,0 +1,19 @@
+package org.apache.plc4x.scala.api.messages.items
+
+import org.apache.plc4x.java.api.model.Address
+import org.apache.plc4x.java.api.types.ResponseCode
+import scala.collection.immutable.List
+
+case class ReadRequestItem(datatype: Class[_], address: Address, size: Int)
+object ReadRequestItem{
+    def apply(datatype: Class[_], address: Address, size: Int): ReadRequestItem =
+        new ReadRequestItem(datatype, address, size)
+    def apply(datatype: Class[_], address: Address): ReadRequestItem =
+        new ReadRequestItem(datatype, address, size = 1)
+}
+
+case class ReadResponseItem(readRequestItem: ReadRequestItem, responseCode: ResponseCode, values: List[AnyRef])
+object ReadResponseItem{
+    def apply(readRequestItem: ReadRequestItem, responseCode: ResponseCode, values: List[AnyRef]): ReadResponseItem =
+        new ReadResponseItem(readRequestItem, responseCode, values)
+}
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@plc4x.apache.org" <co...@plc4x.apache.org>.