thingsboard-aplcache

After review

9/28/2018 11:56:32 AM

Details

diff --git a/application/src/test/java/org/thingsboard/server/controller/BaseEntityViewControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/BaseEntityViewControllerTest.java
index 0daaeca..a877cbf 100644
--- a/application/src/test/java/org/thingsboard/server/controller/BaseEntityViewControllerTest.java
+++ b/application/src/test/java/org/thingsboard/server/controller/BaseEntityViewControllerTest.java
@@ -319,12 +319,62 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes
     }
 
     @Test
-    public void testTheCopyOfAttrsThatMatchWithDeviceCriteriaForTheView() throws Exception {
+    public void testTheCopyOfAttrsIntoTSForTheView() throws Exception {
+        Set<String> actualAttributesSet =
+                getAttributesByKeys("{\"caValue1\":\"value1\", \"caValue2\":true, \"caValue3\":42.0, \"caValue4\":73}");
 
-        String viewDeviceId = testDevice.getId().getId().toString();
-        DeviceCredentials deviceCredentials
-                = doGet("/api/device/" + viewDeviceId + "/credentials", DeviceCredentials.class);
+        Set<String> expectedActualAttributesSet =
+                new HashSet<>(Arrays.asList("caValue1", "caValue2", "caValue3", "caValue4"));
+        assertTrue(actualAttributesSet.containsAll(expectedActualAttributesSet));
+        Thread.sleep(1000);
+
+        EntityView savedView = getNewSavedEntityView("Test entity view");
+        String urlOfTelemetryValues = "/api/plugins/telemetry/ENTITY_VIEW/" + savedView.getId().getId().toString() +
+                "/values/attributes?keys=" + String.join(",", actualAttributesSet);
+        List<Map<String, Object>> values = doGetAsync(urlOfTelemetryValues, List.class);
+
+        assertEquals("value1", getValue(values, "caValue1"));
+        assertEquals(true, getValue(values, "caValue2"));
+        assertEquals(42.0, getValue(values, "caValue3"));
+        assertEquals(73, getValue(values, "caValue4"));
+    }
+
+    @Test
+    public void testTheCopyOfAttrsOutOfTSForTheView() throws Exception {
+        Set<String> actualAttributesSet =
+                getAttributesByKeys("{\"caValue1\":\"value1\", \"caValue2\":true, \"caValue3\":42.0, \"caValue4\":73}");
+
+        Set<String> expectedActualAttributesSet = new HashSet<>(Arrays.asList("caValue1", "caValue2", "caValue3", "caValue4"));
+        assertTrue(actualAttributesSet.containsAll(expectedActualAttributesSet));
+        Thread.sleep(1000);
+
+        List<Map<String, Object>> values = doGetAsync("/api/plugins/telemetry/DEVICE/" + testDevice.getId().getId().toString() +
+                "/values/attributes?keys=" + String.join(",", actualAttributesSet), List.class);
+
+        EntityView view = new EntityView();
+        view.setEntityId(testDevice.getId());
+        view.setTenantId(savedTenant.getId());
+        view.setName("Test entity view");
+        view.setKeys(telemetry);
+        view.setStartTimeMs((long) getValue(values, "lastUpdateTs") * 10);
+        view.setEndTimeMs((long) getValue(values, "lastUpdateTs") / 10);
+        EntityView savedView = doPost("/api/entityView", view, EntityView.class);
+
+        String urlOfTelemetryValues = "/api/plugins/telemetry/ENTITY_VIEW/" + savedView.getId().getId().toString() +
+                "/values/attributes?keys=" + String.join(",", actualAttributesSet);
+        values = doGetAsync(urlOfTelemetryValues, List.class);
 
+
+        assertEquals("value1", getValue(values, "caValue1"));
+        assertEquals(true, getValue(values, "caValue2"));
+        assertEquals(42.0, getValue(values, "caValue3"));
+        assertEquals(73, getValue(values, "caValue4"));
+    }
+
+    private Set<String> getAttributesByKeys(String stringKV) throws Exception {
+        String viewDeviceId = testDevice.getId().getId().toString();
+        DeviceCredentials deviceCredentials =
+                doGet("/api/device/" + viewDeviceId + "/credentials", DeviceCredentials.class);
         assertEquals(testDevice.getId(), deviceCredentials.getDeviceId());
 
         String accessToken = deviceCredentials.getCredentialsId();
@@ -339,31 +389,19 @@ public abstract class BaseEntityViewControllerTest extends AbstractControllerTes
         Thread.sleep(3000);
 
         MqttMessage message = new MqttMessage();
-        message.setPayload(("{\"caValue1\":\"value1\", \"caValue2\":true, \"caValue3\":42.0, \"caValue4\":73}").getBytes());
+        message.setPayload((stringKV).getBytes());
         client.publish("v1/devices/me/attributes", message);
         Thread.sleep(1000);
 
-        List<String> actualAttributes =
-                doGetAsync("/api/plugins/telemetry/DEVICE/" + viewDeviceId +  "/keys/attributes", List.class);
-        Set<String> actualAttributesSet = new HashSet<>(actualAttributes);
-
-        List<String> expectedActualAttributes = Arrays.asList("caValue1", "caValue2", "caValue3", "caValue4");
-        Set<String> expectedActualAttributesSet = new HashSet<>(expectedActualAttributes);
-        assertTrue(actualAttributesSet.containsAll(expectedActualAttributesSet));
-        Thread.sleep(1000);
-
-        EntityView savedView = getNewSavedEntityView("Test entity view");
-        String urlOfTelemetryValues = "/api/plugins/telemetry/ENTITY_VIEW/" + savedView.getId().getId().toString() +
-                "/values/attributes?keys=" + String.join(",", actualAttributesSet);
-        List<Map<String, Object>> values = doGetAsync(urlOfTelemetryValues, List.class);
-
-        assertEquals("value1", getValueOfMap(values, "caValue1"));
-        assertEquals(true, getValueOfMap(values, "caValue2"));
-        assertEquals(42.0, getValueOfMap(values, "caValue3"));
-        assertEquals(73, getValueOfMap(values, "caValue4"));
+        return new HashSet<>(doGetAsync("/api/plugins/telemetry/DEVICE/" + viewDeviceId +  "/keys/attributes", List.class));
     }
 
-    private Object getValueOfMap(List<Map<String, Object>> values, String stringValue) {
+    /*private Object getLastTs(List<Map<String, Object>> values) {
+        return values.stream()
+                .filter(value -> value.get("key");
+    }
+*/
+    private Object getValue(List<Map<String, Object>> values, String stringValue) {
         return values.stream()
                 .filter(value -> value.get("key").equals(stringValue))
                 .findFirst().get().get("value");
diff --git a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java
index 9fdadcd..6e7eba0 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewServiceImpl.java
@@ -233,8 +233,8 @@ public class EntityViewServiceImpl extends AbstractEntityService implements Enti
                                         long lastUpdateTs = attributeKvEntry.getLastUpdateTs();
                                         return startTime == 0 && endTime == 0 ||
                                                 (endTime == 0 && startTime < lastUpdateTs) ||
-                                                (startTime == 0 && endTime > lastUpdateTs) ||
-                                                (startTime < lastUpdateTs && endTime > lastUpdateTs);
+                                                (startTime == 0 && endTime > lastUpdateTs)
+                                                ? true : startTime < lastUpdateTs && endTime > lastUpdateTs;
                                     }).collect(Collectors.toList());
                 }
                 try {