EventSavingSubscriber.java

package com.reallifedeveloper.common.domain.event;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * A {@link DomainEventSubscriber} that saves all events in memory.
 *
 * @author RealLifeDeveloper
 */
public class EventSavingSubscriber implements DomainEventSubscriber<DomainEvent> {

    private final List<DomainEvent> events = new ArrayList<>();

    @Override
    public void handleEvent(DomainEvent event) {
        events.add(event);

    }

    @Override
    public Class<? extends DomainEvent> eventType() {
        return DomainEvent.class;
    }

    /**
     * Gives an unmodifiable list of the events that have been handled so far.
     *
     * @return a list of the events that have been handled.
     */
    public List<DomainEvent> events() {
        return Collections.unmodifiableList(events);
    }

    /**
     * Removes all handled events.
     */
    public void clear() {
        events.clear();
    }

}