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.clockpicker;
23  
24  import java.util.Locale;
25  
26  import javax.faces.application.ResourceDependency;
27  import javax.faces.context.FacesContext;
28  
29  import org.primefaces.component.api.AbstractPrimeHtmlInputText;
30  import org.primefaces.component.api.InputHolder;
31  import org.primefaces.component.api.Widget;
32  import org.primefaces.util.LocaleUtils;
33  
34  @ResourceDependency(library = "primefaces", name = "components.css")
35  @ResourceDependency(library = "primefaces", name = "jquery/jquery.js")
36  @ResourceDependency(library = "primefaces", name = "jquery/jquery-plugins.js")
37  @ResourceDependency(library = "primefaces", name = "core.js")
38  @ResourceDependency(library = "primefaces-extensions", name = "clockpicker/clockpicker.css")
39  @ResourceDependency(library = "primefaces-extensions", name = "clockpicker/clockpicker.js")
40  public class ClockPicker extends AbstractPrimeHtmlInputText implements Widget, InputHolder {
41      public static final String CONTAINER_CLASS = "pe-clockpicker ui-widget ui-corner-all clockpicker";
42      public static final String BUTTON_TRIGGER_CLASS = "pe-clockpicker-trigger ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only input-group-addon";
43      public static final String BUTTON_TRIGGER_ICON_CLASS = "ui-button-icon-left ui-icon ui-icon-clock";
44      public static final String BUTTON_TRIGGER_TEXT_CLASS = "ui-button-text";
45  
46      public static final String COMPONENT_TYPE = "org.primefaces.extensions.component.ClockPicker";
47      public static final String COMPONENT_FAMILY = "org.primefaces.extensions.component";
48      private static final String DEFAULT_RENDERER = "org.primefaces.extensions.component.ClockPickerRenderer";
49  
50      private Locale appropriateLocale;
51  
52      protected enum PropertyKeys {
53  
54          //@formatter:off
55          widgetVar,
56          locale,
57          placement,
58          align,
59          autoClose,
60          vibrate,
61          twelveHour,
62          showOn,
63          onbeforeshow,
64          onaftershow,
65          onbeforehide,
66          onafterhide,
67          onbeforehourselect,
68          onafterhourselect,
69          onafterampmselect,
70          onbeforedone,
71          onafterdone,
72          appendTo
73      }
74      
75      public ClockPicker() {
76          setRendererType(DEFAULT_RENDERER);
77      }
78  
79      @Override
80      public String getFamily() {
81          return COMPONENT_FAMILY;
82      }
83  
84      @Override
85      public String getInputClientId() {
86          return getClientId(getFacesContext()) + "_input";
87      }
88  
89      @Override
90      public String getValidatableInputClientId() {
91          return getInputClientId();
92      }
93  
94      @Override
95      public String getLabelledBy() {
96          return (String) getStateHelper().get("labelledby");
97      }
98  
99      @Override
100     public void setLabelledBy(String labelledBy) {
101         getStateHelper().put("labelledby", labelledBy);
102     }
103     
104     public String getWidgetVar() {
105         return (String) getStateHelper().eval(PropertyKeys.widgetVar, null);
106     }
107 
108     public void setWidgetVar(final String widgetVar) {
109         getStateHelper().put(PropertyKeys.widgetVar, widgetVar);
110     }
111     
112     public String getPlacement() {
113         return (String) getStateHelper().eval(PropertyKeys.placement, "bottom");
114     }
115     
116     public void setPlacement(final String placement) {
117         getStateHelper().put(PropertyKeys.placement, placement);
118     }
119     
120     public String getAlign() {
121         return (String) getStateHelper().eval(PropertyKeys.align, "left");
122     }
123     
124     public void setAlign(final String align) {
125         getStateHelper().put(PropertyKeys.align, align);
126     }
127     
128     public Boolean isAutoClose() {
129         return (Boolean) getStateHelper().eval(PropertyKeys.autoClose, false);
130     }
131     
132     public void setAutoClose(final Boolean autoClose) {
133         getStateHelper().put(PropertyKeys.autoClose, autoClose);
134     }
135     
136     public Boolean getVibrate() {
137         return (Boolean) getStateHelper().eval(PropertyKeys.vibrate, true); 
138     }
139     
140     public void setVibrate(final Boolean vibrate) {
141         getStateHelper().put(PropertyKeys.vibrate, vibrate);
142     }
143     
144     public Boolean isTwelveHour() {
145         return (Boolean) getStateHelper().eval(PropertyKeys.twelveHour, false);
146     }
147     
148     public void setTwelveHour(final Boolean twelveHour) {
149         getStateHelper().put(PropertyKeys.twelveHour, twelveHour);
150     }
151 
152     public Object getLocale() {
153         return getStateHelper().eval(PropertyKeys.locale, null);
154     }
155 
156     public void setLocale(final Object locale) {
157         getStateHelper().put(PropertyKeys.locale, locale);
158     }
159 
160     public String getShowOn() {
161         return (String) getStateHelper().eval(PropertyKeys.showOn, "focus");
162     }
163 
164     public void setShowOn(final String showOn) {
165         getStateHelper().put(PropertyKeys.showOn, showOn);
166     }
167 
168     public String getOnbeforeshow() {
169         return (String) getStateHelper().eval(PropertyKeys.onbeforeshow, null);
170     }
171 
172     public void setOnbeforeshow(final String beforeshow) {
173         getStateHelper().put(PropertyKeys.onbeforeshow, beforeshow);
174     }
175 
176     public String getOnaftershow() {
177         return (String) getStateHelper().eval(PropertyKeys.onaftershow, null);
178     }
179 
180     public void setOnaftershow(final String aftershow) {
181         getStateHelper().put(PropertyKeys.onaftershow, aftershow);
182     }
183 
184     public String getOnbeforehide() {
185         return (String) getStateHelper().eval(PropertyKeys.onbeforehide, null);
186     }
187 
188     public void setOnbeforehide(final String beforehide) {
189         getStateHelper().put(PropertyKeys.onbeforehide, beforehide);
190     }
191 
192     public String getOnafterhide() {
193         return (String) getStateHelper().eval(PropertyKeys.onafterhide, null);
194     }
195 
196     public void setOnafterhide(final String afterhide) {
197         getStateHelper().put(PropertyKeys.onafterhide, afterhide);
198     }
199 
200     public String getOnbeforedone() {
201         return (String) getStateHelper().eval(PropertyKeys.onbeforedone, null);
202     }
203 
204     public void setOnbeforedone(final String beforedone) {
205         getStateHelper().put(PropertyKeys.onbeforedone, beforedone);
206     }
207 
208     public String getOnafterdone() {
209         return (String) getStateHelper().eval(PropertyKeys.onafterdone, null);
210     }
211 
212     public void setOnafterdone(final String afterdone) {
213         getStateHelper().put(PropertyKeys.onafterdone, afterdone);
214     }
215 
216     public String getOnafterampmselect() {
217         return (String) getStateHelper().eval(PropertyKeys.onafterampmselect, null);
218     }
219 
220     public void setOnafterampmselect(final String afterampmselect) {
221         getStateHelper().put(PropertyKeys.onafterampmselect, afterampmselect);
222     }
223 
224     public String getOnafterhourselect() {
225         return (String) getStateHelper().eval(PropertyKeys.onafterhourselect, null);
226     }
227 
228     public void setOnafterhourselect(final String afterhourselect) {
229         getStateHelper().put(PropertyKeys.onafterhourselect, afterhourselect);
230     }
231 
232     public String getOnbeforehourselect() {
233         return (String) getStateHelper().eval(PropertyKeys.onbeforehourselect, null);
234     }
235 
236     public void setOnbeforehourselect(final String beforehourselect) {
237         getStateHelper().put(PropertyKeys.onbeforehourselect, beforehourselect);
238     }
239 
240     public boolean isShowOnButton() {
241         return !"focus".equals(getShowOn());
242     }
243 
244     public String getAppendTo() {
245         return (String) getStateHelper().eval(PropertyKeys.appendTo, "@(body)");
246     }
247 
248     public void setAppendTo(String appendTo) {
249         getStateHelper().put(PropertyKeys.appendTo, appendTo);
250     }
251 
252     public Locale calculateLocale(FacesContext fc) {
253         if (appropriateLocale == null) {
254             appropriateLocale = LocaleUtils.resolveLocale(fc, getLocale(), getClientId(fc));
255         }
256         return appropriateLocale;
257     }
258 
259     @Override
260     public Object saveState(FacesContext context) {
261         // reset component for MyFaces view pooling
262         appropriateLocale = null;
263 
264         return super.saveState(context);
265     }
266 }