/*
* Copyright 2016 Hewlett-Packard Enterprise Development Company, L.P.
* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
*/
package com.autonomy.abc.selenium.find.save;
import com.autonomy.abc.selenium.find.application.BIIdolFind;
import com.autonomy.abc.selenium.find.application.BIIdolFindElementFactory;
import com.autonomy.abc.selenium.find.comparison.ComparisonModal;
import com.hp.autonomy.frontend.selenium.util.Waits;
import org.openqa.selenium.TimeoutException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
public class SavedSearchService {
private static final Logger LOGGER = LoggerFactory.getLogger(SavedSearchService.class);
private final BIIdolFindElementFactory elementFactory;
public SavedSearchService(final BIIdolFind find) {
elementFactory = find.elementFactory();
}
public void saveCurrentAs(final String searchName, final SearchType type) {
Waits.loadOrFadeWait();
nameSavedSearch(searchName, type).confirmSave();
}
public void renameCurrentAs(final String newSearchName) {
final SearchOptionsBar optionsBar = elementFactory.getSearchOptionsBar();
Waits.loadOrFadeWait();
optionsBar.renameButton().click();
optionsBar.searchTitleInput().setValue(newSearchName);
optionsBar.confirmSave();
}
public SearchOptionsBar nameSavedSearch(final String searchName, final SearchType type) {
final SearchOptionsBar options = elementFactory.getSearchOptionsBar();
options.saveAsButton(type).click();
options.searchTitleInput().setValue(searchName);
return options;
}
public void openNewTab() {
elementFactory.getSearchTabBar().newTabButton().click();
elementFactory.getTopicMap().waitForMapLoaded();
elementFactory.getSearchTabBar().hoverOnTab(0);
}
public void waitForSomeTabsAndDelete() {
try {
elementFactory.getSearchTabBar().waitUntilSavedSearchAppears();
deleteAll();
} catch(final TimeoutException ignored) {
LOGGER.info("Timed out waiting for a Saved Search to appear");
deleteAll();
}
}
//TODO: Still not deleting the tabs but really a problem with the app's slow deletion
public void deleteAll() {
final SearchTabBar tabBar = elementFactory.getSearchTabBar();
final List<String> savedTitles = tabBar.savedTabTitles();
LOGGER.info("Saved titles: " + savedTitles);
for(final String title : savedTitles) {
elementFactory.getSearchTabBar().tab(title).activate();
elementFactory.getFindPage().waitForLoad();
deleteCurrentSearch();
tabBar.waitUntilTabGone(title);
}
}
public void deleteCurrentSearch() {
final SearchOptionsBar options = elementFactory.getSearchOptionsBar();
options.delete();
Waits.loadOrFadeWait();
}
public void compareCurrentWith(final String savedSearchName) {
final ComparisonModal modal = elementFactory.getFindPage().openCompareModal();
modal.select(savedSearchName);
modal.compareButton().click();
modal.waitForComparisonToLoad();
}
/**
* Click the reset button for the current query, then click to confirm in the modal.
*/
public void resetCurrentQuery() {
final SearchOptionsBar options = elementFactory.getSearchOptionsBar();
options.openResetModal();
options.confirmModalOperation();
Waits.loadOrFadeWait();
}
}