package org.concordion.internal;
import org.concordion.api.Command;
import org.concordion.api.Element;
import org.concordion.api.Evaluator;
import org.concordion.api.Resource;
import org.concordion.api.ResultRecorder;
import org.concordion.internal.util.Check;
/**
* Nested CommandCalls form an abstract syntax tree. (The XML is the concrete
* syntax tree.)
*/
public class CommandCall {
private final CommandCallList children = new CommandCallList();
private final Command command;
private final String expression;
private final Resource resource;
private Element element;
public CommandCall(Command command, Element element, String expression, Resource resource) {
this.command = command;
this.element = element;
this.expression = expression;
this.resource = resource;
}
public void setUp(Evaluator evaluator, ResultRecorder resultRecorder) {
command.setUp(this, evaluator, resultRecorder);
}
public void execute(Evaluator evaluator, ResultRecorder resultRecorder) {
command.execute(this, evaluator, resultRecorder);
}
public void verify(Evaluator evaluator, ResultRecorder resultRecorder) {
command.verify(this, evaluator, resultRecorder);
}
public void appendChild(CommandCall commandNode) {
children.append(commandNode);
}
public CommandCallList getChildren() {
return children;
}
public Command getCommand() {
return command;
}
public Element getElement() {
return element;
}
public String getExpression() {
return expression;
}
public Resource getResource() {
return resource;
}
public boolean hasChildCommands() {
return !children.isEmpty();
}
public void setElement(Element element) {
Check.notNull(element, "element is null");
this.element = element;
}
}