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 <[email protected]> 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 "[email protected]" <[email protected]>.
