You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by ad...@apache.org on 2014/05/13 19:53:19 UTC

git commit: [WICKET-5573] Changed FilterToolbar to accept three different generic types, and added an example for such component.

Repository: wicket
Updated Branches:
  refs/heads/master abffeb040 -> 65385880a


[WICKET-5573] Changed FilterToolbar to accept three different generic
types, and added an example for such component.

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/65385880
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/65385880
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/65385880

Branch: refs/heads/master
Commit: 65385880a24503323ee2a0f6af6ac9c8163563f8
Parents: abffeb0
Author: bitstorm <an...@gmail.com>
Authored: Tue May 13 19:51:22 2014 +0200
Committer: bitstorm <an...@gmail.com>
Committed: Tue May 13 19:51:22 2014 +0200

----------------------------------------------------------------------
 .../wicket/examples/repeater/Contact.java       | 24 ++++-
 .../wicket/examples/repeater/ContactFilter.java | 43 +++++++++
 .../examples/repeater/ContactGenerator.java     | 20 ++++
 .../examples/repeater/ContactsDatabase.java     |  2 +-
 .../repeater/DataTableFilterToolbarPage.html    | 29 ++++++
 .../repeater/DataTableFilterToolbarPage.java    | 97 ++++++++++++++++++++
 .../wicket/examples/repeater/DataTablePage.html |  4 +-
 .../wicket/examples/repeater/DataTablePage.java | 16 +++-
 .../apache/wicket/examples/repeater/Index.html  |  1 +
 .../repeater/SortableContactDataProvider.java   | 55 ++++++++++-
 .../data/table/filter/FilterToolbar.java        |  6 +-
 11 files changed, 280 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/65385880/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/Contact.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/Contact.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/Contact.java
index 7751654..0a53924 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/Contact.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/Contact.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.examples.repeater;
 
+import java.util.Date;
+
 import org.apache.wicket.util.io.IClusterable;
 
 /**
@@ -35,7 +37,9 @@ public class Contact implements IClusterable
 	private String homePhone;
 
 	private String cellPhone;
-
+	
+	private Date bornDate;
+	
 	/**
 	 * Constructor
 	 */
@@ -176,4 +180,22 @@ public class Contact implements IClusterable
 		this.lastName = lastName;
 	}
 
