/* | |
* Created on Dec 11, 2007 | |
*/ | |
package com.codecommit.wicket; | |
/** | |
* @author Daniel Spiewak | |
*/ | |
public enum ChartDataEncoding { | |
SIMPLE("s", "", ",") { | |
CharSequence convert(double value, double max) { | |
if (value < 0) { | |
return "_"; | |
} | |
value = Math.round((CHARS.length() - 1) * value / max); | |
if (value > CHARS.length() - 1) { | |
throw new IllegalArgumentException(value + " is out of range for SIMPLE encoding"); | |
} | |
return Character.toString(CHARS.charAt((int) value)); | |
} | |
}, | |
TEXT("t", ",", "|") { | |
CharSequence convert(double value, double max) { | |
if (value < 0) { | |
value = -1; | |
} | |
if (value > 100) { | |
throw new IllegalArgumentException(value + " is out of range for TEXT encoding"); | |
} | |
return Double.toString(value); | |
} | |
}, | |
EXTENDED("e", "", ",") { | |
CharSequence convert(double value, double max) { | |
if (value < 0) { | |
return "__"; | |
} | |
value = Math.round(value); | |
if (value > (EXT_CHARS.length() - 1) * (EXT_CHARS.length() - 1)) { | |
throw new IllegalArgumentException(value + " is out of range for EXTENDED encoding"); | |
} | |
int rem = (int) (value % EXT_CHARS.length()); | |
int exp = (int) (value / EXT_CHARS.length()); | |
return new StringBuilder().append(EXT_CHARS.charAt(exp)).append(EXT_CHARS.charAt(rem)); | |
} | |
}; | |
private static final String CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; | |
private static final String EXT_CHARS = CHARS + "-_."; | |
private final String rendering, valueSeparator, setSeparator; | |
private ChartDataEncoding(String rendering, String valueSeparator, String setSeparator) { | |
this.rendering = rendering; | |
this.valueSeparator = valueSeparator; | |
this.setSeparator = setSeparator; | |
} | |
public String getRendering() { | |
return rendering; | |
} | |
public String getValueSeparator() { | |
return valueSeparator; | |
} | |
public String getSetSeparator() { | |
return setSeparator; | |
} | |
abstract CharSequence convert(double value, double max); | |
} |