
fi.evolver.basics.spring.messaging.model.MessageDetails Maven / Gradle / Ivy
package fi.evolver.basics.spring.messaging.model;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import fi.evolver.basics.spring.messaging.entity.MessageData;
import fi.evolver.basics.spring.messaging.entity.MessageMetadata;
import fi.evolver.utils.GzipUtils;
import fi.evolver.utils.NullSafetyUtils;
public class MessageDetails {
private static final String PROPERTY_MESSAGE_GROUP_ID = "MessageGroupId";
private static final String PROPERTY_PRIORITY = "Priority";
private final byte[] compressedData;
private final Map properties;
private MessageDetails(byte[] data, Map properties) {
this.compressedData = data;
this.properties = new LinkedHashMap<>(NullSafetyUtils.denull(properties, Collections.emptyMap()));
}
public byte[] getCompressedData() {
return compressedData;
}
public Map getProperties() {
return properties;
}
public String getMessageGroupId() {
return properties.getOrDefault(PROPERTY_MESSAGE_GROUP_ID, "Default").toString();
}
public long getPriority() {
return Optional.ofNullable(properties.get(PROPERTY_PRIORITY))
.filter(Long.class::isInstance)
.map(Long.class::cast)
.orElse(100L);
}
public MessageData createMessageData() {
return new MessageData(compressedData, createMetadata());
}
private List createMetadata() {
return properties.entrySet().stream()
.filter(e -> e.getKey() != null && e.getValue() != null)
.map(e -> new MessageMetadata(e.getKey(), e.getValue().toString()))
.collect(Collectors.toList());
}
public static MessageDetails create(String data) {
return create(data, new LinkedHashMap<>());
}
public static MessageDetails create(String data, Map properties) {
return create(data.getBytes(StandardCharsets.UTF_8), properties);
}
public static MessageDetails create(byte[] data, Map properties) {
return createZipped(GzipUtils.zip(data), properties);
}
public static MessageDetails createZipped(byte[] compressedData, Map properties) {
return new MessageDetails(compressedData, properties);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy