// ********************************************************************** // // <copyright> // // BBN Technologies // 10 Moulton Street // Cambridge, MA 02138 // (617) 873-8000 // // Copyright (C) BBNT Solutions LLC. All rights reserved. // // </copyright> // ********************************************************************** // // $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/proj/ProjectionStackSupport.java,v $ // $RCSfile: ProjectionStackSupport.java,v $ // $Revision: 1.5 $ // $Date: 2009/01/21 01:24:41 $ // $Author: dietrick $ // // ********************************************************************** package com.bbn.openmap.proj; import java.util.ArrayList; import java.util.Iterator; import com.bbn.openmap.util.Debug; /** * This is a utility class that can be used by beans that need support * for handling ProjectionListeners and firing ProjectionEvents. You * can use an instance of this class as a member field of your bean * and delegate work to it. */ public class ProjectionStackSupport implements java.io.Serializable { transient private ArrayList<ProjectionStackTrigger> triggers; /** * Construct a ProjectionStackSupport. */ public ProjectionStackSupport() {} /** * Add a ProjectionStackTrigger. * * @param pt ProjectionStackTrigger */ public synchronized void add(ProjectionStackTrigger pt) { if (triggers == null) { triggers = new ArrayList<ProjectionStackTrigger>(); } if (!triggers.contains(pt)) { triggers.add(pt); } } /** * Remove a ProjectionStackTrigger. * * @param pt ProjectionStackTrigger */ public synchronized void remove(ProjectionStackTrigger pt) { if (triggers == null) { return; } triggers.remove(pt); } /** * Return a cloned list of Triggers. * * @return Vector of triggers, null if none have been added. */ public synchronized ArrayList<ProjectionStackTrigger> getTriggers() { if (triggers == null) { return null; } return (ArrayList<ProjectionStackTrigger>) triggers.clone(); } public int size() { return triggers.size(); } /** * Send a status to all registered triggers. * * @param enableBackProjections there is at least one past * projection in the back cache. * @param enableForwardProjections there is at least one future * projection in the forward cache. Used when a past * projection is being used. */ public void fireStackStatus(boolean enableBackProjections, boolean enableForwardProjections) { ArrayList<ProjectionStackTrigger> targets = getTriggers(); if (triggers == null) { return; } Iterator<ProjectionStackTrigger> iterator = targets.iterator(); while (iterator.hasNext()) { ProjectionStackTrigger target = iterator.next(); if (Debug.debugging("projectionstack")) { Debug.output("ProjectionStackSupport.fireStackStatus(): target is: " + target); } target.updateProjectionStackStatus(enableBackProjections, enableForwardProjections); } } }