org.opencms.cmis.CmsObjectListLimiter Maven / Gradle / Ivy
Show all versions of opencms-test Show documentation
/*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (C) Alkacon Software (http://www.alkacon.com)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* For further information about Alkacon Software, please see the
* company website: http://www.alkacon.com
*
* For further information about OpenCms, please see the
* project website: http://www.opencms.org
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.opencms.cmis;
import java.math.BigInteger;
import java.util.Iterator;
import java.util.List;
/**
* Helper class to ease implementation of CMIS service methods which support paging.
*
* This class works as an iterator for a given list, and limits the number of iterations based on skip/max parameters
* which are usually passed to the service methods.
*
* @param the content type of the list
*/
public class CmsObjectListLimiter implements Iterable, Iterator {
/** The list for which this object acts as an iterator. */
private List m_baseList;
/** The maximum number of objects which can still be returned. */
private int m_max;
/** The index of the next object to return. */
private int m_next;
/**
* Creates a new instance.
*
* @param baseList the list over which we want to iterate
* @param maxItems the maximum number of items
* @param skipCount the number of items to skip
*/
public CmsObjectListLimiter(List baseList, BigInteger maxItems, BigInteger skipCount) {
// skip and max
m_baseList = baseList;
m_next = (skipCount == null ? 0 : skipCount.intValue());
if (m_next < 0) {
m_next = 0;
}
m_max = (maxItems == null ? Integer.MAX_VALUE : maxItems.intValue());
if (m_max < 0) {
m_max = Integer.MAX_VALUE;
}
}
/**
* Checks if there are more items left in the base list which were not returned.
*
* @return true if there are more items left in the base list which were not returned
*/
public boolean hasMore() {
return m_next < m_baseList.size();
}
/**
* @see java.util.Iterator#hasNext()
*/
public boolean hasNext() {
return (m_next < m_baseList.size()) && (m_max > 0);
}
/**
* @see java.lang.Iterable#iterator()
*/
public Iterator iterator() {
return this;
}
/**
* @see java.util.Iterator#next()
*/
public A next() {
A result = m_baseList.get(m_next);
m_next += 1;
m_max -= 1;
return result;
}
/**
* @see java.util.Iterator#remove()
*/
public void remove() {
throw new UnsupportedOperationException();
}
}