View Javadoc
1   /*
2    * Copyright (c) 2011-2024 PrimeFaces Extensions
3    *
4    *  Permission is hereby granted, free of charge, to any person obtaining a copy
5    *  of this software and associated documentation files (the "Software"), to deal
6    *  in the Software without restriction, including without limitation the rights
7    *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    *  copies of the Software, and to permit persons to whom the Software is
9    *  furnished to do so, subject to the following conditions:
10   *
11   *  The above copyright notice and this permission notice shall be included in
12   *  all copies or substantial portions of the Software.
13   *
14   *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20   *  THE SOFTWARE.
21   */
22  package org.primefaces.extensions.component.timer;
23  
24  import java.util.Locale;
25  
26  import javax.el.MethodExpression;
27  import javax.faces.application.ResourceDependency;
28  import javax.faces.component.UIComponentBase;
29  import javax.faces.context.FacesContext;
30  
31  import org.primefaces.component.api.AjaxSource;
32  import org.primefaces.component.api.Widget;
33  import org.primefaces.util.Constants;
34  import org.primefaces.util.LocaleUtils;
35  
36  /**
37   * Timer component
38   *
39   * @author f.strazzullo
40   */
41  @ResourceDependency(library = "primefaces", name = "components.css")
42  @ResourceDependency(library = "primefaces", name = "jquery/jquery.js")
43  @ResourceDependency(library = "primefaces", name = "jquery/jquery-plugins.js")
44  @ResourceDependency(library = "primefaces", name = "core.js")
45  @ResourceDependency(library = "primefaces", name = "moment/moment.js")
46  @ResourceDependency(library = "primefaces-extensions", name = "primefaces-extensions.js")
47  @ResourceDependency(library = "primefaces-extensions", name = "timer/timer.css")
48  @ResourceDependency(library = "primefaces-extensions", name = "timer/timer.js")
49  public class Timer extends UIComponentBase implements Widget, AjaxSource {
50  
51      public static final String COMPONENT_TYPE = "org.primefaces.extensions.component.Timer";
52      public static final String COMPONENT_FAMILY = "org.primefaces.extensions.component";
53      public static final String STYLE_CLASS = "ui-timer ui-widget ui-widget-header ui-corner-all";
54      private static final int DEFAULT_TIMEOUT = 10;
55      private static final int DEFAULT_INTERVAL_MS = 1000;
56  
57      private Locale appropriateLocale;
58  
59      @SuppressWarnings("java:S115")
60      protected enum PropertyKeys {
61  
62          //@formatter:off
63          widgetVar,
64          singleRun,
65          timeout,
66          interval,
67          update,
68          listener,
69          immediate,
70          ontimercomplete,
71          ontimerstep,
72          onstart,
73          oncomplete,
74          process,
75          onerror,
76          onsuccess,
77          global,
78          delay,
79          async,
80          autoStart,
81          partialSubmit,
82          resetValues,
83          format,
84          style,
85          styleClass,
86          ignoreAutoUpdate,
87          visible,
88          forward,
89          locale,
90          formatFunction,
91          partialSubmitFilter,
92          form,
93          title,
94          ignoreComponentNotFound
95          //@formatter:on
96  
97      }
98  
99      public Timer() {
100         setRendererType(TimerRenderer.RENDERER_TYPE);
101     }
102 
103     @Override
104     public String getFamily() {
105         return COMPONENT_FAMILY;
106     }
107 
108     public Locale calculateLocale() {
109         if (appropriateLocale == null) {
110             final FacesContext fc = FacesContext.getCurrentInstance();
111             appropriateLocale = LocaleUtils.resolveLocale(fc, getLocale(), getClientId(fc));
112         }
113         return appropriateLocale;
114     }
115 
116     public boolean isSingleRun() {
117         return Boolean.TRUE.equals(getStateHelper().eval(PropertyKeys.singleRun, true));
118     }
119 
120     public void setSingleRun(final boolean singleRun) {
121         getStateHelper().put(PropertyKeys.singleRun, singleRun);
122     }
123 
124     @Override
125     public int getTimeout() {
126         return (Integer) getStateHelper().eval(PropertyKeys.timeout, DEFAULT_TIMEOUT);
127     }
128 
129     public void setTimeout(final int timeout) {
130         getStateHelper().put(PropertyKeys.timeout, timeout);
131     }
132 
133     public int getInterval() {
134         return (Integer) getStateHelper().eval(PropertyKeys.interval, DEFAULT_INTERVAL_MS);
135     }
136 
137     public void setInterval(final int interval) {
138         getStateHelper().put(PropertyKeys.interval, interval);
139     }
140 
141     public java.lang.String getWidgetVar() {
142         return (java.lang.String) getStateHelper().eval(PropertyKeys.widgetVar, null);
143     }
144 
145     public void setWidgetVar(final java.lang.String widgetVar) {
146         getStateHelper().put(PropertyKeys.widgetVar, widgetVar);
147     }
148 
149     @Override
150     public java.lang.String getUpdate() {
151         return (java.lang.String) getStateHelper().eval(PropertyKeys.update, null);
152     }
153 
154     public void setUpdate(final java.lang.String update) {
155         getStateHelper().put(PropertyKeys.update, update);
156     }
157 
158     public MethodExpression getListener() {
159         return (MethodExpression) getStateHelper().eval(PropertyKeys.listener, null);
160     }
161 
162     public void setListener(final MethodExpression listener) {
163         getStateHelper().put(PropertyKeys.listener, listener);
164     }
165 
166     public boolean isImmediate() {
167         return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.immediate, false);
168     }
169 
170     public void setImmediate(final boolean immediate) {
171         getStateHelper().put(PropertyKeys.immediate, immediate);
172     }
173 
174     @Override
175     public java.lang.String getOnstart() {
176         return (java.lang.String) getStateHelper().eval(PropertyKeys.onstart, null);
177     }
178 
179     public void setOnstart(final java.lang.String onstart) {
180         getStateHelper().put(PropertyKeys.onstart, onstart);
181     }
182 
183     @Override
184     public java.lang.String getOncomplete() {
185         return (java.lang.String) getStateHelper().eval(PropertyKeys.oncomplete, null);
186     }
187 
188     public void setOncomplete(final java.lang.String oncomplete) {
189         getStateHelper().put(PropertyKeys.oncomplete, oncomplete);
190     }
191 
192     public java.lang.String getOntimercomplete() {
193         return (java.lang.String) getStateHelper().eval(PropertyKeys.ontimercomplete, null);
194     }
195 
196     public void setOntimercomplete(final java.lang.String oncomplete) {
197         getStateHelper().put(PropertyKeys.ontimercomplete, oncomplete);
198     }
199 
200     public java.lang.String getOntimerstep() {
201         return (java.lang.String) getStateHelper().eval(PropertyKeys.ontimerstep, null);
202     }
203 
204     public void setOntimerstep(final java.lang.String onstep) {
205         getStateHelper().put(PropertyKeys.ontimerstep, onstep);
206     }
207 
208     @Override
209     public java.lang.String getProcess() {
210         return (java.lang.String) getStateHelper().eval(PropertyKeys.process, null);
211     }
212 
213     public void setProcess(final java.lang.String process) {
214         getStateHelper().put(PropertyKeys.process, process);
215     }
216 
217     @Override
218     public java.lang.String getOnerror() {
219         return (java.lang.String) getStateHelper().eval(PropertyKeys.onerror, null);
220     }
221 
222     public void setOnerror(final java.lang.String onerror) {
223         getStateHelper().put(PropertyKeys.onerror, onerror);
224     }
225 
226     @Override
227     public java.lang.String getOnsuccess() {
228         return (java.lang.String) getStateHelper().eval(PropertyKeys.onsuccess, null);
229     }
230 
231     public void setOnsuccess(final java.lang.String onsuccess) {
232         getStateHelper().put(PropertyKeys.onsuccess, onsuccess);
233     }
234 
235     @Override
236     public boolean isGlobal() {
237         return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.global, true);
238     }
239 
240     public void setGlobal(final boolean global) {
241         getStateHelper().put(PropertyKeys.global, global);
242     }
243 
244     @Override
245     public java.lang.String getDelay() {
246         return (java.lang.String) getStateHelper().eval(PropertyKeys.delay, null);
247     }
248 
249     public void setDelay(final java.lang.String delay) {
250         getStateHelper().put(PropertyKeys.delay, delay);
251     }
252 
253     @Override
254     public boolean isAsync() {
255         return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.async, false);
256     }
257 
258     public void setAsync(final boolean async) {
259         getStateHelper().put(PropertyKeys.async, async);
260     }
261 
262     public boolean isAutoStart() {
263         return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.autoStart, true);
264     }
265 
266     public void setAutoStart(final boolean autoStart) {
267         getStateHelper().put(PropertyKeys.autoStart, autoStart);
268     }
269 
270     @Override
271     public boolean isPartialSubmit() {
272         return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.partialSubmit, false);
273     }
274 
275     public void setPartialSubmit(final boolean partialSubmit) {
276         getStateHelper().put(PropertyKeys.partialSubmit, partialSubmit);
277     }
278 
279     @Override
280     public boolean isResetValues() {
281         return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.resetValues, false);
282     }
283 
284     public void setResetValues(final boolean resetValues) {
285         getStateHelper().put(PropertyKeys.resetValues, resetValues);
286     }
287 
288     @Override
289     public boolean isIgnoreAutoUpdate() {
290         return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.ignoreAutoUpdate, false);
291     }
292 
293     public void setIgnoreAutoUpdate(final boolean ignoreAutoUpdate) {
294         getStateHelper().put(PropertyKeys.ignoreAutoUpdate, ignoreAutoUpdate);
295     }
296 
297     @Override
298     public boolean isPartialSubmitSet() {
299         return getStateHelper().get(PropertyKeys.partialSubmit) != null || getValueExpression("partialSubmit") != null;
300     }
301 
302     @Override
303     public boolean isResetValuesSet() {
304         return getStateHelper().get(PropertyKeys.resetValues) != null || getValueExpression("resetValues") != null;
305     }
306 
307     @Override
308     public boolean isAjaxified() {
309         return true;
310     }
311 
312     public java.lang.String getStyle() {
313         return (java.lang.String) getStateHelper().eval(PropertyKeys.style, Constants.EMPTY_STRING);
314     }
315 
316     public void setFormat(final String format) {
317         getStateHelper().put(PropertyKeys.format, format);
318     }
319 
320     public String getFormat() {
321         return (String) getStateHelper().eval(PropertyKeys.format, Constants.EMPTY_STRING);
322     }
323 
324     public void setFormatFunction(final String format) {
325         getStateHelper().put(PropertyKeys.formatFunction, format);
326     }
327 
328     public String getFormatFunction() {
329         return (String) getStateHelper().eval(PropertyKeys.formatFunction, Constants.EMPTY_STRING);
330     }
331 
332     public void setStyle(final java.lang.String style) {
333         getStateHelper().put(PropertyKeys.style, style);
334     }
335 
336     public java.lang.String getStyleClass() {
337         return (java.lang.String) getStateHelper().eval(PropertyKeys.styleClass, Constants.EMPTY_STRING);
338     }
339 
340     public void setStyleClass(final java.lang.String styleClass) {
341         getStateHelper().put(PropertyKeys.styleClass, styleClass);
342     }
343 
344     public java.lang.String getTitle() {
345         return (java.lang.String) getStateHelper().eval(PropertyKeys.title, Constants.EMPTY_STRING);
346     }
347 
348     public void setTitle(final java.lang.String title) {
349         getStateHelper().put(PropertyKeys.title, title);
350     }
351 
352     public boolean isVisible() {
353         return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.visible, true);
354     }
355 
356     public void setVisible(final boolean visible) {
357         getStateHelper().put(PropertyKeys.visible, visible);
358     }
359 
360     public boolean isForward() {
361         return (java.lang.Boolean) getStateHelper().eval(PropertyKeys.forward, false);
362     }
363 
364     public void setForward(final boolean forward) {
365         getStateHelper().put(PropertyKeys.forward, forward);
366     }
367 
368     public Object getLocale() {
369         return getStateHelper().eval(PropertyKeys.locale, null);
370     }
371 
372     public void setLocale(final Object locale) {
373         getStateHelper().put(PropertyKeys.locale, locale);
374     }
375 
376     @Override
377     public java.lang.String getPartialSubmitFilter() {
378         return (java.lang.String) getStateHelper().eval(PropertyKeys.partialSubmitFilter, null);
379     }
380 
381     public void setPartialSubmitFilter(final java.lang.String partialSubmitFilter) {
382         getStateHelper().put(PropertyKeys.partialSubmitFilter, partialSubmitFilter);
383     }
384 
385     @Override
386     public java.lang.String getForm() {
387         return (java.lang.String) getStateHelper().eval(PropertyKeys.form, null);
388     }
389 
390     public void setForm(final java.lang.String form) {
391         getStateHelper().put(PropertyKeys.form, form);
392     }
393 
394     @Override
395     public void broadcast(final javax.faces.event.FacesEvent event) {
396         super.broadcast(event); // backward compatibility
397 
398         final FacesContext facesContext = getFacesContext();
399         final MethodExpression me = getListener();
400 
401         if (me != null) {
402             me.invoke(facesContext.getELContext(), new Object[] {});
403         }
404     }
405 
406     @Override
407     public boolean isIgnoreComponentNotFound() {
408         return (Boolean) getStateHelper().eval(PropertyKeys.ignoreComponentNotFound, false);
409     }
410 
411     public void setIgnoreComponentNotFound(final boolean ignoreComponentNotFound) {
412         getStateHelper().put(PropertyKeys.ignoreComponentNotFound, ignoreComponentNotFound);
413     }
414 
415     @Override
416     public Object saveState(FacesContext context) {
417         // reset component for MyFaces view pooling
418         appropriateLocale = null;
419 
420         return super.saveState(context);
421     }
422 }