package de.ppi.samples.fuwesta.selophane.widget;
import java.util.List;
import lombok.Getter;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.selophane.elements.base.Fragment;
import org.selophane.elements.base.UniqueElementLocator;
import org.selophane.elements.widget.Button;
/**
* Implememtation of an ActionTable.
*
*/
@Getter
public class ActionTableImpl extends Fragment implements ActionTable {
/**
* Initiates an object of type ActionTableImpl.
*
* @param elementLocator the locator of the webelement.
*/
public ActionTableImpl(final UniqueElementLocator elementLocator) {
super(elementLocator);
}
/** The data rows. */
@FindBy(css = "tbody tr")
private List<ActionTable.Row> dataRows;
/**
* {@inheritDoc}
*/
@Override
public int getNrOfDataRows() {
return dataRows.size();
}
/**
* {@inheritDoc}
*/
@Override
public int getNrOfDataColumns() {
return findElement(By.cssSelector("tr")).findElements(
By.cssSelector("*")).size() - 1;
}
/**
* {@inheritDoc}
*/
@Override
public List<WebElement> getHeader() {
final List<WebElement> headerRows =
findElements(By.cssSelector("thead tr"));
if (headerRows.size() != 1) {
throw new IllegalStateException(
"A action table should have exactly 1 header-row, and not "
+ headerRows.size());
}
return headerRows.get(0).findElements(By.tagName("td"));
}
/**
* The default implementation of a {@link ActionTable.Row}.
*
*/
public static final class RowImpl extends Fragment implements Row {
/**
* List of actions.
*/
@FindBy(xpath = "td[last()]/a")
private List<Button> actions;
/**
* Initiates an object of type RowImpl.
*
* @param elementLocator the locator of the webelement.
*/
public RowImpl(final UniqueElementLocator elementLocator) {
super(elementLocator);
}
/**
* {@inheritDoc}
*/
@Override
public WebElement getColumn(int i) {
return findElements(By.tagName("td")).get(i);
}
/**
* {@inheritDoc}
*/
@Override
public List<Button> getActions() {
return actions;
}
}
}