/* ************************************************************** *
 *                                                                *
 * Copyright (c) 2005, Kota Mizushima, All rights reserved.       *
 *                                                                *
 *                                                                *
 * This software is distributed under the modified BSD License.   *
 * ************************************************************** */
package onion.tools.option;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author Kota Mizushima
 * Date: 2005/04/08
 */
public class CommandLineParser {
  private final OptionConf[] confs;
  
  public CommandLineParser(OptionConf[] confs) {
    this.confs = confs;
  }
  
  public ParseResult parse(String[] cmdline){
    Map<String, Object> noArgOpts = new HashMap<String, Object>();
    Map<String, String> opts = new HashMap<String, String>();
    List<String> args = new ArrayList<String>();
    List<String> lackedOptNames = new ArrayList<String>();
    List<String> invalidOptNames = new ArrayList<String>();
    {
      int i;
      for(i = 0; i < cmdline.length; ) {
        if(cmdline[i].startsWith("-")) {
          String param = cmdline[i];
          OptionConf conf = getConf(param);
          if(conf == null){
            invalidOptNames.add(param);
            i++;
          }else if(conf.hasArgument()){
            if(i + 1 >= cmdline.length){
              lackedOptNames.add(param);
            }else{
              opts.put(param, cmdline[i + 1]);
            }
            i += 2;
          } else{
            noArgOpts.put(param, new Object());
            i++;
          }
        }else {
          args.add(cmdline[i]);
          i++;
        }
      }
    }
    if(lackedOptNames.size() == 0 && invalidOptNames.size() == 0){
      return new ParseSuccess(noArgOpts, opts, args);
    }else{
      return new ParseFailure(
        lackedOptNames.toArray(new String[0]), 
        invalidOptNames.toArray(new String[0]));
    }
  }
  
  private OptionConf getConf(String optionName){
    for(int i = 0; i < confs.length; i++){
      if(confs[i].getOptionName().equals(optionName)){
        return confs[i];
      }
    }
    return null;
  }
}
@@ -1152,16 +1152,9 @@
 ();%0A
-    %7B%0A  
+%0A
     
@@ -1164,18 +1164,16 @@
  i;%0A    
- 
- 
 for(i = 
@@ -1201,26 +1201,24 @@
 ; ) %7B%0A      
-  
 if(cmdline%5Bi
@@ -1246,18 +1246,16 @@
         
- 
- 
 String p
@@ -1269,26 +1269,24 @@
 cmdline%5Bi%5D;%0A
-  
         Opti
@@ -1319,26 +1319,24 @@
 m);%0A        
-  
 if(conf == n
@@ -1341,18 +1341,16 @@
  null)%7B%0A
-  
         
@@ -1385,33 +1385,29 @@
 ;%0A          
-  
 i++;%0A
-  
         %7Dels
@@ -1442,18 +1442,16 @@
         
-  
 if(i + 1
@@ -1471,18 +1471,16 @@
 ength)%7B%0A
-  
         
@@ -1516,26 +1516,24 @@
 ;%0A          
-  
 %7Delse%7B%0A     
@@ -1539,18 +1539,16 @@
         
- 
- 
 opts.put
@@ -1574,34 +1574,32 @@
  1%5D);%0A          
-  
 %7D%0A            i 
@@ -1598,18 +1598,16 @@
     
- 
- 
 i += 2;%0A
     
@@ -1602,18 +1602,16 @@
 i += 2;%0A
-  
         
@@ -1628,18 +1628,16 @@
         
- 
- 
 noArgOpt
@@ -1666,34 +1666,32 @@
 t());%0A          
-  
 i++;%0A          %7D
@@ -1683,30 +1683,26 @@
 ++;%0A        
-  %7D%0A  
+%7D%0A
       %7Delse 
@@ -1711,18 +1711,16 @@
         
-  
 args.add
@@ -1741,33 +1741,21 @@
         
-  
 i++;%0A
-        %7D%0A
       %7D%0A
@@ -1756,24 +1756,25 @@
     %7D%0A    %7D%0A
+%0A
     if(lacke

Prepare for Migration