From 6e67dd1cdd5e2693c3c7823ddc8e266ef9cd49f8 Mon Sep 17 00:00:00 2001 From: chenson42 Date: Fri, 11 Nov 2011 18:32:14 +0000 Subject: [PATCH] SYMMETRICDS-545 - Add validation for table column transforms types that are restricted for use on either extract or load. --- .../transform/AdditiveColumnTransform.java | 8 ++++++++ .../transform/BshColumnTransform.java | 8 ++++++++ .../transform/ConstantColumnTransform.java | 9 +++++++++ .../transform/CopyColumnTransform.java | 8 ++++++++ .../symmetric/transform/IColumnTransform.java | 4 ++++ .../transform/IdentityColumnTransform.java | 9 +++++++++ .../transform/LookupColumnTransform.java | 9 +++++++++ .../transform/MultiplierColumnTransform.java | 8 ++++++++ .../transform/SubstrColumnTransform.java | 9 +++++++++ .../symmetric/transform/TransformService.java | 19 ++++++++++++++++++- .../transform/VariableColumnTransform.java | 8 ++++++++ .../resources/symmetric-messages.properties | 1 + 12 files changed, 99 insertions(+), 1 deletion(-) diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/AdditiveColumnTransform.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/AdditiveColumnTransform.java index 8c516d0b59..14d5b3a3c0 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/AdditiveColumnTransform.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/AdditiveColumnTransform.java @@ -25,6 +25,14 @@ public String getName() { return NAME; } + public boolean isExtractColumnTransform() { + return false; + } + + public boolean isLoadColumnTransform() { + return true; + } + public String getFullyQualifiedTableName(String schema, String catalog, String tableName) { String quote = dbDialect.getPlatform().isDelimitedIdentifierModeOn() ? dbDialect.getPlatform() .getPlatformInfo().getDelimiterToken() : ""; diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/BshColumnTransform.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/BshColumnTransform.java index 51ffeaa505..d95e48aed0 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/BshColumnTransform.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/BshColumnTransform.java @@ -49,6 +49,14 @@ public boolean isAutoRegister() { public String getName() { return NAME; } + + public boolean isExtractColumnTransform() { + return true; + } + + public boolean isLoadColumnTransform() { + return true; + } public String transform(ICacheContext context, TransformColumn column, TransformedData data, Map sourceValues, String value, String oldValue) diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/ConstantColumnTransform.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/ConstantColumnTransform.java index fde0aa8557..316c4119ac 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/ConstantColumnTransform.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/ConstantColumnTransform.java @@ -16,6 +16,15 @@ public boolean isAutoRegister() { public String getName() { return NAME; } + + + public boolean isExtractColumnTransform() { + return true; + } + + public boolean isLoadColumnTransform() { + return true; + } public String transform(ICacheContext context, TransformColumn column, TransformedData data, Map sourceValues, String value, String oldValue) throws IgnoreColumnException, diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/CopyColumnTransform.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/CopyColumnTransform.java index 7b40253661..79950ec8dd 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/CopyColumnTransform.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/CopyColumnTransform.java @@ -16,6 +16,14 @@ public boolean isAutoRegister() { public String getName() { return NAME; } + + public boolean isExtractColumnTransform() { + return true; + } + + public boolean isLoadColumnTransform() { + return true; + } public String transform(ICacheContext context, TransformColumn column, TransformedData data, Map sourceValues, String value, String oldValue) { diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/IColumnTransform.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/IColumnTransform.java index cacba3a285..dd29b4f105 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/IColumnTransform.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/IColumnTransform.java @@ -12,5 +12,9 @@ public interface IColumnTransform extends IExtensionPoint { public T transform(ICacheContext context, TransformColumn column, TransformedData data, Map sourceValues, String value, String oldValue) throws IgnoreColumnException, IgnoreRowException; + + public boolean isExtractColumnTransform(); + + public boolean isLoadColumnTransform(); } diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/IdentityColumnTransform.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/IdentityColumnTransform.java index 71778c2fc6..d311af8823 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/IdentityColumnTransform.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/IdentityColumnTransform.java @@ -20,6 +20,15 @@ public boolean isAutoRegister() { public String getName() { return NAME; } + + + public boolean isExtractColumnTransform() { + return false; + } + + public boolean isLoadColumnTransform() { + return true; + } public String transform(ICacheContext context, TransformColumn column, TransformedData data, Map sourceValues, String value, String oldValue) diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/LookupColumnTransform.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/LookupColumnTransform.java index 237249f1fd..b0b8c08e43 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/LookupColumnTransform.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/LookupColumnTransform.java @@ -52,6 +52,15 @@ public boolean isAutoRegister() { public String getName() { return NAME; } + + + public boolean isExtractColumnTransform() { + return true; + } + + public boolean isLoadColumnTransform() { + return true; + } public String transform(ICacheContext context, TransformColumn column, TransformedData data, Map sourceValues, String value, String oldValue) throws IgnoreColumnException, diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/MultiplierColumnTransform.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/MultiplierColumnTransform.java index d4fc7fb695..3ad224cb37 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/MultiplierColumnTransform.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/MultiplierColumnTransform.java @@ -43,6 +43,14 @@ public boolean isAutoRegister() { public String getName() { return NAME; } + + public boolean isExtractColumnTransform() { + return true; + } + + public boolean isLoadColumnTransform() { + return true; + } public List transform(ICacheContext context, TransformColumn column, TransformedData data, Map sourceValues, String value, String oldValue) diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/SubstrColumnTransform.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/SubstrColumnTransform.java index d82bd2a2f2..35ba43f275 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/SubstrColumnTransform.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/SubstrColumnTransform.java @@ -20,6 +20,15 @@ public boolean isAutoRegister() { public String getName() { return NAME; } + + + public boolean isExtractColumnTransform() { + return true; + } + + public boolean isLoadColumnTransform() { + return true; + } public String transform(ICacheContext context, TransformColumn column, TransformedData data, Map sourceValues, String value, String oldValue) throws IgnoreColumnException, diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/TransformService.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/TransformService.java index 7bacbfede3..dfdfe288b9 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/TransformService.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/TransformService.java @@ -104,9 +104,26 @@ private List getTransformTablesFromDB() { List columns = getTransformColumnsFromDB(); for (TransformTable transformTable : transforms) { for (TransformColumn column : columns) { - if (column.getTransformId().equals(transformTable.getTransformId())) { + String transformType = column.getTransformType(); + boolean addColumnTransform = true; + if (transformType != null) { + IColumnTransform columnTransform = columnTransforms.get(transformType); + if (columnTransform == null) { + addColumnTransform = false; + log.error("TransformTypeInvalid", transformType, column.getTransformId(), column.getSourceColumnName(), "Transform not found"); + } else if (transformTable.getTransformPoint() == TransformPoint.EXTRACT && !columnTransform.isExtractColumnTransform()) { + addColumnTransform = false; + log.error("TransformTypeInvalid", transformType, column.getTransformId(), column.getSourceColumnName(), "Transform type not valid for an extract transform"); + } else if (transformTable.getTransformPoint() == TransformPoint.LOAD && !columnTransform.isLoadColumnTransform()) { + addColumnTransform = false; + log.error("TransformTypeInvalid", transformType, column.getTransformId(), column.getSourceColumnName(), "Transform type not valid for an load transform"); + } + } + + if (addColumnTransform && column.getTransformId().equals(transformTable.getTransformId())) { transformTable.addTransformColumn(column); } + } } return transforms; diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/VariableColumnTransform.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/VariableColumnTransform.java index a618b600ef..76052233d3 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/VariableColumnTransform.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/transform/VariableColumnTransform.java @@ -27,6 +27,14 @@ public boolean isAutoRegister() { public String getName() { return NAME; } + + public boolean isExtractColumnTransform() { + return true; + } + + public boolean isLoadColumnTransform() { + return true; + } public static String[] getOptions() { return OPTIONS; diff --git a/symmetric/symmetric-core/src/main/resources/symmetric-messages.properties b/symmetric/symmetric-core/src/main/resources/symmetric-messages.properties index 7f0ff8283a..6ee4077f7b 100644 --- a/symmetric/symmetric-core/src/main/resources/symmetric-messages.properties +++ b/symmetric/symmetric-core/src/main/resources/symmetric-messages.properties @@ -368,6 +368,7 @@ ValidationOfflineSettings=The %s property must be a longer period of time than t ValidationPleaseSetMe=Please set the registration.url, node.group.id, and external.id for the node. ValidationRegServerIsMissingConfiguration=This node is configured as a registration server, but it is missing its node_identity. It probably needs configured. RemovedTriggers=Remove %d triggers +TransformTypeInvalid=Invalid transform type of %s for transform %s with source column of %s. %s TransformMatchingFallbackNotFound=Could not find a matching transform while falling back to %s TransformNoPrimaryKeyDefined=No primary key defined for the transformation: %s TransformNoActionNotConfiguredToDelete=The %s transformation is not configured to delete row. Not sending the delete through.