This is an automated email from the ASF dual-hosted git repository.

hansva pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hop.git


The following commit(s) were added to refs/heads/master by this push:
     new f1ba6be5b0 HOP-4331 Cleanup XML of transform Null If
     new cb44003da5 Merge pull request #1832 from nadment/HOP-4331
f1ba6be5b0 is described below

commit f1ba6be5b005bd18153bc3eeeabe0da54ebf1837
Author: Nicolas Adment <[email protected]>
AuthorDate: Fri Nov 25 21:24:05 2022 +0100

    HOP-4331 Cleanup XML of transform Null If
---
 .../hop/pipeline/transforms/nullif/NullIf.java     |  11 +-
 .../pipeline/transforms/nullif/NullIfDialog.java   |  25 ++--
 .../pipeline/transforms/nullif/NullIfField.java    |  80 +++++++++++
 .../hop/pipeline/transforms/nullif/NullIfMeta.java | 149 +++------------------
 .../nullif/messages/messages_de_DE.properties      |   1 -
 .../nullif/messages/messages_en_US.properties      |   7 +-
 .../nullif/messages/messages_es_AR.properties      |   1 -
 .../nullif/messages/messages_es_ES.properties      |   1 -
 .../nullif/messages/messages_fr_FR.properties      |   1 -
 .../nullif/messages/messages_it_IT.properties      |   1 -
 .../nullif/messages/messages_ja_JP.properties      |   1 -
 .../nullif/messages/messages_ko_KR.properties      |   1 -
 .../nullif/messages/messages_zh_CN.properties      |   1 -
 .../transforms/nullif/NullIfMetaInjectionTest.java |   4 +-
 .../pipeline/transforms/nullif/NullIfMetaTest.java |  99 ++++----------
 .../hop/pipeline/transforms/nullif/NullIfTest.java |  28 ++--
 .../src/test/resources/null-if-transform.xml       |  48 +++++++
 17 files changed, 208 insertions(+), 251 deletions(-)

diff --git 
a/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIf.java
 
b/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIf.java
index c4734320b7..8f3cbbcb9c 100644
--- 
a/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIf.java
+++ 
b/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIf.java
@@ -55,16 +55,17 @@ public class NullIf extends BaseTransform<NullIfMeta, 
NullIfData> {
     if (first) {
       first = false;
       data.outputRowMeta = getInputRowMeta().clone();
-      int fieldsLength = meta.getFields().length;
+      int fieldsLength = meta.getFields().size();
       data.keynr = new int[fieldsLength];
       data.nullValue = new Object[fieldsLength];
       data.nullValueMeta = new IValueMeta[fieldsLength];
       for (int i = 0; i < fieldsLength; i++) {
-        data.keynr[i] = 
data.outputRowMeta.indexOfValue(meta.getFields()[i].getFieldName());
+        NullIfField field = meta.getFields().get(i);        
+        data.keynr[i] = data.outputRowMeta.indexOfValue(field.getName());
         if (data.keynr[i] < 0) {
           logError(
               BaseMessages.getString(
-                  PKG, "NullIf.Log.CouldNotFindFieldInRow", 
meta.getFields()[i].getFieldName()));
+                  PKG, "NullIf.Log.CouldNotFindFieldInRow", field.getName()));
           setErrors(1);
           stopAll();
           return false;
@@ -74,7 +75,7 @@ public class NullIf extends BaseTransform<NullIfMeta, 
NullIfData> {
         ValueMetaString vms = new ValueMetaString();
         vms.setConversionMask(data.nullValueMeta[i].getConversionMask());
         data.nullValue[i] =
-            data.nullValueMeta[i].convertData(vms, 
meta.getFields()[i].getFieldValue());
+            data.nullValueMeta[i].convertData(vms, field.getValue());
       }
     }
 
@@ -84,7 +85,7 @@ public class NullIf extends BaseTransform<NullIfMeta, 
NullIfData> {
               + data.outputRowMeta.getString(r));
     }
 
