package prefuse.action; import prefuse.Visualization; import prefuse.activity.Activity; import prefuse.util.collections.CopyOnWriteArrayList; /** * Abstract base class for Action implementations that hold a collection * of subclasses. * * @author <a href="http://jheer.org">jeffrey heer</a> */ public abstract class CompositeAction extends Action { protected CopyOnWriteArrayList m_actions = new CopyOnWriteArrayList(); /** * Creates a new run-once CompositeAction. */ public CompositeAction() { super(null, 0); } /** * Creates a new run-once CompositeAction that processes the given * Visualization. * @param vis the {@link prefuse.Visualization} processed by this Action */ public CompositeAction(Visualization vis) { super(vis, 0); } /** * Creates a new CompositeAction of specified duration and default * step time of 20 milliseconds. * @param duration the duration of this Activity, in milliseconds */ public CompositeAction(long duration) { super(null, duration, Activity.DEFAULT_STEP_TIME); } /** * Creates a new CompositeAction of specified duration and default * step time of 20 milliseconds that processes the given * Visualization. * @param vis the {@link prefuse.Visualization} processed by this Action * @param duration the duration of this Activity, in milliseconds */ public CompositeAction(Visualization vis, long duration) { super(vis, duration, Activity.DEFAULT_STEP_TIME); } /** * Creates a new CompositeAction of specified duration and step time. * @param duration the duration of this Activity, in milliseconds * @param stepTime the time to wait in milliseconds between executions * of the action list */ public CompositeAction(long duration, long stepTime) { super(null, duration, stepTime); } // ------------------------------------------------------------------------ /** * Set the Visualization processed by this Action. This also calls * {@link Action#setVisualization(Visualization)} on all Action instances * contained within this composite. * @param vis the {@link prefuse.Visualization} to process */ public void setVisualization(Visualization vis) { super.setVisualization(vis); for ( int i=0; i<m_actions.size(); ++i ) { get(i).setVisualization(vis); } } /** * Returns the number of Actions in the composite. * @return the size of this composite */ public int size() { return m_actions.size(); } /** * Adds an Action to the end of the composite list. * @param a the Action instance to add */ public void add(Action a) { m_actions.add(a); } /** * Adds an Action at the given index. * @param i the index at which to add the Action * @param a the Action instance to add */ public void add(int i, Action a) { m_actions.add(i, a); } /** * Returns the Action at the specified index. * @param i the index * @return the requested Action */ public Action get(int i) { return (Action)m_actions.get(i); } /** * Removes a given Action from the composite. * @param a the Action to remove * @return true if the Action was found and removed, false otherwise */ public boolean remove(Action a) { return m_actions.remove(a); } /** * Removes the Action at the specified index. * @param i the index * @return the removed Action */ public Action remove(int i) { return (Action)m_actions.remove(i); } } // end of class CompositeAction