From f422534cd4cf1ba32523c9fc798c207065038ca5 Mon Sep 17 00:00:00 2001 From: Paul Duncan Date: Thu, 6 Sep 2018 08:40:23 -0400 Subject: java: add pom.xml, mv sources to src/main/java/org/pablotron, add src/test, add initial junit tests, update makefile and .gitignore --- java/pablotron/luigi/Cache.java | 51 ----------- java/pablotron/luigi/Filter.java | 89 ------------------ java/pablotron/luigi/FilterReference.java | 11 --- java/pablotron/luigi/LuigiError.java | 7 -- java/pablotron/luigi/Parser.java | 122 ------------------------- java/pablotron/luigi/Template.java | 37 -------- java/pablotron/luigi/Test.java | 57 ------------ java/pablotron/luigi/actions/Action.java | 12 --- java/pablotron/luigi/actions/FilterAction.java | 41 --------- java/pablotron/luigi/actions/TextAction.java | 22 ----- 10 files changed, 449 deletions(-) delete mode 100644 java/pablotron/luigi/Cache.java delete mode 100644 java/pablotron/luigi/Filter.java delete mode 100644 java/pablotron/luigi/FilterReference.java delete mode 100644 java/pablotron/luigi/LuigiError.java delete mode 100644 java/pablotron/luigi/Parser.java delete mode 100644 java/pablotron/luigi/Template.java delete mode 100644 java/pablotron/luigi/Test.java delete mode 100644 java/pablotron/luigi/actions/Action.java delete mode 100644 java/pablotron/luigi/actions/FilterAction.java delete mode 100644 java/pablotron/luigi/actions/TextAction.java (limited to 'java/pablotron/luigi') diff --git a/java/pablotron/luigi/Cache.java b/java/pablotron/luigi/Cache.java deleted file mode 100644 index b550b46..0000000 --- a/java/pablotron/luigi/Cache.java +++ /dev/null @@ -1,51 +0,0 @@ -package pablotron.luigi; - -import java.util.Map; -import java.util.HashMap; -import pablotron.luigi.Filter; -import pablotron.luigi.Template; -import pablotron.luigi.LuigiError; -import pablotron.luigi.actions.Action; - -public final class Cache { - private final Map strings; - private final Map filters; - private final Map templates = new HashMap(); - - public Cache( - final Map strings, - final Map filters - ) { - this.strings = strings; - this.filters = filters; - } - - public Cache(final Map strings) { - this(strings, Filter.FILTERS); - } - - public String run( - final String key, - final Map args - ) throws LuigiError { - Template t; - - if (templates.containsKey(key)) { - // get template - t = templates.get(key); - } else { - // make sure template exists - if (!strings.containsKey(key)) - throw new LuigiError("unknown template: " + key); - - // create template - t = new Template(strings.get(key), filters); - - // cache template - templates.put(key, t); - } - - // run template with args - return t.run(args); - } -}; diff --git a/java/pablotron/luigi/Filter.java b/java/pablotron/luigi/Filter.java deleted file mode 100644 index d89beab..0000000 --- a/java/pablotron/luigi/Filter.java +++ /dev/null @@ -1,89 +0,0 @@ -package pablotron.luigi; - -import java.util.Map; -import java.util.HashMap; - -public final class Filter { - public interface Handler { - public String filter(String val, String args[], Map row); - }; - - public static Map FILTERS = new HashMap() {{ - put("null", new Handler() { - public String filter(String val, String args[], Map row) { - return ""; - } - }); - - put("s", new Handler() { - public String filter(String val, String args[], Map row) { - int v = Integer.parseInt(val); - return (v == 1) ? "" : "s"; - } - }); - - put("uc", new Handler() { - public String filter(String val, String args[], Map row) { - return val.toUpperCase(); - } - }); - - put("lc", new Handler() { - public String filter(String val, String args[], Map row) { - return val.toLowerCase(); - } - }); - - put("length", new Handler() { - public String filter(String val, String args[], Map row) { - return Integer.toString(val.length()); - } - }); - - put("trim", new Handler() { - public String filter(String val, String args[], Map row) { - return val.trim(); - } - }); - - put("h", new Handler() { - public String filter(String val, String args[], Map row) { - StringBuilder r = new StringBuilder(val.length()); - - for (int i = 0, l = val.length(); i < l; i++) { - char c = val.charAt(i); - - switch (c) { - case '&': - r.append("&"); - break; - case '<': - r.append("<"); - break; - case '>': - r.append(">"); - break; - case '\'': - r.append("'"); - break; - case '"': - r.append("""); - break; - default: - r.append(c); - } - } - - return r.toString(); -/* - * return val - * .replace("&", "&") - * .replace("<", "<") - * .replace(">", ">") - * .replace("'", "'") - * .replace("\"", """); - */ - } - }); - }}; -}; diff --git a/java/pablotron/luigi/FilterReference.java b/java/pablotron/luigi/FilterReference.java deleted file mode 100644 index d0f9d3d..0000000 --- a/java/pablotron/luigi/FilterReference.java +++ /dev/null @@ -1,11 +0,0 @@ -package pablotron.luigi; - -public final class FilterReference { - public final String name; - public final String[] args; - - public FilterReference(final String name, final String args[]) { - this.name = name; - this.args = args; - } -}; diff --git a/java/pablotron/luigi/LuigiError.java b/java/pablotron/luigi/LuigiError.java deleted file mode 100644 index 4ff4c01..0000000 --- a/java/pablotron/luigi/LuigiError.java +++ /dev/null @@ -1,7 +0,0 @@ -package pablotron.luigi; - -public class LuigiError extends Exception { - public LuigiError(final String message) { - super(message); - } -}; diff --git a/java/pablotron/luigi/Parser.java b/java/pablotron/luigi/Parser.java deleted file mode 100644 index 0e415c4..0000000 --- a/java/pablotron/luigi/Parser.java +++ /dev/null @@ -1,122 +0,0 @@ -package pablotron.luigi; - -import java.util.ArrayList; -import java.util.regex.Pattern; -import java.util.regex.Matcher; - -import pablotron.luigi.actions.Action; -import pablotron.luigi.actions.FilterAction; -import pablotron.luigi.actions.TextAction; -import pablotron.luigi.FilterReference; -import pablotron.luigi.LuigiError; - -public final class Parser { - private static final Pattern RE_ACTION = Pattern.compile( - // match opening brace - "%\\{" + - - // match optional whitespace - "\\s*" + - - // match key - // "(?[^\\s\\|\\}]+)" + - "([^\\s\\|\\}]+)" + - - // match filter(s) - // "(?(\\s*\\|(\\s*[^\\s\\|\\}]+)+)*)" + - "((\\s*\\|(\\s*[^\\s\\|\\}]+)+)*)" + - - // match optional whitespace - "\\s*" + - - // match closing brace - "\\}" + - - // or match up all non-% chars or a single % char - // "| (?[^%]* | %)", - "| ([^%]* | %)", - - Pattern.COMMENTS - ); - - private static final Pattern RE_FILTER = Pattern.compile( - // match filter name - // "(?\\S+)" + - "(\\S+)" + - - // match filter arguments (optional) - // "(?(\\s*\\S+)*)" + - "((\\s*\\S+)*)" + - - // optional trailing whitespace - "\\s*", - - Pattern.COMMENTS - ); - - private static final Pattern RE_DELIM_FILTERS = Pattern.compile( - "\\s*\\|\\s*" - ); - - private static final Pattern RE_DELIM_ARGS = Pattern.compile( - "\\s+" - ); - - public static Action[] parse_template( - final String template - ) throws LuigiError { - final ArrayList r = new ArrayList(); - - // match on text - final Matcher m = RE_ACTION.matcher(template); - - while (m.find()) { - // String key = m.group("key"); - final String key = m.group(1); - - if (key != null && key.length() > 0) { - // r.add(new FilterAction(key, parse_filters(m.group("filters")))); - r.add(new FilterAction(key, parse_filters(m.group(2)))); - } else { - // r.add(new TextAction(m.group("text"))); - r.add(new TextAction(m.group(5))); - } - } - - // build array of results - return r.toArray(new Action[r.size()]); - } - - private static final String[] NO_ARGS = {}; - - public static FilterReference[] parse_filters( - final String filters_str - ) throws LuigiError { - final ArrayList r = new ArrayList(); - - // split string into individual filters and handle each one - for (String f: RE_DELIM_FILTERS.split(filters_str)) { - // trim filter string and skip empty filters - f = f.trim(); - if (f.length() == 0) - continue; - - // match on filter and check for error - final Matcher m = RE_FILTER.matcher(f); - if (!m.find()) - throw new LuigiError("invalid filter: " + f); - - // get arguments string - final String args = m.group(2).trim(); - - // append new filter reference to result - r.add(new FilterReference( - m.group(1), - (args.length() > 0) ? RE_DELIM_ARGS.split(args) : NO_ARGS - )); - } - - // return result - return r.toArray(new FilterReference[r.size()]); - } -}; diff --git a/java/pablotron/luigi/Template.java b/java/pablotron/luigi/Template.java deleted file mode 100644 index 8ab1d77..0000000 --- a/java/pablotron/luigi/Template.java +++ /dev/null @@ -1,37 +0,0 @@ -package pablotron.luigi; - -import java.util.Map; -import pablotron.luigi.Parser; -import pablotron.luigi.Filter; -import pablotron.luigi.LuigiError; -import pablotron.luigi.actions.Action; - -public final class Template { - private static final String VERSION = "0.4.0"; - - private final String template; - private final Action actions[]; - private final Map filters; - - public Template( - final String template, - final Map filters - ) throws LuigiError { - this.template = template; - this.filters = filters; - this.actions = Parser.parse_template(template); - } - - public Template(final String template) throws LuigiError { - this(template, Filter.FILTERS); - } - - public String run(final Map args) throws LuigiError { - final StringBuilder r = new StringBuilder(); - - for (Action a: this.actions) - r.append(a.run(this.filters, args)); - - return r.toString(); - } -}; diff --git a/java/pablotron/luigi/Test.java b/java/pablotron/luigi/Test.java deleted file mode 100644 index 7163c52..0000000 --- a/java/pablotron/luigi/Test.java +++ /dev/null @@ -1,57 +0,0 @@ -package pablotron.luigi; - -import java.util.Map; -import java.util.HashMap; - -import pablotron.luigi.LuigiError; -import pablotron.luigi.Filter; -import pablotron.luigi.Template; -import pablotron.luigi.Cache; - -public final class Test { - // test template - private static final String TEMPLATE = - "test basic: hello %{name}\n" + - "test filter: hello %{name | uc}\n" + - "test custom: %{name | custom | uc | lc}\n" + - "test custom_with_arg: %{name | custom_with_arg hello}\n"; - - // test template cache - private static final Cache cache = new Cache(new HashMap() {{ - put("test-template", TEMPLATE); - }}); - - // test arguments - private static final Map args = new HashMap() {{ - put("name", "paul"); - }}; - - // custom filters - private static final Map filters = new HashMap() {{ - // add custom filter - put("custom", new Filter.Handler() { - public String filter(String val, String args[], Map row) { - return "custom"; - } - }); - - // add custom filter with argument - put("custom_with_arg", new Filter.Handler() { - public String filter(String val, String args[], Map row) { - return (args.length > 0) ? args[0] : "custom"; - } - }); - }}; - - public static void main(String params[]) throws Exception { - // add custom filters - Filter.FILTERS.putAll(filters); - - // create and run template - final Template t = new Template(TEMPLATE); - System.out.print(t.run(args)); - - // run cache - System.out.print(cache.run("test-template", args)); - } -}; diff --git a/java/pablotron/luigi/actions/Action.java b/java/pablotron/luigi/actions/Action.java deleted file mode 100644 index 010622a..0000000 --- a/java/pablotron/luigi/actions/Action.java +++ /dev/null @@ -1,12 +0,0 @@ -package pablotron.luigi.actions; - -import java.util.Map; -import pablotron.luigi.Filter; -import pablotron.luigi.LuigiError; - -public interface Action { - public String run( - Map filters, - Map args - ) throws LuigiError; -}; diff --git a/java/pablotron/luigi/actions/FilterAction.java b/java/pablotron/luigi/actions/FilterAction.java deleted file mode 100644 index b69923b..0000000 --- a/java/pablotron/luigi/actions/FilterAction.java +++ /dev/null @@ -1,41 +0,0 @@ -package pablotron.luigi.actions; - -import java.util.Map; -import pablotron.luigi.actions.Action; -import pablotron.luigi.FilterReference; -import pablotron.luigi.Filter; -import pablotron.luigi.LuigiError; - -public final class FilterAction implements Action { - private final String key; - private final FilterReference filters[]; - - public FilterAction(final String key, final FilterReference filters[]) { - this.key = key; - this.filters = filters; - } - - public String run( - Map filters, - Map args - ) throws LuigiError { - // check for key - if (!args.containsKey(key)) - throw new LuigiError("unknown key: " + key); - - // reduce value to result - String r = args.get(key); - for (int i = 0, l = this.filters.length; i < l; i++) { - // get/check filter - Filter.Handler f = filters.get(this.filters[i].name); - if (f == null) - throw new LuigiError("unknown filter: " + this.filters[i].name); - - // run filter - r = f.filter(r, this.filters[i].args, args); - } - - // return result - return r; - } -}; diff --git a/java/pablotron/luigi/actions/TextAction.java b/java/pablotron/luigi/actions/TextAction.java deleted file mode 100644 index 3024f23..0000000 --- a/java/pablotron/luigi/actions/TextAction.java +++ /dev/null @@ -1,22 +0,0 @@ -package pablotron.luigi.actions; - -import java.util.Map; -import pablotron.luigi.actions.Action; -import pablotron.luigi.Filter; -import pablotron.luigi.LuigiError; - -public final class TextAction implements Action { - private final String text; - - public TextAction(final String text) { - this.text = text; - } - - public String run( - Map filters, - Map args - ) throws LuigiError { - return this.text; - } -}; - -- cgit v1.2.3