001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.data.preferences;
003    
004    import java.awt.Color;
005    
006    import org.openstreetmap.josm.Main;
007    import org.openstreetmap.josm.data.Preferences.ColorKey;
008    
009    /**
010     * A property containing a {@link Color} value.
011     * @since 5464
012     */
013    public class ColorProperty extends AbstractProperty<Color> implements ColorKey {
014    
015        private final String name;
016        
017        /**
018         * Constructs a new {@code ColorProperty}.
019         * @param colName The color name
020         * @param defaultValue The default value
021         */
022        public ColorProperty(String colName, Color defaultValue) {
023            super(getColorKey(colName), defaultValue);
024            this.name = colName;
025        }
026        
027        @Override
028        public Color get() {
029            return Main.pref.getColor(this);
030        }
031    
032        @Override
033        public boolean put(Color value) {
034            return Main.pref.putColor(getColorKey(name), value);
035        }
036        
037        /**
038         * Replies the color key used in JOSM preferences for this property.
039         * @param colName The color name
040         * @return The color key for this property
041         */
042        public static String getColorKey(String colName) {
043            return colName == null ? null : colName.toLowerCase().replaceAll("[^a-z0-9]+",".");
044        }
045    
046        @Override
047        public String getColorName() {
048            return name;
049        }
050    
051        @Override
052        public String getSpecialName() {
053            return null;
054        }
055    }