package prefuse.data.util; import prefuse.data.event.ProjectionListener; import prefuse.util.collections.CopyOnWriteArrayList; /** * Abstract base class for column projection instances. Implements the * listener functionality. * * @author <a href="http://jheer.org">jeffrey heer</a> */ public abstract class AbstractColumnProjection implements ColumnProjection { // ------------------------------------------------------------------------ // Listener Methods private CopyOnWriteArrayList m_listeners; /** * @see prefuse.data.util.ColumnProjection#addProjectionListener(prefuse.data.event.ProjectionListener) */ public void addProjectionListener(ProjectionListener lstnr) { if ( m_listeners == null ) m_listeners = new CopyOnWriteArrayList(); if ( !m_listeners.contains(lstnr) ) m_listeners.add(lstnr); } /** * @see prefuse.data.util.ColumnProjection#removeProjectionListener(prefuse.data.event.ProjectionListener) */ public void removeProjectionListener(ProjectionListener lstnr) { if ( m_listeners != null ) m_listeners.remove(lstnr); if ( m_listeners.size() == 0 ) m_listeners = null; } public void fireUpdate() { if ( m_listeners == null ) return; Object[] lstnrs = m_listeners.getArray(); for ( int i=0; i<lstnrs.length; ++i ) { ((ProjectionListener)lstnrs[i]).projectionChanged(this); } } } // end of abstract class AbstractColumnProjection