Author: pete
Date: Wed Dec 1 14:28:29 2010
New Revision: 1041018
URL: http://svn.apache.org/viewvc?rev=1041018&view=rev
Log:
WICKET-2816: refactor paging support
Added:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/navigation/paging/IPageableList.java
Modified:
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/DataGridView.java
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigatorLabel.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/list/PageableListView.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/AbstractPageableView.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/DataView.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/GridView.java
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/TableTest.java
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/navigation/paging/AbstractPagingNavigationTest.java
Modified:
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/DataGridView.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/DataGridView.java?rev=1041018&r1=1041017&r2=1041018&view=diff
==============================================================================
---
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/DataGridView.java
(original)
+++
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/grid/DataGridView.java
Wed Dec 1 14:28:29 2010
@@ -112,26 +112,6 @@ public class DataGridView<T> extends Abs
}
/**
- * Sets the number of items to be displayed per page
- *
- * @param items
- * number of items to display per page
- *
- */
- public void setRowsPerPage(int items)
- {
- internalSetRowsPerPage(items);
- }
-
- /**
- * @return number of items displayed per page
- */
- public int getRowsPerPage()
- {
- return internalGetRowsPerPage();
- }
-
- /**
* Returns the data provider
*
* @return data provider
Modified:
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java?rev=1041018&r1=1041017&r2=1041018&view=diff
==============================================================================
---
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java
(original)
+++
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/DataTable.java
Wed Dec 1 14:28:29 2010
@@ -24,7 +24,7 @@ import org.apache.wicket.markup.Componen
import org.apache.wicket.markup.IMarkupFragment;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.list.AbstractItem;
-import org.apache.wicket.markup.html.navigation.paging.IPageable;
+import org.apache.wicket.markup.html.navigation.paging.IPageableList;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.IItemReuseStrategy;
import org.apache.wicket.markup.repeater.Item;
@@ -71,7 +71,7 @@ import org.apache.wicket.util.string.Str
* The model object type
*
*/
-public class DataTable<T> extends Panel implements IPageable
+public class DataTable<T> extends Panel implements IPageableList
{
static abstract class CssAttributeBehavior extends Behavior
{
@@ -167,7 +167,7 @@ public class DataTable<T> extends Panel
return DataTable.this.newRowItem(id, index,
model);
}
};
- datagrid.setRowsPerPage(rowsPerPage);
+ datagrid.setItemsPerPage(rowsPerPage);
body.add(datagrid);
add(body);
topToolbars = new ToolbarsContainer("topToolbars");
@@ -267,9 +267,9 @@ public class DataTable<T> extends Panel
/**
* @return number of rows per page
*/
- public final int getRowsPerPage()
+ public final int getItemsPerPage()
{
- return datagrid.getRowsPerPage();
+ return datagrid.getItemsPerPage();
}
/**
@@ -305,9 +305,25 @@ public class DataTable<T> extends Panel
* number of items to display per page
*
*/
- public void setRowsPerPage(int items)
+ public void setItemsPerPage(int items)
{
- datagrid.setRowsPerPage(items);
+ datagrid.setItemsPerPage(items);
+ }
+
+ /**
+ * @see
org.apache.wicket.markup.html.navigation.paging.IPageable#getItemOffset()
+ */
+ public int getItemOffset()
+ {
+ return datagrid.getItemOffset();
+ }
+
+ /**
+ * @see
org.apache.wicket.markup.html.navigation.paging.IPageable#getItemCount()
+ */
+ public int getItemCount()
+ {
+ return datagrid.getItemCount();
}
private void addToolbar(AbstractToolbar toolbar, RepeatingView
container)
Modified:
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigatorLabel.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigatorLabel.java?rev=1041018&r1=1041017&r2=1041018&view=diff
==============================================================================
---
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigatorLabel.java
(original)
+++
wicket/trunk/wicket-extensions/src/main/java/org/apache/wicket/extensions/markup/html/repeater/data/table/NavigatorLabel.java
Wed Dec 1 14:28:29 2010
@@ -19,8 +19,7 @@ package org.apache.wicket.extensions.mar
import org.apache.wicket.IClusterable;
import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.list.PageableListView;
-import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.markup.html.navigation.paging.IPageableList;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
@@ -38,147 +37,27 @@ public class NavigatorLabel extends Labe
{
private static final long serialVersionUID = 1L;
- // TODO Factor this interface out and let dataview/datatable implement
it
- private static interface PageableComponent extends IClusterable
- {
- /**
- * @return total number of rows across all pages
- */
- int getRowCount();
-
- /**
- * @return current page
- */
- int getCurrentPage();
-
- /**
- * @return rows per page
- */
- int getRowsPerPage();
- }
-
- /**
- * @param id
- * component id
- * @param table
- * table
- */
- public NavigatorLabel(final String id, final DataTable<?> table)
- {
- this(id, new PageableComponent()
- {
-
- /**
- *
- */
- private static final long serialVersionUID = 1L;
-
- public int getCurrentPage()
- {
- return table.getCurrentPage();
- }
-
- public int getRowCount()
- {
- return table.getRowCount();
- }
-
- public int getRowsPerPage()
- {
- return table.getRowsPerPage();
- }
-
- });
-
- }
-
- /**
- * @param id
- * component id
- * @param list
- * listview
- */
- public NavigatorLabel(final String id, final PageableListView<?> list)
- {
- this(id, new PageableComponent()
- {
- private static final long serialVersionUID = 1L;
-
- public int getCurrentPage()
- {
- return list.getCurrentPage();
- }
-
- public int getRowCount()
- {
- return list.getModelObject().size();
- }
-
- public int getRowsPerPage()
- {
- return list.getRowsPerPage();
- }
-
- });
-
- }
-
- /**
- * @param id
- * component id
- * @param table
- * pageable view
- */
- public NavigatorLabel(final String id, final DataView<?> table)
- {
- this(id, new PageableComponent()
- {
-
- /**
- *
- */
- private static final long serialVersionUID = 1L;
-
- public int getCurrentPage()
- {
- return table.getCurrentPage();
- }
-
- public int getRowCount()
- {
- return table.getRowCount();
- }
-
- public int getRowsPerPage()
- {
- return table.getItemsPerPage();
- }
-
- });
-
- }
-
- private NavigatorLabel(final String id, final PageableComponent table)
+ public NavigatorLabel(final String id, final IPageableList pageable)
{
super(id);
setDefaultModel(new StringResourceModel("NavigatorLabel", this,
- new Model<LabelModelObject>(new
LabelModelObject(table)),
+ new Model<LabelModelObject>(new
LabelModelObject(pageable)),
"Showing ${from} to ${to} of ${of}"));
}
private class LabelModelObject implements IClusterable
{
private static final long serialVersionUID = 1L;
- private final PageableComponent table;
+ private final IPageableList pageable;
/**
* Construct.
*
* @param table
*/
- public LabelModelObject(PageableComponent table)
+ public LabelModelObject(IPageableList table)
{
- this.table = table;
+ pageable = table;
}
/**
@@ -186,7 +65,7 @@ public class NavigatorLabel extends Labe
*/
public int getOf()
{
- return table.getRowCount();
+ return pageable.getItemCount();
}
/**
@@ -198,7 +77,7 @@ public class NavigatorLabel extends Labe
{
return 0;
}
- return (table.getCurrentPage() *
table.getRowsPerPage()) + 1;
+ return pageable.getItemOffset();
}
/**
@@ -210,7 +89,7 @@ public class NavigatorLabel extends Labe
{
return 0;
}
- return Math.min(getOf(), getFrom() +
table.getRowsPerPage() - 1);
+ return Math.min(getOf(), getFrom() +
pageable.getItemsPerPage() - 1);
}
}
}
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/list/PageableListView.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/list/PageableListView.java?rev=1041018&r1=1041017&r2=1041018&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/list/PageableListView.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/list/PageableListView.java
Wed Dec 1 14:28:29 2010
@@ -39,7 +39,7 @@ public abstract class PageableListView<T
private int currentPage;
/** Number of rows per page of the list view. */
- private int rowsPerPage;
+ private int itemsPerPage;
/**
* Constructor
@@ -48,14 +48,14 @@ public abstract class PageableListView<T
* See Component
* @param model
* See Component
- * @param rowsPerPage
+ * @param itemsPerPage
* Number of rows to show on a page
*/
public PageableListView(final String id, final IModel<? extends List<?
extends T>> model,
- int rowsPerPage)
+ int itemsPerPage)
{
super(id, model);
- this.rowsPerPage = rowsPerPage;
+ this.itemsPerPage = itemsPerPage;
}
/**
@@ -66,14 +66,14 @@ public abstract class PageableListView<T
* See Component
* @param list
* See Component
- * @param rowsPerPage
+ * @param itemsPerPage
* Number of rows to show on a page
* @see ListView#ListView(String, List)
*/
- public PageableListView(final String id, final List<? extends T> list,
final int rowsPerPage)
+ public PageableListView(final String id, final List<? extends T> list,
final int itemsPerPage)
{
super(id, list);
- this.rowsPerPage = rowsPerPage;
+ this.itemsPerPage = itemsPerPage;
}
/**
@@ -84,7 +84,7 @@ public abstract class PageableListView<T
public final int getCurrentPage()
{
// If first cell is out of range, bring page back into range
- while ((currentPage > 0) && ((currentPage * rowsPerPage) >=
getList().size()))
+ while ((currentPage > 0) && ((currentPage * itemsPerPage) >=
getItemCount()))
{
currentPage--;
}
@@ -99,7 +99,7 @@ public abstract class PageableListView<T
*/
public final int getPageCount()
{
- return ((getList().size() + rowsPerPage) - 1) / rowsPerPage;
+ return ((getItemCount() + itemsPerPage) - 1) / itemsPerPage;
}
/**
@@ -107,26 +107,39 @@ public abstract class PageableListView<T
*
* @return the maximum number of rows on each page.
*/
- public final int getRowsPerPage()
+ public final int getItemsPerPage()
{
- return rowsPerPage;
+ return itemsPerPage;
}
/**
* Sets the maximum number of rows on each page.
*
- * @param rowsPerPage
+ * @param itemsPerPage
* the maximum number of rows on each page.
*/
- public final void setRowsPerPage(int rowsPerPage)
+ public final void setItemsPerPage(int itemsPerPage)
{
- if (rowsPerPage < 0)
+ if (itemsPerPage < 0)
{
- rowsPerPage = 0;
+ itemsPerPage = 0;
}
addStateChange();
- this.rowsPerPage = rowsPerPage;
+ this.itemsPerPage = itemsPerPage;
+ }
+
+ public int getItemOffset()
+ {
+ return getCurrentPage() * getItemsPerPage();
+ }
+
+ /**
+ * @see
org.apache.wicket.markup.html.navigation.paging.IPageable#getItemCount()
+ */
+ public int getItemCount()
+ {
+ return getList().size();
}
/**
@@ -137,8 +150,8 @@ public abstract class PageableListView<T
{
if (getDefaultModelObject() != null)
{
- super.setStartIndex(getCurrentPage() *
getRowsPerPage());
- super.setViewSize(getRowsPerPage());
+ super.setStartIndex(getItemOffset());
+ super.setViewSize(getItemsPerPage());
}
return super.getViewSize();
@@ -199,4 +212,4 @@ public abstract class PageableListView<T
"You must not use setViewSize() with PageableListView");
}
-}
\ No newline at end of file
+}
Added:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/navigation/paging/IPageableList.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/navigation/paging/IPageableList.java?rev=1041018&view=auto
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/navigation/paging/IPageableList.java
(added)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/navigation/paging/IPageableList.java
Wed Dec 1 14:28:29 2010
@@ -0,0 +1,46 @@
+/*
+ * 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.markup.html.navigation.paging;
+
+/**
+ * An pageable interface that presents items in an page rather and need to
provide items count an
+ * offset meta data for pagination.
+ */
+public interface IPageableList extends IPageable
+{
+ /**
+ * Gets the total number of items this object has.
+ *
+ * @return The total number of items this object has.
+ */
+ int getItemCount();
+
+ /**
+ * gets the index of the first visible row
+ *
+ * @return first visible row
+ */
+ int getItemOffset();
+
+ /**
+ * maximum number of visible items per page
+ *
+ * @return number of items
+ */
+ int getItemsPerPage();
+
+}
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/AbstractPageableView.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/AbstractPageableView.java?rev=1041018&r1=1041017&r2=1041018&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/AbstractPageableView.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/AbstractPageableView.java
Wed Dec 1 14:28:29 2010
@@ -95,7 +95,7 @@ public abstract class AbstractPageableVi
@Override
protected Iterator<IModel<T>> getItemModels()
{
- int offset = getViewOffset();
+ int offset = getItemOffset();
int size = getViewSize();
Iterator<IModel<T>> models = getItemModels(offset, size);
@@ -161,7 +161,7 @@ public abstract class AbstractPageableVi
/**
* @return maximum number of items that will be shown per page
*/
- protected final int internalGetRowsPerPage()
+ public int getItemsPerPage()
{
return itemsPerPage;
}
@@ -171,7 +171,7 @@ public abstract class AbstractPageableVi
*
* @param items
*/
- protected final void internalSetRowsPerPage(int items)
+ public final void setItemsPerPage(int items)
{
if (items < 1)
{
@@ -280,10 +280,10 @@ public abstract class AbstractPageableVi
public final int getPageCount()
{
int total = getRowCount();
- int page = internalGetRowsPerPage();
- int count = total / page;
+ int itemsPerPage = getItemsPerPage();
+ int count = total / itemsPerPage;
- if (page * count < total)
+ if (itemsPerPage * count < total)
{
count++;
}
@@ -295,18 +295,18 @@ public abstract class AbstractPageableVi
/**
* @return the index of the first visible item
*/
- protected int getViewOffset()
+ public int getItemOffset()
{
- return getCurrentPage() * internalGetRowsPerPage();
+ return getCurrentPage() * getItemsPerPage();
}
/**
* @return the number of items visible
*/
- protected int getViewSize()
+ public int getViewSize()
{
- return Math.min(internalGetRowsPerPage(), getRowCount() -
getViewOffset());
+ return Math.min(getItemsPerPage(), getRowCount() -
getItemOffset());
}
//
/////////////////////////////////////////////////////////////////////////
@@ -369,7 +369,7 @@ public abstract class AbstractPageableVi
return delegate.next();
}
- };
+ }
/**
* @see org.apache.wicket.Component#onDetach()
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/DataView.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/DataView.java?rev=1041018&r1=1041017&r2=1041018&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/DataView.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/DataView.java
Wed Dec 1 14:28:29 2010
@@ -96,25 +96,6 @@ public abstract class DataView<T> extend
}
/**
- * Sets the number of items to be displayed per page
- *
- * @param items
- * number of items to display per page
- */
- public void setItemsPerPage(int items)
- {
- internalSetRowsPerPage(items);
- }
-
- /**
- * @return number of items displayed per page
- */
- public int getItemsPerPage()
- {
- return internalGetRowsPerPage();
- }
-
- /**
* @return data provider
*/
public IDataProvider<T> getDataProvider()
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/GridView.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/GridView.java?rev=1041018&r1=1041017&r2=1041018&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/GridView.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/repeater/data/GridView.java
Wed Dec 1 14:28:29 2010
@@ -159,9 +159,7 @@ public abstract class GridView<T> extend
{
items = (int)result;
}
-
- internalSetRowsPerPage(items);
-
+ setItemsPerPage(items);
}
Modified:
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/TableTest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/TableTest.java?rev=1041018&r1=1041017&r2=1041018&view=diff
==============================================================================
---
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/TableTest.java
(original)
+++
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/list/TableTest.java
Wed Dec 1 14:28:29 2010
@@ -74,26 +74,26 @@ public class TableTest extends WicketTes
public void testTable()
{
PageableListView<?> table = createTable(20, 4);
- assertEquals(4, table.getRowsPerPage());
+ assertEquals(4, table.getItemsPerPage());
assertEquals(0, table.getCurrentPage());
assertEquals(5, table.getPageCount());
assertEquals(4, table.getViewSize());
table = createTable(20, 6);
- assertEquals(6, table.getRowsPerPage());
+ assertEquals(6, table.getItemsPerPage());
assertEquals(0, table.getCurrentPage());
assertEquals(4, table.getPageCount());
assertEquals(6, table.getViewSize());
table.setCurrentPage(1);
- assertEquals(6, table.getRowsPerPage());
+ assertEquals(6, table.getItemsPerPage());
assertEquals(1, table.getCurrentPage());
assertEquals(4, table.getPageCount());
assertEquals(6, table.getViewSize());
assertEquals(6, table.getStartIndex());
table.setCurrentPage(3);
- assertEquals(6, table.getRowsPerPage());
+ assertEquals(6, table.getItemsPerPage());
assertEquals(3, table.getCurrentPage());
assertEquals(4, table.getPageCount());
assertEquals(2, table.getViewSize());
@@ -106,7 +106,7 @@ public class TableTest extends WicketTes
public void testEmptyTable()
{
PageableListView<?> table = createTable(0, 4);
- assertEquals(4, table.getRowsPerPage());
+ assertEquals(4, table.getItemsPerPage());
assertEquals(0, table.getCurrentPage());
assertEquals(0, table.getPageCount());
assertEquals(0, table.getViewSize());
Modified:
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/navigation/paging/AbstractPagingNavigationTest.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/navigation/paging/AbstractPagingNavigationTest.java?rev=1041018&r1=1041017&r2=1041018&view=diff
==============================================================================
---
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/navigation/paging/AbstractPagingNavigationTest.java
(original)
+++
wicket/trunk/wicket/src/test/java/org/apache/wicket/markup/html/navigation/paging/AbstractPagingNavigationTest.java
Wed Dec 1 14:28:29 2010
@@ -36,6 +36,24 @@ public abstract class AbstractPagingNavi
/** expected page which is set by the link. */
private int expectedPage = 0;
+ // untested
+ public int getItemCount()
+ {
+ return 0;
+ }
+
+ // untested
+ public int getItemOffset()
+ {
+ return 0;
+ }
+
+ // untested
+ public int getItemsPerPage()
+ {
+ return 0;
+ }
+
/**
* @see IPageable#getCurrentPage()
*/