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

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

package pl.allegro.tech.hermes.api;

import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import jakarta.validation.constraints.NotEmpty;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
  @JsonSubTypes.Type(value = OfflineRetransmissionFromViewRequest.class, name = "view"),
  @JsonSubTypes.Type(value = OfflineRetransmissionFromTopicRequest.class, name = "topic")
})
public sealed class OfflineRetransmissionRequest
    permits OfflineRetransmissionFromTopicRequest, OfflineRetransmissionFromViewRequest {

  private static final List formatters =
      List.of(
          DateTimeFormatter.ISO_INSTANT,
          DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'").withZone(ZoneId.of("UTC")),
          DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm'Z'").withZone(ZoneId.of("UTC")));
  private static final Logger logger = LoggerFactory.getLogger(OfflineRetransmissionRequest.class);

  private final RetransmissionType type;
  @NotEmpty private final String targetTopic;

  public OfflineRetransmissionRequest(RetransmissionType type, String targetTopic) {
    this.type = type;
    this.targetTopic = targetTopic;
  }

  public RetransmissionType getType() {
    return type;
  }

  public String getTargetTopic() {
    return targetTopic;
  }

  public enum RetransmissionType {
    VIEW,
    TOPIC
  }

  public static Instant initializeTimestamp(String timestamp) {
    if (timestamp == null) {
      return null;
    }

    for (DateTimeFormatter formatter : formatters) {
      try {
        return formatter.parse(timestamp, Instant::from);
      } catch (DateTimeParseException e) {
        // ignore
      }
    }

    logger.warn("Provided date [{}] has an invalid format", timestamp);
    return null;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy