diff --git a/src/main/java/org/apache/camel/component/dataprovider/LazyDataProvider.java b/src/main/java/org/apache/camel/component/dataprovider/LazyDataProvider.java index c49f733..679f14b 100644 --- a/src/main/java/org/apache/camel/component/dataprovider/LazyDataProvider.java +++ b/src/main/java/org/apache/camel/component/dataprovider/LazyDataProvider.java @@ -1,8 +1,8 @@ package org.apache.camel.component.dataprovider; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Range; -import java.util.List; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; @@ -21,19 +21,27 @@ public abstract class LazyDataProvider implements IDataProvider { private final Lock readDataLock = dataLock.readLock(); private final Lock writeDataLock = dataLock.writeLock(); - private List data; + private ImmutableList data; /** * Tells how to load the data. + *

+ * Internally will be converted into a {@link ImmutableList}. + *

* * @return the loaded data. Never null but could be empty. */ - public abstract List loadData(); + public abstract Iterable loadData(); private void ensureDataLoaded() { LockUtils.runWithLock(writeDataLock, () -> { if (data == null) { - data = loadData(); + Iterable data = loadData(); + if (data instanceof ImmutableList) { + this.data = (ImmutableList) data; + } else { + this.data = ImmutableList.copyOf(data); + } } }); } diff --git a/src/main/java/org/apache/camel/component/dataprovider/StaticDataProvider.java b/src/main/java/org/apache/camel/component/dataprovider/StaticDataProvider.java index e936a20..ad1336e 100644 --- a/src/main/java/org/apache/camel/component/dataprovider/StaticDataProvider.java +++ b/src/main/java/org/apache/camel/component/dataprovider/StaticDataProvider.java @@ -3,10 +3,6 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Range; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - /** * {@link IDataProvider} implementation which already specifies all the data in the constructor. * @@ -14,18 +10,27 @@ */ public class StaticDataProvider implements IDataProvider { - private final List data; + // Immutable list is expected here + private final ImmutableList data; public StaticDataProvider(T... data) { - this(Arrays.asList(data)); + this(ImmutableList.copyOf(data)); } - public StaticDataProvider(Collection data) { + /** + * Constructor with provided {@link Iterable} data. + *

+ * Internally will be converted into a {@link ImmutableList}. + *

+ * + * @param data the {@link Iterable} data. Can NOT be null. + */ + public StaticDataProvider(Iterable data) { assert data != null : "Unspecified data"; - if (data instanceof List == false) { + if (data instanceof ImmutableList == false) { this.data = ImmutableList.copyOf(data); } else { - this.data = ((List) data); + this.data = (ImmutableList) data; } }