diff --git a/plugins/transforms/concatfields/src/main/java/org/apache/hop/pipeline/transforms/concatfields/ConcatFields.java b/plugins/transforms/concatfields/src/main/java/org/apache/hop/pipeline/transforms/concatfields/ConcatFields.java index aac55e7ef6..85f65515e3 100644 --- a/plugins/transforms/concatfields/src/main/java/org/apache/hop/pipeline/transforms/concatfields/ConcatFields.java +++ b/plugins/transforms/concatfields/src/main/java/org/apache/hop/pipeline/transforms/concatfields/ConcatFields.java @@ -24,6 +24,7 @@ import org.apache.hop.core.exception.HopValueException; import org.apache.hop.core.row.IValueMeta; import org.apache.hop.core.row.RowDataUtil; +import org.apache.hop.core.row.value.ValueMetaBase; import org.apache.hop.core.util.StringUtil; import org.apache.hop.i18n.BaseMessages; import org.apache.hop.pipeline.Pipeline; @@ -157,7 +158,8 @@ private Object[] concatFields(Object[] inputRowData) throws HopException { nullString = Const.NVL(field.getNullString(), ""); } - concatField(targetString, valueMeta, valueData, nullString); + String trimType = data.trimType[i]; + concatField(targetString, valueMeta, valueData, nullString, trimType); } outputRowData[data.outputRowMeta.size() - 1] = targetString.toString(); @@ -166,13 +168,21 @@ private Object[] concatFields(Object[] inputRowData) throws HopException { } private void concatField( - StringBuilder targetField, IValueMeta valueMeta, Object valueData, String nullString) + StringBuilder targetField, + IValueMeta valueMeta, + Object valueData, + String nullString, + String trimType) throws HopValueException { if (valueMeta.isNull(valueData)) { targetField.append(nullString); } else { - targetField.append(valueMeta.getString(valueData)); + if (trimType != null) { + targetField.append( + Const.trimToType( + valueMeta.getString(valueData), ValueMetaBase.getTrimTypeByCode(trimType))); + } } } @@ -220,12 +230,18 @@ private void initStringDataFields() { } data.stringNullValue = new String[meta.getOutputFields().size()]; + data.trimType = new String[meta.getOutputFields().size()]; + for (int i = 0; i < meta.getOutputFields().size(); i++) { data.stringNullValue[i] = ""; String nullString = meta.getOutputFields().get(i).getNullString(); if (!StringUtil.isEmpty(nullString)) { data.stringNullValue[i] = nullString; } + String trimType = meta.getOutputFields().get(i).getTrimType(); + if (!StringUtil.isEmpty(trimType)) { + data.trimType[i] = trimType; + } } } diff --git a/plugins/transforms/concatfields/src/main/java/org/apache/hop/pipeline/transforms/concatfields/ConcatFieldsData.java b/plugins/transforms/concatfields/src/main/java/org/apache/hop/pipeline/transforms/concatfields/ConcatFieldsData.java index db0ae9ef7c..be89feba10 100644 --- a/plugins/transforms/concatfields/src/main/java/org/apache/hop/pipeline/transforms/concatfields/ConcatFieldsData.java +++ b/plugins/transforms/concatfields/src/main/java/org/apache/hop/pipeline/transforms/concatfields/ConcatFieldsData.java @@ -37,6 +37,9 @@ public class ConcatFieldsData extends BaseTransformData implements ITransformDat public String stringSeparator; public String stringEnclosure; public String[] stringNullValue; + + public String[] trimType; + public int targetFieldLength; // for fast data dump (StringBuilder size) public ConcatFieldsData() { diff --git a/plugins/transforms/concatfields/src/main/java/org/apache/hop/pipeline/transforms/concatfields/ConcatFieldsMeta.java b/plugins/transforms/concatfields/src/main/java/org/apache/hop/pipeline/transforms/concatfields/ConcatFieldsMeta.java index dc7057ad5e..5668b8dfb3 100644 --- a/plugins/transforms/concatfields/src/main/java/org/apache/hop/pipeline/transforms/concatfields/ConcatFieldsMeta.java +++ b/plugins/transforms/concatfields/src/main/java/org/apache/hop/pipeline/transforms/concatfields/ConcatFieldsMeta.java @@ -51,6 +51,10 @@ public class ConcatFieldsMeta extends BaseTransformMeta { private static final Class PKG = ConcatFieldsMeta.class; + public static final String TRIM_TYPE_LEFT = "left"; + public static final String TRIM_TYPE_RIGHT = "right"; + public static final String TRIM_TYPE_BOTH = "both"; + /** The separator to choose for the CSV file */ @HopMetadataProperty(key = "separator", injectionKey = "SEPARATOR") private String separator;