Package weka.gui

# Class GenericObjectEditor

java.lang.Object
weka.gui.GenericObjectEditor

All Implemented Interfaces:
  `PropertyEditor`, `CustomPanelSupplier`

public class GenericObjectEditor extends Object implements PropertyEditor, CustomPanelSupplier
A PropertyEditor for objects. It can be used either in a static or a dynamic way.
In the static way (`USE_DYNAMIC` is `false`) the objects have been defined as editable in the GenericObjectEditor configuration file, which lists possible values that can be selected from, and themselves configured. The configuration file is called "GenericObjectEditor.props" and may live in either the location given by "user.home" or the current directory (this last will take precedence), and a default properties file is read from the Weka distribution. For speed, the properties file is read only once when the class is first loaded -- this may need to be changed if we ever end up running in a Java OS ;-).
If it is used in a dynamic way (the `UseDynamic` property of the GenericPropertiesCreator props file is set to `true`) then the classes to list are discovered by the `GenericPropertiesCreator` class (it checks the complete classpath).

Version:
  $Revision: 15246 $
Author:
  Len Trigg (trigg@cs.waikato.ac.nz), Xin Xu (xx5@cs.waikato.ac.nz), Richard Kirkby (rkirkby@cs.waikato.ac.nz), FracPete (fracpete at waikato dot ac dot nz)
See Also:
  - `GenericPropertiesCreator`
  - `GenericPropertiesCreator.useDynamic()`
  - `GenericPropertiesCreator.CREATOR_FILE`
  - `ClassDiscovery`

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `class`
  `GenericObjectEditor.CapabilitiesFilterDialog`
  A dialog for selecting Capabilities to look for in the GOE tree.
  `class`
  `GenericObjectEditor.GOEPanel`
  Handles the GUI side of editing values.
  `class`
  `GenericObjectEditor.GOETreeNode`
  A specialized TreeNode for supporting filtering via Capabilities.
  `class`
  `GenericObjectEditor.JTreePopupMenu`
  Creates a popup menu containing a tree that is aware of the screen dimensions.

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `GUIEDITORS_PROPERTY_FILE`
  the properties files containing the class/editor mappings.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `GenericObjectEditor()`
  Default constructor.
  `GenericObjectEditor(boolean canChangeClassInDialog)`
  Constructor that allows specifying whether it is possible to change the class within the editor dialog.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addPropertyChangeListener(PropertyChangeListener l)`
  Adds a PropertyChangeListener who will be notified of value changes.
  `static void`
  `determineClasses()`
  `String`
  `getAsText()`
  Returns null as we don't support getting/setting values as text.
  `Object`
  `getBackup()`
  Returns the backup object (may be null if there is no backup.
  `boolean`
  `getCanChangeClassInDialog()`
  Returns whether the user can change the class in the dialog.
  `Capabilities`
  `getCapabilitiesFilter()`
  Returns the current Capabilities filter, can be null.
  `JPopupMenu`
  `getChooseClassPopupMenu()`
  Returns a popup menu that allows the user to change the class of object.
  `Component`
  `getCustomEditor()`
  Returns the array editing component.
  `JPanel`
  `getCustomPanel()`
  Gets the custom panel used for editing the object.
  `GenericObjectEditorHistory`
  `getHistory()`
  Returns the history of the used setups.
  `String`
  `getJavaInitializationString()`
  Supposedly returns an initialization string to create a Object identical to the current one, including it's state, but this doesn't appear possible given that the initialization string isn't supposed to contain multiple statements.
  `boolean`
  `getShowGlobalInfoToolTips()`
  `String[]`
  `getTags()`
  Returns null as we don't support getting values as tags.
  `Object`
  `getValue()`
  Gets the current, configured object.
  `boolean`
  `isPaintable()`
  Returns true to indicate that we can paint a representation of the Object.
  `static void`
  `main(String[] args)`
  Tests out the Object editor from the command line.
  `static Object`
  `makeCopy(Object source)`
  Makes a copy of an object using serialization if the given object is not an option handler.
  `void`
  `paintValue(Graphics gfx, Rectangle box)`
  Paints a representation of the current Object.
  `static void`
  `registerEditor(String name, String value)`
  `static void`
  `registerEditors()`
  registers all the editors in Weka.
  `void`
  `removeCapabilitiesFilter()`
  Removes the current Capabilities filter.
  `void`
  `removePropertyChangeListener(PropertyChangeListener l)`
  Removes a PropertyChangeListener.
  `void`
  `setAsText(String text)`
  Returns null as we don't support getting/setting values as text.
  `void`
  `setCanChangeClassInDialog(boolean value)`
  Sets whether the user can change the class in the dialog.
  `void`
  `setCapabilitiesFilter(Capabilities value)`
  Sets the capabilities to use for filtering.
  `void`
  `setClassType(Class<?> type)`
  Sets the class of values that can be edited.
  `void`
  `setDefaultValue()`
  Sets the current object to be the default, taken as the first item in the chooser.
  `void`
  `setEnabled(boolean newVal)`
  Sets whether the editor is "enabled", meaning that the current values will be painted.
  `static void`
  `setShowGlobalInfoToolTips(boolean show)`
  `void`
  `setValue(Object o)`
  Sets the current Object.
  `static Hashtable<String,String>`
  `sortClassesByRoot(String classes)`
  parses the given string of classes separated by ", " and returns the a hashtable with as many entries as there are different root elements in the class names (the key is the root element).
  `boolean`
  `supportsCustomEditor()`
  Returns true because we do support a custom editor.
  `boolean`
  `wasCancelPressed()`
  True if the cancel button was used to close the editor.

  ### Methods inherited from class java.lang.Object

  `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### GUIEDITORS_PROPERTY_FILE

    public static final String GUIEDITORS_PROPERTY_FILE
    the properties files containing the class/editor mappings.
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### GenericObjectEditor

    public GenericObjectEditor()
    Default constructor.

  - ### GenericObjectEditor

    public GenericObjectEditor(boolean canChangeClassInDialog)
    Constructor that allows specifying whether it is possible to change the class within the editor dialog.
    Parameters:
      `canChangeClassInDialog` - whether the user can change the class

