Logo Search packages:      
Sourcecode: jabref version File versions  Download package

OptionModule.java

package gnu.dtools.ritopt;

/**
 * OptionModule.java
 *
 * Version:
 *    $Id: OptionModule.java 2268 2007-08-19 23:37:05Z coezbek $
 */

import java.io.PrintStream;
import java.util.HashMap;
import java.util.Iterator;

/**
 * This class is used as a repository for options. The Options class maintains
 * an OptionModule repository for general options. The user may create option
 * modules so that their options can overlap and be categorized. Option
 * modules are invoked by specifying the option name delimited with square
 * brackets.<p>
 *
 * For example, suppose we are writing a program called ServerManager
 * that manages both an ftp and http server. One option that both a ftp
 * and http kernel might have in common is the number of seconds before
 * a request times out. Option modules are used to process two different
 * values with the same option name. The shell command below demonstrates
 * how two different modules are invoked.<p>
 * <pre>
 *  java ServerManager :http: --timeout=15 :ftp: --timeout=25
 * </pre>
 *
 * Refer to the tutorial for more information on how to use option modules.
 *
 * <hr>
 *
 * <pre>
 * Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
 *
 * ritopt 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.

 * ritopt 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 ritopt; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 * </pre>
 *
 * @author Damian Eads
 */

