001/**
002 * Copyright 2003-2004 The Apache Software Foundation
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package net.dpml.cli;
017
018import java.util.List;
019
020/**
021 * A CommandLine that detected values and options can be written to.
022 */
023public interface WriteableCommandLine extends CommandLine
024{
025    /**
026     * Adds an Option to the CommandLine
027     * @param option the Option to add
028     */
029    void addOption( Option option );
030    
031    /**
032     * Adds a value to an Option in the CommandLine.
033     * @param option the Option to add to
034     * @param value the value to add
035     */
036    void addValue( Option option, Object value );
037
038    /**
039     * Sets the default values for an Option in the CommandLine
040     * @param option the Option to add to
041     * @param defaultValues the defaults for the option
042     */
043    void setDefaultValues( Option option, List defaultValues );
044    
045    /**
046     * Adds a switch value to an Option in the CommandLine.
047     * @param option the Option to add to
048     * @param value the switch value to add
049     * @throws IllegalStateException if the switch has already been added
050     */
051    void addSwitch( Option option, boolean value ) throws IllegalStateException;
052    
053    /**
054     * Sets the default state for a Switch in the CommandLine.
055     * @param option the Option to add to
056     * @param defaultSwitch the defaults state for ths switch
057     */
058    void setDefaultSwitch( Option option, Boolean defaultSwitch );
059    
060    /**
061     * Adds a property value to a name in the CommandLine.
062     * Replaces any existing value for the property.
063     * 
064     * @param property the name of the property
065     * @param value the value of the property
066     */
067    void addProperty( String property, String value );
068    
069    /**
070     * Detects whether the argument looks like an Option trigger 
071     * @param argument the argument to test
072     * @return true if the argument looks like an Option trigger
073     */
074    boolean looksLikeOption( String argument );
075}