diff options
Diffstat (limited to 'java/pablotron/luigi/actions')
-rw-r--r-- | java/pablotron/luigi/actions/Action.java | 12 | ||||
-rw-r--r-- | java/pablotron/luigi/actions/FilterAction.java | 41 | ||||
-rw-r--r-- | java/pablotron/luigi/actions/TextAction.java | 22 |
3 files changed, 75 insertions, 0 deletions
diff --git a/java/pablotron/luigi/actions/Action.java b/java/pablotron/luigi/actions/Action.java new file mode 100644 index 0000000..010622a --- /dev/null +++ b/java/pablotron/luigi/actions/Action.java @@ -0,0 +1,12 @@ +package pablotron.luigi.actions; + +import java.util.Map; +import pablotron.luigi.Filter; +import pablotron.luigi.LuigiError; + +public interface Action { + public String run( + Map<String, Filter.Handler> filters, + Map<String, String> args + ) throws LuigiError; +}; diff --git a/java/pablotron/luigi/actions/FilterAction.java b/java/pablotron/luigi/actions/FilterAction.java new file mode 100644 index 0000000..b69923b --- /dev/null +++ b/java/pablotron/luigi/actions/FilterAction.java @@ -0,0 +1,41 @@ +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<String, Filter.Handler> filters, + Map<String, String> 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 new file mode 100644 index 0000000..3024f23 --- /dev/null +++ b/java/pablotron/luigi/actions/TextAction.java @@ -0,0 +1,22 @@ +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<String, Filter.Handler> filters, + Map<String, String> args + ) throws LuigiError { + return this.text; + } +}; + |