package moulder.moulds;
import moulder.Moulder;
import moulder.Value;
import moulder.values.SimpleValue;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import java.util.List;
/**
* A moulder that depending on a boolean value will invoke one of two other
* moulder
*
* @author jawher
*
*/
public class IfMoulder implements Moulder {
private Value<Boolean> condition;
private Moulder thenMoulder;
private Moulder elseMoulder;
/**
*
* @param condition
* A value that returns a boolean value. <code>thenMoulder</code>
* will be used to process the input element if
* <code>condition</code> evaluates to true, else
* <code>elseMoulder</code>
* @param thenMoulder
* @param elseMoulder
*/
public IfMoulder(Value<Boolean> condition, Moulder thenMoulder,
Moulder elseMoulder) {
super();
this.condition = condition;
this.thenMoulder = thenMoulder;
this.elseMoulder = elseMoulder;
}
/**
* A variant of {@link #IfMoulder(moulder.Value, Moulder, Moulder)} that wraps the
* <code>condition</code> argument in a {@link SimpleValue}
*
* @param condition
* @param thenMoulder
* @param elseMoulder
*/
public IfMoulder(boolean condition, Moulder thenMoulder, Moulder elseMoulder) {
super();
this.condition = new SimpleValue<Boolean>(condition);
this.thenMoulder = thenMoulder;
this.elseMoulder = elseMoulder;
}
public List<Node> process(Element element) {
if (condition.get()) {
return thenMoulder.process(element);
} else {
return elseMoulder.process(element);
}
}
}