All Downloads are FREE. Search and download functionalities are using the official Maven repository.

installer.src.java.org.apache.commons.cli.Options Maven / Gradle / Ivy

Go to download

Jython is an implementation of the high-level, dynamic, object-oriented language Python written in 100% Pure Java, and seamlessly integrated with the Java platform. It thus allows you to run Python on any Java platform.

There is a newer version: 2.7.4b2
Show newest version
/*
 * $Header$
 * $Revision: 2694 $
 * $Date: 2006-03-27 11:45:13 -0800 (Mon, 27 Mar 2006) $
 *
 * ====================================================================
 *
 * The Apache Software License, Version 1.1
 *
 * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution, if
 *    any, must include the following acknowlegement:
 *       "This product includes software developed by the
 *        Apache Software Foundation (http://www.apache.org/)."
 *    Alternately, this acknowlegement may appear in the software itself,
 *    if and wherever such third-party acknowlegements normally appear.
 *
 * 4. The names "The Jakarta Project", "Commons", and "Apache Software
 *    Foundation" must not be used to endorse or promote products derived
 *    from this software without prior written permission. For written
 *    permission, please contact [email protected].
 *
 * 5. Products derived from this software may not be called "Apache"
 *    nor may "Apache" appear in their names without prior written
 *    permission of the Apache Group.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * .
 *
 */

package org.apache.commons.cli;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/** 

Main entry-point into the library.

* *

Options represents a collection of {@link Option} objects, which * describe the possible options for a command-line.

* *

It may flexibly parse long and short options, with or without * values. Additionally, it may parse only a portion of a commandline, * allowing for flexible multi-stage parsing.

* * @see org.apache.commons.cli.CommandLine * * @author bob mcwhirter (bob @ werken.com) * @author James Strachan * @version $Revision: 2694 $ */ public class Options { /** a map of the options with the character key */ private Map shortOpts = new HashMap(); /** a map of the options with the long key */ private Map longOpts = new HashMap(); /** a list of the required options */ private List requiredOpts = new ArrayList(); /** a map of the option groups */ private Map optionGroups = new HashMap(); /** a list of all options, in sequence of addition, only in use when isSortAsAdded() */ private List _addedOpts = new ArrayList(); /** flag for the sort behaviour */ private boolean _sortAsAdded; /** * Construct a new Options descriptor */ public Options() { setSortAsAdded(false); } /** * Set the sort sequence: true means in sequence of addition, false will use the * default (undefined) sorting */ public void setSortAsAdded(boolean sortAsAdded) { _sortAsAdded = sortAsAdded; } /** *

Add the specified option group.

* * @param group the OptionGroup that is to be added * @return the resulting Options instance */ public Options addOptionGroup( OptionGroup group ) { Iterator options = group.getOptions().iterator(); if( group.isRequired() ) { requiredOpts.add( group ); } while( options.hasNext() ) { Option option = (Option)options.next(); // an Option cannot be required if it is in an // OptionGroup, either the group is required or // nothing is required option.setRequired( false ); addOption( option ); optionGroups.put( option.getOpt(), group ); } return this; } /**

Add an option that only contains a short-name

*

It may be specified as requiring an argument.

* * @param opt Short single-character name of the option. * @param hasArg flag signally if an argument is required after this option * @param description Self-documenting description * @return the resulting Options instance */ public Options addOption(String opt, boolean hasArg, String description) { addOption( opt, null, hasArg, description ); return this; } /**

Add an option that contains a short-name and a long-name

*

It may be specified as requiring an argument.

* * @param opt Short single-character name of the option. * @param longOpt Long multi-character name of the option. * @param hasArg flag signally if an argument is required after this option * @param description Self-documenting description * @return the resulting Options instance */ public Options addOption(String opt, String longOpt, boolean hasArg, String description) { addOption( new Option( opt, longOpt, hasArg, description ) ); return this; } /** *

Adds an option instance

* * @param opt the option that is to be added * @return the resulting Options instance */ public Options addOption(Option opt) { String shortOpt = "-" + opt.getOpt(); // add it to the long option list if ( opt.hasLongOpt() ) { longOpts.put( "--" + opt.getLongOpt(), opt ); } // if the option is required add it to the required list if ( opt.isRequired() ) { requiredOpts.add( shortOpt ); } shortOpts.put( shortOpt, opt ); if (isSortAsAdded()) { _addedOpts.add(opt); } return this; } /**

Retrieve a read-only list of options in this set

* * @return read-only Collection of {@link Option} objects in this descriptor */ public Collection getOptions() { if (isSortAsAdded()) { return _addedOpts; } else { List opts = new ArrayList(shortOpts.values()); // now look through the long opts to see if there are any Long-opt // only options Iterator iter = longOpts.values().iterator(); while (iter.hasNext()) { Object item = iter.next(); if (!opts.contains(item)) { opts.add(item); } } return Collections.unmodifiableCollection(opts); } } /** * @return true if options should be sorted in sequence of addition. */ public boolean isSortAsAdded() { return _sortAsAdded; } /** *

Returns the Options for use by the HelpFormatter.

* * @return the List of Options */ List helpOptions() { if (isSortAsAdded()) { return _addedOpts; } else { return new ArrayList(shortOpts.values()); } } /**

Returns the required options as a * java.util.Collection.

* * @return Collection of required options */ public List getRequiredOptions() { return requiredOpts; } /**

Retrieve the named {@link Option}

* * @param opt short or long name of the {@link Option} * @return the option represented by opt */ public Option getOption( String opt ) { Option option = null; // short option if( opt.length() == 1 ) { option = (Option)shortOpts.get( "-" + opt ); } // long option else if( opt.startsWith( "--" ) ) { option = (Option)longOpts.get( opt ); } // a just-in-case else { option = (Option)shortOpts.get( opt ); } return (option == null) ? null : (Option)option.clone(); } /** *

Returns whether the named {@link Option} is a member * of this {@link Options}

* * @param opt short or long name of the {@link Option} * @return true if the named {@link Option} is a member * of this {@link Options} */ public boolean hasOption( String opt ) { // short option if( opt.length() == 1 ) { return shortOpts.containsKey( "-" + opt ); } // long option else if( opt.startsWith( "--" ) ) { return longOpts.containsKey( opt ); } // a just-in-case else { return shortOpts.containsKey( opt ); } } /**

Returns the OptionGroup the opt * belongs to.

* @param opt the option whose OptionGroup is being queried. * * @return the OptionGroup if opt is part * of an OptionGroup, otherwise return null */ public OptionGroup getOptionGroup( Option opt ) { return (OptionGroup)optionGroups.get( opt.getOpt() ); } /**

Dump state, suitable for debugging.

* * @return Stringified form of this object */ public String toString() { StringBuffer buf = new StringBuffer(); buf.append("[ Options: [ short "); buf.append( shortOpts.toString() ); buf.append( " ] [ long " ); buf.append( longOpts ); buf.append( " ]"); return buf.toString(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy