You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by eb...@apache.org on 2008/07/25 00:55:59 UTC
svn commit: r679606 - in /commons/proper/cli/branches/cli-1.x/src:
java/org/apache/commons/cli/AlreadySelectedException.java
java/org/apache/commons/cli/OptionGroup.java
test/org/apache/commons/cli/OptionGroupTest.java
Author: ebourg
Date: Thu Jul 24 15:55:58 2008
New Revision: 679606
URL: http://svn.apache.org/viewvc?rev=679606&view=rev
Log:
Changed AlreadySelectedException to include the related option group and the option that triggered the exception
Modified:
commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/AlreadySelectedException.java
commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/OptionGroup.java
commons/proper/cli/branches/cli-1.x/src/test/org/apache/commons/cli/OptionGroupTest.java
Modified: commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/AlreadySelectedException.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/AlreadySelectedException.java?rev=679606&r1=679605&r2=679606&view=diff
==============================================================================
--- commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/AlreadySelectedException.java (original)
+++ commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/AlreadySelectedException.java Thu Jul 24 15:55:58 2008
@@ -26,6 +26,12 @@
*/
public class AlreadySelectedException extends ParseException
{
+ /** The option group selected. */
+ private OptionGroup group;
+
+ /** The option that triggered the exception. */
+ private Option option;
+
/**
* Construct a new <code>AlreadySelectedException</code>
* with the specified detail message.
@@ -36,4 +42,40 @@
{
super(message);
}
+
+ /**
+ * Construct a new <code>AlreadySelectedException</code>
+ * for the specified option group.
+ *
+ * @param group the option group already selected
+ * @param option the option that triggered the exception
+ * @since 1.2
+ */
+ public AlreadySelectedException(OptionGroup group, Option option)
+ {
+ this("The option '" + option.getKey() + "' was specified but an option from this group " +
+ "has already been selected: '" + group.getSelected() + "'");
+ this.group = group;
+ this.option = option;
+ }
+
+ /**
+ * Returns the option group where another option has been selected.
+ *
+ * @since 1.2
+ */
+ public OptionGroup getOptionGroup()
+ {
+ return group;
+ }
+
+ /**
+ * Returns the option that was added to the group and triggered the exception.
+ *
+ * @since 1.2
+ */
+ public Option getOption()
+ {
+ return option;
+ }
}
Modified: commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/OptionGroup.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/OptionGroup.java?rev=679606&r1=679605&r2=679606&view=diff
==============================================================================
--- commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/OptionGroup.java (original)
+++ commons/proper/cli/branches/cli-1.x/src/java/org/apache/commons/cli/OptionGroup.java Thu Jul 24 15:55:58 2008
@@ -14,15 +14,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
package org.apache.commons.cli;
import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.Map;
/**
* A group of mutually exclusive options.
+ *
* @author John Keyes ( john at integralsource.com )
* @version $Revision$
*/
@@ -31,7 +34,7 @@
private static final long serialVersionUID = 1L;
/** hold the options */
- private HashMap optionMap = new HashMap();
+ private Map optionMap = new HashMap();
/** the name of the selected option */
private String selected;
@@ -40,16 +43,16 @@
private boolean required;
/**
- * add <code>opt</code> to this group
+ * Add the specified <code>Option</code> to this group.
*
- * @param opt the option to add to this group
- * @return this option group with opt added
+ * @param option the option to add to this group
+ * @return this option group with the option added
*/
- public OptionGroup addOption(Option opt)
+ public OptionGroup addOption(Option option)
{
// key - option name
// value - the option
- optionMap.put(opt.getKey(), opt);
+ optionMap.put(option.getKey(), option);
return this;
}
@@ -75,25 +78,22 @@
/**
* set the selected option of this group to <code>name</code>.
- * @param opt the option that is selected
+ * @param option the option that is selected
* @throws AlreadySelectedException if an option from this group has
* already been selected.
*/
- public void setSelected(Option opt)
- throws AlreadySelectedException
+ public void setSelected(Option option) throws AlreadySelectedException
{
// if no option has already been selected or the
// same option is being reselected then set the
// selected member variable
- if ((this.selected == null) || this.selected.equals(opt.getOpt()))
+ if ((this.selected == null) || this.selected.equals(option.getOpt()))
{
- this.selected = opt.getOpt();
+ this.selected = option.getOpt();
}
else
{
- throw new AlreadySelectedException("an option from this group has "
- + "already been selected: '"
- + selected + "'");
+ throw new AlreadySelectedException(this, option);
}
}
@@ -163,4 +163,4 @@
return buff.toString();
}
-}
\ No newline at end of file
+}
Modified: commons/proper/cli/branches/cli-1.x/src/test/org/apache/commons/cli/OptionGroupTest.java
URL: http://svn.apache.org/viewvc/commons/proper/cli/branches/cli-1.x/src/test/org/apache/commons/cli/OptionGroupTest.java?rev=679606&r1=679605&r2=679606&view=diff
==============================================================================
--- commons/proper/cli/branches/cli-1.x/src/test/org/apache/commons/cli/OptionGroupTest.java (original)
+++ commons/proper/cli/branches/cli-1.x/src/test/org/apache/commons/cli/OptionGroupTest.java Thu Jul 24 15:55:58 2008
@@ -139,7 +139,7 @@
assertTrue( "Confirm TWO extra args", cl.getArgList().size() == 2);
}
- public void testTwoOptionsFromGroup()
+ public void testTwoOptionsFromGroup() throws Exception
{
String[] args = new String[] { "-f", "-d" };
@@ -148,16 +148,15 @@
parser.parse( _options, args);
fail( "two arguments from group not allowed" );
}
- catch (ParseException e)
+ catch (AlreadySelectedException e)
{
- if( !( e instanceof AlreadySelectedException ) )
- {
- fail( "incorrect exception caught:" + e.getMessage() );
- }
+ assertNotNull("null option group", e.getOptionGroup());
+ assertEquals("selected option", "f", e.getOptionGroup().getSelected());
+ assertEquals("option", "d", e.getOption().getOpt());
}
}
- public void testTwoLongOptionsFromGroup()
+ public void testTwoLongOptionsFromGroup() throws Exception
{
String[] args = new String[] { "--file", "--directory" };
@@ -166,12 +165,11 @@
parser.parse(_options, args);
fail( "two arguments from group not allowed" );
}
- catch (ParseException e)
+ catch (AlreadySelectedException e)
{
- if( !( e instanceof AlreadySelectedException ) )
- {
- fail( "incorrect exception caught:" + e.getMessage() );
- }
+ assertNotNull("null option group", e.getOptionGroup());
+ assertEquals("selected option", "f", e.getOptionGroup().getSelected());
+ assertEquals("option", "d", e.getOption().getOpt());
}
}