// Path: src/main/java/moulder/Moulder.java
// public interface Moulder {
//     /**
//      * This is where a moulder can process the input element to generate its
//      * result.
//      *
//      * @param element the element and its associated data to process
//      * @return the list of nodes and their associated data that were generated
//      *         after processing the input element.
//      */
//     List<Node> process(Element element);
// }
// 
// Path: src/main/java/moulder/Value.java
// public interface Value<T> {
// 	/**
// 	 * 
// 	 * @return the generated value
// 	 */
// 	T get();
// }
// 
// Path: src/main/java/moulder/values/SimpleValue.java
// public class SimpleValue<T> implements Value<T> {
//     private final T value;
// 
//     /**
//      * @param value the value to be returned by {@link #get()}
//      */
//     public SimpleValue(T value) {
//         this.value = value;
//     }
// 
//     public T get() {
//         return value;
//     }
// }


import moulder.Moulder;
import moulder.Value;
import moulder.values.SimpleValue;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import java.util.List;
package moulder.moulds;



/**
 * 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,
// Path: src/main/java/moulder/Moulder.java
// public interface Moulder {
//     /**
//      * This is where a moulder can process the input element to generate its
//      * result.
//      *
//      * @param element the element and its associated data to process
//      * @return the list of nodes and their associated data that were generated
//      *         after processing the input element.
//      */
//     List<Node> process(Element element);
// }
// 
// Path: src/main/java/moulder/Value.java
// public interface Value<T> {
// 	/**
// 	 * 
// 	 * @return the generated value
// 	 */
// 	T get();
// }
// 
// Path: src/main/java/moulder/values/SimpleValue.java
// public class SimpleValue<T> implements Value<T> {
//     private final T value;
// 
//     /**
//      * @param value the value to be returned by {@link #get()}
//      */
//     public SimpleValue(T value) {
//         this.value = value;
//     }
// 
//     public T get() {
//         return value;
//     }
// }


// Path: src/main/java/moulder/moulds/IfMoulder.java
import moulder.Moulder;
import moulder.Value;
import moulder.values.SimpleValue;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import java.util.List;

package moulder.moulds;



/**
 * 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) {