/*******************************************************************************
* 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.RemovableFieldEntry;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.PageFactory;
/**
* This is the extension edit form for the development infrastructure extension
*/
public class DevelopmentInfrastructureExtensionEditForm extends AbstractExtensionEditForm {
public DevelopmentInfrastructureExtensionEditForm(WebDriver driver) {
super(driver, PositionProvider.getPositionNumberOfExtensionsEditForm(driver,
PositionProvider.getDevelopmentInfrastructureExtensionEditFormName()));
}
@Override
protected boolean isExtensionContentDisplayed() {
return getSourceCodeField().isDisplayed() && getBugTrackerField().isDisplayed()
&& getBuildField().isDisplayed()
&& getQualityField().isDisplayed() && getCodeReviewField().isDisplayed()
&& getRepositoriesSection().isDisplayed() && getJavadocsSection().isDisplayed()
&& getAddRepositoryLink().isDisplayed() && getAddJavadocLink().isDisplayed()
&& areRepositoriesDisplayed()
&& areJavadocsDisplayed();
}
private boolean areRepositoriesDisplayed() {
List<RemovableFieldEntry> repositoryEntries = getRepositoryEntries();
for (Iterator<RemovableFieldEntry> iterator = repositoryEntries.iterator(); iterator.hasNext();) {
RemovableFieldEntry repositoryEntry = (RemovableFieldEntry) iterator.next();
if (!repositoryEntry.isDisplayed()) {
return false;
}
}
return true;
}
private boolean areJavadocsDisplayed() {
List<RemovableFieldEntry> javadocEntries = getJavadocEntries();
for (Iterator<RemovableFieldEntry> iterator = javadocEntries.iterator(); iterator.hasNext();) {
RemovableFieldEntry javadocEntry = (RemovableFieldEntry) iterator.next();
if (!javadocEntry.isDisplayed()) {
return false;
}
}
return true;
}
public void sendKeysToSourceCodeField(String text) {
getSourceCodeField().sendKeys(text);
}
public void sendKeysToBugTrackerField(String text) {
getBugTrackerField().sendKeys(text);
}
public void sendKeysToBuildField(String text) {
getBuildField().sendKeys(text);
}
public void sendKeysToQualityField(String text) {
getQualityField().sendKeys(text);
}
public void sendKeysToCodeReviewField(String text) {
getCodeReviewField().sendKeys(text);
}
public String getSourceCodeFieldContent() {
return getSourceCodeField().getAttribute("value");
}
public String getBugTrackerFieldContent() {
return getBugTrackerField().getAttribute("value");
}
public String getBuildFieldContent() {
return getBuildField().getAttribute("value");
}
public String getQualityFieldContent() {
return getQualityField().getAttribute("value");
}
public String getCodeReviewFieldContent() {
return getCodeReviewField().getAttribute("value");
}
//driver must be located on the edit form
public int getNumberOfRepositories() {
WebElement root = driver.findElement(By.xpath(getXPathToRepositoriesSection()));
List<WebElement> repositoriesRoot = root.findElements(By.xpath("./div"));
return repositoriesRoot.size();
}
//driver must be located on the edit form
public List<RemovableFieldEntry> getRepositoryEntries() {
List<RemovableFieldEntry> repositories = new ArrayList<RemovableFieldEntry>();
for (int i = 1; i <= getNumberOfRepositories(); i++) {
repositories.add(PageFactory.initElements(driver, RemovableFieldEntry.class).setBaseXPath(
getXPathToRepositoriesSection() + "/div[" + i + "]/div/div"));
}
return repositories;
}
//numberOfRepository starting from 0 (first index)
public void clickRemoveRepositoryLink(int numberOfRepository) {
List<RemovableFieldEntry> repositoryEntries = getRepositoryEntries();
RemovableFieldEntry repositoryEntry = repositoryEntries.get(numberOfRepository);
repositoryEntry.clickRemoveLink();
}
//numberOfRepository starting from 0 (first index)
public void sendKeysToRepositoryField(String text, int numberOfRepository) {
List<RemovableFieldEntry> repositoryEntries = getRepositoryEntries();
RemovableFieldEntry repositoryEntry = repositoryEntries.get(numberOfRepository);
repositoryEntry.sendKeysToField(text);
}
//numberOfRepository starting from 0 (first index)
public String getRepository(int numberOfRepository) {
List<RemovableFieldEntry> repositoryEntries = getRepositoryEntries();
RemovableFieldEntry repositoryEntry = repositoryEntries.get(numberOfRepository);
return repositoryEntry.getFieldContent();
}
//driver must be located on the edit form
public int getNumberOfJavadocs() {
WebElement root = driver.findElement(By.xpath(getXPathToJavadocsSection()));
List<WebElement> javadocRoot = root.findElements(By.xpath("./div"));
return javadocRoot.size();
}
//driver must be located on the edit form
public List<RemovableFieldEntry> getJavadocEntries() {
List<RemovableFieldEntry> javadocs = new ArrayList<RemovableFieldEntry>();
for (int i = 1; i <= getNumberOfJavadocs(); i++) {
javadocs.add(PageFactory.initElements(driver, RemovableFieldEntry.class).setBaseXPath(
getXPathToJavadocsSection() + "/div[" + i + "]/div/div"));
}
return javadocs;
}
//numberOfJavadoc starting from 0 (first index)
public void clickRemoveJavadocsLink(int numberOfJavadoc) {
List<RemovableFieldEntry> javadocEntries = getJavadocEntries();
RemovableFieldEntry javadocEntry = javadocEntries.get(numberOfJavadoc);
javadocEntry.clickRemoveLink();
}
//numberOfJavadoc starting from 0 (first index)
public void sendKeysToJavadocField(String text, int numberOfJavadoc) {
List<RemovableFieldEntry> javadocEntries = getJavadocEntries();
RemovableFieldEntry javadocEntry = javadocEntries.get(numberOfJavadoc);
javadocEntry.sendKeysToField(text);
}
//numberOfJavadoc starting from 0 (first index)
public String getJavadoc(int numberOfJavadoc) {
List<RemovableFieldEntry> javadocEntries = getJavadocEntries();
RemovableFieldEntry javadocEntry = javadocEntries.get(numberOfJavadoc);
return javadocEntry.getFieldContent();
}
public void clickAddRepositoryLink() {
getAddRepositoryLink().click();
}
public void clickAddJavadocLink() {
getAddJavadocLink().click();
}
protected WebElement getSourceCodeField() {
return driver.findElement(By.xpath(getXPathToSourceCodeField()));
}
protected WebElement getBugTrackerField() {
return driver.findElement(By.xpath(getXPathToBugTrackerField()));
}
protected WebElement getBuildField() {
return driver.findElement(By.xpath(getXPathToBuildField()));
}
protected WebElement getQualityField() {
return driver.findElement(By.xpath(getXPathToQualityField()));
}
protected WebElement getCodeReviewField() {
return driver.findElement(By.xpath(getXPathToCodeReviewField()));
}
protected WebElement getRepositoriesSection() {
return driver.findElement(By.xpath(getXPathToRepositoriesSection()));
}
protected WebElement getJavadocsSection() {
return driver.findElement(By.xpath(getXPathToJavadocsSection()));
}
protected WebElement getAddRepositoryLink() {
return driver.findElement(By.xpath(getXPathToAddRepositoryLink()));
}
protected WebElement getAddJavadocLink() {
return driver.findElement(By.xpath(getXPathToAddJavadocLink()));
}
private String getXPathToSourceCodeField() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 1
+ "]/td[3]/input";
}
private String getXPathToBugTrackerField() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 3
+ "]/td[3]/input";
}
private String getXPathToBuildField() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 4
+ "]/td[3]/input";
}
private String getXPathToQualityField() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 5
+ "]/td[3]/input";
}
private String getXPathToCodeReviewField() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 6
+ "]/td[3]/input";
}
private String getXPathToRepositoriesSection() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 2
+ "]/td[3]/div/div/div/div";
}
private String getXPathToJavadocsSection() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 7
+ "]/td[3]/div/div/div/div";
}
private String getXPathToAddRepositoryLink() {
return getXPathToRepositoriesSection() + "/div[" + getNumberOfRepositories() + "]/div/div" + "/div["
// 1 if number is 1 because there is no remove link displayed
// 2 if number is greater than 1 because the remove link is displayed
+ (getNumberOfRepositories() == 1 ? 1 : 2) + "]/span/span";
}
private String getXPathToAddJavadocLink() {
return getXPathToJavadocsSection() + "/div[" + getNumberOfJavadocs() + "]/div/div" + "/div["
// 1 if number is 1 because there is no remove link displayed
// 2 if number is greater than 1 because the remove link is displayed
+ (getNumberOfJavadocs() == 1 ? 1 : 2) + "]/span/span";
}
}