View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.myfaces.custom.calendar;
20  
21  import org.apache.myfaces.component.AlignProperty;
22  import org.apache.myfaces.component.LibraryLocationAware;
23  import org.apache.myfaces.component.LocationAware;
24  import org.apache.myfaces.component.UserRoleAware;
25  import org.apache.myfaces.component.UserRoleUtils;
26  import org.apache.myfaces.component.html.ext.HtmlInputText;
27  
28  /**
29   *  <p>
30   *  Provides a calendar. The calendar can be "inline", or a button can be rendered
31   *  that displays the calendar in a "popup window" when clicked. Javascript is
32   *  required for the popup window.
33   *  </p>
34   *  <p>
35   *  The two forms of calendar are unfortunately not well integrated; this component is
36   *  effectively two components that happen to use the same component class. Some
37   *  attributes on the component are applicable only to the inline form while others
38   *  are applicable only to the popup form.
39   *  </p>
40   *  <p>
41   *  The appearance of the inline calendar can be controlled via attributes
42   *  such as currentDayCellClass, dayCellClass, weekRowClass, monthYearRowClass. 
43   *  Attributes "styleLocation", "javascriptLocation", "imageLocation" and all
44   *  attributes starting with "popup" have no effect on an inline calendar.
45   *  </p>
46   *  <ul>
47   *  <p>
48   *  The appearance of the popup calendar can be controlled via attributes
49   *  popupTheme, styleLocation, javascriptLocation and imageLocation:
50   *  </p>
51   *    <li>popupTheme: When styleLocation is not overridden then this selects one of the
52   *    built-in themes ("WH" or "DB"); the default is "DB". This also selects the prefix
53   * used for the names of style classes attached to generated dom elements; all style
54   * names are of form "jscalendar-{popupTheme}-*".  
55   * </li>
56   * <li>styleLocation: specifies the URL of a directory in which a "theme.css" file exists.
57   *  A reference to this theme.css file will automatically be output. Specifying "none" as the
58   *  location prevents the generation of this stylesheet reference; it is assumed that the
59   *  necessary style rules will be loaded via some other mechanism. Defaults to a reference
60   *  to a location within the tomahawk jarfile which varies based on popupTheme.</li>
61   * <li>javascriptLocation: specifies the URL of a directory in which all the necessary script
62   *   files can be found. A reference to scripts "prototype.js", "date.js" and "popcalendar.js"
63   *   will automatically be output. Specifying "none" prevents generation of these references;
64   *       it is assumed that the necessary javascript functions will be loaded via some other
65   *       mechanism. Defaults to a reference to a location within the tomahawk jarfile.</li>
66   *    <li>imageLocation: specifies the URL of a directory in which all the necessary icons are
67   *       defined. Defaults to a reference to a location within the tomahawk jarfile which
68   *       varies depending on popupTheme.</li>
69   *  </ul>
70   *  Other styling attributes (eg dayCellClass, weekRowClass) are ignored for the popup calendar.
71   *  <p>
72   *  Unless otherwise specified, all attributes accept static values or EL expressions.
73   *  </p>
74   * 
75   * @JSFComponent
76   *   name = "t:inputCalendar"
77   *   class = "org.apache.myfaces.custom.calendar.HtmlInputCalendar"
78   *   tagClass = "org.apache.myfaces.custom.calendar.HtmlInputCalendarTag"
79   *   tagSuperclass = "org.apache.myfaces.custom.calendar.AbstractHtmlInputCalendarTag"
80   *   tagHandler = "org.apache.myfaces.custom.calendar.HtmlInputCalendarTagHandler"
81   * @since 1.1.7
82   * @author Martin Marinschek (latest modification by $Author: lu4242 $)
83   * @version $Revision: 691856 $ $Date: 2008-09-03 21:40:30 -0500 (miƩ, 03 sep 2008) $
84   */
85  public abstract class AbstractHtmlInputCalendar
86          extends HtmlInputText implements UserRoleAware, LocationAware,
87          AlignProperty, LibraryLocationAware
88  {
89  
90      public static final String COMPONENT_TYPE = "org.apache.myfaces.HtmlInputCalendar";
91      private static final String DEFAULT_RENDERER_TYPE = "org.apache.myfaces.Calendar";
92      
93      public boolean isRendered()
94      {
95          if (!UserRoleUtils.isVisibleOnUserRole(this)) return false;
96          return super.isRendered();
97      }
98      
99      /**
100      * Indicate an object used as a bridge between the java.util.Date instance
101      * used by this component internally and the value object used on the bean,
102      * referred as a "business" value.
103      * 
104      * <ul>
105      * <li>If the value is literal, look for the mentioned class instance, 
106      * create a new instance and assign to the component property.</li>
107      * <li>If it the value a EL Expression, set the expression to the 
108      * component property.</li>
109      * </ul> 
110      * 
111      * @JSFProperty stateHolder="true" inheritedTag="true"
112      */
113     public abstract DateBusinessConverter getDateBusinessConverter();
114     
115     public abstract void setDateBusinessConverter(DateBusinessConverter dateBusinessConverter);
116         
117     /**
118      * CSS class to be used on the TR element for the header-row showing month and year.
119      * 
120      * @JSFProperty 
121      */
122     public abstract String getMonthYearRowClass();
123 
124     /**
125      * CSS class to be used on the TR element for the header-row showing the week-days.
126      * 
127      * @JSFProperty 
128      */
129     public abstract String getWeekRowClass();
130 
131     /**
132      * CSS class to be used for the TD element containing a day days.
133      * 
134      * @JSFProperty 
135      */
136     public abstract String getDayCellClass();
137 
138     /**
139      * CSS class to be used for the TD element of the currently selected date.
140      * 
141      * @JSFProperty 
142      */
143     public abstract String getCurrentDayCellClass();
144 
145     /**
146      * Render the input-calendar left of the button, not right like normally done.
147      * 
148      * @JSFProperty
149      *   defaultValue = "false" 
150      */
151     public abstract boolean isPopupLeft();
152 
153     /**
154      * Render the input-calendar as a java-script popup on client.
155      * 
156      * @JSFProperty
157      *   defaultValue = false; 
158      */
159     public abstract boolean isRenderAsPopup();
160 
161     /**
162      * Automatically add the input-calendar scripts and css files to 
163      * the header - set that to false to provide the scripts yourself.
164      * 
165      * @JSFProperty
166      *   defaultValue = "true" 
167      */
168     public abstract boolean isAddResources();
169     
170     public abstract void setAddResources(boolean value);
171     
172     public void setAddResources(Boolean value)
173     {
174         this.setAddResources(value.booleanValue());
175     }
176 
177     /**
178      * Defines the string displayed on the button which leads to 
179      * the calendar-popup-window (... by default).
180      * 
181      * @JSFProperty 
182      */
183     public abstract String getPopupButtonString();
184 
185     /**
186      * Defines the css style for the button which leads to the 
187      * calendar-popup-window.
188      * 
189      * @JSFProperty 
190      */
191     public abstract String getPopupButtonStyle();
192 
193     /**
194      * Defines the css style class for the button which leads to the 
195      * calendar-popup-window.
196      * 
197      * @JSFProperty 
198      */
199     public abstract String getPopupButtonStyleClass();
200 
201     /**
202      * If true, renders a calendar icon instead of the button to pop up the calendar.
203      * 
204      * @JSFProperty
205      *   defaultValue = "false" 
206      */
207     public abstract boolean isRenderPopupButtonAsImage();
208 
209     /**
210      * Defines the date format used by the java-script popup on client.
211      * 
212      * @JSFProperty 
213      */
214     public abstract String getPopupDateFormat();
215     
216     /**
217      * Set the string for "Go To Current Month"
218      * 
219      * @JSFProperty 
220      */
221     public abstract String getPopupGotoString();
222 
223     /**
224      * Set the string for "Today is"
225      * 
226      * @JSFProperty 
227      */
228     public abstract String getPopupTodayString();
229 
230     /**
231      * Defines the date format used by the java-script popup 
232      * on client for the today-is string.
233      * 
234      * @JSFProperty 
235      */
236     public abstract String getPopupTodayDateFormat();
237 
238     /**
239      * Set the string for "Wk"
240      * 
241      * @JSFProperty 
242      */
243     public abstract String getPopupWeekString();
244 
245     /**
246      * Set the string for scrolling to the left.
247      * 
248      * @JSFProperty 
249      */
250     public abstract String getPopupScrollLeftMessage();
251 
252     /**
253      * Set the string for scrolling to the right.
254      * 
255      * @JSFProperty 
256      */
257     public abstract String getPopupScrollRightMessage();
258 
259     /**
260      * Set the string for "Click to select a month".
261      * 
262      * @JSFProperty 
263      */
264     public abstract String getPopupSelectMonthMessage();
265 
266     /**
267      * Set the string for "Click to select a year".
268      * 
269      * @JSFProperty 
270      */
271     public abstract String getPopupSelectYearMessage();
272 
273     /**
274      * Set the string for "Select [date] as date" (do not 
275      * replace [date], it will be replaced by the current date).
276      * 
277      * @JSFProperty 
278      */
279     public abstract String getPopupSelectDateMessage();
280 
281     /**
282      * Set the theme-prefix for this component.
283      * 
284      * @JSFProperty 
285      */
286     public abstract String getPopupTheme();
287 
288     /**
289      * Url to the image for this popupButton.
290      * 
291      * @JSFProperty 
292      */
293     public abstract String getPopupButtonImageUrl();
294 
295     /**
296      * The text that will be rendered in the field - helping the 
297      * user to find the right format to enter into the field.
298      * 
299      * @JSFProperty 
300      */
301     public abstract String getHelpText();
302 
303 
304     /**
305      * <p>
306      * May be "day", "week", "month" or "none":
307      * <ul>
308      * <li>day (default): allow the user to select a day.</li>
309      * <li>week: only allow the user to select a week.</li>
310      * <li>month: only allow the user to select a month.</li> 
311      * <li>none: equivalent to "readonly".</li> 
312      * </ul>
313      * </p>
314      * 
315      * @JSFProperty
316      *   defaultValue = "day" 
317      */
318     public abstract String getPopupSelectMode();
319 }