From 1ee098694f50dca5bce5756b116f3a1cb4d1d4c9 Mon Sep 17 00:00:00 2001
From: Markus Schulz <msc@onesty-tech.de>
Date: Wed, 12 Aug 2015 09:53:41 +0200
Subject: [PATCH] Support for TableTransform UpdateAction with
 Bean-Shell-Scripts: add the data from EXTERNAL_SELECT of a
 trigger to the bsh-interpreter as "externalData" variable.
 TODO: triggerId would be nice too...

---
 .../symmetric/io/data/transform/TransformTable.java        |   12 +++++++++++-
 .../symmetric/io/data/writer/TransformWriterTest.java      |   10 +++++-----
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/transform/TransformTable.java b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/transform/TransformTable.java
index d4432a2..a7ec534 100644
--- a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/transform/TransformTable.java
+++ b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/transform/TransformTable.java
@@ -25,7 +25,7 @@ import java.util.*;
 import bsh.Interpreter;
 import org.apache.commons.lang.StringUtils;
 import org.jumpmind.db.model.Table;
-import org.jumpmind.symmetric.io.data.DataContext;
+import org.jumpmind.symmetric.io.data.*;
 import org.jumpmind.symmetric.io.data.transform.TransformColumn.IncludeOnType;
 import org.jumpmind.util.Context;
 import org.slf4j.*;
@@ -228,6 +228,16 @@ public class TransformTable implements Cloneable {
             Map<String, String> sourceValues = transformedData.getSourceValues();
 
             try {
+                interpreter.set("sourceDmlType", transformedData.getSourceDmlType());
+                interpreter.set("sourceDmlTypeString", transformedData.getSourceDmlType().toString());
+                interpreter.set("transformedData", transformedData);
+                CsvData csvData = dataContext.getData();
+                if (csvData != null) {
+                    interpreter.set("externalData", csvData.getAttribute("externalData"));
+                }
+                else {
+                    interpreter.set("externalData", null);
+                }
                 for (String columnName : sourceValues.keySet()) {
                     interpreter.set(columnName.toUpperCase(), sourceValues.get(columnName));
                     interpreter.set(columnName, sourceValues.get(columnName));
diff --git a/symmetric-io/src/test/java/org/jumpmind/symmetric/io/data/writer/TransformWriterTest.java b/symmetric-io/src/test/java/org/jumpmind/symmetric/io/data/writer/TransformWriterTest.java
index 7ae7cef..2b06162 100644
--- a/symmetric-io/src/test/java/org/jumpmind/symmetric/io/data/writer/TransformWriterTest.java
+++ b/symmetric-io/src/test/java/org/jumpmind/symmetric/io/data/writer/TransformWriterTest.java
@@ -99,11 +99,11 @@ public class TransformWriterTest extends AbstractWriterTest {
            new CsvData(DataEventType.UPDATE, new String[]{"4"}),
            new CsvData(DataEventType.UPDATE, new String[]{"5"})));
         List<CsvData> datas = mockWriter.writtenDatas.get("t3");
-        Assert.assertEquals(datas.size(), 4);
-        Assert.assertEquals(datas.get(0).getDataEventType(), DataEventType.INSERT);
-        Assert.assertEquals(datas.get(1).getDataEventType(), DataEventType.DELETE);
-        Assert.assertEquals(datas.get(2).getDataEventType(), DataEventType.UPDATE);
-        Assert.assertEquals(datas.get(3).getDataEventType(), DataEventType.UPDATE);
+        Assert.assertEquals(4, datas.size());
+        Assert.assertEquals(DataEventType.INSERT, datas.get(0).getDataEventType());
+        Assert.assertEquals(DataEventType.DELETE, datas.get(1).getDataEventType());
+        Assert.assertEquals(DataEventType.UPDATE, datas.get(2).getDataEventType());
+        Assert.assertEquals(DataEventType.UPDATE, datas.get(3).getDataEventType());
     }
 
 
-- 
1.7.10.4

