From 79fd6a2c9b64daeb59621ea4ac79a298b8f663dd Mon Sep 17 00:00:00 2001 From: Na Lee Ha Date: Fri, 24 Nov 2023 19:32:30 +0000 Subject: [PATCH] #980 returning no action for menu calls and rcp success or failure for rcp call --- .../module/basket/result/ErrorReason.scala | 3 ++ .../BasketTradingConstituentJoinService.scala | 29 ++++++++++++++----- 2 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 example/basket/src/main/scala/org/finos/vuu/core/module/basket/result/ErrorReason.scala diff --git a/example/basket/src/main/scala/org/finos/vuu/core/module/basket/result/ErrorReason.scala b/example/basket/src/main/scala/org/finos/vuu/core/module/basket/result/ErrorReason.scala new file mode 100644 index 000000000..e4a453405 --- /dev/null +++ b/example/basket/src/main/scala/org/finos/vuu/core/module/basket/result/ErrorReason.scala @@ -0,0 +1,3 @@ +package org.finos.vuu.core.module.basket.result + +case class ErrorReason(reason: String) 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 7c6f955f7..1c76a099a 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 @@ -6,11 +6,13 @@ import org.finos.vuu.api.JoinTableDef import org.finos.vuu.core.module.basket.BasketConstants.Side import org.finos.vuu.core.module.basket.BasketModule import org.finos.vuu.core.module.basket.BasketModule.{BasketTradingColumnNames => BTColumnName, BasketTradingConstituentColumnNames => ColumnName} +import org.finos.vuu.core.module.basket.result.ErrorReason import org.finos.vuu.core.table.{DataTable, JoinTable, RowWithData, TableContainer} -import org.finos.vuu.net.{ClientSessionId, RequestContext} import org.finos.vuu.net.rpc.{EditRpcHandler, RpcHandler} +import org.finos.vuu.net.{ClientSessionId, RequestContext} import org.finos.vuu.viewport._ + trait BasketTradingConstituentJoinServiceIF extends EditRpcHandler { def setSell(selection: ViewPortSelection, session: ClientSessionId): ViewPortAction @@ -46,7 +48,9 @@ class BasketTradingConstituentJoinService(val table: DataTable, val tableContain def setBuy(selection: ViewPortSelection, session: ClientSessionId): ViewPortAction = { updateSelected(selection, Map(ColumnName.Side -> Side.Buy)) } - def addConstituents(rics: Array[String])(ctx: RequestContext): ViewPortEditAction = { + + //this is RCP call and method name is part of contract with UI + def addConstituents(rics: Array[String])(ctx: RequestContext): ViewPortAction = { if(table.size() == 0) ViewPortEditFailure(s"Failed to add constituents to ${table.name} as adding row to empty table is currently not supported") @@ -65,7 +69,11 @@ class BasketTradingConstituentJoinService(val table: DataTable, val tableContain ric = ric)) //todo should we guard against adding row for ric that already exist? - updateJoinTable(newRows) + updateJoinTable(newRows) match { + case Right(_) => ViewPortRpcSuccess() + case Left(errorReason) => + ViewPortRpcFailure(errorReason.reason) + } } private def onEditCell(key: String, columnName: String, data: Any, vp: ViewPort, session: ClientSessionId): ViewPortEditAction = { @@ -85,7 +93,6 @@ class BasketTradingConstituentJoinService(val table: DataTable, val tableContain } private def onDeleteRow(key: String, vp: ViewPort, session: ClientSessionId): ViewPortEditAction = { - ViewPortEditSuccess() } @@ -123,15 +130,15 @@ class BasketTradingConstituentJoinService(val table: DataTable, val tableContain joinTable.sourceTables.get(baseTableDef.name) } - private def updateJoinTable(rows: Array[RowWithData]): ViewPortEditAction = { + private def updateJoinTable(rows: Array[RowWithData]): Either[ErrorReason, Unit] = { getBaseTable() match { case Some(baseTable: DataTable) => rows.foreach(row => baseTable.processUpdate(row.key, row, clock.now()) ) - ViewPortEditSuccess() + Right() case None => - ViewPortEditFailure(s"Could not find base table for ${table.name}") + Left(ErrorReason(s"Could not find base table for ${table.name}")) } } @@ -142,7 +149,13 @@ class BasketTradingConstituentJoinService(val table: DataTable, val tableContain val sourceTableKey = Map(ColumnName.InstanceIdRic -> key) RowWithData(key, sourceTableKey ++ updates) }) - updateJoinTable(updateRows.toArray) + + updateJoinTable(updateRows.toArray) match { + case Right(_) => NoAction() + case Left(errorReason) => + logger.info(s"Could not update selection values${errorReason.reason}") + NoAction() + } } private def mkTradingConstituentRow(basketTradeInstanceId: String, sourceBasketId: String, tradeUnit: Int, ric: String): RowWithData = {