/**
* $URL: https://source.sakaiproject.org/svn/sitestats/trunk/sitestats-tool/src/java/org/sakaiproject/sitestats/tool/wicket/components/SakaiNavigatorLabel.java $
* $Id: SakaiNavigatorLabel.java 105078 2012-02-24 23:00:38Z ottenhoff@longsight.com $
*
* Copyright (c) 2006-2009 The Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.sitestats.tool.wicket.components;
import org.apache.wicket.IClusterable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.model.StringResourceModel;
public class SakaiNavigatorLabel extends Label {
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 dataview
*/
public SakaiNavigatorLabel(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 table pageable view
*/
public SakaiNavigatorLabel(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 SakaiNavigatorLabel(final String id, final PageableComponent table) {
super(id);
Model model = new Model(new LabelModelObject(table));
setDefaultModel(
new StringResourceModel(
"pager_textStatus",
this,
model,
new Object[] {
new PropertyModel(model, "from"),
new PropertyModel(model, "to"),
new PropertyModel(model, "of"),
new ResourceModel("pager_textItem"),
},
"Viewing {0} - {1} of {2} {3}")
//"Viewing ${from} - ${to} of ${of} items")
);
}
private static class LabelModelObject implements IClusterable {
private static final long serialVersionUID = 1L;
private final PageableComponent table;
/**
* Construct.
* @param table
*/
public LabelModelObject(PageableComponent table) {
this.table = table;
}
/**
* @return "z" in "Showing x to y of z"
*/
public int getOf() {
return table.getRowCount();
}
/**
* @return "x" in "Showing x to y of z"
*/
public int getFrom() {
if(getOf() == 0){
return 0;
}
return (table.getCurrentPage() * table.getRowsPerPage()) + 1;
}
/**
* @return "y" in "Showing x to y of z"
*/
public int getTo() {
if(getOf() == 0){
return 0;
}
return Math.min(getOf(), getFrom() + table.getRowsPerPage() - 1);
}
}
}