Mega Code Archive

 
Categories / Java / Development Class
 

A representation of the command line arguments passed to a Java class main(String[]) method

/*   * Licensed to the Apache Software Foundation (ASF) under one  * or more contributor license agreements.  See the NOTICE file  * distributed with this work for additional information  * regarding copyright ownership.  The ASF licenses this file  * to you under the Apache License, Version 2.0 (the  * "License"); you may not use this file except in compliance  * with the License.  You may obtain a copy of the License at  *   * http://www.apache.org/licenses/LICENSE-2.0  *   * Unless required by applicable law or agreed to in writing,  * software distributed under the License is distributed on an  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY  * KIND, either express or implied.  See the License for the  * specific language governing permissions and limitations  * under the License.  *  */ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; /**  *  * CommandLine is a representation of the command line arguments passed to   * a Java class' main(String[]) method. It parses the arguments for flags   * (tokens prefixed with a dash ('-')), flag-value pairs, and an ordered   * list of argument values.  *  * @author Dan Jemiolo (danj)  *  */ public class CommandLine {     //     // all non-flag values     //     private String[] _arguments = null;          //     // the flags (-foo) that were found on the command line     //     private Map _flags = new HashMap();          //     // the flag values that are expected to be followed with a value      // that allows the application to process the flag.     //     private Set _flagsWithValues = new HashSet();          /**      *       * @return All of the values specified on the command line that were       *         not a flag or associated with a flag.      *      */     public String[] getArguments()     {         return _arguments;     }          /**      *       * @param flagName      *       * @return The value that was specified after the flag, or null if       *         the flag was not specified.      *      * @see #hasFlag(String)      *       */     public String getFlagValue(String flagName)     {         return (String)_flags.get(flagName);     }          public int getNumberOfArguments()     {         return _arguments.length;     }          public int getNumberOfFlags()     {         return _flags.size();     }          /**      *       * @param flagName      *       * @return True if the flag was specified on the command line.      *      */     public boolean hasFlag(String flagName)     {         return _flags.containsKey(flagName);     }          /**      *       * Reads through each argument in the given array, picking out the       * flags (and optionally,their values) from the regular arguments.       * Users should use the saveFlagValue(String) method before this one       * in order to have their command line parsed correctly.      *      * @param args      *        The command line arguments given to the application.      *      */     public void parse(String[] args)     {         List regularArgs = new ArrayList();                  for (int n = 0; n < args.length; ++n)         {             if (args[n].charAt(0) == '-')             {                 String name = args[n];                 String value = null;                                  if (_flagsWithValues.contains(args[n]) &&                      n < args.length - 1)                     value = args[++n];                                  _flags.put(name, value);             }                          else                 regularArgs.add(args[n]);         }                  int size = regularArgs.size();         _arguments = (String[])regularArgs.toArray(new String[size]);     }     /**      *       * Tells the command line parser to associate the given flag with the       * value that comes after it in the list of arguments (if the flag is       * found). This will allow the user to retrieve the flag-value pair       * later and prevent the flag value from being lumped in with the       * regular arguments.      *      * @param flagName      *      */     public void saveFlagValue(String flagName)     {         _flagsWithValues.add(flagName);     } }