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

Reply via email to