//********************************************************************** // //<copyright> // //BBN Technologies //10 Moulton Street //Cambridge, MA 02138 //(617) 873-8000 // //Copyright (C) BBNT Solutions LLC. All rights reserved. // //</copyright> //********************************************************************** // //$Source: ///cvs/darwars/ambush/aar/src/com/bbn/ambush/mission/MissionHandler.java,v //$ //$RCSfile: CoordInfoFormatterHandler.java,v $ //$Revision: 1.2 $ //$Date: 2008/10/10 00:57:21 $ //$Author: dietrick $ // //********************************************************************** package com.bbn.openmap.util.coordFormatter; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Properties; import java.util.Vector; import com.bbn.openmap.OMComponent; import com.bbn.openmap.util.ComponentFactory; import com.bbn.openmap.util.PropUtils; /** * The CoordInfoFormatterHandler manages CoordInfoFormatters for all of the * CoordMouseModes, in order to provide a consistent coordinate display across * mouse modes that display coordinate info. If you want different coordinate * information for each CoordMouseMode, set the CoordInfoFormatter on each mouse * mode and don't use this class in the openmap.components property or * MapHandler. Only use this if you want to provide a choice to your users and * you want that choice used over all of your mouse modes. * <P> * This class should be placed in the MapHandler, which you can do via the * properties by adding it's marker name to the openmap.components property * list. The properties look like this (for a marker name * coordFormatterHandler): * * <pre> * * coordFormatterHandler.class=com.bbn.openmap.util.coordFormatter.CoordInfoFormatterHandler * coordFormatterHandler.formatters=dmsFormatter basicFormatter * coordFormatterHandler.dmsFormatter.class=com.bbn.openmap.util.coordFormatter.DMSCoordInfoFormatter * coordFormatterHandler.basicFormatter.class=com.bbn.openmap.util.coordFormatter.BasicCoordInfoFormatter * * </pre> * * @author dietrick */ public class CoordInfoFormatterHandler extends OMComponent { protected List<CoordInfoFormatter> formatters = new ArrayList<CoordInfoFormatter>(); protected CoordInfoFormatter activeFormatter = null; public final static String FORMATTER_PROPERTY = "formatters"; public CoordInfoFormatterHandler() { } public void setProperties(String prefix, Properties props) { super.setProperties(prefix, props); // Create the formatters from the property settings. String realPrefix = PropUtils.getScopedPropertyPrefix(prefix); String markerList = props.getProperty(realPrefix + FORMATTER_PROPERTY); if (markerList != null) { Vector<String> formatterV = PropUtils.parseSpacedMarkers(markerList); Vector<?> formatters = ComponentFactory.create(formatterV, prefix, props); for (Object obj : formatters) { if (obj instanceof CoordInfoFormatter) { CoordInfoFormatter cif = (CoordInfoFormatter) obj; if (activeFormatter == null) { activeFormatter = cif; } this.formatters.add(cif); } } } } public Properties getProperties(Properties props) { props = super.getProperties(props); String prefix = PropUtils.getScopedPropertyPrefix(this); StringBuffer markerList = new StringBuffer(); for (Iterator<CoordInfoFormatter> it = formatters.iterator(); it.hasNext();) { CoordInfoFormatter cif = it.next(); cif.getProperties(props); markerList.append(cif.getPropertyPrefix()).append(" "); props.put(PropUtils.getScopedPropertyPrefix(cif), cif.getClass() .getName()); } props.put(prefix + FORMATTER_PROPERTY, markerList.toString().trim()); return props; } public Properties getPropertyInfo(Properties props) { props = super.getPropertyInfo(props); return props; } public void setActiveFormatter(CoordInfoFormatter formatter) { CoordInfoFormatter oldFormatter = activeFormatter; if (oldFormatter == formatter) { return; } activeFormatter = formatter; firePropertyChange(FORMATTER_PROPERTY, oldFormatter, activeFormatter); } public void addPropertyChangeListener(String property, PropertyChangeListener pcl) { super.addPropertyChangeListener(property, pcl); pcl.propertyChange(new PropertyChangeEvent(this, FORMATTER_PROPERTY, null, activeFormatter)); } }