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

pl.allegro.tech.hermes.api.SentMessageTrace Maven / Gradle / Ivy

There is a newer version: 2.6.22
Show newest version
package pl.allegro.tech.hermes.api;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.util.Objects;

@JsonIgnoreProperties(ignoreUnknown = true)
public class SentMessageTrace implements MessageTrace {

    private final String messageId;
    private final String batchId;
    private final String subscription;
    private final long timestamp;
    private final SentMessageTraceStatus status;
    private final Integer partition;
    private final Long offset;
    private final TopicName topicName;
    private final String reason;
    private final String message;
    private final String cluster;

    @JsonCreator
    public SentMessageTrace(@JsonProperty("messageId") String messageId,
                            @JsonProperty("batchId") String batchId,
                            @JsonProperty("timestamp") Long timestamp,
                            @JsonProperty("subscription") String subscription,
                            @JsonProperty("topicName") String topicName,
                            @JsonProperty("status") SentMessageTraceStatus status,
                            @JsonProperty("reason") String reason,
                            @JsonProperty("message") String message,
                            @JsonProperty("partition") Integer partition,
                            @JsonProperty("offset") Long offset,
                            @JsonProperty("cluster") String cluster) {
        this.messageId = messageId;
        this.batchId = batchId;
        this.timestamp = timestamp;
        this.subscription = subscription;
        this.status = status;
        this.partition = partition;
        this.offset = offset;
        this.topicName = TopicName.fromQualifiedName(topicName);
        this.reason = reason;
        this.message = message;
        this.cluster = cluster;
    }

    public String getMessageId() {
        return messageId;
    }

    public String getBatchId() {
        return batchId;
    }

    public Long getTimestamp() {
        return timestamp;
    }

    public String getSubscription() {
        return subscription;
    }

    public String getReason() {
        return reason;
    }

    public Integer getPartition() {
        return partition;
    }

    public Long getOffset() {
        return offset;
    }

    @JsonProperty("topicName")
    public String getQualifiedTopicName() {
        return TopicName.toQualifiedName(topicName);
    }

    @JsonIgnore
    public TopicName getTopicName() {
        return topicName;
    }

    public String getMessage() {
        return message;
    }

    public SentMessageTraceStatus getStatus() {
        return status;
    }

    public String getCluster() {
        return cluster;
    }

    @Override
    public int hashCode() {
        return Objects.hash(messageId);
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        final SentMessageTrace other = (SentMessageTrace) obj;
        return Objects.equals(this.messageId, other.messageId)
                && Objects.equals(this.subscription, other.subscription)
                && Objects.equals(this.timestamp, other.timestamp)
                && Objects.equals(this.status, other.status);
    }

    public static class Builder {

        private final String messageId;
        private final String batchId;
        private final SentMessageTraceStatus status;

        private String subscription;
        private long timestamp;
        private Integer partition;
        private Long offset;
        private String topicName;
        private String reason;
        private String message;
        private String cluster;

        private Builder(String messageId, String batchId, SentMessageTraceStatus status) {
            this.messageId = messageId;
            this.batchId = batchId;
            this.status = status;
        }

        public Builder withSubscription(String subscription) {
            this.subscription = subscription;
            return this;
        }

        public Builder withTimestamp(long timestamp) {
            this.timestamp = timestamp;
            return this;
        }

        public Builder withPartition(Integer partition) {
            this.partition = partition;
            return this;
        }

        public Builder withOffset(Long offset) {
            this.offset = offset;
            return this;
        }

        public Builder withTopicName(String topicName) {
            this.topicName = topicName;
            return this;
        }

        public Builder withReason(String reason) {
            this.reason = reason;
            return this;
        }

        public Builder withMessage(String message) {
            this.message = message;
            return this;
        }

        public Builder withCluster(String cluster) {
            this.cluster = cluster;
            return this;
        }

        public static Builder sentMessageTrace(String messageId, String batchId, SentMessageTraceStatus status) {
            return new Builder(messageId, batchId, status);
        }

        public static Builder undeliveredMessage() {
            return new Builder(null, null, SentMessageTraceStatus.DISCARDED);
        }

        public SentMessageTrace build() {
            return new SentMessageTrace(messageId, batchId, timestamp, subscription, topicName, status,
                reason, message, partition, offset, cluster);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy