James Moger
2011-04-07 cebf455f3fd54b72e530942f308097ec54b408cd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*
 * 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);
}