aboutsummaryrefslogtreecommitdiff
path: root/java/pablotron/luigi/actions/FilterAction.java
diff options
context:
space:
mode:
authorpabs@pablotron.org <pabs@pablotron.org>2014-12-18 15:10:23 -0500
committerpabs@pablotron.org <pabs@pablotron.org>2014-12-18 15:10:23 -0500
commit750550e6df3cf8c9013f7fa455218b8d3847e181 (patch)
treeebe5067d888da30367a4d738b08cd07025d9a386 /java/pablotron/luigi/actions/FilterAction.java
parent0585aba994f725566191d20f11af5e13d575985c (diff)
downloadluigi-template-750550e6df3cf8c9013f7fa455218b8d3847e181.tar.bz2
luigi-template-750550e6df3cf8c9013f7fa455218b8d3847e181.zip
add java implementation
Diffstat (limited to 'java/pablotron/luigi/actions/FilterAction.java')
-rw-r--r--java/pablotron/luigi/actions/FilterAction.java41
1 files changed, 41 insertions, 0 deletions
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;
+ }
+};