/*
* Copyright 2015-2016 Hewlett-Packard 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.filters;
import com.autonomy.abc.selenium.query.DatePickerFilter;
import com.autonomy.abc.selenium.query.StringDateFilter;
import com.hp.autonomy.frontend.selenium.element.DatePicker;
import com.hp.autonomy.frontend.selenium.element.FormInput;
import com.hp.autonomy.frontend.selenium.util.ElementUtil;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
public class DateFilterContainer extends ListFilterContainer implements DatePickerFilter.Filterable, StringDateFilter.Filterable {
private static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy/MM/dd HH:mm");
private final WebDriver driver;
DateFilterContainer(final WebElement element, final WebDriver webDriver) {
super(element, webDriver);
driver = webDriver;
}
public List<WebElement> getFilters() {
return getContainer().findElements(By.cssSelector("[data-filter-id] > td:nth-child(2)"));
}
@Override
public List<String> getFilterNames() {
return ElementUtil.getTexts(getFilters());
}
private boolean isFilteringBy(final DateOption filter) {
final WebElement checkIcon = findDateFilter(filter).findElement(By.tagName("i"));
return !ElementUtil.hasClass("hide", checkIcon);
}
void toggleFilter(final DateOption filter) {
expand();
findDateFilter(filter).click();
}
private WebElement findDateFilter(final DateOption filter) {
return getContainer().findElement(By.cssSelector("[data-filter-id='" + filter + "']"));
}
@Override
public DatePicker fromDatePicker() {
return datePicker(1);
}
@Override
public DatePicker untilDatePicker() {
return datePicker(2);
}
private DatePicker datePicker(final int nthOfType) {
showCustomDateBoxes();
final WebElement formGroup = getContainer().findElement(By.cssSelector(".search-dates-wrapper .form-group:nth-of-type(" + nthOfType + ')'));
return new DatePicker(formGroup, driver);
}
@Override
public FormInput fromDateInput() {
return dateInput(1);
}
@Override
public FormInput untilDateInput() {
return dateInput(2);
}
@Override
public String formatInputDate(final Date date) {
return FORMAT.format(date);
}
private FormInput dateInput(final int nthOfType) {
showCustomDateBoxes();
final WebElement inputBox = getContainer().findElement(By.cssSelector(".search-dates-wrapper .form-group:nth-of-type(" + nthOfType + ") input"));
return new FormInput(inputBox, driver);
}
private void showCustomDateBoxes() {
if(!isFilteringBy(DateOption.CUSTOM)) {
toggleFilter(DateOption.CUSTOM);
}
}
}