001: /*
002: Copyright (c) 2003, Dennis M. Sosnoski
003: All rights reserved.
004:
005: Redistribution and use in source and binary forms, with or without modification,
006: are permitted provided that the following conditions are met:
007:
008: * Redistributions of source code must retain the above copyright notice, this
009: list of conditions and the following disclaimer.
010: * Redistributions in binary form must reproduce the above copyright notice,
011: this list of conditions and the following disclaimer in the documentation
012: and/or other materials provided with the distribution.
013: * Neither the name of JargP nor the names of its contributors may be used
014: to endorse or promote products derived from this software without specific
015: prior written permission.
016:
017: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
018: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
019: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
020: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
021: ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
022: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
023: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
024: ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
025: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
026: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
027: */
028:
029: package org.jargp;
030:
031: /**
032: * Command line flag definition. This defines a simple command line flag that
033: * sets a boolean parameter value. Both <code>true</code> and <code>false</code>
034: * settings are supported.
035: *
036: * @author Dennis M. Sosnoski
037: * @version 1.0
038: */
039:
040: public class BoolDef extends ParameterDef {
041: /** Value set when flag is seen. */
042: protected boolean m_value;
043:
044: /**
045: * Constructor with flag sense specified and description.
046: *
047: * @param chr parameter flag character
048: * @param name field name for parameter
049: * @param desc discription text for parameter (may be <code>null</code>)
050: * @param sense value set when flag is seen
051: */
052:
053: public BoolDef(char chr, String name, String desc, boolean sense) {
054: super (chr, name, desc);
055: m_value = sense;
056: }
057:
058: /**
059: * Constructor with flag sense specified.
060: *
061: * @param chr parameter flag character
062: * @param name field name for parameter
063: * @param sense value set when flag is seen
064: */
065:
066: public BoolDef(char chr, String name, boolean sense) {
067: this (chr, name, null, sense);
068: }
069:
070: /**
071: * Constructor defaulting to flag <code>true</code> with description.
072: *
073: * @param chr parameter flag character
074: * @param name field name for parameter
075: * @param desc discription text for parameter
076: */
077:
078: public BoolDef(char chr, String name, String desc) {
079: this (chr, name, desc, true);
080: }
081:
082: /**
083: * Constructor defaulting to flag <code>true</code>.
084: *
085: * @param chr parameter flag character
086: * @param name field name for parameter
087: */
088:
089: public BoolDef(char chr, String name) {
090: this (chr, name, null, true);
091: }
092:
093: /**
094: * Bind parameter to target class field.
095: *
096: * @param clas target class for saving parameter values
097: * @throws IllegalArgumentException if the field is not a boolean
098: */
099:
100: protected void bindToClass(Class clas) {
101: super .bindToClass(clas);
102: Class type = m_field.getType();
103: if (type != Boolean.class && type != Boolean.TYPE) {
104: throw new IllegalArgumentException("Field '" + m_name
105: + "'in " + clas.getName()
106: + " is not of type boolean");
107: }
108: }
109:
110: /**
111: * Handle argument. This implementation of the abstract base class method
112: * just sets the parameter value as appropriate for the flag.
113: *
114: * @param proc argument processor making call to handler
115: * @throws IllegalArgumentException on error in processing
116: */
117:
118: public void handle(ArgumentProcessor proc) {
119: proc.setValue(m_value ? Boolean.TRUE : Boolean.FALSE, m_field);
120: }
121: }
|