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

org.elder.sourcerer.EventSubscriptionHandlerBase Maven / Gradle / Ivy

package org.elder.sourcerer;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.concurrent.atomic.AtomicReference;

/**
 * Base class simplifying the implementation of EventSubscriptionHandler with default behavior for
 * all methods except processEvent().
 */
public abstract class EventSubscriptionHandlerBase implements EventSubscriptionHandler {
    private static final Logger DEFAULT_LOGGER
            = LoggerFactory.getLogger(EventSubscriptionHandlerBase.class.getName());
    private AtomicReference subscriptionToken;
    private Logger logger;

    protected EventSubscriptionHandlerBase(final Logger logger) {
        this.logger = logger;
        this.subscriptionToken = new AtomicReference<>(null);
    }

    protected EventSubscriptionHandlerBase() {
        this(DEFAULT_LOGGER);
    }

    @Override
    public void subscriptionStarted(final SubscriptionToken subscriptionToken) {
        logger.info("Subscription started");
        this.subscriptionToken.set(subscriptionToken);
    }

    @Override
    public void subscriptionRestarting() {
        logger.warn("Subscription restarted");
    }

    @Override
    public void subscriptionFailed(final Throwable error) {
        logger.error("Subscription failed", error);
    }

    @Override
    public void subscriptionStopped() {
        logger.info("Subscription terminated cleanly");
    }

    @Override
    public void subscriptionCaughtUp() {
        logger.debug("Subscription has caught up with historical events...");
    }

    @Override
    public boolean handleError(final Throwable ex, final int retryCount) {
        logger.warn("Error in subscription after " + retryCount + " attempts, restarting", ex);
        return true;
    }

    public void closeSubscripton() {
        SubscriptionToken token = subscriptionToken.get();
        if (token != null) {
            token.stop();
        } else {
            throw new IllegalStateException("Unable to stop subscription that has not yet started");
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy