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>.