thingsboard-memoizeit

Details

diff --git a/dao/src/main/java/org/thingsboard/server/dao/entityview/CassandraEntityViewDao.java b/dao/src/main/java/org/thingsboard/server/dao/entityview/CassandraEntityViewDao.java
new file mode 100644
index 0000000..e9282e2
--- /dev/null
+++ b/dao/src/main/java/org/thingsboard/server/dao/entityview/CassandraEntityViewDao.java
@@ -0,0 +1,90 @@
+/**
+ * Copyright © 2016-2018 The Thingsboard Authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.thingsboard.server.dao.entityview;
+
+import com.datastax.driver.core.Statement;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.thingsboard.server.common.data.EntitySubtype;
+import org.thingsboard.server.common.data.EntityType;
+import org.thingsboard.server.common.data.EntityView;
+import org.thingsboard.server.common.data.page.TextPageLink;
+import org.thingsboard.server.dao.model.EntitySubtypeEntity;
+import org.thingsboard.server.dao.model.nosql.EntityViewEntity;
+import org.thingsboard.server.dao.nosql.CassandraAbstractSearchTextDao;
+import org.thingsboard.server.dao.util.NoSqlDao;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
+
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_TABLE_FAMILY_NAME;
+
+/**
+ * Created by Victor Basanets on 9/06/2017.
+ */
+@Component
+@Slf4j
+@NoSqlDao
+public class CassandraEntityViewDao extends CassandraAbstractSearchTextDao<EntityViewEntity, EntityView> implements EntityViewDao {
+
+    @Override
+    protected Class<EntityViewEntity> getColumnFamilyClass() {
+        return EntityViewEntity.class;
+    }
+
+    @Override
+    protected String getColumnFamilyName() {
+        return ENTITY_VIEW_TABLE_FAMILY_NAME;
+    }
+
+    @Override
+    public EntityView save(EntityView domain) {
+        EntityView savedEntityView = super.save(domain);
+        EntitySubtype entitySubtype = new EntitySubtype(savedEntityView.getTenantId(), EntityType.ENTITY_VIEW,
+                savedEntityView.getId().getEntityType().toString());
+        EntitySubtypeEntity entitySubtypeEntity = new EntitySubtypeEntity(entitySubtype);
+        Statement saveStatement = cluster.getMapper(EntitySubtypeEntity.class).saveQuery(entitySubtypeEntity);
+        executeWrite(saveStatement);
+        return savedEntityView;
+    }
+
+    /*Wasn't done!!!*/
+    @Override
+    public List<EntityView> findEntityViewByTenantId(UUID tenantId, TextPageLink pageLink) {
+
+    }
+
+    @Override
+    public Optional<EntityView> findEntityViewByTenantIdAndName(UUID tenantId, String name) {
+        return Optional.empty();
+    }
+
+    @Override
+    public List<EntityView> findEntityViewByTenantIdAndEntityId(UUID tenantId, UUID entityId, TextPageLink pageLink) {
+        return null;
+    }
+
+    @Override
+    public List<EntityView> findEntityViewsByTenantIdAndCustomerId(UUID tenantId, UUID customerId, TextPageLink pageLink) {
+        return null;
+    }
+
+    @Override
+    public List<EntityView> findEntityViewsByTenantIdAndCustomerIdAndEntityId(UUID tenantId, UUID customerId, UUID entityId, TextPageLink pageLink) {
+        return null;
+    }
+}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewDao.java b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewDao.java
index 25404db..5cbbef8 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewDao.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/entityview/EntityViewDao.java
@@ -30,6 +30,14 @@ import java.util.UUID;
 public interface EntityViewDao extends Dao<EntityView> {
 
     /**
+     * Save or update device object
+     *
+     * @param entityView the entity-view object
+     * @return saved entity-view object
+     */
+    EntityView save(EntityView entityView);
+
+    /**
      * Find entity views by tenantId and page link.
      *
      * @param tenantId the tenantId
diff --git a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EntityViewEntity.java b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EntityViewEntity.java
index 65914dd..075a2c5 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EntityViewEntity.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/model/nosql/EntityViewEntity.java
@@ -19,24 +19,26 @@ import com.datastax.driver.core.utils.UUIDs;
 import com.datastax.driver.mapping.annotations.PartitionKey;
 import com.datastax.driver.mapping.annotations.Table;
 import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
 import org.hibernate.annotations.Type;
+import org.thingsboard.server.common.data.EntityType;
 import org.thingsboard.server.common.data.EntityView;
-import org.thingsboard.server.common.data.id.CustomerId;
-import org.thingsboard.server.common.data.id.DeviceId;
-import org.thingsboard.server.common.data.id.EntityViewId;
-import org.thingsboard.server.common.data.id.TenantId;
+import org.thingsboard.server.common.data.id.*;
 import org.thingsboard.server.common.data.objects.TelemetryEntityView;
 import org.thingsboard.server.dao.model.ModelConstants;
 import org.thingsboard.server.dao.model.SearchTextEntity;
 
 import javax.persistence.Column;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
 
 import java.io.IOException;
 import java.util.UUID;
 
+import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_TYPE_PROPERTY;
 import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_VIEW_TABLE_FAMILY_NAME;
 import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
 
@@ -57,6 +59,10 @@ public class EntityViewEntity implements SearchTextEntity<EntityView> {
     @Column(name = ModelConstants.ENTITY_VIEW_ENTITY_ID_PROPERTY)
     private UUID entityId;
 
+    @Enumerated(EnumType.STRING)
+    @Column(name = ENTITY_TYPE_PROPERTY)
+    private EntityType entityType;
+
     @PartitionKey(value = 2)
     @Column(name = ModelConstants.ENTITY_VIEW_TENANT_ID_PROPERTY)
     private UUID tenantId;
@@ -68,9 +74,8 @@ public class EntityViewEntity implements SearchTextEntity<EntityView> {
     @Column(name = ModelConstants.ENTITY_VIEW_NAME_PROPERTY)
     private String name;
 
-    @Type(type = "json")
     @Column(name = ModelConstants.ENTITY_VIEW_KEYS_PROPERTY)
-    private JsonNode keys;
+    private String keys;
 
     @Column(name = ModelConstants.ENTITY_VIEW_TS_BEGIN_PROPERTY)
     private String tsBegin;
@@ -85,6 +90,8 @@ public class EntityViewEntity implements SearchTextEntity<EntityView> {
     @Column(name = ModelConstants.ENTITY_VIEW_ADDITIONAL_INFO_PROPERTY)
     private JsonNode additionalInfo;
 
+    private static final ObjectMapper mapper = new ObjectMapper();
+
     public EntityViewEntity() {
         super();
     }
@@ -95,6 +102,7 @@ public class EntityViewEntity implements SearchTextEntity<EntityView> {
         }
         if (entityView.getEntityId() != null) {
             this.entityId = entityView.getEntityId().getId();
+            this.entityType = entityView.getEntityId().getEntityType();
         }
         if (entityView.getTenantId() != null) {
             this.tenantId = entityView.getTenantId().getId();
@@ -103,11 +111,11 @@ public class EntityViewEntity implements SearchTextEntity<EntityView> {
             this.customerId = entityView.getCustomerId().getId();
         }
         this.name = entityView.getName();
-//        try {
-//            this.keys = entityView.getKeys();
-//        } catch (IOException e) {
-//            e.printStackTrace();
-//        }
+        try {
+            this.keys = mapper.writeValueAsString(entityView.getKeys());
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
         this.tsBegin = entityView.getTsBegin() != null ? String.valueOf(entityView.getTsBegin()) : "0";
         this.tsEnd = entityView.getTsEnd() != null ? String.valueOf(entityView.getTsEnd()) : "0";
         this.searchText = entityView.getSearchText();
@@ -124,7 +132,7 @@ public class EntityViewEntity implements SearchTextEntity<EntityView> {
         EntityView entityView = new EntityView(new EntityViewId(id));
         entityView.setCreatedTime(UUIDs.unixTimestamp(id));
         if (entityId != null) {
-            entityView.setEntityId(new DeviceId(entityId));
+            entityView.setEntityId(EntityIdFactory.getByTypeAndId(entityType.name(), entityId.toString()));
         }
         if (tenantId != null) {
             entityView.setTenantId(new TenantId(tenantId));
@@ -133,11 +141,11 @@ public class EntityViewEntity implements SearchTextEntity<EntityView> {
             entityView.setCustomerId(new CustomerId(customerId));
         }
         entityView.setName(name);
-//        try {
-//            entityView.setKeys((TelemetryEntityView) entityView.getKeys().toObject(keys));
-//        } catch (IOException e) {
-//            e.printStackTrace();
-//        }
+        try {
+            entityView.setKeys(mapper.readValue(keys, TelemetryEntityView.class));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
         entityView.setTsBegin(Long.parseLong(tsBegin));
         entityView.setTsEnd(Long.parseLong(tsEnd));
         entityView.setAdditionalInfo(additionalInfo);