Updated Branches: refs/heads/master bf1340b71 -> 31c719812
WICKET-4596 DataTable toolbars support for dynamic columns Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/31c71981 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/31c71981 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/31c71981 Branch: refs/heads/master Commit: 31c71981248da2be9b230a00f414bf394667794e Parents: bf1340b Author: Sven Meier <[email protected]> Authored: Thu Jun 14 20:57:25 2012 +0200 Committer: Sven Meier <[email protected]> Committed: Thu Jun 14 20:57:25 2012 +0200 ---------------------------------------------------------------------- .../repeater/data/table/AjaxNavigationToolbar.html | 25 ----- .../html/repeater/data/table/HeadersToolbar.java | 84 +++++++++------ .../repeater/data/table/NavigationToolbar.html | 4 +- .../repeater/data/table/NavigationToolbar.java | 15 +++- .../html/repeater/data/table/NoRecordsToolbar.java | 12 ++- .../repeater/data/table/filter/FilterToolbar.java | 81 +++++++++------ 6 files changed, 127 insertions(+), 94 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/31c71981/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxNavigationToolbar.html ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxNavigationToolbar.html b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxNavigationToolbar.html deleted file mode 100644 index ff21d73..0000000 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/repeater/data/table/AjaxNavigationToolbar.html +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> -<wicket:panel xmlns:wicket="http://wicket.apache.org"> - <tr class="navigation"> - <td wicket:id="span"> - <div style="float: left;" class="navigatorLabel"><span wicket:id="navigatorLabel">[navigator-label]</span></div> - <div style="text-align: right;" class="navigator"><span wicket:id="navigator">[navigator]</span></div> - </td> - </tr> -</wicket:panel> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/wicket/blob/31c71981/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java index 118df15..54aa820 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/HeadersToolbar.java @@ -16,22 +16,26 @@ */ package org.apache.wicket.extensions.markup.html.repeater.data.table; +import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortStateLocator; import org.apache.wicket.extensions.markup.html.repeater.data.sort.OrderByBorder; import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable.CssAttributeBehavior; import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.list.AbstractItem; -import org.apache.wicket.markup.repeater.RepeatingView; +import org.apache.wicket.markup.repeater.Item; +import org.apache.wicket.markup.repeater.RefreshingView; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; /** * Toolbars that displays column headers. If the column is sortable a sortable header will be * displayed. - * + * * @param <S> - * the type of the sorting parameter + * the type of the sorting parameter * @see DefaultDataTable * * @author Igor Vaynberg (ivaynberg) @@ -55,45 +59,61 @@ public class HeadersToolbar<S> extends AbstractToolbar { super(table); - RepeatingView headers = new RepeatingView("headers"); - add(headers); - - final List<IColumn<T, S>> columns = table.getColumns(); - for (final IColumn<T, S> column : columns) + RefreshingView<IColumn<T, S>> headers = new RefreshingView<IColumn<T, S>>("headers") { - AbstractItem item = new AbstractItem(headers.newChildId()); - headers.add(item); + private static final long serialVersionUID = 1L; - WebMarkupContainer header = null; - if (column.isSortable()) - { - header = newSortableHeader("header", column.getSortProperty(), stateLocator); - } - else + @Override + protected Iterator<IModel<IColumn<T, S>>> getItemModels() { - header = new WebMarkupContainer("header"); + List<IModel<IColumn<T, S>>> columnsModels = new LinkedList<IModel<IColumn<T, S>>>(); + + for (IColumn<T, S> column : table.getColumns()) + { + columnsModels.add(Model.of(column)); + } + + return columnsModels.iterator(); } - if (column instanceof IStyledColumn) + @Override + protected void populateItem(Item<IColumn<T, S>> item) { - CssAttributeBehavior cssAttributeBehavior = new DataTable.CssAttributeBehavior() + final IColumn<T, S> column = item.getModelObject(); + + WebMarkupContainer header = null; + + if (column.isSortable()) { - private static final long serialVersionUID = 1L; + header = newSortableHeader("header", column.getSortProperty(), stateLocator); + } + else + { + header = new WebMarkupContainer("header"); + } - @Override - protected String getCssClass() + if (column instanceof IStyledColumn) + { + CssAttributeBehavior cssAttributeBehavior = new DataTable.CssAttributeBehavior() { - return ((IStyledColumn<?, S>)column).getCssClass(); - } - }; + private static final long serialVersionUID = 1L; - header.add(cssAttributeBehavior); - } + @Override + protected String getCssClass() + { + return ((IStyledColumn<?, S>)column).getCssClass(); + } + }; + + header.add(cssAttributeBehavior); + } - item.add(header); - item.setRenderBodyOnly(true); - header.add(column.getHeader("label")); - } + item.add(header); + item.setRenderBodyOnly(true); + header.add(column.getHeader("label")); + } + }; + add(headers); } /** http://git-wip-us.apache.org/repos/asf/wicket/blob/31c71981/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.html ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.html b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.html index 07b9cc8..8fe0db7 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.html +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.html @@ -18,8 +18,8 @@ <wicket:panel xmlns:wicket="http://wicket.apache.org"> <tr class="navigation"> <td wicket:id="span"> - <div class="navigatorLabel"><wicket:container wicket:id="navigatorLabel">[navigator-label]</wicket:container></div> - <div class="navigator"><wicket:container wicket:id="navigator">[navigator]</wicket:container></div> + <div class="navigatorLabel"><span wicket:id="navigatorLabel">[navigator-label]</span></div> + <div class="navigator"><span wicket:id="navigator">[navigator]</span></div> </td> </tr> </wicket:panel> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/wicket/blob/31c71981/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java index 6b0101d..58b7801 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigationToolbar.java @@ -20,6 +20,7 @@ import org.apache.wicket.AttributeModifier; import org.apache.wicket.markup.html.WebComponent; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.navigation.paging.PagingNavigator; +import org.apache.wicket.model.AbstractReadOnlyModel; /** * Toolbar that displays links used to navigate the pages of the datatable as well as a message @@ -43,7 +44,16 @@ public class NavigationToolbar extends AbstractToolbar WebMarkupContainer span = new WebMarkupContainer("span"); add(span); - span.add(AttributeModifier.replace("colspan", String.valueOf(table.getColumns().size()))); + span.add(AttributeModifier.replace("colspan", new AbstractReadOnlyModel<String>() + { + private static final long serialVersionUID = 1L; + + @Override + public String getObject() + { + return String.valueOf(table.getColumns().size()); + } + })); span.add(newPagingNavigator("navigator", table)); span.add(newNavigatorLabel("navigatorLabel", table)); @@ -58,7 +68,8 @@ public class NavigationToolbar extends AbstractToolbar * dataview used by datatable * @return paging navigator that will be used to navigate the data table */ - protected PagingNavigator newPagingNavigator(final String navigatorId, final DataTable<?, ?> table) + protected PagingNavigator newPagingNavigator(final String navigatorId, + final DataTable<?, ?> table) { return new PagingNavigator(navigatorId, table); } http://git-wip-us.apache.org/repos/asf/wicket/blob/31c71981/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java index c9f0ec7..bdb5410 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NoRecordsToolbar.java @@ -19,6 +19,7 @@ package org.apache.wicket.extensions.markup.html.repeater.data.table; import org.apache.wicket.AttributeModifier; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.ResourceModel; @@ -64,7 +65,16 @@ public class NoRecordsToolbar extends AbstractToolbar WebMarkupContainer td = new WebMarkupContainer("td"); add(td); - td.add(AttributeModifier.replace("colspan", String.valueOf(table.getColumns().size()))); + td.add(AttributeModifier.replace("colspan", new AbstractReadOnlyModel<String>() + { + private static final long serialVersionUID = 1L; + + @Override + public String getObject() + { + return String.valueOf(table.getColumns().size()); + } + })); td.add(new Label("msg", messageModel)); } http://git-wip-us.apache.org/repos/asf/wicket/blob/31c71981/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java ---------------------------------------------------------------------- diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java index e7bada4..9e63dff 100644 --- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java +++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/filter/FilterToolbar.java @@ -16,14 +16,18 @@ */ package org.apache.wicket.extensions.markup.html.repeater.data.table.filter; +import java.util.Iterator; +import java.util.LinkedList; import java.util.List; import org.apache.wicket.Component; import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractToolbar; import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable; import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; -import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.repeater.RepeatingView; +import org.apache.wicket.markup.repeater.Item; +import org.apache.wicket.markup.repeater.RefreshingView; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.Model; /** @@ -65,47 +69,60 @@ public class FilterToolbar extends AbstractToolbar } // populate the toolbar with components provided by filtered columns - - RepeatingView filters = new RepeatingView("filters"); - filters.setRenderBodyOnly(true); - add(filters); - - List<IColumn<T, S>> cols = table.getColumns(); - for (IColumn<T, S> col : cols) + RefreshingView<IColumn<T, S>> filters = new RefreshingView<IColumn<T, S>>("filters") { - WebMarkupContainer item = new WebMarkupContainer(filters.newChildId()); - item.setRenderBodyOnly(true); - - Component filter = null; + private static final long serialVersionUID = 1L; - if (col instanceof IFilteredColumn) + @Override + protected Iterator<IModel<IColumn<T, S>>> getItemModels() { - IFilteredColumn<T, S> filteredCol = (IFilteredColumn<T, S>)col; - filter = filteredCol.getFilter(FILTER_ID, form); - } + List<IModel<IColumn<T, S>>> columnsModels = new LinkedList<IModel<IColumn<T, S>>>(); - if (filter == null) - { - filter = new NoFilter(FILTER_ID); + for (IColumn<T, S> column : table.getColumns()) + { + columnsModels.add(Model.of(column)); + } + + return columnsModels.iterator(); } - else + + @Override + protected void populateItem(Item<IColumn<T, S>> item) { - if (!filter.getId().equals(FILTER_ID)) + final IColumn<T, S> col = item.getModelObject(); + item.setRenderBodyOnly(true); + + Component filter = null; + + if (col instanceof IFilteredColumn) { - throw new IllegalStateException( - "filter component returned with an invalid component id. invalid component id [" + - filter.getId() + - "] required component id [" + - getId() + - "] generating column [" + col.toString() + "] "); + IFilteredColumn<T, S> filteredCol = (IFilteredColumn<T, S>)col; + filter = filteredCol.getFilter(FILTER_ID, form); } - } - item.add(filter); + if (filter == null) + { + filter = new NoFilter(FILTER_ID); + } + else + { + if (!filter.getId().equals(FILTER_ID)) + { + throw new IllegalStateException( + "filter component returned with an invalid component id. invalid component id [" + + filter.getId() + + "] required component id [" + + getId() + + "] generating column [" + col.toString() + "] "); + } + } - filters.add(item); - } + item.add(filter); + } + }; + filters.setRenderBodyOnly(true); + add(filters); } @Override
