JsoupTemplateManager.java

package eu.javaexperience.web.template.jsoup;

import java.io.File;
import java.util.Map;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import eu.javaexperience.file.AbstractFile;
import eu.javaexperience.file.fs.os.OsFile;
import eu.javaexperience.interfaces.simple.getBy.GetBy1;
import eu.javaexperience.prog.Debug;
import eu.javaexperience.web.template.AbstractTemplateManager;
import eu.javaexperience.web.template.TemplateManager;
import eu.javaexperience.web.template.TemplateManagerTools;

public class JsoupTemplateManager extends AbstractTemplateManager<JsoupTemplate>
{
	public JsoupTemplateManager(AbstractFile root, Map<String, JsoupTemplate> views)
	{
		super(root, "html", views);
	}

	public static final GetBy1<JsoupTemplate, String> PARSER = new GetBy1<JsoupTemplate, String>()
	{
		@Override
		public JsoupTemplate getBy(String a)
		{
			Debug.placeholderForBreakpoint();
			boolean body = a.contains("html");
			Element e = null;
			if(body)
			{
				e = Jsoup.parse(a);
			}
			else
			{
				Elements es = Jsoup.parseBodyFragment(a).body().children();
				if(es.size() == 1)
				{
					e = es.get(0);
				}
				else
				{
					e = new Element("div");
					for(Element add:es)
					{
						e.prependChild(add);
					}
				}
			}
			
			return new JsoupTemplate(e);
		}
	};

	@Override
	public JsoupTemplate getView(String label)
	{
		JsoupTemplate t = super.getView(label);
		if(null == t)
		{
			return null;
		}
		return new JsoupTemplate(t.getElement().clone());
	}

	public static TemplateManager parseFromDir(File dir)
	{
		return new JsoupTemplateManager(new OsFile(dir), TemplateManagerTools.loadRecursiveWithDevelopementReload(dir, PARSER, "html"));
	}
}