Skip to content

Commit

Permalink
Fix userProperties duplicate print
Browse files Browse the repository at this point in the history
  • Loading branch information
LukasBrand committed Oct 13, 2023
1 parent d17eb2c commit dbb791c
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 11 deletions.
31 changes: 30 additions & 1 deletion src/main/java/com/hivemq/cli/utils/json/JsonFormatted.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,42 @@

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.hivemq.client.mqtt.mqtt5.datatypes.Mqtt5UserProperties;
import org.jetbrains.annotations.NotNull;

import java.lang.reflect.Type;

abstract class JsonFormatted {

private static final @NotNull Gson gson = new GsonBuilder().setPrettyPrinting().setLenient().create();
private static final @NotNull Gson gson =
new GsonBuilder().registerTypeAdapter(Mqtt5UserProperties.class, new Mqtt5UserPropertySerializer())
.setPrettyPrinting()
.setLenient()
.create();

public @NotNull String toString() {
return gson.toJson(this);
}

private static class Mqtt5UserPropertySerializer implements JsonSerializer<Mqtt5UserProperties> {
@Override
public @NotNull JsonElement serialize(
final @NotNull Mqtt5UserProperties src,
final @NotNull Type typeOfSrc,
final @NotNull JsonSerializationContext context) {
final JsonArray userPropertiesArray = new JsonArray();
src.asList().forEach(mqtt5UserProperty -> {
final JsonObject userPropertyObject = new JsonObject();
userPropertyObject.addProperty(mqtt5UserProperty.getName().toString(),
mqtt5UserProperty.getValue().toString());
userPropertiesArray.add(userPropertyObject);
});
return userPropertiesArray;
}
}
}
14 changes: 4 additions & 10 deletions src/main/java/com/hivemq/cli/utils/json/JsonMqttPublish.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import com.hivemq.client.mqtt.datatypes.MqttTopic;
import com.hivemq.client.mqtt.datatypes.MqttUtf8String;
import com.hivemq.client.mqtt.mqtt3.message.publish.Mqtt3Publish;
import com.hivemq.client.mqtt.mqtt5.datatypes.Mqtt5UserProperties;
import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5PayloadFormatIndicator;
import com.hivemq.client.mqtt.mqtt5.message.publish.Mqtt5Publish;
import org.jetbrains.annotations.NotNull;
Expand All @@ -33,9 +34,6 @@
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

@SuppressWarnings({"unused", "FieldCanBeLocal"})
public class JsonMqttPublish extends JsonFormatted {
Expand All @@ -50,7 +48,7 @@ public class JsonMqttPublish extends JsonFormatted {
private @Nullable Long messageExpiryInterval;
private @Nullable String responseTopic;
private @Nullable String correlationData;
private @Nullable Map<String, String> userProperties;
private @Nullable Mqtt5UserProperties userProperties;

public JsonMqttPublish(final @NotNull Mqtt3Publish publish, final boolean isBase64) {
payload = payloadToJson(publish.getPayloadAsBytes(), isBase64);
Expand Down Expand Up @@ -78,12 +76,8 @@ public JsonMqttPublish(final @NotNull Mqtt5Publish publish, final boolean isBase
.map(cd -> StandardCharsets.UTF_8.decode(cd).toString()) //
.orElse(null);

if (publish.getUserProperties().asList().size() > 0) {
userProperties = new HashMap<>();
publish.getUserProperties()
.asList()
.forEach(up -> Objects.requireNonNull(userProperties)
.put(up.getName().toString(), up.getValue().toString()));
if (!publish.getUserProperties().asList().isEmpty()) {
userProperties = publish.getUserProperties();
}
}

Expand Down

0 comments on commit dbb791c

Please sign in to comment.