use of org.openremote.model.event.shared.EventRequestResponseWrapper in project openremote by openremote.
the class GatewayClientService method onCentralManagerMessage.
protected void onCentralManagerMessage(GatewayConnection connection, String message) {
String messageId = null;
SharedEvent event = null;
if (message.startsWith(EventRequestResponseWrapper.MESSAGE_PREFIX)) {
EventRequestResponseWrapper<?> wrapper = messageFromString(message, EventRequestResponseWrapper.MESSAGE_PREFIX, EventRequestResponseWrapper.class);
messageId = wrapper.getMessageId();
event = wrapper.getEvent();
}
if (message.startsWith(SharedEvent.MESSAGE_PREFIX)) {
event = messageFromString(message, SharedEvent.MESSAGE_PREFIX, SharedEvent.class);
}
if (event != null) {
if (event instanceof GatewayDisconnectEvent) {
if (((GatewayDisconnectEvent) event).getReason() == GatewayDisconnectEvent.Reason.PERMANENT_ERROR) {
LOG.info("Central manager requested disconnect due to permanent error (likely this version of the edge gateway software is not compatible with that manager version)");
destroyGatewayClient(connection, clientRealmMap.get(connection.getLocalRealm()));
clientRealmMap.put(connection.getLocalRealm(), null);
}
} else if (event instanceof AttributeEvent) {
assetProcessingService.sendAttributeEvent((AttributeEvent) event, AttributeEvent.Source.INTERNAL);
} else if (event instanceof AssetEvent) {
AssetEvent assetEvent = (AssetEvent) event;
if (assetEvent.getCause() == AssetEvent.Cause.CREATE || assetEvent.getCause() == AssetEvent.Cause.UPDATE) {
Asset asset = assetEvent.getAsset();
asset.setRealm(connection.getLocalRealm());
LOG.finer("Request from central manager to create/update an asset: Realm=" + connection.getLocalRealm() + ", Asset<?> ID=" + asset.getId());
try {
asset = assetStorageService.merge(asset, true);
} catch (Exception e) {
LOG.log(Level.INFO, "Request from central manager to create/update an asset failed: Realm=" + connection.getLocalRealm() + ", Asset<?> ID=" + asset.getId(), e);
}
}
} else if (event instanceof DeleteAssetsRequestEvent) {
DeleteAssetsRequestEvent deleteRequest = (DeleteAssetsRequestEvent) event;
LOG.finer("Request from central manager to delete asset(s): Realm=" + connection.getLocalRealm() + ", Asset<?> IDs=" + Arrays.toString(deleteRequest.getAssetIds().toArray()));
boolean success = false;
try {
success = assetStorageService.delete(deleteRequest.getAssetIds());
} catch (Exception e) {
LOG.log(Level.INFO, "Request from central manager to create/update an asset failed: Realm=" + connection.getLocalRealm() + ", Asset<?> IDs=" + Arrays.toString(deleteRequest.getAssetIds().toArray()), e);
} finally {
sendCentralManagerMessage(connection.getLocalRealm(), messageToString(EventRequestResponseWrapper.MESSAGE_PREFIX, new EventRequestResponseWrapper<>(messageId, new DeleteAssetsResponseEvent(success, deleteRequest.getAssetIds()))));
}
} else if (event instanceof ReadAssetsEvent) {
ReadAssetsEvent readAssets = (ReadAssetsEvent) event;
AssetQuery query = readAssets.getAssetQuery();
// Force realm to be the one that this client is associated with
query.tenant(new TenantPredicate(connection.getLocalRealm()));
List<Asset<?>> assets = assetStorageService.findAll(readAssets.getAssetQuery());
sendCentralManagerMessage(connection.getLocalRealm(), messageToString(EventRequestResponseWrapper.MESSAGE_PREFIX, new EventRequestResponseWrapper<>(messageId, new AssetsEvent(assets))));
}
}
}
Aggregations