View Javadoc

    1   package net.sourceforge.pmd;
    2
    3
    4   /***
    5    * Property value descriptor that defines the use & requirements for setting
    6    * property values for use within PMD and any associated GUIs.
    7    *
    8    * @author Brian Remedios
    9    * @version $Revision$
    10   */
    11  public interface PropertyDescriptor extends Comparable {
    12
    13  	PropertyDescriptor[] emptyPropertySet = new PropertyDescriptor[0];
    14
    15  	/***
    16  	 * The name of the property without spaces as it serves
    17  	 * as the key into the property map.
    18  	 *
    19  	 * @return String
    20  	 */
    21  	String name();
    22  	/***
    23  	 * Describes the property and the role it plays within the
    24  	 * rule it is specified for. Could be used in a tooltip.
    25  	 *
    26  	 * @return String
    27  	 */
    28  	String description();
    29  	/***
    30  	 * Denotes the value datatype.
    31  	 * @return Class
    32  	 */
    33  	Class type();
    34  	/***
    35  	 * If the property is multi-valued, i.e. an array of strings, then this
    36  	 * returns the maximum number permitted. Unary property rule properties
    37  	 * normally return a value of one.
    38  	 *
    39  	 * @return int
    40  	 */
    41  	int maxValueCount();
    42  	/***
    43  	 * Default value to use when the user hasn't specified one or when they wish
    44  	 * to revert to a known-good state.
    45  	 *
    46  	 * @return Object
    47  	 */
    48  	Object defaultValue();
    49  	/***
    50  	 * Denotes whether the value is required before the rule can be executed.
    51  	 * Has no meaning for primitive types such as booleans, ints, etc.
    52  	 *
    53  	 * @return boolean
    54  	 */
    55  	boolean isRequired();
    56  	/***
    57  	 * Validation function that returns a diagnostic error message for a sample
    58  	 * property value. Returns null if the value is acceptable.
    59  	 *
    60  	 * @param value Object
    61  	 * @return String
    62  	 */
    63  	String errorFor(Object value);
    64  	/***
    65  	 * Denotes the relative order the property field should occupy if we are using
    66  	 * an auto-generated UI to display and edit values. If the value returned has
    67  	 * a non-zero fractional part then this is can be used to place adjacent fields
    68  	 * on the same row. Example:
    69  	 *
    70  	 * name -> 0.0
    71  	 * description 1.0
    72  	 * minValue -> 2.0
    73  	 * maxValue -> 2.1
    74  	 *
    75  	 * ..would have their fields placed like:
    76  	 *
    77  	 *  name: [    ]
    78  	 *  description: [    ]
    79  	 *  minimum: [    ]   maximum:   [    ]
    80  	 *
    81  	 * @return float
    82  	 */
    83  	float uiOrder();
    84  	/***
    85  	 * If the property is multi-valued then return the separate values after
    86  	 * parsing the propertyString provided. If it isn't a multi-valued
    87  	 * property then the value will be returned within an array of size[1].
    88  	 *
    89  	 * @param propertyString String
    90  	 * @return Object
    91  	 * @throws IllegalArgumentException
    92  	 */
    93  	Object valueFrom(String propertyString) throws IllegalArgumentException;
    94  	/***
    95  	 * Formats the object onto a string suitable for storage within the property map.
    96  	 * @param value Object
    97  	 * @return String
    98  	 */
    99  	String asDelimitedString(Object value);
    100
    101 	/***
    102 	 * Returns a set of choice tuples of available, returns null if none present.
    103 	 * @return Object[]
    104 	 */
    105 	Object[][] choices();
    106
    107 	/***
    108 	 * A convenience method that returns an error string if the rule holds onto a
    109 	 * property value that has a problem. Returns null otherwise.
    110 	 *
    111 	 * @param rule Rule
    112 	 * @return String
    113 	 */
    114 	String propertyErrorFor(Rule rule);
    115
    116 	/***
    117 	 * Return the character being used to delimit multiple property values within
    118 	 * a single string. You must ensure that this character does not appear within
    119 	 * any rule property values to avoid deserialization errors.
    120 	 *
    121 	 * @return char
    122 	 */
    123 	char multiValueDelimiter();
    124
    125 	/***
    126 	 * If the datatype is a String then return the preferred number of rows to
    127 	 * allocate in the text widget, returns a value of one for all other types.
    128 	 * Useful for multi-line XPATH editors.
    129 	 *
    130 	 * @return int
    131 	 */
    132 	int preferredRowCount();
    133 }