All Downloads are FREE. Search and download functionalities are using the official Maven repository.

fi.evolver.basics.spring.messaging.model.MessageDetails Maven / Gradle / Ivy

There is a newer version: 6.7.0
Show newest version
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