thingsboard-aplcache

Details

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 6f66a77..b250988 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
@@ -78,7 +78,6 @@ import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Set;
 import java.util.UUID;
 import java.util.function.Consumer;
@@ -288,73 +287,36 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
     private ListenableFuture<List<List<AttributeKvEntry>>> getAttributesKvEntries(GetAttributeRequestMsg request) {
         ListenableFuture<List<AttributeKvEntry>> clientAttributesFuture;
         ListenableFuture<List<AttributeKvEntry>> sharedAttributesFuture;
-        if (!clientIsPresent(request) && !sharedIsPresent(request)) {
-            clientAttributesFuture = findAllClientAttributes();
-            sharedAttributesFuture = findAllSharedAttributes();
-        } else if (clientIsPresent(request) && sharedIsPresent(request)) {
-            if (clientIsNotEmpty(request) && sharedIsNotEmpty(request)) {
-                clientAttributesFuture = findClientAttributes(request);
-                sharedAttributesFuture = findSharedAttributes(request);
-            } else {
-                clientAttributesFuture = findAllClientAttributes();
-                sharedAttributesFuture = findAllSharedAttributes();
-            }
-        } else if (clientIsPresent(request) && !sharedIsPresent(request)) {
-            if (clientIsNotEmpty(request)) {
-                clientAttributesFuture = findClientAttributes(request);
-            } else {
-                clientAttributesFuture = findAllClientAttributes();
-            }
-            sharedAttributesFuture = Futures.immediateFuture(Collections.emptyList());
-        } else {
-            if (sharedIsNotEmpty(request)) {
-                sharedAttributesFuture = findSharedAttributes(request);
-            } else {
-                sharedAttributesFuture = findAllSharedAttributes();
-            }
+        if (listIsEmpty(request.getClientAttributeNamesList()) && listIsEmpty(request.getSharedAttributeNamesList())) {
+            clientAttributesFuture = findAllAttributesByScope(CLIENT_SCOPE);
+            sharedAttributesFuture = findAllAttributesByScope(SHARED_SCOPE);
+        } else if (!listIsEmpty(request.getClientAttributeNamesList()) && !listIsEmpty(request.getSharedAttributeNamesList())) {
+            clientAttributesFuture = findAttributesByScope(toSet(request.getClientAttributeNamesList()), CLIENT_SCOPE);
+            sharedAttributesFuture = findAttributesByScope(toSet(request.getSharedAttributeNamesList()), SHARED_SCOPE);
+        } else if (listIsEmpty(request.getClientAttributeNamesList()) && !listIsEmpty(request.getSharedAttributeNamesList())) {
             clientAttributesFuture = Futures.immediateFuture(Collections.emptyList());
+            sharedAttributesFuture = findAttributesByScope(toSet(request.getSharedAttributeNamesList()), SHARED_SCOPE);
+        } else {
+            sharedAttributesFuture = Futures.immediateFuture(Collections.emptyList());
+            clientAttributesFuture = findAttributesByScope(toSet(request.getClientAttributeNamesList()), CLIENT_SCOPE);
         }
         return Futures.allAsList(Arrays.asList(clientAttributesFuture, sharedAttributesFuture));
     }
 
-    private ListenableFuture<List<AttributeKvEntry>> findAllSharedAttributes() {
-        return systemContext.getAttributesService().findAll(tenantId, deviceId, SHARED_SCOPE);
-    }
-
-    private ListenableFuture<List<AttributeKvEntry>> findAllClientAttributes() {
-        return systemContext.getAttributesService().findAll(tenantId, deviceId, CLIENT_SCOPE);
-    }
-
-    private ListenableFuture<List<AttributeKvEntry>> findSharedAttributes(GetAttributeRequestMsg request) {
-        return systemContext.getAttributesService().find(tenantId, deviceId, SHARED_SCOPE, getSharedAttributesSet(request));
-    }
-
-    private ListenableFuture<List<AttributeKvEntry>> findClientAttributes(GetAttributeRequestMsg request) {
-        return systemContext.getAttributesService().find(tenantId, deviceId, CLIENT_SCOPE, getClientAttributesSet(request));
-    }
-
-    private boolean clientIsNotEmpty(GetAttributeRequestMsg request) {
-        return !getClientAttributesSet(request).isEmpty();
-    }
-
-    private boolean sharedIsNotEmpty(GetAttributeRequestMsg request) {
-        return !getSharedAttributesSet(request).isEmpty();
+    private ListenableFuture<List<AttributeKvEntry>> findAllAttributesByScope(String scope) {
+        return systemContext.getAttributesService().findAll(tenantId, deviceId, scope);
     }
 
-    private Set<String> getSharedAttributesSet(GetAttributeRequestMsg request) {
-        return toOptionalSet(request.getSharedAttributeNamesList()).get();
+    private ListenableFuture<List<AttributeKvEntry>> findAttributesByScope(Set<String> attributesSet, String scope) {
+        return systemContext.getAttributesService().find(tenantId, deviceId, scope, attributesSet);
     }
 
-    private Set<String> getClientAttributesSet(GetAttributeRequestMsg request) {
-        return toOptionalSet(request.getClientAttributeNamesList()).get();
+    private Set<String> toSet(List<String> strings) {
+        return new HashSet<>(strings);
     }
 
-    private boolean sharedIsPresent(GetAttributeRequestMsg request) {
-        return toOptionalSet(request.getSharedAttributeNamesList()).isPresent();
-    }
-
-    private boolean clientIsPresent(GetAttributeRequestMsg request) {
-        return toOptionalSet(request.getClientAttributeNamesList()).isPresent();
+    private boolean listIsEmpty(List<String> strings) {
+        return strings == null || strings.isEmpty();
     }
 
     private void handlePostAttributesRequest(ActorContext context, SessionInfoProto sessionInfo, PostAttributeMsg postAttributes) {
@@ -603,14 +565,6 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
         return json;
     }
 
-    private Optional<Set<String>> toOptionalSet(List<String> strings) {
-        if (strings == null || strings.isEmpty()) {
-            return Optional.empty();
-        } else {
-            return Optional.of(new HashSet<>(strings));
-        }
-    }
-
     private void sendToTransport(GetAttributeResponseMsg responseMsg, SessionInfoProto sessionInfo) {
         DeviceActorToTransportMsg msg = DeviceActorToTransportMsg.newBuilder()
                 .setSessionIdMSB(sessionInfo.getSessionIdMSB())