NotifyingList.java

/**
 * VStar: a statistical analysis tool for variable star data.
 * Copyright (C) 2009  AAVSO (http://www.aavso.org/)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 */
package org.aavso.tools.vstar.util.notification;

import java.util.List;

/**
 * This is the abstract base class for all lists with elements of type E 
 * that will notify listeners with a message of type ListChangeMessage. What 
 * we are saying here is that we want to be able to have a drop-in replacement 
 * for any old List<E> that will also provide us with a generic optional 
 * message notification capability. This class gets the generic message 
 * notification capability for free but requires realization as a concrete list 
 * type. This is acceptable so long as the cost of the interface mechanism isn't
 * too high. Then again, we have that problem with any List<E>. Since subclasses 
 * are unlikely to invent their own lists, instead realising the interface
 * by aggregating an ArrayList<E> or LinkedList<E> member, there will be a
 * double indirection for all list operations. The question that hasn't 
 * been answered yet is: what is the notification policy? In other words,
 * we know what will be notified (ListChangeMessage) but not when or why.
 * The expected behavior of any subclass is that listeners will be notified 
 * whenever its underlying list changes.
 */
public abstract class NotifyingList<E> implements List<E> {
	
	protected Notifier<ListChangeMessage<E>> notifier;
}