View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.cli2;
18  
19  import java.util.Comparator;
20  import java.util.List;
21  import java.util.ListIterator;
22  import java.util.Set;
23  
24  /**
25   * The super type of all options representing a particular element of the
26   * command line interface.
27   */
28  public interface Option {
29  
30      /**
31       * Processes String arguments into a CommandLine.
32       *
33       * The iterator will initially point at the first argument to be processed
34       * and at the end of the method should point to the first argument not
35       * processed. This method MUST process at least one argument from the
36       * ListIterator.
37       *
38       * @param commandLine
39       *            The CommandLine object to store results in
40       * @param args
41       *            The arguments to process
42       * @throws OptionException
43       *             if any problems occur
44       */
45      void process(
46          final WriteableCommandLine commandLine,
47          final ListIterator args)
48          throws OptionException;
49  
50      /**
51       * Adds defaults to a CommandLine.
52       *
53       * Any defaults for this option are applied as well as the defaults for
54       * any contained options
55       *
56       * @param commandLine
57       *            The CommandLine object to store defaults in
58       */
59      void defaults(final WriteableCommandLine commandLine);
60  
61      /**
62       * Indicates whether this Option will be able to process the particular
63       * argument.
64       *
65       * @param commandLine
66       *            The CommandLine to check
67       * @param argument
68       *            The argument to be tested
69       * @return true if the argument can be processed by this Option
70       */
71      boolean canProcess(final WriteableCommandLine commandLine, final String argument);
72  
73      /**
74       * Indicates whether this Option will be able to process the particular
75       * argument. The ListIterator must be restored to the initial state before
76       * returning the boolean.
77       *
78       * @see #canProcess(WriteableCommandLine,String)
79       * @param commandLine
80       *            the CommandLine to check
81       * @param arguments
82       *            the ListIterator over String arguments
83       * @return true if the argument can be processed by this Option
84       */
85      boolean canProcess(final WriteableCommandLine commandLine, final ListIterator arguments);
86  
87      /**
88       * Identifies the argument prefixes that should trigger this option. This
89       * is used to decide which of many Options should be tried when processing
90       * a given argument string.
91       *
92       * The returned Set must not be null.
93       *
94       * @return The set of triggers for this Option
95       */
96      Set getTriggers();
97  
98      /**
99       * Identifies the argument prefixes that should be considered options. This
100      * is used to identify whether a given string looks like an option or an
101      * argument value. Typically an option would return the set [--,-] while
102      * switches might offer [-,+].
103      *
104      * The returned Set must not be null.
105      *
106      * @return The set of prefixes for this Option
107      */
108     Set getPrefixes();
109 
110     /**
111      * Checks that the supplied CommandLine is valid with respect to this
112      * option.
113      *
114      * @param commandLine
115      *            The CommandLine to check.
116      * @throws OptionException
117      *             if the CommandLine is not valid.
118      */
119     void validate(final WriteableCommandLine commandLine)
120         throws OptionException;
121 
122     /**
123      * Builds up a list of HelpLineImpl instances to be presented by HelpFormatter.
124      *
125      * @see HelpLine
126      * @see org.apache.commons.cli2.util.HelpFormatter
127      * @param depth
128      *            the initial indent depth
129      * @param helpSettings
130      *            the HelpSettings that should be applied
131      * @param comp
132      *            a comparator used to sort options when applicable.
133      * @return a List of HelpLineImpl objects
134      */
135     List helpLines(
136         final int depth,
137         final Set helpSettings,
138         final Comparator comp);
139 
140     /**
141      * Appends usage information to the specified StringBuffer
142      *
143      * @param buffer the buffer to append to
144      * @param helpSettings a set of display settings @see DisplaySetting
145      * @param comp a comparator used to sort the Options
146      */
147     void appendUsage(
148         final StringBuffer buffer,
149         final Set helpSettings,
150         final Comparator comp);
151 
152     /**
153      * The preferred name of an option is used for generating help and usage
154      * information.
155      *
156      * @return The preferred name of the option
157      */
158     String getPreferredName();
159 
160     /**
161      * Returns a description of the option. This string is used to build help
162      * messages as in the HelpFormatter.
163      *
164      * @see org.apache.commons.cli2.util.HelpFormatter
165      * @return a description of the option.
166      */
167     String getDescription();
168 
169     /**
170      * Returns the id of the option.  This can be used in a loop and switch
171      * construct:
172      *
173      * <code>
174      * for(Option o : cmd.getOptions()){
175      *     switch(o.getId()){
176      *         case POTENTIAL_OPTION:
177      *             ...
178      *     }
179      * }
180      * </code>
181      *
182      * The returned value is not guarenteed to be unique.
183      *
184      * @return the id of the option.
185      */
186     int getId();
187 
188     /**
189      * Recursively searches for an option with the supplied trigger.
190      *
191      * @param trigger the trigger to search for.
192      * @return the matching option or null.
193      */
194     Option findOption(final String trigger);
195 
196     /**
197      * Indicates whether this option is required to be present.
198      * @return true iff the CommandLine will be invalid without this Option
199      */
200     boolean isRequired();
201 
202     /**
203      * Returns the parent of this option. Options can be organized in a
204      * hierarchical manner if they are added to groups. This method can be used
205      * for obtaining the parent option of this option. The result may be
206      * <b>null</b> if this option does not have a parent.
207      *
208      * @return the parent of this option
209      */
210     Option getParent();
211 
212     /**
213      * Sets the parent of this option. This method is called when the option is
214      * added to a group. Storing the parent of an option makes it possible to
215      * keep track of hierarchical relations between options. For instance, if an
216      * option is identified while parsing a command line, the group this option
217      * belongs to can also be added to the command line.
218      *
219      * @param parent the parent option
220      */
221     void setParent(Option parent);
222 }