Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
package com.ibm.cloud.cloudant.features.pagination;

import java.util.function.BiFunction;
import java.util.function.Function;
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.AllDocsResult;
import com.ibm.cloud.cloudant.v1.model.PostAllDocsOptions;
Expand All @@ -27,16 +26,6 @@ final class AllDocsPageIterator extends AllDocsBasePageIterator<Builder, PostAll
super(client, options, OptionsHandler.POST_ALL_DOCS);
}

@Override
Function<PostAllDocsOptions, Builder> optionsToBuilderFunction() {
return PostAllDocsOptions::newBuilder;
}

@Override
Function<Builder, PostAllDocsOptions> builderToOptionsFunction() {
return Builder::build;
}

@Override
BiFunction<Cloudant, PostAllDocsOptions, ServiceCall<AllDocsResult>> nextRequestFunction() {
return Cloudant::postAllDocs;
Expand All @@ -47,9 +36,4 @@ BiFunction<Builder, String, Builder> nextKeySetter() {
return Builder::startKey;
}

@Override
Function<PostAllDocsOptions, Long> limitGetter() {
return PostAllDocsOptions::limit;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
package com.ibm.cloud.cloudant.features.pagination;

import java.util.function.BiFunction;
import java.util.function.Function;
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.AllDocsResult;
import com.ibm.cloud.cloudant.v1.model.PostPartitionAllDocsOptions;
Expand All @@ -27,16 +26,6 @@ final class AllDocsPartitionPageIterator extends AllDocsBasePageIterator<PostPar
super(client, options, OptionsHandler.POST_PARTITION_ALL_DOCS);
}

@Override
Function<PostPartitionAllDocsOptions, Builder> optionsToBuilderFunction() {
return PostPartitionAllDocsOptions::newBuilder;
}

@Override
Function<Builder, PostPartitionAllDocsOptions> builderToOptionsFunction() {
return Builder::build;
}

@Override
BiFunction<Cloudant, PostPartitionAllDocsOptions, ServiceCall<AllDocsResult>> nextRequestFunction() {
return Cloudant::postPartitionAllDocs;
Expand All @@ -48,9 +37,4 @@ BiFunction<Builder, String, Builder> nextKeySetter() {
return Builder::startKey;
}

@Override
Function<PostPartitionAllDocsOptions, Long> limitGetter() {
return PostPartitionAllDocsOptions::limit;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiFunction;
import java.util.function.Function;
Expand All @@ -36,9 +35,10 @@ abstract class BasePageIterator<B, O, R, I> implements Iterator<List<I>> {
this.client = client;
this.optsHandler = optsHandler;
// Set the page size from the supplied options limit
this.pageSize = getPageSizeFromOptionsLimit(options);
this.pageSize = this.optsHandler.getPageSizeFromOptionsLimit(options);
// Set the first page options
buildAndSetOptions(optsHandler.builderFromOptions(options));
buildAndSetOptions(
this.optsHandler.applyLimit(this.optsHandler.builderFromOptions(options), this.pageSize));
}

@Override
Expand All @@ -56,37 +56,31 @@ public List<I> next() {
}

List<I> nextRequest() {
ServiceCall<R> request = nextRequestFunction().apply(this.client, this.nextPageOptionsRef.get());
ServiceCall<R> request =
nextRequestFunction().apply(this.client, this.nextPageOptionsRef.get());
R result = request.execute().getResult();
List<I> items = itemsGetter().apply(result);
if (items.size() < this.pageSize) {
this.hasNext = false;
} else {
O options = this.nextPageOptionsRef.get();
B optionsBuilder = optsHandler.builderFromOptions(this.nextPageOptionsRef.get());
setNextPageOptions(optionsBuilder, result);
// Remove any options valid on the user request, but invalid during paging
optionsBuilder = this.optsHandler.removeOptsForSubsequentPage(options, optionsBuilder);
buildAndSetOptions(optionsBuilder);
}
return items;
}

private void buildAndSetOptions(B optionsBuilder) {
protected void buildAndSetOptions(B optionsBuilder) {
this.nextPageOptionsRef.set(optsHandler.optionsFromBuilder(optionsBuilder));
}

abstract Function<O, B> optionsToBuilderFunction();

abstract Function<B, O> builderToOptionsFunction();

abstract Function<R, List<I>> itemsGetter();

abstract void setNextPageOptions(B builder, R result);

abstract BiFunction<Cloudant, O, ServiceCall<R>> nextRequestFunction();

abstract Function<O, Long> limitGetter();

Long getPageSizeFromOptionsLimit(O opts) {
return Optional.ofNullable(limitGetter().apply(opts)).orElse(200L);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
package com.ibm.cloud.cloudant.features.pagination;

import java.util.function.BiFunction;
import java.util.function.Function;
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.AllDocsResult;
import com.ibm.cloud.cloudant.v1.model.PostDesignDocsOptions;
Expand All @@ -32,24 +31,9 @@ BiFunction<Builder, String, Builder> nextKeySetter() {
return Builder::key;
}

@Override
Function<PostDesignDocsOptions, Builder> optionsToBuilderFunction() {
return PostDesignDocsOptions::newBuilder;
}

@Override
Function<Builder, PostDesignDocsOptions> builderToOptionsFunction() {
return Builder::build;
}

@Override
BiFunction<Cloudant, PostDesignDocsOptions, ServiceCall<AllDocsResult>> nextRequestFunction() {
return Cloudant::postDesignDocs;
}

@Override
Function<PostDesignDocsOptions, Long> limitGetter() {
return PostDesignDocsOptions::limit;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
package com.ibm.cloud.cloudant.features.pagination;

import java.util.function.BiFunction;
import java.util.function.Function;
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.FindResult;
import com.ibm.cloud.cloudant.v1.model.PostFindOptions;
Expand All @@ -27,16 +26,6 @@ final class FindPager extends FindBasePageIterator<PostFindOptions.Builder, Post
super(client, options, OptionsHandler.POST_FIND);
}

@Override
Function<PostFindOptions, Builder> optionsToBuilderFunction() {
return PostFindOptions::newBuilder;
}

@Override
Function<Builder, PostFindOptions> builderToOptionsFunction() {
return Builder::build;
}

@Override
BiFunction<Builder, String, Builder> bookmarkSetter() {
return Builder::bookmark;
Expand All @@ -47,9 +36,4 @@ BiFunction<Cloudant, PostFindOptions, ServiceCall<FindResult>> nextRequestFuncti
return Cloudant::postFind;
}

@Override
Function<PostFindOptions, Long> limitGetter() {
return PostFindOptions::limit;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
package com.ibm.cloud.cloudant.features.pagination;

import java.util.function.BiFunction;
import java.util.function.Function;
import com.ibm.cloud.cloudant.v1.Cloudant;
import com.ibm.cloud.cloudant.v1.model.FindResult;
import com.ibm.cloud.cloudant.v1.model.PostPartitionFindOptions;
Expand All @@ -27,16 +26,6 @@ final class FindPartitionPager extends FindBasePageIterator<PostPartitionFindOpt
super(client, options, OptionsHandler.POST_PARTITION_FIND);
}

@Override
Function<PostPartitionFindOptions, Builder> optionsToBuilderFunction() {
return PostPartitionFindOptions::newBuilder;
}

@Override
Function<Builder, PostPartitionFindOptions> builderToOptionsFunction() {
return Builder::build;
}

@Override
BiFunction<Builder, String, Builder> bookmarkSetter() {
return Builder::bookmark;
Expand All @@ -47,9 +36,4 @@ BiFunction<Cloudant, PostPartitionFindOptions, ServiceCall<FindResult>> nextRequ
return Cloudant::postPartitionFind;
}

@Override
Function<PostPartitionFindOptions, Long> limitGetter() {
return PostPartitionFindOptions::limit;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,6 @@ final void setNextPageOptions(B builder, R result) {
nextKeyIdSetter().ifPresent(f -> f.apply(builder, nextId));
}

@Override
Long getPageSizeFromOptionsLimit(O opts) {
return super.getPageSizeFromOptionsLimit(opts) + 1;
}

abstract Optional<String> checkBoundary(I penultimateItem, I lastItem);

}
Loading