package rtt.ui.views.utils; import java.util.ArrayList; import java.util.List; import rtt.ui.content.IContent; import rtt.ui.content.ReloadInfo.Content; public class RttListenerManager<T extends IContent> { private List<IRttListener<T>> listeners; private T currentContent; public RttListenerManager() { listeners = new ArrayList<IRttListener<T>>(); } public final void addListener(IRttListener<T> listener) { listeners.add(listener); } public final void removeListener(IRttListener<T> listener) { listeners.remove(listener); } public void refreshListener() { for (IRttListener<T> listener : listeners) { listener.refresh(); } } public boolean setCurrentContent(T newContent) { return setCurrentContent(newContent, false); } /** * Updates all listeners to handle the (new) current content. * This method is for example used to update all views. Without * the {@code force} parameter listeners will only be updated * if the *new* current content doesn't equal the *old* current content. * * @param newContent the *new* current {@link Content} * @param force force an update * @return {@code true}, if update has occurred. */ public boolean setCurrentContent(T newContent, boolean force) { if (force || currentContent != newContent) { currentContent = newContent; for (IRttListener<T> listener : listeners) { listener.update(newContent); } additionalOperations(currentContent); return true; } return false; } protected void additionalOperations(T content) {} public T getCurrentContent() { return currentContent; } }