package org.fluentlenium.core.components;
import org.fluentlenium.core.domain.ComponentList;
import org.fluentlenium.core.domain.FluentList;
import org.fluentlenium.core.domain.FluentListImpl;
import org.fluentlenium.core.domain.FluentWebElement;
import org.openqa.selenium.WebElement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Abstract component instantiator.
*/
public abstract class AbstractComponentInstantiator implements ComponentInstantiator {
@Override
public FluentWebElement newFluent(WebElement element) {
return newComponent(FluentWebElement.class, element);
}
@Override
public FluentList<FluentWebElement> newFluentList() {
return newFluentList(FluentWebElement.class);
}
@Override
public FluentList<FluentWebElement> asFluentList(WebElement... elements) {
return asFluentList(Arrays.asList(elements));
}
@Override
public FluentList<FluentWebElement> asFluentList(Iterable<WebElement> elements) {
return asFluentList(FluentWebElement.class, elements);
}
@Override
public FluentList<FluentWebElement> asFluentList(List<WebElement> elements) {
return asFluentList(FluentWebElement.class, elements);
}
@Override
public FluentList<FluentWebElement> newFluentList(FluentWebElement... elements) {
return newFluentList(new ArrayList<>(Arrays.asList(elements)));
}
@Override
public FluentList<FluentWebElement> newFluentList(List<FluentWebElement> elements) {
return newFluentList(FluentWebElement.class, elements);
}
@Override
public <T extends FluentWebElement> FluentList<T> newFluentList(Class<T> componentClass) {
return asComponentList(FluentListImpl.class, componentClass);
}
@Override
public <T extends FluentWebElement> FluentList<T> newFluentList(Class<T> componentClass, T... elements) {
return newFluentList(componentClass, new ArrayList<>(Arrays.asList(elements)));
}
@Override
public <T extends FluentWebElement> FluentList<T> newFluentList(Class<T> componentClass, List<T> elements) {
return newComponentList(FluentListImpl.class, componentClass, elements);
}
@Override
public <T extends FluentWebElement> FluentList<T> asFluentList(Class<T> componentClass, WebElement... elements) {
return asFluentList(componentClass, Arrays.asList(elements));
}
@Override
public <T extends FluentWebElement> FluentList<T> asFluentList(Class<T> componentClass, Iterable<WebElement> elements) {
return asComponentList(FluentListImpl.class, componentClass, elements);
}
@Override
public <T extends FluentWebElement> FluentList<T> asFluentList(Class<T> componentClass, List<WebElement> elements) {
return asComponentList(FluentListImpl.class, componentClass, elements);
}
@Override
public <L extends List<T>, T> L newComponentList(Class<L> listClass, Class<T> componentClass) {
return newComponentList(listClass, componentClass, new ArrayList<>());
}
@Override
public <T> ComponentList<T> newComponentList(Class<T> componentClass) {
return asComponentList(ComponentList.class, componentClass);
}
@Override
public <T> ComponentList<T> asComponentList(Class<T> componentClass, WebElement... elements) {
return asComponentList(componentClass, Arrays.asList(elements));
}
@Override
public <T> ComponentList<T> asComponentList(Class<T> componentClass, Iterable<WebElement> elements) {
return asComponentList(ComponentList.class, componentClass, elements);
}
@Override
public <T> ComponentList<T> asComponentList(Class<T> componentClass, List<WebElement> elements) {
return asComponentList(ComponentList.class, componentClass, elements);
}
@Override
public <T> ComponentList<T> newComponentList(Class<T> componentClass, T... componentsList) {
return newComponentList(componentClass, new ArrayList<>(Arrays.asList(componentsList)));
}
@Override
public <T> ComponentList<T> newComponentList(Class<T> componentClass, List<T> componentsList) {
return newComponentList(ComponentList.class, componentClass, componentsList);
}
@Override
public <L extends List<T>, T> L newComponentList(Class<L> listClass, Class<T> componentClass, T... componentsList) {
return newComponentList(listClass, componentClass, new ArrayList<>(Arrays.asList(componentsList)));
}
@Override
public <L extends List<T>, T> L asComponentList(Class<L> listClass, Class<T> componentClass, WebElement... elements) {
return asComponentList(listClass, componentClass, Arrays.asList(elements));
}
@Override
public <L extends List<T>, T> L asComponentList(Class<L> listClass, Class<T> componentClass, Iterable<WebElement> elements) {
List<T> componentsList = new ArrayList<>();
for (WebElement element : elements) {
componentsList.add(newComponent(componentClass, element));
}
return newComponentList(listClass, componentClass, componentsList);
}
@Override
public <L extends List<T>, T> L asComponentList(Class<L> listClass, Class<T> componentClass, List<WebElement> elements) {
return newComponentList(listClass, componentClass, new LazyComponentList<>(this, componentClass, elements));
}
}