/*******************************************************************************
* Copyright (c) 2010-2014 SAP AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.skalli.selenium.pageobjects.ext.editform;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.skalli.selenium.pageobjects.ext.AbstractExtensionEditForm;
import org.eclipse.skalli.selenium.pageobjects.ext.util.PositionProvider;
import org.eclipse.skalli.selenium.pageobjects.ext.util.RemovableUserEntry;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.RemoteWebElement;
import org.openqa.selenium.support.PageFactory;
/**
* This is the extension edit form for the project members extension
*/
public class ProjectMembersExtensionEditForm extends AbstractExtensionEditForm {
public ProjectMembersExtensionEditForm(WebDriver driver) {
super(driver, PositionProvider.getPositionNumberOfExtensionsEditForm(driver,
PositionProvider.getProjectMembersExtensionEditFormName()));
}
@Override
protected boolean isExtensionContentDisplayed() {
//project leads user section and committers user section element can be a closed tag -> isDisplayed returns false
return getProjectLeadsAddUserLink().isDisplayed() && getCommittersAddUserLink().isDisplayed()
&& (getProjectLeadsUsersSection() instanceof RemoteWebElement)
&& (getCommittersUsersSection() instanceof RemoteWebElement) && areProjectLeadUsersDisplayed()
&& areCommitterUsersDisplayed();
}
private boolean areProjectLeadUsersDisplayed() {
List<RemovableUserEntry> projectLeadUserEntries = getProjectLeadUsers();
for (Iterator<RemovableUserEntry> iterator = projectLeadUserEntries.iterator(); iterator.hasNext();) {
RemovableUserEntry projectLeadUserEntry = (RemovableUserEntry) iterator.next();
if (!projectLeadUserEntry.isDisplayed()) {
return false;
}
}
return true;
}
private boolean areCommitterUsersDisplayed() {
List<RemovableUserEntry> committerUserEntries = getCommittersUsers();
for (Iterator<RemovableUserEntry> iterator = committerUserEntries.iterator(); iterator.hasNext();) {
RemovableUserEntry committerUserEntry = (RemovableUserEntry) iterator.next();
if (!committerUserEntry.isDisplayed()) {
return false;
}
}
return true;
}
//driver must be located on the edit form
public int getNumberOfProjectLeadUsers() {
WebElement root = driver.findElement(By.xpath(getXPathToProjectLeadsUsersSection()));
List<WebElement> userRoots = root.findElements(By.xpath("./tr"));
return userRoots.size();
}
//driver must be located on the edit form
public List<RemovableUserEntry> getProjectLeadUsers() {
List<RemovableUserEntry> users = new ArrayList<RemovableUserEntry>();
for (int i = 1; i <= getNumberOfProjectLeadUsers(); i++) {
users.add(PageFactory.initElements(driver, RemovableUserEntry.class).setBaseXPath(
getXPathToProjectLeadsUsersSection() + "/tr[" + i + "]/td[1]/div/div/div/div/div/div"));
}
return users;
}
//driver must be located on the edit form
public int getNumberOfCommittersUsers() {
WebElement root = driver.findElement(By.xpath(getXPathToCommittersUsersSection()));
List<WebElement> userRoots = root.findElements(By.xpath("./tr"));
return userRoots.size();
}
//driver must be located on the edit form
public List<RemovableUserEntry> getCommittersUsers() {
List<RemovableUserEntry> users = new ArrayList<RemovableUserEntry>();
for (int i = 1; i <= getNumberOfCommittersUsers(); i++) {
users.add(PageFactory.initElements(driver, RemovableUserEntry.class).setBaseXPath(
getXPathToCommittersUsersSection() + "/tr[" + i + "]/td[1]/div/div/div/div/div/div"));
}
return users;
}
public void clickProjectLeadsAddUserLink() {
getProjectLeadsAddUserLink().click();
}
public void clickCommittersAddUserLink() {
getCommittersAddUserLink().click();
}
protected WebElement getProjectLeadsAddUserLink() {
return driver.findElement(By.xpath(getXPathToProjectLeadsAddUserLink()));
}
protected WebElement getCommittersAddUserLink() {
return driver.findElement(By.xpath(getXPathToCommittersAddUserLink()));
}
protected WebElement getProjectLeadsUsersSection() {
return driver.findElement(By.xpath(getXPathToProjectLeadsUsersSection()));
}
protected WebElement getCommittersUsersSection() {
return driver.findElement(By.xpath(getXPathToCommittersUsersSection()));
}
private String getXPathToProjectLeadsAddUserLink() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 1
+ "]/td[3]/div/div/div/div[" + 2 + "]" + "/div/div/span/span";
}
private String getXPathToCommittersAddUserLink() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 2
+ "]/td[3]/div/div/div/div[" + 2 + "]" + "/div/div/span/span";
}
private String getXPathToProjectLeadsUsersSection() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 1
+ "]/td[3]/div/div/div/div[" + 1 + "]" + "/div/div/div[2]/div/table/tbody";
}
private String getXPathToCommittersUsersSection() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 2
+ "]/td[3]/div/div/div/div[" + 1 + "]" + "/div/div/div[2]/div/table/tbody";
}
}