1 23 24 29 package com.sun.cli.jmx.cmd; 30 31 import java.util.ArrayList ; 32 import java.util.Iterator ; 33 34 35 36 public class ArgHelperOptionInfoImplBase implements ArgHelper.OptionsInfo 37 { 38 final ArrayList mOptionDescriptions; 39 40 public 41 ArgHelperOptionInfoImplBase( ) 42 throws ArgHelper.IllegalOptionException 43 { 44 mOptionDescriptions = new ArrayList (); 45 } 46 47 public 48 ArgHelperOptionInfoImplBase( String options ) 49 throws ArgHelper.IllegalOptionException 50 { 51 mOptionDescriptions = new ArrayList (); 52 53 addOptions( options ); 54 } 55 56 public String 57 tokenToOptionName( String token ) 58 { 59 final int delimIndex = token.indexOf( '=' ); 60 61 String name = token; 62 63 if ( delimIndex > 0 ) 64 { 65 name = token.substring( 0, delimIndex ); 66 } 67 68 return( name ); 69 } 70 71 public String 72 tokenToOptionData( String token ) 73 { 74 final int delimIndex = token.indexOf( '=' ); 75 76 String data = null; 78 if ( delimIndex > 0 ) 79 { 80 data = token.substring( delimIndex + 1, token.length() ); 82 } 83 84 return( data ); 85 } 86 87 private static void 88 dm( Object o ) 89 { 90 System.out.println( o.toString() ); 91 } 92 93 OptionDesc 94 findOptionDesc( String token ) 95 { 96 OptionDesc info = null; 97 98 final String optionName = tokenToOptionName( OptionDesc.mapName( token ) ); 99 100 final Iterator iter = mOptionDescriptions.iterator(); 101 while( iter.hasNext() ) 102 { 103 final OptionDesc optionDesc = (OptionDesc)iter.next(); 104 105 if ( optionDesc.mName.equalsIgnoreCase( optionName ) ) 106 { 107 info = optionDesc; 108 break; 109 } 110 } 111 return( info ); 112 } 113 114 public boolean 115 isLegalOption( String token ) 116 { 117 final boolean isLegal = (findOptionDesc( token ) != null); 118 119 return( isLegal ); 120 } 121 122 public void 123 checkLegalOption( String token ) 124 { 125 if ( ! isLegalOption( token ) ) 126 { 127 throw new IllegalArgumentException ( "illegal option: " + token ); 128 } 129 } 130 131 public int 132 getNumValues( String token ) 133 { 134 checkLegalOption( token ); 135 136 final OptionDesc info = findOptionDesc( token ); 137 138 return( info.mNumValues ); 139 } 140 141 public boolean 142 isBoolean( String token ) 143 { 144 checkLegalOption( token ); 145 146 final OptionDesc info = findOptionDesc( token ); 147 148 return( info.mIsBoolean ); 149 } 150 151 public void 152 foundIllegalOption( String token ) 153 throws ArgHelper.IllegalOptionException 154 { 155 throw new ArgHelper.IllegalOptionException( "illegal option: " + token ); 156 } 157 158 public void 159 addBoolean( String name ) 160 throws ArgHelper.IllegalOptionException 161 { 162 mOptionDescriptions.add( new OptionDesc( name ) ); 163 } 164 165 166 public void 167 addNonBoolean( String name, int numValues ) 168 throws ArgHelper.IllegalOptionException 169 170 { 171 mOptionDescriptions.add( new OptionDesc( name, numValues ) ); 172 } 173 174 175 public final static char MULTIPLE_DELIM = ' '; 176 public final static char NUMVALUES_DELIM = ','; 177 178 public void 179 addOptions( String list ) 180 throws ArgHelper.IllegalOptionException 181 { 182 final String [] names = list.split(" "); 183 184 for( int i = 0; i < names.length; ++i ) 185 { 186 final String [] data = names[ i ].split( "" + NUMVALUES_DELIM ); 187 188 if ( data.length == 1 ) 189 { 190 addBoolean( data[ 0 ] ); 191 } 192 else 193 { 194 addNonBoolean( data[ 0 ], new Integer ( data[ 1 ] ).intValue() ); 195 } 196 } 197 } 198 199 200 201 public final static class OptionDesc 202 { 203 public String mName; public int mNumValues; 205 public boolean mIsBoolean; 206 207 void 208 validateName( String name ) 209 throws ArgHelper.IllegalOptionException 210 { 211 if ( ! name.startsWith( "-" ) ) 212 { 213 throw new ArgHelper.IllegalOptionException( "invalid option name: " + name ); 214 } 215 } 216 217 OptionDesc( String name, int numValues ) 218 throws ArgHelper.IllegalOptionException 219 { 220 mName = mapName( name ); 221 222 validateName( mName ); 223 224 if ( numValues == 0 ) 225 { 226 throw new IllegalArgumentException ( "use OptionDesc( name ) for boolean options" ); 227 } 228 229 mNumValues = numValues; 230 mIsBoolean = false; 231 } 232 233 OptionDesc( String name ) 234 throws ArgHelper.IllegalOptionException 235 { 236 mName = mapName( name ); 237 238 validateName( mName ); 239 240 mIsBoolean = true; 241 mNumValues = 1; 242 } 243 244 static String 245 mapName( String name ) 246 { 247 String mappedName = name; 248 249 if ( ! name.startsWith( "-" ) ) 250 { 251 final String prefix = (name.length() == 1) ? "-" : "--"; 252 253 mappedName = prefix + name; 254 } 255 return( mappedName ); 256 } 257 258 public String 259 toString() 260 { 261 if ( mIsBoolean ) 262 { 263 return( mName + ":boolean" ); 264 } 265 return( mName + ":" + mNumValues + " values" ); 266 } 267 } 268 269 } 270 271 | Popular Tags |