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

pl.allegro.tech.hermes.api.Subscription 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 jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import pl.allegro.tech.hermes.api.constraints.ValidContentType;

import java.time.Instant;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

import static pl.allegro.tech.hermes.api.constraints.Names.ALLOWED_NAME_REGEX;

@ValidContentType(message = "AVRO content type is not supported in BATCH delivery mode")
@JsonIgnoreProperties(value = {"createdAt", "modifiedAt"}, allowGetters = true)
public class Subscription implements Anonymizable {

    @NotNull
    private final MonitoringDetails monitoringDetails;
    private final SubscriptionName subscriptionName;
    @Valid
    @NotNull
    private TopicName topicName;
    @NotEmpty
    @Pattern(regexp = ALLOWED_NAME_REGEX)
    private String name;
    private State state = State.PENDING;
    @NotNull
    @Valid
    private EndpointAddress endpoint;
    @NotNull
    private ContentType contentType = ContentType.JSON;
    @NotNull
    private String description;
    @Valid
    private SubscriptionPolicy serialSubscriptionPolicy;
    @Valid
    private BatchSubscriptionPolicy batchSubscriptionPolicy;
    /**
     * Use trackingMode field instead.
     */
    @Deprecated
    private boolean trackingEnabled = false;
    private TrackingMode trackingMode = TrackingMode.TRACKING_OFF;
    private boolean http2Enabled = false;
    private boolean profilingEnabled = false;
    private long profilingThresholdMs = 0;
    @Valid
    @NotNull
    private OwnerId owner;
    @NotNull
    private DeliveryType deliveryType = DeliveryType.SERIAL;
    @NotNull
    private SubscriptionMode mode = SubscriptionMode.ANYCAST;
    private List filters = new ArrayList<>();

