package org.fluentlenium.core.domain; import lombok.experimental.Delegate; import org.fluentlenium.core.FluentControl; import org.fluentlenium.core.components.ComponentInstantiator; import org.fluentlenium.core.components.LazyComponents; import org.openqa.selenium.WebElement; import java.util.List; /** * List of Component. * * @param <T> type of component * @see Component */ public class ComponentList<T> extends DelegatingList<T> implements WrapsElements, LazyComponents { protected final Class<T> componentClass; protected final ComponentInstantiator instantiator; protected final FluentControl control; protected List<WebElement> proxy; @Delegate private LazyComponents lazyComponents = new NotLazyComponents(); // NOPMD UnusedPrivateField /** * Creates a new list of components * * @param componentClass component class * @param list underlying list of components * @param control control interface * @param instantiator component instantiator */ public ComponentList(Class<T> componentClass, List<T> list, FluentControl control, ComponentInstantiator instantiator) { super(list); if (list instanceof LazyComponents) { lazyComponents = (LazyComponents) list; } this.componentClass = componentClass; this.control = control; this.instantiator = instantiator; if (this.list instanceof WrapsElements) { proxy = ((WrapsElements) this.list).getWrappedElements(); // NOPMD ConstructorCallsOverridableMethod } } @Override public List<WebElement> getWrappedElements() { return proxy; } }