Refactoring of Attribute keys

This commit is contained in:
Andrew Shvayka 2018-11-01 18:39:07 +02:00
parent dcba4f6b58
commit 600da89385
4 changed files with 32 additions and 32 deletions

View File

@ -20,14 +20,29 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.EntityType;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import java.io.Serializable; import java.io.Serializable;
import static org.thingsboard.server.dao.model.ModelConstants.ATTRIBUTE_KEY_COLUMN;
import static org.thingsboard.server.dao.model.ModelConstants.ATTRIBUTE_TYPE_COLUMN;
import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_ID_COLUMN;
import static org.thingsboard.server.dao.model.ModelConstants.ENTITY_TYPE_COLUMN;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Embeddable
public class AttributeKvCompositeKey implements Serializable { public class AttributeKvCompositeKey implements Serializable {
@Enumerated(EnumType.STRING)
@Column(name = ENTITY_TYPE_COLUMN)
private EntityType entityType; private EntityType entityType;
@Column(name = ENTITY_ID_COLUMN)
private String entityId; private String entityId;
@Column(name = ATTRIBUTE_TYPE_COLUMN)
private String attributeType; private String attributeType;
@Column(name = ATTRIBUTE_KEY_COLUMN)
private String attributeKey; private String attributeKey;
} }

View File

@ -27,6 +27,7 @@ import org.thingsboard.server.common.data.kv.StringDataEntry;
import org.thingsboard.server.dao.model.ToData; import org.thingsboard.server.dao.model.ToData;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.EnumType; import javax.persistence.EnumType;
import javax.persistence.Enumerated; import javax.persistence.Enumerated;
@ -48,25 +49,10 @@ import static org.thingsboard.server.dao.model.ModelConstants.STRING_VALUE_COLUM
@Data @Data
@Entity @Entity
@Table(name = "attribute_kv") @Table(name = "attribute_kv")
@IdClass(AttributeKvCompositeKey.class)
public class AttributeKvEntity implements ToData<AttributeKvEntry>, Serializable { public class AttributeKvEntity implements ToData<AttributeKvEntry>, Serializable {
@Id @EmbeddedId
@Enumerated(EnumType.STRING) private AttributeKvCompositeKey id;
@Column(name = ENTITY_TYPE_COLUMN)
private EntityType entityType;
@Id
@Column(name = ENTITY_ID_COLUMN)
private String entityId;
@Id
@Column(name = ATTRIBUTE_TYPE_COLUMN)
private String attributeType;
@Id
@Column(name = ATTRIBUTE_KEY_COLUMN)
private String attributeKey;
@Column(name = BOOLEAN_VALUE_COLUMN) @Column(name = BOOLEAN_VALUE_COLUMN)
private Boolean booleanValue; private Boolean booleanValue;
@ -87,13 +73,13 @@ public class AttributeKvEntity implements ToData<AttributeKvEntry>, Serializable
public AttributeKvEntry toData() { public AttributeKvEntry toData() {
KvEntry kvEntry = null; KvEntry kvEntry = null;
if (strValue != null) { if (strValue != null) {
kvEntry = new StringDataEntry(attributeKey, strValue); kvEntry = new StringDataEntry(id.getAttributeKey(), strValue);
} else if (booleanValue != null) { } else if (booleanValue != null) {
kvEntry = new BooleanDataEntry(attributeKey, booleanValue); kvEntry = new BooleanDataEntry(id.getAttributeKey(), booleanValue);
} else if (doubleValue != null) { } else if (doubleValue != null) {
kvEntry = new DoubleDataEntry(attributeKey, doubleValue); kvEntry = new DoubleDataEntry(id.getAttributeKey(), doubleValue);
} else if (longValue != null) { } else if (longValue != null) {
kvEntry = new LongDataEntry(attributeKey, longValue); kvEntry = new LongDataEntry(id.getAttributeKey(), longValue);
} }
return new BaseAttributeKvEntry(kvEntry, lastUpdateTs); return new BaseAttributeKvEntry(kvEntry, lastUpdateTs);
} }

View File

@ -15,7 +15,9 @@
*/ */
package org.thingsboard.server.dao.sql.attributes; package org.thingsboard.server.dao.sql.attributes;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.dao.model.sql.AttributeKvCompositeKey; import org.thingsboard.server.dao.model.sql.AttributeKvCompositeKey;
import org.thingsboard.server.dao.model.sql.AttributeKvEntity; import org.thingsboard.server.dao.model.sql.AttributeKvEntity;
@ -26,8 +28,11 @@ import java.util.List;
@SqlDao @SqlDao
public interface AttributeKvRepository extends CrudRepository<AttributeKvEntity, AttributeKvCompositeKey> { public interface AttributeKvRepository extends CrudRepository<AttributeKvEntity, AttributeKvCompositeKey> {
List<AttributeKvEntity> findAllByEntityTypeAndEntityIdAndAttributeType(EntityType entityType, @Query("SELECT a FROM AttributeKvEntity a WHERE a.id.entityType = :entityType " +
String entityId, "AND a.id.entityId = :entityId " +
String attributeType); "AND a.id.attributeType = :attributeType")
List<AttributeKvEntity> findAllByEntityTypeAndEntityIdAndAttributeType(@Param("entityType") EntityType entityType,
@Param("entityId") String entityId,
@Param("attributeType") String attributeType);
} }

View File

@ -79,10 +79,7 @@ public class JpaAttributeDao extends JpaAbstractDaoListeningExecutorService impl
@Override @Override
public ListenableFuture<Void> save(EntityId entityId, String attributeType, AttributeKvEntry attribute) { public ListenableFuture<Void> save(EntityId entityId, String attributeType, AttributeKvEntry attribute) {
AttributeKvEntity entity = new AttributeKvEntity(); AttributeKvEntity entity = new AttributeKvEntity();
entity.setEntityType(entityId.getEntityType()); entity.setId(new AttributeKvCompositeKey(entityId.getEntityType(), fromTimeUUID(entityId.getId()), attributeType, attribute.getKey()));
entity.setEntityId(fromTimeUUID(entityId.getId()));
entity.setAttributeType(attributeType);
entity.setAttributeKey(attribute.getKey());
entity.setLastUpdateTs(attribute.getLastUpdateTs()); entity.setLastUpdateTs(attribute.getLastUpdateTs());
entity.setStrValue(attribute.getStrValue().orElse(null)); entity.setStrValue(attribute.getStrValue().orElse(null));
entity.setDoubleValue(attribute.getDoubleValue().orElse(null)); entity.setDoubleValue(attribute.getDoubleValue().orElse(null));
@ -100,10 +97,7 @@ public class JpaAttributeDao extends JpaAbstractDaoListeningExecutorService impl
.stream() .stream()
.map(key -> { .map(key -> {
AttributeKvEntity entityToDelete = new AttributeKvEntity(); AttributeKvEntity entityToDelete = new AttributeKvEntity();
entityToDelete.setEntityType(entityId.getEntityType()); entityToDelete.setId(new AttributeKvCompositeKey(entityId.getEntityType(), fromTimeUUID(entityId.getId()), attributeType, key));
entityToDelete.setEntityId(fromTimeUUID(entityId.getId()));
entityToDelete.setAttributeType(attributeType);
entityToDelete.setAttributeKey(key);
return entityToDelete; return entityToDelete;
}).collect(Collectors.toList()); }).collect(Collectors.toList());