1 // 2 //Author : t.wood 3 //Copyright : (c) Teamphone.com Ltd. 2008 - All Rights Reserved 4 // 5 package com.lexicalscope.jewel.cli.specification; 6 7 import java.util.List; 8 9 import com.lexicalscope.fluentreflection.FluentMethod; 10 11 /** 12 * Specifies an Option 13 * 14 * BETA: unstable may change in future versions 15 * 16 * @author t.wood 17 */ 18 public interface OptionSpecification 19 { 20 /** 21 * Get a description of the option. The description can be specified in the 22 * <code>Option</code> annotation 23 * 24 * @see com.lexicalscope.jewel.cli.Option 25 * 26 * @return a description of the option 27 */ 28 String getDescription(); 29 30 /** 31 * Each argument to this option must conform to the type returned by this 32 * method 33 * 34 * @return the type that each argument must conform to 35 */ 36 Class<?> getType(); 37 38 /** 39 * Canonical identifier for the option 40 * 41 * @return the canonical identifier for the option 42 */ 43 String getCanonicalIdentifier(); 44 45 /** 46 * Are multiple arguments allowed? 47 * 48 * @return True iff the the option takes multiple arguments 49 */ 50 boolean isMultiValued(); 51 52 /** 53 * Does the option have a value 54 * 55 * @return true iff the option has at least one value 56 */ 57 boolean hasValue(); 58 59 /** 60 * Is the argument optional 61 * 62 * @return is the argument optional 63 */ 64 boolean isOptional(); 65 66 /** 67 * Get the default values which will be used if the option is not specified 68 * by the user. 69 * 70 * @return The default values which will be used if the option is not 71 * present 72 */ 73 List<String> getDefaultValue(); 74 75 /** 76 * Is there a default value to use if this option is not present? Options 77 * with a default value are assumed to be optional. 78 * 79 * @return true iff this option has a default value 80 */ 81 boolean hasDefaultValue(); 82 83 /** 84 * Is the option hidden from help messages? 85 * 86 * @return true iff the option is hidden from help messages 87 */ 88 boolean isHidden(); 89 90 /** 91 * Is the option allowed to have this many values? 92 * 93 * @param count the number of values that the option might have 94 * 95 * @return true iff the count is a valid number of values for this option 96 */ 97 boolean allowedThisManyValues(int count); 98 99 FluentMethod getMethod(); 100 101 FluentMethod getOptionalityMethod(); 102 103 boolean hasExactCount(); 104 105 int exactly(); 106 107 int minimum(); 108 109 int maximum(); 110 111 int maximumArgumentConsumption(); 112 113 <T> T compareCountToSpecification(int valueCount, SpecificationMultiplicity<T> specificationMultiplicity); 114 }