Move Freemarker support to Argeo Connect
authorMathieu Baudier <mbaudier@argeo.org>
Sat, 4 Jan 2020 10:31:10 +0000 (11:31 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Sat, 4 Jan 2020 10:31:10 +0000 (11:31 +0100)
org.argeo.cms.ui/src/org/argeo/cms/script/Html.java [deleted file]
org.argeo.cms.ui/src/org/argeo/cms/ui/fm/FmUiProvider.java [deleted file]
org.argeo.cms/src/org/argeo/cms/internal/http/HtmlServlet.java [deleted file]
org.argeo.core/src/org/argeo/fm/Animal.java [deleted file]
org.argeo.core/src/org/argeo/fm/Product.java [deleted file]
org.argeo.core/src/org/argeo/fm/TestFreeMarker.java [deleted file]
org.argeo.core/src/org/argeo/fm/jcr/JcrModel.java [deleted file]
org.argeo.core/src/org/argeo/fm/jcr/NodeIteratorModel.java [deleted file]

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 (file)
index e9f4f69..0000000
+++ /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 (file)
index c9d05e1..0000000
+++ /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<String, Object> 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 (file)
index f997c6d..0000000
+++ /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<Repository, Repository> repositorySt;
-
-       private Repository repository;
-
-       @Override
-       public void init() throws ServletException {
-               repositorySt = new ServiceTracker<Repository, Repository>(bc, Repository.class, null) {
-
-                       @Override
-                       public Repository addingService(ServiceReference<Repository> 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<Session>() {
-
-                               @Override
-                               public Session run() throws Exception {
-                                       Session session = repository.login();
-                                       return session;
-                               }
-                       });
-
-                       Node node = session.getNode(nodePath);
-
-                       Template t = cfg.getTemplate(template);
-                       Map<String, Object> 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 (file)
index 946087c..0000000
+++ /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 (file)
index a57ae0d..0000000
+++ /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 (file)
index 96c0a21..0000000
+++ /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: <template name> (in " + base + ")");
-               }
-               String template = args[0];
-               try {
-                       /* Create a data-model */
-                       Map<String, Object> root = new HashMap<>();
-                       root.put("user", "Big Joe");
-                       Product latest = new Product();
-                       latest.setUrl("products/greenmouse.html");
-                       latest.setName("green mouse");
-                       root.put("latestProduct", latest);
-
-                       root.put("message", "It's a test");
-
-                       Map<String, Animal> animals = new HashMap<>();
-                       animals.put("mouse", new Animal("small", 50));
-                       animals.put("elephant", new Animal("big", 2000));
-                       animals.put("dog", new Animal("medium", 150));
-                       root.put("animals", animals);
-
-                       /* Get the template (uses cache internally) */
-                       Template temp = cfg.getTemplate(template);
-
-                       /* Merge data-model with template */
-                       String target = base + File.separator + template + ".html";
-                       Writer out = new FileWriter(target);
-                       temp.process(root, out);
-                       out.flush();
-                       System.out.println("Wrote " + target);
-               } catch (Exception e) {
-                       e.printStackTrace();
-               }
-       }
-
-}
diff --git a/org.argeo.core/src/org/argeo/fm/jcr/JcrModel.java b/org.argeo.core/src/org/argeo/fm/jcr/JcrModel.java
deleted file mode 100644 (file)
index e41dfda..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-package org.argeo.fm.jcr;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
-import javax.jcr.RepositoryException;
-import javax.jcr.Value;
-
-import freemarker.template.SimpleScalar;
-import freemarker.template.TemplateCollectionModel;
-import freemarker.template.TemplateHashModel;
-import freemarker.template.TemplateHashModelEx2;
-import freemarker.template.TemplateModel;
-import freemarker.template.TemplateModelException;
-import freemarker.template.TemplateModelIterator;
-import freemarker.template.TemplateNodeModel;
-import freemarker.template.TemplateSequenceModel;
-
-public class JcrModel implements TemplateNodeModel, TemplateHashModel {
-       private final Node node;
-
-       public JcrModel(Node node) {
-               this.node = node;
-       }
-
-       @Override
-       public TemplateSequenceModel getChildNodes() throws TemplateModelException {
-               try {
-                       return new NodeIteratorModel(node.getNodes());
-               } catch (RepositoryException e) {
-                       throw new TemplateModelException("Cannot list children of " + node, e);
-               }
-       }
-
-       @Override
-       public String getNodeName() throws TemplateModelException {
-               try {
-                       return node.getName();
-               } catch (RepositoryException e) {
-                       throw new TemplateModelException("Cannot get name of " + node, e);
-               }
-       }
-
-       @Override
-       public String getNodeNamespace() throws TemplateModelException {
-               // TODO find out namespace
-               return null;
-       }
-
-       @Override
-       public String getNodeType() throws TemplateModelException {
-               try {
-                       return node.getPrimaryNodeType().getName();
-               } catch (RepositoryException e) {
-                       throw new TemplateModelException("Cannot get node type of " + node, e);
-               }
-       }
-
-       @Override
-       public TemplateNodeModel getParentNode() throws TemplateModelException {
-               try {
-                       Node parent = node.getParent();
-                       if (parent == null)
-                               return null;
-                       return new JcrModel(parent);
-               } catch (RepositoryException e) {
-                       throw new TemplateModelException("Cannot get parent of " + node, e);
-               }
-       }
-
-       // HASH
-
-       @Override
-       public TemplateModel get(String key) throws TemplateModelException {
-               try {
-                       if ("jcr:path".equals(key))
-                               return new SimpleScalar(node.getPath());
-                       if ("jcr:name".equals(key))
-                               return new SimpleScalar(node.getName());
-                       if ("jcr:properties".equals(key))
-                               return new PropertiesModel();
-                       if ("jcr:parent".equals(key))
-                               return !"/".equals(node.getPath()) ? new JcrModel(node.getParent()) : null;
-
-                       Property property = null;
-                       if (!node.hasProperty(key)) {
-                               List<Property> props = new ArrayList<>();
-                               PropertyIterator pit = node.getProperties("*:" + key);
-                               while (pit.hasNext())
-                                       props.add(pit.nextProperty());
-                               if (props.size() > 1)
-                                       throw new TemplateModelException(
-                                                       "Too many properties match " + key + " (" + props + "), use prefix with \\: escape");
-                               if (!props.isEmpty())
-                                       property = props.get(0);
-                       } else
-                               property = node.getProperty(key);
-                       if (property != null)
-                               return propertyValues(property);
-
-                       Node child = null;
-                       if (!node.hasNode(key)) {
-                               List<Node> children = new ArrayList<>();
-                               NodeIterator nit = node.getNodes("*:" + key);
-                               while (nit.hasNext())
-                                       children.add(nit.nextNode());
-                               if (children.size() > 1)
-                                       throw new TemplateModelException(
-                                                       "Too many properties match " + key + " (" + children + "), use prefix with \\: escape");
-                               if (!children.isEmpty())
-                                       child = children.get(0);
-                       } else
-                               child = node.getNode(key);
-                       if (child != null)
-                               return new JcrModel(child);
-                       return null;
-
-               } catch (RepositoryException e) {
-                       throw new TemplateModelException("Cannot get property " + key + " of " + node, e);
-               }
-       }
-
-       @Override
-       public boolean isEmpty() throws TemplateModelException {
-               return false;
-       }
-
-       public Node getNode() {
-               return node;
-       }
-
-       protected TemplateModel propertyValues(Property property) throws RepositoryException {
-               if (!property.isMultiple())
-                       return new SimpleScalar(property.getString());
-               Value[] values = property.getValues();
-               StringBuilder sb = new StringBuilder();
-               for (Value value : values) {
-                       sb.append(value.getString()).append('\n');
-               }
-               return new SimpleScalar(sb.toString());
-       }
-
-       class PropertiesModel implements TemplateHashModelEx2 {
-               @Override
-               public TemplateModel get(String key) throws TemplateModelException {
-                       return JcrModel.this.get(key);
-               }
-
-               @Override
-               public boolean isEmpty() throws TemplateModelException {
-                       return false;
-               }
-
-               @Override
-               public TemplateCollectionModel keys() throws TemplateModelException {
-                       try {
-                               PropertyIterator pit = node.getProperties();
-                               return new TemplateCollectionModel() {
-
-                                       @Override
-                                       public TemplateModelIterator iterator() throws TemplateModelException {
-                                               return new TemplateModelIterator() {
-
-                                                       @Override
-                                                       public TemplateModel next() throws TemplateModelException {
-                                                               try {
-                                                                       return new SimpleScalar(pit.nextProperty().getName());
-                                                               } catch (RepositoryException e) {
-                                                                       throw new TemplateModelException("Cannot list properties of " + node, e);
-                                                               }
-                                                       }
-
-                                                       @Override
-                                                       public boolean hasNext() throws TemplateModelException {
-                                                               return pit.hasNext();
-                                                       }
-                                               };
-                                       }
-                               };
-                       } catch (RepositoryException e) {
-                               throw new TemplateModelException("Cannot list properties of " + node, e);
-                       }
-               }
-
-               @Override
-               public int size() throws TemplateModelException {
-                       try {
-                               PropertyIterator pit = node.getProperties();
-                               return (int) pit.getSize();
-                       } catch (RepositoryException e) {
-                               throw new TemplateModelException("Cannot list properties of " + node, e);
-                       }
-               }
-
-               @Override
-               public TemplateCollectionModel values() throws TemplateModelException {
-                       try {
-                               PropertyIterator pit = node.getProperties();
-                               return new TemplateCollectionModel() {
-
-                                       @Override
-                                       public TemplateModelIterator iterator() throws TemplateModelException {
-                                               return new TemplateModelIterator() {
-
-                                                       @Override
-                                                       public TemplateModel next() throws TemplateModelException {
-                                                               try {
-                                                                       return propertyValues(pit.nextProperty());
-                                                               } catch (RepositoryException e) {
-                                                                       throw new TemplateModelException("Cannot list properties of " + node, e);
-                                                               }
-                                                       }
-
-                                                       @Override
-                                                       public boolean hasNext() throws TemplateModelException {
-                                                               return pit.hasNext();
-                                                       }
-                                               };
-                                       }
-                               };
-                       } catch (RepositoryException e) {
-                               throw new TemplateModelException("Cannot list properties of " + node, e);
-                       }
-               }
-
-               @Override
-               public KeyValuePairIterator keyValuePairIterator() throws TemplateModelException {
-                       try {
-                               PropertyIterator pit = node.getProperties();
-                               return new KeyValuePairIterator() {
-
-                                       @Override
-                                       public boolean hasNext() throws TemplateModelException {
-                                               return pit.hasNext();
-                                       }
-
-                                       @Override
-                                       public KeyValuePair next() throws TemplateModelException {
-                                               Property property = pit.nextProperty();
-                                               return new KeyValuePair() {
-
-                                                       @Override
-                                                       public TemplateModel getValue() throws TemplateModelException {
-                                                               try {
-                                                                       return propertyValues(property);
-                                                               } catch (RepositoryException e) {
-                                                                       throw new TemplateModelException("Cannot list properties of " + node, e);
-                                                               }
-                                                       }
-
-                                                       @Override
-                                                       public TemplateModel getKey() throws TemplateModelException {
-                                                               try {
-                                                                       return new SimpleScalar(property.getName());
-                                                               } catch (RepositoryException e) {
-                                                                       throw new TemplateModelException("Cannot list properties of " + node, e);
-                                                               }
-                                                       }
-                                               };
-                                       }
-                               };
-                       } catch (RepositoryException e) {
-                               throw new TemplateModelException("Cannot list properties of " + node, e);
-                       }
-               }
-
-       }
-}
diff --git a/org.argeo.core/src/org/argeo/fm/jcr/NodeIteratorModel.java b/org.argeo.core/src/org/argeo/fm/jcr/NodeIteratorModel.java
deleted file mode 100644 (file)
index 61bcb36..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.argeo.fm.jcr;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.jcr.Node;
-import javax.jcr.NodeIterator;
-
-import freemarker.template.TemplateModel;
-import freemarker.template.TemplateModelException;
-import freemarker.template.TemplateSequenceModel;
-
-public class NodeIteratorModel implements TemplateSequenceModel {
-       private final NodeIterator nodeIterator;
-
-       private final List<Node> nodes;
-       private int size;
-
-       public NodeIteratorModel(NodeIterator nodeIterator) {
-               super();
-               this.nodeIterator = nodeIterator;
-               this.size = (int) nodeIterator.getSize();
-               this.nodes = new ArrayList<>(this.size);
-               // TODO optimize with lazy loading
-               while (this.nodeIterator.hasNext()) {
-                       Node node = this.nodeIterator.nextNode();
-                       nodes.add(node);
-               }
-               this.size = nodes.size();
-       }
-
-       @Override
-       public TemplateModel get(int index) throws TemplateModelException {
-               return new JcrModel(nodes.get(index));
-       }
-
-       @Override
-       public int size() throws TemplateModelException {
-               return size;
-       }
-
-}