private Resource getNext()

in src/main/java/org/apache/sling/resourceresolver/impl/mapping/PagedQueryIterator.java [85:129]


    private Resource getNext() throws NoSuchElementException {
        Resource resource = it.next();
        count += 1;
        final String[] values = resource.getValueMap().get(propertyName, defaultValue);

        if (values.length > 0) {
            String value = values[0];
            if (value.compareTo(lastKey) < 0) {
                String message = String.format(
                        "unexpected query result in page %d, property name '%s', got '%s', despite querying for > '%s'",
                        (page - 1), propertyName, value, lastKey);
                log.error(message);
                throw new QueryImplementationException(message);
            }
            if (lastValue != null && value.compareTo(lastValue) < 0) {
                String message = String.format(
                        "unexpected query result in page %d, property name '%s', got '%s', last value was '%s'",
                        (page - 1), propertyName, value, lastValue);
                log.error(message);
                throw new QueryImplementationException(message);
            }

            // keep information about large key counts
            if (value.equals(lastValue)) {
                currentKeyCount += 1;
            } else {
                if (currentKeyCount > largestKeyCount) {
                    largestKeyCount = currentKeyCount + 1;
                    largestKeyValue = lastValue;
                }
                currentKeyCount = 0;
            }

            // start next page?
            if (count > pageSize && !value.equals(lastValue)) {
                updatePageStats();
                lastKey = value;
                nextPage();
                return getNext();
            }
            lastValue = value;
        }

        return resource;
    }