From a3737d65061536855f25ed56e9d8151205d6e695 Mon Sep 17 00:00:00 2001 From: Andrew Shvayka Date: Mon, 8 May 2017 11:01:12 +0300 Subject: [PATCH] TB-55: Fixed shared attributes subscription --- .../device/DeviceActorMessageProcessor.java | 28 ++++++------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java index d4c42d82b7..0c73470d5c 100644 --- a/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java +++ b/application/src/main/java/org/thingsboard/server/actors/device/DeviceActorMessageProcessor.java @@ -51,13 +51,7 @@ import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestBody; import org.thingsboard.server.extensions.api.plugins.msg.ToDeviceRpcRequestPluginMsg; import org.thingsboard.server.extensions.api.plugins.msg.ToPluginRpcResponseDeviceMsg; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; +import java.util.*; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; import java.util.function.Consumer; @@ -205,25 +199,21 @@ public class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcesso void processAttributesUpdate(ActorContext context, DeviceAttributesEventNotificationMsg msg) { refreshAttributes(msg); - Set keys = msg.getDeletedKeys(); if (attributeSubscriptions.size() > 0) { ToDeviceMsg notification = null; if (msg.isDeleted()) { - List sharedKeys = keys.stream() + List sharedKeys = msg.getDeletedKeys().stream() .filter(key -> DataConstants.SHARED_SCOPE.equals(key.getScope())) .collect(Collectors.toList()); notification = new AttributesUpdateNotification(BasicAttributeKVMsg.fromDeleted(sharedKeys)); } else { - List attributes = keys.stream() - .filter(key -> DataConstants.SHARED_SCOPE.equals(key.getScope())) - .map(key -> deviceAttributes.getServerPublicAttribute(key.getAttributeKey())) - .filter(Optional::isPresent) - .map(Optional::get) - .collect(Collectors.toList()); - if (attributes.size() > 0) { - notification = new AttributesUpdateNotification(BasicAttributeKVMsg.fromShared(attributes)); - } else { - logger.debug("[{}] No public server side attributes changed!", deviceId); + if (DataConstants.SHARED_SCOPE.equals(msg.getScope())) { + List attributes = new ArrayList<>(msg.getValues()); + if (attributes.size() > 0) { + notification = new AttributesUpdateNotification(BasicAttributeKVMsg.fromShared(attributes)); + } else { + logger.debug("[{}] No public server side attributes changed!", deviceId); + } } } if (notification != null) {