1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.primefaces.extensions.component.echarts;
23
24 import java.io.IOException;
25
26 import javax.faces.component.UIComponent;
27 import javax.faces.context.FacesContext;
28 import javax.faces.context.ResponseWriter;
29
30 import org.primefaces.renderkit.CoreRenderer;
31 import org.primefaces.util.FacetUtils;
32 import org.primefaces.util.FastStringWriter;
33 import org.primefaces.util.WidgetBuilder;
34
35 public class EChartRenderer extends CoreRenderer {
36
37 @Override
38 public void decode(FacesContext context, UIComponent component) {
39 super.decodeBehaviors(context, component);
40 }
41
42 @Override
43 public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
44 EChart chart = (EChart) component;
45
46 encodeMarkup(context, chart);
47 encodeScript(context, chart);
48 }
49
50 protected void encodeMarkup(FacesContext context, EChart chart) throws IOException {
51 ResponseWriter writer = context.getResponseWriter();
52 String clientId = chart.getClientId(context);
53 String style = chart.getStyle();
54 String styleClass = getStyleClassBuilder(context).add("ui-chart").add(chart.getStyleClass()).build();
55
56 writer.startElement("div", null);
57 writer.writeAttribute("id", clientId, null);
58 writer.writeAttribute("class", styleClass, "styleClass");
59
60 if (style != null) {
61 writer.writeAttribute("style", style, "style");
62 }
63 else {
64 writer.writeAttribute("style", "width: 600px; height: 400px;", "style");
65 }
66 writer.endElement("div");
67 }
68
69 protected void encodeScript(FacesContext context, EChart chart) throws IOException {
70 WidgetBuilder wb = getWidgetBuilder(context);
71 wb.init("ExtEChart", chart)
72 .attr("theme", chart.getTheme(), "default")
73 .nativeAttr("config", renderConfig(context, chart))
74 .nativeAttr("extender", chart.getExtender());
75
76 encodeClientBehaviors(context, chart);
77
78 wb.finish();
79 }
80
81
82
83
84 protected String renderConfig(FacesContext context, EChart chart) throws IOException {
85 UIComponent facet = chart.getFacet("value");
86 if (FacetUtils.shouldRenderFacet(facet)) {
87
88 ResponseWriter originalWriter = context.getResponseWriter();
89 FastStringWriter fsw = new FastStringWriter();
90 ResponseWriter clonedWriter = originalWriter.cloneWithWriter(fsw);
91 context.setResponseWriter(clonedWriter);
92
93
94 facet.encodeAll(context);
95
96
97 context.setResponseWriter(originalWriter);
98 return fsw.toString();
99 }
100 else {
101 return chart.getValue();
102 }
103 }
104
105 }