From f5a41e6ca192eaf572c6b0237e615105aab7d3b3 Mon Sep 17 00:00:00 2001 From: Na Lee Ha Date: Mon, 27 Nov 2023 18:39:25 +0000 Subject: [PATCH] #1019 converting weighting and limit price field to a double as json serialisation parse it as BigDecimal or Integer --- .../BasketTradingConstituentJoinService.scala | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/example/basket/src/main/scala/org/finos/vuu/core/module/basket/service/BasketTradingConstituentJoinService.scala b/example/basket/src/main/scala/org/finos/vuu/core/module/basket/service/BasketTradingConstituentJoinService.scala index 1c76a099a..aa1811d6a 100644 --- a/example/basket/src/main/scala/org/finos/vuu/core/module/basket/service/BasketTradingConstituentJoinService.scala +++ b/example/basket/src/main/scala/org/finos/vuu/core/module/basket/service/BasketTradingConstituentJoinService.scala @@ -12,6 +12,8 @@ import org.finos.vuu.net.rpc.{EditRpcHandler, RpcHandler} import org.finos.vuu.net.{ClientSessionId, RequestContext} import org.finos.vuu.viewport._ +import scala.util.control.NonFatal + trait BasketTradingConstituentJoinServiceIF extends EditRpcHandler { def setSell(selection: ViewPortSelection, session: ClientSessionId): ViewPortAction @@ -77,12 +79,30 @@ class BasketTradingConstituentJoinService(val table: DataTable, val tableContain } private def onEditCell(key: String, columnName: String, data: Any, vp: ViewPort, session: ClientSessionId): ViewPortEditAction = { - getBaseTable() match { - case Some(baseTable: DataTable) => - baseTable.processUpdate(key, RowWithData(key, Map(ColumnName.InstanceIdRic -> key, columnName -> data)), clock.now()) - ViewPortEditSuccess() - case None => - ViewPortEditFailure("Could not find base table") + try { + getBaseTable() match { + case Some(baseTable: DataTable) => + columnName match { + case ColumnName.Weighting | ColumnName.LimitPrice => + val doubleValue = convertToDouble(data) + baseTable.processUpdate(key, RowWithData(key, Map(ColumnName.InstanceIdRic -> key, columnName -> doubleValue)), clock.now()) + case _ => baseTable.processUpdate(key, RowWithData(key, Map(ColumnName.InstanceIdRic -> key, columnName -> data)), clock.now()) + } + ViewPortEditSuccess() + case None => + ViewPortEditFailure("Could not find base table for basket trading constituent join ") + } + } catch { + case NonFatal(t) => ViewPortEditFailure(s"Could not update $columnName. $t") + } + } + private def convertToDouble(data:Any): Double = { + data match { + case decimalValue: java.math.BigDecimal => + decimalValue.doubleValue + case integer: java.lang.Integer => integer.toDouble + case int: Int => int.toDouble + case _ => data.asInstanceOf[Double] } }