Skip to content

Commit

Permalink
Merge pull request #958 from hashmapinc/Tempus-919-kvEntry-with-unit
Browse files Browse the repository at this point in the history
Tempus 919 kv entry with unit
  • Loading branch information
shgupta22 committed Jan 2, 2019
2 parents 16541da + 27a2c8f commit 863aff2
Show file tree
Hide file tree
Showing 52 changed files with 645 additions and 137 deletions.
8 changes: 8 additions & 0 deletions application/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,14 @@
<artifactId>opencsv</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>com.hashmapinc.tempus</groupId>
<artifactId>tempus-unit-conversion</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
<dependency>
<groupId>io.takari.junit</groupId>
<artifactId>takari-cpsuite</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import com.hashmapinc.server.dao.rule.RuleService;
import com.hashmapinc.server.dao.tenant.TenantService;
import com.hashmapinc.server.dao.timeseries.TimeseriesService;
import com.hashmapinc.server.dao.unitconversion.UnitConversionService;
import com.hashmapinc.server.service.cluster.discovery.DiscoveryService;
import com.hashmapinc.server.service.cluster.routing.ClusterRoutingService;
import com.hashmapinc.server.service.cluster.rpc.ClusterRpcService;
Expand Down Expand Up @@ -139,6 +140,9 @@ public class ActorSystemContext {
@Autowired
@Getter private S3BucketService s3BucketService;

@Autowired
@Getter private UnitConversionService unitConversionService;

@Autowired
@Getter private ComputationFunctionService computationFunctionService;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,28 +21,32 @@
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import com.hashmapinc.server.common.data.*;
import com.hashmapinc.server.common.data.Customer;
import com.hashmapinc.server.common.data.Device;
import com.hashmapinc.server.common.data.EntityType;
import com.hashmapinc.server.common.data.Tenant;
import com.hashmapinc.server.common.data.asset.Asset;
import com.hashmapinc.server.common.data.audit.ActionType;
import com.hashmapinc.server.common.data.id.*;
import com.hashmapinc.server.common.data.kv.*;
import com.hashmapinc.server.common.data.page.TextPageLink;
import com.hashmapinc.server.common.data.plugin.PluginMetaData;
import com.hashmapinc.server.common.data.relation.EntityRelation;
import com.hashmapinc.server.common.data.relation.RelationTypeGroup;
import com.hashmapinc.server.common.data.rule.RuleMetaData;
import com.hashmapinc.server.common.msg.cluster.ServerAddress;
import com.hashmapinc.server.extensions.api.device.DeviceAttributesEventNotificationMsg;
import com.hashmapinc.server.extensions.api.device.DeviceTelemetryEventNotificationMsg;
import com.hashmapinc.server.extensions.api.plugins.PluginApiCallSecurityContext;
import com.hashmapinc.server.extensions.api.plugins.PluginCallback;
import com.hashmapinc.server.extensions.api.plugins.PluginContext;
import com.hashmapinc.server.extensions.api.plugins.msg.*;
import com.hashmapinc.server.extensions.api.plugins.rpc.PluginRpcMsg;
import lombok.extern.slf4j.Slf4j;
import com.hashmapinc.server.common.data.plugin.PluginMetaData;
import com.hashmapinc.server.common.data.relation.EntityRelation;
import com.hashmapinc.server.common.data.rule.RuleMetaData;
import com.hashmapinc.server.common.msg.cluster.ServerAddress;
import com.hashmapinc.server.extensions.api.plugins.PluginCallback;
import com.hashmapinc.server.extensions.api.plugins.rpc.RpcMsg;
import com.hashmapinc.server.extensions.api.plugins.ws.PluginWebsocketSessionRef;
import com.hashmapinc.server.extensions.api.plugins.ws.msg.PluginWebsocketMsg;
import com.hashmapinc.server.extensions.api.device.DeviceTelemetryEventNotificationMsg;
import lombok.extern.slf4j.Slf4j;

import javax.annotation.Nullable;
import java.io.IOException;
import java.util.*;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import com.hashmapinc.server.dao.rule.RuleService;
import com.hashmapinc.server.dao.tenant.TenantService;
import com.hashmapinc.server.dao.timeseries.TimeseriesService;
import com.hashmapinc.server.dao.unitconversion.UnitConversionService;
import com.hashmapinc.server.extensions.api.device.DeviceAttributesEventNotificationMsg;
import com.hashmapinc.server.extensions.api.device.DeviceTelemetryEventNotificationMsg;
import com.hashmapinc.server.extensions.api.plugins.msg.TimeoutMsg;
Expand Down Expand Up @@ -61,6 +62,7 @@ public final class SharedPluginProcessingContext {
final CustomerService customerService;
final TenantService tenantService;
final TimeseriesService tsService;
final UnitConversionService unitConversionService;
final DepthSeriesService dsService;
final AttributesService attributesService;
final ClusterRpcService rpcService;
Expand Down Expand Up @@ -92,6 +94,7 @@ public SharedPluginProcessingContext(ActorSystemContext sysContext, TenantId ten
this.tenantService = sysContext.getTenantService();
this.relationService = sysContext.getRelationService();
this.auditLogService = sysContext.getAuditLogService();
unitConversionService = sysContext.getUnitConversionService();
}

public PluginId getPluginId() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,9 +235,7 @@ public List<MetaDataKvEntry> getMetaDataKvEntryForEntity(
} else {
DeviceId deviceId = new DeviceId(toUUID(entityId));
Device device = checkDeviceId(deviceId);
/* TODO : Remove this comment when we have Device and DataModelObject mapping
dataModelObjectId = device.getDataModelObjectId();
*/
}
checkDataModelObjectId(dataModelObjectId);
keyAttribute = dataModelObjectService.findKeyAttributeByDataModelObjectId(dataModelObjectId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,11 @@ public Object getValue() {
return kv.getValue();
}

@Override
public Optional<String> getUnit() {
return kv.getUnit();
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,11 @@ public Object getValue() {
return kv.getValue();
}

@Override
public Optional<String> getUnit() {
return kv.getUnit();
}

@Override
public Double getDs() {
return ds;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@ public Object getValue() {
return kv.getValue();
}

@Override
public Optional<String> getUnit() {
return kv.getUnit();
}

@Override
public long getTs() {
return ts;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ public int hashCode() {
public String toString() {
return "BooleanDataEntry{" +
"value=" + value +
", unit=" + super.getUnit().orElse(null) +
"} " + super.toString();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ public int hashCode() {
public String toString() {
return "DoubleDataEntry{" +
"value=" + value +
", unit=" + super.getUnit().orElse(null) +
"} " + super.toString();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,6 @@ public interface KvEntry extends Serializable {
String getValueAsString();

Object getValue();

Optional<String> getUnit();
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ public int hashCode() {
public String toString() {
return "LongDataEntry{" +
"value=" + value +
", unit=" + super.getUnit().orElse(null) +
"} " + super.toString();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,10 @@ public int hashCode() {

@Override
public String toString() {
return "StringDataEntry{" + "value='" + getValueAsString() + '\'' + "} " + super.toString();
return "StringDataEntry{"
+ "value='" + getValueAsString() + '\'' +
", unit=" + super.getUnit().orElse(null) +
"} " + super.toString();
}

@Override
Expand Down
4 changes: 4 additions & 0 deletions common/transport/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@
<groupId>com.hashmapinc.common</groupId>
<artifactId>message</artifactId>
</dependency>
<dependency>
<groupId>com.hashmapinc.tempus</groupId>
<artifactId>tempus-unit-conversion</artifactId>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.hashmapinc.server.common.data.kv.*;
import com.hashmapinc.server.common.msg.core.*;
import com.hashmapinc.server.common.msg.kv.AttributesKVMsg;
import com.hashmapinc.tempus.model.Quantity;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
Expand Down Expand Up @@ -175,7 +176,7 @@ private static boolean isUnitPresentInJson(String key, JsonNode value, List<KvEn
}else if(value.get(VALUE).getNodeType() == JsonNodeType.STRING){
result.add(new StringDataEntry(key, value.get("unit").asText(), value.get(VALUE).asText()));
}else if(value.get(VALUE).getNodeType() == JsonNodeType.NUMBER){
parseNumericValue(result, key, value.get("unit").asText(), value.get(VALUE));
parseNumericValueAndConvertToSi(result, key, value.get("unit").asText(), value.get(VALUE));
}
unitPresent = true;
}
Expand All @@ -195,13 +196,16 @@ private static void parseNumericValue(List<KvEntry> result, Entry<String, JsonEl
}
}

private static void parseNumericValue(List<KvEntry> result, String key, String unit, JsonNode value) {
private static void parseNumericValueAndConvertToSi(List<KvEntry> result, String key, String unit, JsonNode value) {
Quantity quantity;
if (value.asText().contains(".")) {
result.add(new DoubleDataEntry(key, unit, value.asDouble()));
quantity = UnitConverter.convertToSiUnit(new Quantity(value.asDouble() , unit));
result.add(new DoubleDataEntry(key, quantity.getUnit(), quantity.getValue()));
} else {
try {
long longValue = value.asLong();
result.add(new LongDataEntry(key, longValue));
quantity = UnitConverter.convertToSiUnit(new Quantity(((Long)longValue).doubleValue(), unit));
result.add(new DoubleDataEntry(key, quantity.getUnit(), quantity.getValue()));
} catch (NumberFormatException e) {
throw new JsonSyntaxException("Big integer values are not supported!");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/**
* Copyright © 2016-2018 The Thingsboard Authors
* Modifications © 2017-2018 Hashmap, Inc
*
* 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 com.hashmapinc.server.common.transport.adaptor;

import com.hashmapinc.tempus.UnitConvertorContext;
import com.hashmapinc.tempus.exception.UnitConvertorContextException;
import com.hashmapinc.tempus.exception.UnitConvertorException;
import com.hashmapinc.tempus.model.Quantity;
import com.hashmapinc.tempus.service.UnitConvertorService;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class UnitConverter {

private static UnitConvertorService unitConvertorService = null;

private UnitConverter() {}

static {
try {
unitConvertorService = UnitConvertorContext.getInstanceOfUnitConvertorService();
} catch (UnitConvertorContextException e) {
log.error(e.getMessage());
}
}

public static Quantity convertToSiUnit(Quantity quantity) {
try {
return unitConvertorService.convertToSiUnit(quantity);
} catch (UnitConvertorException ex) {
log.info(ex.getMessage());
}
return quantity;
}
}
8 changes: 8 additions & 0 deletions dao/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@
</properties>

<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
<dependency>
<groupId>com.hashmapinc.common</groupId>
<artifactId>data</artifactId>
Expand Down Expand Up @@ -108,6 +112,10 @@
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.hashmapinc.tempus</groupId>
<artifactId>tempus-unit-conversion</artifactId>
</dependency>
<dependency>
<groupId>com.datastax.cassandra</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@
import com.hashmapinc.server.common.data.cluster.NodeMetric;
import com.hashmapinc.server.common.data.cluster.NodeStatus;
import com.hashmapinc.server.common.data.computation.ComputationType;
import com.hashmapinc.server.common.data.computation.SparkComputationMetadata;
import com.hashmapinc.server.common.data.computation.Computations;
import com.hashmapinc.server.common.data.computation.SparkComputationMetadata;
import com.hashmapinc.server.common.data.datamodel.AttributeDefinition;
import com.hashmapinc.server.common.data.datamodel.DataModel;
import com.hashmapinc.server.common.data.datamodel.DataModelObject;
Expand Down Expand Up @@ -68,6 +68,7 @@
import com.hashmapinc.server.dao.tenant.TenantService;
import com.hashmapinc.server.dao.theme.ThemeService;
import com.hashmapinc.server.dao.timeseries.TimeseriesService;
import com.hashmapinc.server.dao.unitconversion.UnitConversionService;
import com.hashmapinc.server.dao.user.UserService;
import com.hashmapinc.server.dao.widget.WidgetTypeService;
import com.hashmapinc.server.dao.widget.WidgetsBundleService;
Expand Down Expand Up @@ -183,6 +184,9 @@ public abstract class AbstractServiceTest {
@Autowired
protected AttributeDefinitionDao attributeDefinitionDao;

@Autowired
protected UnitConversionService unitConversionService;

class IdComparator<D extends BaseData<? extends UUIDBased>> implements Comparator<D> {
@Override
public int compare(D o1, D o2) {
Expand Down

0 comments on commit 863aff2

Please sign in to comment.