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.data;
23
24 import java.util.Arrays;
25 import java.util.Collection;
26 import java.util.Collections;
27 import java.util.List;
28 import java.util.Map;
29 import javax.faces.component.UIComponent;
30 import javax.faces.component.behavior.ClientBehavior;
31 import javax.faces.component.behavior.ClientBehaviorHolder;
32 import org.apache.myfaces.trinidad.bean.FacesBean;
33 import org.apache.myfaces.trinidad.bean.PropertyKey;
34 import org.apache.myfaces.trinidad.util.ComponentUtils;
35
36 /**
37 *
38 * The Trinidad Table is used to display tabular data. It also supports selection
39 * (both single and multiple), sorting, record navigation and
40 * detail-disclosure.
41 *
42 * <section name="Table Model">
43 * <p>
44 * The Trinidad Table component uses a model to access the data
45 * in the underlying list. The specific model class is
46 * <code>org.apache.myfaces.trinidad.model.CollectionModel</code>.
47 * You may also use other model instances, e.g.,
48 * <code>java.util.List</code> ,
49 * array, and <code>javax.faces.model.DataModel</code>.
50 * The Table will automatically convert the instance
51 * into a CollectionModel.
52 * </p>
53 * </section>
54 *
55 *
56 * <section name="Columns">
57 * <P>
58 * The immediate children of a Table component must all be
59 * <code><tr:column></code> components. Each visible Trinidad Column
60 * component creates a separate column in the Table.
61 * For more information see the documentation for
62 * <code><column></code>
63 * </P>
64 * </section>
65 *
66 *
67 * <section name="Range Navigation">
68 * <P>
69 * When the list being displayed by a Table is huge, you can enable the Table
70 * to break up the list into ranges and display a single range at a time.
71 * Range controls are provided on the Table to let the user scroll to the next range,
72 * or to go back to the previous range. If the total size of the list is known, a
73 * control to let the user jump directly to a particular part of the list is also
74 * provided on the Table. Use the Table attributes "rows" and "first" to control the
75 * range navigation feature.
76 * When the user changes the range, the Table fires a <code>RangeChangeEvent</code>.
77 * </P>
78 * </section>
79 *
80 *
81 * <section name="Displaying Details">
82 * <P>
83 * You can configure the Table to display or hide additional details of a
84 * particular row in response to a user gesture. When the details feature
85 * is enabled, a new column containing a toggle (per row) will render in
86 * the Table. When a toggle is activated, the details for that row are
87 * displayed. When a toggle is deactivated, the details for the row are
88 * hidden. The user can also display or hide the details for all rows at
89 * the same time (the controls for this feature are enabled by setting
90 * the "allDetailsEnabled" property to true.)
91 * </P>
92 * <P>
93 * To enable the details feature set the "detailStamp" facet on the
94 * Table. Place the components that are used to show the details (of a
95 * row), inside this facet. In the following example, the Person's age is
96 * displayed in the details section:
97 *
98 * <pre>
99 * <tr:table var="row">
100 * <f:facet name="detailStamp">
101 * <tr:outputText value="#{row.age}"/>
102 * </f:facet>
103 * </tr:table>
104 * </pre>
105 * </P>
106 * <P>
107 * When a detail row is shown or hidden the Table generates a
108 * <code>DisclosureEvent</code>. If all detail rows are shown or hidden
109 * the Table fires a <code>DisclosureAllEvent</code>.
110 * </P>
111 * </section>
112 *
113 * <section name="Selection">
114 * <p>
115 * The selection feature of a Table lets the user select one
116 * or more rows in the list. The user can then perform some operation on
117 * the selected rows by activating an appropriate ActionSource component (e.g.,
118 * by clicking on a commandButton).
119 * </p>
120 * <p>
121 * There are two types of selection - single and multiple. The type of
122 * selection is determined by the "rowSelection" attribute, which
123 * can be set to "single" or "multiple".
124 * </p>
125 * </section>
126 *
127 * <section name="Sorting">
128 * <p>
129 * The Table component supports sorting columns in ascending or descending
130 * order. A special 3D border on a column header lets the user know
131 * that the column is sortable. When the user clicks on a column header
132 * to sort a previously unsorted column, the Table sorts the
133 * column data in ascending order. Subsequent clicks on the same
134 * header sorts the data in the reverse order.
135 * </p>
136 * <p>
137 * There are three requirements to enable sorting: the underlying table
138 * model must support sorting, the "sortProperty" and "sortable"
139 * attributes must be set on the column to enable the sort capability for
140 * that column.
141 * </p>
142 * <P>
143 * To support sorting, the <code>CollectionModel</code> instance
144 * must implement the following methods:</P>
145 * <pre>
146 * public boolean isSortable(String propertyName)
147 * public void setSortCriteria(List criteria)
148 * public List getSortCriteria()
149 * </pre>
150 * <P>
151 * If the underlying model is not a <code>CollectionModel</code>, the
152 * Table automatically examines the actual data to determine which properties are
153 * sortable. Any column that has data that
154 * implements <code>java.lang.Comparable</code> is sortable. This
155 * automatic support cannot be nearly as efficient as coding sorting
156 * directly into a <code>CollectionModel</code> (for instance,
157 * by translating the sort into an "ORDER BY" SQL clause), but
158 * is sufficient for small data sets.
159 * </P>
160 * <P>
161 * To associate a column with a particular property-name to be used for
162 * sorting purposes, use the "sortProperty" attribute on the column.
163 * To enable the UI for sorting a particular column, set the
164 * "sortable" property to <code>true</code>.
165 * For more information see the documentation for
166 * <code><column></code>.
167 * </P>
168 * <P>
169 * In the following example,
170 * both columns are sortable. Sorting the first column sorts by the
171 * "firstname" property; sorting the second column sorts by the "lastname"
172 * property.
173 * </P>
174 * <pre>
175 * <tr:table value="...">
176 * <tr:column sortProperty="firstname" sortable="true">
177 * <f:facet name="header">
178 * <tr:outputText value="Firstname" />
179 * </f:facet>
180 * ...
181 * </tr:column>
182 * <tr:column sortProperty="lastname" sortable="true">
183 * <f:facet name="header">
184 * <tr:outputText value="Lastname" />
185 * </f:facet>
186 * ...
187 * </tr:column>
188 * </tr:table>
189 * </pre>
190 * </section>
191 *
192 * <section name="Banding">
193 * <P>
194 * Banding is a technique where groups of rows (or columns)
195 * are displayed with alternating background colors. This helps to
196 * differentiate between adjacent rows (or columns).
197 * </P>
198 * <P>
199 * The "banding" attribute on the Table controls the type of banding to
200 * use. The "bandingInterval" attribute controls
201 * the number of consecutive rows (or columns) that are colored the same.
202 * </P>
203 * <P>
204 * Note that the above banding attributes on the Table are ignored when
205 * the "bandingShade" attribute is used on the Column.
206 * </P>
207 * </section>
208 *
209 * <h4>Events:</h4>
210 * <table border="1" width="100%" cellpadding="3" summary="">
211 * <tr bgcolor="#CCCCFF" class="TableHeadingColor">
212 * <th align="left">Type</th>
213 * <th align="left">Phases</th>
214 * <th align="left">Description</th>
215 * </tr>
216 * <tr class="TableRowColor">
217 * <td valign="top"><code>org.apache.myfaces.trinidad.event.RowDisclosureEvent</code></td>
218 * <td valign="top" nowrap>Apply<br>Request<br>Values<br>Invoke<br>Application</td>
219 * <td valign="top">The expansion event is generated for a table when the detail facet of a row is expanded or collapsed. For tree or a treeTable, the expansion
220 event is generated when tree nodes are expanded or collapsed.</td>
221 * </tr>
222 * <tr class="TableRowColor">
223 * <td valign="top"><code>org.apache.myfaces.trinidad.event.SelectionEvent</code></td>
224 * <td valign="top" nowrap>Apply<br>Request<br>Values<br>Invoke<br>Application</td>
225 * <td valign="top">The selection event is delivered when the table selection
226 changes.</td>
227 * </tr>
228 * <tr class="TableRowColor">
229 * <td valign="top"><code>org.apache.myfaces.trinidad.event.RangeChangeEvent</code></td>
230 * <td valign="top" nowrap>Apply<br>Request<br>Values<br>Invoke<br>Application</td>
231 * <td valign="top">The range change event is delivered when the user
232 navigates.</td>
233 * </tr>
234 * <tr class="TableRowColor">
235 * <td valign="top"><code>org.apache.myfaces.trinidad.event.SortEvent</code></td>
236 * <td valign="top" nowrap>Apply<br>Request<br>Values<br>Invoke<br>Application</td>
237 * <td valign="top">The sort event is delivered when the table column sort
238 criteria is changed.</td>
239 * </tr>
240 * <tr class="TableRowColor">
241 * <td valign="top"><code>org.apache.myfaces.trinidad.event.AttributeChangeEvent</code></td>
242 * <td valign="top" nowrap>Invoke<br>Application<br>Apply<br>Request<br>Values</td>
243 * <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 event might include the width of a column that supported client-side resizing.</td>
244 * </tr>
245 * </table>
246 */
247 public class CoreTable extends org.apache.myfaces.trinidad.component.UIXTable
248 implements ClientBehaviorHolder
249 {
250 static public final String ROW_SELECTION_NONE = "none";
251 static public final String ROW_SELECTION_SINGLE = "single";
252 static public final String ROW_SELECTION_MULTIPLE = "multiple";
253 static public final FacesBean.Type TYPE = new FacesBean.Type(
254 org.apache.myfaces.trinidad.component.UIXTable.TYPE);
255 static public final PropertyKey HORIZONTAL_GRID_VISIBLE_KEY =
256 TYPE.registerKey("horizontalGridVisible", Boolean.class, Boolean.TRUE);
257 static public final PropertyKey VERTICAL_GRID_VISIBLE_KEY =
258 TYPE.registerKey("verticalGridVisible", Boolean.class, Boolean.TRUE);
259 static public final PropertyKey EMPTY_TEXT_KEY =
260 TYPE.registerKey("emptyText", String.class);
261 static public final PropertyKey COLUMN_BANDING_INTERVAL_KEY =
262 TYPE.registerKey("columnBandingInterval", Integer.class, Integer.valueOf(0));
263 static public final PropertyKey ROW_BANDING_INTERVAL_KEY =
264 TYPE.registerKey("rowBandingInterval", Integer.class, Integer.valueOf(0));
265 static public final PropertyKey ROW_SELECTION_KEY =
266 TYPE.registerKey("rowSelection", String.class, "none");
267 static public final PropertyKey AUTO_SUBMIT_KEY =
268 TYPE.registerKey("autoSubmit", Boolean.class, Boolean.FALSE);
269 static public final PropertyKey WIDTH_KEY =
270 TYPE.registerKey("width", String.class);
271 static public final PropertyKey SUMMARY_KEY =
272 TYPE.registerKey("summary", String.class);
273 static public final PropertyKey INLINE_STYLE_KEY =
274 TYPE.registerKey("inlineStyle", String.class);
275 static public final PropertyKey STYLE_CLASS_KEY =
276 TYPE.registerKey("styleClass", String.class);
277 static public final PropertyKey SHORT_DESC_KEY =
278 TYPE.registerKey("shortDesc", String.class);
279 static public final PropertyKey PARTIAL_TRIGGERS_KEY =
280 TYPE.registerKey("partialTriggers", String[].class, null, 0, PropertyKey.Mutable.RARELY);
281 static public final PropertyKey ONCLICK_KEY =
282 TYPE.registerKey("onclick", String.class);
283 static public final PropertyKey ONDBLCLICK_KEY =
284 TYPE.registerKey("ondblclick", String.class);
285 static public final PropertyKey ONMOUSEDOWN_KEY =
286 TYPE.registerKey("onmousedown", String.class);
287 static public final PropertyKey ONMOUSEUP_KEY =
288 TYPE.registerKey("onmouseup", String.class);
289 static public final PropertyKey ONMOUSEOVER_KEY =
290 TYPE.registerKey("onmouseover", String.class);
291 static public final PropertyKey ONMOUSEMOVE_KEY =
292 TYPE.registerKey("onmousemove", String.class);
293 static public final PropertyKey ONMOUSEOUT_KEY =
294 TYPE.registerKey("onmouseout", String.class);
295 static public final PropertyKey ONKEYPRESS_KEY =
296 TYPE.registerKey("onkeypress", String.class);
297 static public final PropertyKey ONKEYDOWN_KEY =
298 TYPE.registerKey("onkeydown", String.class);
299 static public final PropertyKey ONKEYUP_KEY =
300 TYPE.registerKey("onkeyup", String.class);
301 static public final PropertyKey ALL_DETAILS_ENABLED_KEY =
302 TYPE.registerKey("allDetailsEnabled", Boolean.class, Boolean.FALSE);
303 static public final String FOOTER_FACET = "footer";
304 static public final String HEADER_FACET = "header";
305 static public final String ACTIONS_FACET = "actions";
306
307 static public final String COMPONENT_FAMILY =
308 "org.apache.myfaces.trinidad.Table";
309 static public final String COMPONENT_TYPE =
310 "org.apache.myfaces.trinidad.CoreTable";
311 // Supported client events for client behaviors:
312 private final static Collection<String> _EVENT_NAMES = Collections.unmodifiableCollection(
313 Arrays.asList(
314 "click", "dblclick", "mousedown", "mouseup", "mouseover", "mousemove",
315 "mouseout", "keypress", "keydown", "keyup"
316 ));
317
318 /**
319 * Construct an instance of the CoreTable.
320 */
321 public CoreTable()
322 {
323 super("org.apache.myfaces.trinidad.Table");
324 }
325
326 /**
327 * the component used to render the table footer.
328 */
329 final public UIComponent getFooter()
330 {
331 return getFacet(FOOTER_FACET);
332 }
333
334 /**
335 * the component used to render the table footer.
336 */
337 @SuppressWarnings("unchecked")
338 final public void setFooter(UIComponent footerFacet)
339 {
340 getFacets().put(FOOTER_FACET, footerFacet);
341 }
342
343 /**
344 * the component used to render the table header.
345 */
346 final public UIComponent getHeader()
347 {
348 return getFacet(HEADER_FACET);
349 }
350
351 /**
352 * the component used to render the table header.
353 */
354 @SuppressWarnings("unchecked")
355 final public void setHeader(UIComponent headerFacet)
356 {
357 getFacets().put(HEADER_FACET, headerFacet);
358 }
359
360 /**
361 * content to be rendered inline with the navigation bar.
362 */
363 final public UIComponent getActions()
364 {
365 return getFacet(ACTIONS_FACET);
366 }
367
368 /**
369 * content to be rendered inline with the navigation bar.
370 */
371 @SuppressWarnings("unchecked")
372 final public void setActions(UIComponent actionsFacet)
373 {
374 getFacets().put(ACTIONS_FACET, actionsFacet);
375 }
376
377 /**
378 * Gets if the horizontal grid lines will be drawn.
379 *
380 * @return the new horizontalGridVisible value
381 */
382 final public boolean isHorizontalGridVisible()
383 {
384 return ComponentUtils.resolveBoolean(getProperty(HORIZONTAL_GRID_VISIBLE_KEY), true);
385 }
386
387 /**
388 * Sets if the horizontal grid lines will be drawn.
389 *
390 * @param horizontalGridVisible the new horizontalGridVisible value
391 */
392 final public void setHorizontalGridVisible(boolean horizontalGridVisible)
393 {
394 setProperty(HORIZONTAL_GRID_VISIBLE_KEY, horizontalGridVisible ? Boolean.TRUE : Boolean.FALSE);
395 }
396
397 /**
398 * Gets if the vertical grid lines will be drawn.
399 *
400 * @return the new verticalGridVisible value
401 */
402 final public boolean isVerticalGridVisible()
403 {
404 return ComponentUtils.resolveBoolean(getProperty(VERTICAL_GRID_VISIBLE_KEY), true);
405 }
406
407 /**
408 * Sets if the vertical grid lines will be drawn.
409 *
410 * @param verticalGridVisible the new verticalGridVisible value
411 */
412 final public void setVerticalGridVisible(boolean verticalGridVisible)
413 {
414 setProperty(VERTICAL_GRID_VISIBLE_KEY, verticalGridVisible ? Boolean.TRUE : Boolean.FALSE);
415 }
416
417 /**
418 * Gets text displayed when a table is empty.
419 *
420 * @return the new emptyText value
421 */
422 final public String getEmptyText()
423 {
424 return ComponentUtils.resolveString(getProperty(EMPTY_TEXT_KEY));
425 }
426
427 /**
428 * Sets text displayed when a table is empty.
429 *
430 * @param emptyText the new emptyText value
431 */
432 final public void setEmptyText(String emptyText)
433 {
434 setProperty(EMPTY_TEXT_KEY, (emptyText));
435 }
436
437 /**
438 * Gets the interval between which the column banding alternates. For example, a columnBandingInterval of 1 would display alternately banded columns.
439 *
440 * @return the new columnBandingInterval value
441 */
442 final public int getColumnBandingInterval()
443 {
444 return ComponentUtils.resolveInteger(getProperty(COLUMN_BANDING_INTERVAL_KEY), 0);
445 }
446
447 /**
448 * Sets the interval between which the column banding alternates. For example, a columnBandingInterval of 1 would display alternately banded columns.
449 *
450 * @param columnBandingInterval the new columnBandingInterval value
451 */
452 final public void setColumnBandingInterval(int columnBandingInterval)
453 {
454 setProperty(COLUMN_BANDING_INTERVAL_KEY, Integer.valueOf(columnBandingInterval));
455 }
456
457 /**
458 * Gets the interval between which the row banding alternates. For example, rowBandingInterval=1 would displayalternately banded rows in the Grid.
459 *
460 * @return the new rowBandingInterval value
461 */
462 final public int getRowBandingInterval()
463 {
464 return ComponentUtils.resolveInteger(getProperty(ROW_BANDING_INTERVAL_KEY), 0);
465 }
466
467 /**
468 * Sets the interval between which the row banding alternates. For example, rowBandingInterval=1 would displayalternately banded rows in the Grid.
469 *
470 * @param rowBandingInterval the new rowBandingInterval value
471 */
472 final public void setRowBandingInterval(int rowBandingInterval)
473 {
474 setProperty(ROW_BANDING_INTERVAL_KEY, Integer.valueOf(rowBandingInterval));
475 }
476
477 /**
478 * Gets whether rows in this table selectable. Valid values are "none", "single", "multiple"
479 *
480 * @return the new rowSelection value
481 */
482 final public String getRowSelection()
483 {
484 return ComponentUtils.resolveString(getProperty(ROW_SELECTION_KEY), "none");
485 }
486
487 /**
488 * Sets whether rows in this table selectable. Valid values are "none", "single", "multiple"
489 *
490 * @param rowSelection the new rowSelection value
491 */
492 final public void setRowSelection(String rowSelection)
493 {
494 setProperty(ROW_SELECTION_KEY, (rowSelection));
495 }
496
497 /**
498 * Gets If set to TRUE on a form element, the component will automatically submit
499 * the enclosing form when an appropriate action takes place (a click, text
500 * change, etc.). This only takes effect if rowSelection attribute enabled.
501 *
502 * @return the new autoSubmit value
503 */
504 final public boolean isAutoSubmit()
505 {
506 return ComponentUtils.resolveBoolean(getProperty(AUTO_SUBMIT_KEY), false);
507 }
508
509 /**
510 * Sets If set to TRUE on a form element, the component will automatically submit
511 * the enclosing form when an appropriate action takes place (a click, text
512 * change, etc.). This only takes effect if rowSelection attribute enabled.
513 *
514 * @param autoSubmit the new autoSubmit value
515 */
516 final public void setAutoSubmit(boolean autoSubmit)
517 {
518 setProperty(AUTO_SUBMIT_KEY, autoSubmit ? Boolean.TRUE : Boolean.FALSE);
519 }
520
521 /**
522 * Gets the width of the table. The value must either be a number of pixels or a percentage - it is not a CSS width.
523 *
524 * @return the new width value
525 */
526 final public String getWidth()
527 {
528 return ComponentUtils.resolveString(getProperty(WIDTH_KEY));
529 }
530
531 /**
532 * Sets the width of the table. The value must either be a number of pixels or a percentage - it is not a CSS width.
533 *
534 * @param width the new width value
535 */
536 final public void setWidth(String width)
537 {
538 setProperty(WIDTH_KEY, (width));
539 }
540
541 /**
542 * Gets the summary of this table's purpose and structure
543 * for user agents rendering to non-visual media.
544 *
545 * @return the new summary value
546 */
547 final public String getSummary()
548 {
549 return ComponentUtils.resolveString(getProperty(SUMMARY_KEY));
550 }
551
552 /**
553 * Sets the summary of this table's purpose and structure
554 * for user agents rendering to non-visual media.
555 *
556 * @param summary the new summary value
557 */
558 final public void setSummary(String summary)
559 {
560 setProperty(SUMMARY_KEY, (summary));
561 }
562
563 /**
564 * Gets the CSS styles to use for this component.
565 *
566 * @return the new inlineStyle value
567 */
568 final public String getInlineStyle()
569 {
570 return ComponentUtils.resolveString(getProperty(INLINE_STYLE_KEY));
571 }
572
573 /**
574 * Sets the CSS styles to use for this component.
575 *
576 * @param inlineStyle the new inlineStyle value
577 */
578 final public void setInlineStyle(String inlineStyle)
579 {
580 setProperty(INLINE_STYLE_KEY, (inlineStyle));
581 }
582
583 /**
584 * Gets a CSS style class to use for this component.
585 *
586 * @return the new styleClass value
587 */
588 final public String getStyleClass()
589 {
590 return ComponentUtils.resolveString(getProperty(STYLE_CLASS_KEY));
591 }
592
593 /**
594 * Sets a CSS style class to use for this component.
595 *
596 * @param styleClass the new styleClass value
597 */
598 final public void setStyleClass(String styleClass)
599 {
600 setProperty(STYLE_CLASS_KEY, (styleClass));
601 }
602
603 /**
604 * Gets The short description of the component. This text is commonly used by user agents to display tooltip help text.
605 *
606 * @return the new shortDesc value
607 */
608 final public String getShortDesc()
609 {
610 return ComponentUtils.resolveString(getProperty(SHORT_DESC_KEY));
611 }
612
613 /**
614 * Sets The short description of the component. This text is commonly used by user agents to display tooltip help text.
615 *
616 * @param shortDesc the new shortDesc value
617 */
618 final public void setShortDesc(String shortDesc)
619 {
620 setProperty(SHORT_DESC_KEY, (shortDesc));
621 }
622
623 /**
624 * Gets the IDs of the components that should trigger a partial update.
625 * <p>
626 * This component will listen on the trigger components. If one of the
627 * trigger components receives an event that will cause it to update
628 * in some way, this component will request to be updated too.</p>
629 * <p>
630 * Separate multiple triggers with a space. e.g., partialTriggers="cmp1 cmp2"
631 * </p>
632 * <p>
633 * Identifiers must account for NamingContainers. You can use a single colon to start the search from the root,
634 * or use multiple colons to move up through the NamingContainer. For example,
635 * "::" will pop out of this component's naming container (it pops out of itself if it is a naming container),
636 * ":::" will pop out of two naming containers, etc. The search for
637 * the partialTrigger begins from there. e.g., partialTriggers=":::commandButton1" the search begins for the
638 * component with id = commandButton1 after popping out of two naming containers relative to this component.
639 * To go into naming containers, you separate the naming containers with ':', e.g.,partialTriggers= "nc1:nc2:nc3:componentId".</p>
640 *
641 * @return the new partialTriggers value
642 */
643 final public String[] getPartialTriggers()
644 {
645 return (String[])getProperty(PARTIAL_TRIGGERS_KEY);
646 }
647
648 /**
649 * Sets the IDs of the components that should trigger a partial update.
650 * <p>
651 * This component will listen on the trigger components. If one of the
652 * trigger components receives an event that will cause it to update
653 * in some way, this component will request to be updated too.</p>
654 * <p>
655 * Separate multiple triggers with a space. e.g., partialTriggers="cmp1 cmp2"
656 * </p>
657 * <p>
658 * Identifiers must account for NamingContainers. You can use a single colon to start the search from the root,
659 * or use multiple colons to move up through the NamingContainer. For example,
660 * "::" will pop out of this component's naming container (it pops out of itself if it is a naming container),
661 * ":::" will pop out of two naming containers, etc. The search for
662 * the partialTrigger begins from there. e.g., partialTriggers=":::commandButton1" the search begins for the
663 * component with id = commandButton1 after popping out of two naming containers relative to this component.
664 * To go into naming containers, you separate the naming containers with ':', e.g.,partialTriggers= "nc1:nc2:nc3:componentId".</p>
665 *
666 * @param partialTriggers the new partialTriggers value
667 */
668 final public void setPartialTriggers(String[] partialTriggers)
669 {
670 setProperty(PARTIAL_TRIGGERS_KEY, (partialTriggers));
671 }
672
673 /**
674 * Gets an onclick Javascript handler.
675 *
676 * @return the new onclick value
677 */
678 final public String getOnclick()
679 {
680 return ComponentUtils.resolveString(getProperty(ONCLICK_KEY));
681 }
682
683 /**
684 * Sets an onclick Javascript handler.
685 *
686 * @param onclick the new onclick value
687 */
688 final public void setOnclick(String onclick)
689 {
690 setProperty(ONCLICK_KEY, (onclick));
691 }
692
693 /**
694 * Gets an ondblclick Javascript handler.
695 *
696 * @return the new ondblclick value
697 */
698 final public String getOndblclick()
699 {
700 return ComponentUtils.resolveString(getProperty(ONDBLCLICK_KEY));
701 }
702
703 /**
704 * Sets an ondblclick Javascript handler.
705 *
706 * @param ondblclick the new ondblclick value
707 */
708 final public void setOndblclick(String ondblclick)
709 {
710 setProperty(ONDBLCLICK_KEY, (ondblclick));
711 }
712
713 /**
714 * Gets an onmousedown Javascript handler.
715 *
716 * @return the new onmousedown value
717 */
718 final public String getOnmousedown()
719 {
720 return ComponentUtils.resolveString(getProperty(ONMOUSEDOWN_KEY));
721 }
722
723 /**
724 * Sets an onmousedown Javascript handler.
725 *
726 * @param onmousedown the new onmousedown value
727 */
728 final public void setOnmousedown(String onmousedown)
729 {
730 setProperty(ONMOUSEDOWN_KEY, (onmousedown));
731 }
732
733 /**
734 * Gets an onmouseup Javascript handler.
735 *
736 * @return the new onmouseup value
737 */
738 final public String getOnmouseup()
739 {
740 return ComponentUtils.resolveString(getProperty(ONMOUSEUP_KEY));
741 }
742
743 /**
744 * Sets an onmouseup Javascript handler.
745 *
746 * @param onmouseup the new onmouseup value
747 */
748 final public void setOnmouseup(String onmouseup)
749 {
750 setProperty(ONMOUSEUP_KEY, (onmouseup));
751 }
752
753 /**
754 * Gets an onmouseover Javascript handler.
755 *
756 * @return the new onmouseover value
757 */
758 final public String getOnmouseover()
759 {
760 return ComponentUtils.resolveString(getProperty(ONMOUSEOVER_KEY));
761 }
762
763 /**
764 * Sets an onmouseover Javascript handler.
765 *
766 * @param onmouseover the new onmouseover value
767 */
768 final public void setOnmouseover(String onmouseover)
769 {
770 setProperty(ONMOUSEOVER_KEY, (onmouseover));
771 }
772
773 /**
774 * Gets an onmousemove Javascript handler.
775 *
776 * @return the new onmousemove value
777 */
778 final public String getOnmousemove()
779 {
780 return ComponentUtils.resolveString(getProperty(ONMOUSEMOVE_KEY));
781 }
782
783 /**
784 * Sets an onmousemove Javascript handler.
785 *
786 * @param onmousemove the new onmousemove value
787 */
788 final public void setOnmousemove(String onmousemove)
789 {
790 setProperty(ONMOUSEMOVE_KEY, (onmousemove));
791 }
792
793 /**
794 * Gets an onmouseout Javascript handler.
795 *
796 * @return the new onmouseout value
797 */
798 final public String getOnmouseout()
799 {
800 return ComponentUtils.resolveString(getProperty(ONMOUSEOUT_KEY));
801 }
802
803 /**
804 * Sets an onmouseout Javascript handler.
805 *
806 * @param onmouseout the new onmouseout value
807 */
808 final public void setOnmouseout(String onmouseout)
809 {
810 setProperty(ONMOUSEOUT_KEY, (onmouseout));
811 }
812
813 /**
814 * Gets an onkeypress Javascript handler.
815 *
816 * @return the new onkeypress value
817 */
818 final public String getOnkeypress()
819 {
820 return ComponentUtils.resolveString(getProperty(ONKEYPRESS_KEY));
821 }
822
823 /**
824 * Sets an onkeypress Javascript handler.
825 *
826 * @param onkeypress the new onkeypress value
827 */
828 final public void setOnkeypress(String onkeypress)
829 {
830 setProperty(ONKEYPRESS_KEY, (onkeypress));
831 }
832
833 /**
834 * Gets an onkeydown Javascript handler.
835 *
836 * @return the new onkeydown value
837 */
838 final public String getOnkeydown()
839 {
840 return ComponentUtils.resolveString(getProperty(ONKEYDOWN_KEY));
841 }
842
843 /**
844 * Sets an onkeydown Javascript handler.
845 *
846 * @param onkeydown the new onkeydown value
847 */
848 final public void setOnkeydown(String onkeydown)
849 {
850 setProperty(ONKEYDOWN_KEY, (onkeydown));
851 }
852
853 /**
854 * Gets an onkeyup Javascript handler.
855 *
856 * @return the new onkeyup value
857 */
858 final public String getOnkeyup()
859 {
860 return ComponentUtils.resolveString(getProperty(ONKEYUP_KEY));
861 }
862
863 /**
864 * Sets an onkeyup Javascript handler.
865 *
866 * @param onkeyup the new onkeyup value
867 */
868 final public void setOnkeyup(String onkeyup)
869 {
870 setProperty(ONKEYUP_KEY, (onkeyup));
871 }
872
873 /**
874 * Gets whether or not to enable the show/hide all
875 * links above the table,
876 * which allow the user to show/hide all the detail rows.
877 * To enable the detail rows, a "detailStamp" facet must be set on
878 * this Table.
879 *
880 * @return the new allDetailsEnabled value
881 */
882 final public boolean isAllDetailsEnabled()
883 {
884 return ComponentUtils.resolveBoolean(getProperty(ALL_DETAILS_ENABLED_KEY), false);
885 }
886
887 /**
888 * Sets whether or not to enable the show/hide all
889 * links above the table,
890 * which allow the user to show/hide all the detail rows.
891 * To enable the detail rows, a "detailStamp" facet must be set on
892 * this Table.
893 *
894 * @param allDetailsEnabled the new allDetailsEnabled value
895 */
896 final public void setAllDetailsEnabled(boolean allDetailsEnabled)
897 {
898 setProperty(ALL_DETAILS_ENABLED_KEY, allDetailsEnabled ? Boolean.TRUE : Boolean.FALSE);
899 }
900
901 @Override
902 public String getDefaultEventName()
903 {
904 return "click";
905 }
906
907 @Override
908 public Collection<String> getEventNames()
909 {
910 return _EVENT_NAMES;
911 }
912
913 @Override
914 public Map<String, List<ClientBehavior>> getClientBehaviors()
915 {
916 return super.getClientBehaviors();
917 }
918
919 @Override
920 public void addClientBehavior(
921 String eventName,
922 ClientBehavior behavior)
923 {
924 super.addClientBehavior(eventName, behavior);
925 }
926
927 @Override
928 public String getFamily()
929 {
930 return COMPONENT_FAMILY;
931 }
932
933 @Override
934 protected FacesBean.Type getBeanType()
935 {
936 return TYPE;
937 }
938
939 /**
940 * Construct an instance of the CoreTable.
941 */
942 protected CoreTable(
943 String rendererType
944 )
945 {
946 super(rendererType);
947 }
948
949 static
950 {
951 TYPE.lockAndRegister("org.apache.myfaces.trinidad.Table","org.apache.myfaces.trinidad.Table");
952 }
953 }