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