From dd7b88e53f8b5c7546a607a88d662cdc4adf7324 Mon Sep 17 00:00:00 2001 From: chenson42 Date: Mon, 10 Aug 2009 16:39:28 +0000 Subject: [PATCH] Added the beginnings of an idea for a bsh data router --- symmetric/pom.xml | 5 ++ .../symmetric/route/AbstractDataRouter.java | 4 ++ .../symmetric/route/BshDataRouter.java | 48 +++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 symmetric/src/main/java/org/jumpmind/symmetric/route/BshDataRouter.java diff --git a/symmetric/pom.xml b/symmetric/pom.xml index cde637f506..67b1d7f40f 100644 --- a/symmetric/pom.xml +++ b/symmetric/pom.xml @@ -558,6 +558,11 @@ commons-math 1.1 + + org.beanshell + bsh + 2.0b4 + org.mortbay.jetty diff --git a/symmetric/src/main/java/org/jumpmind/symmetric/route/AbstractDataRouter.java b/symmetric/src/main/java/org/jumpmind/symmetric/route/AbstractDataRouter.java index d9b6f8702a..5bd6261d69 100644 --- a/symmetric/src/main/java/org/jumpmind/symmetric/route/AbstractDataRouter.java +++ b/symmetric/src/main/java/org/jumpmind/symmetric/route/AbstractDataRouter.java @@ -24,6 +24,8 @@ import java.util.Map; import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.ddlutils.model.Column; import org.jumpmind.symmetric.db.IDbDialect; import org.jumpmind.symmetric.model.DataMetaData; @@ -31,6 +33,8 @@ public abstract class AbstractDataRouter implements IDataRouter { + protected final Log logger = LogFactory.getLog(getClass()); + private boolean autoRegister = true; public boolean isAutoRegister() { diff --git a/symmetric/src/main/java/org/jumpmind/symmetric/route/BshDataRouter.java b/symmetric/src/main/java/org/jumpmind/symmetric/route/BshDataRouter.java new file mode 100644 index 0000000000..4f66648d9f --- /dev/null +++ b/symmetric/src/main/java/org/jumpmind/symmetric/route/BshDataRouter.java @@ -0,0 +1,48 @@ +package org.jumpmind.symmetric.route; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import org.jumpmind.symmetric.model.DataMetaData; +import org.jumpmind.symmetric.model.Node; + +import bsh.EvalError; +import bsh.Interpreter; + +/** + * In Progress ... + * TODO javadoc and unit test + */ +public class BshDataRouter extends AbstractDataRouter { + + public void completeBatch(IRouterContext context) { + } + + public Collection routeToNodes(IRouterContext context, DataMetaData dataMetaData, Set nodes, + boolean initialLoad) { + try { + Interpreter interpreter = new Interpreter(); + interpreter.set("nodes", nodes); + // set old and new and cur column values + Object value = interpreter.eval(dataMetaData.getTrigger().getRouterExpression()); + if (value instanceof Boolean && value.equals(Boolean.TRUE)) { + return toNodeIds(nodes); + } else if (value instanceof Collection) { + Collection values = (Collection) value; + Set nodeIds = new HashSet(values.size()); + for (Object v : values) { + if (v != null) { + nodeIds.add(v.toString()); + } + } + return nodeIds; + } + } catch (EvalError e) { + logger.error(e, e); + } + return Collections.emptySet(); + } + +}