gt:         return RevisionUtils.extract("$Revision: 1.7 $");
context: /*
   *    This program is free software; you can redistribute it and/or modify
   *    it under the terms of the GNU General Public License as published by
   *    the Free Software Foundation; either version 2 of the License, or
   *    (at your option) any later version.
   *
   *    This program is distributed in the hope that it will be useful,
   *    but WITHOUT ANY WARRANTY; without even the implied warranty of
   *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   *    GNU General Public License for more details.
   *
   *    You should have received a copy of the GNU General Public License
   *    along with this program; if not, write to the Free Software
   *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   */
  
  /*
   *    Option.java
   *    Copyright (C) 1999 University of Waikato, Hamilton, New Zealand
   *
   */
  
  package weka.core;
  
  import java.io.Serializable;
  import java.util.Enumeration;
  
  /**
   * Class to store information about an option. <p>
   * <p/>
   * Typical usage: <p>
   * <p/>
   * <code>Option myOption = new Option("Uses extended mode.", "E", 0, "-E")); </code><p>
   *
   * @author Eibe Frank (eibe@cs.waikato.ac.nz)
   * @version $Revision: 1.7 $
   */
  public class Option implements RevisionHandler, Serializable {
  
      private int id;
  
      /**
       * What does this option do?
       */
      private String m_Description;
  
      /**
       * The synopsis.
       */
      private String m_Synopsis;
  
      /**
       * What's the option's name?
       */
      private String m_Name;
  
      /**
       * How many arguments does it take?
       */
      private int m_NumArguments;
  
      private Class valueType;
      private String value;
      private String defaultValue;
      private int defaultValueIndex;
      private String[] enumOptions;
      private int valueIndex;
  
      /**
       * Creates new option with the given parameters.
       *
       * @param description  the option's description
       * @param name         the option's name
       * @param numArguments the number of arguments
       */
      public Option(String description, String name, int numArguments, String synopsis, String defaultValue, Class valueType) {
          this(description, name, numArguments, synopsis, defaultValue, valueType, null);
      }
  
      public Option(String description, String name, int numArguments, String synopsis, String defaultValue, Class valueType, String value) {
          this(description, name, numArguments, synopsis);
          this.valueType = valueType;
          this.defaultValue = defaultValue;
          this.value = (value == null ? defaultValue : value);
      }
  
      public Option(String description, String name, int numArguments, String synopsis, int defaultValueIndex, String[] enumOptions) {
          this(description, name, numArguments, synopsis, defaultValueIndex, enumOptions, defaultValueIndex);
      }
  
      public Option(String description, String name, int numArguments, String synopsis, int defaultValueIndex, String[] enumOptions, int valueIndex) {
          this(description, name, numArguments, synopsis);
          this.valueType = Enumeration.class;
          this.defaultValueIndex = defaultValueIndex;
          this.enumOptions = enumOptions;
          this.valueIndex = (valueIndex < 0 ? defaultValueIndex : valueIndex);
      }
  
      /**
       * Creates new option with the given parameters.
       *
       * @param description  the option's description
       * @param name         the option's name
       * @param numArguments the number of arguments
       */
      public Option(String description, String name, int numArguments, String synopsis) {
          m_Description = description;
          m_Name = name;
          m_NumArguments = numArguments;
          m_Synopsis = synopsis;
      }
  
      public String[] getEnumOptions() {
          return enumOptions;
      }
  
      public void setValue(String value) {
          this.value = value;
      }
  
      public void setValueIndex(int value) {
          this.valueIndex = valueIndex;
      }
  
      public String getValue() {
          if (valueType.equals(Enumeration.class)) {
              try {
                  return enumOptions[valueIndex];
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
          return value != null ? value : defaultValue;
      }
  
      public Class getValueType() {
          return valueType;
      }
  
      public String toString() {
          return getName() + "=" + getValue();
      }
  
      public int getId() {
          return id;
      }
  
      public void setId(int id) {
          this.id = id;
      }
  
      public String getName() {
          return name();
      }
  
      public String getDefaultValue() {
          return defaultValue != null ? defaultValue : defaultValueIndex + "";
      }
  
      public int getDefaultValueIndex() {
          return defaultValueIndex;
      }
  
      /**
       * Returns the option's description.
       *
       * @return the option's description
       */
      public String description() {
  
          return m_Description;
      }
  
      /**
       * Returns the option's name.
       *
       * @return the option's name
       */
      public String name() {
  
          return m_Name;
      }
  
      /**
       * Returns the option's number of arguments.
       *
       * @return the option's number of arguments
       */
      public int numArguments() {
  
          return m_NumArguments;
      }
  
      /**
       * Returns the option's synopsis.
       *
       * @return the option's synopsis
       */
      public String synopsis() {
  
          return m_Synopsis;
      }
  
      /**
       * Returns the revision string.
       *
       * @return the revision
       */
      public String getRevision() {
  