You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by br...@apache.org on 2017/12/22 09:17:01 UTC

[incubator-plc4x] 07/07: Move conversions between Java and Scala API objects to separate file

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

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

commit b6b345ff4bb59142dad6dd2a311195e9d28f75fa
Author: Benedikt Ritter <be...@codecentric.de>
AuthorDate: Tue Nov 21 17:28:47 2017 +0100

    Move conversions between Java and Scala API objects to separate file
---
 .../PlcMessageConversions.scala}                   | 24 +++++++++++-----------
 .../plc4x/scala/api/connection/PlcReader.scala     | 13 +++++-------
 .../plc4x/scala/api/messages/PlcMessage.scala      |  4 ++--
 3 files changed, 19 insertions(+), 22 deletions(-)

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/connection/PlcMessageConversions.scala
similarity index 51%
copy from plc4s/api/src/main/scala/org/apache/plc4x/scala/api/messages/PlcMessage.scala
copy to plc4s/api/src/main/scala/org/apache/plc4x/scala/api/connection/PlcMessageConversions.scala
index d6f74e5..7ec2a2f 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/connection/PlcMessageConversions.scala
@@ -16,21 +16,21 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 */
-package org.apache.plc4x.scala.api.messages
+package org.apache.plc4x.scala.api.connection
 
-import org.apache.plc4x.java.messages.Address
+import org.apache.plc4x.java.messages.{PlcSimpleReadRequest, PlcSimpleReadResponse}
+import org.apache.plc4x.java.types.Value
+import org.apache.plc4x.scala.api.messages.{SimpleReadRequest, SimpleReadResponse}
 
-sealed trait PlcMessage
+private[connection] object PlcMessageConversions {
 
-sealed trait PlcRequest extends PlcMessage {
-    def address: Address
-}
+    implicit class SimpleRequestOps[T](req: SimpleReadRequest[T]) {
 
-final case class SimpleReadRequest[T](address: Address)
+        def toJava: PlcSimpleReadRequest[Value[T]] = new PlcSimpleReadRequest[Value[T]](classOf[Value[T]], req.address, req.size)
+    }
 
-sealed trait PlcResponse[T] extends PlcMessage {
-    def address: Address
-    def value: T
-}
+    implicit class PlcSimpleReadResponseOps[T](resp: PlcSimpleReadResponse[Value[T]]) {
 
-final case class SimpleReadResponse[T](address: Address, value: T)
+        def toScala: SimpleReadResponse[T] = SimpleReadResponse(resp.getAddress, resp.getValue.getValue, resp.getSize)
+    }
+}
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 dd6c323..4fe8380 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
@@ -19,8 +19,7 @@ under the License.
 package org.apache.plc4x.scala.api.connection
 
 import org.apache.plc4x.java.connection.{PlcReader => JPlcReader}
-import org.apache.plc4x.java.messages.PlcSimpleReadRequest
-import org.apache.plc4x.java.types.Value
+import org.apache.plc4x.scala.api.connection.PlcMessageConversions._
 import org.apache.plc4x.scala.api.messages.{SimpleReadRequest, SimpleReadResponse}
 
 import scala.compat.java8.FutureConverters._
@@ -37,12 +36,10 @@ trait PlcReader {
       * Reads a requested value from a PLC.
       *
       * @param readRequest object describing the type and location of the value.
-      * @param T The value type that should be used.
-      * @return a { @link Future} giving async access to the returned value.
+      * @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]] = {
-        val jRequest = new PlcSimpleReadRequest[Value[T]](classOf[Value[T]], readRequest.address)
-        reader.read(jRequest).toScala.map { response => SimpleReadResponse(response.getAddress, response.getValue.getValue) }
-    }
+    def read[T](readRequest: SimpleReadRequest[T])(implicit ec: ExecutionContext): Future[SimpleReadResponse[T]] =
+        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 d6f74e5..b08f270 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
@@ -26,11 +26,11 @@ sealed trait PlcRequest extends PlcMessage {
     def address: Address
 }
 
-final case class SimpleReadRequest[T](address: Address)
+final case class SimpleReadRequest[T](address: Address, size: Int = 1)
 
 sealed trait PlcResponse[T] extends PlcMessage {
     def address: Address
     def value: T
 }
 
-final case class SimpleReadResponse[T](address: Address, value: T)
+final case class SimpleReadResponse[T](address: Address, value: T, size: Int)

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