001    /*
002     * EnumerationValuePropertyEditor.java
003     *
004     * Created on March 28, 2006, 3:49 PM
005     *
006     * To change this template, choose Tools | Template Manager
007     * and open the template in the editor.
008     */
009    
010    package org.jdesktop.swingx.editors;
011    
012    import java.beans.PropertyEditorSupport;
013    import java.util.HashMap;
014    import java.util.Map;
015    import org.jdesktop.swingx.EnumerationValue;
016    
017    /**
018     *
019     * @author Richard
020     */
021    public abstract class EnumerationValuePropertyEditor extends PropertyEditorSupport {
022        private String[] tags;
023        private Map<Object,EnumerationValue> values = new HashMap<Object,EnumerationValue>();
024        private EnumerationValue defaultValue;
025        
026        /** Creates a new instance of EnumerationValuePropertyEditor */
027        public EnumerationValuePropertyEditor(EnumerationValue defaultEnum, EnumerationValue... enums) {
028            this.defaultValue = defaultEnum;
029            for (EnumerationValue v : enums) {
030                values.put(v.getValue(), v);
031            }
032            
033            tags = new String[enums.length];
034            int index = 0;
035            for (EnumerationValue v : enums) {
036                tags[index++] = v.getName();
037            }
038        }
039    
040        public String getJavaInitializationString() {
041            EnumerationValue value = values.get(getValue());
042            if (value == null) {
043                return defaultValue == null ? "null" : defaultValue.getJavaInitializationString();
044            } else {
045                return value.getJavaInitializationString();
046            }
047        }
048    
049        public String[] getTags() {
050            return tags;
051        }
052    
053        public String getAsText() {
054            EnumerationValue value = values.get(getValue());
055            if (value == null) {
056                return defaultValue == null ? null : defaultValue.getName();
057            } else {
058                return value.getName();
059            }
060        }
061        
062        public void setAsText(String text) throws IllegalArgumentException {
063            EnumerationValue v = getValueByName(text);
064            if (v == null) {
065                //hmmmm, try again but trim text
066                if (text != null) {
067                    v = getValueByName(text.trim());
068                }
069            }
070            
071            if (v == null) {
072                v = defaultValue;
073            }
074            
075            setValue(v == null ? null : v.getValue());
076        }
077    
078        private EnumerationValue getValueByName(String name) {
079            for (EnumerationValue v : values.values()) {
080                String n = v == null ? null : v.getName();
081                if (n == name || (n != null && n.equalsIgnoreCase(name))) {
082                    return v;
083                }
084            }
085            return null;
086        }
087    }