-    for (int i = 0; i < meta.getFields().length; i++) {
+    for (int i = 0; i < meta.getFields().size(); i++) {
       Object field = r[data.keynr[i]];
       if (field != null && data.nullValueMeta[i].compare(field, 
data.nullValue[i]) == 0) {
         // OK, this value needs to be set to NULL
diff --git 
a/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIfDialog.java
 
b/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIfDialog.java
index 3bafbe48c0..b24982ba79 100644
--- 
a/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIfDialog.java
+++ 
b/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIfDialog.java
@@ -89,7 +89,7 @@ public class NullIfDialog extends BaseTransformDialog 
implements ITransformDialo
     shell.setText(BaseMessages.getString(PKG, "NullIfDialog.Shell.Label"));
 
     int middle = props.getMiddlePct();
-    int margin = props.getMargin();
+    int margin = PropsUi.getMargin();
 
     // Some buttons at the bottom
     //
@@ -132,7 +132,7 @@ public class NullIfDialog extends BaseTransformDialog 
implements ITransformDialo
     wlFields.setLayoutData(fdlFields);
 
     final int FieldsCols = 2;
-    final int fieldsRows = input.getFields().length;
+    final int fieldsRows = input.getFields().size();
 
     colinf = new ColumnInfo[FieldsCols];
     colinf[0] =
@@ -215,10 +215,10 @@ public class NullIfDialog extends BaseTransformDialog 
implements ITransformDialo
   public void getData() {
     wTransformName.setText(transformName);
 
-    for (int i = 0; i < input.getFields().length; i++) {
+    for (int i = 0; i < input.getFields().size(); i++) {
       TableItem item = wFields.table.getItem(i);
-      String name = input.getFields()[i].getFieldName();
-      String type = input.getFields()[i].getFieldValue();
+      String name = input.getFields().get(i).getName();
+      String type = input.getFields().get(i).getValue();
 
       if (name != null) {
         item.setText(1, name);
@@ -248,15 +248,14 @@ public class NullIfDialog extends BaseTransformDialog 
implements ITransformDialo
 
     transformName = wTransformName.getText(); // return value
 
-    int count = wFields.nrNonEmpty();
-    input.allocate(count);
-
-    // CHECKSTYLE:Indentation:OFF
-    for (int i = 0; i < count; i++) {
-      TableItem item = wFields.getNonEmpty(i);
-      input.getFields()[i].setFieldName(item.getText(1));
-      input.getFields()[i].setFieldValue(item.getText(2));
+    input.getFields().clear();
+    for (TableItem item : wFields.getNonEmptyItems()) {
+      NullIfField field = new NullIfField();
+      field.setName(item.getText(1));
+      field.setValue(item.getText(2));
+      input.getFields().add(field);
     }
+
     dispose();
   }
 
diff --git 
a/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIfField.java
 
b/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIfField.java
new file mode 100644
index 0000000000..fff3ba213e
--- /dev/null
+++ 
b/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIfField.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hop.pipeline.transforms.nullif;
+
+import org.apache.hop.core.Const;
+import org.apache.hop.core.row.value.ValueMetaBase;
+import org.apache.hop.metadata.api.HopMetadataProperty;
+
+import java.util.Objects;
+
+public class NullIfField implements Cloneable {
+
+    @HopMetadataProperty(injectionKey = "FIELDNAME", injectionKeyDescription = 
"NullIf.Injection.FIELDNAME")
+    private String name;
+
+    @HopMetadataProperty(injectionKey = "FIELDVALUE", injectionKeyDescription 
= "NullIf.Injection.FIELDVALUE")
+    private String value;
+    
+    public NullIfField() {
+    }
+
+    public NullIfField(String name, String value) {
+        this.name = name;
+        this.value = value;
+    }
+    
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getValue() {
+      return value;
+    }
+
+    public void setValue(String value) {
+      Boolean isEmptyAndNullDiffer =
+          ValueMetaBase.convertStringToBoolean(
+              
Const.NVL(System.getProperty(Const.HOP_EMPTY_STRING_DIFFERS_FROM_NULL, "N"), 
"N"));
+
+      this.value =
+          value == null && isEmptyAndNullDiffer ? Const.EMPTY_STRING : value;
+    }
+    
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        NullIfField field = (NullIfField) o;
+        return Objects.equals(name, field.name) && Objects.equals(value, 
field.value);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(name, value);
+    }
+
+    @Override
+    public NullIfField clone() {
+        return new NullIfField(name, value);
+    }
+}
diff --git 
a/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIfMeta.java
 
b/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIfMeta.java
index ac7c615b02..258082b956 100644
--- 
a/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIfMeta.java
+++ 
b/plugins/transforms/nullif/src/main/java/org/apache/hop/pipeline/transforms/nullif/NullIfMeta.java
@@ -18,25 +18,18 @@
 package org.apache.hop.pipeline.transforms.nullif;
 
 import org.apache.hop.core.CheckResult;
-import org.apache.hop.core.Const;
 import org.apache.hop.core.ICheckResult;
 import org.apache.hop.core.annotations.Transform;
-import org.apache.hop.core.exception.HopXmlException;
-import org.apache.hop.core.injection.Injection;
-import org.apache.hop.core.injection.InjectionDeep;
-import org.apache.hop.core.injection.InjectionSupported;
 import org.apache.hop.core.row.IRowMeta;
 import org.apache.hop.core.row.RowMeta;
-import org.apache.hop.core.row.value.ValueMetaBase;
 import org.apache.hop.core.variables.IVariables;
-import org.apache.hop.core.xml.XmlHandler;
 import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.metadata.api.HopMetadataProperty;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.pipeline.PipelineMeta;
 import org.apache.hop.pipeline.transform.BaseTransformMeta;
 import org.apache.hop.pipeline.transform.TransformMeta;
-import org.w3c.dom.Node;
-
+import java.util.ArrayList;
 import java.util.List;
 
 @Transform(
@@ -47,126 +40,37 @@ import java.util.List;
     categoryDescription = 
"i18n:org.apache.hop.pipeline.transform:BaseTransform.Category.Flow",
     keywords = "i18n::NullIfMeta.keyword",
     documentationUrl = "/pipeline/transforms/nullif.html")
-@InjectionSupported(
-    localizationPrefix = "Injection.NullIf.",
-    groups = {"FIELDS"})
 public class NullIfMeta extends BaseTransformMeta<NullIf, NullIfData> {
 
   private static final Class<?> PKG = NullIfMeta.class; // For Translator
 
-  public static class Field implements Cloneable {
-
-    @Injection(name = "FIELDNAME", group = "FIELDS")
-    private String fieldName;
-
-    @Injection(name = "FIELDVALUE", group = "FIELDS")
-    private String fieldValue;
-
-    /** @return Returns the fieldName. */
-    public String getFieldName() {
-      return fieldName;
-    }
-
-    /** @param fieldName The fieldName to set. */
-    public void setFieldName(String fieldName) {
-      this.fieldName = fieldName;
-    }
-
-    /** @return Returns the fieldValue. */
-    public String getFieldValue() {
-      return fieldValue;
-    }
-
-    /** @param fieldValue The fieldValue to set. */
-    public void setFieldValue(String fieldValue) {
-      Boolean isEmptyAndNullDiffer =
-          ValueMetaBase.convertStringToBoolean(
-              
Const.NVL(System.getProperty(Const.HOP_EMPTY_STRING_DIFFERS_FROM_NULL, "N"), 
"N"));
-
-      this.fieldValue =
-          fieldValue == null && isEmptyAndNullDiffer ? Const.EMPTY_STRING : 
fieldValue;
-    }
-
-    @Override
-    public Field clone() {
-      try {
-        return (Field) super.clone();
-      } catch (CloneNotSupportedException e) {
-        throw new RuntimeException(e);
-      }
-    }
-  }
-
-  @InjectionDeep private Field[] fields;
+  @HopMetadataProperty(groupKey = "fields", key = "field", injectionGroupKey = 
"FIELDS",
+      injectionGroupDescription = "NullIf.Injection.FIELDS")
+  private List<NullIfField> fields;
 
   public NullIfMeta() {
-    super(); // allocate BaseTransformMeta
+    super();
+    this.fields = new ArrayList<>();
   }
-
-  public Field[] getFields() {
+  
+  public NullIfMeta(NullIfMeta meta) {    
+    this();
+    for (NullIfField field : meta.fields) {
+      fields.add(new NullIfField(field.getName(), field.getValue()));
+    }
+  }
+  
+  public List<NullIfField> getFields() {
     return fields;
   }
 
-  public void setFields(Field[] fields) {
+  public void setFields(List<NullIfField> fields) {
     this.fields = fields;
   }
 
-  @Override
-  public void loadXml(Node transformNode, IHopMetadataProvider 
metadataProvider)
-      throws HopXmlException {
-    readData(transformNode);
-  }
-
-  public void allocate(int count) {
-    fields = new Field[count];
-    for (int i = 0; i < count; i++) {
-      fields[i] = new Field();
-    }
-  }
-
   @Override
   public Object clone() {
-    NullIfMeta retval = (NullIfMeta) super.clone();
-
-    int count = fields.length;
-
-    retval.allocate(count);
-
-    for (int i = 0; i < count; i++) {
-      retval.getFields()[i] = fields[i].clone();
-    }
-    return retval;
-  }
-
-  private void readData(Node transformNode) throws HopXmlException {
-    try {
-      Node fieldNodes = XmlHandler.getSubNode(transformNode, "fields");
-      int count = XmlHandler.countNodes(fieldNodes, "field");
-
-      allocate(count);
-
-      for (int i = 0; i < count; i++) {
-        Node fnode = XmlHandler.getSubNodeByNr(fieldNodes, "field", i);
-
-        fields[i].setFieldName(XmlHandler.getTagValue(fnode, "name"));
-        fields[i].setFieldValue(XmlHandler.getTagValue(fnode, "value"));
-      }
-    } catch (Exception e) {
-      throw new HopXmlException(
-          BaseMessages.getString(PKG, 
"NullIfMeta.Exception.UnableToReadTransformMetaFromXML"), e);
-    }
-  }
-
-  @Override
-  public void setDefault() {
-    int count = 0;
-
-    allocate(count);
-
-    for (int i = 0; i < count; i++) {
-      fields[i].setFieldName("field" + i);
-      fields[i].setFieldValue("");
-    }
+    return new NullIfMeta(this);  
   }
 
   @Override
@@ -185,23 +89,6 @@ public class NullIfMeta extends BaseTransformMeta<NullIf, 
NullIfData> {
     return;
   }
 
-  @Override
-  public String getXml() {
-    StringBuilder retval = new StringBuilder();
-
-    retval.append("    <fields>" + Const.CR);
-
-    for (int i = 0; i < fields.length; i++) {
-      retval.append("      <field>" + Const.CR);
-      retval.append("        " + XmlHandler.addTagValue("name", 
fields[i].getFieldName()));
-      retval.append("        " + XmlHandler.addTagValue("value", 
fields[i].getFieldValue()));
-      retval.append("        </field>" + Const.CR);
-    }
-    retval.append("      </fields>" + Const.CR);
-
-    return retval.toString();
-  }
-
   @Override
   public void check(
       List<ICheckResult> remarks,
diff --git 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_de_DE.properties
 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_de_DE.properties
index f5e633184f..28a937c46d 100644
--- 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_de_DE.properties
+++ 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_de_DE.properties
@@ -26,7 +26,6 @@ NullIfDialog.ColumnInfo.Name=Name
 NullIfDialog.ColumnInfo.ValueToNull=Wert, der zu NULL umgewandelt wird
 NullIf.Log.ConvertFieldValuesToNullForRow=Konvertiere diese Felder zu NULL für 
die Zeile: 
 NullIf.Log.CouldNotFindFieldInRow=Konnte das felde ''{0}'' in der Zeile nicht 
finden.
-NullIfMeta.Exception.UnableToReadTransformMetaFromXML=Konnte die 
Schrittinformationen nicht von der XML-Datei laden
 NullIfMeta.CheckResult.NoReceivingFieldsError=Empfängt keine Felder von 
vorherigen Schritten\!
 NullIfMeta.CheckResult.TransformReceivingFieldsOK=Schritt ist zu einem 
vorherige verbunden und empfängt {0} Felder
 NullIfMeta.CheckResult.TransformRecevingInfoFromOtherTransforms=Schritt 
empfängt Informationen von anderen Schritten.
diff --git 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_en_US.properties
 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_en_US.properties
index d857ccb677..e84221a997 100644
--- 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_en_US.properties
+++ 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_en_US.properties
@@ -23,13 +23,12 @@ NullIfDialog.ColumnInfo.Name=Name
 NullIfDialog.ColumnInfo.ValueToNull=Value to turn to NULL
 NullIf.Log.ConvertFieldValuesToNullForRow=Convert field values to NULL for 
row: 
 NullIf.Log.CouldNotFindFieldInRow=Couldn''t find field ''{0}'' in row!
-NullIfMeta.Exception.UnableToReadTransformMetaFromXML=Unable to read transform 
information from XML
 NullIfMeta.CheckResult.NoReceivingFieldsError=Not receiving any fields from 
previous transforms\!
 NullIfMeta.CheckResult.TransformReceivingFieldsOK=Transform is connected to 
previous one, receiving {0} fields
 NullIfMeta.CheckResult.TransformRecevingInfoFromOtherTransforms=Transform is 
receiving info from other transforms.
 NullIfMeta.CheckResult.NoInputReceivedError=No input received from other 
transforms\!
 NullIfMeta.keyword=null,if
-Injection.NullIf.FIELDS=Fields
-Injection.NullIf.FIELDNAME=The name of the field to check.
-Injection.NullIf.FIELDVALUE=When this value to encountered, replace it with 
null.
+NullIf.Injection.FIELDS=Fields
+NullIf.Injection.FIELDNAME=The name of the field to check.
+NullIf.Injection.FIELDVALUE=When this value to encountered, replace it with 
null.
 
diff --git 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_es_AR.properties
 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_es_AR.properties
index c93a2f6757..c227add35f 100644
--- 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_es_AR.properties
+++ 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_es_AR.properties
@@ -24,7 +24,6 @@ NullIfMeta.CheckResult.NoInputReceivedError=No se est\u00E1 
recibiendo entrada d
 NullIfDialog.ColumnInfo.Name=Nombre
 NullIfMeta.CheckResult.TransformRecevingInfoFromOtherTransforms=El paso 
est\u00E1 recibiendo informaci\u00F3n de otros pasos.
 NullIfMeta.CheckResult.NoReceivingFieldsError=No se est\u00E1n recibiendo 
campos de entrada de otros pasos.
-NullIfMeta.Exception.UnableToReadTransformMetaFromXML=Imposible cargar 
informaci\u00F3n del paso desde XML
 NullIfMeta.CheckResult.TransformReceivingFieldsOK=El paso est\u00E1 conectado 
al anterior, recibiendo {0} campos
 NullIf.Log.CouldNotFindFieldInRow=Imposible encontrar el campo ''{0}'' en la 
fila.
 NullIf.Log.ConvertFieldValuesToNullForRow=Convertir valores a NULO para la 
fila\: 
diff --git 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_es_ES.properties
 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_es_ES.properties
index ec57d9a89e..eced3d6e9a 100644
--- 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_es_ES.properties
+++ 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_es_ES.properties
@@ -26,7 +26,6 @@ NullIfDialog.ColumnInfo.Name=Nombre
 NullIfDialog.ColumnInfo.ValueToNull=Valor a convertir en NULO
 NullIf.Log.ConvertFieldValuesToNullForRow=Convertir valores de campo a NULO 
para fila: 
 NullIf.Log.CouldNotFindFieldInRow=No se ha podido encontrar el campo ''{0}'' 
en la fila de entrada!
-NullIfMeta.Exception.UnableToReadTransformMetaFromXML=No se ha podido cargar 
información del paso desde XML
 NullIfMeta.CheckResult.NoReceivingFieldsError=No se ha recibido campos de 
entrada de otros pasos\!
 NullIfMeta.CheckResult.TransformReceivingFieldsOK=Paso esta conectado al 
anterior, recibiendo {0} campos
 NullIfMeta.CheckResult.TransformRecevingInfoFromOtherTransforms=Paso está 
recibiendo información de otros pasos.
diff --git 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_fr_FR.properties
 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_fr_FR.properties
index e8825de25f..13b5a451c2 100644
--- 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_fr_FR.properties
+++ 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_fr_FR.properties
@@ -26,7 +26,6 @@ NullIfDialog.ColumnInfo.Name=Nom champ
 NullIfDialog.ColumnInfo.ValueToNull=Rendre NULL si valeur \u00E9gale
 NullIf.Log.ConvertFieldValuesToNullForRow=Rendre les valeurs valeurs du champs 
: 
 NullIf.Log.CouldNotFindFieldInRow=Impossible de trouver le champ ''{0}'' dans 
la ligne!
-NullIfMeta.Exception.UnableToReadTransformMetaFromXML=Impossible de lire les 
informations de la transformation depuis le fichier XML
 NullIfMeta.CheckResult.NoReceivingFieldsError=Aucun champ re\u00E7u des 
transformations pr\u00E9c\u00E9dentes\!
 NullIfMeta.CheckResult.TransformReceivingFieldsOK=La transformation est 
connect\u00E9 \u00E0 la transformation pr\u00E9c\u00E9dente et re\u00E7oit {0} 
champ(s)
 NullIfMeta.CheckResult.TransformRecevingInfoFromOtherTransforms=La 
transformation re\u00E7oit des informations des autres transformations.
diff --git 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_it_IT.properties
 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_it_IT.properties
index 1e2b6ba4b2..0fa1430743 100644
--- 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_it_IT.properties
+++ 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_it_IT.properties
@@ -22,7 +22,6 @@ NullIfMeta.CheckResult.NoInputReceivedError=Nessun input 
ricevuto dagli altri tr
 NullIfDialog.ColumnInfo.Name=Nome
 NullIfMeta.CheckResult.TransformRecevingInfoFromOtherTransforms=Il transform 
sta ricevendo informazioni dagli altri transforms.
 NullIfMeta.CheckResult.NoReceivingFieldsError=Nessuna ricezione dei campi dai 
transforms precedenti\!
-NullIfMeta.Exception.UnableToReadTransformMetaFromXML=Impossibile leggere le 
informazioni del transform da XML
 NullIf.Log.CouldNotFindFieldInRow=Impossibile trovare il campo ''{0}'' nella 
riga\!
 NullIfMeta.CheckResult.TransformReceivingFieldsOK=Il transform \u00E8 
collegato al precedente, ricezione di {0} campi
 NullIf.Log.ConvertFieldValuesToNullForRow=Convertire i valori del campo a NULL 
per la riga\: 
diff --git 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_ja_JP.properties
 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_ja_JP.properties
index d38840dfd7..664267e557 100644
--- 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_ja_JP.properties
+++ 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_ja_JP.properties
@@ -26,7 +26,6 @@ 
NullIfDialog.ColumnInfo.Name=\u30d5\u30a3\u30fc\u30eb\u30c9\u540d
 NullIfDialog.ColumnInfo.ValueToNull=NULL\u53ef\u80fd
 NullIf.Log.ConvertFieldValuesToNullForRow=Convert field values to NULL for 
row: 
 NullIf.Log.CouldNotFindFieldInRow=Couldn''t find field ''{0}'' in row!
-NullIfMeta.Exception.UnableToReadTransformMetaFromXML=Unable to read transform 
information from XML
 NullIfMeta.CheckResult.NoReceivingFieldsError=Not receiving any fields from 
previous transforms\!
 NullIfMeta.CheckResult.TransformReceivingFieldsOK=Transform is connected to 
previous one, receiving {0} fields
 NullIfMeta.CheckResult.TransformRecevingInfoFromOtherTransforms=Transform is 
receiving info from other transforms.
diff --git 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_ko_KR.properties
 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_ko_KR.properties
index 6342639554..04e7775f6f 100644
--- 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_ko_KR.properties
+++ 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_ko_KR.properties
@@ -22,7 +22,6 @@ NullIfMeta.CheckResult.NoInputReceivedError=\uB2E4\uB978 
transform\uC5D0\uC11C \
 NullIfDialog.ColumnInfo.Name=\uC774\uB984
 NullIfMeta.CheckResult.TransformRecevingInfoFromOtherTransforms=transform 
\uC774 \uB2E4\uB978 transform\uC5D0\uC11C \uC815\uBCF4\uB97C 
\uBC1B\uC558\uC2B5\uB2C8\uB2E4.
 NullIfMeta.CheckResult.NoReceivingFieldsError=\uC774\uC804 
transform\uC5D0\uC11C \uBC1B\uC740 \uD544\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4\!
-NullIfMeta.Exception.UnableToReadTransformMetaFromXML=XML\uC5D0\uC11C 
transform \uC815\uBCF4\uB97C \uC77D\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4
 NullIf.Log.CouldNotFindFieldInRow=\uB85C\uC6B0\uC5D0\uC11C \uD544\uB4DC 
''{0}'' \uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4\!
 NullIfMeta.CheckResult.TransformReceivingFieldsOK=transform\uC774 \uC774\uC804 
transform\uACFC \uC5F0\uACB0\uB418\uC5C8\uACE0, {0} \uD544\uB4DC\uB97C 
\uBC1B\uC558\uC2B5\uB2C8\uB2E4
 NullIf.Log.ConvertFieldValuesToNullForRow=\uB85C\uC6B0\uC758 \uD544\uB4DC 
\uAC12\uC744 NULL\uB85C \uBCC0\uACBD\: 
diff --git 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_zh_CN.properties
 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_zh_CN.properties
index fcb8c2856c..ab346f925a 100644
--- 
a/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_zh_CN.properties
+++ 
b/plugins/transforms/nullif/src/main/resources/org/apache/hop/pipeline/transforms/nullif/messages/messages_zh_CN.properties
@@ -29,5 +29,4 @@ NullIfMeta.CheckResult.NoInputReceivedError=No input received 
from other transfo
 NullIfMeta.CheckResult.NoReceivingFieldsError=Not receiving any fields from 
previous transforms\!
 NullIfMeta.CheckResult.TransformReceivingFieldsOK=Transform is connected to 
previous one, receiving {0} fields
 NullIfMeta.CheckResult.TransformRecevingInfoFromOtherTransforms=Transform is 
receiving info from other transforms.
-NullIfMeta.Exception.UnableToReadTransformMetaFromXML=Unable to read transform 
information from XML
 NullIfMeta.keyword=null,if
diff --git 
a/plugins/transforms/nullif/src/test/java/org/apache/hop/pipeline/transforms/nullif/NullIfMetaInjectionTest.java
 
b/plugins/transforms/nullif/src/test/java/org/apache/hop/pipeline/transforms/nullif/NullIfMetaInjectionTest.java
index 0a92e1302b..702900a58d 100644
--- 
a/plugins/transforms/nullif/src/test/java/org/apache/hop/pipeline/transforms/nullif/NullIfMetaInjectionTest.java
+++ 
b/plugins/transforms/nullif/src/test/java/org/apache/hop/pipeline/transforms/nullif/NullIfMetaInjectionTest.java
@@ -33,7 +33,7 @@ public class NullIfMetaInjectionTest extends 
BaseMetadataInjectionTest<NullIfMet
 
   @Test
   public void test() throws Exception {
-    check("FIELDNAME", () -> meta.getFields()[0].getFieldName());
-    check("FIELDVALUE", () -> meta.getFields()[0].getFieldValue());
+    check("FIELDNAME", () -> meta.getFields().get(0).getName());
+    check("FIELDVALUE", () -> meta.getFields().get(0).getValue());
   }
 }
diff --git 
a/plugins/transforms/nullif/src/test/java/org/apache/hop/pipeline/transforms/nullif/NullIfMetaTest.java
 
b/plugins/transforms/nullif/src/test/java/org/apache/hop/pipeline/transforms/nullif/NullIfMetaTest.java
index cf95270e08..9c439d4c04 100644
--- 
a/plugins/transforms/nullif/src/test/java/org/apache/hop/pipeline/transforms/nullif/NullIfMetaTest.java
+++ 
b/plugins/transforms/nullif/src/test/java/org/apache/hop/pipeline/transforms/nullif/NullIfMetaTest.java
@@ -17,108 +17,57 @@
 
 package org.apache.hop.pipeline.transforms.nullif;
 
-import org.apache.commons.lang.builder.EqualsBuilder;
+import static org.junit.Assert.assertEquals;
 import org.apache.hop.core.Const;
-import org.apache.hop.core.exception.HopException;
+import org.apache.hop.core.HopEnvironment;
+import org.apache.hop.core.plugins.PluginRegistry;
 import org.apache.hop.junit.rules.RestoreHopEngineEnvironment;
-import org.apache.hop.pipeline.transforms.loadsave.LoadSaveTester;
-import 
org.apache.hop.pipeline.transforms.loadsave.validator.ArrayLoadSaveValidator;
-import 
org.apache.hop.pipeline.transforms.loadsave.validator.IFieldLoadSaveValidator;
-import org.apache.hop.pipeline.transforms.nullif.NullIfMeta.Field;
+import org.apache.hop.pipeline.transform.TransformSerializationTestUtil;
 import org.junit.Before;
 import org.junit.ClassRule;
 import org.junit.Test;
 
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.junit.Assert.assertEquals;
-
 public class NullIfMetaTest {
   @ClassRule public static RestoreHopEngineEnvironment env = new 
RestoreHopEngineEnvironment();
 
-  LoadSaveTester loadSaveTester;
-
   @Before
-  public void setUp() throws Exception {
-
-    List<String> attributes = Arrays.asList("fields");
-
-    Map<String, String> getterMap =
-        new HashMap<String, String>() {
-          {
-            put("fields", "getFields");
-          }
-        };
-    Map<String, String> setterMap =
-        new HashMap<String, String>() {
-          {
-            put("fields", "setFields");
-          }
-        };
-    Field field = new Field();
-    field.setFieldName("fieldName");
-    field.setFieldValue("fieldValue");
-    IFieldLoadSaveValidator<Field[]> fieldArrayLoadSaveValidator =
-        new ArrayLoadSaveValidator<>(new NullIfFieldLoadSaveValidator(field), 
5);
-    Map<String, IFieldLoadSaveValidator<?>> typeValidatorMap = new HashMap<>();
-
-    typeValidatorMap.put(Field[].class.getCanonicalName(), 
fieldArrayLoadSaveValidator);
-    Map<String, IFieldLoadSaveValidator<?>> attrValidatorMap = new HashMap<>();
-    attrValidatorMap.put("fields", fieldArrayLoadSaveValidator);
-
-    loadSaveTester =
-        new LoadSaveTester(
-            NullIfMeta.class, attributes, getterMap, setterMap, 
attrValidatorMap, typeValidatorMap);
+  public void setUpLoadSave() throws Exception {
+    HopEnvironment.init();
+    PluginRegistry.init();
   }
 
   @Test
-  public void testSerialization() throws HopException {
-    loadSaveTester.testSerialization();
+  public void testSerialization() throws Exception {
+    NullIfMeta meta =
+        TransformSerializationTestUtil.testSerialization(
+            "/null-if-transform.xml", NullIfMeta.class);
+    
+    assertEquals(2, meta.getFields().size());
+    assertEquals("fieldName", meta.getFields().get(0).getName());
+    assertEquals("two", meta.getFields().get(0).getValue());    
   }
 
   @Test
   public void setFieldValueTest() {
-    Field field = new Field();
+    NullIfField field = new NullIfField();
     System.setProperty(Const.HOP_EMPTY_STRING_DIFFERS_FROM_NULL, "N");
-    field.setFieldValue("theValue");
-    assertEquals("theValue", field.getFieldValue());
+    field.setValue("theValue");
+    assertEquals("theValue", field.getValue());
   }
 
   @Test
   public void setFieldValueNullTest() {
-    Field field = new Field();
+    NullIfField field = new NullIfField();
     System.setProperty(Const.HOP_EMPTY_STRING_DIFFERS_FROM_NULL, "N");
-    field.setFieldValue(null);
-    assertEquals(null, field.getFieldValue());
+    field.setValue(null);
+    assertEquals(null, field.getValue());
   }
 
   @Test
   public void setFieldValueNullWithEmptyStringsDiffersFromNullTest() {
-    Field field = new Field();
+    NullIfField field = new NullIfField();
     System.setProperty(Const.HOP_EMPTY_STRING_DIFFERS_FROM_NULL, "Y");
-    field.setFieldValue(null);
-    assertEquals("", field.getFieldValue());
-  }
-
-  public static class NullIfFieldLoadSaveValidator implements 
IFieldLoadSaveValidator<Field> {
-
-    private final Field defaultValue;
-
-    public NullIfFieldLoadSaveValidator(Field defaultValue) {
-      this.defaultValue = defaultValue;
-    }
-
-    @Override
-    public Field getTestObject() {
-      return defaultValue;
-    }
-
-    @Override
-    public boolean validateTestObject(Field testObject, Object actual) {
-      return EqualsBuilder.reflectionEquals(testObject, actual);
-    }
+    field.setValue(null);
+    assertEquals("", field.getValue());
   }
 }
diff --git 
a/plugins/transforms/nullif/src/test/java/org/apache/hop/pipeline/transforms/nullif/NullIfTest.java
 
b/plugins/transforms/nullif/src/test/java/org/apache/hop/pipeline/transforms/nullif/NullIfTest.java
index f635036a44..e84530d526 100644
--- 
a/plugins/transforms/nullif/src/test/java/org/apache/hop/pipeline/transforms/nullif/NullIfTest.java
+++ 
b/plugins/transforms/nullif/src/test/java/org/apache/hop/pipeline/transforms/nullif/NullIfTest.java
@@ -33,7 +33,6 @@ import org.apache.hop.junit.rules.RestoreHopEngineEnvironment;
 import org.apache.hop.metadata.api.IHopMetadataProvider;
 import org.apache.hop.pipeline.transform.TransformMeta;
 import org.apache.hop.pipeline.transforms.mock.TransformMockHelper;
-import org.apache.hop.pipeline.transforms.nullif.NullIfMeta.Field;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
@@ -42,8 +41,9 @@ import org.junit.Test;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
-
+import java.util.List;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyString;
 import static org.mockito.Mockito.doCallRealMethod;
@@ -73,7 +73,7 @@ public class NullIfTest {
 
   private NullIfMeta mockProcessRowMeta() throws HopTransformException {
     NullIfMeta processRowMeta = smh.iTransformMeta;
-    Field[] fields = createArrayWithOneField("nullable-field", 
"nullable-value");
+    List<NullIfField> fields = createArrayWithOneField("nullable-field", 
"nullable-value");
     doReturn(fields).when(processRowMeta).getFields();
     doCallRealMethod()
         .when(processRowMeta)
@@ -133,11 +133,13 @@ public class NullIfTest {
     }
   }
 
-  private static Field[] createArrayWithOneField(String fieldName, String 
fieldValue) {
-    Field field = new Field();
-    field.setFieldName(fieldName);
-    field.setFieldValue(fieldValue);
-    return new Field[] {field};
+  private static List<NullIfField> createArrayWithOneField(String name, String 
value) {
+    List<NullIfField> fields = new ArrayList<>();
+    NullIfField field = new NullIfField();
+    field.setName(name);
+    field.setValue(value);
+    fields.add(field);
+    return fields;
   }
 
   private RowMeta getInputRowMeta2() {
@@ -160,11 +162,11 @@ public class NullIfTest {
 
   private NullIfMeta mockProcessRowMeta2() throws HopTransformException {
     NullIfMeta processRowMeta = smh.iTransformMeta;
-    Field[] fields = new Field[4];
-    fields[0] = createArrayWithOneField("value1", "20150606")[0];
-    fields[1] = createArrayWithOneField("value2", "2015/06/06 
00:00:00.000")[0];
-    fields[2] = createArrayWithOneField("value3", "20150606")[0];
-    fields[3] = createArrayWithOneField("value4", "2015/06/06 
00:00:00.000")[0];
+    List<NullIfField> fields = new ArrayList<>();
+    fields.add(new NullIfField("value1", "20150606"));
+    fields.add(new NullIfField("value2", "2015/06/06 00:00:00.000"));
+    fields.add(new NullIfField("value3", "20150606"));
+    fields.add(new NullIfField("value4", "2015/06/06 00:00:00.000"));
     doReturn(fields).when(processRowMeta).getFields();
     doCallRealMethod()
         .when(processRowMeta)
diff --git a/plugins/transforms/nullif/src/test/resources/null-if-transform.xml 
b/plugins/transforms/nullif/src/test/resources/null-if-transform.xml
new file mode 100644
index 0000000000..801485f0c9
--- /dev/null
+++ b/plugins/transforms/nullif/src/test/resources/null-if-transform.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+
+<transform>
+    <name>Null if two, four</name>
+    <type>NullIf</type>
+    <description/>
+    <distribute>Y</distribute>
+    <custom_distribution/>
+    <copies>1</copies>
+    <partitioning>
+      <method>none</method>
+      <schema_name/>
+    </partitioning>
+    <fields>
+      <field>
+        <name>fieldName</name>
+        <value>two</value>
+      </field>
+      <field>
+        <name>fieldName</name>
+        <value>four</value>
+      </field>
+    </fields>
+    <attributes/>
+    <GUI>
+      <xloc>208</xloc>
+      <yloc>96</yloc>
+    </GUI>
+  </transform>
+


Reply via email to