/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang.rule.properties;
import java.util.Enumeration;
import java.util.Map;
import net.sourceforge.pmd.PropertyDescriptorFactory;
import net.sourceforge.pmd.lang.rule.properties.factories.BasicPropertyDescriptorFactory;
/**
* Defines a datatype with a set of preset values of any type as held within a
* pair of maps. While the values are not serialized out, the labels are and
* serve as keys to obtain the values. The choices() method provides the ordered
* selections to be used in an editor widget.
*
* @author Brian Remedios
* @param <E>
*/
public class EnumeratedProperty<E> extends AbstractEnumeratedProperty<E, Object> {
public static final PropertyDescriptorFactory FACTORY = new BasicPropertyDescriptorFactory<EnumeratedProperty>(
Enumeration.class) {
@Override
public EnumeratedProperty createWith(Map<String, String> valuesById) {
return new EnumeratedProperty(nameIn(valuesById), descriptionIn(valuesById), labelsIn(valuesById),
choicesIn(valuesById), indexIn(valuesById), 0f);
}
};
/**
* Constructor for EnumeratedProperty.
*
* @param theName
* String
* @param theDescription
* String
* @param theLabels
* String[]
* @param theChoices
* E[]
* @param defaultIndex
* int
* @param theUIOrder
* float
* @throws IllegalArgumentException
*/
public EnumeratedProperty(String theName, String theDescription, String[] theLabels, E[] theChoices,
int defaultIndex, float theUIOrder) {
super(theName, theDescription, theLabels, theChoices, new int[] { defaultIndex }, theUIOrder, false);
}
/**
* @return Class
* @see net.sourceforge.pmd.PropertyDescriptor#type()
*/
@Override
public Class<Object> type() {
return Object.class;
}
/**
* @param value
* Object
* @return String
* @see net.sourceforge.pmd.PropertyDescriptor#errorFor(Object)
*/
@Override
public String errorFor(Object value) {
return labelsByChoice.containsKey(value) ? null : nonLegalValueMsgFor(value);
}
/**
* @param value
* String
* @return Object
* @throws IllegalArgumentException
* @see net.sourceforge.pmd.PropertyDescriptor#valueFrom(String)
*/
@Override
public Object valueFrom(String value) throws IllegalArgumentException {
return choiceFrom(value);
}
/**
*
* @param value
* Object
* @return String
* @see net.sourceforge.pmd.PropertyDescriptor#asDelimitedString(Object)
*/
@Override
public String asDelimitedString(Object value) {
return labelsByChoice.get(value);
}
}