1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package com.hack23.cia.web.impl.ui.application.views.common.chartfactory.impl;
20
21 import org.dussan.vaadin.dcharts.base.elements.XYaxis;
22 import org.dussan.vaadin.dcharts.metadata.DataLabels;
23 import org.dussan.vaadin.dcharts.metadata.LegendPlacements;
24 import org.dussan.vaadin.dcharts.metadata.SeriesToggles;
25 import org.dussan.vaadin.dcharts.metadata.TooltipAxes;
26 import org.dussan.vaadin.dcharts.metadata.XYaxes;
27 import org.dussan.vaadin.dcharts.metadata.locations.LegendLocations;
28 import org.dussan.vaadin.dcharts.metadata.locations.TooltipLocations;
29 import org.dussan.vaadin.dcharts.metadata.renderers.AxisRenderers;
30 import org.dussan.vaadin.dcharts.metadata.renderers.LegendRenderers;
31 import org.dussan.vaadin.dcharts.metadata.renderers.SeriesRenderers;
32 import org.dussan.vaadin.dcharts.options.Axes;
33 import org.dussan.vaadin.dcharts.options.Cursor;
34 import org.dussan.vaadin.dcharts.options.Grid;
35 import org.dussan.vaadin.dcharts.options.Highlighter;
36 import org.dussan.vaadin.dcharts.options.Legend;
37 import org.dussan.vaadin.dcharts.options.Options;
38 import org.dussan.vaadin.dcharts.options.Series;
39 import org.dussan.vaadin.dcharts.options.SeriesDefaults;
40 import org.dussan.vaadin.dcharts.renderers.legend.EnhancedLegendRenderer;
41 import org.dussan.vaadin.dcharts.renderers.series.DonutRenderer;
42 import org.dussan.vaadin.dcharts.renderers.series.PieRenderer;
43 import org.dussan.vaadin.dcharts.renderers.tick.AxisTickRenderer;
44 import org.springframework.stereotype.Component;
45
46 import com.hack23.cia.web.impl.ui.application.views.common.chartfactory.api.ChartOptions;
47
48
49
50
51 @Component
52 public final class ChartOptionsImpl implements ChartOptions {
53
54
55 private static final int SLICE_MARGIN = 3;
56
57
58 private static final int START_ANGLE = -90;
59
60
61 private static final String FLOAT_FORMAT = "%.2f";
62
63
64 private static final int NUMBER_TICKS = 5;
65
66
67 private static final int LEGEND_COLUMNS = 3;
68
69
70 private static final int LEGEND_ROWS = 20;
71
72
73 private static final String LEGEND_FONT_SIZE = "10px";
74
75
76 private static final String BORDER_COLOR = "#83898c";
77
78
79 private static final String GRIDLINE_COLOR = "#213f49";
80
81
82 private static final String BACKGROUND_COLOR = "#13303f";
83
84
85 private static final String TEXT_COLOR = "#ffffff";
86
87
88 private static final String FONT_SIZE = "8px";
89
90
91 private static final String FONT_FAMILY = "Inconsolata";
92
93
94 public static final int NUMBER_TICKS_DATE = 8;
95
96
97 public static final String YEAR_MONTH_DAY_FORMAT = "%Y-%#m-%#d";
98
99
100
101
102 private ChartOptionsImpl() {
103 super();
104 }
105
106
107
108
109
110
111 private static Axes createAxesXYDateFloat() {
112 return new Axes()
113 .addAxis(new XYaxis().setRenderer(AxisRenderers.DATE)
114 .setTickOptions(new AxisTickRenderer().setFormatString(YEAR_MONTH_DAY_FORMAT).setFontFamily(FONT_FAMILY).setTextColor(TEXT_COLOR).setFontSize(FONT_SIZE))
115 .setNumberTicks(NUMBER_TICKS_DATE))
116 .addAxis(new XYaxis(XYaxes.Y).setRenderer(AxisRenderers.LINEAR).setTickOptions(new AxisTickRenderer().setFormatString(FLOAT_FORMAT).setFontFamily(FONT_FAMILY).setTextColor(TEXT_COLOR).setFontSize(FONT_SIZE)).setNumberTicks(NUMBER_TICKS));
117 }
118
119
120
121
122
123
124 private static Axes createAxesXYDateFloatLog() {
125 return new Axes()
126 .addAxis(new XYaxis().setRenderer(AxisRenderers.DATE)
127 .setTickOptions(new AxisTickRenderer().setFormatString(YEAR_MONTH_DAY_FORMAT).setFontFamily(FONT_FAMILY).setTextColor(TEXT_COLOR).setFontSize(FONT_SIZE))
128 .setNumberTicks(NUMBER_TICKS_DATE))
129 .addAxis(new XYaxis(XYaxes.Y).setRenderer(AxisRenderers.LOG).setTickOptions(new AxisTickRenderer().setFormatString(FLOAT_FORMAT).setFontFamily(FONT_FAMILY).setTextColor(TEXT_COLOR).setFontSize(FONT_SIZE)).setNumberTicks(NUMBER_TICKS));
130 }
131
132
133
134
135
136
137
138 private static Grid createDefaultGrid() {
139 final Grid grid = new Grid();
140 grid.setBackground(BACKGROUND_COLOR);
141 grid.setGridLineColor(GRIDLINE_COLOR);
142 grid.setBorderColor(BORDER_COLOR);
143 return grid;
144 }
145
146
147
148
149
150
151 private static Legend createdLegendEnhancedInsideNorthWest() {
152 return setLegendStyling(new Legend().setShow(true)
153 .setRendererOptions(
154 new EnhancedLegendRenderer().setSeriesToggle(SeriesToggles.NORMAL).setSeriesToggleReplot(true).setNumberColumns(LEGEND_COLUMNS).setNumberRows(LEGEND_ROWS))
155 .setPlacement(LegendPlacements.INSIDE_GRID).setLocation(LegendLocations.NORTH_WEST));
156 }
157
158
159
160
161
162
163 private static Legend createdLegendEnhancedInsideWest() {
164 return setLegendStyling(
165 new Legend().setShow(true).setPlacement(LegendPlacements.INSIDE_GRID).setLocation(LegendLocations.WEST)
166 .setRenderer(LegendRenderers.ENHANCED).setRendererOptions(new EnhancedLegendRenderer()
167 .setSeriesToggle(SeriesToggles.NORMAL).setSeriesToggleReplot(true).setNumberColumns(LEGEND_COLUMNS).setNumberRows(LEGEND_ROWS)));
168 }
169
170
171
172
173
174
175 private static Legend createLegendOutside() {
176 return setLegendStyling(new Legend().setShow(true)
177 .setRendererOptions(
178 new EnhancedLegendRenderer().setSeriesToggle(SeriesToggles.NORMAL).setSeriesToggleReplot(true).setNumberColumns(LEGEND_COLUMNS).setNumberRows(LEGEND_ROWS))
179 .setPlacement(LegendPlacements.OUTSIDE_GRID));
180 }
181
182
183
184
185
186
187
188
189 private static Legend setLegendStyling(final Legend legend) {
190 legend.setBackground(BACKGROUND_COLOR).setFontFamily(FONT_FAMILY).setTextColor(TEXT_COLOR).setFontSize(LEGEND_FONT_SIZE);
191 return legend;
192 }
193
194
195
196
197
198
199 private static Highlighter createHighLighter() {
200 return new Highlighter().setShow(true).setShowTooltip(true).setTooltipAlwaysVisible(true)
201 .setKeepTooltipInsideChart(true);
202 }
203
204
205
206
207
208
209 private static Highlighter createHighLighterNorth() {
210 return new Highlighter().setShow(true).setShowTooltip(true).setTooltipAlwaysVisible(true)
211 .setKeepTooltipInsideChart(true).setTooltipLocation(TooltipLocations.NORTH)
212 .setTooltipAxes(TooltipAxes.XY_BAR);
213 }
214
215
216
217
218
219
220 private static SeriesDefaults createSeriesDefaultPieChart() {
221 return new SeriesDefaults().setRenderer(SeriesRenderers.PIE)
222 .setRendererOptions(new PieRenderer().setShowDataLabels(true)).setShadow(true);
223 }
224
225
226
227
228
229
230
231 private static Cursor createCursor() {
232 return new Cursor().setZoom(true).setLooseZoom(true).setShow(true);
233 }
234
235 @Override
236 public Options createOptionsCountryLineChart(final Series series) {
237 final Axes axes = new Axes().addAxis(new XYaxis().setRenderer(AxisRenderers.DATE)
238 .setTickOptions(new AxisTickRenderer().setFormatString(YEAR_MONTH_DAY_FORMAT).setFontFamily(FONT_FAMILY).setTextColor(TEXT_COLOR).setFontSize(FONT_SIZE))
239 .setNumberTicks(NUMBER_TICKS_DATE)).addAxis(new XYaxis(XYaxes.Y).setTickOptions(new AxisTickRenderer().setFontFamily(FONT_FAMILY).setTextColor(TEXT_COLOR).setFontSize(FONT_SIZE)).setNumberTicks(NUMBER_TICKS));
240
241 return new Options().addOption(new SeriesDefaults()).addOption(axes)
242 .addOption(createHighLighterNorth()).addOption(series).addOption(createLegendOutside())
243 .addOption(createDefaultGrid()).addOption(createCursor());
244 }
245
246 @Override
247 public Options createOptionsDonoutChart() {
248 final Legend legend = createdLegendEnhancedInsideNorthWest();
249
250 final Highlighter highlighter = new Highlighter().setShow(true).setShowTooltip(true)
251 .setTooltipAlwaysVisible(true).setKeepTooltipInsideChart(true);
252
253 final SeriesDefaults seriesDefaults = new SeriesDefaults().setRenderer(SeriesRenderers.DONUT)
254 .setRendererOptions(new DonutRenderer().setSliceMargin(SLICE_MARGIN).setStartAngle(START_ANGLE).setShowDataLabels(true)
255 .setDataLabels(DataLabels.VALUE));
256
257
258 return new Options().setSeriesDefaults(seriesDefaults).setLegend(legend)
259 .setHighlighter(highlighter).addOption(createDefaultGrid()).addOption(createCursor());
260 }
261
262 @Override
263 public Options createOptionsDonoutChartWithSeries(final Series series) {
264 final Legend legend = createdLegendEnhancedInsideNorthWest();
265
266 final Highlighter highlighter = new Highlighter().setShow(true).setShowTooltip(true)
267 .setTooltipAlwaysVisible(true).setKeepTooltipInsideChart(true);
268
269 final SeriesDefaults seriesDefaults = new SeriesDefaults().setRenderer(SeriesRenderers.DONUT)
270 .setRendererOptions(new DonutRenderer().setSliceMargin(SLICE_MARGIN).setStartAngle(START_ANGLE).setShowDataLabels(true)
271 .setDataLabels(DataLabels.VALUE));
272
273 return new Options().setSeriesDefaults(seriesDefaults).setLegend(legend)
274 .setHighlighter(highlighter).addOption(series).addOption(createDefaultGrid()).addOption(createCursor());
275 }
276
277 @Override
278 public Options createOptionsPartyLineChart(final Series series) {
279 return new Options().addOption(new SeriesDefaults()).addOption(createAxesXYDateFloat())
280 .addOption(createHighLighterNorth()).addOption(createCursor()).addOption(series)
281 .addOption(createLegendOutside()).addOption(createDefaultGrid());
282 }
283
284 @Override
285 public Options createOptionsPersonLineChart(final Series series) {
286 return new Options().addOption(new SeriesDefaults()).addOption(createAxesXYDateFloat())
287 .addOption(createHighLighterNorth()).addOption(createCursor()).addOption(series)
288 .addOption(createLegendOutside()).addOption(createDefaultGrid());
289 }
290
291 @Override
292 public Options createOptionsPieChart() {
293 return new Options().setSeriesDefaults(createSeriesDefaultPieChart())
294 .setLegend(createdLegendEnhancedInsideWest()).setHighlighter(createHighLighter())
295 .addOption(createDefaultGrid()).addOption(createCursor());
296 }
297
298 @Override
299 public Options createOptionsXYDateFloatLegendOutside(final Series series) {
300 return new Options().addOption(new SeriesDefaults()).addOption(createAxesXYDateFloat())
301 .addOption(createHighLighterNorth()).addOption(series).addOption(createLegendOutside())
302 .addOption(createDefaultGrid()).addOption(createCursor());
303 }
304
305 @Override
306 public Options createOptionsXYDateFloatLogYAxisLegendOutside(final Series series) {
307 return new Options().addOption(new SeriesDefaults()).addOption(createAxesXYDateFloatLog())
308 .addOption(createHighLighterNorth()).addOption(series).addOption(createLegendOutside())
309 .addOption(createDefaultGrid()).addOption(createCursor());
310 }
311
312 }