/*
* EnumerationValuePropertyEditor.java
*
* Created on March 28, 2006, 3:49 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package org.jdesktop.beans.editors;
import java.beans.PropertyEditorSupport;
import java.util.HashMap;
import java.util.Map;
import org.jdesktop.beans.EnumerationValue;
/**
*
* @author Richard
*/
public abstract class EnumerationValuePropertyEditor extends PropertyEditorSupport {
private String[] tags;
private Map<Object,EnumerationValue> values = new HashMap<Object,EnumerationValue>();
private EnumerationValue defaultValue;
/** Creates a new instance of EnumerationValuePropertyEditor */
public EnumerationValuePropertyEditor(EnumerationValue defaultEnum, EnumerationValue... enums) {
this.defaultValue = defaultEnum;
for (EnumerationValue v : enums) {
values.put(v.getValue(), v);
}
tags = new String[enums.length];
int index = 0;
for (EnumerationValue v : enums) {
tags[index++] = v.getName();
}
}
@Override
public String getJavaInitializationString() {
EnumerationValue value = values.get(getValue());
if (value == null) {
return defaultValue == null ? "null" : defaultValue.getJavaInitializationString();
} else {
return value.getJavaInitializationString();
}
}
@Override
public String[] getTags() {
return tags;
}
@Override
public String getAsText() {
EnumerationValue value = values.get(getValue());
if (value == null) {
return defaultValue == null ? null : defaultValue.getName();
} else {
return value.getName();
}
}
@Override
public void setAsText(String text) throws IllegalArgumentException {
EnumerationValue v = getValueByName(text);
if (v == null) {
//hmmmm, try again but trim text
if (text != null) {
v = getValueByName(text.trim());
}
}
if (v == null) {
v = defaultValue;
}
setValue(v == null ? null : v.getValue());
}
private EnumerationValue getValueByName(String name) {
for (EnumerationValue v : values.values()) {
String n = v == null ? null : v.getName();
if (n == name || (n != null && n.equalsIgnoreCase(name))) {
return v;
}
}
return null;
}
}