diff --git a/example/main-java/src/main/java/org/finos/vuu/module/JavaExampleModule.java b/example/main-java/src/main/java/org/finos/vuu/module/JavaExampleModule.java index 1e5ab4601..e303098d4 100644 --- a/example/main-java/src/main/java/org/finos/vuu/module/JavaExampleModule.java +++ b/example/main-java/src/main/java/org/finos/vuu/module/JavaExampleModule.java @@ -3,12 +3,14 @@ import org.finos.toolbox.time.Clock; import org.finos.vuu.api.ColumnBuilder; import org.finos.vuu.api.TableDef; +import org.finos.vuu.api.ViewPortDef; import org.finos.vuu.core.module.DefaultModule; import org.finos.vuu.core.module.ModuleFactory; import org.finos.vuu.core.module.TableDefContainer; import org.finos.vuu.core.module.ViewServerModule; import org.finos.vuu.core.table.Columns; -import org.finos.vuu.person.PersonStore; +import org.finos.vuu.person.PersonRpcHandler; +import org.finos.vuu.person.datasource.PersonStore; import org.finos.vuu.person.auto.AutoMappedPersonProvider; import org.finos.vuu.person.auto.EntitySchema; import org.finos.vuu.person.manual.PersonProvider; @@ -34,7 +36,11 @@ public ViewServerModule create(final TableDefContainer tableDefContainer, Clock .build(), toScalaSeq(List.of()) ), - (table, vs) -> new PersonProvider(table, new PersonStore(), clock) + (table, vs) -> new PersonProvider(table, new PersonStore(), clock), + (table, provider, providerContainer, tableContainer) -> new ViewPortDef( + table.getTableDef().columns(), + new PersonRpcHandler(table, tableContainer) + ) ) .addTable(TableDef.apply( "PersonAutoMapped", diff --git a/example/main-java/src/main/java/org/finos/vuu/person/PersonRpcHandler.java b/example/main-java/src/main/java/org/finos/vuu/person/PersonRpcHandler.java new file mode 100644 index 000000000..1ac029200 --- /dev/null +++ b/example/main-java/src/main/java/org/finos/vuu/person/PersonRpcHandler.java @@ -0,0 +1,51 @@ +package org.finos.vuu.person; + +import org.finos.vuu.core.table.DataTable; +import org.finos.vuu.core.table.TableContainer; +import org.finos.vuu.net.rpc.*; +import scala.Function1; + +import java.util.Arrays; + +/* Work in Progress - do not use this as example yet + * */ +public class PersonRpcHandler extends DefaultRpcHandler { + private final DataTable table; + + public PersonRpcHandler(DataTable table, TableContainer tableContainer) { + this.table = table; + + registerRpc("UpdateName", (params) -> processUpdateNameRpcRequest(params)); + registerRpc("GetPeopleWithName", (params) -> processGetPeopleNameRpcRequest(params)); + } + + private void registerRpc(String functionName, Function1 handlerFunc) { + this.registerRpcMethodHandler(functionName, new RpcFunctionMethodHandler(handlerFunc)); + } + + public RpcMethodCallResult processUpdateNameRpcRequest(RpcParams params) { + updateName( + params.namedParams().get("Id").get().toString(), //how to report error when expected param missing or fail to cast to right type + params.namedParams().get("Name").get().toString() + ); + return new RpcMethodSuccess(""); //how to control what viewport action to trigger? + } + + public RpcMethodCallResult processGetPeopleNameRpcRequest(RpcParams params) { + getPeopleWithNameThatStartWith( + Arrays.stream(params.params()).findFirst().toString() + ); + return new RpcMethodSuccess(""); //need to return result + } + + public String[] updateName(String id, String newName) { + //get person data from data source, update name, save to datasource? + //should update table row or allow lifecycle sync to pick up change? + return new String[0]; + } + + public String[] getPeopleWithNameThatStartWith(String search) { + return new String[0]; + } +} + diff --git a/example/main-java/src/main/java/org/finos/vuu/person/auto/AutoMappedPersonProvider.java b/example/main-java/src/main/java/org/finos/vuu/person/auto/AutoMappedPersonProvider.java index 3c316446b..18684663f 100644 --- a/example/main-java/src/main/java/org/finos/vuu/person/auto/AutoMappedPersonProvider.java +++ b/example/main-java/src/main/java/org/finos/vuu/person/auto/AutoMappedPersonProvider.java @@ -4,7 +4,7 @@ import org.finos.vuu.core.table.DataTable; import org.finos.vuu.core.table.RowWithData; import org.finos.vuu.person.Person; -import org.finos.vuu.person.PersonStore; +import org.finos.vuu.person.datasource.PersonStore; import org.finos.vuu.provider.Provider; import org.finos.vuu.util.schema.SchemaMapper; import org.finos.vuu.util.schema.SchemaMapperBuilder; diff --git a/example/main-java/src/main/java/org/finos/vuu/person/PersonStore.java b/example/main-java/src/main/java/org/finos/vuu/person/datasource/PersonStore.java similarity index 74% rename from example/main-java/src/main/java/org/finos/vuu/person/PersonStore.java rename to example/main-java/src/main/java/org/finos/vuu/person/datasource/PersonStore.java index d5710ac9e..746d65a14 100644 --- a/example/main-java/src/main/java/org/finos/vuu/person/PersonStore.java +++ b/example/main-java/src/main/java/org/finos/vuu/person/datasource/PersonStore.java @@ -1,4 +1,6 @@ -package org.finos.vuu.person; +package org.finos.vuu.person.datasource; + +import org.finos.vuu.person.Person; public class PersonStore { diff --git a/example/main-java/src/main/java/org/finos/vuu/person/manual/PersonProvider.java b/example/main-java/src/main/java/org/finos/vuu/person/manual/PersonProvider.java index 978bc574e..beafbe857 100644 --- a/example/main-java/src/main/java/org/finos/vuu/person/manual/PersonProvider.java +++ b/example/main-java/src/main/java/org/finos/vuu/person/manual/PersonProvider.java @@ -4,7 +4,7 @@ import org.finos.vuu.core.table.DataTable; import org.finos.vuu.core.table.RowWithData; import org.finos.vuu.person.Person; -import org.finos.vuu.person.PersonStore; +import org.finos.vuu.person.datasource.PersonStore; import org.finos.vuu.provider.Provider; import java.util.Map; diff --git a/vuu/src/main/scala/org/finos/vuu/net/rpc/RpcMethodHandler.scala b/vuu/src/main/scala/org/finos/vuu/net/rpc/RpcMethodHandler.scala index 0f0d6196f..9cca84f84 100644 --- a/vuu/src/main/scala/org/finos/vuu/net/rpc/RpcMethodHandler.scala +++ b/vuu/src/main/scala/org/finos/vuu/net/rpc/RpcMethodHandler.scala @@ -19,5 +19,3 @@ case class RpcMethodSuccess(result: Any) extends RpcMethodCallResult case class RpcMethodFailure(code: Int, error: String, exception: Exception) extends RpcMethodCallResult { def this(error: String) = this(1, error, null) } - -