1 18 19 package com.Ostermiller.util; 20 import java.util.*; 21 import java.io.*; 22 import java.net.URLEncoder ; 23 import java.net.URLDecoder ; 24 25 34 public class CGIParser { 35 36 39 private HashMap<String ,ArrayList<String >> nameValuePairHash = new HashMap<String ,ArrayList<String >>(); 40 41 44 private LinkedList<NameValuePair> nameValuePairList = new LinkedList<NameValuePair>(); 45 46 60 public CGIParser(InputStream in) throws IOException { 61 if (in == null) return; 62 CGILexer lex = new CGILexer(in); 63 parse(lex, "ISO-8859-1"); 64 } 65 66 80 public CGIParser(InputStream in, String charset) throws IOException, UnsupportedEncodingException { 81 if (in == null) return; 82 CGILexer lex = new CGILexer(new InputStreamReader(in, charset)); 83 parse(lex, charset); 84 } 85 86 97 public CGIParser(Reader in) throws IOException { 98 if (in == null) return; 99 CGILexer lex = new CGILexer(in); 100 parse(lex, "ISO-8859-1"); 101 } 102 103 114 public CGIParser(Reader in, String charset) throws IOException, UnsupportedEncodingException { 115 if (in == null) return; 116 CGILexer lex = new CGILexer(in); 117 parse(lex, charset); 118 } 119 120 129 public CGIParser(String s){ 130 if (s == null) return; 131 try { 132 CGILexer lex = new CGILexer(new StringReader(s)); 133 parse(lex, "ISO-8859-1"); 134 } catch (IOException x){ 135 throw new RuntimeException (x); 137 } 138 } 139 140 149 public CGIParser(String s, String charset) throws IOException, UnsupportedEncodingException { 150 if (s == null) return; 151 try { 152 CGILexer lex = new CGILexer(new StringReader(s)); 153 parse(lex, charset); 154 } catch (IOException x){ 155 throw new RuntimeException (x); 157 } 158 } 159 160 168 private void parse(CGILexer lex, String charset) throws IOException, UnsupportedEncodingException { 169 String nameValue, name, value; 170 while ((nameValue = lex.nextToken()) != null) { 171 int equalInd = nameValue.indexOf("="); 172 if (equalInd == -1){ 173 name = nameValue; 174 value = ""; 175 } else { 176 name = nameValue.substring(0, equalInd); 177 value = nameValue.substring(equalInd+1, nameValue.length()); 178 } 179 try { 180 name = URLDecoder.decode(name, charset); 181 } catch (IllegalArgumentException iax){ 182 name = ""; 184 } 185 try { 186 value = URLDecoder.decode(value, charset); 187 } catch (IllegalArgumentException iax){ 188 value = ""; 190 } 191 192 ArrayList<String > values = (ArrayList<String >)nameValuePairHash.get(name); 194 if (values == null){ 195 values = new ArrayList<String >(); 196 } 197 values.add(value); 198 nameValuePairHash.put(name, values); 199 200 nameValuePairList.add(new NameValuePair(name, value)); 202 } 203 } 204 205 215 public String [] getParameterValues(String name){ 216 ArrayList<String > values = (ArrayList<String >)nameValuePairHash.get(name); 217 if (values == null){ 218 return null; 219 } 220 String [] valArray = new String [values.size()]; 221 return (String [])(values.toArray(valArray)); 222 } 223 224 234 public void setParameter(String name, String value){ 235 Iterator listIterator = nameValuePairList.iterator(); 236 while (listIterator.hasNext()){ 237 NameValuePair nameValuePair = (NameValuePair)listIterator.next(); 238 if (nameValuePair.getName().equals(name)){ 239 listIterator.remove(); 240 } 241 } 242 243 if (value == null){ 244 nameValuePairHash.remove(name); 245 return; 246 } 247 ArrayList<String > values = (ArrayList<String >)nameValuePairHash.get(name); 248 if (values == null){ 249 values = new ArrayList<String >(); 250 } 251 values.clear(); 252 values.add(value); 253 nameValuePairHash.put(name, values); 254 nameValuePairList.add(new NameValuePair(name, value)); 255 } 256 257 268 public void setParameter(String name, String [] values){ 269 Iterator listIterator = nameValuePairList.iterator(); 270 while (listIterator.hasNext()){ 271 NameValuePair nameValuePair = (NameValuePair)listIterator.next(); 272 if (nameValuePair.getName().equals(name)){ 273 listIterator.remove(); 274 } 275 } 276 277 if (values == null || values.length == 0){ 278 nameValuePairHash.remove(name); 279 return; 280 } 281 for (int i=0; i<values.length; i++){ 282 if (values[i] == null) throw new NullPointerException (); 283 } 284 ArrayList<String > valuesVec = (ArrayList<String >)nameValuePairHash.get(name); 285 if (valuesVec == null){ 286 valuesVec = new ArrayList<String >(); 287 } 288 valuesVec.clear(); 289 for (int i=0; i<values.length; i++){ 290 valuesVec.add(values[i]); 291 nameValuePairList.add(new NameValuePair(name, values[i])); 292 } 293 nameValuePairHash.put(name, valuesVec); 294 } 295 296 306 public void addParameter(String name, String value){ 307 if (value == null){ 308 return; 309 } 310 ArrayList<String > values = (ArrayList<String >)nameValuePairHash.get(name); 311 if (values == null){ 312 values = new ArrayList<String >(); 313 } 314 values.add(value); 315 nameValuePairHash.put(name, values); 316 nameValuePairList.add(new NameValuePair(name, value)); 317 } 318 319 330 public void addParameter(String name, String [] values){ 331 if (values == null || values.length == 0){ 332 return; 333 } 334 for (int i=0; i<values.length; i++){ 335 if (values[i] == null) throw new NullPointerException (); 336 } 337 ArrayList<String > valuesVec = (ArrayList<String >)nameValuePairHash.get(name); 338 if (valuesVec == null){ 339 valuesVec = new ArrayList<String >(); 340 } 341 for (int i=0; i<values.length; i++){ 342 valuesVec.add(values[i]); 343 nameValuePairList.add(new NameValuePair(name, values[i])); 344 } 345 nameValuePairHash.put(name, valuesVec); 346 } 347 348 363 public String getParameter(String name){ 364 ArrayList<String > values = (ArrayList<String >)nameValuePairHash.get(name); 365 if (values == null){ 366 return null; 367 } 368 return (String )(values.get(0)); 369 } 370 371 382 public Enumeration<String > getParameterNames(){ 383 return (Enumeration<String >)new IteratorEnumeration<String >(nameValuePairHash.keySet().iterator()); 384 } 385 386 399 public String [] getParameterNameList(){ 400 return (String [])nameValuePairHash.keySet().toArray(new String [0]); 401 } 402 403 408 public NameValuePair[] getParameters(){ 409 return (NameValuePair[])nameValuePairList.toArray(new NameValuePair[0]); 410 } 411 412 421 public String toString(String enc) throws UnsupportedEncodingException { 422 StringBuffer sb = new StringBuffer (); 423 boolean bFirst = true; 424 Iterator listIterator = nameValuePairList.iterator(); 425 while (listIterator.hasNext()){ 426 NameValuePair nameValuePair = (NameValuePair)listIterator.next(); 427 if (!bFirst) sb.append('&'); 428 bFirst = false; 429 sb.append(nameValuePair.toString(enc)); 430 } 431 return sb.toString(); 432 } 433 434 442 public String toString() { 443 try { 444 return toString("UTF-8"); 445 } catch (UnsupportedEncodingException uex){ 446 throw new RuntimeException (uex); 448 } 449 } 450 } 451 | Popular Tags |