From: Mathieu Baudier Date: Sat, 4 Jan 2020 10:31:10 +0000 (+0100) Subject: Move Freemarker support to Argeo Connect X-Git-Tag: argeo-commons-2.1.85~47 X-Git-Url: http://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=commitdiff_plain;h=2127476b002a080b747fd90cc5ff7fad029e0e62 Move Freemarker support to Argeo Connect --- diff --git a/org.argeo.cms.ui/src/org/argeo/cms/script/Html.java b/org.argeo.cms.ui/src/org/argeo/cms/script/Html.java deleted file mode 100644 index e9f4f6967..000000000 --- a/org.argeo.cms.ui/src/org/argeo/cms/script/Html.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.argeo.cms.script; - -import javax.jcr.Node; -import javax.jcr.RepositoryException; - -import org.argeo.cms.ui.fm.FmUiProvider; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; - -public class Html { - private String template; - private Node context; - - private Control control; - - public Html(Composite parent, String template, Node context) throws RepositoryException { - this.template = template; - this.context = context; - this.control = new FmUiProvider(this.template).createUi(parent, context); - } - - public Html(Composite parent, String template) throws RepositoryException { - this(parent, template, null); - } - - public String getTemplate() { - return template; - } - - public Node getContext() { - return context; - } - - public Control getControl() { - return control; - } - -} diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/fm/FmUiProvider.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/fm/FmUiProvider.java deleted file mode 100644 index c9d05e15b..000000000 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/fm/FmUiProvider.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.argeo.cms.ui.fm; - -import java.io.File; -import java.io.IOException; -import java.io.StringWriter; -import java.util.HashMap; -import java.util.Map; - -import javax.jcr.Node; -import javax.jcr.RepositoryException; - -import org.argeo.cms.ui.CmsUiProvider; -import org.argeo.fm.jcr.JcrModel; -import org.eclipse.swt.SWT; -import org.eclipse.swt.browser.Browser; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; - -import freemarker.template.Configuration; -import freemarker.template.Template; -import freemarker.template.TemplateExceptionHandler; - -public class FmUiProvider implements CmsUiProvider { - static Configuration cfg; - static { - try { - cfg = new Configuration(Configuration.VERSION_2_3_28); - cfg.setDirectoryForTemplateLoading(new File(System.getProperty("user.home") + File.separator + "dev" - + File.separator + "work" + File.separator + "ftl")); - cfg.setDefaultEncoding("UTF-8"); - cfg.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER); - cfg.setLogTemplateExceptions(false); - cfg.setWrapUncheckedExceptions(true); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private String template; - - public FmUiProvider(String template) { - this.template = template; - } - - @Override - public Control createUi(Composite parent, Node context) throws RepositoryException { - Browser browser = new Browser(parent, SWT.NONE); - try { - Map root = new HashMap<>(); - if (context != null) - root.put("node", new JcrModel(context)); - root.put("basePath", "./"); - - Template temp = cfg.getTemplate(template); - StringWriter out = new StringWriter(); - temp.process(root, out); - browser.setText(out.toString()); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - return browser; - } - -} diff --git a/org.argeo.cms/src/org/argeo/cms/internal/http/HtmlServlet.java b/org.argeo.cms/src/org/argeo/cms/internal/http/HtmlServlet.java deleted file mode 100644 index f997c6dec..000000000 --- a/org.argeo.cms/src/org/argeo/cms/internal/http/HtmlServlet.java +++ /dev/null @@ -1,129 +0,0 @@ -package org.argeo.cms.internal.http; - -import java.io.File; -import java.io.IOException; -import java.net.URLDecoder; -import java.nio.charset.StandardCharsets; -import java.security.PrivilegedExceptionAction; -import java.util.HashMap; -import java.util.Map; - -import javax.jcr.Node; -import javax.jcr.Repository; -import javax.jcr.Session; -import javax.security.auth.Subject; -import javax.security.auth.login.LoginContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.argeo.cms.CmsException; -import org.argeo.cms.auth.HttpRequestCallbackHandler; -import org.argeo.fm.jcr.JcrModel; -import org.argeo.jcr.JcrUtils; -import org.argeo.node.NodeConstants; -import org.osgi.framework.BundleContext; -import org.osgi.framework.FrameworkUtil; -import org.osgi.framework.ServiceReference; -import org.osgi.util.tracker.ServiceTracker; - -import freemarker.template.Configuration; -import freemarker.template.SimpleScalar; -import freemarker.template.Template; -import freemarker.template.TemplateExceptionHandler; - -public class HtmlServlet extends HttpServlet { - private static final long serialVersionUID = 2083925371199357045L; - static String base = System.getProperty("user.home") + File.separator + "dev" + File.separator + "work" - + File.separator + "ftl"; - static Configuration cfg; - static { - try { - cfg = new Configuration(Configuration.VERSION_2_3_28); - cfg.setDirectoryForTemplateLoading(new File(base)); - cfg.setDefaultEncoding("UTF-8"); - cfg.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER); - cfg.setLogTemplateExceptions(false); - cfg.setWrapUncheckedExceptions(true); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - private final BundleContext bc = FrameworkUtil.getBundle(getClass()).getBundleContext(); - private ServiceTracker repositorySt; - - private Repository repository; - - @Override - public void init() throws ServletException { - repositorySt = new ServiceTracker(bc, Repository.class, null) { - - @Override - public Repository addingService(ServiceReference reference) { - String cn = reference.getProperty(NodeConstants.CN).toString(); - Repository repo = super.addingService(reference); - if (NodeConstants.NODE.equals(cn)) - repository = repo; - return repo; - } - - }; - repositorySt.open(); - } - - @Override - public void destroy() { - if (repositorySt != null) - repositorySt.close(); - } - - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { -// String path = req.getPathInfo(); - String path = URLDecoder.decode(req.getPathInfo(), StandardCharsets.UTF_8.name()); - String servletPath = req.getServletPath(); - String[] p = path.split("/"); - - String basePath = servletPath + '/' + p[1]; - String template = p[1] + ".ftl"; - StringBuilder sb = new StringBuilder(); - for (int i = 2; i < p.length; i++) - sb.append('/').append(p[i]); - String nodePath = sb.toString(); - if ("".equals(nodePath.trim())) - nodePath = "/"; // root node - Session session = null; - try { - LoginContext lc = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, - new HttpRequestCallbackHandler(req, resp)); - lc.login(); - session = Subject.doAs(lc.getSubject(), new PrivilegedExceptionAction() { - - @Override - public Session run() throws Exception { - Session session = repository.login(); - return session; - } - }); - - Node node = session.getNode(nodePath); - - Template t = cfg.getTemplate(template); - Map root = new HashMap<>(); - root.put("node", new JcrModel(node)); - root.put("basePath", new SimpleScalar(basePath)); - - t.process(root, resp.getWriter()); - - resp.setContentType("text/html"); - } catch (Exception e) { - throw new CmsException("Cannot process template", e); - } finally { - JcrUtils.logoutQuietly(session); - } - } - -} diff --git a/org.argeo.core/src/org/argeo/fm/Animal.java b/org.argeo.core/src/org/argeo/fm/Animal.java deleted file mode 100644 index 946087cac..000000000 --- a/org.argeo.core/src/org/argeo/fm/Animal.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.argeo.fm; - -public class Animal { - String size; - int price; - - public Animal(String size, int price) { - super(); - this.size = size; - this.price = price; - } - - public String getSize() { - return size; - } - - public void setSize(String size) { - this.size = size; - } - - public int getPrice() { - return price; - } - - public void setPrice(int price) { - this.price = price; - } - -} \ No newline at end of file diff --git a/org.argeo.core/src/org/argeo/fm/Product.java b/org.argeo.core/src/org/argeo/fm/Product.java deleted file mode 100644 index a57ae0d26..000000000 --- a/org.argeo.core/src/org/argeo/fm/Product.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.argeo.fm; - -/** - * Product bean; note that it must be a public class! - */ -public class Product { - - private String url; - private String name; - - // As per the JavaBeans spec., this defines the "url" bean property - // It must be public! - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - // As per the JavaBean spec., this defines the "name" bean property - // It must be public! - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - -} \ No newline at end of file diff --git a/org.argeo.core/src/org/argeo/fm/TestFreeMarker.java b/org.argeo.core/src/org/argeo/fm/TestFreeMarker.java deleted file mode 100644 index 96c0a21e4..000000000 --- a/org.argeo.core/src/org/argeo/fm/TestFreeMarker.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.argeo.fm; - -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.Writer; -import java.util.HashMap; -import java.util.Map; - -import freemarker.template.Configuration; -import freemarker.template.Template; -import freemarker.template.TemplateExceptionHandler; - -public class TestFreeMarker { - static String base = System.getProperty("user.home") + File.separator + "dev" + File.separator + "work" - + File.separator + "ftl"; - static Configuration cfg; - static { - try { - cfg = new Configuration(Configuration.VERSION_2_3_28); - cfg.setDirectoryForTemplateLoading(new File(base)); - cfg.setDefaultEncoding("UTF-8"); - cfg.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER); - cfg.setLogTemplateExceptions(false); - cfg.setWrapUncheckedExceptions(true); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - public static void main(String[] args) { - if (args.length == 0) { - System.err.println("Usage: