View Javadoc

1   // WARNING: This file was automatically generated. Do not edit it directly,
2   //          or you will lose your changes.
3   
4   /*
5    * Licensed to the Apache Software Foundation (ASF) under one
6    * or more contributor license agreements.  See the NOTICE file
7    * distributed with this work for additional information
8    * regarding copyright ownership.  The ASF licenses this file
9    * to you under the Apache License, Version 2.0 (the
10   * "License"); you may not use this file except in compliance
11   * with the License.  You may obtain a copy of the License at
12   *
13   *   http://www.apache.org/licenses/LICENSE-2.0
14   *
15   * Unless required by applicable law or agreed to in writing,
16   * software distributed under the License is distributed on an
17   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
18   * KIND, either express or implied.  See the License for the
19   * specific language governing permissions and limitations
20   * under the License.
21  */
22  package org.apache.myfaces.trinidad.component.core.input;
23  
24  import javax.faces.component.UIComponent;
25  import org.apache.myfaces.trinidad.bean.FacesBean;
26  import org.apache.myfaces.trinidad.bean.PropertyKey;
27  import org.apache.myfaces.trinidad.component.UIXSelectMany;
28  import org.apache.myfaces.trinidad.util.ComponentUtils;
29  
30  /**
31   *
32   * The selectManyShuttle component provides a mechanism for selecting
33   *    multiple values from a list of values by allowing the user to move
34   *    items between two lists.  The "value" attribute of the selectManyShuttle,
35   *    like any other selectMany component, must be a List or array of values
36   *    that correspond to a value of one of the contained SelectItems.  If a
37   *    value of one of the SelectItems is in the List or array, that item
38   *    will appear in the trailing list.  Looked at another way, you can
39   *    change a selectManyListbox directly into a selectManyShuttle;  instead
40   *    of the "value" driving which items are selected in the listbox, it
41   *    affects which items appear in the trailing list of the shuttle.
42   *          <html:p>
43   *   The selectManyShuttle does not allow for reordering;
44   *   the selectOrderShuttle component adds this functionality
45   *   to selectManyShuttle.  selectManyShuttle also does not include
46   *   automatic messaging support, unlike most other Trinidad messaging
47   *   components.
48   *          </html:p>
49   *           <section name="Attributes">
50   *             <html:p>
51   *               Each list in the shuttle has a header, the
52   *               text of which can be set as the &quot;leadingHeader&quot; attribute
53   *               and the &quot;trailingHeader&quot; attribute.
54   *             </html:p>
55   *             <html:p>
56   *               Each container in the shuttle can have an area to display item
57   *               descriptions below the list. To indicate whether or not
58   *               a container should have such an area set the attributes
59   *               <html:code>&quot;leadingDescShown&quot;</html:code> attribute
60   *               and the <html:code>&quot;trailingDescShown&quot;</html:code> attribute.
61   *             </html:p>
62   *             <html:p>
63   *               To control the display size(number of items) of the lists, the
64   *               size attribute has to be specified. The size specified must be
65   *               between 10 and 20 items. If the attribute is not set or has a
66   *               value less than 10, the size would have a default or minimum
67   *               value of 10. If the attribute value specified is more than 20 items,
68   *               the size would have the maximum value of 20.
69   *             </html:p>
70   *           </section>
71   * 
72   *           <section name="Shuttle Footers">
73   *             <html:p>
74   *               The shuttle allows the user to place components - typically,
75   *        buttons or icons - below each of the lists.  These
76   *               buttons or icons will take up only one row below the lists
77   *               (no wrapping), and should have a maximum height of 26 pixels
78   *               if the layout of the shuttle is to remain consistent.  The
79   *               buttons and icons should be placed within the
80   *               shuttle as the <html:code>leadingFooter</html:code>
81   *               or the <html:code>trailingFooter</html:code> facet,
82   *               depending on which list the buttons should go under.
83   *               Leave the appropriate facet empty if no footer is
84   *               required under a list.  These buttons and icons can be
85   *               used to perform operations upon the shuttle using a
86   *               ShuttleProxy as described below.
87   *             </html:p>
88   *           </section>
89   *           <section name="Shuttle Filter">
90   *             <html:p>
91   *               The shuttle allows the user to place a filter above the
92   *               list in the leading container. The filter is added as the
93   *        <html:code>filter</html:code> facet.  The filter can be used to
94   *        perform operations upon the shuttle using a ShuttleProxy as
95   *        described below.
96   *             </html:p>
97   *           </section>
98   * 
99   *           <section name="JavaScript proxies">
100  *             <html:p>
101  *               In some cases, developers will need to use JavaScript to
102  *               manipulate or use the contents of the lists.  This may be
103  *               required as actions for the buttons or icons in the
104  *               shuttle footers or outside the shuttle all together. Thus,
105  *               a set of Javascript utility methods are available that
106  *               operate on the lists.  These are located in the shuttle.js
107  *               Javascript library, which is automatically loaded if you
108  *               use the shuttle.
109  *             </html:p>
110  *             <html:p>
111  *               These methods can be accessed by creating a
112  *               <html:code>ShuttleProxy</html:code> instance based on the
113  *               shuttle client ID and form.
114  *               <html:pre>
115  *                 // create the proxy object
116  *                 var proxy2 = new ShuttleProxy(&quot;testShuttle2&quot;, &quot;testForm2&quot;);
117  *               </html:pre>
118  *             </html:p>
119  *             <html:p>
120  *               Once the proxy is created, you can use it to gain
121  *               information about the lists or to manipulate the lists in
122  *               the shuttle.  The proxy provides the following functions:
123  * 
124  *               <html:ul>
125  * 
126  *                 <html:li><html:code>move(fromLeadingList, allItems)</html:code> : moves items from
127  *                   one list to the other.  If <html:code>fromLeadingList</html:code> is true, the items
128  *                   move from the leading list to the trailing list.  If
129  *                   <html:code>fromLeadingList</html:code> is false, the items move the opposite
130  *                   direction.  If <html:code>allItems</html:code> is true, all the items are moved,
131  *                   otherwise only the selected items are moved.</html:li>
132  * 
133  *                 <html:li><html:code>reorderList(down, allTheWay, leadingList)</html:code> : reorders
134  *                   a list.  If <html:code>down</html:code> is true, the items move down in the list,
135  *                   otherwise they move up.  If <html:code>allTheWay</html:code> is true, the items move
136  *                   all the way to the top or bottom of the list depending on the value of
137  *                   <html:code>down</html:code>.  If <html:code>leadingList</html:code> is true, the leading list
138  *                   is reordered, otherwise the trailing list is reordered.</html:li>
139  * 
140  *                 <html:li><html:code>getItems(leadingList)</html:code> : returns an array of
141  *                   <html:code>option</html:code> objects that make up a list.  If <html:code>leadingList</html:code>
142  *                   is true, the array has the leading list's options, otherwise the items
143  *                   are from the trailing list.  Note that the array will not include the
144  *                   horizontal bar at the end of the lists.</html:li>
145  * 
146  *                 <html:li><html:code>getSelectedItems(leadingList)</html:code> : returns an array of
147  *                   <html:code>option</html:code> objects that are selected in a list.  If
148  *                   <html:code>leadingList</html:code> is true, the array has the leading list's options,
149  *                   otherwise the items are from the trailingList.  Note that the array will not
150  *                   include the horizontal bar at the end of the lists.</html:li>
151  * 
152  *                 <html:li><html:code>getItemCount(leadingList)</html:code> : returns the number of
153  *                   items in a list.  If <html:code>leadingList</html:code> is true, the number returned
154  *                   is the number of items in the leading list.  Otherwise, the number returned
155  *                   is the number of items in the trailing list.  Note that the horizontal bar
156  *                   at the end of the lists is not included in this count -- you only get the
157  *                   number of actual items.</html:li>
158  * 
159  *                 <html:li><html:code>getSelectedItemCount(leadingList)</html:code> : returns the number
160  *                   of selected items in a list.  If <html:code>leadingList</html:code> is true, the
161  *                   number returned is the number of selected items in the leading list.
162  *                   Otherwise, the number returned is the number of selected items in the
163  *                   trailing list.  Note that the horizontal bar at the end of the lists is not
164  *                   included in this count -- you only get the number of actual items.</html:li>
165  * 
166  *                 <html:li><html:code>addItem(leadingList, index, text, value, description)</html:code> : adds an item
167  *                   at the given index to a list.  The item is added to the leading list if
168  *                   <html:code>leadingList</html:code> is true, otherwise it is added to the trailing list.
169  *                   The <html:code>index</html:code> should be 0 based.  Thus, to insert an item at
170  *                   the end of a list, set <html:code>index</html:code> to
171  *                   <html:code>shuttleProxy.getItemCount(leadinglist)</html:code>.  The <html:code>text</html:code>
172  *                   parameter specifies the display text for the item, while the
173  *                   <html:code>value</html:code> parameter specifies the value that represents this item
174  *                   upon form submission. The <html:code>description</html:code> parameter specifies a
175  *                   description of the item. The <html:code>description</html:code> parameter can be omitted.</html:li>
176  * 
177  *                 <html:li><html:code>deleteItemByValue(leadingList, value)</html:code> :
178  *                   deletes an item
179  *                   from a list.  The item is deleted from the leading list if
180  *                   <html:code>leadingList</html:code> is true, otherwise it is deleted from the trailing
181  *                   list.  The item deleted is the first item with the value (not text) of
182  *                   <html:code>value</html:code>.</html:li>
183  * 
184  *                 <html:li><html:code>deleteSelectedItems(leadingList)</html:code> : deletes items
185  *                   from a list.  The items are deleted from the leading list if
186  *                   <html:code>leadingList</html:code> is true, otherwise they are deleted from the
187  *                   trailing list.  The items deleted are the items that are selected in the
188  *                   appropriate list.</html:li>
189  * 
190  *                 <html:li><html:code>reset()</html:code> : reset the shuttle
191  *                   to its initial state.</html:li>
192  * 
193  *               </html:ul>
194  * 
195  *             </html:p>
196  * 
197  *           </section>
198  *
199  * <h4>Events:</h4>
200  * <table border="1" width="100%" cellpadding="3" summary="">
201  * <tr bgcolor="#CCCCFF" class="TableHeadingColor">
202  * <th align="left">Type</th>
203  * <th align="left">Phases</th>
204  * <th align="left">Description</th>
205  * </tr>
206  * <tr class="TableRowColor">
207  * <td valign="top"><code>javax.faces.event.ValueChangeEvent</code></td>
208  * <td valign="top" nowrap>Process Validations<br>Apply Request Values</td>
209  * <td valign="top">The valueChange event is delivered when the value
210                        attribute is changed.</td>
211  * </tr>
212  * <tr class="TableRowColor">
213  * <td valign="top"><code>org.apache.myfaces.trinidad.event.AttributeChangeEvent</code></td>
214  * <td valign="top" nowrap>Invoke Application<br>Apply Request Values</td>
215  * <td valign="top">Event delivered to describe an attribute change.  Attribute change events are not delivered for any programmatic change to a property.  They are only delivered when a renderer changes a property without the application's specific request.  An example of an attribute change events might include the width of a column that supported client-side resizing.</td>
216  * </tr>
217  * </table>
218  */
219 public class CoreSelectManyShuttle extends UIXSelectMany
220 {
221   static public final FacesBean.Type TYPE = new FacesBean.Type(
222     UIXSelectMany.TYPE);
223   static public final PropertyKey VALUE_PASS_THRU_KEY =
224     TYPE.registerKey("valuePassThru", Boolean.class, Boolean.FALSE);
225   static public final PropertyKey READ_ONLY_KEY =
226     TYPE.registerKey("readOnly", Boolean.class, Boolean.FALSE);
227   static public final PropertyKey DISABLED_KEY =
228     TYPE.registerKey("disabled", Boolean.class, Boolean.FALSE);
229   static public final PropertyKey ONCHANGE_KEY =
230     TYPE.registerKey("onchange", String.class);
231   static public final PropertyKey INLINE_STYLE_KEY =
232     TYPE.registerKey("inlineStyle", String.class);
233   static public final PropertyKey STYLE_CLASS_KEY =
234     TYPE.registerKey("styleClass", String.class);
235   static public final PropertyKey SHORT_DESC_KEY =
236     TYPE.registerKey("shortDesc", String.class);
237   static public final PropertyKey PARTIAL_TRIGGERS_KEY =
238     TYPE.registerKey("partialTriggers", String[].class);
239   static public final PropertyKey ONCLICK_KEY =
240     TYPE.registerKey("onclick", String.class);
241   static public final PropertyKey ONDBLCLICK_KEY =
242     TYPE.registerKey("ondblclick", String.class);
243   static public final PropertyKey ONMOUSEDOWN_KEY =
244     TYPE.registerKey("onmousedown", String.class);
245   static public final PropertyKey ONMOUSEUP_KEY =
246     TYPE.registerKey("onmouseup", String.class);
247   static public final PropertyKey ONMOUSEOVER_KEY =
248     TYPE.registerKey("onmouseover", String.class);
249   static public final PropertyKey ONMOUSEMOVE_KEY =
250     TYPE.registerKey("onmousemove", String.class);
251   static public final PropertyKey ONMOUSEOUT_KEY =
252     TYPE.registerKey("onmouseout", String.class);
253   static public final PropertyKey ONKEYPRESS_KEY =
254     TYPE.registerKey("onkeypress", String.class);
255   static public final PropertyKey ONKEYDOWN_KEY =
256     TYPE.registerKey("onkeydown", String.class);
257   static public final PropertyKey ONKEYUP_KEY =
258     TYPE.registerKey("onkeyup", String.class);
259   static public final PropertyKey ONBLUR_KEY =
260     TYPE.registerKey("onblur", String.class);
261   static public final PropertyKey ONFOCUS_KEY =
262     TYPE.registerKey("onfocus", String.class);
263   static public final PropertyKey SIZE_KEY =
264     TYPE.registerKey("size", Integer.class);
265   static public final PropertyKey LEADING_HEADER_KEY =
266     TYPE.registerKey("leadingHeader", String.class);
267   static public final PropertyKey TRAILING_HEADER_KEY =
268     TYPE.registerKey("trailingHeader", String.class);
269   static public final PropertyKey LEADING_DESC_SHOWN_KEY =
270     TYPE.registerKey("leadingDescShown", Boolean.class, Boolean.FALSE);
271   static public final PropertyKey TRAILING_DESC_SHOWN_KEY =
272     TYPE.registerKey("trailingDescShown", Boolean.class, Boolean.FALSE);
273   static public final PropertyKey LABEL_KEY =
274     TYPE.registerKey("label", String.class);
275   static public final String FILTER_FACET = "filter";
276   static public final String LEADING_FOOTER_FACET = "leadingFooter";
277   static public final String TRAILING_FOOTER_FACET = "trailingFooter";
278 
279   static public final String COMPONENT_FAMILY =
280     "org.apache.myfaces.trinidad.SelectMany";
281   static public final String COMPONENT_TYPE =
282     "org.apache.myfaces.trinidad.CoreSelectManyShuttle";
283 
284   /**
285    * Construct an instance of the CoreSelectManyShuttle.
286    */
287   public CoreSelectManyShuttle()
288   {
289     super("org.apache.myfaces.trinidad.Shuttle");
290   }
291 
292   /**
293    * the filter above the leading list.
294    */
295   final public UIComponent getFilter()
296   {
297     return getFacet(FILTER_FACET);
298   }
299 
300   /**
301    * the filter above the leading list.
302    */
303   @SuppressWarnings("unchecked")
304   final public void setFilter(UIComponent filterFacet)
305   {
306     getFacets().put(FILTER_FACET, filterFacet);
307   }
308 
309   /**
310    * the footer of buttons/images under the leading list.
311    */
312   final public UIComponent getLeadingFooter()
313   {
314     return getFacet(LEADING_FOOTER_FACET);
315   }
316 
317   /**
318    * the footer of buttons/images under the leading list.
319    */
320   @SuppressWarnings("unchecked")
321   final public void setLeadingFooter(UIComponent leadingFooterFacet)
322   {
323     getFacets().put(LEADING_FOOTER_FACET, leadingFooterFacet);
324   }
325 
326   /**
327    * the footer of buttons/images under the trailing list.
328    */
329   final public UIComponent getTrailingFooter()
330   {
331     return getFacet(TRAILING_FOOTER_FACET);
332   }
333 
334   /**
335    * the footer of buttons/images under the trailing list.
336    */
337   @SuppressWarnings("unchecked")
338   final public void setTrailingFooter(UIComponent trailingFooterFacet)
339   {
340     getFacets().put(TRAILING_FOOTER_FACET, trailingFooterFacet);
341   }
342 
343   /**
344    * Gets whether or not the values are passed through to
345    *         the client. When valuePassThru is false
346    *         the value and the options' values
347    *         are converted to indexes before being sent to the client.
348    *         Therefore, when valuePassThru is false,
349    *         there is no need to write your own converter when you are using custom Objects
350    *         as your values and/or options.
351    *         If you need to know the actual values on the client-side, then you can set
352    *         valuePassThru to true. This will pass the values through to the client,
353    *         using your custom converter if it is available; a custom converter is
354    *         needed if you are using custom objects. The default is false.
355    *
356    * @return  the new valuePassThru value
357    */
358   final public boolean isValuePassThru()
359   {
360     return ComponentUtils.resolveBoolean(getProperty(VALUE_PASS_THRU_KEY), false);
361   }
362 
363   /**
364    * Sets whether or not the values are passed through to
365    *         the client. When valuePassThru is false
366    *         the value and the options' values
367    *         are converted to indexes before being sent to the client.
368    *         Therefore, when valuePassThru is false,
369    *         there is no need to write your own converter when you are using custom Objects
370    *         as your values and/or options.
371    *         If you need to know the actual values on the client-side, then you can set
372    *         valuePassThru to true. This will pass the values through to the client,
373    *         using your custom converter if it is available; a custom converter is
374    *         needed if you are using custom objects. The default is false.
375    * 
376    * @param valuePassThru  the new valuePassThru value
377    */
378   final public void setValuePassThru(boolean valuePassThru)
379   {
380     setProperty(VALUE_PASS_THRU_KEY, valuePassThru ? Boolean.TRUE : Boolean.FALSE);
381   }
382 
383   /**
384    * Gets whether the element is read-only.
385    *
386    * @return  the new readOnly value
387    */
388   final public boolean isReadOnly()
389   {
390     return ComponentUtils.resolveBoolean(getProperty(READ_ONLY_KEY), false);
391   }
392 
393   /**
394    * Sets whether the element is read-only.
395    * 
396    * @param readOnly  the new readOnly value
397    */
398   final public void setReadOnly(boolean readOnly)
399   {
400     setProperty(READ_ONLY_KEY, readOnly ? Boolean.TRUE : Boolean.FALSE);
401   }
402 
403   /**
404    * Gets whether the element is disabled.
405    *
406    * @return  the new disabled value
407    */
408   final public boolean isDisabled()
409   {
410     return ComponentUtils.resolveBoolean(getProperty(DISABLED_KEY), false);
411   }
412 
413   /**
414    * Sets whether the element is disabled.
415    * 
416    * @param disabled  the new disabled value
417    */
418   final public void setDisabled(boolean disabled)
419   {
420     setProperty(DISABLED_KEY, disabled ? Boolean.TRUE : Boolean.FALSE);
421   }
422 
423   /**
424    * Gets event handler for when the value is changed.
425    *
426    * @return  the new onchange value
427    */
428   final public String getOnchange()
429   {
430     return ComponentUtils.resolveString(getProperty(ONCHANGE_KEY));
431   }
432 
433   /**
434    * Sets event handler for when the value is changed.
435    * 
436    * @param onchange  the new onchange value
437    */
438   final public void setOnchange(String onchange)
439   {
440     setProperty(ONCHANGE_KEY, (onchange));
441   }
442 
443   /**
444    * Gets the CSS styles to use for this component.
445    *
446    * @return  the new inlineStyle value
447    */
448   final public String getInlineStyle()
449   {
450     return ComponentUtils.resolveString(getProperty(INLINE_STYLE_KEY));
451   }
452 
453   /**
454    * Sets the CSS styles to use for this component.
455    * 
456    * @param inlineStyle  the new inlineStyle value
457    */
458   final public void setInlineStyle(String inlineStyle)
459   {
460     setProperty(INLINE_STYLE_KEY, (inlineStyle));
461   }
462 
463   /**
464    * Gets a CSS style class to use for this component.
465    *
466    * @return  the new styleClass value
467    */
468   final public String getStyleClass()
469   {
470     return ComponentUtils.resolveString(getProperty(STYLE_CLASS_KEY));
471   }
472 
473   /**
474    * Sets a CSS style class to use for this component.
475    * 
476    * @param styleClass  the new styleClass value
477    */
478   final public void setStyleClass(String styleClass)
479   {
480     setProperty(STYLE_CLASS_KEY, (styleClass));
481   }
482 
483   /**
484    * Gets The short description of the component. This text is commonly used by user agents to display tooltip help text.
485    *
486    * @return  the new shortDesc value
487    */
488   final public String getShortDesc()
489   {
490     return ComponentUtils.resolveString(getProperty(SHORT_DESC_KEY));
491   }
492 
493   /**
494    * Sets The short description of the component. This text is commonly used by user agents to display tooltip help text.
495    * 
496    * @param shortDesc  the new shortDesc value
497    */
498   final public void setShortDesc(String shortDesc)
499   {
500     setProperty(SHORT_DESC_KEY, (shortDesc));
501   }
502 
503   /**
504    * Gets the IDs of the components that should trigger a partial update.
505    *         <p>
506    *         This component will listen on the trigger components. If one of the
507    *         trigger components receives an event that will cause it to update
508    *         in some way, this component will request to be updated too.</p>
509    *         <p>
510    *         Separate multiple triggers with a space. e.g., partialTriggers="cmp1 cmp2"
511    *         </p>
512    *         <p>
513    *         Identifiers must account for NamingContainers.  You can use a single colon to start the search from the root,
514    *         or use multiple colons to move up through the NamingContainer. For example,
515    *         "::" will pop out of this component's naming container (it pops out of itself if it is a naming container), 
516    *         ":::" will pop out of two naming containers, etc. The search for
517    *         the partialTrigger begins from there. e.g., partialTriggers=":::commandButton1" the search begins for the 
518    *         component with id = commandButton1 after popping out of two naming containers relative to this component.
519    *         To go into naming containers, you separate the naming containers with ':', e.g.,partialTriggers= "nc1:nc2:nc3:componentId".</p>
520    *
521    * @return  the new partialTriggers value
522    */
523   final public String[] getPartialTriggers()
524   {
525     return (String[])getProperty(PARTIAL_TRIGGERS_KEY);
526   }
527 
528   /**
529    * Sets the IDs of the components that should trigger a partial update.
530    *         <p>
531    *         This component will listen on the trigger components. If one of the
532    *         trigger components receives an event that will cause it to update
533    *         in some way, this component will request to be updated too.</p>
534    *         <p>
535    *         Separate multiple triggers with a space. e.g., partialTriggers="cmp1 cmp2"
536    *         </p>
537    *         <p>
538    *         Identifiers must account for NamingContainers.  You can use a single colon to start the search from the root,
539    *         or use multiple colons to move up through the NamingContainer. For example,
540    *         "::" will pop out of this component's naming container (it pops out of itself if it is a naming container), 
541    *         ":::" will pop out of two naming containers, etc. The search for
542    *         the partialTrigger begins from there. e.g., partialTriggers=":::commandButton1" the search begins for the 
543    *         component with id = commandButton1 after popping out of two naming containers relative to this component.
544    *         To go into naming containers, you separate the naming containers with ':', e.g.,partialTriggers= "nc1:nc2:nc3:componentId".</p>
545    * 
546    * @param partialTriggers  the new partialTriggers value
547    */
548   final public void setPartialTriggers(String[] partialTriggers)
549   {
550     setProperty(PARTIAL_TRIGGERS_KEY, (partialTriggers));
551   }
552 
553   /**
554    * Gets an onclick Javascript handler.
555    *
556    * @return  the new onclick value
557    */
558   final public String getOnclick()
559   {
560     return ComponentUtils.resolveString(getProperty(ONCLICK_KEY));
561   }
562 
563   /**
564    * Sets an onclick Javascript handler.
565    * 
566    * @param onclick  the new onclick value
567    */
568   final public void setOnclick(String onclick)
569   {
570     setProperty(ONCLICK_KEY, (onclick));
571   }
572 
573   /**
574    * Gets an ondblclick Javascript handler.
575    *
576    * @return  the new ondblclick value
577    */
578   final public String getOndblclick()
579   {
580     return ComponentUtils.resolveString(getProperty(ONDBLCLICK_KEY));
581   }
582 
583   /**
584    * Sets an ondblclick Javascript handler.
585    * 
586    * @param ondblclick  the new ondblclick value
587    */
588   final public void setOndblclick(String ondblclick)
589   {
590     setProperty(ONDBLCLICK_KEY, (ondblclick));
591   }
592 
593   /**
594    * Gets an onmousedown Javascript handler.
595    *
596    * @return  the new onmousedown value
597    */
598   final public String getOnmousedown()
599   {
600     return ComponentUtils.resolveString(getProperty(ONMOUSEDOWN_KEY));
601   }
602 
603   /**
604    * Sets an onmousedown Javascript handler.
605    * 
606    * @param onmousedown  the new onmousedown value
607    */
608   final public void setOnmousedown(String onmousedown)
609   {
610     setProperty(ONMOUSEDOWN_KEY, (onmousedown));
611   }
612 
613   /**
614    * Gets an onmouseup Javascript handler.
615    *
616    * @return  the new onmouseup value
617    */
618   final public String getOnmouseup()
619   {
620     return ComponentUtils.resolveString(getProperty(ONMOUSEUP_KEY));
621   }
622 
623   /**
624    * Sets an onmouseup Javascript handler.
625    * 
626    * @param onmouseup  the new onmouseup value
627    */
628   final public void setOnmouseup(String onmouseup)
629   {
630     setProperty(ONMOUSEUP_KEY, (onmouseup));
631   }
632 
633   /**
634    * Gets an onmouseover Javascript handler.
635    *
636    * @return  the new onmouseover value
637    */
638   final public String getOnmouseover()
639   {
640     return ComponentUtils.resolveString(getProperty(ONMOUSEOVER_KEY));
641   }
642 
643   /**
644    * Sets an onmouseover Javascript handler.
645    * 
646    * @param onmouseover  the new onmouseover value
647    */
648   final public void setOnmouseover(String onmouseover)
649   {
650     setProperty(ONMOUSEOVER_KEY, (onmouseover));
651   }
652 
653   /**
654    * Gets an onmousemove Javascript handler.
655    *
656    * @return  the new onmousemove value
657    */
658   final public String getOnmousemove()
659   {
660     return ComponentUtils.resolveString(getProperty(ONMOUSEMOVE_KEY));
661   }
662 
663   /**
664    * Sets an onmousemove Javascript handler.
665    * 
666    * @param onmousemove  the new onmousemove value
667    */
668   final public void setOnmousemove(String onmousemove)
669   {
670     setProperty(ONMOUSEMOVE_KEY, (onmousemove));
671   }
672 
673   /**
674    * Gets an onmouseout Javascript handler.
675    *
676    * @return  the new onmouseout value
677    */
678   final public String getOnmouseout()
679   {
680     return ComponentUtils.resolveString(getProperty(ONMOUSEOUT_KEY));
681   }
682 
683   /**
684    * Sets an onmouseout Javascript handler.
685    * 
686    * @param onmouseout  the new onmouseout value
687    */
688   final public void setOnmouseout(String onmouseout)
689   {
690     setProperty(ONMOUSEOUT_KEY, (onmouseout));
691   }
692 
693   /**
694    * Gets an onkeypress Javascript handler.
695    *
696    * @return  the new onkeypress value
697    */
698   final public String getOnkeypress()
699   {
700     return ComponentUtils.resolveString(getProperty(ONKEYPRESS_KEY));
701   }
702 
703   /**
704    * Sets an onkeypress Javascript handler.
705    * 
706    * @param onkeypress  the new onkeypress value
707    */
708   final public void setOnkeypress(String onkeypress)
709   {
710     setProperty(ONKEYPRESS_KEY, (onkeypress));
711   }
712 
713   /**
714    * Gets an onkeydown Javascript handler.
715    *
716    * @return  the new onkeydown value
717    */
718   final public String getOnkeydown()
719   {
720     return ComponentUtils.resolveString(getProperty(ONKEYDOWN_KEY));
721   }
722 
723   /**
724    * Sets an onkeydown Javascript handler.
725    * 
726    * @param onkeydown  the new onkeydown value
727    */
728   final public void setOnkeydown(String onkeydown)
729   {
730     setProperty(ONKEYDOWN_KEY, (onkeydown));
731   }
732 
733   /**
734    * Gets an onkeyup Javascript handler.
735    *
736    * @return  the new onkeyup value
737    */
738   final public String getOnkeyup()
739   {
740     return ComponentUtils.resolveString(getProperty(ONKEYUP_KEY));
741   }
742 
743   /**
744    * Sets an onkeyup Javascript handler.
745    * 
746    * @param onkeyup  the new onkeyup value
747    */
748   final public void setOnkeyup(String onkeyup)
749   {
750     setProperty(ONKEYUP_KEY, (onkeyup));
751   }
752 
753   /**
754    * Gets the event handler for the component losing the focus.
755    *
756    * @return  the new onblur value
757    */
758   final public String getOnblur()
759   {
760     return ComponentUtils.resolveString(getProperty(ONBLUR_KEY));
761   }
762 
763   /**
764    * Sets the event handler for the component losing the focus.
765    * 
766    * @param onblur  the new onblur value
767    */
768   final public void setOnblur(String onblur)
769   {
770     setProperty(ONBLUR_KEY, (onblur));
771   }
772 
773   /**
774    * Gets the event handler for the component gaining the focus.
775    *
776    * @return  the new onfocus value
777    */
778   final public String getOnfocus()
779   {
780     return ComponentUtils.resolveString(getProperty(ONFOCUS_KEY));
781   }
782 
783   /**
784    * Sets the event handler for the component gaining the focus.
785    * 
786    * @param onfocus  the new onfocus value
787    */
788   final public void setOnfocus(String onfocus)
789   {
790     setProperty(ONFOCUS_KEY, (onfocus));
791   }
792 
793   /**
794    * Gets the display size(number of items) of the lists. The size
795    *               specified must be between 10 and 20 items. If the attribute is not
796    *               set or has a value less than 10, the size would have a default or
797    *               minimum value of 10. If the attribute value specified is more than
798    *               20 items, the size would have the maximum value of 20.
799    *
800    * @return  the new size value
801    */
802   final public int getSize()
803   {
804     return ComponentUtils.resolveInteger(getProperty(SIZE_KEY));
805   }
806 
807   /**
808    * Sets the display size(number of items) of the lists. The size
809    *               specified must be between 10 and 20 items. If the attribute is not
810    *               set or has a value less than 10, the size would have a default or
811    *               minimum value of 10. If the attribute value specified is more than
812    *               20 items, the size would have the maximum value of 20.
813    * 
814    * @param size  the new size value
815    */
816   final public void setSize(int size)
817   {
818     setProperty(SIZE_KEY, Integer.valueOf(size));
819   }
820 
821   /**
822    * Gets the header of the leading list of the shuttle.
823    *
824    * @return  the new leadingHeader value
825    */
826   final public String getLeadingHeader()
827   {
828     return ComponentUtils.resolveString(getProperty(LEADING_HEADER_KEY));
829   }
830 
831   /**
832    * Sets the header of the leading list of the shuttle.
833    * 
834    * @param leadingHeader  the new leadingHeader value
835    */
836   final public void setLeadingHeader(String leadingHeader)
837   {
838     setProperty(LEADING_HEADER_KEY, (leadingHeader));
839   }
840 
841   /**
842    * Gets the header of the trailing list of the shuttle.
843    *
844    * @return  the new trailingHeader value
845    */
846   final public String getTrailingHeader()
847   {
848     return ComponentUtils.resolveString(getProperty(TRAILING_HEADER_KEY));
849   }
850 
851   /**
852    * Sets the header of the trailing list of the shuttle.
853    * 
854    * @param trailingHeader  the new trailingHeader value
855    */
856   final public void setTrailingHeader(String trailingHeader)
857   {
858     setProperty(TRAILING_HEADER_KEY, (trailingHeader));
859   }
860 
861   /**
862    * Gets whether or not the leading list has an area to display descriptions.
863    *
864    * @return  the new leadingDescShown value
865    */
866   final public boolean isLeadingDescShown()
867   {
868     return ComponentUtils.resolveBoolean(getProperty(LEADING_DESC_SHOWN_KEY), false);
869   }
870 
871   /**
872    * Sets whether or not the leading list has an area to display descriptions.
873    * 
874    * @param leadingDescShown  the new leadingDescShown value
875    */
876   final public void setLeadingDescShown(boolean leadingDescShown)
877   {
878     setProperty(LEADING_DESC_SHOWN_KEY, leadingDescShown ? Boolean.TRUE : Boolean.FALSE);
879   }
880 
881   /**
882    * Gets whether or not the trailing list has an area to display descriptions.
883    *
884    * @return  the new trailingDescShown value
885    */
886   final public boolean isTrailingDescShown()
887   {
888     return ComponentUtils.resolveBoolean(getProperty(TRAILING_DESC_SHOWN_KEY), false);
889   }
890 
891   /**
892    * Sets whether or not the trailing list has an area to display descriptions.
893    * 
894    * @param trailingDescShown  the new trailingDescShown value
895    */
896   final public void setTrailingDescShown(boolean trailingDescShown)
897   {
898     setProperty(TRAILING_DESC_SHOWN_KEY, trailingDescShown ? Boolean.TRUE : Boolean.FALSE);
899   }
900 
901   /**
902    * Gets the label for the shuttle that is used to identify the component only when displaying error messages. The label specified does not otherwise appear on the page.
903    *
904    * @return  the new label value
905    */
906   final public String getLabel()
907   {
908     return ComponentUtils.resolveString(getProperty(LABEL_KEY));
909   }
910 
911   /**
912    * Sets the label for the shuttle that is used to identify the component only when displaying error messages. The label specified does not otherwise appear on the page.
913    * 
914    * @param label  the new label value
915    */
916   final public void setLabel(String label)
917   {
918     setProperty(LABEL_KEY, (label));
919   }
920 
921   @Override
922   public String getFamily()
923   {
924     return COMPONENT_FAMILY;
925   }
926 
927   @Override
928   protected FacesBean.Type getBeanType()
929   {
930     return TYPE;
931   }
932 
933   /**
934    * Construct an instance of the CoreSelectManyShuttle.
935    */
936   protected CoreSelectManyShuttle(
937     String rendererType
938     )
939   {
940     super(rendererType);
941   }
942 
943   static
944   {
945     TYPE.lockAndRegister("org.apache.myfaces.trinidad.SelectMany","org.apache.myfaces.trinidad.Shuttle");
946   }
947 }