Ignore:
Timestamp:
2020-03-21T15:38:15+01:00 (4 years ago)
Author:
simon04
Message:

see #18954, see #18864 - Introduce GenericParser for Cascade.convertTo

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/mappaint/Cascade.java

    r14439 r16184  
    1313import org.openstreetmap.josm.gui.mappaint.mapcss.CSSColors;
    1414import org.openstreetmap.josm.tools.ColorHelper;
     15import org.openstreetmap.josm.tools.GenericParser;
    1516import org.openstreetmap.josm.tools.Logging;
    1617import org.openstreetmap.josm.tools.Utils;
     
    2627
    2728    private static final Pattern HEX_COLOR_PATTERN = Pattern.compile("#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})");
     29
     30    private static final GenericParser<Object> GENERIC_PARSER = new GenericParser<>()
     31            .registerParser(float.class, Cascade::toFloat)
     32            .registerParser(Float.class, Cascade::toFloat)
     33            .registerParser(double.class, Cascade::toDouble)
     34            .registerParser(Double.class, Cascade::toDouble)
     35            .registerParser(boolean.class, Cascade::toBool)
     36            .registerParser(Boolean.class, Cascade::toBool)
     37            .registerParser(float[].class, Cascade::toFloatArray)
     38            .registerParser(Color.class, Cascade::toColor)
     39            .registerParser(String.class, Cascade::toString);
    2840
    2941    /**
     
    137149            return (T) o;
    138150
    139         if (klass == float.class || klass == Float.class)
    140             return (T) toFloat(o);
    141 
    142         if (klass == double.class || klass == Double.class) {
    143             o = toFloat(o);
    144             if (o != null) {
    145                 o = Double.valueOf((Float) o);
    146             }
    147             return (T) o;
    148         }
    149 
    150         if (klass == boolean.class || klass == Boolean.class)
    151             return (T) toBool(o);
    152 
    153         if (klass == float[].class)
    154             return (T) toFloatArray(o);
    155 
    156         if (klass == Color.class)
    157             return (T) toColor(o);
    158 
    159         if (klass == String.class) {
    160             if (o instanceof Keyword)
    161                 return (T) ((Keyword) o).val;
    162             if (o instanceof Color) {
    163                 Color c = (Color) o;
    164                 int alpha = c.getAlpha();
    165                 if (alpha != 255)
    166                     return (T) String.format("#%06x%02x", ((Color) o).getRGB() & 0x00ffffff, alpha);
    167                 return (T) String.format("#%06x", ((Color) o).getRGB() & 0x00ffffff);
    168             }
    169 
    170             return (T) o.toString();
    171         }
    172 
    173         return null;
     151        return GENERIC_PARSER.supports(klass)
     152                ? GENERIC_PARSER.parse(klass, o)
     153                : null;
     154    }
     155
     156    private static String toString(Object o) {
     157        if (o instanceof Keyword)
     158            return ((Keyword) o).val;
     159        if (o instanceof Color) {
     160            return ColorHelper.color2html((Color) o);
     161        }
     162        return o.toString();
    174163    }
    175164
     
    185174        }
    186175        return null;
     176    }
     177
     178    private static Double toDouble(Object o) {
     179        final Float number = toFloat(o);
     180        return number != null ? Double.valueOf(number) : null;
    187181    }
    188182
Note: See TracChangeset for help on using the changeset viewer.