001: /*
002: * $Id: HeadersToolbar.java 5279 2006-04-06 15:37:06 +0000 (Thu, 06 Apr 2006)
003: * ivaynberg $ $Revision: 462103 $ $Date: 2006-04-06 15:37:06 +0000 (Thu, 06 Apr
004: * 2006) $
005: *
006: * ==================================================================== Licensed
007: * under the Apache License, Version 2.0 (the "License"); you may not use this
008: * file except in compliance with the License. You may obtain a copy of the
009: * License at
010: *
011: * http://www.apache.org/licenses/LICENSE-2.0
012: *
013: * Unless required by applicable law or agreed to in writing, software
014: * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
015: * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
016: * License for the specific language governing permissions and limitations under
017: * the License.
018: */
019: package wicket.extensions.markup.html.repeater.data.table;
020:
021: import wicket.extensions.markup.html.repeater.RepeatingView;
022: import wicket.extensions.markup.html.repeater.data.sort.ISortStateLocator;
023: import wicket.extensions.markup.html.repeater.data.sort.OrderByBorder;
024: import wicket.markup.html.WebMarkupContainer;
025:
026: /**
027: * Toolbars that displays column headers. If the column is sortable a sortable
028: * header will be displayed.
029: *
030: * @see DefaultDataTable
031: *
032: * @author Igor Vaynberg (ivaynberg)
033: *
034: */
035: public class HeadersToolbar extends AbstractToolbar {
036: private static final long serialVersionUID = 1L;
037:
038: /**
039: * Constructor
040: *
041: * @param table
042: * data table this toolbar will be attached to
043: * @param stateLocator
044: * locator for the ISortState implementation used by sortable
045: * headers
046: */
047: public HeadersToolbar(final DataTable table,
048: final ISortStateLocator stateLocator) {
049: super (table);
050:
051: RepeatingView headers = new RepeatingView("headers");
052: add(headers);
053:
054: final IColumn[] columns = table.getColumns();
055: for (int i = 0; i < columns.length; i++) {
056: final IColumn column = columns[i];
057:
058: WebMarkupContainer item = new WebMarkupContainer(headers
059: .newChildId());
060: headers.add(item);
061:
062: WebMarkupContainer header = null;
063: if (column.isSortable()) {
064: header = newSortableHeader("header", column
065: .getSortProperty(), stateLocator);
066: } else {
067: header = new WebMarkupContainer("header");
068: }
069: item.add(header);
070: item.setRenderBodyOnly(true);
071: header.add(column.getHeader("label"));
072:
073: }
074: }
075:
076: /**
077: * Factory method for sortable header components. A sortable header
078: * component must have id of <code>headerId</code> and conform to markup
079: * specified in <code>HeadersToolbar.html</code>
080: *
081: * @param headerId
082: * header component id
083: * @param property
084: * propert this header represents
085: * @param locator
086: * sort state locator
087: * @return created header component
088: */
089: protected WebMarkupContainer newSortableHeader(String headerId,
090: String property, ISortStateLocator locator) {
091: return new OrderByBorder(headerId, property, locator) {
092:
093: private static final long serialVersionUID = 1L;
094:
095: protected void onSortChanged() {
096: getTable().setCurrentPage(0);
097: }
098: };
099:
100: }
101:
102: }
|