package com.crawljax.condition.eventablecondition;
import java.util.ArrayList;
import java.util.List;
import com.crawljax.browser.EmbeddedBrowser;
import com.crawljax.condition.Condition;
import com.crawljax.core.state.Eventable;
import com.crawljax.util.XPathHelper;
/**
* An EventableCondition specifies properties of an {@link Eventable} which should be satisfied in
* order to crawl the element. The user does not need this class when using the API. Only for use
* with properties files .
*/
public class EventableCondition {
private final String id;
private List<Condition> conditions = new ArrayList<Condition>();
private String inXPath;
private List<String> linkedInputFields = new ArrayList<String>();
/**
* @param id
* Identifier.
*/
public EventableCondition(String id) {
this.id = id;
}
/**
* @param id
* Identifier.
* @param linkedInputFields
* List of input fields.
*/
public EventableCondition(String id, List<String> linkedInputFields) {
this.id = id;
this.linkedInputFields = linkedInputFields;
}
/**
* @param id
* Identifier.
* @param conditions
* Conditions that should be satisfied.
*/
public EventableCondition(String id, Condition... conditions) {
this.id = id;
for (Condition condition : conditions) {
this.conditions.add(condition);
}
}
/**
* @param browser
* The browser.
* @return true iff all the conditions are satisfied.
*/
public boolean checkAllConditionsSatisfied(EmbeddedBrowser browser) {
for (Condition condition : getConditions()) {
if (!condition.check(browser)) {
return false;
}
}
return true;
}
/**
* @return id
*/
public String getId() {
return id;
}
/**
* @return The conditions.
*/
public List<Condition> getConditions() {
return conditions;
}
/**
* @return The inXPath.
*/
public String getInXPath() {
return inXPath;
}
/**
* @return The linked input fields.
*/
public List<String> getLinkedInputFields() {
return linkedInputFields;
}
/**
* @param linkedInputFields
* The linked input fields.
*/
public void setLinkedInputFields(List<String> linkedInputFields) {
this.linkedInputFields = linkedInputFields;
}
/**
* @param inXPath
* The inXPath expression.
*/
public void setInXPath(String inXPath) {
this.inXPath = XPathHelper.formatXPath(inXPath);
}
/**
* @param conditions
* the conditions to set
*/
public void setConditions(List<Condition> conditions) {
this.conditions = conditions;
}
/**
* Add a new condition to the list of conditions.
*
* @param condition
* The condition.
*/
public void addCondition(Condition condition) {
this.conditions.add(condition);
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("EventableCondition [");
if (id != null) {
builder.append("id=");
builder.append(id);
builder.append(", ");
}
if (conditions != null) {
builder.append("conditions=");
builder.append(conditions);
builder.append(", ");
}
if (inXPath != null) {
builder.append("inXPath=");
builder.append(inXPath);
builder.append(", ");
}
if (linkedInputFields != null) {
builder.append("linkedInputFields=");
builder.append(linkedInputFields);
}
builder.append("]");
return builder.toString();
}
}