import java.util.List;
+import org.simantics.utils.datastructures.Arrays;
+
public class ComboPropertyManipulator implements PropertyManipulator{
ComboValueProvider provider;
@Override
public String getValue(int i) {
try {
- Integer value = (Integer)provider.getValue(input);
- if (value == null) return null;
- return getItems()[value];
+ Object rawValue = provider.getValue(input);
+ if (rawValue == null) {
+ return null;
+ }
+ else if (rawValue instanceof Integer) {
+ Integer value = (Integer)rawValue;
+ return getItems()[value];
+ }
+ else if (rawValue instanceof Enum) {
+ return rawValue.toString();
+ }
+ else {
+ return null;
+ }
} catch (Exception e) {
return null;
}
@Override
public String setValue(String value, int i) {
try {
- provider.setValue(input, Integer.parseInt(value));
+ int intValue = Integer.parseInt(value);
+ Class<?> valueType = provider.getValueType();
+ if (Enum.class.isAssignableFrom(valueType)) {
+ provider.setValue(input, valueType.getEnumConstants()[intValue]);
+ }
+ else {
+ provider.setValue(input, intValue);
+ }
} catch (Exception e) {
return e.getMessage();
}
public Integer getValueIndex() {
try {
- Integer value = (Integer)provider.getValue(input);
- return value;
+ Object value = provider.getValue(input);
+ Class<?> valueType = provider.getValueType();
+ if (valueType.isEnum()) {
+ return Arrays.indexOf(valueType.getEnumConstants(), value);
+ }
+ else {
+ return (Integer) value;
+ }
} catch (Exception e) {
return null;
}