/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.lang.rule.properties; import java.util.Map; import net.sourceforge.pmd.PropertyDescriptorFactory; import net.sourceforge.pmd.lang.rule.properties.factories.BasicPropertyDescriptorFactory; import net.sourceforge.pmd.util.StringUtil; /** * Defines a property type that supports multiple Character values. * * @author Brian Remedios */ public class CharacterMultiProperty extends AbstractProperty<Character[]> { public static final PropertyDescriptorFactory FACTORY = new BasicPropertyDescriptorFactory<CharacterMultiProperty>( Character[].class) { @Override public CharacterMultiProperty createWith(Map<String, String> valuesById) { char delimiter = delimiterIn(valuesById); return new CharacterMultiProperty(nameIn(valuesById), descriptionIn(valuesById), charsIn(defaultValueIn(valuesById), delimiter), 0.0f, delimiter); } }; /** * Constructor for CharacterProperty. * * @param theName * String * @param theDescription * String * @param theDefaults * char[] * @param theUIOrder * float * @param delimiter * char * @throws IllegalArgumentException */ public CharacterMultiProperty(String theName, String theDescription, Character[] theDefaults, float theUIOrder, char delimiter) { super(theName, theDescription, theDefaults, theUIOrder, delimiter); if (theDefaults != null) { for (int i = 0; i < theDefaults.length; i++) { if (theDefaults[i].charValue() == delimiter) { throw new IllegalArgumentException("Cannot include the delimiter in the set of defaults"); } } } } /** * @return Class * @see net.sourceforge.pmd.PropertyDescriptor#type() */ @Override public Class<Character[]> type() { return Character[].class; } /** * @param valueString * String * @return Object * @throws IllegalArgumentException * @see net.sourceforge.pmd.PropertyDescriptor#valueFrom(String) */ @Override public Character[] valueFrom(String valueString) throws IllegalArgumentException { String[] values = StringUtil.substringsOf(valueString, multiValueDelimiter()); Character[] chars = new Character[values.length]; for (int i = 0; i < values.length; i++) { chars[i] = Character.valueOf(values[i].charAt(0)); } return chars; } /** * @return boolean * @see net.sourceforge.pmd.PropertyDescriptor#isMultiValue() */ @Override public boolean isMultiValue() { return true; } }