package com.autonomy.abc.selenium.find.bi;
import com.autonomy.abc.selenium.find.Container;
import com.google.common.base.Function;
import com.hp.autonomy.frontend.selenium.util.DriverUtil;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.Point;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.util.List;
public class SunburstView extends ParametricFieldView {
private static final int SUNBURST_LOAD_TIMEOUT = 60;
public SunburstView(final WebDriver driver) {
super(driver, By.xpath(".//*[contains(@class,'parametric-content') and contains(@class,'sunburst')]/../.."));
}
//Display
public boolean sunburstVisible() {
return findElement(By.cssSelector(".sunburst svg")).isDisplayed();
}
public List<WebElement> findSunburstSegments() {
return Container.currentTabContents(getDriver())
.findElements(By.cssSelector(".sunburst path:not([fill='#f0f0f0']):not([fill='#ffffff']):not([fill='white'])"));
}
public int numberOfSunburstSegments() {
return findSunburstSegments().size();
}
public void waitForSunburst() {
new WebDriverWait(getDriver(), SUNBURST_LOAD_TIMEOUT).withMessage("waiting for sunburst or sunburst message")
.until((Function<? super WebDriver, Boolean>) driver -> {
final WebElement sunburstView = driver.findElement(By.xpath(".//*[contains(@class,'parametric-content') and contains(@class,'sunburst')]/../.."));
return (!sunburstView.findElements(By.cssSelector("svg")).isEmpty()
|| sunburstView.findElement(By.cssSelector(".parametric-view-message")).isDisplayed())
&& !sunburstView.findElement(By.cssSelector(".parametric-loading")).isDisplayed();
});
}
//TODO: IE specific stale element exception: may be IE driver related or bug.
public String getSunburstCentreName() {
return sunburstCentre().getText();
}
private WebElement sunburstCentre() {
return findElement(By.className("sunburst-sector-name"));
}
private boolean sunburstCentreHasText() {
return !findElements(By.className("sunburst-sector-name")).isEmpty();
}
public WebElement getIthSunburstSegment(final int i) {
final List<WebElement> actualSegments = findSunburstSegments();
return actualSegments.get(i);
}
public void hoverOverTooFewToDisplaySegment() {
final WebElement areaWithGrey = findElement(By.cssSelector("svg > path[fill='#f0f0f0']"));
final Dimension dimensions = areaWithGrey.getSize();
DriverUtil.hoveringOffSide(areaWithGrey, new Point(dimensions.getWidth() / 6, dimensions.getHeight() / 2), getDriver());
}
public boolean greySunburstAreaExists() {
return !findElements(By.cssSelector("svg > path[fill='#f0f0f0']")).isEmpty();
}
public String hoverOnSegmentGetCentre(final int i) {
segmentHover(getIthSunburstSegment(i));
return getSunburstCentreName();
}
public void segmentHover(final WebElement segment) {
DriverUtil.hover(getDriver(), segment);
if (!sunburstCentreHasText() || sunburstCentreHasText() && "Parametric Distribution".equals(getSunburstCentreName())) {
specialHover(segment);
}
}
private void specialHover(final WebElement segment) {
final Dimension dimensions = segment.getSize();
DriverUtil.hoveringOffSide(segment, new Point(dimensions.getWidth() / 4 * 3, dimensions.getHeight() / 2), getDriver());
if (!sunburstCentreHasText() || sunburstCentreHasText() && "Parametric Distribution".equals(getSunburstCentreName())) {
DriverUtil.hoveringOffSide(segment, new Point(dimensions.getWidth() / 4, dimensions.getHeight() / 2), getDriver());
}
}
}