Revision 2080 org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.swing/org.gvsig.tools.swing.impl/src/main/java/org/gvsig/tools/swing/impl/coerce/CoerceToColor.java

View differences:

CoerceToColor.java
29 29
import org.apache.commons.lang3.StringUtils;
30 30
import org.apache.commons.lang3.math.NumberUtils;
31 31
import org.gvsig.tools.ToolsLocator;
32
import org.gvsig.tools.dataTypes.AbstractCoercion;
33
import org.gvsig.tools.dataTypes.CoercionContext;
32 34
import org.gvsig.tools.dataTypes.CoercionException;
33 35
import org.gvsig.tools.dataTypes.DataTypesManager;
34
import org.gvsig.tools.dataTypes.DataTypesManager.Coercion;
35 36
import org.gvsig.tools.swing.api.DataTypes;
36 37

  
37
public class CoerceToColor implements Coercion {
38
public class CoerceToColor extends AbstractCoercion {
38 39

  
39
    
40
    private static Map<String,Color> colorTable = null;
41
    
42
    @Override
43
    public Object coerce(Object value) throws CoercionException {
40
  private static Map<String, Color> colorTable = null;
41

  
42
  @Override
43
  public Object coerce(Object value, CoercionContext context) throws CoercionException {
44
    if (value == null || value instanceof Color) {
45
      return value;
46
    }
47
    try {
48
      if (value instanceof Number) {
49
        int rgb = ((Number) value).intValue();
50
        Color color = new Color(rgb); // Alpha??
51
        return color;
52
      }
53
      String s = value.toString().trim();
54
      if (s.startsWith("rgb(")) {
55
        s = s.replace(")", "");
56
        String[] x = StringUtils.split(s, ",");
57
        if (x.length < 3 || x.length > 4) {
58
          throw new CoercionException("Can't convert '" + value.toString() + "' to color.");
59
        }
44 60
        try {
45
            if (value == null || value instanceof Color) {
46
                return value;
47
            }
48
            if( value instanceof Number ) {
49
                int rgb = ((Number)value).intValue();
50
                Color color = new Color(rgb); // Alpha??
51
                return color;
52
            }
53
            String s = value.toString().trim();
54
            if( s.startsWith("rgb(") ) {
55
                s = s.replace(")", "");
56
                String[] x = StringUtils.split(s, ",");
57
                if( x.length<3 || x.length>4 ) {
58
                    throw new CoercionException("Can't convert '"+value.toString()+"' to color.");
59
                }
60
                try {
61
                    Color color;
62
                    int r = NumberUtils.createInteger(x[0]);
63
                    int g = NumberUtils.createInteger(x[1]);
64
                    int b = NumberUtils.createInteger(x[2]);
65
                    if( x.length==3 ) {
66
                        color = new Color(r, g, b);
67
                    } else {
68
                        int a = NumberUtils.createInteger(x[3]);
69
                        color = new Color(r, g, b, a);
70
                    }
71
                    return color;
72
                } catch(NumberFormatException ex) {
73
                    throw new CoercionException("Can't convert '"+value.toString()+"' to color.");
74
                }
75
                
76
            }
77
            if( s.startsWith("#") ) {
78
                s = "0x" + s.substring(1); 
79
            }
80
            try {
81
                int rgb = NumberUtils.createInteger(s);
82
                Color color = new Color(rgb);
83
                return color;
84
            } catch(NumberFormatException ex) {
85
                // Pass, do nothing
86
            }
87
            Color color = this.getColor(s);
88
            if( color == null ) {
89
                throw new CoercionException("Can't convert '"+value.toString()+"' to color.");
90
            }
91
            return color;
92
        } catch (Exception e) {
93
            throw new CoercionException(e);
61
          Color color;
62
          int r = NumberUtils.createInteger(x[0]);
63
          int g = NumberUtils.createInteger(x[1]);
64
          int b = NumberUtils.createInteger(x[2]);
65
          if (x.length == 3) {
66
            color = new Color(r, g, b);
67
          } else {
68
            int a = NumberUtils.createInteger(x[3]);
69
            color = new Color(r, g, b, a);
70
          }
71
          return color;
72
        } catch (NumberFormatException ex) {
73
          throw new CoercionException("Can't convert '" + value.toString() + "' to color.");
94 74
        }
95 75

  
76
      }
77
      if (s.startsWith("#")) {
78
        s = "0x" + s.substring(1);
79
      }
80
      try {
81
        int rgb = NumberUtils.createInteger(s);
82
        Color color = new Color(rgb);
83
        return color;
84
      } catch (NumberFormatException ex) {
85
        // Pass, do nothing
86
      }
87
      Color color = this.getColor(s);
88
      if (color == null) {
89
        throw new CoercionException("Can't convert '" + value.toString() + "' to color.");
90
      }
91
      return color;
92
    } catch (Exception e) {
93
      throw new CoercionException(e);
96 94
    }
97 95

  
98
    private Color getColor(String name) {
99
        if( colorTable==null ) {
100
            //
101
            // HTML Color Names
102
            // from https://www.w3schools.com/colors/colors_names.asp
103
            //
104
            colorTable = new HashMap<>();
105
            colorTable.put("aliceblue",new Color(0xF0,0xF8,0xFF));
106
            colorTable.put("antiquewhite",new Color(0xFA,0xEB,0xD7));
107
            colorTable.put("aqua",new Color(0x00,0xFF,0xFF));
108
            colorTable.put("aquamarine",new Color(0x7F,0xFF,0xD4));
109
            colorTable.put("azure",new Color(0xF0,0xFF,0xFF));
110
            colorTable.put("beige",new Color(0xF5,0xF5,0xDC));
111
            colorTable.put("bisque",new Color(0xFF,0xE4,0xC4));
112
            colorTable.put("black",new Color(0x00,0x00,0x00));
113
            colorTable.put("blanchedalmond",new Color(0xFF,0xEB,0xCD));
114
            colorTable.put("blue",new Color(0x00,0x00,0xFF));
115
            colorTable.put("blueviolet",new Color(0x8A,0x2B,0xE2));
116
            colorTable.put("brown",new Color(0xA5,0x2A,0x2A));
117
            colorTable.put("burlywood",new Color(0xDE,0xB8,0x87));
118
            colorTable.put("cadetblue",new Color(0x5F,0x9E,0xA0));
119
            colorTable.put("chartreuse",new Color(0x7F,0xFF,0x00));
120
            colorTable.put("chocolate",new Color(0xD2,0x69,0x1E));
121
            colorTable.put("coral",new Color(0xFF,0x7F,0x50));
122
            colorTable.put("cornflowerblue",new Color(0x64,0x95,0xED));
123
            colorTable.put("cornsilk",new Color(0xFF,0xF8,0xDC));
124
            colorTable.put("crimson",new Color(0xDC,0x14,0x3C));
125
            colorTable.put("cyan",new Color(0x00,0xFF,0xFF));
126
            colorTable.put("darkblue",new Color(0x00,0x00,0x8B));
127
            colorTable.put("darkcyan",new Color(0x00,0x8B,0x8B));
128
            colorTable.put("darkgoldenRod",new Color(0xB8,0x86,0x0B));
129
            colorTable.put("darkgray",new Color(0xA9,0xA9,0xA9));
130
            colorTable.put("darkgrey",new Color(0xA9,0xA9,0xA9));
131
            colorTable.put("darkgreen",new Color(0x00,0x64,0x00));
132
            colorTable.put("darkkhaki",new Color(0xBD,0xB7,0x6B));
133
            colorTable.put("darkmagenta",new Color(0x8B,0x00,0x8B));
134
            colorTable.put("darkolivegreen",new Color(0x55,0x6B,0x2F));
135
            colorTable.put("darkorange",new Color(0xFF,0x8C,0x00));
136
            colorTable.put("darkorchid",new Color(0x99,0x32,0xCC));
137
            colorTable.put("darkred",new Color(0x8B,0x00,0x00));
138
            colorTable.put("darksalmon",new Color(0xE9,0x96,0x7A));
139
            colorTable.put("darkseagreen",new Color(0x8F,0xBC,0x8F));
140
            colorTable.put("darkslateblue",new Color(0x48,0x3D,0x8B));
141
            colorTable.put("darkslategray",new Color(0x2F,0x4F,0x4F));
142
            colorTable.put("darkslategrey",new Color(0x2F,0x4F,0x4F));
143
            colorTable.put("darkturquoise",new Color(0x00,0xCE,0xD1));
144
            colorTable.put("darkviolet",new Color(0x94,0x00,0xD3));
145
            colorTable.put("deeppink",new Color(0xFF,0x14,0x93));
146
            colorTable.put("deepskyblue",new Color(0x00,0xBF,0xFF));
147
            colorTable.put("dimgray",new Color(0x69,0x69,0x69));
148
            colorTable.put("dimgrey",new Color(0x69,0x69,0x69));
149
            colorTable.put("dodgerblue",new Color(0x1E,0x90,0xFF));
150
            colorTable.put("firebrick",new Color(0xB2,0x22,0x22));
151
            colorTable.put("floralwhite",new Color(0xFF,0xFA,0xF0));
152
            colorTable.put("forestgreen",new Color(0x22,0x8B,0x22));
153
            colorTable.put("fuchsia",new Color(0xFF,0x00,0xFF));
154
            colorTable.put("gainsboro",new Color(0xDC,0xDC,0xDC));
155
            colorTable.put("ghostwhite",new Color(0xF8,0xF8,0xFF));
156
            colorTable.put("gold",new Color(0xFF,0xD7,0x00));
157
            colorTable.put("goldenrod",new Color(0xDA,0xA5,0x20));
158
            colorTable.put("gray",new Color(0x80,0x80,0x80));
159
            colorTable.put("grey",new Color(0x80,0x80,0x80));
160
            colorTable.put("green",new Color(0x00,0x80,0x00));
161
            colorTable.put("greenyellow",new Color(0xAD,0xFF,0x2F));
162
            colorTable.put("honeydew",new Color(0xF0,0xFF,0xF0));
163
            colorTable.put("hotpink",new Color(0xFF,0x69,0xB4));
164
            colorTable.put("indianred",new Color(0xCD,0x5C,0x5C));
165
            colorTable.put("indigo",new Color(0x4B,0x00,0x82));
166
            colorTable.put("ivory",new Color(0xFF,0xFF,0xF0));
167
            colorTable.put("khaki",new Color(0xF0,0xE6,0x8C));
168
            colorTable.put("lavender",new Color(0xE6,0xE6,0xFA));
169
            colorTable.put("lavenderblush",new Color(0xFF,0xF0,0xF5));
170
            colorTable.put("lawnGreen",new Color(0x7C,0xFC,0x00));
171
            colorTable.put("lemonchiffon",new Color(0xFF,0xFA,0xCD));
172
            colorTable.put("lightblue",new Color(0xAD,0xD8,0xE6));
173
            colorTable.put("lightcoral",new Color(0xF0,0x80,0x80));
174
            colorTable.put("lightcyan",new Color(0xE0,0xFF,0xFF));
175
            colorTable.put("lightgoldenRodYellow",new Color(0xFA,0xFA,0xD2));
176
            colorTable.put("lightgray",new Color(0xD3,0xD3,0xD3));
177
            colorTable.put("lightgrey",new Color(0xD3,0xD3,0xD3));
178
            colorTable.put("lightgreen",new Color(0x90,0xEE,0x90));
179
            colorTable.put("lightpink",new Color(0xFF,0xB6,0xC1));
180
            colorTable.put("lightsalmon",new Color(0xFF,0xA0,0x7A));
181
            colorTable.put("lightseagreen",new Color(0x20,0xB2,0xAA));
182
            colorTable.put("lightskyblue",new Color(0x87,0xCE,0xFA));
183
            colorTable.put("lightslategray",new Color(0x77,0x88,0x99));
184
            colorTable.put("lightslategrey",new Color(0x77,0x88,0x99));
185
            colorTable.put("lightsteelblue",new Color(0xB0,0xC4,0xDE));
186
            colorTable.put("lightyellow",new Color(0xFF,0xFF,0xE0));
187
            colorTable.put("lime",new Color(0x00,0xFF,0x00));
188
            colorTable.put("limegreen",new Color(0x32,0xCD,0x32));
189
            colorTable.put("linen",new Color(0xFA,0xF0,0xE6));
190
            colorTable.put("magenta",new Color(0xFF,0x00,0xFF));
191
            colorTable.put("maroon",new Color(0x80,0x00,0x00));
192
            colorTable.put("mediumaquamarine",new Color(0x66,0xCD,0xAA));
193
            colorTable.put("mediumblue",new Color(0x00,0x00,0xCD));
194
            colorTable.put("mediumorchid",new Color(0xBA,0x55,0xD3));
195
            colorTable.put("mediumpurple",new Color(0x93,0x70,0xDB));
196
            colorTable.put("mediumseagreen",new Color(0x3C,0xB3,0x71));
197
            colorTable.put("mediumslateblue",new Color(0x7B,0x68,0xEE));
198
            colorTable.put("mediumspringgreen",new Color(0x00,0xFA,0x9A));
199
            colorTable.put("mediumturquoise",new Color(0x48,0xD1,0xCC));
200
            colorTable.put("mediumvioletred",new Color(0xC7,0x15,0x85));
201
            colorTable.put("midnightblue",new Color(0x19,0x19,0x70));
202
            colorTable.put("mintcream",new Color(0xF5,0xFF,0xFA));
203
            colorTable.put("mistyrose",new Color(0xFF,0xE4,0xE1));
204
            colorTable.put("moccasin",new Color(0xFF,0xE4,0xB5));
205
            colorTable.put("navajowhite",new Color(0xFF,0xDE,0xAD));
206
            colorTable.put("navy",new Color(0x00,0x00,0x80));
207
            colorTable.put("oldlace",new Color(0xFD,0xF5,0xE6));
208
            colorTable.put("olive",new Color(0x80,0x80,0x00));
209
            colorTable.put("olivedrab",new Color(0x6B,0x8E,0x23));
210
            colorTable.put("orange",new Color(0xFF,0xA5,0x00));
211
            colorTable.put("orangered",new Color(0xFF,0x45,0x00));
212
            colorTable.put("orchid",new Color(0xDA,0x70,0xD6));
213
            colorTable.put("palegoldenrod",new Color(0xEE,0xE8,0xAA));
214
            colorTable.put("palegreen",new Color(0x98,0xFB,0x98));
215
            colorTable.put("paleturquoise",new Color(0xAF,0xEE,0xEE));
216
            colorTable.put("palevioletred",new Color(0xDB,0x70,0x93));
217
            colorTable.put("papayawhip",new Color(0xFF,0xEF,0xD5));
218
            colorTable.put("peachpuff",new Color(0xFF,0xDA,0xB9));
219
            colorTable.put("peru",new Color(0xCD,0x85,0x3F));
220
            colorTable.put("pink",new Color(0xFF,0xC0,0xCB));
221
            colorTable.put("plum",new Color(0xDD,0xA0,0xDD));
222
            colorTable.put("powderblue",new Color(0xB0,0xE0,0xE6));
223
            colorTable.put("purple",new Color(0x80,0x00,0x80));
224
            colorTable.put("rebeccapurple",new Color(0x66,0x33,0x99));
225
            colorTable.put("red",new Color(0xFF,0x00,0x00));
226
            colorTable.put("rosybrown",new Color(0xBC,0x8F,0x8F));
227
            colorTable.put("royalblue",new Color(0x41,0x69,0xE1));
228
            colorTable.put("saddlebrown",new Color(0x8B,0x45,0x13));
229
            colorTable.put("salmon",new Color(0xFA,0x80,0x72));
230
            colorTable.put("sandybrown",new Color(0xF4,0xA4,0x60));
231
            colorTable.put("seagreen",new Color(0x2E,0x8B,0x57));
232
            colorTable.put("seashell",new Color(0xFF,0xF5,0xEE));
233
            colorTable.put("sienna",new Color(0xA0,0x52,0x2D));
234
            colorTable.put("silver",new Color(0xC0,0xC0,0xC0));
235
            colorTable.put("skyblue",new Color(0x87,0xCE,0xEB));
236
            colorTable.put("slateblue",new Color(0x6A,0x5A,0xCD));
237
            colorTable.put("Slategray",new Color(0x70,0x80,0x90));
238
            colorTable.put("slategrey",new Color(0x70,0x80,0x90));
239
            colorTable.put("snow",new Color(0xFF,0xFA,0xFA));
240
            colorTable.put("springgreen",new Color(0x00,0xFF,0x7F));
241
            colorTable.put("steelblue",new Color(0x46,0x82,0xB4));
242
            colorTable.put("tan",new Color(0xD2,0xB4,0x8C));
243
            colorTable.put("teal",new Color(0x00,0x80,0x80));
244
            colorTable.put("thistle",new Color(0xD8,0xBF,0xD8));
245
            colorTable.put("tomato",new Color(0xFF,0x63,0x47));
246
            colorTable.put("turquoise",new Color(0x40,0xE0,0xD0));
247
            colorTable.put("violet",new Color(0xEE,0x82,0xEE));
248
            colorTable.put("wheat",new Color(0xF5,0xDE,0xB3));
249
            colorTable.put("white",new Color(0xFF,0xFF,0xFF));
250
            colorTable.put("whitesmoke",new Color(0xF5,0xF5,0xF5));
251
            colorTable.put("yellow",new Color(0xFF,0xFF,0x00));
252
            colorTable.put("yellowgreen",new Color(0x9A,0xCD,0x32));
253
        }
254
        return colorTable.get(name.toLowerCase());
96
  }
97

  
98
  private Color getColor(String name) {
99
    if (colorTable == null) {
100
      //
101
      // HTML Color Names
102
      // from https://www.w3schools.com/colors/colors_names.asp
103
      //
104
      colorTable = new HashMap<>();
105
      colorTable.put("aliceblue", new Color(0xF0, 0xF8, 0xFF));
106
      colorTable.put("antiquewhite", new Color(0xFA, 0xEB, 0xD7));
107
      colorTable.put("aqua", new Color(0x00, 0xFF, 0xFF));
108
      colorTable.put("aquamarine", new Color(0x7F, 0xFF, 0xD4));
109
      colorTable.put("azure", new Color(0xF0, 0xFF, 0xFF));
110
      colorTable.put("beige", new Color(0xF5, 0xF5, 0xDC));
111
      colorTable.put("bisque", new Color(0xFF, 0xE4, 0xC4));
112
      colorTable.put("black", new Color(0x00, 0x00, 0x00));
113
      colorTable.put("blanchedalmond", new Color(0xFF, 0xEB, 0xCD));
114
      colorTable.put("blue", new Color(0x00, 0x00, 0xFF));
115
      colorTable.put("blueviolet", new Color(0x8A, 0x2B, 0xE2));
116
      colorTable.put("brown", new Color(0xA5, 0x2A, 0x2A));
117
      colorTable.put("burlywood", new Color(0xDE, 0xB8, 0x87));
118
      colorTable.put("cadetblue", new Color(0x5F, 0x9E, 0xA0));
119
      colorTable.put("chartreuse", new Color(0x7F, 0xFF, 0x00));
120
      colorTable.put("chocolate", new Color(0xD2, 0x69, 0x1E));
121
      colorTable.put("coral", new Color(0xFF, 0x7F, 0x50));
122
      colorTable.put("cornflowerblue", new Color(0x64, 0x95, 0xED));
123
      colorTable.put("cornsilk", new Color(0xFF, 0xF8, 0xDC));
124
      colorTable.put("crimson", new Color(0xDC, 0x14, 0x3C));
125
      colorTable.put("cyan", new Color(0x00, 0xFF, 0xFF));
126
      colorTable.put("darkblue", new Color(0x00, 0x00, 0x8B));
127
      colorTable.put("darkcyan", new Color(0x00, 0x8B, 0x8B));
128
      colorTable.put("darkgoldenRod", new Color(0xB8, 0x86, 0x0B));
129
      colorTable.put("darkgray", new Color(0xA9, 0xA9, 0xA9));
130
      colorTable.put("darkgrey", new Color(0xA9, 0xA9, 0xA9));
131
      colorTable.put("darkgreen", new Color(0x00, 0x64, 0x00));
132
      colorTable.put("darkkhaki", new Color(0xBD, 0xB7, 0x6B));
133
      colorTable.put("darkmagenta", new Color(0x8B, 0x00, 0x8B));
134
      colorTable.put("darkolivegreen", new Color(0x55, 0x6B, 0x2F));
135
      colorTable.put("darkorange", new Color(0xFF, 0x8C, 0x00));
136
      colorTable.put("darkorchid", new Color(0x99, 0x32, 0xCC));
137
      colorTable.put("darkred", new Color(0x8B, 0x00, 0x00));
138
      colorTable.put("darksalmon", new Color(0xE9, 0x96, 0x7A));
139
      colorTable.put("darkseagreen", new Color(0x8F, 0xBC, 0x8F));
140
      colorTable.put("darkslateblue", new Color(0x48, 0x3D, 0x8B));
141
      colorTable.put("darkslategray", new Color(0x2F, 0x4F, 0x4F));
142
      colorTable.put("darkslategrey", new Color(0x2F, 0x4F, 0x4F));
143
      colorTable.put("darkturquoise", new Color(0x00, 0xCE, 0xD1));
144
      colorTable.put("darkviolet", new Color(0x94, 0x00, 0xD3));
145
      colorTable.put("deeppink", new Color(0xFF, 0x14, 0x93));
146
      colorTable.put("deepskyblue", new Color(0x00, 0xBF, 0xFF));
147
      colorTable.put("dimgray", new Color(0x69, 0x69, 0x69));
148
      colorTable.put("dimgrey", new Color(0x69, 0x69, 0x69));
149
      colorTable.put("dodgerblue", new Color(0x1E, 0x90, 0xFF));
150
      colorTable.put("firebrick", new Color(0xB2, 0x22, 0x22));
151
      colorTable.put("floralwhite", new Color(0xFF, 0xFA, 0xF0));
152
      colorTable.put("forestgreen", new Color(0x22, 0x8B, 0x22));
153
      colorTable.put("fuchsia", new Color(0xFF, 0x00, 0xFF));
154
      colorTable.put("gainsboro", new Color(0xDC, 0xDC, 0xDC));
155
      colorTable.put("ghostwhite", new Color(0xF8, 0xF8, 0xFF));
156
      colorTable.put("gold", new Color(0xFF, 0xD7, 0x00));
157
      colorTable.put("goldenrod", new Color(0xDA, 0xA5, 0x20));
158
      colorTable.put("gray", new Color(0x80, 0x80, 0x80));
159
      colorTable.put("grey", new Color(0x80, 0x80, 0x80));
160
      colorTable.put("green", new Color(0x00, 0x80, 0x00));
161
      colorTable.put("greenyellow", new Color(0xAD, 0xFF, 0x2F));
162
      colorTable.put("honeydew", new Color(0xF0, 0xFF, 0xF0));
163
      colorTable.put("hotpink", new Color(0xFF, 0x69, 0xB4));
164
      colorTable.put("indianred", new Color(0xCD, 0x5C, 0x5C));
165
      colorTable.put("indigo", new Color(0x4B, 0x00, 0x82));
166
      colorTable.put("ivory", new Color(0xFF, 0xFF, 0xF0));
167
      colorTable.put("khaki", new Color(0xF0, 0xE6, 0x8C));
168
      colorTable.put("lavender", new Color(0xE6, 0xE6, 0xFA));
169
      colorTable.put("lavenderblush", new Color(0xFF, 0xF0, 0xF5));
170
      colorTable.put("lawnGreen", new Color(0x7C, 0xFC, 0x00));
171
      colorTable.put("lemonchiffon", new Color(0xFF, 0xFA, 0xCD));
172
      colorTable.put("lightblue", new Color(0xAD, 0xD8, 0xE6));
173
      colorTable.put("lightcoral", new Color(0xF0, 0x80, 0x80));
174
      colorTable.put("lightcyan", new Color(0xE0, 0xFF, 0xFF));
175
      colorTable.put("lightgoldenRodYellow", new Color(0xFA, 0xFA, 0xD2));
176
      colorTable.put("lightgray", new Color(0xD3, 0xD3, 0xD3));
177
      colorTable.put("lightgrey", new Color(0xD3, 0xD3, 0xD3));
178
      colorTable.put("lightgreen", new Color(0x90, 0xEE, 0x90));
179
      colorTable.put("lightpink", new Color(0xFF, 0xB6, 0xC1));
180
      colorTable.put("lightsalmon", new Color(0xFF, 0xA0, 0x7A));
181
      colorTable.put("lightseagreen", new Color(0x20, 0xB2, 0xAA));
182
      colorTable.put("lightskyblue", new Color(0x87, 0xCE, 0xFA));
183
      colorTable.put("lightslategray", new Color(0x77, 0x88, 0x99));
184
      colorTable.put("lightslategrey", new Color(0x77, 0x88, 0x99));
185
      colorTable.put("lightsteelblue", new Color(0xB0, 0xC4, 0xDE));
186
      colorTable.put("lightyellow", new Color(0xFF, 0xFF, 0xE0));
187
      colorTable.put("lime", new Color(0x00, 0xFF, 0x00));
188
      colorTable.put("limegreen", new Color(0x32, 0xCD, 0x32));
189
      colorTable.put("linen", new Color(0xFA, 0xF0, 0xE6));
190
      colorTable.put("magenta", new Color(0xFF, 0x00, 0xFF));
191
      colorTable.put("maroon", new Color(0x80, 0x00, 0x00));
192
      colorTable.put("mediumaquamarine", new Color(0x66, 0xCD, 0xAA));
193
      colorTable.put("mediumblue", new Color(0x00, 0x00, 0xCD));
194
      colorTable.put("mediumorchid", new Color(0xBA, 0x55, 0xD3));
195
      colorTable.put("mediumpurple", new Color(0x93, 0x70, 0xDB));
196
      colorTable.put("mediumseagreen", new Color(0x3C, 0xB3, 0x71));
197
      colorTable.put("mediumslateblue", new Color(0x7B, 0x68, 0xEE));
198
      colorTable.put("mediumspringgreen", new Color(0x00, 0xFA, 0x9A));
199
      colorTable.put("mediumturquoise", new Color(0x48, 0xD1, 0xCC));
200
      colorTable.put("mediumvioletred", new Color(0xC7, 0x15, 0x85));
201
      colorTable.put("midnightblue", new Color(0x19, 0x19, 0x70));
202
      colorTable.put("mintcream", new Color(0xF5, 0xFF, 0xFA));
203
      colorTable.put("mistyrose", new Color(0xFF, 0xE4, 0xE1));
204
      colorTable.put("moccasin", new Color(0xFF, 0xE4, 0xB5));
205
      colorTable.put("navajowhite", new Color(0xFF, 0xDE, 0xAD));
206
      colorTable.put("navy", new Color(0x00, 0x00, 0x80));
207
      colorTable.put("oldlace", new Color(0xFD, 0xF5, 0xE6));
208
      colorTable.put("olive", new Color(0x80, 0x80, 0x00));
209
      colorTable.put("olivedrab", new Color(0x6B, 0x8E, 0x23));
210
      colorTable.put("orange", new Color(0xFF, 0xA5, 0x00));
211
      colorTable.put("orangered", new Color(0xFF, 0x45, 0x00));
212
      colorTable.put("orchid", new Color(0xDA, 0x70, 0xD6));
213
      colorTable.put("palegoldenrod", new Color(0xEE, 0xE8, 0xAA));
214
      colorTable.put("palegreen", new Color(0x98, 0xFB, 0x98));
215
      colorTable.put("paleturquoise", new Color(0xAF, 0xEE, 0xEE));
216
      colorTable.put("palevioletred", new Color(0xDB, 0x70, 0x93));
217
      colorTable.put("papayawhip", new Color(0xFF, 0xEF, 0xD5));
218
      colorTable.put("peachpuff", new Color(0xFF, 0xDA, 0xB9));
219
      colorTable.put("peru", new Color(0xCD, 0x85, 0x3F));
220
      colorTable.put("pink", new Color(0xFF, 0xC0, 0xCB));
221
      colorTable.put("plum", new Color(0xDD, 0xA0, 0xDD));
222
      colorTable.put("powderblue", new Color(0xB0, 0xE0, 0xE6));
223
      colorTable.put("purple", new Color(0x80, 0x00, 0x80));
224
      colorTable.put("rebeccapurple", new Color(0x66, 0x33, 0x99));
225
      colorTable.put("red", new Color(0xFF, 0x00, 0x00));
226
      colorTable.put("rosybrown", new Color(0xBC, 0x8F, 0x8F));
227
      colorTable.put("royalblue", new Color(0x41, 0x69, 0xE1));
228
      colorTable.put("saddlebrown", new Color(0x8B, 0x45, 0x13));
229
      colorTable.put("salmon", new Color(0xFA, 0x80, 0x72));
230
      colorTable.put("sandybrown", new Color(0xF4, 0xA4, 0x60));
231
      colorTable.put("seagreen", new Color(0x2E, 0x8B, 0x57));
232
      colorTable.put("seashell", new Color(0xFF, 0xF5, 0xEE));
233
      colorTable.put("sienna", new Color(0xA0, 0x52, 0x2D));
234
      colorTable.put("silver", new Color(0xC0, 0xC0, 0xC0));
235
      colorTable.put("skyblue", new Color(0x87, 0xCE, 0xEB));
236
      colorTable.put("slateblue", new Color(0x6A, 0x5A, 0xCD));
237
      colorTable.put("Slategray", new Color(0x70, 0x80, 0x90));
238
      colorTable.put("slategrey", new Color(0x70, 0x80, 0x90));
239
      colorTable.put("snow", new Color(0xFF, 0xFA, 0xFA));
240
      colorTable.put("springgreen", new Color(0x00, 0xFF, 0x7F));
241
      colorTable.put("steelblue", new Color(0x46, 0x82, 0xB4));
242
      colorTable.put("tan", new Color(0xD2, 0xB4, 0x8C));
243
      colorTable.put("teal", new Color(0x00, 0x80, 0x80));
244
      colorTable.put("thistle", new Color(0xD8, 0xBF, 0xD8));
245
      colorTable.put("tomato", new Color(0xFF, 0x63, 0x47));
246
      colorTable.put("turquoise", new Color(0x40, 0xE0, 0xD0));
247
      colorTable.put("violet", new Color(0xEE, 0x82, 0xEE));
248
      colorTable.put("wheat", new Color(0xF5, 0xDE, 0xB3));
249
      colorTable.put("white", new Color(0xFF, 0xFF, 0xFF));
250
      colorTable.put("whitesmoke", new Color(0xF5, 0xF5, 0xF5));
251
      colorTable.put("yellow", new Color(0xFF, 0xFF, 0x00));
252
      colorTable.put("yellowgreen", new Color(0x9A, 0xCD, 0x32));
255 253
    }
256
    
257
    public static class CoerceColorToString implements Coercion {
254
    return colorTable.get(name.toLowerCase());
255
  }
258 256

  
259
        @Override
260
        public Object coerce(Object value) throws CoercionException {
261
            if( value == null ) {
262
                return null;
263
            }
264
            if( value instanceof Color ) {
265
                int rgb = ((Color) value).getRGB();
266
                int r = ((Color) value).getRed();
267
                int g = ((Color) value).getGreen();
268
                int b = ((Color) value).getBlue();
269
                int a = ((Color) value).getAlpha();
270
                for (Map.Entry<String, Color> entry : colorTable.entrySet()) {
271
                    String name = entry.getKey();
272
                    Color color = entry.getValue();
273
                    if( rgb==color.getRGB() && color.getAlpha()==a ) {
274
                        return name;
275
                    }
276
                }
277
                return String.format("rgb(0x%02x,0x%02x,0x%02x,0x%02x)", r,g,b,a);
278
            }
279
            throw new CoercionException("Can't convert '"+value.getClass().getName()+"' to string");
257
  public static class CoerceColorToString extends AbstractCoercion {
258

  
259
    @Override
260
    public Object coerce(Object value, CoercionContext context) throws CoercionException {
261
      if (value == null || value instanceof String) {
262
        return value;
263
      }
264
      if (value instanceof Color) {
265
        int rgb = ((Color) value).getRGB();
266
        int r = ((Color) value).getRed();
267
        int g = ((Color) value).getGreen();
268
        int b = ((Color) value).getBlue();
269
        int a = ((Color) value).getAlpha();
270
        for (Map.Entry<String, Color> entry : colorTable.entrySet()) {
271
          String name = entry.getKey();
272
          Color color = entry.getValue();
273
          if (rgb == color.getRGB() && color.getAlpha() == a) {
274
            return name;
275
          }
280 276
        }
281
        
277
        return String.format("rgb(0x%02x,0x%02x,0x%02x,0x%02x)", r, g, b, a);
278
      }
279
      throw new CoercionException("Can't convert '" + value.getClass().getName() + "' to string");
282 280
    }
283
     
284
    public static void selfRegister() {
285
        DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
286
        dataTypesManager.addtype(DataTypes.COLOR, null, "Color", Color.class, new CoerceToColor());
287
        dataTypesManager.addCoercion(DataTypes.STRING, new CoerceColorToString());
288
    }
281

  
282
  }
283

  
284
  public static void selfRegister() {
285
    DataTypesManager dataTypesManager = ToolsLocator.getDataTypesManager();
286
    dataTypesManager.addtype(DataTypes.COLOR, null, "Color", Color.class, new CoerceToColor());
287
    dataTypesManager.addCoercion(DataTypes.STRING, new CoerceColorToString());
288
  }
289 289
}

Also available in: Unified diff