View Javadoc

    1   package net.sourceforge.pmd.properties;
    2
    3   import net.sourceforge.pmd.util.StringUtil;
    4
    5   /***
    6    * Defines a property type that supports Character values.
    7    *
    8    * @author Brian Remedios
    9    * @version $Revision$
    10   */
    11  public class CharacterProperty extends AbstractPMDProperty {
    12
    13  	/***
    14  	 * Constructor for CharacterProperty.
    15  	 * @param theName String
    16  	 * @param theDescription String
    17  	 * @param theDefault char
    18  	 * @param theUIOrder float
    19  	 */
    20  	public CharacterProperty(String theName, String theDescription, char theDefault, float theUIOrder) {
    21  		super(theName, theDescription, new Character(theDefault), theUIOrder);
    22  	}
    23
    24  	/***
    25  	 * Constructor for CharacterProperty.
    26  	 * @param theName String
    27  	 * @param theDescription String
    28  	 * @param theDefaults char[]
    29  	 * @param theUIOrder float
    30  	 * @param delimiter char
    31  	 */
    32  	public CharacterProperty(String theName, String theDescription, char[] theDefaults, float theUIOrder, char delimiter) {
    33  		this(theName, theDescription, asCharacters(theDefaults), theUIOrder, delimiter);
    34  	}
    35
    36  	/***
    37  	 * Constructor for CharacterProperty.
    38  	 * @param theName String
    39  	 * @param theDescription String
    40  	 * @param theDefaults String
    41  	 * @param theUIOrder float
    42  	 * @param delimiter char
    43  	 */
    44  	public CharacterProperty(String theName, String theDescription, String theDefaults, float theUIOrder, char delimiter) {
    45  		this(theName, theDescription, theDefaults.toCharArray(), theUIOrder, delimiter);
    46  	}
    47
    48  	/***
    49  	 * Constructor for CharacterProperty.
    50  	 * @param theName String
    51  	 * @param theDescription String
    52  	 * @param theDefaults char[]
    53  	 * @param theUIOrder float
    54  	 * @param delimiter char
    55  	 */
    56  	public CharacterProperty(String theName, String theDescription, Character[] theDefaults, float theUIOrder, char delimiter) {
    57  		super(theName, theDescription, theDefaults, theUIOrder);
    58
    59  		multiValueDelimiter(delimiter);
    60  		maxValueCount(Integer.MAX_VALUE);
    61  	}
    62
    63  	/***
    64  	 * Method asCharacters.
    65  	 * @param chars char[]
    66  	 * @return Character[]
    67  	 */
    68  	private static final Character[] asCharacters(char[] chars) {
    69  		Character[] characters = new Character[chars.length];
    70  		for (int i=0; i<chars.length; i++) characters[i] = new Character(chars[i]);
    71  		return characters;
    72  	}
    73
    74  	/***
    75  	 * Method type.
    76  	 * @return Class
    77  	 * @see net.sourceforge.pmd.PropertyDescriptor#type()
    78  	 */
    79  	public Class type() {
    80  		return Character.class;
    81  	}
    82
    83  	/***
    84  	 * Method valueFrom.
    85  	 * @param valueString String
    86  	 * @return Object
    87  	 * @throws IllegalArgumentException
    88  	 * @see net.sourceforge.pmd.PropertyDescriptor#valueFrom(String)
    89  	 */
    90  	public Object valueFrom(String valueString) throws IllegalArgumentException {
    91
    92  		if (maxValueCount() == 1) {
    93  			if (valueString.length() > 1) throw new IllegalArgumentException(valueString);
    94  			return new Character(valueString.charAt(0));
    95  		}
    96
    97  		String[] values = StringUtil.substringsOf(valueString, multiValueDelimiter);
    98
    99  		Character[] chars = new Character[values.length];
    100 		for (int i=0; i<values.length; i++) chars[i] = new Character(values[i].charAt(0));
    101 		return chars;
    102 	}
    103 }