+	/**
+	 * 
+	 * @return bornDate
+	 */
+	public Date getBornDate()
+	{
+	    return bornDate;
+	}
+
+	/**
+	 * 
+	 * @param bornDate
+	 */
+	public void setBornDate(Date bornDate)
+	{
+	    this.bornDate = bornDate;
+	}
+
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/65385880/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactFilter.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactFilter.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactFilter.java
new file mode 100644
index 0000000..532321f
--- /dev/null
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactFilter.java
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+package org.apache.wicket.examples.repeater;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class ContactFilter implements Serializable
+{
+    private Date dateFrom;
+    private Date dateTo;
+    
+    public Date getDateFrom()
+    {
+        return dateFrom;
+    }
+    public void setDateFrom(Date dateFrom)
+    {
+        this.dateFrom = dateFrom;
+    }
+    public Date getDateTo()
+    {
+        return dateTo;
+    }
+    public void setDateTo(Date dateTo)
+    {
+        this.dateTo = dateTo;
+    }
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/65385880/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactGenerator.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactGenerator.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactGenerator.java
index ec47ad9..cb7f5ab 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactGenerator.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactGenerator.java
@@ -16,7 +16,10 @@
  */
 package org.apache.wicket.examples.repeater;
 
+import java.util.Calendar;
 import java.util.Collection;
+import java.util.Date;
+import java.util.GregorianCalendar;
 
 /**
  * generates random contacts
@@ -70,6 +73,8 @@ public class ContactGenerator
 		contact.setId(generateId());
 		contact.setHomePhone(generatePhoneNumber());
 		contact.setCellPhone(generatePhoneNumber());
+		contact.setBornDate(generateDate());
+		
 		return contact;
 	}
 
@@ -111,5 +116,20 @@ public class ContactGenerator
 		return choices[rint(0, choices.length)];
 	}
 
+	private Date generateDate()
+	{
+	    	GregorianCalendar gc = new GregorianCalendar();
+
+	        int year = rint(1950, 1985);
+
+	        gc.set(Calendar.YEAR, year);
 
+	        int dayOfYear = rint(1, gc.getActualMaximum(Calendar.DAY_OF_YEAR));
+
+	        gc.set(Calendar.DAY_OF_YEAR, dayOfYear);
+	        
+	        return gc.getTime();
+	}
+	
+	
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/65385880/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactsDatabase.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactsDatabase.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactsDatabase.java
index f295066..d057f7c 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactsDatabase.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/ContactsDatabase.java
@@ -92,7 +92,7 @@ public class ContactsDatabase
 		return getIndex(sort).subList((int)first, (int)(first + count));
 	}
 
-	protected List<Contact> getIndex(SortParam sort)
+	public List<Contact> getIndex(SortParam sort)
 	{
 		if (sort == null)
 		{

http://git-wip-us.apache.org/repos/asf/wicket/blob/65385880/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTableFilterToolbarPage.html
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTableFilterToolbarPage.html b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTableFilterToolbarPage.html
new file mode 100644
index 0000000..545d5cc
--- /dev/null
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTableFilterToolbarPage.html
@@ -0,0 +1,29 @@
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<style type="text/css">
+		th.last-name *, td.last-name {
+			font-weight: bold;
+			color: #AA0000;
+		}
+		th.numeric, td.numeric {
+			text-align: right !important;
+		}
+	</style>
+</wicket:head>
+<wicket:extend>
+
+
+This table has a toolbar filter. We can specify a valid range for contact's born date.<br/>
+	<br/>
+   
+    <form wicket:id="filterForm">
+    	<fieldset style="display: inline-block;">
+    		<legend>Born date</legend>
+	    	<span style="float: right;">from: <input wicket:id="dateFrom"/></span> <br/>
+	    	<span style="float: right;">to: <input wicket:id="dateTo"/></span>
+    	</fieldset>
+    	<table class="dataview" wicket:id="tableWithFilterForm">[table]</table>
+    </form>
+    
+</wicket:extend>
+</html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/65385880/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTableFilterToolbarPage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTableFilterToolbarPage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTableFilterToolbarPage.java
new file mode 100644
index 0000000..031e120
--- /dev/null
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTableFilterToolbarPage.java
@@ -0,0 +1,97 @@
+/*
+ * 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.
+ */
+package org.apache.wicket.examples.repeater;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.HeadersToolbar;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.NavigationToolbar;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterForm;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.FilterToolbar;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+
+
+/**
+ * demo page for the datatable component
+ * 
+ * @see org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable
+ * @author igor
+ * 
+ */
+public class DataTableFilterToolbarPage extends ExamplePage
+{
+	/**
+	 * constructor
+	 */
+	public DataTableFilterToolbarPage()
+	{
+		List<IColumn<Contact, String>> columns = new ArrayList<>();
+
+		columns.add(new PropertyColumn<Contact, String>(new Model<>("ID"), "id")
+		{
+			@Override
+			public String getCssClass()
+			{
+				return "numeric";
+			}
+		});
+
+		columns.add(new PropertyColumn<Contact, String>(new Model<>("First Name"), "firstName", "firstName"));
+
+		columns.add(new PropertyColumn<Contact, String>(new Model<>("Last Name"), "lastName", "lastName")
+		{
+			@Override
+			public String getCssClass()
+			{
+				return "last-name";
+			}
+		});
+
+		columns.add(new PropertyColumn<Contact, String>(new Model<>("Home Phone"), "homePhone"));
+		columns.add(new PropertyColumn<Contact, String>(new Model<>("Cell Phone"), "cellPhone"));
+
+		
+		SortableContactDataProvider dataProvider = new SortableContactDataProvider();
+		columns = new ArrayList<>(columns);
+		columns.add(new PropertyColumn<Contact, String>(new Model<>("Born Date"), "bornDate"));
+		
+		DataTable<Contact, String> tableWithFilterForm = new DataTable<>("tableWithFilterForm", columns,
+			dataProvider, 8);
+		
+		tableWithFilterForm.setOutputMarkupId(true);
+				
+		FilterForm<ContactFilter> filterForm = new FilterForm<>("filterForm", dataProvider);
+		
+		filterForm.add(new TextField<>("dateFrom", PropertyModel.of(dataProvider, "filterState.dateFrom")));
+		filterForm.add(new TextField<>("dateTo", PropertyModel.of(dataProvider, "filterState.dateTo")));
+		
+		add(filterForm);
+		
+		FilterToolbar filterToolbar = new FilterToolbar(tableWithFilterForm, filterForm);
+		
+		tableWithFilterForm.addTopToolbar(filterToolbar);
+		tableWithFilterForm.addTopToolbar(new NavigationToolbar(tableWithFilterForm));
+		tableWithFilterForm.addTopToolbar(new HeadersToolbar<>(tableWithFilterForm, dataProvider));
+		filterForm.add(tableWithFilterForm);
+	}
+}

http://git-wip-us.apache.org/repos/asf/wicket/blob/65385880/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.html
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.html b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.html
index 842cecb..006079f 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.html
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.html
@@ -31,8 +31,8 @@ This is a demo of the DataTable (DataView wrapper). Provided features:<br/>
     <hr/>
     <br/>
 
-    <span style="font-size: 16px">This is a table that uses <em>org.apache.wicket.extensions.markup.html.repeater.data.table.ColGroup</em>
+    <span>This is a table that uses <em>org.apache.wicket.extensions.markup.html.repeater.data.table.ColGroup</em>
     to style the columns</span>:
-    <table wicket:id="tableWithColGroup">[table]</table>
+    <table class="dataview" wicket:id="tableWithColGroup">[table]</table>
 </wicket:extend>
 </html>

http://git-wip-us.apache.org/repos/asf/wicket/blob/65385880/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java
index 46b067d..e0a75a0 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/DataTablePage.java
@@ -25,6 +25,7 @@ import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColu
 import org.apache.wicket.extensions.markup.html.repeater.data.table.ColGroup;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.DefaultDataTable;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.HeadersToolbar;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.export.CSVDataExporter;
@@ -83,16 +84,20 @@ public class DataTablePage extends BasePage
 		columns.add(new PropertyColumn<Contact, String>(new Model<>("Home Phone"), "homePhone"));
 		columns.add(new PropertyColumn<Contact, String>(new Model<>("Cell Phone"), "cellPhone"));
 
-		DataTable dataTable = new DefaultDataTable<>("table", columns,
-				new SortableContactDataProvider(), 8);
+		SortableContactDataProvider dataProvider = new SortableContactDataProvider();
+		DataTable<Contact, String> dataTable = new DefaultDataTable<>("table", columns,
+				dataProvider, 8);
+		
 		dataTable.addBottomToolbar(new ExportToolbar(dataTable).addDataExporter(new CSVDataExporter()));
 
 		add(dataTable);
 
-		DataTable tableWithColGroup = new DataTable<>("tableWithColGroup", columns,
-				new SortableContactDataProvider(), 8);
+		DataTable<Contact, String> tableWithColGroup = new DataTable<>("tableWithColGroup", columns,
+				dataProvider, 8);
+		tableWithColGroup.addTopToolbar(new HeadersToolbar<>(tableWithColGroup, dataProvider));
 		add(tableWithColGroup);
-
+		
+		//This is a table that uses ColGroup to style the columns: 
 		ColGroup colgroup = tableWithColGroup.getColGroup();
 		colgroup.add(AttributeModifier.append("style", "border: solid 1px green;"));
 		colgroup.addCol(colgroup.new Col(AttributeModifier.append("style", "background-color: lightblue;")));
@@ -101,5 +106,6 @@ public class DataTablePage extends BasePage
 		colgroup.addCol(colgroup.new Col(AttributeModifier.append("style", "background-color: yellow")));
 		colgroup.addCol(colgroup.new Col(AttributeModifier.append("span", "2"),
 				AttributeModifier.append("style", "background-color: #CC6633")));
+		
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/65385880/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/Index.html
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/Index.html b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/Index.html
index 693bd8b..0158e67 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/Index.html
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/Index.html
@@ -13,6 +13,7 @@ Repeaters are components that can render their body markup multiple times. These
 <a href="OIRPage.html">DataView and optimized item removal - demonstrates a dataview with a different IItemReuseStrategy implementation</a><br/>
 <a href="DataGridPage.html">DataGridView Example - a view that generates grids where rows are representing by items of the data provider and columns are represented by an array of ICellPopulators objects</a><br/>
 <a href="DataTablePage.html">DataTable Example - demonstrates data table component that wraps dataview to offer easy paging and sorting</a><br/>
+<a href="DataTableFilterToolbarPage.html">DataTable Example - demonstrates data table component with a FilterToolbar on its data set</a><br/>
 <a href="GridViewPage.html">GridView Example - demonstrates a grid view</a><br/>
 <a href="AjaxDataTablePage.html">AjaxFallbackDataTable Example - demonstrates an AJAX enabled datatable component</a><br/><br/>
 </wicket:link>

http://git-wip-us.apache.org/repos/asf/wicket/blob/65385880/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortableContactDataProvider.java
----------------------------------------------------------------------
diff --git a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortableContactDataProvider.java b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortableContactDataProvider.java
index a5ad7ac..c98948e 100644
--- a/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortableContactDataProvider.java
+++ b/wicket-examples/src/main/java/org/apache/wicket/examples/repeater/SortableContactDataProvider.java
@@ -16,9 +16,13 @@
  */
 package org.apache.wicket.examples.repeater;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.Iterator;
+import java.util.List;
 
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.filter.IFilterStateLocator;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
 import org.apache.wicket.model.IModel;
 
@@ -29,8 +33,10 @@ import org.apache.wicket.model.IModel;
  * @author igor
  * 
  */
-public class SortableContactDataProvider extends SortableDataProvider<Contact, String>
+public class SortableContactDataProvider extends SortableDataProvider<Contact, String> implements IFilterStateLocator<ContactFilter>
 {
+	private ContactFilter contactFilter = new ContactFilter();
+
 	/**
 	 * constructor
 	 */
@@ -48,7 +54,37 @@ public class SortableContactDataProvider extends SortableDataProvider<Contact, S
 	@Override
 	public Iterator<Contact> iterator(long first, long count)
 	{
-		return getContactsDB().find(first, count, getSort()).iterator();
+		List<Contact> contactsFound = getContactsDB().getIndex(getSort());
+		
+		return filterContacts(contactsFound).
+			subList((int)first, (int)(first + count)).
+			iterator();
+	}
+
+	private List<Contact> filterContacts(List<Contact> contactsFound)
+	{
+	    ArrayList<Contact> result = new ArrayList<>();
+	    Date dateFrom = contactFilter.getDateFrom();
+	    Date dateTo = contactFilter.getDateTo();
+	    
+	    for (Contact contact : contactsFound)
+	    {
+		Date bornDate = contact.getBornDate();
+		
+		if(dateFrom != null && bornDate.before(dateFrom))
+		{
+		    continue;
+		}
+		
+		if(dateTo != null && bornDate.after(dateTo))
+		{
+		    continue;
+		}
+		
+		result.add(contact);
+	    }
+	    
+	    return result;
 	}
 
 	/**
@@ -57,7 +93,7 @@ public class SortableContactDataProvider extends SortableDataProvider<Contact, S
 	@Override
 	public long size()
 	{
-		return getContactsDB().getCount();
+		return filterContacts(getContactsDB().getIndex(getSort())).size();
 	}
 
 	/**
@@ -69,4 +105,17 @@ public class SortableContactDataProvider extends SortableDataProvider<Contact, S
 		return new DetachableContactModel(object);
 	}
 
+	@Override
+	public ContactFilter getFilterState()
+	{
+	    return contactFilter;
+	}
+
+	@Override
+	public void setFilterState(ContactFilter state)
+	{
+	    contactFilter  = state;
+	}
+
+	
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/65385880/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 c27b6fd..62fe752 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
@@ -52,19 +52,15 @@ public class FilterToolbar extends AbstractToolbar
 	 *            data table this toolbar will be added to
 	 * @param form
 	 *            the filter form
-	 * @param stateLocator
-	 *            locator responsible for finding object used to store filter's state
 	 * @param <T>
 	 *            type of filter state object
 	 * 
 	 */
-	public <T, S> FilterToolbar(final DataTable<T, S> table, final FilterForm<T> form,
-		final IFilterStateLocator<T> stateLocator)
+	public <T, S, F> FilterToolbar(final DataTable<T, S> table, final FilterForm<F> form)
 	{
 		super(table);
 
 		Args.notNull(table, "table");
-		Args.notNull(stateLocator, "stateLocator");
 		
 		IModel<List<IColumn<T, S>>> model = new AbstractReadOnlyModel<List<IColumn<T,S>>>() {
 			private static final long serialVersionUID = 1L;