    private List
headers; private EndpointAddressResolverMetadata endpointAddressResolverMetadata; @Valid private SubscriptionOAuthPolicy oAuthPolicy; private boolean subscriptionIdentityHeadersEnabled; private boolean autoDeleteWithTopicEnabled; private Instant createdAt; private Instant modifiedAt; private Subscription(TopicName topicName, String name, EndpointAddress endpoint, State state, String description, Object subscriptionPolicy, boolean trackingEnabled, TrackingMode trackingMode, OwnerId owner, MonitoringDetails monitoringDetails, ContentType contentType, DeliveryType deliveryType, List filters, SubscriptionMode mode, List
headers, EndpointAddressResolverMetadata endpointAddressResolverMetadata, SubscriptionOAuthPolicy oAuthPolicy, boolean http2Enabled, boolean profilingEnabled, long profilingThresholdMs, boolean subscriptionIdentityHeadersEnabled, boolean autoDeleteWithTopicEnabled) { this.topicName = topicName; this.name = name; this.endpoint = endpoint; this.state = state != null ? state : State.PENDING; this.description = description; this.trackingEnabled = trackingEnabled; this.trackingMode = trackingMode; this.owner = owner; this.monitoringDetails = monitoringDetails == null ? MonitoringDetails.EMPTY : monitoringDetails; this.contentType = contentType == null ? ContentType.JSON : contentType; this.deliveryType = deliveryType; this.batchSubscriptionPolicy = this.deliveryType == DeliveryType.BATCH ? (BatchSubscriptionPolicy) subscriptionPolicy : null; this.serialSubscriptionPolicy = this.deliveryType == DeliveryType.SERIAL ? (SubscriptionPolicy) subscriptionPolicy : null; this.filters = filters; this.mode = mode; this.http2Enabled = http2Enabled; this.profilingEnabled = profilingEnabled; this.profilingThresholdMs = profilingThresholdMs; this.subscriptionName = new SubscriptionName(name, topicName); this.headers = headers; this.endpointAddressResolverMetadata = endpointAddressResolverMetadata; this.oAuthPolicy = oAuthPolicy; this.subscriptionIdentityHeadersEnabled = subscriptionIdentityHeadersEnabled; this.autoDeleteWithTopicEnabled = autoDeleteWithTopicEnabled; } public static Subscription createSerialSubscription(TopicName topicName, String name, EndpointAddress endpoint, State state, String description, SubscriptionPolicy subscriptionPolicy, boolean trackingEnabled, TrackingMode trackingMode, OwnerId owner, MonitoringDetails monitoringDetails, ContentType contentType, List filters, SubscriptionMode mode, List
headers, EndpointAddressResolverMetadata endpointAddressResolverMetadata, SubscriptionOAuthPolicy oAuthPolicy, boolean http2Enabled, boolean profilingEnabled, long profilingThresholdMs, boolean subscriptionIdentityHeadersEnabled, boolean autoDeleteWithTopicEnabled) { return new Subscription(topicName, name, endpoint, state, description, subscriptionPolicy, trackingEnabled, trackingMode, owner, monitoringDetails, contentType, DeliveryType.SERIAL, filters, mode, headers, endpointAddressResolverMetadata, oAuthPolicy, http2Enabled, profilingEnabled, profilingThresholdMs, subscriptionIdentityHeadersEnabled, autoDeleteWithTopicEnabled); } public static Subscription createBatchSubscription(TopicName topicName, String name, EndpointAddress endpoint, State state, String description, BatchSubscriptionPolicy subscriptionPolicy, boolean trackingEnabled, TrackingMode trackingMode, OwnerId owner, MonitoringDetails monitoringDetails, ContentType contentType, List filters, List
headers, EndpointAddressResolverMetadata endpointAddressResolverMetadata, SubscriptionOAuthPolicy oAuthPolicy, boolean http2Enabled, boolean subscriptionIdentityHeadersEnabled, boolean autoDeleteWithTopicEnabled) { return new Subscription(topicName, name, endpoint, state, description, subscriptionPolicy, trackingEnabled, trackingMode, owner, monitoringDetails, contentType, DeliveryType.BATCH, filters, SubscriptionMode.ANYCAST, headers, endpointAddressResolverMetadata, oAuthPolicy, http2Enabled, false, 0, subscriptionIdentityHeadersEnabled, autoDeleteWithTopicEnabled); } @JsonCreator public static Subscription create( @JsonProperty("topicName") String topicName, @JsonProperty("name") String name, @JsonProperty("endpoint") EndpointAddress endpoint, @JsonProperty("state") State state, @JsonProperty("description") String description, @JsonProperty("subscriptionPolicy") Map subscriptionPolicy, @JsonProperty("trackingEnabled") boolean trackingEnabled, @JsonProperty("trackingMode") String trackingMode, @JsonProperty("owner") OwnerId owner, @JsonProperty("monitoringDetails") MonitoringDetails monitoringDetails, @JsonProperty("contentType") ContentType contentType, @JsonProperty("deliveryType") DeliveryType deliveryType, @JsonProperty("filters") List filters, @JsonProperty("mode") SubscriptionMode mode, @JsonProperty("headers") List
headers, @JsonProperty("endpointAddressResolverMetadata") EndpointAddressResolverMetadata endpointAddressResolverMetadata, @JsonProperty("oAuthPolicy") SubscriptionOAuthPolicy oAuthPolicy, @JsonProperty("http2Enabled") boolean http2Enabled, @JsonProperty("profilingEnabled") boolean profilingEnabled, @JsonProperty("profilingThresholdMs") long profilingThresholdMs, @JsonProperty("subscriptionIdentityHeadersEnabled") boolean subscriptionIdentityHeadersEnabled, @JsonProperty("autoDeleteWithTopicEnabled") boolean autoDeleteWithTopicEnabled) { DeliveryType validDeliveryType = deliveryType == null ? DeliveryType.SERIAL : deliveryType; SubscriptionMode subscriptionMode = mode == null ? SubscriptionMode.ANYCAST : mode; Map validSubscriptionPolicy = subscriptionPolicy == null ? new HashMap<>() : subscriptionPolicy; TrackingMode validTrackingMode = TrackingMode.fromString(trackingMode) .orElse(trackingEnabled ? TrackingMode.TRACK_ALL : TrackingMode.TRACKING_OFF); boolean validTrackingEnabled = validTrackingMode != TrackingMode.TRACKING_OFF; return new Subscription( TopicName.fromQualifiedName(topicName), name, endpoint, state, description, validDeliveryType == DeliveryType.SERIAL ? SubscriptionPolicy.create(validSubscriptionPolicy) : BatchSubscriptionPolicy.create(validSubscriptionPolicy), validTrackingEnabled, validTrackingMode, owner, monitoringDetails, contentType, validDeliveryType, filters == null ? Collections.emptyList() : filters, subscriptionMode, headers == null ? Collections.emptyList() : headers, endpointAddressResolverMetadata == null ? EndpointAddressResolverMetadata.empty() : endpointAddressResolverMetadata, oAuthPolicy, http2Enabled, profilingEnabled, profilingThresholdMs, subscriptionIdentityHeadersEnabled, autoDeleteWithTopicEnabled ); } @Override public int hashCode() { return Objects.hash(endpoint, topicName, name, description, serialSubscriptionPolicy, batchSubscriptionPolicy, trackingEnabled, trackingMode, owner, monitoringDetails, contentType, filters, mode, headers, endpointAddressResolverMetadata, oAuthPolicy, http2Enabled, subscriptionIdentityHeadersEnabled); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } final Subscription other = (Subscription) obj; return Objects.equals(this.endpoint, other.endpoint) && Objects.equals(this.topicName, other.topicName) && Objects.equals(this.name, other.name) && Objects.equals(this.description, other.description) && Objects.equals(this.serialSubscriptionPolicy, other.serialSubscriptionPolicy) && Objects.equals(this.batchSubscriptionPolicy, other.batchSubscriptionPolicy) && Objects.equals(this.trackingEnabled, other.trackingEnabled) && Objects.equals(this.trackingMode, other.trackingMode) && Objects.equals(this.owner, other.owner) && Objects.equals(this.monitoringDetails, other.monitoringDetails) && Objects.equals(this.contentType, other.contentType) && Objects.equals(this.filters, other.filters) && Objects.equals(this.mode, other.mode) && Objects.equals(this.headers, other.headers) && Objects.equals(this.endpointAddressResolverMetadata, other.endpointAddressResolverMetadata) && Objects.equals(this.http2Enabled, other.http2Enabled) && Objects.equals(this.profilingEnabled, other.profilingEnabled) && Objects.equals(this.profilingThresholdMs, other.profilingThresholdMs) && Objects.equals(this.oAuthPolicy, other.oAuthPolicy) && Objects.equals(this.subscriptionIdentityHeadersEnabled, other.subscriptionIdentityHeadersEnabled) && Objects.equals(this.autoDeleteWithTopicEnabled, other.autoDeleteWithTopicEnabled); } @JsonIgnore public SubscriptionName getQualifiedName() { return subscriptionName; } public EndpointAddress getEndpoint() { return endpoint; } @JsonProperty("topicName") public String getQualifiedTopicName() { return TopicName.toQualifiedName(topicName); } @JsonIgnore public TopicName getTopicName() { return topicName; } public String getName() { return name; } public String getDescription() { return description; } public State getState() { return state; } public void setState(State state) { this.state = state; } @JsonProperty("subscriptionPolicy") public Object getSubscriptionPolicy() { return isBatchSubscription() ? batchSubscriptionPolicy : serialSubscriptionPolicy; } public boolean isTrackingEnabled() { return trackingMode != TrackingMode.TRACKING_OFF; } @JsonProperty("trackingMode") public String getTrackingModeString() { return trackingMode.getValue(); } @JsonIgnore public TrackingMode getTrackingMode() { return trackingMode; } public OwnerId getOwner() { return owner; } public MonitoringDetails getMonitoringDetails() { return monitoringDetails; } public ContentType getContentType() { return contentType; } public DeliveryType getDeliveryType() { return deliveryType; } public List getFilters() { return Collections.unmodifiableList(filters); } public List
getHeaders() { return Collections.unmodifiableList(headers); } public EndpointAddressResolverMetadata getEndpointAddressResolverMetadata() { return endpointAddressResolverMetadata; } @JsonIgnore public boolean isBatchSubscription() { return this.deliveryType == DeliveryType.BATCH; } @JsonIgnore public BatchSubscriptionPolicy getBatchSubscriptionPolicy() { return batchSubscriptionPolicy; } @JsonIgnore public SubscriptionPolicy getSerialSubscriptionPolicy() { return serialSubscriptionPolicy; } public void setSerialSubscriptionPolicy(SubscriptionPolicy serialSubscriptionPolicy) { this.serialSubscriptionPolicy = serialSubscriptionPolicy; } @JsonIgnore public boolean isActive() { return state == State.ACTIVE || state == State.PENDING; } public SubscriptionMode getMode() { return mode; } @JsonProperty("oAuthPolicy") public SubscriptionOAuthPolicy getOAuthPolicy() { return oAuthPolicy; } @JsonIgnore public boolean hasOAuthPolicy() { return oAuthPolicy != null; } @JsonIgnore public boolean isSeverityNotImportant() { return getMonitoringDetails().getSeverity() == MonitoringDetails.Severity.NON_IMPORTANT; } public boolean isHttp2Enabled() { return http2Enabled; } public boolean isProfilingEnabled() { return profilingEnabled; } public long getProfilingThresholdMs() { return profilingThresholdMs; } public boolean isSubscriptionIdentityHeadersEnabled() { return subscriptionIdentityHeadersEnabled; } public Instant getCreatedAt() { return createdAt; } public void setCreatedAt(Long createdAt) { this.createdAt = Instant.ofEpochMilli(createdAt); } public Instant getModifiedAt() { return modifiedAt; } public void setModifiedAt(Long modifiedAt) { this.modifiedAt = Instant.ofEpochMilli(modifiedAt); } public boolean isAutoDeleteWithTopicEnabled() { return autoDeleteWithTopicEnabled; } @Override public Subscription anonymize() { if (getEndpoint() != null && getEndpoint().containsCredentials() || hasOAuthPolicy()) { return new Subscription( topicName, name, endpoint.anonymize(), state, description, deliveryType == DeliveryType.BATCH ? batchSubscriptionPolicy : serialSubscriptionPolicy, trackingEnabled, trackingMode, owner, monitoringDetails, contentType, deliveryType, filters, mode, headers, endpointAddressResolverMetadata, oAuthPolicy != null ? oAuthPolicy.anonymize() : null, http2Enabled, profilingEnabled, profilingThresholdMs, subscriptionIdentityHeadersEnabled, autoDeleteWithTopicEnabled ); } return this; } @Override public String toString() { return "Subscription(" + getQualifiedName() + ")"; } public enum State { PENDING, ACTIVE, SUSPENDED } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy