View Javadoc
1   package org.argeo.support.freemarker.ui;
2   
3   import java.io.File;
4   import java.io.IOException;
5   import java.io.StringWriter;
6   import java.util.HashMap;
7   import java.util.Map;
8   
9   import javax.jcr.Node;
10  import javax.jcr.RepositoryException;
11  
12  import org.argeo.cms.ui.CmsUiProvider;
13  import org.argeo.support.freemarker.JcrModel;
14  import org.eclipse.swt.SWT;
15  import org.eclipse.swt.browser.Browser;
16  import org.eclipse.swt.widgets.Composite;
17  import org.eclipse.swt.widgets.Control;
18  
19  import freemarker.template.Configuration;
20  import freemarker.template.Template;
21  import freemarker.template.TemplateExceptionHandler;
22  
23  public class FmUiProvider implements CmsUiProvider {
24  	static Configuration cfg;
25  	static {
26  		try {
27  			cfg = new Configuration(Configuration.VERSION_2_3_28);
28  			cfg.setDirectoryForTemplateLoading(new File(System.getProperty("user.home") + File.separator + "dev"
29  					+ File.separator + "work" + File.separator + "ftl"));
30  			cfg.setDefaultEncoding("UTF-8");
31  			cfg.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER);
32  			cfg.setLogTemplateExceptions(false);
33  			cfg.setWrapUncheckedExceptions(true);
34  		} catch (IOException e) {
35  			// TODO Auto-generated catch block
36  			e.printStackTrace();
37  		}
38  	}
39  
40  	private String template;
41  
42  	public FmUiProvider(String template) {
43  		this.template = template;
44  	}
45  
46  	@Override
47  	public Control createUi(Composite parent, Node context) throws RepositoryException {
48  		Browser browser = new Browser(parent, SWT.NONE);
49  		try {
50  			Map<String, Object> root = new HashMap<>();
51  			if (context != null)
52  				root.put("node", new JcrModel(context));
53  			root.put("basePath", "./");
54  
55  			Template temp = cfg.getTemplate(template);
56  			StringWriter out = new StringWriter();
57  			temp.process(root, out);
58  			browser.setText(out.toString());
59  		} catch (Exception e) {
60  			// TODO Auto-generated catch block
61  			e.printStackTrace();
62  		}
63  
64  		return browser;
65  	}
66  
67  }