package org.lightadmin.page;
import org.lightadmin.SeleniumContext;
import org.lightadmin.component.DataTableComponent;
import org.lightadmin.component.FilterFormComponent;
import org.lightadmin.component.QuickViewComponent;
import org.lightadmin.data.Domain;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import static org.junit.Assert.fail;
public class ListViewPage extends SecuredPage<ListViewPage> {
public static final String DEFAULT_SCOPE_LABEL = "All";
private Domain domain;
@FindBy(id = "listViewTable_wrapper")
private WebElement listViewTable;
private FilterFormComponent filterFormComponent;
public ListViewPage( SeleniumContext seleniumContext, Domain domain ) {
super( seleniumContext );
filterFormComponent = new FilterFormComponent( seleniumContext );
this.domain = domain;
}
public DataTableComponent getDataTable() {
return new DataTableComponent( listViewTable, seleniumContext );
}
@Override
protected void load() {
webDriver().get( baseUrl().toString() + "/domain/" + domain.getDomainTypeName() );
}
@Override
protected void isLoaded() throws Error {
try {
webDriver().waitForElementVisible( listViewTable );
} catch ( TimeoutException e ) {
fail( "ListViewTable was not found on ListViewPage" );
}
try {
webDriver().waitForElementVisible( getScope( DEFAULT_SCOPE_LABEL ) );
} catch ( TimeoutException e ) {
fail( "Default scope is not displayed" );
}
}
public void openAdvancedSearch() {
filterFormComponent.openAdvancedSearch();
}
public void selectScope( String scopeLabel ) {
getScope( scopeLabel ).click();
}
public boolean scopeIsHighlighted( String scopeLabel ) {
try {
return getScope( scopeLabel ).getAttribute( "class" ).contains( "active" );
} catch ( NoSuchElementException e ) {
return false;
}
}
public void resetFilter() {
filterFormComponent.resetFilter();
}
public void filter( String filterField, String filterValue ) {
filterFormComponent.filter( filterField, filterValue );
}
private WebElement getScope( String scopeLabel ) {
return webDriver().findElement( By.partialLinkText( scopeLabel ) );
}
public QuickViewComponent showQuickViewForItem( int itemId ) {
return getDataTable().showQuickViewFor( itemId );
}
public QuickViewComponent showQuickViewForItem( String itemName ) {
return getDataTable().showQuickViewFor( itemName );
}
public int getScopeCount( String scope ) {
String fullScopeLabel = getScope( scope ).getText();
return Integer.parseInt( fullScopeLabel.substring( fullScopeLabel.indexOf( "(" ) + 1, fullScopeLabel.indexOf( ")" ) ) );
}
public EditPage editItem( int i ) {
return getDataTable().editItem( i, domain.getDomainTypeName() );
}
public CreatePage navigateToCreatePage() {
webDriver().findElement( By.linkText( "Create New" ) );
return new CreatePage( seleniumContext, domain.getDomainTypeName() ).get();
}
public void deleteItemByName( String itemName ) {
getDataTable().deleteItemByName( itemName );
}
public String[] getFilterCaptions() {
return filterFormComponent.getCaptions();
}
public WebElement getRowForItem( String itemName ) {
return getDataTable().getRowForItem( itemName );
}
}