You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by jk...@apache.org on 2003/05/24 15:43:29 UTC
cvs commit: jakarta-commons/cli/src/java/org/apache/commons/cli Options.java
jkeyes 2003/05/24 06:43:29
Modified: cli/src/java/org/apache/commons/cli Tag: cli_1_x
Options.java
Log:
added Javadoc
added license
replaced tabs with spaces
Revision Changes Path
No revision
No revision
1.19.2.2 +262 -82 jakarta-commons/cli/src/java/org/apache/commons/cli/Options.java
Index: Options.java
===================================================================
RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli/Options.java,v
retrieving revision 1.19.2.1
retrieving revision 1.19.2.2
diff -u -r1.19.2.1 -r1.19.2.2
--- Options.java 19 May 2003 20:59:44 -0000 1.19.2.1
+++ Options.java 24 May 2003 13:43:29 -0000 1.19.2.2
@@ -1,3 +1,63 @@
+/*
+ * $Header$
+ * $Revision$
+ * $Date$
+ *
+ * ====================================================================
+ *
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 1999-2003 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 apache@apache.org.
+ *
+ * 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
+ * <http://www.apache.org/>;.
+ *
+ */
package org.apache.commons.cli;
import java.util.HashMap;
@@ -6,119 +66,239 @@
import java.util.Map;
import java.util.Set;
+/**
+ * An Options instance defines the structure of a command
+ * line. It can have three types of element, Option, Argument
+ * or OptionGroup.
+ *
+ * TODO: consolidate the OptionGroup support
+ * TODO: consolidate the AnonymousArgument support
+ *
+ * @author John Keyes
+ */
public class Options {
+ /** the child Options and Arguments */
private Map options = new HashMap();
+
+ /** the required Options and Arguments */
private Set required = new HashSet();
+
+ /** the OptionGroups */
private Set groups = new HashSet();
- private Argument anonymousArgument;
-
- public Options() {
- }
-
- public void add( Option option ) {
- if( option instanceof AnonymousArgumentImpl ) {
- this.anonymousArgument = (Argument)option;
- }
- else if( option.getName() != null ) {
- if( options.get(option.getName()) != null ) {
- options.remove(option.getName());
- }
- options.put(option.getName(), option);
- }
- else if( option.getLongName() != null ) {
- if( options.get(option.getLongName()) != null ) {
- options.remove(option.getLongName());
- }
- options.put(option.getLongName(), option);
- }
- addIfRequired( option );
+ /** the AnonymousArgument */
+ private Argument anonymousArgument;
+
+ /**
+ * Adds the specified Option to this definition
+ *
+ * @param option
+ * a command line Option
+ */
+ public void add(Option option) {
+ if (option instanceof AnonymousArgumentImpl) {
+ this.anonymousArgument = (Argument) option;
+ } else if (option.getName() != null) {
+ if (options.get(option.getName()) != null) {
+ options.remove(option.getName());
+ }
+ options.put(option.getName(), option);
+ } else if (option.getLongName() != null) {
+ if (options.get(option.getLongName()) != null) {
+ options.remove(option.getLongName());
+ }
+ options.put(option.getLongName(), option);
+ }
+ addIfRequired(option);
}
- public void addOptions( Set options ) {
- for(Iterator iter = options.iterator(); iter.hasNext(); ) {
- Option opt = (Option)iter.next();
- add( opt );
- addIfRequired( opt );
+ /**
+ * Adds all of the Options in the specified Set to this definition
+ *
+ * @param options
+ * command line Options to be added to this definition
+ */
+ public void addOptions(Set options) {
+ for (Iterator iter = options.iterator(); iter.hasNext();) {
+ Option opt = (Option) iter.next();
+ add(opt);
+ addIfRequired(opt);
}
}
- private void addIfRequired( Option option ) {
- if( option instanceof AnonymousArgumentImpl) {
- return;
- }
- if( option.isRequired() ) {
- required.add( option );
- }
- }
-
- public void setOptions( Set options ) {
- this.options.clear();
- addOptions( options );
+ /**
+ * Registers the specified Option if it is 'required'.
+ *
+ * @param option
+ * the Option to register if it is 'required'
+ */
+ private void addIfRequired(Option option) {
+ if (option instanceof AnonymousArgumentImpl) {
+ return;
+ }
+ if (option.isRequired()) {
+ required.add(option);
+ }
}
+ /**
+ * Removes any Options that have already been added
+ * and then adds all of the Options in the specified
+ * Set.
+ *
+ * @param options
+ * command line Options
+ */
+ public void setOptions(Set options) {
+ this.options.clear();
+ addOptions(options);
+ }
+
+ /**
+ * Returns the Options that this definition contains. The
+ * value that is returned is a new object so changes made
+ * to it do not modify this definition.
+ *
+ * @return
+ * the Set of command line Options
+ */
public Set getOptions() {
return new HashSet(options.values());
}
- Option getOption(String name) {
- Option option = null;
- for( Iterator iter = options.keySet().iterator(); iter.hasNext() && option == null; ) {
- Option currentOption = (Option)options.get(iter.next());
- if( currentOption.getName() != null && ("-" + currentOption.getName()).equals(name)) {
- option = currentOption;
- }
- else if (currentOption.getLongName() != null && ("--" + currentOption.getLongName()).equals(name)) {
- option = currentOption;
- }
- }
- return option;
- }
-
+ /**
+ * Return the Option that whose name is the same as the
+ * specified name. If no Option exists then check for
+ * the Option whose long name is the same as the specified
+ * name. If there is still no match, return null.
+ *
+ * @param name
+ * the name of the Option to search for
+ *
+ * @return
+ * the Option that matches the search criteria, otherwise null
+ */
+ Option getOption(String name) {
+ Option option = null;
+ for (Iterator iter = options.keySet().iterator();
+ iter.hasNext() && option == null;
+ ) {
+ Option currentOption = (Option) options.get(iter.next());
+ if (currentOption.getName() != null
+ && ("-" + currentOption.getName()).equals(name)) {
+ option = currentOption;
+ } else if (
+ currentOption.getLongName() != null
+ && ("--" + currentOption.getLongName()).equals(name)) {
+ option = currentOption;
+ }
+ }
+ return option;
+ }
+
+ /**
+ * Return the number of command line options in this definition
+ *
+ * @return
+ * the number of Options
+ */
public int size() {
return this.options.size();
}
+ /**
+ * Returns the required Options that this definition contains.
+ * The value that is returned is a new object so changes made
+ * to it do not modify this definition.
+ *
+ * @return
+ * the Set of required command line Options
+ */
public Set getRequired() {
- return this.required;
+ return new HashSet(required);
}
+ /**
+ * Returns the OptionGroups that this definition contains.
+ * The value that is returned is a new object so changes made
+ * to it do not modify this definition.
+ *
+ * @return
+ * the Set of command line OptionGroups
+ */
public Set getOptionGroups() {
- return this.groups;
+ return new HashSet(this.groups);
}
- public void add( OptionGroup group ) {
- this.groups.add( group );
- addGroupOptions( group );
- }
-
- public boolean hasAnonymousArgument() {
- return this.anonymousArgument != null;
- }
-
- public Argument getAnonymousArgument() {
- return this.anonymousArgument;
- }
-
- public void setOptionGroups( Set groups ) {
+ /**
+ * Adds the specified group to this definition.
+ *
+ * @param group
+ * a command line OptionGroup
+ */
+ public void add(OptionGroup group) {
+ this.groups.add(group);
+ addGroupOptions(group);
+ }
+
+ /**
+ * Returns whether this definition has an AnonymousArgument
+ * specified.
+ *
+ * @return
+ * true if there is an AnonymousArgument specified, otherwise false
+ */
+ public boolean hasAnonymousArgument() {
+ return this.anonymousArgument != null;
+ }
+
+ /**
+ * Return this definitions AnonymousArgument
+ *
+ * @return
+ * the Argument if one was specified, otherwise null
+ */
+ public Argument getAnonymousArgument() {
+ return this.anonymousArgument;
+ }
+
+ /**
+ * Removes any OptionGroups that have already been added
+ * and then adds all of the OptionGroups in the specified
+ * Set.
+ *
+ * @param groups
+ */
+ public void setOptionGroups(Set groups) {
this.groups = groups;
- for(Iterator iter = groups.iterator(); iter.hasNext(); ) {
- add( (OptionGroup)iter.next() );
+ for (Iterator iter = groups.iterator(); iter.hasNext();) {
+ add((OptionGroup) iter.next());
}
}
- private void addGroupOptions( OptionGroup group ) {
- for(Iterator iter = group.getOptions().iterator(); iter.hasNext(); ) {
- add( (Option)iter.next() );
- }
-
- if( group instanceof ExclusiveOptionGroup) {
- ExclusiveOptionGroup excGroup = (ExclusiveOptionGroup)group;
- for(Iterator iter = excGroup.getOptionGroups().iterator(); iter.hasNext(); ) {
- addGroupOptions( (OptionGroup)iter.next() );
- }
- }
+ /**
+ * Adds the individual Options from the specified group
+ * to the options definition.
+ *
+ * TODO: review this behaviour as it corrupts the contract
+ * for getOptions.
+ *
+ * @param group
+ */
+ private void addGroupOptions(OptionGroup group) {
+ for (Iterator iter = group.getOptions().iterator(); iter.hasNext();) {
+ add((Option) iter.next());
+ }
+
+ if (group instanceof ExclusiveOptionGroup) {
+ ExclusiveOptionGroup excGroup = (ExclusiveOptionGroup) group;
+ for (Iterator iter = excGroup.getOptionGroups().iterator();
+ iter.hasNext();
+ ) {
+ addGroupOptions((OptionGroup) iter.next());
+ }
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org