use of com.canoo.dp.impl.remoting.commands.CallActionCommand in project dolphin-platform by canoo.
the class ControllerProxyImpl method invoke.
@Override
public CompletableFuture<Void> invoke(final String actionName, final Param... params) {
if (destroyed) {
throw new IllegalStateException("The controller was already destroyed");
}
final ClientControllerActionCallBean bean = platformBeanRepository.createControllerActionCallBean(controllerId, actionName, params);
final CallActionCommand callActionCommand = new CallActionCommand();
callActionCommand.setControllerId(controllerId);
callActionCommand.setActionName(actionName);
if (params != null) {
for (Param param : params) {
Object value = param.getValue();
if (value == null) {
callActionCommand.addParam(param.getName(), null);
} else {
try {
callActionCommand.addParam(param.getName(), converters.getConverter(value.getClass()).convertToDolphin(value));
} catch (ValueConverterException e) {
throw new MappingException("Error in value conversion of param '" + param.getName() + "' for action '" + actionName + "'", e);
}
}
}
}
final CompletableFuture<Void> result = new CompletableFuture<>();
clientConnector.send(callActionCommand, () -> {
if (bean.isError()) {
result.completeExceptionally(new ControllerActionException("Error on calling action on the server. Please check the server log."));
} else {
result.complete(null);
}
bean.unregister();
});
return result;
}
use of com.canoo.dp.impl.remoting.commands.CallActionCommand in project dolphin-platform by canoo.
the class TestOptimizedJsonCodec method shouldEncodeCallActionCommand.
@Test
public void shouldEncodeCallActionCommand() {
final CallActionCommand command = new CallActionCommand();
command.setControllerId("4711");
command.setActionName("action");
final String actual = OptimizedJsonCodec.getInstance().encode(Collections.<Command>singletonList(command));
assertThat(actual, is("[{\"c_id\":\"4711\",\"n\":\"action\",\"p\":[],\"id\":\"CallAction\"}]"));
}
use of com.canoo.dp.impl.remoting.commands.CallActionCommand in project dolphin-platform by canoo.
the class CallActionCommandEncoder method decode.
@Override
public CallActionCommand decode(final JsonObject jsonObject) {
Assert.requireNonNull(jsonObject, "jsonObject");
try {
final CallActionCommand command = new CallActionCommand();
command.setControllerId(getStringElement(jsonObject, CONTROLLER_ID));
command.setActionName(getStringElement(jsonObject, NAME));
final JsonArray jsonArray = jsonObject.getAsJsonArray(PARAMS);
if (jsonArray != null) {
for (final JsonElement jsonElement : jsonArray) {
final JsonObject paramObject = jsonElement.getAsJsonObject();
command.addParam(getStringElement(paramObject, NAME), ValueEncoder.decodeValue(paramObject.get(VALUE)));
}
}
return command;
} catch (final Exception ex) {
throw new JsonParseException("Illegal JSON detected", ex);
}
}
use of com.canoo.dp.impl.remoting.commands.CallActionCommand in project dolphin-platform by canoo.
the class TestOptimizedJsonCodec method shouldEncodeCallActionWithParamsCommand.
@Test
public void shouldEncodeCallActionWithParamsCommand() {
final CallActionCommand command = new CallActionCommand();
command.setControllerId("4711");
command.setActionName("action");
command.addParam("A", 1);
command.addParam("B", 7.6);
command.addParam("C", true);
command.addParam("D", null);
command.addParam("E", "Hello");
final String actual = OptimizedJsonCodec.getInstance().encode(Collections.<Command>singletonList(command));
assertThat(actual, is("[{\"c_id\":\"4711\",\"n\":\"action\",\"p\":[{\"n\":\"A\",\"v\":1},{\"n\":\"B\",\"v\":7.6},{\"n\":\"C\",\"v\":true},{\"n\":\"D\",\"v\":null},{\"n\":\"E\",\"v\":\"Hello\"}],\"id\":\"CallAction\"}]"));
}
Aggregations