You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2012/06/14 20:58:29 UTC

git commit: WICKET-4596 DataTable toolbars support for dynamic columns

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 <sv...@apache.org>
Authored: Thu Jun 14 20:57:25 2012 +0200
Committer: Sven Meier <sv...@apache.org>
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