1 /** 2 * Redistribution and use in source and binary forms, with or without 3 * modification, are permitted provided that the following conditions are 4 * met : 5 * 6 * . Redistributions of source code must retain the above copyright 7 * notice, this list of conditions and the following disclaimer. 8 * 9 * . Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * . The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 24 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 25 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 package cpptools; 30 31 import java.util.ArrayList; 32 import java.util.List; 33 34 /** 35 * Implements a simple program options handler. 36 * 37 * @author Mathieu Champlon 38 */ 39 public class Options 40 { 41 private final String[] args; 42 43 /** 44 * Create a program options handler. 45 * 46 * @param args program arguments 47 */ 48 public Options( final String[] args ) 49 { 50 this.args = args.clone(); 51 } 52 53 /** 54 * Retrieve a list of the non-parsable remaining arguments. 55 * 56 * @return a list of arguments 57 */ 58 public final List<String> getArgList() 59 { 60 final List<String> result = new ArrayList<String>(); 61 for( int i = 0; i < args.length; ++i ) 62 if( !args[i].startsWith( "-" ) ) 63 result.add( args[i] ); 64 return result; 65 } 66 67 /** 68 * Test if an option is set. 69 * 70 * @param name the option 71 * @return whether the option has been set or not 72 */ 73 public final boolean hasOption( final String name ) 74 { 75 for( int i = 0; i < args.length; ++i ) 76 if( args[i].startsWith( '-' + name ) ) 77 return true; 78 return false; 79 } 80 81 private boolean isOption( final String arg, final String name ) 82 { 83 return arg.startsWith( '-' + name ); 84 } 85 86 /** 87 * Retrieve a list of all values for a given option. 88 * <p> 89 * With the option <em>-optionvalue</em> and the name <em>option</em> will return <em>value</em>. 90 * 91 * @param name the option 92 * @return a list of values 93 */ 94 public final List<String> getOptionValues( final String name ) 95 { 96 final List<String> result = new ArrayList<String>(); 97 for( int i = 0; i < args.length; ++i ) 98 if( isOption( args[i], name ) ) 99 result.add( args[i].substring( 1 + name.length() ) ); 100 return result; 101 } 102 103 /** 104 * Retrieve a list of all properties for a given option. 105 * <p> 106 * With the option <em>-optionproperty=value</em> and the name <em>option</em> will return <em>property</em>. 107 * 108 * @param name the option 109 * @return a list of values 110 */ 111 public final List<String> getOptionProperties( final String name ) 112 { 113 final List<String> result = new ArrayList<String>(); 114 for( int i = 0; i < args.length; ++i ) 115 if( isOption( args[i], name ) ) 116 { 117 final int index = args[i].indexOf( '=' ); 118 if( index == -1 ) 119 result.add( args[i].substring( 1 + name.length() ) ); 120 else 121 result.add( args[i].substring( 1 + name.length(), index ) ); 122 } 123 return result; 124 } 125 126 /** 127 * Retrieve a list of all property values for a given option. 128 * <p> 129 * With the option <em>-optionproperty=value</em> and the name <em>option</em> will return <em>value</em>. 130 * 131 * @param name the option 132 * @return a list of values 133 */ 134 public final List<String> getOptionPropertyValues( final String name ) 135 { 136 final List<String> result = new ArrayList<String>(); 137 for( int i = 0; i < args.length; ++i ) 138 if( isOption( args[i], name ) ) 139 { 140 final int index = args[i].indexOf( '=' ); 141 if( index == -1 ) 142 result.add( "" ); 143 else 144 result.add( args[i].substring( 1 + index ) ); 145 } 146 return result; 147 } 148 }