roxspring 2004/09/06 15:57:44 Modified: cli/src/java/org/apache/commons/cli2 Argument.java Option.java WriteableCommandLine.java cli/src/java/org/apache/commons/cli2/option GroupImpl.java Switch.java ParentImpl.java OptionImpl.java ArgumentImpl.java cli/src/java/org/apache/commons/cli2/commandline Parser.java WriteableCommandLineImpl.java cli/src/test/org/apache/commons/cli2/option SwitchTest.java cli/src/java/org/apache/commons/cli2/builder SwitchBuilder.java Log: Implemented definition time defaults: Option - added defaults(WriteableCommandLine) WriteableCommandLine - added setDefaultValues(Option,List) WriteableCommandLine - added setDefaultSwitch(Option,Boolean) Argument - add defaults(WriteableCommandLine,Option) CommandLineDefaultsTest - test the defaults in combination Parser - now applys the defaults before processing Implemented new methods Revision Changes Path 1.3 +10 -0 jakarta-commons/cli/src/java/org/apache/commons/cli2/Argument.java Index: Argument.java =================================================================== RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli2/Argument.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Argument.java 22 Apr 2004 23:00:06 -0000 1.2 +++ Argument.java 6 Sep 2004 22:57:43 -0000 1.3 @@ -49,6 +49,16 @@ final ListIterator args, final Option option) throws OptionException; + + /** + * Adds defaults to a CommandLine. + * + * @param commandLine + * The CommandLine object to store defaults in. + * @param option + * The Option to store the defaults against. + */ + void defaultValues(final WriteableCommandLine commandLine, final Option option); /** * Performs any necessary validation on the values added to the 1.3 +11 -0 jakarta-commons/cli/src/java/org/apache/commons/cli2/Option.java Index: Option.java =================================================================== RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli2/Option.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Option.java 22 Apr 2004 23:00:06 -0000 1.2 +++ Option.java 6 Sep 2004 22:57:43 -0000 1.3 @@ -47,6 +47,17 @@ final WriteableCommandLine commandLine, final ListIterator args) throws OptionException; + + /** + * Adds defaults to a CommandLine. + * + * Any defaults for this option are applied as well as the defaults for + * any contained options + * + * @param commandLine + * The CommandLine object to store defaults in + */ + void defaults(final WriteableCommandLine commandLine); /** * Indicates whether this Option will be able to process the particular 1.3 +16 -0 jakarta-commons/cli/src/java/org/apache/commons/cli2/WriteableCommandLine.java Index: WriteableCommandLine.java =================================================================== RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli2/WriteableCommandLine.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- WriteableCommandLine.java 22 Apr 2004 23:00:06 -0000 1.2 +++ WriteableCommandLine.java 6 Sep 2004 22:57:43 -0000 1.3 @@ -15,6 +15,8 @@ */ package org.apache.commons.cli2; +import java.util.List; + /** * A CommandLine that detected values and options can be written to. */ @@ -32,6 +34,13 @@ * @param value the value to add */ void addValue(final Option option, final Object value); + + /** + * Sets the default values for an Option in the CommandLine + * @param option the Option to add to + * @param defaultValues the defaults for the option + */ + void setDefaultValues(final Option option, final List defaultValues); /** * Adds a switch value to an Option in the CommandLine. @@ -40,6 +49,13 @@ * @throws IllegalStateException if the switch has already been added */ void addSwitch(final Option option, final boolean value) throws IllegalStateException; + + /** + * Sets the default state for a Switch in the CommandLine. + * @param option the Option to add to + * @param defaultSwitch the defaults state for ths switch + */ + void setDefaultSwitch(final Option option, final Boolean defaultSwitch); /** * Adds a property value to a name in the CommandLine. 1.4 +14 -0 jakarta-commons/cli/src/java/org/apache/commons/cli2/option/GroupImpl.java Index: GroupImpl.java =================================================================== RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli2/option/GroupImpl.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- GroupImpl.java 17 Aug 2004 13:51:36 -0000 1.3 +++ GroupImpl.java 6 Sep 2004 22:57:44 -0000 1.4 @@ -444,6 +444,20 @@ public boolean isRequired() { return getMinimum()>0; } + + public void defaults(final WriteableCommandLine commandLine) { + super.defaults(commandLine); + + for (final Iterator i = options.iterator(); i.hasNext();) { + final Option option = (Option) i.next(); + option.defaults(commandLine); + } + + for (final Iterator i = anonymous.iterator(); i.hasNext();) { + final Option option = (Option) i.next(); + option.defaults(commandLine); + } + } } class ReverseStringComparator implements Comparator { 1.3 +9 -2 jakarta-commons/cli/src/java/org/apache/commons/cli2/option/Switch.java Index: Switch.java =================================================================== RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli2/option/Switch.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Switch.java 22 Apr 2004 23:00:07 -0000 1.2 +++ Switch.java 6 Sep 2004 22:57:44 -0000 1.3 @@ -52,6 +52,7 @@ private final String preferredName; private final Set aliases; private final Set prefixes; + private final Boolean defaultSwitch; /** * Creates a new Switch with the specified parameters @@ -74,7 +75,8 @@ final boolean required, final Argument argument, final Group children, - final int id) { + final int id, + final Boolean switchDefault) { super(argument, children, description, id, required); if (enabledPrefix == null) { @@ -122,7 +124,8 @@ newPrefixes.add(enabledPrefix); newPrefixes.add(disabledPrefix); this.prefixes = Collections.unmodifiableSet(newPrefixes); - + + this.defaultSwitch = switchDefault; } public void processParent( @@ -230,5 +233,9 @@ public String getPreferredName() { return enabledPrefix + preferredName; + } + + public void defaults(final WriteableCommandLine commandLine) { + commandLine.setDefaultSwitch(this, defaultSwitch); } } 1.3 +12 -0 jakarta-commons/cli/src/java/org/apache/commons/cli2/option/ParentImpl.java Index: ParentImpl.java =================================================================== RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli2/option/ParentImpl.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ParentImpl.java 22 Apr 2004 23:00:07 -0000 1.2 +++ ParentImpl.java 6 Sep 2004 22:57:44 -0000 1.3 @@ -252,4 +252,16 @@ return found; } } + + public void defaults(final WriteableCommandLine commandLine) { + super.defaults(commandLine); + + if(argument!=null) { + argument.defaultValues(commandLine,this); + } + + if(children!=null) { + children.defaults(commandLine); + } + } } 1.3 +5 -0 jakarta-commons/cli/src/java/org/apache/commons/cli2/option/OptionImpl.java Index: OptionImpl.java =================================================================== RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli2/option/OptionImpl.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- OptionImpl.java 22 Apr 2004 23:00:07 -0000 1.2 +++ OptionImpl.java 6 Sep 2004 22:57:44 -0000 1.3 @@ -19,6 +19,7 @@ import org.apache.commons.cli2.DisplaySetting; import org.apache.commons.cli2.Option; +import org.apache.commons.cli2.WriteableCommandLine; /** * A base implementation of Option providing limited ground work for further @@ -98,5 +99,9 @@ public boolean isRequired() { return required; + } + + public void defaults(final WriteableCommandLine commandLine) { + // nothing to do normally } } 1.3 +14 -5 jakarta-commons/cli/src/java/org/apache/commons/cli2/option/ArgumentImpl.java Index: ArgumentImpl.java =================================================================== RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli2/option/ArgumentImpl.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ArgumentImpl.java 22 Apr 2004 23:00:07 -0000 1.2 +++ ArgumentImpl.java 6 Sep 2004 22:57:44 -0000 1.3 @@ -103,7 +103,7 @@ final char subsequentSeparator, final Validator validator, final String consumeRemaining, - final List defaultValues, + final List valueDefaults, final int id) { super(id,false); @@ -117,20 +117,20 @@ this.subsequentSplit = subsequentSeparator != NUL; this.validator = validator; this.consumeRemaining = consumeRemaining; - this.defaultValues = defaultValues; + this.defaultValues = valueDefaults; if (minimum > maximum) { throw new IllegalArgumentException( resources.getMessage("cli.error.minimum.exceeds.maximum")); } - if (defaultValues != null) { - if (defaultValues.size() < minimum) { + if (valueDefaults != null) { + if (valueDefaults.size() < minimum) { throw new IllegalArgumentException( resources.getMessage("cli.error.too.few.defaults")); } - if (defaultValues.size() > maximum) { + if (valueDefaults.size() > maximum) { throw new IllegalArgumentException( resources.getMessage("cli.error.too.many.defaults")); } @@ -366,5 +366,14 @@ public boolean isRequired() { return getMinimum()>0; + } + + public void defaults(final WriteableCommandLine commandLine) { + super.defaults(commandLine); + defaultValues(commandLine,this); + } + + public void defaultValues(final WriteableCommandLine commandLine, final Option option) { + commandLine.setDefaultValues(option, defaultValues); } } 1.3 +4 -1 jakarta-commons/cli/src/java/org/apache/commons/cli2/commandline/Parser.java Index: Parser.java =================================================================== RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli2/commandline/Parser.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Parser.java 22 Apr 2004 23:00:15 -0000 1.2 +++ Parser.java 6 Sep 2004 22:57:44 -0000 1.3 @@ -56,10 +56,13 @@ public CommandLine parse(final String[] arguments) throws OptionException { final List argumentList = new LinkedList(Arrays.asList(arguments)); - final ListIterator iterator = argumentList.listIterator(); final WriteableCommandLine commandLine = new WriteableCommandLineImpl(group, new ArrayList()); + + // pick up any defaults from the model + group.defaults(commandLine); + final ListIterator iterator = argumentList.listIterator(); while (group.canProcess(iterator)) { group.process(commandLine, iterator); } 1.3 +30 -38 jakarta-commons/cli/src/java/org/apache/commons/cli2/commandline/WriteableCommandLineImpl.java Index: WriteableCommandLineImpl.java =================================================================== RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli2/commandline/WriteableCommandLineImpl.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- WriteableCommandLineImpl.java 22 Apr 2004 23:00:15 -0000 1.2 +++ WriteableCommandLineImpl.java 6 Sep 2004 22:57:44 -0000 1.3 @@ -18,7 +18,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -26,7 +25,6 @@ import java.util.Set; import org.apache.commons.cli2.Argument; -import org.apache.commons.cli2.CommandLine; import org.apache.commons.cli2.Option; import org.apache.commons.cli2.WriteableCommandLine; @@ -41,12 +39,11 @@ private final Map nameToOption = new HashMap(); private final Map values = new HashMap(); private final Map switches = new HashMap(); - private final Map defaults = new HashMap(); + private final Map defaultValues = new HashMap(); + private final Map defaultSwitches = new HashMap(); private final List normalised; private final Set prefixes; - private CommandLine defaultCommandLine = null; - /** * Creates a new WriteableCommandLineImpl rooted on the specified Option, to * hold the parsed arguments. @@ -91,38 +88,26 @@ public boolean hasOption(final Option option) { final boolean present = options.contains(option); - if (!present && defaultCommandLine != null) { - return defaultCommandLine.hasOption(option); - } - else { - return present; - } + return present; } public Option getOption(final String trigger) { return (Option)nameToOption.get(trigger); } - //TODO Document the order of values and defaults public List getValues(final Option option, final List defaultValues) { // First grab the command line values List valueList = (List)values.get(option); - // Secondly try alternate CommandLines - if ((valueList == null || valueList.isEmpty()) - && defaultCommandLine != null) { - valueList = defaultCommandLine.getValues(option, null); - } - - // Thirdly try the defaults supplied to the method + // Secondly try the defaults supplied to the method if (valueList == null || valueList.isEmpty()) { valueList = defaultValues; } - // Fourthly try the option's default values + // Thirdly try the option's default values if (valueList == null || valueList.isEmpty()) { - valueList = (List)this.defaults.get(option); + valueList = (List)this.defaultValues.get(option); } // Finally use an empty list @@ -137,18 +122,15 @@ // First grab the command line values Boolean bool = (Boolean)switches.get(option); - // Secondly try alternate CommandLines - if (bool == null && defaultCommandLine != null) { - bool = defaultCommandLine.getSwitch(option); - } - - // Thirdly try the defaults supplied to the method + // Secondly try the defaults supplied to the method if (bool == null) { bool = defaultValue; } - // Fourthly try the option's default values - //???? + // Thirdly try the option's default values + if (bool == null) { + bool = (Boolean)this.defaultSwitches.get(option); + } return bool; } @@ -162,15 +144,7 @@ } public Set getProperties() { - if (defaultCommandLine == null) { - return Collections.unmodifiableSet(properties.keySet()); - } - else { - final Set props = new HashSet(); - props.addAll(properties.keySet()); - props.addAll(defaultCommandLine.getProperties()); - return Collections.unmodifiableSet(props); - } + return Collections.unmodifiableSet(properties.keySet()); } public boolean looksLikeOption(final String trigger) { @@ -211,5 +185,23 @@ public Set getOptionTriggers() { return Collections.unmodifiableSet(nameToOption.keySet()); + } + + public void setDefaultValues(final Option option, final List defaults) { + if (defaults==null) { + defaultValues.remove(option); + } + else { + defaultValues.put(option, defaults); + } + } + + public void setDefaultSwitch(final Option option, final Boolean defaultSwitch) { + if (defaultSwitch==null) { + defaultSwitches.remove(defaultSwitch); + } + else { + defaultSwitches.put(option, defaultSwitch); + } } } 1.3 +2 -1 jakarta-commons/cli/src/test/org/apache/commons/cli2/option/SwitchTest.java Index: SwitchTest.java =================================================================== RCS file: /home/cvs/jakarta-commons/cli/src/test/org/apache/commons/cli2/option/SwitchTest.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- SwitchTest.java 22 Apr 2004 23:00:14 -0000 1.2 +++ SwitchTest.java 6 Sep 2004 22:57:44 -0000 1.3 @@ -47,7 +47,8 @@ true, null, null, - 'd'); + 'd', + null); } /* 1.3 +15 -1 jakarta-commons/cli/src/java/org/apache/commons/cli2/builder/SwitchBuilder.java Index: SwitchBuilder.java =================================================================== RCS file: /home/cvs/jakarta-commons/cli/src/java/org/apache/commons/cli2/builder/SwitchBuilder.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- SwitchBuilder.java 22 Apr 2004 23:00:15 -0000 1.2 +++ SwitchBuilder.java 6 Sep 2004 22:57:44 -0000 1.3 @@ -37,6 +37,7 @@ private Argument argument; private Group children; private int id; + private Boolean switchDefault; /** * Creates a new SwitchBuilder using defaults. @@ -86,7 +87,8 @@ required, argument, children, - id); + id, + switchDefault); reset(); @@ -104,6 +106,7 @@ argument = null; children = null; id = 0; + switchDefault = null; } /** @@ -171,6 +174,17 @@ */ public final SwitchBuilder withId(final int newId) { this.id = newId; + return this; + } + + /** + * Sets the default state for this switch + * + * @param switchDefault the default state + * @return this SwitchBuilder + */ + public final SwitchBuilder withSwitchDefault(final Boolean switchDefault) { + this.switchDefault = switchDefault; return this; } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]