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.gchart;
23
24 import java.util.Arrays;
25 import java.util.Collection;
26 import java.util.Collections;
27 import java.util.Map;
28
29 import javax.faces.application.ResourceDependency;
30 import javax.faces.component.UIOutput;
31 import javax.faces.component.behavior.ClientBehaviorHolder;
32 import javax.faces.context.FacesContext;
33 import javax.faces.event.AjaxBehaviorEvent;
34 import javax.faces.event.FacesEvent;
35
36 import org.primefaces.component.api.Widget;
37 import org.primefaces.event.SelectEvent;
38 import org.primefaces.extensions.util.json.GsonConverter;
39 import org.primefaces.util.Constants;
40
41 @ResourceDependency(library = "primefaces", name = "jquery/jquery.js")
42 @ResourceDependency(library = "primefaces", name = "jquery/jquery-plugins.js")
43 @ResourceDependency(library = "primefaces", name = "core.js")
44 @ResourceDependency(library = "primefaces-extensions", name = "primefaces-extensions.js")
45 @ResourceDependency(library = "primefaces-extensions", name = "gchart/gchart.css")
46 @ResourceDependency(library = "primefaces-extensions", name = "gchart/gchart.js")
47 public class GChart extends UIOutput implements Widget, ClientBehaviorHolder {
48
49 public static final String API_KEY = "primefaces.GOOGLE_MAPS_API_KEY";
50
51 public static final String COMPONENT_TYPE = "org.primefaces.extensions.component.GChart";
52 public static final String COMPONENT_FAMILY = "org.primefaces.extensions.component";
53 private static final String DEFAULT_RENDERER = "org.primefaces.extensions.component.GChartRenderer";
54
55 private static final String DEFAULT_EVENT = "select";
56 private static final Collection<String> EVENT_NAMES = Collections.unmodifiableCollection(Arrays.asList(DEFAULT_EVENT));
57
58 @SuppressWarnings("java:S115")
59 protected enum PropertyKeys {
60 widgetVar, width, height, title, apiKey, language, extender
61 }
62
63 public GChart() {
64 setRendererType(DEFAULT_RENDERER);
65 }
66
67 @Override
68 public String getFamily() {
69 return COMPONENT_FAMILY;
70 }
71
72 @Override
73 public Collection<String> getEventNames() {
74 return EVENT_NAMES;
75 }
76
77 @Override
78 public String getDefaultEventName() {
79 return DEFAULT_EVENT;
80 }
81
82 public String getWidgetVar() {
83 return (String) getStateHelper().eval(PropertyKeys.widgetVar, null);
84 }
85
86 public void setWidgetVar(final String _widgetVar) {
87 getStateHelper().put(PropertyKeys.widgetVar, _widgetVar);
88 }
89
90 public Integer getWidth() {
91 return (Integer) getStateHelper().eval(PropertyKeys.width, null);
92 }
93
94 public void setWidth(final Integer width) {
95 getStateHelper().put(PropertyKeys.width, width);
96 }
97
98 public Integer getHeight() {
99 return (Integer) getStateHelper().eval(PropertyKeys.height, null);
100 }
101
102 public void setHeight(final Integer width) {
103 getStateHelper().put(PropertyKeys.height, width);
104 }
105
106 public String getTitle() {
107 return (String) getStateHelper().eval(PropertyKeys.title, null);
108 }
109
110 public void setTitle(final String title) {
111 getStateHelper().put(PropertyKeys.title, title);
112 }
113
114 public String getApiKey() {
115 return (String) getStateHelper().eval(PropertyKeys.apiKey, null);
116 }
117
118 public void setApiKey(final String apiKey) {
119 getStateHelper().put(PropertyKeys.apiKey, apiKey);
120 }
121
122 public String getLanguage() {
123 return (String) getStateHelper().eval(PropertyKeys.language, "en");
124 }
125
126 public void setLanguage(final String language) {
127 getStateHelper().put(PropertyKeys.language, language);
128 }
129
130 public String getExtender() {
131 return (String) getStateHelper().eval(PropertyKeys.extender, null);
132 }
133
134 public void setExtender(final String extender) {
135 getStateHelper().put(PropertyKeys.extender, extender);
136 }
137
138 @Override
139 public void queueEvent(final FacesEvent event) {
140
141 final FacesContext context = getFacesContext();
142 if (isRequestSource(context) && event instanceof AjaxBehaviorEvent) {
143 final Map<String, String> params = context.getExternalContext().getRequestParameterMap();
144 final String eventName = params.get(Constants.RequestParams.PARTIAL_BEHAVIOR_EVENT_PARAM);
145
146 if (eventName.equals(DEFAULT_EVENT)) {
147 final AjaxBehaviorEvent behaviorEvent = (AjaxBehaviorEvent) event;
148 final String clientId = getClientId(context);
149
150 final Object value = GsonConverter.getGson().fromJson(params.get(clientId + "_hidden"),
151 com.google.gson.JsonArray.class);
152
153 final SelectEvent selectEvent = new SelectEvent(this, behaviorEvent.getBehavior(), value);
154 selectEvent.setPhaseId(behaviorEvent.getPhaseId());
155
156 super.queueEvent(selectEvent);
157 }
158 }
159 else {
160 super.queueEvent(event);
161 }
162 }
163
164 public boolean isRequestSource(final FacesContext context) {
165 final String partialSource = context.getExternalContext().getRequestParameterMap()
166 .get(Constants.RequestParams.PARTIAL_SOURCE_PARAM);
167
168 return getClientId(context).equals(partialSource);
169 }
170 }