package ru.hflabs.rcd.event; import org.springframework.context.ApplicationEvent; import java.util.Date; import java.util.Set; import java.util.concurrent.ConcurrentSkipListSet; /** * Класс <class>ContextEvent</class> реализует базовый класс события приложения * * @see ApplicationEvent */ public abstract class ContextEvent extends ApplicationEvent { private static final long serialVersionUID = 6567957482346867127L; /** Коллекция уникальных идентификаторов слушателей, которыми событие уже обработано (необходимо для того, чтобы не выполнялись AOP прокси) */ private final Set<String> handledListeners; protected ContextEvent(Object source) { super(source); this.handledListeners = new ConcurrentSkipListSet<>(); } /** * @return Возвращает дату события */ public Date getEventDate() { return new Date(getTimestamp()); } /** * Регистрирует слушателя в коллекции обработавших данное событие * * @param id идентификатор слушателя * @return Возвращает <code>TRUE</code>, если слушатель успешно зарегистрирован */ public final boolean registryListener(String id) { return handledListeners.add(id); } /** * Выполняет перекрытие изначального источника события * * @param source новый источник события */ public final void overrideSource(Object source) { this.source = source; } }