package moulder;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import moulder.Registry.TemplatorConfig;
import moulder.moulds.helpers.MouldersApplier;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;
public class MoulderShop {
private final Registry registry = new Registry();
public MoulderChain select(String selector) {
List<Moulder> moulders = new ArrayList<Moulder>();
registry.register(selector, moulders);
return new MoulderChain(moulders);
}
public MoulderShop register(String selector, Moulder... moulders) {
return register(selector, Arrays.asList(moulders));
}
public MoulderShop register(String selector, List<Moulder> templators) {
registry.register(selector, templators);
return this;
}
public void process(Document doc) {
for (TemplatorConfig c : registry.getConfig()) {
Elements elements = doc.select(c.selector);
for (Element e : elements) {
Collection<Node> oes = MouldersApplier.applyMoulders(c.templators, Arrays.<Node>asList(e));
// replace e with oes
for (Node oe : oes) {
e.before(oe.outerHtml());
}
e.remove();
}
}
}
public Document process(InputStream stream) {
Document doc;
try {
doc = Jsoup.parse(stream, null, "#");
} catch (IOException e) {
throw new RuntimeException(e);
}
process(doc);
return doc;
}
}