CmdLnResult.java Source Code

  • CmdLnResult Javadoc
    /*
     * Copyright (C) 2007-2010 Stephen Ostermiller
     * http://ostermiller.org/contact.pl?regarding=Java+Utilities
     *
     * This program 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 2 of the License, or
     * (at your option) any later version.
     *
     * This program 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.
     *
     * See LICENSE.txt for details.
     */
    package com.Ostermiller.util;
    
    import java.util.*;
    
    /**
     * Result when a command line option is found.
     * Contains the original option and all of its arguments.
     *
     * More information about this class and code samples for suggested use are
     * available from <a target="_top" href=
     * "http://ostermiller.org/utils/CmdLn.html">ostermiller.org</a>.
     *
     * @author Stephen Ostermiller http://ostermiller.org/contact.pl?regarding=Java+Utilities
     * @since ostermillerutils 1.07.00
     */
    public class CmdLnResult
    {
    	/**
    	 * The option that caused this result
    	 *
    	 * @since ostermillerutils 1.07.00
    	 */
    	private CmdLnOption option;
    
    	/**
    	 * The arguments that have been found
    	 * for the option.
    	 *
    	 * @since ostermillerutils 1.07.00
    	 */
    	private ArrayList<String> arguments;
    
    	/**
    	 * New command line result
    	 *
    	 * @param option Option that caused this result
    	 *
    	 * @since ostermillerutils 1.07.00
    	 */
    	CmdLnResult(CmdLnOption option){
    		this.option = option;
    	}
    
    	/**
    	 * @return the option that caused this result
    	 *
    	 * @since ostermillerutils 1.07.00
    	 */
    	public CmdLnOption getOption(){
    		return option;
    	}
    
    	/**
    	 * @param argument add an argument to this result
    	 * @throws IllegalStateException if too many arguments have been added
    	 *
    	 * @since ostermillerutils 1.07.00
    	 */
    	void addArgument(String argument){
    		if (hasAllArguments()){
    			throw new IllegalStateException("Too many arguments to option");
    		}
    		if (arguments == null){
    			arguments = new ArrayList<String>(Math.min(option.getMaxArguments(), 16));
    		}
    		arguments.add(argument);
    	}
    
    
    	/**
    	 * @return true iff enough arguments have been added (max not exceeded)
    	 *
    	 * @since ostermillerutils 1.07.00
    	 */
    	boolean hasAllArguments(){
    		return (getArgumentCount() >= option.getMaxArguments());
    	}
    
    	/**
    	 * @return true iff more arguments need to be added (min not satisfied)
    	 *
    	 * @since ostermillerutils 1.07.00
    	 */
    	boolean requiresMoreArguments(){
    		return (getArgumentCount() < option.getMinArguments());
    	}
    
    	/**
    	 * Get the argument count for this option
    	 * @return number of arguments
    	 *
    	 * @since ostermillerutils 1.07.00
    	 */
    	public int getArgumentCount(){
    		if (arguments == null) return 0;
    		return arguments.size();
    	}
    
    	/**
    	 * Get all the arguments, in the order that
    	 * they were specified.
    	 * @return unmodifiable list of arguments or null if none
    	 *
    	 * @since ostermillerutils 1.07.00
    	 */
    	public List<String> getArguments(){
    		if (getArgumentCount() == 0) return null;
    		return Collections.unmodifiableList(arguments);
    	}
    
    	/**
    	 * get the first argument, or null if no arguments
    	 * @return first argument
    	 *
    	 * @since ostermillerutils 1.07.00
    	 */
    	public String getArgument(){
    		if (getArgumentCount() == 0) return null;
    		return arguments.get(0);
    	}
    }