diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 45f5e800db..766d6ebbd2 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -36,6 +36,7 @@
Increase test coverage for ListUtils #517.
Use the Junit (Jupiter) API #518.
+ LayerManager.Builder implements Supplier.
Update bloom filter documentation #508.
Bump commons-codec:commons-codec from 1.17.0 to 1.17.1 #514.
diff --git a/src/main/java/org/apache/commons/collections4/bloomfilter/LayerManager.java b/src/main/java/org/apache/commons/collections4/bloomfilter/LayerManager.java
index 353c1f139e..110a514d1a 100644
--- a/src/main/java/org/apache/commons/collections4/bloomfilter/LayerManager.java
+++ b/src/main/java/org/apache/commons/collections4/bloomfilter/LayerManager.java
@@ -56,11 +56,12 @@
public class LayerManager implements BloomFilterExtractor {
/**
- * Builder to create Layer Manager.
+ * Builds new instances of {@link LayerManager}.
*
* @param the {@link BloomFilter} type.
*/
- public static class Builder {
+ public static class Builder implements Supplier> {
+
private Predicate> extendCheck;
private Supplier supplier;
private Consumer> cleanup;
@@ -75,7 +76,8 @@ private Builder() {
*
* @return a new LayerManager.
*/
- public LayerManager build() {
+ @Override
+ public LayerManager get() {
return new LayerManager<>(supplier, extendCheck, cleanup, true);
}
@@ -97,7 +99,7 @@ public Builder setCleanup(final Consumer> cleanup) {
*
* @param extendCheck The predicate to determine if a new target should be
* created.
- * @return this for chaining.
+ * @return {@code this} instance.
*/
public Builder setExtendCheck(final Predicate> extendCheck) {
this.extendCheck = extendCheck;
@@ -109,7 +111,7 @@ public Builder setExtendCheck(final Predicate> extendCheck) {
* the supplier provides the instance of the Bloom filter.
*
* @param supplier The supplier of new Bloom filter instances.
- * @return this for chaining.
+ * @return {@code this} instance.
*/
public Builder setSupplier(final Supplier supplier) {
this.supplier = supplier;
diff --git a/src/test/java/org/apache/commons/collections4/bloomfilter/BloomFilteExtractorFromLayeredBloomFilterTest.java b/src/test/java/org/apache/commons/collections4/bloomfilter/BloomFilteExtractorFromLayeredBloomFilterTest.java
index f66522d29d..8f4abaa4be 100644
--- a/src/test/java/org/apache/commons/collections4/bloomfilter/BloomFilteExtractorFromLayeredBloomFilterTest.java
+++ b/src/test/java/org/apache/commons/collections4/bloomfilter/BloomFilteExtractorFromLayeredBloomFilterTest.java
@@ -22,7 +22,7 @@ public class BloomFilteExtractorFromLayeredBloomFilterTest extends AbstractBloom
protected BloomFilterExtractor createUnderTest(final BloomFilter... filters) {
final Shape shape = filters[0].getShape();
final LayerManager layerManager = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape))
- .setExtendCheck(LayerManager.ExtendCheck.advanceOnPopulated()).setCleanup(LayerManager.Cleanup.noCleanup()).build();
+ .setExtendCheck(LayerManager.ExtendCheck.advanceOnPopulated()).setCleanup(LayerManager.Cleanup.noCleanup()).get();
final LayeredBloomFilter underTest = new LayeredBloomFilter(shape, layerManager);
for (final BloomFilter bf : filters) {
underTest.merge(bf);
diff --git a/src/test/java/org/apache/commons/collections4/bloomfilter/LayerManagerTest.java b/src/test/java/org/apache/commons/collections4/bloomfilter/LayerManagerTest.java
index 5f03770c62..9aa60ae1c0 100644
--- a/src/test/java/org/apache/commons/collections4/bloomfilter/LayerManagerTest.java
+++ b/src/test/java/org/apache/commons/collections4/bloomfilter/LayerManagerTest.java
@@ -46,7 +46,7 @@ public class LayerManagerTest {
@ValueSource(ints = {4, 10, 2, 1})
public void testAdvanceOnCount(final int breakAt) {
final Predicate> underTest = LayerManager.ExtendCheck.advanceOnCount(breakAt);
- final LayerManager layerManager = testingBuilder().build();
+ final LayerManager layerManager = testingBuilder().get();
for (int i = 0; i < breakAt - 1; i++) {
assertFalse(underTest.test(layerManager), "at " + i);
layerManager.getTarget().merge(TestingHashers.FROM1);
@@ -63,7 +63,7 @@ public void testAdvanceOnCountInvalidArguments() {
@Test
public void testAdvanceOnPopulated() {
final Predicate> underTest = LayerManager.ExtendCheck.advanceOnPopulated();
- final LayerManager layerManager = testingBuilder().build();
+ final LayerManager layerManager = testingBuilder().get();
assertFalse(underTest.test(layerManager));
layerManager.getTarget().merge(TestingHashers.FROM1);
assertTrue(underTest.test(layerManager));
@@ -74,7 +74,7 @@ public void testAdvanceOnSaturation() {
final double maxN = shape.estimateMaxN();
int hashStart = 0;
final Predicate> underTest = LayerManager.ExtendCheck.advanceOnSaturation(maxN);
- final LayerManager layerManager = testingBuilder().build();
+ final LayerManager layerManager = testingBuilder().get();
while (layerManager.getTarget().getShape().estimateN(layerManager.getTarget().cardinality()) < maxN) {
assertFalse(underTest.test(layerManager));
layerManager.getTarget().merge(new IncrementingHasher(hashStart, shape.getNumberOfHashFunctions()));
@@ -88,24 +88,24 @@ public void testAdvanceOnSaturation() {
@Test
public void testBuilder() {
final LayerManager.Builder underTest = LayerManager.builder();
- NullPointerException npe = assertThrows(NullPointerException.class, underTest::build);
+ NullPointerException npe = assertThrows(NullPointerException.class, underTest::get);
assertTrue(npe.getMessage().contains("filterSupplier"));
underTest.setSupplier(() -> null).setCleanup(null);
- npe = assertThrows(NullPointerException.class, underTest::build);
+ npe = assertThrows(NullPointerException.class, underTest::get);
assertTrue(npe.getMessage().contains("filterCleanup"));
underTest.setCleanup(x -> {
}).setExtendCheck(null);
- npe = assertThrows(NullPointerException.class, underTest::build);
+ npe = assertThrows(NullPointerException.class, underTest::get);
assertTrue(npe.getMessage().contains("extendCheck"));
- npe = assertThrows(NullPointerException.class, () -> LayerManager.builder().setSupplier(() -> null).build());
+ npe = assertThrows(NullPointerException.class, () -> LayerManager.builder().setSupplier(() -> null).get());
assertTrue(npe.getMessage().contains("filterSupplier.get() returned null."));
}
@Test
public void testClear() {
- final LayerManager underTest = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape)).build();
+ final LayerManager underTest = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape)).get();
underTest.getTarget().merge(TestingHashers.randomHasher());
underTest.next();
underTest.getTarget().merge(TestingHashers.randomHasher());
@@ -119,7 +119,7 @@ public void testClear() {
@Test
public void testCopy() {
- final LayerManager underTest = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape)).build();
+ final LayerManager underTest = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape)).get();
underTest.getTarget().merge(TestingHashers.randomHasher());
underTest.next();
underTest.getTarget().merge(TestingHashers.randomHasher());
@@ -140,7 +140,7 @@ public void testCopy() {
@Test
public void testForEachBloomFilter() {
final LayerManager underTest = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape))
- .setExtendCheck(LayerManager.ExtendCheck.advanceOnPopulated()).build();
+ .setExtendCheck(LayerManager.ExtendCheck.advanceOnPopulated()).get();
final List lst = new ArrayList<>();
for (int i = 0; i < 10; i++) {
@@ -161,7 +161,7 @@ public void testForEachBloomFilter() {
@Test
public void testGet() {
final SimpleBloomFilter f = new SimpleBloomFilter(shape);
- final LayerManager underTest = LayerManager.builder().setSupplier(() -> f).build();
+ final LayerManager underTest = LayerManager.builder().setSupplier(() -> f).get();
assertEquals(1, underTest.getDepth());
assertSame(f, underTest.get(0));
assertThrows(NoSuchElementException.class, () -> underTest.get(-1));
@@ -175,7 +175,7 @@ private LayerManager.Builder testingBuilder() {
@Test
public void testNeverAdvance() {
final Predicate> underTest = LayerManager.ExtendCheck.neverAdvance();
- final LayerManager layerManager = testingBuilder().build();
+ final LayerManager layerManager = testingBuilder().get();
assertFalse(underTest.test(layerManager));
for (int i = 0; i < 10; i++) {
layerManager.getTarget().merge(TestingHashers.randomHasher());
@@ -185,7 +185,7 @@ public void testNeverAdvance() {
@Test
public void testNextAndGetDepth() {
- final LayerManager underTest = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape)).build();
+ final LayerManager underTest = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(shape)).get();
assertEquals(1, underTest.getDepth());
underTest.getTarget().merge(TestingHashers.randomHasher());
assertEquals(1, underTest.getDepth());
@@ -281,7 +281,7 @@ public void testTarget() {
return true;
}).setCleanup(ll -> {
cleanupCalled[0] = true;
- }).build();
+ }).get();
assertFalse(extendCheckCalled[0]);
assertFalse(cleanupCalled[0]);
assertEquals(1, supplierCount[0]);
diff --git a/src/test/java/org/apache/commons/collections4/bloomfilter/LayeredBloomFilterTest.java b/src/test/java/org/apache/commons/collections4/bloomfilter/LayeredBloomFilterTest.java
index ac698bba0d..3610a4317a 100644
--- a/src/test/java/org/apache/commons/collections4/bloomfilter/LayeredBloomFilterTest.java
+++ b/src/test/java/org/apache/commons/collections4/bloomfilter/LayeredBloomFilterTest.java
@@ -143,7 +143,7 @@ static LayeredBloomFilter createTimedLayeredFilter(final
.setCleanup(cleanup)
.setExtendCheck(new AdvanceOnTimeQuanta(quanta)
.or(LayerManager.ExtendCheck.advanceOnSaturation(shape.estimateMaxN())))
- .build();
+ .get();
return new LayeredBloomFilter<>(shape, layerManager);
}
@@ -174,7 +174,7 @@ public static LayeredBloomFilter fixed(final Shape sh
final LayerManager.Builder builder = LayerManager.builder();
builder.setExtendCheck(LayerManager.ExtendCheck.advanceOnPopulated())
.setCleanup(LayerManager.Cleanup.onMaxSize(maxDepth)).setSupplier(supplier);
- return new LayeredBloomFilter<>(shape, builder.build());
+ return new LayeredBloomFilter<>(shape, builder.get());
}
// instrumentation to record timestamps in dbgInstrument list
@@ -221,7 +221,7 @@ private LayeredBloomFilter setupFindTest() {
@Test
public void testCardinalityAndIsEmpty() {
final LayerManager layerManager = LayerManager.builder().setExtendCheck(ExtendCheck.neverAdvance())
- .setSupplier(() -> new SimpleBloomFilter(getTestShape())).build();
+ .setSupplier(() -> new SimpleBloomFilter(getTestShape())).get();
testCardinalityAndIsEmpty(new LayeredBloomFilter<>(getTestShape(), layerManager));
}
@@ -233,7 +233,7 @@ public void testCleanup() {
final LayerManager layerManager = LayerManager.builder()
.setSupplier(() -> new NumberedBloomFilter(getTestShape(), 3, sequence[0]++))
.setExtendCheck(ExtendCheck.neverAdvance())
- .setCleanup(ll -> ll.removeIf( f -> (((NumberedBloomFilter) f).value-- == 0))).build();
+ .setCleanup(ll -> ll.removeIf( f -> (((NumberedBloomFilter) f).value-- == 0))).get();
final LayeredBloomFilter underTest = new LayeredBloomFilter(getTestShape(), layerManager );
assertEquals(1, underTest.getDepth());
underTest.merge(TestingHashers.randomHasher());
@@ -385,7 +385,7 @@ public void testMultipleFilters() {
@Test
public final void testNext() {
final LayerManager layerManager = LayerManager.builder().setSupplier(() -> new SimpleBloomFilter(getTestShape()))
- .build();
+ .get();
final LayeredBloomFilter filter = new LayeredBloomFilter<>(getTestShape(), layerManager);
filter.merge(TestingHashers.FROM1);