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 2018/01/14 21:41:26 UTC

[incubator-plc4x] 03/03: WIP: Merged changes from master

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 6bb931583f3246c5773f1d26906a9421f749d7e6
Author: Mark Keinhörster <ma...@codecentric.de>
AuthorDate: Sun Jan 14 22:41:16 2018 +0100

    WIP: Merged changes from master
---
 .../api/connection/PlcMessageConversions.scala     | 34 ++++++++++++----------
 .../plc4x/scala/api/connection/PlcReader.scala     |  3 +-
 .../plc4x/scala/api/messages/PlcMessage.scala      | 21 +++++++------
 .../plc4x/scala/api/messages/items/PlcItems.scala  | 28 +++++++++++++-----
 4 files changed, 52 insertions(+), 34 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 b28ee37..ecaf83b 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,49 +18,53 @@ under the License.
 */
 package org.apache.plc4x.scala.api.connection
 
-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.messages.{PlcReadRequest => jPlcReadRequest, PlcReadResponse => jPlcReadResponse}
 import org.apache.plc4x.scala.api.messages.items.{ReadRequestItem, ReadResponseItem}
 import org.apache.plc4x.scala.api.messages.{PlcReadRequest, PlcReadResponse}
+import scala.collection.JavaConverters._
 
 private[connection] object PlcMessageConversions {
 
-    implicit class requestItemOps(item: ReadRequestItem){
+    implicit class requestItemOps(item: ReadRequestItem[_]){
 
-        def toJava: jReadRequestItem = new jReadRequestItem(item.datatype, item.address, item.size)
+        def toJava: jReadRequestItem[_] = new jReadRequestItem(item.datatype, item.address, item.size)
     }
 
-    implicit class jRequestItemOps(item: jReadRequestItem){
+    implicit class jRequestItemOps(item: jReadRequestItem[_]){
 
-        def toScala: ReadRequestItem = new ReadRequestItem(item.getDatatype(), item.getAddress(), item.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)
+        def toJava: jPlcReadRequest = new jPlcReadRequest(req.readRequestItems.map(_.toJava).asJava)
     }
 
     implicit class jRequestOps(req: jPlcReadRequest) {
 
-        def toScala: PlcReadRequest = PlcReadRequest(req.getReadRequestItems().asScala.map(e => e.toScala).toList)
+        def toScala: PlcReadRequest = PlcReadRequest(req.getRequestItems.asScala.map(e => e.toScala).toList)
     }
 
-    implicit class jResponseItemOps(item: jReadResponseItem){
+    implicit class jResponseItemOps(item: jReadResponseItem[_]){
 
-        def toScala: ReadResponseItem =
-            ReadResponseItem(item.getRequestItem().toScala, item.getResponseCode(), item.getValues().asScala.toList)
+        def toScala: ReadResponseItem[_] = ReadResponseItem(
+            item.getRequestItem.toScala.asInstanceOf[ReadRequestItem[Any]], item.getResponseCode,
+            item.getValues.asScala.toList)
     }
 
-    implicit class responseItemOps(item: ReadResponseItem){
+    implicit class responseItemOps(item: ReadResponseItem[_]){
 
-        def toJava: jReadResponseItem =
-           new jReadResponseItem(item.readRequestItem.toJava, item.responseCode, item.values.asJava)
+        def toJava: jReadResponseItem[_] =
+           new jReadResponseItem(item.readRequestItem.toJava.asInstanceOf[jReadRequestItem[Any]],
+               item.responseCode, item.values.asJava.asInstanceOf[java.util.List[Any]])
     }
 
     implicit class ResponseOps(resp: jPlcReadResponse) {
 
         def toScala: PlcReadResponse =
-            PlcReadResponse(resp.getRequest().toScala, resp.getResponseItems().asScala.map(e => e.toScala).toList)
+            PlcReadResponse(resp.getRequest.toScala,
+                resp.getResponseItems.asScala.toList.map(x => x.toScala))
+
     }
 }
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 4129098..0a2a600 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
@@ -36,10 +36,9 @@ trait PlcReader {
       * Reads a requested value from a PLC.
       *
       * @param readRequest object describing the type and location of the value.
-      * @tparam T The value type that should be used.
       * @return a [[Future]] giving async access to the returned value.
       */
-    def read[T](readRequest: PlcReadRequest)(implicit ec: ExecutionContext): Future[PlcReadResponse] =
+    def read(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 a27c9ea..f4ec52d 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,29 +19,32 @@ under the License.
 package org.apache.plc4x.scala.api.messages
 
 import org.apache.plc4x.java.api.model.Address
-import items.{ReadRequestItem, ReadResponseItem}
-
+import items.{ReadRequestItem, ReadResponseItem, RequestItem, ResponseItem}
 import scala.collection.immutable.List
 
 sealed trait PlcMessage
 
-sealed trait PlcRequest extends PlcMessage
+sealed trait PlcRequest[REQUEST_ITEM <: RequestItem[_]] extends PlcMessage
+
+final case class PlcReadRequest(readRequestItems: List[ReadRequestItem[_]])
+    extends PlcRequest[ReadRequestItem[_]]{
 
-final case class PlcReadRequest(readRequestItems: List[ReadRequestItem]){
-    def addItem(item: ReadRequestItem) = PlcReadRequest(item::readRequestItems)
+    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(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)))
 }
 
-sealed trait PlcResponse extends PlcMessage
+sealed trait PlcResponse[REQUEST <: PlcRequest[_], RESPONSE_ITEM <: ResponseItem[_], REQUEST_ITEM <: RequestItem[_]]
+    extends PlcMessage
 
-final case class PlcReadResponse(readRequest: PlcReadRequest, responseItems: List[ReadResponseItem])
+final case class PlcReadResponse(readRequest: PlcReadRequest, responseItems: List[_ <: ReadResponseItem[_]])
+    extends PlcResponse[PlcReadRequest, ReadResponseItem[_], ReadRequestItem[_]]
 
 
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
index 4b0962f..81210d7 100644
--- 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
@@ -20,18 +20,30 @@ 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 =
+trait RequestItem[D]
+
+case class ReadRequestItem[D](datatype: Class[D],
+                              address: Address,
+                              size: Int) extends RequestItem[D]
+
+object ReadRequestItem {
+    def apply[D](datatype: Class[D], address: Address, size: Int) =
         new ReadRequestItem(datatype, address, size)
-    def apply(datatype: Class[_], address: Address): ReadRequestItem =
+
+    def apply[D](datatype: Class[D], address: Address) =
         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 =
+trait ResponseItem[REQUEST_ITEM <: RequestItem[_]]
+
+case class ReadResponseItem[D](readRequestItem: ReadRequestItem[D],
+                               responseCode: ResponseCode,
+                               values: List[D]) extends ResponseItem[ReadRequestItem[D]]
+
+object ReadResponseItem {
+    def apply[D](readRequestItem: ReadRequestItem[D], responseCode: ResponseCode, values: List[D]) =
         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>.