mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-15 06:49:56 +00:00
bug3549: added method which excepts all legal css color varients and removed reflection
This commit is contained in:
1 parent
d9c19003a3
commit
58182eee80
2 files changed
+456
-23
No files matched your search
@@ -0,0 +1,65 @@
|
||||
package com.sap.sse.common.impl.test;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sse.common.impl.AbstractColor;
|
||||
import com.sap.sse.common.Color;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
public class AbstractColorTest {
|
||||
|
||||
@Test
|
||||
public void testRGBColor() throws Exception {
|
||||
Color color = AbstractColor.getCssColor("rgb(255,255,255)");
|
||||
Assert.assertEquals("#FFFFFF", color.getAsHtml());
|
||||
color = AbstractColor.getCssColor("rgb(100%,100%,100%)");
|
||||
Assert.assertEquals("#FFFFFF", color.getAsHtml());
|
||||
color = AbstractColor.getCssColor("rgb(255,255,255,777,354)");
|
||||
Assert.assertEquals(null, color);
|
||||
color = AbstractColor.getCssColor("rgb(255 ,255,255)");
|
||||
Assert.assertEquals("#FFFFFF", color.getAsHtml());
|
||||
color = AbstractColor.getCssColor("rgb(3666 ,255,255)");
|
||||
Assert.assertEquals("#FFFFFF", color.getAsHtml());
|
||||
color = AbstractColor.getCssColor("rgb(3666.98 ,255,255)");
|
||||
Assert.assertEquals(null, color);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRGBA() throws Exception {
|
||||
Color color = AbstractColor.getCssColor("rgba(255,255,255,0.3)");
|
||||
Assert.assertEquals("#FFFFFF", color.getAsHtml());
|
||||
color = AbstractColor.getCssColor("rgba(255 ,255,255,90)");
|
||||
Assert.assertEquals("#FFFFFF", color.getAsHtml());
|
||||
color = AbstractColor.getCssColor("rgba(3666 ,255,255,0.3)");
|
||||
Assert.assertEquals("#FFFFFF", color.getAsHtml());
|
||||
color = AbstractColor.getCssColor("rgba(3666.98 ,255,255,0.777)");
|
||||
Assert.assertEquals(null, color);
|
||||
}
|
||||
|
||||
public void testHSL() throws Exception {
|
||||
Color color = AbstractColor.getCssColor("hsl(360, 100%, 100%)");
|
||||
Assert.assertEquals("#FFFFFF", color.getAsHtml());
|
||||
color = AbstractColor.getCssColor("HSL(360, 1.0, 1.0)");
|
||||
Assert.assertEquals("#FFFFFF", color.getAsHtml());
|
||||
color = AbstractColor.getCssColor("hsl(360, 1.0, 1.0,435,789)");
|
||||
Assert.assertEquals(null, color);
|
||||
}
|
||||
|
||||
public void testHSLA() throws Exception {
|
||||
Color color = AbstractColor.getCssColor("hsla(360, 100%, 100%,hjhb)");
|
||||
Assert.assertEquals("#FFFFFF", color.getAsHtml());
|
||||
color = AbstractColor.getCssColor("HSLa(360, 1.0, 1.0,0.4)");
|
||||
Assert.assertEquals("#FFFFFF", color.getAsHtml());
|
||||
color = AbstractColor.getCssColor("hsla(360, 1.0, 1.0,435,789)");
|
||||
Assert.assertEquals(null, color);
|
||||
}
|
||||
|
||||
public void testColorName() {
|
||||
Color color = AbstractColor.getCssColor("BrOwn");
|
||||
Assert.assertEquals(Color.BROWN, color);
|
||||
color = AbstractColor.getCssColor("caffee");
|
||||
Assert.assertEquals("#CAFFEE", color.getAsHtml());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,39 +1,17 @@
|
||||
package com.sap.sse.common.impl;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Map;
|
||||
|
||||
import com.google.gwt.dev.util.collect.HashMap;
|
||||
import com.sap.sse.common.Color;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
public abstract class AbstractColor implements Color {
|
||||
private static final long serialVersionUID = 7758884012281863458L;
|
||||
|
||||
private static final Map<String,Color> colorNameToColor = createColorMap();
|
||||
|
||||
@Override
|
||||
public String getAsHtml() {
|
||||
Util.Triple<Integer, Integer, Integer> asRGB = getAsRGB();
|
||||
return "#" + toBrowserHexValue(asRGB.getA()) + toBrowserHexValue(asRGB.getB())
|
||||
+ toBrowserHexValue(asRGB.getC());
|
||||
}
|
||||
|
||||
private static Map<String, Color> createColorMap() {
|
||||
HashMap<String,Color> map = new HashMap<String, Color>();
|
||||
String name;
|
||||
for (Field field : Color.class.getFields()) {
|
||||
if (field.getClass().isAssignableFrom(Color.class)) {
|
||||
name = field.getName().toLowerCase().replace("_", "");
|
||||
try {
|
||||
map.put(name, (Color) field.get(null));
|
||||
} catch (IllegalArgumentException | IllegalAccessException e) {
|
||||
// ignore this case, and don't add something to the map.
|
||||
}
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
private static String toBrowserHexValue(int number) {
|
||||
StringBuilder builder = new StringBuilder(Integer.toHexString(number & 0xff));
|
||||
@@ -43,7 +21,397 @@ public abstract class AbstractColor implements Color {
|
||||
return builder.toString().toUpperCase();
|
||||
}
|
||||
|
||||
/**
|
||||
* accepts all colors in the css-format (see http://www.w3schools.com/cssref/css_colors_legal.asp)
|
||||
*
|
||||
* @param color
|
||||
* @return
|
||||
*/
|
||||
public static Color getCssColor(String color) {
|
||||
String[] colorWithName = color.split("[()]");
|
||||
switch (colorWithName[0].trim().toLowerCase()) {
|
||||
case "rgb":
|
||||
case "rgba":
|
||||
return getRGBColor(colorWithName[1]);
|
||||
case "hsl":
|
||||
case "hsla":
|
||||
case "hsv":
|
||||
return getHSVColor(colorWithName[1]);
|
||||
}
|
||||
Color resultColor = getColorByLowercaseNameStatic(color.toLowerCase().replace(" ", ""));
|
||||
if (resultColor == null) {
|
||||
try {
|
||||
resultColor = new RGBColor(color);
|
||||
} catch (NumberFormatException e) {
|
||||
// ignore this exception and return null
|
||||
} catch (IllegalArgumentException e) {
|
||||
// ignore this exception and return null
|
||||
}
|
||||
}
|
||||
return resultColor;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param color
|
||||
* for example: "210, 100%, 50%", "210.0, 1.0, 0.5"(with or without spaces),ignores brightness of HSLA
|
||||
* @return the Color as Color-Object
|
||||
*/
|
||||
private static Color getHSVColor(String color) {
|
||||
String[] values = color.replace(" ", "").split(",");
|
||||
if (values.length == 3 || values.length == 4) {
|
||||
try {
|
||||
float hue = Float.parseFloat(values[0]);
|
||||
float saturation = parseToFloat(values[1].replace("%", ""));
|
||||
float brightness = parseToFloat(values[2].replace("%", ""));
|
||||
return new HSVColor(hue, saturation, brightness);
|
||||
} catch (NumberFormatException e) {
|
||||
// in this case the color isn't valid.
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
// in this case the color isn't valid.
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static float parseToFloat(String number) {
|
||||
if (number.contains(".")) {
|
||||
return Float.parseFloat(number);
|
||||
} else {
|
||||
return Float.parseFloat(number) / 100.0f;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param color
|
||||
* for example: "255,120,0", "0%, 12%,95%" (with or without spaces),ignores brightness of RGBA
|
||||
* @return the Color as Color-Object
|
||||
*/
|
||||
private static Color getRGBColor(String color) {
|
||||
String[] values = color.replace(" ", "").split(",");
|
||||
if (values.length == 3 || values.length == 4) {
|
||||
try {
|
||||
|
||||
int red = (int) (values[0].contains("%") ? parseToFloat(values[0].replace("%", "")) * 255f
|
||||
: Integer.parseInt(values[0]));
|
||||
int green = (int) (values[1].contains("%") ? parseToFloat(values[1].replace("%", "")) * 255f
|
||||
: Integer.parseInt(values[1]));
|
||||
int blue = (int) (values[2].contains("%") ? parseToFloat(values[2].replace("%", "")) * 255f
|
||||
: Integer.parseInt(values[2]));
|
||||
return new RGBColor(red, green, blue);
|
||||
} catch (NumberFormatException e) {
|
||||
// in this case the color isn't valid.
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
// in this case the color isn't valid.
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static Color getColorByLowercaseNameStatic(String lowercaseColorName) {
|
||||
return colorNameToColor.get(lowercaseColorName);
|
||||
switch (lowercaseColorName) {
|
||||
case "aliceblue":
|
||||
return ALICE_BLUE;
|
||||
case "antiquewhite":
|
||||
return ANTIQUE_WHITE;
|
||||
case "aqua":
|
||||
return AQUA;
|
||||
case "aquamarine":
|
||||
return AQUAMARINE;
|
||||
case "azure":
|
||||
return AZURE;
|
||||
case "beige":
|
||||
return BEIGE;
|
||||
case "bisque":
|
||||
return BISQUE;
|
||||
case "black":
|
||||
return BLACK;
|
||||
case "blanchedalmond":
|
||||
return BLANCHED_ALMOND;
|
||||
case "blue":
|
||||
return BLUE;
|
||||
case "blueviolet":
|
||||
return BLUE_VIOLET;
|
||||
case "brown":
|
||||
return BROWN;
|
||||
case "burlywood":
|
||||
return BURLY_WOOD;
|
||||
case "cadetblue":
|
||||
return CADET_BLUE;
|
||||
case "chartreuse":
|
||||
return CHARTREUSE;
|
||||
case "chocolate":
|
||||
return CHOCOLATE;
|
||||
case "coral":
|
||||
return CORAL;
|
||||
case "cornflowerblue":
|
||||
return CORNFLOWER_BLUE;
|
||||
case "cornsilk":
|
||||
return CORNSILK;
|
||||
case "crimson":
|
||||
return CRIMSON;
|
||||
case "cyan":
|
||||
return CYAN;
|
||||
case "darkblue":
|
||||
return DARK_BLUE;
|
||||
case "darkcyan":
|
||||
return DARK_CYAN;
|
||||
case "darkgoldenrod":
|
||||
return DARK_GOLDEN_ROD;
|
||||
case "darkgray":
|
||||
return DARK_GRAY;
|
||||
case "darkgrey":
|
||||
return DARK_GREY;
|
||||
case "darkgreen":
|
||||
return DARK_GREEN;
|
||||
case "darkkhaki":
|
||||
return DARK_KHAKI;
|
||||
case "darkmagenta":
|
||||
return DARK_MAGENTA;
|
||||
case "darkolivegreen":
|
||||
return DARK_OLIVE_GREEN;
|
||||
case "darkorange":
|
||||
return DARK_ORANGE;
|
||||
case "darkorchid":
|
||||
return DARK_ORCHID;
|
||||
case "darkred":
|
||||
return DARK_RED;
|
||||
case "darksalmon":
|
||||
return DARK_SALMON;
|
||||
case "darkseagreen":
|
||||
return DARK_SEA_GREEN;
|
||||
case "darkslateblue":
|
||||
return DARK_SLATE_BLUE;
|
||||
case "darkslategray":
|
||||
return DARK_SLATE_GRAY;
|
||||
case "darkslategrey":
|
||||
return DARK_SLATE_GREY;
|
||||
case "darkturquoise":
|
||||
return DARK_TURQUOISE;
|
||||
case "darkviolet":
|
||||
return DARK_VIOLET;
|
||||
case "deeppink":
|
||||
return DEEP_PINK;
|
||||
case "deepskyblue":
|
||||
return DEEP_SKY_BLUE;
|
||||
case "dimgray":
|
||||
return DIM_GRAY;
|
||||
case "dimgrey":
|
||||
return DIM_GREY;
|
||||
case "dodgerblue":
|
||||
return DODGER_BLUE;
|
||||
case "firebrick":
|
||||
return FIRE_BRICK;
|
||||
case "floralwhite":
|
||||
return FLORAL_WHITE;
|
||||
case "forestgreen":
|
||||
return FOREST_GREEN;
|
||||
case "fuchsia":
|
||||
return FUCHSIA;
|
||||
case "gainsboro":
|
||||
return GAINSBORO;
|
||||
case "ghostwhite":
|
||||
return GHOST_WHITE;
|
||||
case "gold":
|
||||
return GOLD;
|
||||
case "goldenrod":
|
||||
return GOLDEN_ROD;
|
||||
case "gray":
|
||||
return GRAY;
|
||||
case "grey":
|
||||
return GREY;
|
||||
case "green":
|
||||
return GREEN;
|
||||
case "greenyellow":
|
||||
return GREEN_YELLOW;
|
||||
case "honeydew":
|
||||
return HONEY_DEW;
|
||||
case "hotpink":
|
||||
return HOT_PINK;
|
||||
case "indianred":
|
||||
return INDIAN_RED;
|
||||
case "indigo":
|
||||
return INDIGO;
|
||||
case "ivory":
|
||||
return IVORY;
|
||||
case "khaki":
|
||||
return KHAKI;
|
||||
case "lavender":
|
||||
return LAVENDER;
|
||||
case "lavenderblush":
|
||||
return LAVENDER_BLUSH;
|
||||
case "lawngreen":
|
||||
return LAWN_GREEN;
|
||||
case "lemonchiffon":
|
||||
return LEMON_CHIFFON;
|
||||
case "lightblue":
|
||||
return LIGHT_BLUE;
|
||||
case "lightcoral":
|
||||
return LIGHT_CORAL;
|
||||
case "lightcyan":
|
||||
return LIGHT_CYAN;
|
||||
case "lightgoldenrodyellow":
|
||||
return LIGHT_GOLDEN_ROD_YELLOW;
|
||||
case "lightgray":
|
||||
return LIGHT_GRAY;
|
||||
case "lightgrey":
|
||||
return LIGHT_GREY;
|
||||
case "lightgreen":
|
||||
return LIGHT_GREEN;
|
||||
case "lightpink":
|
||||
return LIGHT_PINK;
|
||||
case "lightsalmon":
|
||||
return LIGHT_SALMON;
|
||||
case "lightseagreen":
|
||||
return LIGHT_SEA_GREEN;
|
||||
case "lightskyblue":
|
||||
return LIGHT_SKY_BLUE;
|
||||
case "lightslategray":
|
||||
return LIGHT_SLATE_GRAY;
|
||||
case "lightslategrey":
|
||||
return LIGHT_SLATE_GREY;
|
||||
case "lightsteelblue":
|
||||
return LIGHT_STEEL_BLUE;
|
||||
case "lightyellow":
|
||||
return LIGHT_YELLOW;
|
||||
case "lime":
|
||||
return LIME;
|
||||
case "limegreen":
|
||||
return LIME_GREEN;
|
||||
case "linen":
|
||||
return LINEN;
|
||||
case "magenta":
|
||||
return MAGENTA;
|
||||
case "maroon":
|
||||
return MAROON;
|
||||
case "mediumaquamarine":
|
||||
return MEDIUM_AQUA_MARINE;
|
||||
case "mediumblue":
|
||||
return MEDIUM_BLUE;
|
||||
case "mediumorchid":
|
||||
return MEDIUM_ORCHID;
|
||||
case "mediumpurple":
|
||||
return MEDIUM_PURPLE;
|
||||
case "mediumseagreen":
|
||||
return MEDIUM_SEA_GREEN;
|
||||
case "mediumslateblue":
|
||||
return MEDIUM_SLATE_BLUE;
|
||||
case "mediumspringgreen":
|
||||
return MEDIUM_SPRING_GREEN;
|
||||
case "mediumturquoise":
|
||||
return MEDIUM_TURQUOISE;
|
||||
case "mediumvioletred":
|
||||
return MEDIUM_VIOLET_RED;
|
||||
case "midnightblue":
|
||||
return MIDNIGHT_BLUE;
|
||||
case "mintcream":
|
||||
return MINT_CREAM;
|
||||
case "mistyrose":
|
||||
return MISTY_ROSE;
|
||||
case "moccasin":
|
||||
return MOCCASIN;
|
||||
case "navajowhite":
|
||||
return NAVAJO_WHITE;
|
||||
case "navy":
|
||||
return NAVY;
|
||||
case "oldlace":
|
||||
return OLD_LACE;
|
||||
case "olive":
|
||||
return OLIVE;
|
||||
case "olivedrab":
|
||||
return OLIVE_DRAB;
|
||||
case "orange":
|
||||
return ORANGE;
|
||||
case "orangered":
|
||||
return ORANGE_RED;
|
||||
case "orchid":
|
||||
return ORCHID;
|
||||
case "palegoldenrod":
|
||||
return PALE_GOLDEN_ROD;
|
||||
case "palegreen":
|
||||
return PALE_GREEN;
|
||||
case "paleturquoise":
|
||||
return PALE_TURQUOISE;
|
||||
case "palevioletred":
|
||||
return PALE_VIOLET_RED;
|
||||
case "papayawhip":
|
||||
return PAPAYA_WHIP;
|
||||
case "peachpuff":
|
||||
return PEACH_PUFF;
|
||||
case "peru":
|
||||
return PERU;
|
||||
case "pink":
|
||||
return PINK;
|
||||
case "plum":
|
||||
return PLUM;
|
||||
case "powderblue":
|
||||
return POWDER_BLUE;
|
||||
case "purple":
|
||||
return PURPLE;
|
||||
case "rebeccapurple":
|
||||
return REBECCA_PURPLE;
|
||||
case "red":
|
||||
return RED;
|
||||
case "rosybrown":
|
||||
return ROSY_BROWN;
|
||||
case "royalblue":
|
||||
return ROYAL_BLUE;
|
||||
case "saddlebrown":
|
||||
return SADDLER_BROWN;
|
||||
case "salmon":
|
||||
return SALMON;
|
||||
case "sandybrown":
|
||||
return SANDY_BROWN;
|
||||
case "seagreen":
|
||||
return SEA_GREEN;
|
||||
case "seashell":
|
||||
return SEA_SHELL;
|
||||
case "sienna":
|
||||
return SIENNA;
|
||||
case "silver":
|
||||
return SILVER;
|
||||
case "skyblue":
|
||||
return SKY_BLUE;
|
||||
case "slateblue":
|
||||
return SLATE_BLUE;
|
||||
case "slategray":
|
||||
return SLATE_GRAY;
|
||||
case "slategrey":
|
||||
return SLATE_GREY;
|
||||
case "snow":
|
||||
return SNOW;
|
||||
case "springgreen":
|
||||
return SPRING_GREEN;
|
||||
case "steelblue":
|
||||
return STEEL_BLUE;
|
||||
case "tan":
|
||||
return TAN;
|
||||
case "teal":
|
||||
return TEAL;
|
||||
case "thistle":
|
||||
return THISTLE;
|
||||
case "tomato":
|
||||
return TOMATO;
|
||||
case "turquoise":
|
||||
return TURQUOISE;
|
||||
case "violet":
|
||||
return VIOLET;
|
||||
case "wheat":
|
||||
return WHEAT;
|
||||
case "white":
|
||||
return WHITE;
|
||||
case "whitesmoke":
|
||||
return WHITE_SMOKE;
|
||||
case "yellow":
|
||||
return YELLOW;
|
||||
case "yellowgreen":
|
||||
return YELLOW_GREEN;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user