- ## Method Details

  - ### setShowGlobalInfoToolTips

    public static void setShowGlobalInfoToolTips(boolean show)

  - ### getShowGlobalInfoToolTips

    public boolean getShowGlobalInfoToolTips()

  - ### determineClasses

    public static void determineClasses()

  - ### registerEditors

    public static void registerEditors()
    registers all the editors in Weka.

  - ### registerEditor

    public static void registerEditor(String name, String value)

  - ### setCanChangeClassInDialog

    public void setCanChangeClassInDialog(boolean value)
    Sets whether the user can change the class in the dialog.
    Parameters:
      `value` - if true then the user can change the class

  - ### getCanChangeClassInDialog

    public boolean getCanChangeClassInDialog()
    Returns whether the user can change the class in the dialog.
    Returns:
      true if the user can change the class

  - ### getBackup

    public Object getBackup()
    Returns the backup object (may be null if there is no backup.
    Returns:
      the backup object

  - ### sortClassesByRoot

    public static Hashtable<String,String> sortClassesByRoot(String classes)
    parses the given string of classes separated by ", " and returns the a hashtable with as many entries as there are different root elements in the class names (the key is the root element). E.g. if there's only "weka." as the prefix for all classes the a hashtable of size 1 is returned. if NULL is the input, then NULL is also returned.
    Parameters:
      `classes` - the classnames to work on
    Returns:
      for each distinct root element in the classnames, one entry in the hashtable (with the root element as key)

  - ### setEnabled

    public void setEnabled(boolean newVal)
    Sets whether the editor is "enabled", meaning that the current values will be painted.
    Parameters:
      `newVal` - a value of type 'boolean'

  - ### setClassType

    public void setClassType(Class<?> type)
    Sets the class of values that can be edited.
    Parameters:
      `type` - a value of type 'Class'

  - ### setDefaultValue

    public void setDefaultValue()
    Sets the current object to be the default, taken as the first item in the chooser.

  - ### wasCancelPressed

    public boolean wasCancelPressed()
    True if the cancel button was used to close the editor.
    Returns:
      true if the cancel button was pressed the last time the editor was closed

  - ### setValue

    public void setValue(Object o)
    Sets the current Object. If the Object is in the Object chooser, this becomes the selected item (and added to the chooser if necessary). Makes a completely independent copy of the incoming object for further use. If the incoming object is not an option handler, this is done by creating a deep copy using serialization.
    Specified by:
      `setValue` in interface `PropertyEditor`
    Parameters:
      `o` - the object to be edited

  - ### getValue

    public Object getValue()
    Gets the current, configured object. Returns a completely independent copy of the configured object for further use.
    Specified by:
      `getValue` in interface `PropertyEditor`
    Returns:
      the current, configured object

  - ### getJavaInitializationString

    public String getJavaInitializationString()
    Supposedly returns an initialization string to create a Object identical to the current one, including it's state, but this doesn't appear possible given that the initialization string isn't supposed to contain multiple statements.
    Specified by:
      `getJavaInitializationString` in interface `PropertyEditor`
    Returns:
      the java source code initialisation string

  - ### isPaintable

    public boolean isPaintable()
    Returns true to indicate that we can paint a representation of the Object.
    Specified by:
      `isPaintable` in interface `PropertyEditor`
    Returns:
      true

  - ### paintValue

    public void paintValue(Graphics gfx, Rectangle box)
    Paints a representation of the current Object.
    Specified by:
      `paintValue` in interface `PropertyEditor`
    Parameters:
      `gfx` - the graphics context to use
      `box` - the area we are allowed to paint into

  - ### getAsText

    public String getAsText()
    Returns null as we don't support getting/setting values as text.
    Specified by:
      `getAsText` in interface `PropertyEditor`
    Returns:
      null

  - ### setAsText

    public void setAsText(String text)
    Returns null as we don't support getting/setting values as text.
    Specified by:
      `setAsText` in interface `PropertyEditor`
    Parameters:
      `text` - the text value
    Throws:
      `IllegalArgumentException` - as we don't support getting/setting values as text.

  - ### getTags

    public String[] getTags()
    Returns null as we don't support getting values as tags.
    Specified by:
      `getTags` in interface `PropertyEditor`
    Returns:
      null

  - ### supportsCustomEditor

    public boolean supportsCustomEditor()
    Returns true because we do support a custom editor.
    Specified by:
      `supportsCustomEditor` in interface `PropertyEditor`
    Returns:
      true

  - ### getCustomEditor

    public Component getCustomEditor()
    Returns the array editing component.
    Specified by:
      `getCustomEditor` in interface `PropertyEditor`
    Returns:
      a value of type 'java.awt.Component'

  - ### addPropertyChangeListener

    public void addPropertyChangeListener(PropertyChangeListener l)
    Adds a PropertyChangeListener who will be notified of value changes.
    Specified by:
      `addPropertyChangeListener` in interface `PropertyEditor`
    Parameters:
      `l` - a value of type 'PropertyChangeListener'

  - ### removePropertyChangeListener

    public void removePropertyChangeListener(PropertyChangeListener l)
    Removes a PropertyChangeListener.
    Specified by:
      `removePropertyChangeListener` in interface `PropertyEditor`
    Parameters:
      `l` - a value of type 'PropertyChangeListener'

  - ### getCustomPanel

    public JPanel getCustomPanel()
    Gets the custom panel used for editing the object.
    Specified by:
      `getCustomPanel` in interface `CustomPanelSupplier`
    Returns:
      the panel

  - ### getChooseClassPopupMenu

    public JPopupMenu getChooseClassPopupMenu()
    Returns a popup menu that allows the user to change the class of object.
    Returns:
      a JPopupMenu that when shown will let the user choose the class

  - ### setCapabilitiesFilter

    public void setCapabilitiesFilter(Capabilities value)
    Sets the capabilities to use for filtering.
    Parameters:
      `value` - the object to get the filter capabilities from

  - ### getCapabilitiesFilter

    public Capabilities getCapabilitiesFilter()
    Returns the current Capabilities filter, can be null.
    Returns:
      the current Capabiliities used for filtering

  - ### removeCapabilitiesFilter

    public void removeCapabilitiesFilter()
    Removes the current Capabilities filter.

  - ### makeCopy

    public static Object makeCopy(Object source) throws Exception
    Makes a copy of an object using serialization if the given object is not an option handler. Otherwise, it will use the makeCopy() method in OptionHandler.
    Parameters:
      `source` - the object to copy
    Returns:
      a copy of the source object
    Throws:
      `Exception` - if the copy fails

  - ### getHistory

    public GenericObjectEditorHistory getHistory()
    Returns the history of the used setups.
    Returns:
      the history

  - ### main

    public static void main(String[] args)
    Tests out the Object editor from the command line.
    Parameters:
      `args` - may contain the class name of a Object to edit