use of org.eclipse.kapua.translator.Translator in project kapua by eclipse.
the class DeviceCallExecutor method send.
@SuppressWarnings({ "unchecked" })
public RS send() throws KapuaException {
//
// Get the correct device call
KapuaLocator locator = KapuaLocator.getInstance();
DeviceCallFactory kapuaDeviceCallFactory = locator.getFactory(DeviceCallFactory.class);
DeviceCall<DeviceRequestMessage, DeviceResponseMessage> deviceCall = kapuaDeviceCallFactory.newDeviceCall();
Translator tKapuaToClient = Translator.getTranslatorFor(requestMessage.getRequestClass(), deviceCall.getBaseMessageClass());
DeviceResponseMessage responseMessage;
timeout = timeout == null ? DeviceManagementSetting.getInstance().getLong(DeviceManagementSettingKey.REQUEST_TIMEOUT) : timeout;
DeviceRequestMessage deviceRequestMessage = (DeviceRequestMessage) tKapuaToClient.translate(requestMessage);
switch(requestMessage.getChannel().getMethod()) {
case CREATE:
{
responseMessage = deviceCall.create(deviceRequestMessage, timeout);
}
break;
case READ:
{
responseMessage = deviceCall.read(deviceRequestMessage, timeout);
}
break;
case OPTIONS:
{
responseMessage = deviceCall.options(deviceRequestMessage, timeout);
}
break;
case DELETE:
{
responseMessage = deviceCall.delete(deviceRequestMessage, timeout);
}
break;
case EXECUTE:
{
responseMessage = deviceCall.execute(deviceRequestMessage, timeout);
}
break;
case WRITE:
{
responseMessage = deviceCall.write(deviceRequestMessage, timeout);
}
break;
default:
throw new DeviceManagementException(DeviceManagementErrorCodes.REQUEST_BAD_METHOD, null, requestMessage.getChannel().getMethod());
}
Translator tClientToKapua = Translator.getTranslatorFor(deviceCall.getBaseMessageClass(), requestMessage.getResponseClass());
return (RS) tClientToKapua.translate(responseMessage);
}
use of org.eclipse.kapua.translator.Translator in project kapua by eclipse.
the class KuraDeviceCallImpl method send.
@SuppressWarnings({ "unchecked" })
private KuraResponseMessage send(KuraRequestMessage requestMessage, Long timeout) throws KuraMqttDeviceCallException {
KuraResponseMessage response = null;
TransportFacade transportFacade = null;
try {
//
// Borrow a KapuaClient
transportFacade = borrowClient();
//
// Get Kura to transport translator for the request and vice versa
Translator translatorKuraTransport = getTranslator(KuraRequestMessage.class, transportFacade.getMessageClass());
Translator translatorTransportKura = getTranslator(transportFacade.getMessageClass(), KuraResponseMessage.class);
//
// Make the request
// Add requestId and requesterClientId to both payload and channel if response is expected
// Note: Adding to both payload and channel to let the translator choose what to do base on the transport used.
KuraRequestChannel requestChannel = requestMessage.getChannel();
KuraRequestPayload requestPayload = requestMessage.getPayload();
if (timeout != null) {
// FIXME: create an utilty class to use the same synchronized random instance to avoid duplicates
Random r = new Random();
String requestId = String.valueOf(r.nextLong());
requestChannel.setRequestId(requestId);
requestChannel.setRequesterClientId(transportFacade.getClientId());
requestPayload.setRequestId(requestId);
requestPayload.setRequesterClientId(transportFacade.getClientId());
}
// Do send
try {
// Set current timestamp
requestMessage.setTimestamp(new Date());
// Send
TransportMessage transportResponseMessage = transportFacade.sendSync((TransportMessage) translatorKuraTransport.translate(requestMessage), timeout);
// Translate response
response = (KuraResponseMessage) translatorTransportKura.translate(transportResponseMessage);
} catch (KapuaException e) {
throw new KuraMqttDeviceCallException(KuraMqttDeviceCallErrorCodes.CLIENT_SEND_ERROR, e, (Object[]) null);
}
} catch (KapuaException ke) {
throw new KuraMqttDeviceCallException(KuraMqttDeviceCallErrorCodes.CALL_ERROR, ke, (Object[]) null);
} finally {
if (transportFacade != null) {
transportFacade.clean();
}
}
return response;
}
Aggregations