diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/io/data/transform/SourceCatalogNameColumnTransform.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/io/data/transform/SourceCatalogNameColumnTransform.java new file mode 100644 index 0000000000..369ca5dd0c --- /dev/null +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/io/data/transform/SourceCatalogNameColumnTransform.java @@ -0,0 +1,41 @@ +package org.jumpmind.symmetric.io.data.transform; + +import java.util.Map; + +import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.extension.IBuiltInExtensionPoint; +import org.jumpmind.symmetric.io.data.DataContext; +import org.jumpmind.symmetric.io.data.reader.ExtractDataReader; +import org.jumpmind.symmetric.model.Data; + +public class SourceCatalogNameColumnTransform implements ISingleNewAndOldValueColumnTransform, + IBuiltInExtensionPoint { + + @Override + public String getName() { + return "source_catalog_name"; + } + + @Override + public NewAndOldValue transform(IDatabasePlatform platform, DataContext context, + TransformColumn column, TransformedData data, Map sourceValues, + String newValue, String oldValue) throws IgnoreColumnException, IgnoreRowException { + NewAndOldValue value = new NewAndOldValue(); + Data csvData = (Data)context.get(ExtractDataReader.DATA_CONTEXT_CURRENT_CSV_DATA); + if (csvData != null && csvData.getTriggerHistory() != null) { + value.setNewValue(csvData.getTriggerHistory().getSourceCatalogName()); + } + return value; + } + + @Override + public boolean isExtractColumnTransform() { + return true; + } + + @Override + public boolean isLoadColumnTransform() { + return false; + } + +} diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/io/data/transform/SourceSchemaNameColumnTransform.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/io/data/transform/SourceSchemaNameColumnTransform.java new file mode 100644 index 0000000000..c52ab8b8ba --- /dev/null +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/io/data/transform/SourceSchemaNameColumnTransform.java @@ -0,0 +1,41 @@ +package org.jumpmind.symmetric.io.data.transform; + +import java.util.Map; + +import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.extension.IBuiltInExtensionPoint; +import org.jumpmind.symmetric.io.data.DataContext; +import org.jumpmind.symmetric.io.data.reader.ExtractDataReader; +import org.jumpmind.symmetric.model.Data; + +public class SourceSchemaNameColumnTransform implements ISingleNewAndOldValueColumnTransform, + IBuiltInExtensionPoint { + + @Override + public String getName() { + return "source_schema_name"; + } + + @Override + public NewAndOldValue transform(IDatabasePlatform platform, DataContext context, + TransformColumn column, TransformedData data, Map sourceValues, + String newValue, String oldValue) throws IgnoreColumnException, IgnoreRowException { + NewAndOldValue value = new NewAndOldValue(); + Data csvData = (Data)context.get(ExtractDataReader.DATA_CONTEXT_CURRENT_CSV_DATA); + if (csvData != null && csvData.getTriggerHistory() != null) { + value.setNewValue(csvData.getTriggerHistory().getSourceSchemaName()); + } + return value; + } + + @Override + public boolean isExtractColumnTransform() { + return true; + } + + @Override + public boolean isLoadColumnTransform() { + return false; + } + +} diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/io/data/transform/SourceTableNameColumnTransform.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/io/data/transform/SourceTableNameColumnTransform.java new file mode 100644 index 0000000000..b48e7d17c8 --- /dev/null +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/io/data/transform/SourceTableNameColumnTransform.java @@ -0,0 +1,41 @@ +package org.jumpmind.symmetric.io.data.transform; + +import java.util.Map; + +import org.jumpmind.db.platform.IDatabasePlatform; +import org.jumpmind.extension.IBuiltInExtensionPoint; +import org.jumpmind.symmetric.io.data.DataContext; +import org.jumpmind.symmetric.io.data.reader.ExtractDataReader; +import org.jumpmind.symmetric.model.Data; + +public class SourceTableNameColumnTransform implements ISingleNewAndOldValueColumnTransform, + IBuiltInExtensionPoint { + + @Override + public String getName() { + return "source_table_name"; + } + + @Override + public NewAndOldValue transform(IDatabasePlatform platform, DataContext context, + TransformColumn column, TransformedData data, Map sourceValues, + String newValue, String oldValue) throws IgnoreColumnException, IgnoreRowException { + NewAndOldValue value = new NewAndOldValue(); + Data csvData = (Data)context.get(ExtractDataReader.DATA_CONTEXT_CURRENT_CSV_DATA); + if (csvData != null && csvData.getTriggerHistory() != null) { + value.setNewValue(csvData.getTriggerHistory().getSourceTableName()); + } + return value; + } + + @Override + public boolean isExtractColumnTransform() { + return true; + } + + @Override + public boolean isLoadColumnTransform() { + return false; + } + +} diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TransformService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TransformService.java index 3b9ccfca97..8ddc5468ab 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TransformService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TransformService.java @@ -36,6 +36,9 @@ import org.jumpmind.symmetric.io.data.transform.DeleteAction; import org.jumpmind.symmetric.io.data.transform.IColumnTransform; import org.jumpmind.symmetric.io.data.transform.ParameterColumnTransform; +import org.jumpmind.symmetric.io.data.transform.SourceCatalogNameColumnTransform; +import org.jumpmind.symmetric.io.data.transform.SourceSchemaNameColumnTransform; +import org.jumpmind.symmetric.io.data.transform.SourceTableNameColumnTransform; import org.jumpmind.symmetric.io.data.transform.TransformColumn; import org.jumpmind.symmetric.io.data.transform.TransformColumn.IncludeOnType; import org.jumpmind.symmetric.io.data.transform.TransformPoint; @@ -65,6 +68,9 @@ public TransformService(IParameterService parameterService, ISymmetricDialect sy columnTransforms = TransformWriter.buildDefaultColumnTransforms(); addColumnTransform(new ParameterColumnTransform(parameterService)); + addColumnTransform(new SourceCatalogNameColumnTransform()); + addColumnTransform(new SourceSchemaNameColumnTransform()); + addColumnTransform(new SourceTableNameColumnTransform()); setSqlMap(new TransformServiceSqlMap(symmetricDialect.getPlatform(), createSqlReplacementTokens())); diff --git a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/reader/ExtractDataReader.java b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/reader/ExtractDataReader.java index f8e9e27569..fa308e20d0 100644 --- a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/reader/ExtractDataReader.java +++ b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/reader/ExtractDataReader.java @@ -46,6 +46,8 @@ public class ExtractDataReader implements IDataReader { protected static final Logger log = LoggerFactory.getLogger(ExtractDataReader.class); + + public static final String DATA_CONTEXT_CURRENT_CSV_DATA = CsvData.class.getName(); protected Map statistics = new HashMap(); @@ -60,6 +62,8 @@ public class ExtractDataReader implements IDataReader { protected Table table; protected CsvData data; + + protected DataContext dataContext; public ExtractDataReader(IDatabasePlatform platform, IExtractDataReaderSource source) { this.sourcesToUse = new ArrayList(); @@ -73,6 +77,7 @@ public ExtractDataReader(IDatabasePlatform platform, List