This is an automated email from the ASF dual-hosted git repository.
daim pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
The following commit(s) were added to refs/heads/trunk by this push:
new 34e7fd65b2 OAK-11587 : added Iterators.asEnumeration replacement in
oak-commons (#2236)
34e7fd65b2 is described below
commit 34e7fd65b2815b3c4944fe4dc96032dedadb65a3
Author: Rishabh Kumar <[email protected]>
AuthorDate: Thu Apr 17 20:54:51 2025 +0530
OAK-11587 : added Iterators.asEnumeration replacement in oak-commons (#2236)
Co-authored-by: Rishabh Kumar <[email protected]>
---
.../oak/commons/collections/IteratorUtils.java | 21 +++++-
.../oak/commons/collections/IteratorUtilsTest.java | 77 ++++++++++++++++++++++
2 files changed, 97 insertions(+), 1 deletion(-)
diff --git
a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtils.java
b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtils.java
index 41a3300311..ab756ce8b1 100644
---
a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtils.java
+++
b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtils.java
@@ -22,6 +22,7 @@ import
org.apache.commons.collections4.iterators.PeekingIterator;
import org.jetbrains.annotations.NotNull;
import java.util.Comparator;
+import java.util.Enumeration;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Objects;
@@ -262,9 +263,27 @@ public class IteratorUtils {
* @param type the {@link Class} object representing the component
type of the array, must not be null
* @return an array containing all the elements from the iterator
* @throws NullPointerException if the iterator or type is null
- * @since 4.1
*/
public static <T> T[] toArray(Iterator<? extends T> iterator, Class<T>
type) {
return org.apache.commons.collections4.IteratorUtils.toArray(iterator,
type);
}
+
+ /**
+ * Converts an iterator to an enumeration.
+ * <p>
+ * This method creates an {@link Enumeration} that will use the provided
{@link Iterator}
+ * as its source of elements. The enumeration will iterate through the
same elements
+ * as the iterator in the same order.
+ * <p>
+ * The enumeration's {@code hasMoreElements()} and {@code nextElement()}
methods
+ * delegate to the iterator's {@code hasNext()} and {@code next()} methods
respectively.
+ *
+ * @param <T> the type of elements in the iterator and enumeration
+ * @param iterator the iterator to convert to an enumeration, must not be
null
+ * @return an enumeration that uses the provided iterator as its source
+ * @throws NullPointerException if the iterator is null
+ */
+ public static <T> Enumeration<T> asEnumeration(final Iterator<T> iterator)
{
+ return
org.apache.commons.collections4.IteratorUtils.asEnumeration(iterator);
+ }
}
diff --git
a/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtilsTest.java
b/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtilsTest.java
index 3fed8a21e4..0b96cb8df5 100644
---
a/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtilsTest.java
+++
b/oak-commons/src/test/java/org/apache/jackrabbit/oak/commons/collections/IteratorUtilsTest.java
@@ -25,9 +25,11 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
+import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
+import java.util.Objects;
import static org.junit.Assert.fail;
@@ -512,4 +514,79 @@ public class IteratorUtilsTest {
Assert.assertEquals("first", array[0].toString());
Assert.assertEquals("second", array[1].toString());
}
+
+ @Test
+ public void testAsEnumerationWithMultipleElements() {
+ Iterator<String> iterator = Arrays.asList("one", "two",
"three").iterator();
+ Enumeration<String> enumeration =
IteratorUtils.asEnumeration(iterator);
+
+ Assert.assertTrue(enumeration.hasMoreElements());
+ Assert.assertEquals("one", enumeration.nextElement());
+ Assert.assertTrue(enumeration.hasMoreElements());
+ Assert.assertEquals("two", enumeration.nextElement());
+ Assert.assertTrue(enumeration.hasMoreElements());
+ Assert.assertEquals("three", enumeration.nextElement());
+ Assert.assertFalse(enumeration.hasMoreElements());
+ }
+
+ @Test
+ public void testAsEnumerationWithEmptyIterator() {
+ Iterator<String> emptyIterator = Collections.emptyIterator();
+ Enumeration<String> enumeration =
IteratorUtils.asEnumeration(emptyIterator);
+
+ Assert.assertFalse(enumeration.hasMoreElements());
+ }
+
+ @Test
+ public void testAsEnumerationWithSingleElement() {
+ Iterator<Integer> singleElementIterator =
Collections.singleton(42).iterator();
+ Enumeration<Integer> enumeration =
IteratorUtils.asEnumeration(singleElementIterator);
+
+ Assert.assertTrue(enumeration.hasMoreElements());
+ Assert.assertEquals(Integer.valueOf(42), enumeration.nextElement());
+ Assert.assertFalse(enumeration.hasMoreElements());
+ }
+
+ @Test(expected = NoSuchElementException.class)
+ public void testAsEnumerationNoMoreElements() {
+ Iterator<String> iterator =
Collections.singletonList("single").iterator();
+ Enumeration<String> enumeration =
IteratorUtils.asEnumeration(iterator);
+
+ enumeration.nextElement(); // First element
+ enumeration.nextElement(); // Should throw NoSuchElementException
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testAsEnumerationWithNullIterator() {
+ IteratorUtils.asEnumeration(null);
+ }
+
+ @Test
+ public void testAsEnumerationWithCustomType() {
+ class CustomObject {
+ private final String value;
+
+ CustomObject(String value) {
+ this.value = value;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) return true;
+ if (obj == null || getClass() != obj.getClass()) return false;
+ CustomObject that = (CustomObject) obj;
+ return Objects.equals(value, that.value);
+ }
+ }
+
+ List<CustomObject> list = Arrays.asList(new CustomObject("first"), new
CustomObject("second"));
+ Iterator<CustomObject> iterator = list.iterator();
+ Enumeration<CustomObject> enumeration =
IteratorUtils.asEnumeration(iterator);
+
+ Assert.assertTrue(enumeration.hasMoreElements());
+ Assert.assertEquals(list.get(0), enumeration.nextElement());
+ Assert.assertTrue(enumeration.hasMoreElements());
+ Assert.assertEquals(list.get(1), enumeration.nextElement());
+ Assert.assertFalse(enumeration.hasMoreElements());
+ }
}