RefreshListeners.java

package de.slothsoft.charts.internal;

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

import de.slothsoft.charts.RefreshListener;

/**
 * A class that capsules all the functionality needed to get the {@link RefreshListener}
 * to work correctly.
 *
 * @author Stef Schulz
 * @since 0.1.0
 */

public class RefreshListeners {

	private final Object source;
	final List<RefreshListener> refreshListeners = new ArrayList<>();

	/**
	 * Default constructor.
	 *
	 * @param source the source of the events; can be null
	 */

	public RefreshListeners(Object source) {
		this.source = source;
	}

	/**
	 * Fires a default event for the {@link RefreshListener}s of the source.
	 */

	public void fireRefreshNeeded() {
		fireRefreshNeeded(new RefreshListener.Event(this.source));
	}

	/**
	 * Fires an event for the {@link RefreshListener}s of the source.
	 *
	 * @param event the event to be fired
	 */

	public void fireRefreshNeeded(RefreshListener.Event event) {
		if (this.refreshListeners.isEmpty()) return;
		for (final RefreshListener listener : this.refreshListeners
				.toArray(new RefreshListener[this.refreshListeners.size()])) {
			listener.refreshNeeded(event);
		}
	}

	/**
	 * Adds a refresh listener that is called whenever the source needs to be redrawn by
	 * the GUI.
	 *
	 * @param listener a listener
	 */

	public void addRefreshListener(RefreshListener listener) {
		this.refreshListeners.add(listener);
	}

	/**
	 * Removes a refresh listener that was called whenever the source needed to be redrawn
	 * by the GUI. Does nothing if the listener was never added.
	 *
	 * @param listener a listener
	 */

	public void removeRefreshListener(RefreshListener listener) {
		this.refreshListeners.remove(listener);
	}
}