Mega Code Archive

 
Categories / Java / Development Class
 

CommandLine Parser

/*  * This file is part of the AusStage Utilities Package  *  * The AusStage Utilities Package is free software: you can redistribute  * it and/or modify it under the terms of the GNU General Public License   * as published by the Free Software Foundation, either version 3 of the  * License, or (at your option) any later version.  *  * The AusStage Utilities Package is distributed in the hope that it will   * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty   * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  * GNU General Public License for more details.  *  * You should have received a copy of the GNU General Public License  * along with the AusStage Utilities Package.    * If not, see <http://www.gnu.org/licenses/>. */ //package au.edu.ausstage.utils; // import additional packages import java.util.HashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; /**  * A class of methods useful when reading arguments from the command line  */ public class CommandLineParser {   // declare private class level variables   private HashMap<String,String> arguments;   /**    * Class constructor    * Parse the command line arguments such that any argument starting with '-' or '--' is assumed to be a key    * The following argument if it doesn't start with a '-' or '--' is assumed to be a value    *    * @param args the array of command line arguments    */   public CommandLineParser(String[] args) {        // initialise the arguments map     arguments = new HashMap<String, String>();          // declare other helper variables     String key   = null;     String value = null;     int    index = 0;          // loop through the list of arguments     for(int i = 0; i < args.length; i++) {            // look for a key       if (args[i].startsWith("--")) {         // this is a key that starts with a --         key = args[i].substring(2);       } else if(args[i].startsWith("-")) {         // this is a key that start with a -         key = args[i].substring(1);       } else {         // this is a key that starts with nothing as a value         arguments.put(args[i], null);                  // end this iteration of the loop         continue;       }              // look for a value       // does the key contain an = character?       index = key.indexOf('=');              if(index == -1) {         // no - use the next argument as the value         // is there a value to use         if((i + 1) < args.length) {           // yes - but does the value look like a key?           if(args[i + 1].charAt(0) != '-') {             // no - so add the key and value             arguments.put(key, args[i + 1]);                          // increment the count so we don't process this value again             i++;           } else {             // yes - so add just the key             arguments.put(args[i], null);           }         } else {           // no - so just add the key           arguments.put(args[i], null);         }                   } else {             // yes - extract the value from the key         value = key.substring(index + 1);                  // fix the key             key = key.substring(0, index);                          // add the key and value to the map             arguments.put(key, value);           }     } // end loop     } // end class constructor      /**    * get the value of the first key found in the list of arguments    *     * @param  key   the key to lookup    * @return value the value of the arguments    */   public String getValue(String key) {        // check to ensure the key is valid     if(InputUtils.isValid(key)) {           // return the key if found or null if it isn't       return arguments.get(key);         }          // invalid key so return null     return null;   } // end getValue method      /**    * check to see if a key exists in the list arguments    *    * @param  key   the key to lookup    * @return value the value of the arguments    */   public boolean containsKey(String key) {        // check to ensure the key is valid     if(InputUtils.isValid(key)) {            if(arguments.get(key) != null) {         return true;       } else {         return false;       }       }          // invalid key so return null     return false;      } // end containsKey method    } // end class definition class InputUtils {   /**    * check to ensure a parameter value is valid    *    * @param value the parameter value    *    * @return      true if, and only if, the parameter is valid    */   public static boolean isValid(String value) {        // check on the parameter value     if(value == null) {       return false;     } else {       value = value.trim();       if(value.equals("") == true) {         return false;       }      }          // passed validation     return true;   } // end the isValid method      /**    * check to ensure a parameter is valid and is from a list    *    * @param value the parameter value    * @param list  the list of allowed values    *    * @return      true if, and only if, the parameter is valid    */   public static boolean isValid(String value, String[] list) {        // check if it is not null first     if(isValid(value) == false) {       return false;     }          // check the value against the list     boolean isValid = false;          for(int i = 0; i < list.length; i++) {       if(list[i].equals(value)) {         isValid = true;       }     }          return isValid;     } // end the isValid method with list      /**    * check to ensure a parameter value is valid    *    * @param value the parameter value    *    * @return      true if, and only if, the parameter is valid    */   public static boolean isValidInt(String value) {        if(isValid(value) == false) {       return false;     }        // can we parse the value as a int?     try {       Integer.parseInt(value);     } catch (java.lang.NumberFormatException ex) {       // nope       return false;     }          // if we get this far everything is OK     return true;      } // end the isValid method      /**    * check to ensure a parameter value is valid    *    * @param value   the parameter value    * @param minimum the minimum allowed value    *    * @return      true if, and only if, the parameter is valid    */   public static boolean isValidInt(int value, int minimum) {          if(value >= minimum) {       return false;     } else {       return true;     }          } // end the isValid method      /**    * check to ensure a parameter value is valid    *    * @param value    the parameter value    * @param minimum  the minimum allowed value    * @param maximum the maximum allowed value    *    * @return      true if, and only if, the parameter is valid    */   public static boolean isValidInt(int value, int minimum, int maximum) {          if(value >= minimum && value <= maximum) {       return true;     } else {       return false;     }         } // end the isValid method      /**    * check to ensure a parameters value is valid    *    * @param date the date to check in the format yyyy-mm-dd    */   public static boolean isValidDate(String date) {        // define the pattern     Pattern pattern = Pattern.compile("^\\d{4}-\\d{2}-\\d{2}$");     Matcher matcher = pattern.matcher(date);          if(matcher.find() == true) {       return true;     } else {       return false;     }     }           /**    * A method to take an array of values and return them in a comma delimited list    *     * @param values the array of values to process    *    * @return       the string representation of the list    */   public static String arrayToString(String[] values) {        return java.util.Arrays.toString(values).replaceAll("[\\]\\[]", "");      } // end the arrayToString method      /**    * A method to ensure an array of strings represent an array of integers    *    * @param values the array of strings    *    * @return       true if, and only if, all of the values pass inspection    */   public static boolean isValidArrayInt(String[] values) {        // declare helper variables     boolean status = true;          // loop through all of the elements in the array     for(int i = 0; i < values.length; i++) {       if(isValidInt(values[i]) == false) {         // this value isn't valid         status = false;                  // exit the loop early         i = values.length;       }     }          // return the status     return status;        } // end isValidArrayInt method    } // end class definition