cleanup code
This commit is contained in:
parent
3cd88e6d15
commit
64cc74c26c
@ -19,18 +19,11 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
|||||||
import com.fasterxml.jackson.annotation.JsonSubTypes;
|
import com.fasterxml.jackson.annotation.JsonSubTypes;
|
||||||
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
import com.squareup.wire.schema.Location;
|
|
||||||
import com.squareup.wire.schema.internal.parser.MessageElement;
|
|
||||||
import com.squareup.wire.schema.internal.parser.ProtoFileElement;
|
|
||||||
import com.squareup.wire.schema.internal.parser.ProtoParser;
|
|
||||||
import com.squareup.wire.schema.internal.parser.TypeElement;
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.thingsboard.server.common.data.TransportPayloadType;
|
import org.thingsboard.server.common.data.TransportPayloadType;
|
||||||
import org.thingsboard.server.common.data.DeviceTransportType;
|
import org.thingsboard.server.common.data.DeviceTransportType;
|
||||||
import org.springframework.util.CollectionUtils;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Data
|
@Data
|
||||||
|
|||||||
@ -15,7 +15,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.thingsboard.server.common.data.device.profile;
|
package org.thingsboard.server.common.data.device.profile;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
|
||||||
import com.fasterxml.jackson.databind.JsonDeserializer;
|
import com.fasterxml.jackson.databind.JsonDeserializer;
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
|
||||||
import com.github.os72.protobuf.dynamic.DynamicSchema;
|
import com.github.os72.protobuf.dynamic.DynamicSchema;
|
||||||
@ -40,7 +39,6 @@ import org.thingsboard.server.common.data.DeviceTransportType;
|
|||||||
import org.thingsboard.server.common.data.TransportPayloadType;
|
import org.thingsboard.server.common.data.TransportPayloadType;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@ -56,12 +54,6 @@ public class MqttProtoDeviceProfileTransportConfiguration extends MqttDeviceProf
|
|||||||
private String deviceTelemetryProtoSchema;
|
private String deviceTelemetryProtoSchema;
|
||||||
private String deviceAttributesProtoSchema;
|
private String deviceAttributesProtoSchema;
|
||||||
|
|
||||||
@JsonIgnore
|
|
||||||
private Descriptors.Descriptor telemetryMsgDescriptor;
|
|
||||||
|
|
||||||
@JsonIgnore
|
|
||||||
private Descriptors.Descriptor attributesMsgDescriptor;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DeviceTransportType getType() {
|
public DeviceTransportType getType() {
|
||||||
return super.getType();
|
return super.getType();
|
||||||
|
|||||||
@ -18,10 +18,10 @@ package org.thingsboard.server.common.data.device.profile;
|
|||||||
import com.fasterxml.jackson.core.JsonParser;
|
import com.fasterxml.jackson.core.JsonParser;
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||||
import com.fasterxml.jackson.databind.JsonDeserializer;
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
|
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.thingsboard.server.common.data.TransportPayloadType;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@ -36,7 +36,8 @@ public class MqttTransportConfigurationDeserializer extends StdDeserializer<Mqtt
|
|||||||
public MqttDeviceProfileTransportConfiguration deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
|
public MqttDeviceProfileTransportConfiguration deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
|
||||||
try {
|
try {
|
||||||
JsonNode jsonNode = jsonParser.readValueAsTree();
|
JsonNode jsonNode = jsonParser.readValueAsTree();
|
||||||
if (jsonNode.has("deviceTelemetryProtoSchema") || jsonNode.has("deviceAttributesProtoSchema")) {
|
|
||||||
|
if (jsonNode.hasNonNull("transportPayloadType") && jsonNode.get("transportPayloadType").asText().equals(TransportPayloadType.PROTOBUF.name())) {
|
||||||
return jsonParser.getCodec().treeToValue(jsonNode, MqttProtoDeviceProfileTransportConfiguration.class);
|
return jsonParser.getCodec().treeToValue(jsonNode, MqttProtoDeviceProfileTransportConfiguration.class);
|
||||||
} else {
|
} else {
|
||||||
return jsonParser.getCodec().treeToValue(jsonNode, MqttJsonDeviceProfileTransportConfiguration.class);
|
return jsonParser.getCodec().treeToValue(jsonNode, MqttJsonDeviceProfileTransportConfiguration.class);
|
||||||
|
|||||||
@ -52,11 +52,9 @@ public class ProtoMqttAdaptor implements MqttTransportAdaptor {
|
|||||||
public TransportProtos.PostTelemetryMsg convertToPostTelemetry(MqttDeviceAwareSessionContext ctx, MqttPublishMessage inbound) throws AdaptorException {
|
public TransportProtos.PostTelemetryMsg convertToPostTelemetry(MqttDeviceAwareSessionContext ctx, MqttPublishMessage inbound) throws AdaptorException {
|
||||||
DeviceSessionCtx deviceSessionCtx = (DeviceSessionCtx) ctx;
|
DeviceSessionCtx deviceSessionCtx = (DeviceSessionCtx) ctx;
|
||||||
byte[] bytes = toBytes(inbound.payload());
|
byte[] bytes = toBytes(inbound.payload());
|
||||||
|
Descriptors.Descriptor telemetryDynamicMsgDescriptor = getDescriptor(deviceSessionCtx.getTelemetryDynamicMsgDescriptor());
|
||||||
try {
|
try {
|
||||||
Descriptors.Descriptor telemetryDynamicMsgDescriptor = deviceSessionCtx.getTelemetryDynamicMsgDescriptor();
|
return JsonConverter.convertToTelemetryProto(new JsonParser().parse(dynamicMsgToJson(bytes, telemetryDynamicMsgDescriptor)));
|
||||||
DynamicMessage dynamicMessage = DynamicMessage.parseFrom(telemetryDynamicMsgDescriptor, bytes);
|
|
||||||
String stringMsg = JsonFormat.printer().includingDefaultValueFields().print(dynamicMessage);
|
|
||||||
return JsonConverter.convertToTelemetryProto(new JsonParser().parse(stringMsg));
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new AdaptorException(e);
|
throw new AdaptorException(e);
|
||||||
}
|
}
|
||||||
@ -66,11 +64,9 @@ public class ProtoMqttAdaptor implements MqttTransportAdaptor {
|
|||||||
public TransportProtos.PostAttributeMsg convertToPostAttributes(MqttDeviceAwareSessionContext ctx, MqttPublishMessage inbound) throws AdaptorException {
|
public TransportProtos.PostAttributeMsg convertToPostAttributes(MqttDeviceAwareSessionContext ctx, MqttPublishMessage inbound) throws AdaptorException {
|
||||||
DeviceSessionCtx deviceSessionCtx = (DeviceSessionCtx) ctx;
|
DeviceSessionCtx deviceSessionCtx = (DeviceSessionCtx) ctx;
|
||||||
byte[] bytes = toBytes(inbound.payload());
|
byte[] bytes = toBytes(inbound.payload());
|
||||||
|
Descriptors.Descriptor attributesDynamicMessage = getDescriptor(deviceSessionCtx.getAttributesDynamicMessageDescriptor());
|
||||||
try {
|
try {
|
||||||
Descriptors.Descriptor attributesDynamicMessage = deviceSessionCtx.getAttributesDynamicMessageDescriptor();
|
return JsonConverter.convertToAttributesProto(new JsonParser().parse(dynamicMsgToJson(bytes, attributesDynamicMessage)));
|
||||||
DynamicMessage dynamicMessage = DynamicMessage.parseFrom(attributesDynamicMessage, bytes);
|
|
||||||
String stringMsg = JsonFormat.printer().includingDefaultValueFields().print(dynamicMessage);
|
|
||||||
return JsonConverter.convertToAttributesProto(new JsonParser().parse(stringMsg));
|
|
||||||
} catch (InvalidProtocolBufferException | IllegalArgumentException e) {
|
} catch (InvalidProtocolBufferException | IllegalArgumentException e) {
|
||||||
throw new AdaptorException(e);
|
throw new AdaptorException(e);
|
||||||
}
|
}
|
||||||
@ -204,4 +200,16 @@ public class ProtoMqttAdaptor implements MqttTransportAdaptor {
|
|||||||
return Integer.parseInt(topicName.substring(topic.length()));
|
return Integer.parseInt(topicName.substring(topic.length()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Descriptors.Descriptor getDescriptor(Descriptors.Descriptor descriptor) throws AdaptorException {
|
||||||
|
if (descriptor == null) {
|
||||||
|
throw new AdaptorException("Failed to get dynamic message descriptor!");
|
||||||
|
}
|
||||||
|
return descriptor;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String dynamicMsgToJson(byte[] bytes, Descriptors.Descriptor descriptor) throws InvalidProtocolBufferException {
|
||||||
|
DynamicMessage dynamicMessage = DynamicMessage.parseFrom(descriptor, bytes);
|
||||||
|
return JsonFormat.printer().includingDefaultValueFields().print(dynamicMessage);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -113,13 +113,17 @@ public class DeviceSessionCtx extends MqttDeviceAwareSessionContext {
|
|||||||
telemetryTopicFilter = MqttTopicFilterFactory.toFilter(mqttConfig.getDeviceTelemetryTopic());
|
telemetryTopicFilter = MqttTopicFilterFactory.toFilter(mqttConfig.getDeviceTelemetryTopic());
|
||||||
attributesTopicFilter = MqttTopicFilterFactory.toFilter(mqttConfig.getDeviceAttributesTopic());
|
attributesTopicFilter = MqttTopicFilterFactory.toFilter(mqttConfig.getDeviceAttributesTopic());
|
||||||
if (payloadType.equals(TransportPayloadType.PROTOBUF) && mqttConfig instanceof MqttProtoDeviceProfileTransportConfiguration) {
|
if (payloadType.equals(TransportPayloadType.PROTOBUF) && mqttConfig instanceof MqttProtoDeviceProfileTransportConfiguration) {
|
||||||
MqttProtoDeviceProfileTransportConfiguration protoMqttConfig = (MqttProtoDeviceProfileTransportConfiguration) mqttConfig;
|
updateDynamicMessageDescriptors(mqttConfig);
|
||||||
telemetryDynamicMessageDescriptor = protoMqttConfig.getDynamicMessageDescriptor(protoMqttConfig.getDeviceTelemetryProtoSchema(), "telemetrySchema");
|
|
||||||
attributesDynamicMessageDescriptor = protoMqttConfig.getDynamicMessageDescriptor(protoMqttConfig.getDeviceAttributesProtoSchema(), "attributesSchema");
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
telemetryTopicFilter = MqttTopicFilterFactory.getDefaultTelemetryFilter();
|
telemetryTopicFilter = MqttTopicFilterFactory.getDefaultTelemetryFilter();
|
||||||
attributesTopicFilter = MqttTopicFilterFactory.getDefaultAttributesFilter();
|
attributesTopicFilter = MqttTopicFilterFactory.getDefaultAttributesFilter();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateDynamicMessageDescriptors(MqttDeviceProfileTransportConfiguration mqttConfig) {
|
||||||
|
MqttProtoDeviceProfileTransportConfiguration protoMqttConfig = (MqttProtoDeviceProfileTransportConfiguration) mqttConfig;
|
||||||
|
telemetryDynamicMessageDescriptor = protoMqttConfig.getDynamicMessageDescriptor(protoMqttConfig.getDeviceTelemetryProtoSchema(), "telemetrySchema");
|
||||||
|
attributesDynamicMessageDescriptor = protoMqttConfig.getDynamicMessageDescriptor(protoMqttConfig.getDeviceAttributesProtoSchema(), "attributesSchema");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -88,8 +88,6 @@ export class MqttDeviceProfileTransportConfigurationComponent implements Control
|
|||||||
deviceAttributesTopic: [null, [Validators.required, this.validationMQTTTopic()]],
|
deviceAttributesTopic: [null, [Validators.required, this.validationMQTTTopic()]],
|
||||||
deviceTelemetryTopic: [null, [Validators.required, this.validationMQTTTopic()]],
|
deviceTelemetryTopic: [null, [Validators.required, this.validationMQTTTopic()]],
|
||||||
transportPayloadType: [MqttTransportPayloadType.JSON, Validators.required],
|
transportPayloadType: [MqttTransportPayloadType.JSON, Validators.required],
|
||||||
// deviceTelemetryProtoSchema: [null, Validators.required],
|
|
||||||
// deviceAttributesProtoSchema: [null, Validators.required]
|
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
this.mqttDeviceProfileTransportConfigurationFormGroup.valueChanges.subscribe(() => {
|
this.mqttDeviceProfileTransportConfigurationFormGroup.valueChanges.subscribe(() => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user