Skip to content

Commit 6a6e9e0

Browse files
fix simulation adapter not having subscription as a property in the json schema (#447)
1 parent 969b536 commit 6a6e9e0

File tree

6 files changed

+124
-298
lines changed

6 files changed

+124
-298
lines changed

hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/simulation/SimulationAdapterConfig.java

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,22 @@
1919
import com.fasterxml.jackson.annotation.JsonProperty;
2020
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
2121
import com.hivemq.adapter.sdk.api.annotations.ModuleConfigField;
22-
import com.hivemq.adapter.sdk.api.config.PollingContext;
2322
import com.hivemq.adapter.sdk.api.config.ProtocolAdapterConfig;
2423
import com.hivemq.extension.sdk.api.annotations.NotNull;
2524

2625
import java.util.ArrayList;
2726
import java.util.List;
2827

28+
@SuppressWarnings({"unused", "FieldCanBeLocal", "FieldMayBeFinal"})
2929
@JsonPropertyOrder({"minValue", "maxValue", "subscriptions"})
3030
public class SimulationAdapterConfig implements ProtocolAdapterConfig {
3131

3232
private static final @NotNull String ID_REGEX = "^([a-zA-Z_0-9-_])*$";
3333

34+
@JsonProperty("subscriptions")
35+
@ModuleConfigField(title = "subscription", description = "List of subscriptions for the simulation")
36+
private @NotNull List<SimulationPollingContext> pollingContexts = new ArrayList<>();
37+
3438
@JsonProperty(value = "id", required = true)
3539
@ModuleConfigField(title = "Identifier",
3640
description = "Unique identifier for this protocol adapter",
@@ -41,7 +45,6 @@ public class SimulationAdapterConfig implements ProtocolAdapterConfig {
4145
stringMaxLength = 1024)
4246
protected @NotNull String id;
4347

44-
4548
@JsonProperty("pollingIntervalMillis")
4649
@JsonAlias(value = "publishingInterval") //-- Ensure we cater for properties created with legacy configuration
4750
@ModuleConfigField(title = "Polling Interval [ms]",
@@ -57,20 +60,6 @@ public class SimulationAdapterConfig implements ProtocolAdapterConfig {
5760
defaultValue = "10")
5861
private int maxPollingErrorsBeforeRemoval = 10;
5962

60-
public int getPollingIntervalMillis() {
61-
return pollingIntervalMillis;
62-
}
63-
64-
public int getMaxPollingErrorsBeforeRemoval() {
65-
return maxPollingErrorsBeforeRemoval;
66-
}
67-
68-
@JsonProperty("subscriptions")
69-
@ModuleConfigField(title = "Subscriptions",
70-
description = "List of subscriptions for the simulation",
71-
required = true)
72-
private @NotNull List<PollingContext> adapterSubscriptions = new ArrayList<>();
73-
7463
@JsonProperty("minValue")
7564
@ModuleConfigField(title = "Min. Generated Value",
7665
description = "Minimum value of the generated decimal number",
@@ -88,34 +77,27 @@ public int getMaxPollingErrorsBeforeRemoval() {
8877
public SimulationAdapterConfig() {
8978
}
9079

91-
public SimulationAdapterConfig(
92-
final @NotNull String id, final @NotNull List<PollingContext> adapterSubscriptions) {
93-
this.id = id;
94-
this.adapterSubscriptions = adapterSubscriptions;
80+
public @NotNull List<SimulationPollingContext> getPollingContexts() {
81+
return pollingContexts;
9582
}
9683

9784
public @NotNull String getId() {
9885
return id;
9986
}
10087

101-
public void setId(final @NotNull String id) {
102-
this.id = id;
103-
}
104-
105-
106-
public void setSubscriptions(@NotNull List<PollingContext> adapterSubscriptions) {
107-
this.adapterSubscriptions = adapterSubscriptions;
108-
}
109-
110-
public @NotNull List<PollingContext> getSubscriptions() {
111-
return adapterSubscriptions;
112-
}
113-
11488
public int getMinValue() {
11589
return minValue;
11690
}
11791

11892
public int getMaxValue() {
11993
return maxValue;
12094
}
95+
96+
public int getPollingIntervalMillis() {
97+
return pollingIntervalMillis;
98+
}
99+
100+
public int getMaxPollingErrorsBeforeRemoval() {
101+
return maxPollingErrorsBeforeRemoval;
102+
}
121103
}

hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/simulation/SimulationConfigConverter.java

Lines changed: 0 additions & 33 deletions
This file was deleted.
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package com.hivemq.edge.modules.adapters.simulation;
2+
3+
import com.fasterxml.jackson.annotation.JsonCreator;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
import com.hivemq.adapter.sdk.api.annotations.ModuleConfigField;
6+
import com.hivemq.adapter.sdk.api.config.MessageHandlingOptions;
7+
import com.hivemq.adapter.sdk.api.config.PollingContext;
8+
import com.hivemq.adapter.sdk.api.config.UserProperty;
9+
import com.hivemq.extension.sdk.api.annotations.NotNull;
10+
import com.hivemq.extension.sdk.api.annotations.Nullable;
11+
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
15+
public class SimulationPollingContext implements PollingContext {
16+
17+
@JsonProperty(value = "destination", required = true)
18+
@ModuleConfigField(title = "Destination Topic",
19+
description = "The topic to publish data on",
20+
required = true,
21+
format = ModuleConfigField.FieldType.MQTT_TOPIC)
22+
protected @Nullable String destination;
23+
24+
@JsonProperty(value = "qos", required = true)
25+
@ModuleConfigField(title = "QoS",
26+
description = "MQTT Quality of Service level",
27+
required = true,
28+
numberMin = 0,
29+
numberMax = 2,
30+
defaultValue = "0")
31+
protected int qos = 0;
32+
33+
@JsonProperty(value = "messageHandlingOptions")
34+
@ModuleConfigField(title = "Message Handling Options",
35+
description = "This setting defines the format of the resulting MQTT message, either a message per changed tag or a message per subscription that may include multiple data points per sample",
36+
enumDisplayValues = {
37+
"MQTT Message Per Device Tag",
38+
"MQTT Message Per Subscription (Potentially Multiple Data Points Per Sample)"},
39+
defaultValue = "MQTTMessagePerTag")
40+
protected @NotNull MessageHandlingOptions messageHandlingOptions = MessageHandlingOptions.MQTTMessagePerTag;
41+
42+
@JsonProperty(value = "includeTimestamp")
43+
@ModuleConfigField(title = "Include Sample Timestamp In Publish?",
44+
description = "Include the unix timestamp of the sample time in the resulting MQTT message",
45+
defaultValue = "true")
46+
protected @NotNull Boolean includeTimestamp = Boolean.TRUE;
47+
48+
@JsonProperty(value = "includeTagNames")
49+
@ModuleConfigField(title = "Include Tag Names In Publish?",
50+
description = "Include the names of the tags in the resulting MQTT publish",
51+
defaultValue = "false")
52+
protected @NotNull Boolean includeTagNames = Boolean.FALSE;
53+
54+
@JsonProperty(value = "userProperties")
55+
@ModuleConfigField(title = "User Properties",
56+
description = "Arbitrary properties to associate with the subscription",
57+
arrayMaxItems = 10)
58+
private @NotNull List<UserProperty> userProperties = new ArrayList<>();
59+
60+
public SimulationPollingContext() {
61+
}
62+
63+
@JsonCreator
64+
public SimulationPollingContext(
65+
@JsonProperty("destination") @Nullable final String destination,
66+
@JsonProperty("qos") final int qos,
67+
@JsonProperty("userProperties") @Nullable List<UserProperty> userProperties) {
68+
this.destination = destination;
69+
this.qos = qos;
70+
if (userProperties != null) {
71+
this.userProperties = userProperties;
72+
}
73+
}
74+
75+
@Override
76+
public @Nullable String getDestinationMqttTopic() {
77+
return destination;
78+
}
79+
80+
@Override
81+
public int getQos() {
82+
return qos;
83+
}
84+
85+
@Override
86+
public @NotNull MessageHandlingOptions getMessageHandlingOptions() {
87+
return messageHandlingOptions;
88+
}
89+
90+
@Override
91+
public @NotNull Boolean getIncludeTimestamp() {
92+
return includeTimestamp;
93+
}
94+
95+
@Override
96+
public @NotNull Boolean getIncludeTagNames() {
97+
return includeTagNames;
98+
}
99+
100+
@Override
101+
public @NotNull List<UserProperty> getUserProperties() {
102+
return userProperties;
103+
}
104+
}

hivemq-edge/src/main/java/com/hivemq/edge/modules/adapters/simulation/SimulationProtocolAdapter.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
package com.hivemq.edge.modules.adapters.simulation;
1717

1818
import com.hivemq.adapter.sdk.api.ProtocolAdapterInformation;
19-
import com.hivemq.adapter.sdk.api.config.PollingContext;
2019
import com.hivemq.adapter.sdk.api.model.ProtocolAdapterInput;
2120
import com.hivemq.adapter.sdk.api.model.ProtocolAdapterStartInput;
2221
import com.hivemq.adapter.sdk.api.model.ProtocolAdapterStartOutput;
@@ -33,7 +32,7 @@
3332

3433
import static com.hivemq.adapter.sdk.api.state.ProtocolAdapterState.ConnectionStatus.STATELESS;
3534

36-
public class SimulationProtocolAdapter implements PollingProtocolAdapter<PollingContext> {
35+
public class SimulationProtocolAdapter implements PollingProtocolAdapter<SimulationPollingContext> {
3736

3837
private final @NotNull ProtocolAdapterInformation adapterInformation;
3938
private final @NotNull SimulationAdapterConfig adapterConfig;
@@ -71,7 +70,7 @@ public void stop(@NotNull final ProtocolAdapterStopInput input, @NotNull final P
7170

7271
@Override
7372
public void poll(
74-
final @NotNull PollingInput<com.hivemq.adapter.sdk.api.config.PollingContext> pollingInput, final @NotNull PollingOutput pollingOutput) {
73+
final @NotNull PollingInput<SimulationPollingContext> pollingInput, final @NotNull PollingOutput pollingOutput) {
7574
pollingOutput.addDataPoint("sample",
7675
ThreadLocalRandom.current()
7776
.nextDouble(Math.min(adapterConfig.getMinValue(), adapterConfig.getMaxValue()),
@@ -80,8 +79,8 @@ public void poll(
8079
}
8180

8281
@Override
83-
public @NotNull List<PollingContext> getPollingContexts() {
84-
return adapterConfig.getSubscriptions();
82+
public @NotNull List<SimulationPollingContext> getPollingContexts() {
83+
return adapterConfig.getPollingContexts();
8584
}
8685

8786
@Override

hivemq-edge/src/main/java/com/hivemq/protocols/ProtocolAdapterUtils.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@
2222
import com.fasterxml.jackson.databind.module.SimpleAbstractTypeResolver;
2323
import com.fasterxml.jackson.databind.module.SimpleModule;
2424
import com.fasterxml.jackson.databind.type.LogicalType;
25-
import com.hivemq.adapter.sdk.api.config.PollingContext;
2625
import com.hivemq.adapter.sdk.api.config.UserProperty;
27-
import com.hivemq.edge.modules.config.impl.PollingContextImpl;
2826
import com.hivemq.edge.modules.config.impl.UserPropertyImpl;
2927
import com.hivemq.extension.sdk.api.annotations.NotNull;
3028

@@ -44,7 +42,7 @@ public class ProtocolAdapterUtils {
4442
SimpleModule module = new SimpleModule("UserPropertyModule", Version.unknownVersion());
4543
SimpleAbstractTypeResolver resolver = new SimpleAbstractTypeResolver();
4644
resolver.addMapping(UserProperty.class, UserPropertyImpl.class);
47-
resolver.addMapping(PollingContext.class, PollingContextImpl.class);
45+
// resolver.addMapping(PollingContext.class, PollingContextImpl.class);
4846

4947
module.setAbstractTypes(resolver);
5048
copyObjectMapper.registerModule(module);

0 commit comments

Comments
 (0)