Advertisement
HwapX

Java Argument Parser V2

Dec 15th, 2013
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.util.Map;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import java.util.ArrayList;
  5. import java.util.InputMismatchException;
  6.  
  7. public class ArgParser{
  8.  
  9.     public static void main(String[] args) {
  10.         Map<String, List<String>> parsedArgs = ParseArgs(args);
  11.         Map<String, String[]> rules = new HashMap<String, String[]>();
  12.        
  13.         rules.put("filmes", new String[]{"nome_ator1", "nome_ator2", "decada"});
  14.         rules.put("episodios", new String[]{"nome_ator", "titulo_serie"});
  15.         rules.put("generos", new String[]{"nome_ator"});
  16.        
  17.         ValidateArgs(parsedArgs, rules);
  18.        
  19.         for(Map.Entry<String, List<String>> arg: parsedArgs.entrySet()) {
  20.             System.out.println(arg.getKey());
  21.            
  22.             for(String subArg: arg.getValue())
  23.                 System.out.println("\t" + subArg);
  24.         }
  25.     }
  26.  
  27.     public static Map<String, List<String>> ParseArgs(String[] args) {
  28.         Map<String, List<String>> result = new HashMap<String, List<String>>();
  29.         List<String> subArgs = null;
  30.        
  31.         for(String arg: args)
  32.             if(arg.startsWith("-"))
  33.                 result.put(arg.substring(1), subArgs = new ArrayList<String>());
  34.             else if(subArgs != null)
  35.                 subArgs.add(arg);
  36.             else
  37.                 throw new IllegalArgumentException("Argumento Invalido!");
  38.        
  39.         return result;
  40.     }
  41.    
  42.     public static void ValidateArgs(Map<String, List<String>> args, Map<String, String[]> rules) {
  43.         for(Map.Entry<String, String[]> rule: rules.entrySet()) {
  44.             List<String> subArgs = args.get(rule.getKey());
  45.             String[] argNames = rule.getValue();
  46.            
  47.             if(subArgs == null || subArgs.size() != argNames.length) {
  48.                 String Msg = String.format("O parametro <%s> espera %d subargumentos.\nModo de uso: <-%s>"
  49.                                            , rule.getKey(), argNames.length, rule.getKey());
  50.                
  51.                 for(String str: argNames)
  52.                     Msg += " <" + str + ">";
  53.                    
  54.                 throw new InputMismatchException(Msg);
  55.             }
  56.         }
  57.     }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement