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