/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/metaobj/branches/sakai-2.8.1/metaobj-util/tool-lib/src/java/org/sakaiproject/metaobj/utils/mvc/impl/ListScrollIndexerImpl.java $ * $Id: ListScrollIndexerImpl.java 59676 2009-04-03 23:18:23Z arwhyte@umich.edu $ *********************************************************************************** * * Copyright (c) 2004, 2005, 2006, 2008 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.osedu.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.metaobj.utils.mvc.impl; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.metaobj.utils.mvc.intf.ListScroll; import org.sakaiproject.metaobj.utils.mvc.intf.ListScrollIndexer; public class ListScrollIndexerImpl implements ListScrollIndexer { protected final transient Log logger = LogFactory.getLog(getClass()); private int perPage; public List indexList(Map request, Map model, List sourceList) { return indexList( request, model, sourceList, false ); } /** ** Create sublist from given list of items to allow paging (i.e. scrolling) through a list ** ** @param request (input) request parameters ** @param model (output) presentation parameters ** @param sourceList list of items ** @param hideOnePageScroll if true, do not display scroll buttons if not needed **/ public List indexList(Map request, Map model, List sourceList, boolean hideOnePageScroll) { int startingIndex = 0; int total = sourceList.size(); String ensureVisible = (String) request.get(ListScroll.ENSURE_VISIBLE_TAG); if (ensureVisible != null) { int visibleIndex = Integer.parseInt(ensureVisible); int startingPage = (visibleIndex / perPage); startingIndex = startingPage * perPage; } else { String newStart = (String) request.get(ListScroll.STARTING_INDEX_TAG); if (newStart != null) { startingIndex = Integer.parseInt(newStart); if (startingIndex < 0) { startingIndex = 0; } } } if (startingIndex > total) { int lastPage = (int) Math.ceil(((double) total) / ((double) perPage)); lastPage--; startingIndex = lastPage * perPage; } int endingIndex = startingIndex + perPage; if (endingIndex > sourceList.size()) { endingIndex = sourceList.size(); } model.put("listScroll", new ListScroll(perPage, sourceList.size(), startingIndex, hideOnePageScroll)); return sourceList.subList(startingIndex, endingIndex); } public int getPerPage() { return perPage; } public void setPerPage(int perPage) { this.perPage = perPage; } }