// ********************************************************************** // // <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/util/propertyEditor/OptionPropertyEditor.java,v $ // $RCSfile: OptionPropertyEditor.java,v $ // $Revision: 1.2 $ // $Date: 2004/10/14 18:06:31 $ // $Author: dietrick $ // // ********************************************************************** package com.bbn.openmap.util.propertyEditor; import java.awt.Component; import java.awt.event.FocusEvent; import java.util.Properties; import java.util.Vector; import com.bbn.openmap.util.Debug; import com.bbn.openmap.util.PropUtils; /** * The base class for property editors that support a list of options * being presented in the GUI. When defining the properties that the * property editor will use for a PropertyConsumer in the * getPropertyInfo method, just use the name of the property that the * options are being used for: * * <pre> * * * BigNameOptionProperty.options=option1 option2 option3 * BigNameOptionProperty.option1=Big Name 1 * BigNameOptionProperty.option2=Big Name 2 * BigNameOptionProperty.option3=Big Name 3 * * * </pre> * * Don't use the property prefix for the PropertyConsumer being * defined, only the property. */ public abstract class OptionPropertyEditor extends PropertyConsumerPropertyEditor { public final static String OptionsProperty = "options"; public final static String ScopedOptionsProperty = ".options"; protected Component customEditor = null; public OptionPropertyEditor() {} public boolean supportsCustomEditor() { return true; } public void setCustomEditor(Component comp) { customEditor = comp; } /** Returns the editor GUI. */ public Component getCustomEditor() { return customEditor; } public abstract void setOptions(String[] options); /** Sets option based on string. */ public abstract void setValue(Object string); /** Returns String from option choices. */ public abstract String getAsText(); public void focusGained(FocusEvent e) {} public void focusLost(FocusEvent e) { firePropertyChange(); } /** * @param prefix the token to prefix the property names * @param props the <code>Properties</code> object */ public void setProperties(String prefix, Properties props) { // get the options, first from the space separated option // property list, then from the properties using the marker // names from that list. String[] options = null; prefix = PropUtils.getScopedPropertyPrefix(prefix); String optionListProperty = props.getProperty(prefix + OptionsProperty); if (optionListProperty != null) { Vector optionVector = PropUtils.parseSpacedMarkers(optionListProperty); options = new String[optionVector.size()]; for (int i = 0; i < options.length; i++) { options[i] = props.getProperty(prefix + (String) optionVector.elementAt(i)); } setOptions(options); } else { Debug.error("OptionPropertyEditor for " + prefix + " not given options"); } } }