Development Class Java

/*
 * 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 .
*/
//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 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();
    
    // 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