package com.autonomy.abc.selenium.find.save;
import com.hp.autonomy.frontend.selenium.element.Dropdown;
import com.hp.autonomy.frontend.selenium.element.FormInput;
import com.hp.autonomy.frontend.selenium.element.Menu;
import com.hp.autonomy.frontend.selenium.util.ElementUtil;
import com.hp.autonomy.frontend.selenium.util.Waits;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import static org.openqa.selenium.support.ui.ExpectedConditions.stalenessOf;
import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated;
public class SearchOptionsBar {
private final WebDriver driver;
private final WebElement bar;
public SearchOptionsBar(final WebDriver driver) {
this.driver = driver;
bar = driver.findElement(By.cssSelector(".query-service-view-container > :not(.hide):not(.search-tabs-container) .search-options-container"));
}
public WebElement saveAsButton(final SearchType type){
return findElement(By.cssSelector(".show-save-as[data-search-type='"+type+"']"));
}
FormInput searchTitleInput() {
return new FormInput(findElement(By.className("search-title-input")), driver);
}
public void cancelSave(){
bar.findElement(By.className("save-title-cancel-button")).click();
}
void confirmSave() {
final WebElement confirmButton = saveConfirmButton();
confirmButton.click();
new WebDriverWait(driver, 120)
.withMessage("saving a search")
.until(new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(final WebDriver driver) {
return bar.findElements(By.cssSelector(".search-title-input-container")).isEmpty();
}
});
}
public WebElement saveConfirmButton() {
return findElement(By.className("save-title-confirm-button"));
}
public WebElement renameButton() {
return findElement(By.cssSelector(".show-rename-button"));
}
public String getSaveErrorMessage() {
return findElement(By.className("search-title-error-message")).getText();
}
public void delete() {
openDeleteModal();
confirmModalOperation();
Waits.loadOrFadeWait();
}
private void openDeleteModal() {
extraOptions().select("Delete");
}
public void openSnapshotAsQuery() {
extraOptions().select("Open as Query");
}
public void openResetModal() {
extraOptions().select("Reset");
}
//Ellipsis unicode character used
public void exportResultsToCSV() { extraOptions().select("Export Results to CSV\u2026");}
private Menu<String> extraOptions() {
final WebElement dropdown = findElement(By.cssSelector("[data-toggle=dropdown]"));
return new Dropdown(ElementUtil.getParent(dropdown), driver);
}
public void confirmModalOperation() {
final WebElement confirmModal = new WebDriverWait(driver, 10)
.until(visibilityOfElementLocated(By.className("modal-content")));
confirmModal.findElement(By.className("okButton")).click();
new WebDriverWait(driver, 10).until(stalenessOf(confirmModal));
}
private WebElement findElement(final By locator) {
return bar.findElement(locator);
}
}