00056 public class OptionModule implements OptionRegistrar {

    /**
     * A repository of options registered with this module.
     */

00062     private HashMap<String, Option> options;

    /**
     * The name of this module.
     */

00068     private String name;

    /**
     * Returns whether this module is deprecated.
     */

00074     private boolean deprecated;

    /**
     * The default short option.
     */

00080     public static final char DEFAULT_SHORT_OPTION = '\0';

    /**
     * The default long option.
     */

00086     public static final String DEFAULT_LONG_OPTION = null;

    /**
     * The default description.
     */

00092     public static final String DEFAULT_DESCRIPTION = "No description given";

    /**
     * The default deprecation status.
     */

00098     public static final boolean DEFAULT_DEPRECATED = false;

    /**
     * The default module name.
     */

00104     public static final String DEFAULT_MODULE_NAME = "Special";

    /**
     * Constructs an OptionModule with the default name.
     */

00110     public OptionModule() {
      this( DEFAULT_MODULE_NAME );
    }

    /**
     * Constructs an OptionModule with the name passed.
     *
     * @param name  The name of the module.
     */

00120     public OptionModule( String name ) {
      options = new HashMap<String, Option>();
      this.name = name;
      deprecated = false;
    }

    /**
     * Register an option into the repository as a long option.
     *
     * @param longOption  The long option name.
     * @param option      The option to register.
     */

00133     public void register( String longOption, Option option ) {
      register( longOption, DEFAULT_SHORT_OPTION, option );
    }

    /**
     * Register an option into the repository as a short option.
     *
     * @param shortOption The short option name.
     * @param option      The option to register.
     */

00144     public void register( char shortOption, Option option ) {
      register( DEFAULT_LONG_OPTION, shortOption, option );

    }

    /**
     * Register an option into the repository both as a short and long option.
     *
     * @param longOption  The long option name.
     * @param shortOption The short option name.
     * @param option      The option to register.
     */

00157     public void register( String longOption, char shortOption,
                    Option option ) {
      register( longOption, shortOption, DEFAULT_DESCRIPTION, option );
    }

    /**
     * Register an option into the repository both as a short and long option.
     * Initialize its description with the description passed.
     *
     * @param longOption  The long option name.
     * @param shortOption The short option name.
     * @param description The description of the option.
     * @param option      The option to register.
     */

00172     public void register( String longOption, char shortOption,
                    String description, Option option ) {
      register( longOption, shortOption, description, option,
            DEFAULT_DEPRECATED );
    }

    /**
     * Register an option into the repository both as a short and long option.
     * Initialize its description with the description passed.
     *
     * @param longOption  The long option name.
     * @param shortOption The short option name.
     * @param description The description of the option.
     * @param option      The option to register.
     * @param deprecated  A boolean indicating whether an option should
     *                    be deprecated.
     */

00190     public void register( String longOption, char shortOption,
                    String description, Option option,
                    boolean deprecated ) {
      if ( optionExists( option ) ) {
          throw new OptionRegistrationException( "Option Already Registered",
                                       option );
      }
      option.setLongOption( longOption );
      option.setShortOption( shortOption );
      option.setDeprecated( deprecated );
      option.setDescription( description );
      options.put( option.getHashKey(), option );
    }

    /**
     * Returns whether the option exists in this module.
     *
     * @param option   The option to check for existance.
     *
     * @return A boolean value indicating whether the option passed exists.
     */

00212     public boolean optionExists( Option option ) {
      return optionExists( option.getShortOption() ) ||
             optionExists( option.getLongOption() );
    }

    /**
     * Returns whether the option referred by a short option exists in this
     * module.
     *
     * @param shortOption   The option to check for existance.
     *
     * @return A boolean value indicating whether the option passed exists.
     */
00225       public boolean optionExists(char shortOption) {
            for (Option next : options.values()) {
                  char c = next.getShortOption();
                  if (c != 0 && c == shortOption)
                        return true;
            }
            return false;
      }

    /**
     * Returns whether the option referred by a long option exists in this
     * module.
     *
     * @param longOption   The option to check for existance.
     *
     * @return A boolean value indicating whether the option passed exists.
     */
00242       public boolean optionExists(String longOption) {
            for (Option next : options.values()) {
                  String s = next.getLongOption();
                  if (s != null && s.equals(longOption))
                        return true;
            }
            return false;
      }

    /**
       * Return an iterator over the option repository contained in this module.
       * 
       * @return An iterator over the repository.
       */

00257       public Iterator<Option> getOptionIterator() {
            return options.values().iterator();
      }

    /**
       * Returns the option referred by the long option passed.
       * 
       * @param shortOption
       *            The option to retrieve.
       * 
       * @return An option referred to by this module. null is returned if it does
       *         not exist.
       */

00271     public Option getOption(char shortOption) {
            Option retval = null;

            for (Option next : options.values()) {
                  char c = next.getShortOption();
                  if (c != '\0' && c == shortOption)
                        retval = next;
            }
            return retval;
      }

    /**
     * Returns the option referred by the long option passed.
     *
     * @param longOption The option to retrieve.
     *
     * @return An option referred to by this module. null is returned
     *         if it does not exist.
     */

00291     public Option getOption(String longOption) {
            Option retval = null;
            for (Option next : options.values()) {
                  String s = next.getLongOption();
                  if (s != null && s.equals(longOption))
                        retval = next;
            }
            return retval;
      }

    /**
     * Returns the help information as a String.
     *
     * @return The help information as a String.
     */

00307     public String getHelp() {
            String retval = "";
            for (Option next : options.values()) {
                  retval += next.getHelp() + "\n";
            }
            return retval;
      }

    /**
       * Writes the help information to a print stream.
       * 
       * @param ps
       *            The print stream to write to.
       */

00322       public void writeFileToPrintStream(PrintStream ps) {
            ps.println(":" + name + ":");
            for (Option next : options.values()) {
                  ps.println(next.getOptionFileLine());
            }
      }

    /**
       * Returns whether this module is deprecated.
       * 
       * @return A boolean value indicating whether this module is deprecated.
       */

00335     public boolean isDeprecated() {
      return deprecated;
    }

    /**
     * Sets whether this module is deprecated.
     *
     * @param deprecated The new status.
     */

00345     public void setDeprecated( boolean deprecated ) {
      this.deprecated = deprecated;
    }

    /**
     * Called by the OptionsProcessor when an option in the target module
     * is invoked.
     *
     * @param shortOption The option to invoke.
     * @param text        The text to pass to the modifier.
     */

00357     public void action( char shortOption, char text ) {
      action( shortOption, "" + text );
    }

    /**
     * Called by the OptionsProcessor when an option in the target module
     * is invoked.
     *
     * @param longOption The option to invoke.
     * @param text       The text to pass to the modifier.
     */

00369     public void action( String longOption, char text ) {
      action( longOption, "" + text );
    }

    /**
     * Called by the OptionsProcessor when an option in the target module
     * is invoked.
     *
     * @param shortOption The option to invoke.
     * @param text        The text to pass to the modifier.
     */

00381     public void action( char shortOption, String text ) {
      Option op = getOption( shortOption );
      if ( op == null )
          throw new OptionProcessingException( "Option -" + shortOption +
                                     " does not"
                                     + " exist in module '"
                                     + name + "'." );
      op.setInvoked( true );
      op.action();
      op.modify( text );
    }

    /**
     * Called by the OptionsProcessor when an option in the target module
     * is invoked.
     *
     * @param longOption The option to invoke.
     * @param text       The text to pass to the modifier.
     */


00402     public void action( String longOption, String text ) {
      Option op = getOption( longOption );
      if ( op == null )
          throw new OptionProcessingException( "Option --" + longOption +
                                     " does not"
                                     + " exist in module '"
                                     + name + "'." );
      op.setInvoked( true );
      op.action();
      op.modify( text );
    }

    /**
     * Set the name of this module.
     *
     * @param name   The new name.
     */

00420     public void setName( String name ) {
      this.name = name;
    }

    /**
     * Returns the name of this module.
     *
     * @return The name of this module.
     */

00430     public String getName() {
      return name;
    }

} /** OptionModule **/





Generated by  Doxygen 1.6.0   Back to index