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 b616076d11 Stream lookup - Lookup key field list showing fields from 
both main and lookup hops #2429
     new b153b660fa Merge pull request #2440 from nadment/2429
b616076d11 is described below

commit b616076d11f818371151311b954b821179f95c6c
Author: Nicolas Adment <[email protected]>
AuthorDate: Sun Feb 19 13:05:12 2023 +0100

    Stream lookup - Lookup key field list showing fields from both main and
    lookup hops #2429
---
 .../streamlookup/StreamLookupDialog.java           | 136 ++++++++-------------
 .../transforms/streamlookup/StreamLookupMeta.java  |  10 +-
 2 files changed, 53 insertions(+), 93 deletions(-)

diff --git 
a/plugins/transforms/streamlookup/src/main/java/org/apache/hop/pipeline/transforms/streamlookup/StreamLookupDialog.java
 
b/plugins/transforms/streamlookup/src/main/java/org/apache/hop/pipeline/transforms/streamlookup/StreamLookupDialog.java
index a62eee729f..50f5b07ea3 100644
--- 
a/plugins/transforms/streamlookup/src/main/java/org/apache/hop/pipeline/transforms/streamlookup/StreamLookupDialog.java
+++ 
b/plugins/transforms/streamlookup/src/main/java/org/apache/hop/pipeline/transforms/streamlookup/StreamLookupDialog.java
@@ -20,6 +20,8 @@ package org.apache.hop.pipeline.transforms.streamlookup;
 import org.apache.hop.core.Const;
 import org.apache.hop.core.exception.HopException;
 import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.core.row.IValueMeta;
+import org.apache.hop.core.row.RowMeta;
 import org.apache.hop.core.row.value.ValueMetaFactory;
 import org.apache.hop.core.util.Utils;
 import org.apache.hop.core.variables.IVariables;
@@ -37,30 +39,25 @@ import org.apache.hop.ui.core.widget.ColumnInfo;
 import org.apache.hop.ui.core.widget.TableView;
 import org.apache.hop.ui.pipeline.transform.BaseTransformDialog;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.FormAttachment;
 import org.eclipse.swt.layout.FormData;
 import org.eclipse.swt.layout.FormLayout;
 import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.TableItem;
 import org.eclipse.swt.widgets.Text;
 
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 public class StreamLookupDialog extends BaseTransformDialog implements 
ITransformDialog {
   private static final Class<?> PKG = StreamLookupMeta.class; // For Translator
 
-  private CCombo wTransform;
+  private Combo wTransform;
 
   private TableView wKey;
 
@@ -93,14 +90,7 @@ public class StreamLookupDialog extends BaseTransformDialog 
implements ITransfor
     setShellImage(shell, input);
 
     ModifyListener lsMod = e -> input.setChanged();
-    SelectionListener lsSelection =
-        new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            input.setChanged();
-            setComboBoxesLookup();
-          }
-        };
+
     changed = input.hasChanged();
 
     FormLayout formLayout = new FormLayout();
@@ -111,7 +101,7 @@ public class StreamLookupDialog extends BaseTransformDialog 
implements ITransfor
     shell.setText(BaseMessages.getString(PKG, 
"StreamLookupDialog.Shell.Title"));
 
     int middle = props.getMiddlePct();
-    int margin = props.getMargin();
+    int margin = PropsUi.getMargin();
 
     // THE BUTTONS at the bottom
     //
@@ -158,7 +148,7 @@ public class StreamLookupDialog extends BaseTransformDialog 
implements ITransfor
     fdlTransform.right = new FormAttachment(middle, -margin);
     fdlTransform.top = new FormAttachment(wTransformName, margin * 2);
     wlTransform.setLayoutData(fdlTransform);
-    wTransform = new CCombo(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
+    wTransform = new Combo(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
     PropsUi.setLook(wTransform);
 
     List<TransformMeta> previousTransforms =
@@ -166,10 +156,12 @@ public class StreamLookupDialog extends 
BaseTransformDialog implements ITransfor
     for (TransformMeta previousTransform : previousTransforms) {
       wTransform.add(previousTransform.getName());
     }
-    // pipelineMeta.getInfoTransform()
 
     wTransform.addModifyListener(lsMod);
-    wTransform.addSelectionListener(lsSelection);
+    wTransform.addListener(SWT.Selection, e -> {
+        input.setChanged();
+        updateComboFields();    
+    });
 
     FormData fdTransform = new FormData();
     fdTransform.left = new FormAttachment(middle, 0);
@@ -235,13 +227,7 @@ public class StreamLookupDialog extends 
BaseTransformDialog implements ITransfor
     fdSortedList.top = new FormAttachment(wlSortedList, 0, SWT.CENTER);
     fdSortedList.right = new FormAttachment(100, 0);
     wSortedList.setLayoutData(fdSortedList);
-    wSortedList.addSelectionListener(
-        new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            input.setChanged();
-          }
-        });
+    wSortedList.addListener(SWT.Selection, e -> input.setChanged());
 
     Label wlIntegerPair = new Label(shell, SWT.RIGHT);
     wlIntegerPair.setText(BaseMessages.getString(PKG, 
"StreamLookupDialog.IntegerPair.Label"));
@@ -259,13 +245,7 @@ public class StreamLookupDialog extends 
BaseTransformDialog implements ITransfor
     fdIntegerPair.top = new FormAttachment(wlIntegerPair, 0, SWT.CENTER);
     fdIntegerPair.right = new FormAttachment(100, 0);
     wIntegerPair.setLayoutData(fdIntegerPair);
-    wIntegerPair.addSelectionListener(
-        new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            input.setChanged();
-          }
-        });
+    wIntegerPair.addListener(SWT.Selection, e -> input.setChanged());
 
     Label wlPreserveMemory = new Label(shell, SWT.RIGHT);
     wlPreserveMemory.setText(
@@ -283,13 +263,8 @@ public class StreamLookupDialog extends 
BaseTransformDialog implements ITransfor
     fdPreserveMemory.top = new FormAttachment(wlPreserveMemory, 0, SWT.CENTER);
     fdPreserveMemory.right = new FormAttachment(100, 0);
     wPreserveMemory.setLayoutData(fdPreserveMemory);
-    wPreserveMemory.addSelectionListener(
-        new SelectionAdapter() {
-          @Override
-          public void widgetSelected(SelectionEvent e) {
-            input.setChanged();
-          }
-        });
+    wPreserveMemory.addListener(SWT.Selection, e -> input.setChanged());
+    
     // preserve memory should be enabled to have this options on.
     wPreserveMemory.addListener(
         SWT.Selection,
@@ -353,8 +328,8 @@ public class StreamLookupDialog extends BaseTransformDialog 
implements ITransfor
 
     getData();
 
-    setComboBoxes();
-    setComboBoxesLookup();
+    
+    updateComboFields();
     input.setChanged(changed);
 
     BaseDialog.defaultShellHandling(shell, c -> ok(), c -> cancel());
@@ -362,70 +337,54 @@ public class StreamLookupDialog extends 
BaseTransformDialog implements ITransfor
     return transformName;
   }
 
-  protected void setComboBoxes() {
-    //
-    // Search the fields in the background
-    //
+  /**
+  /* Search the input and lookup fields in the background
+   **/
+  protected void updateComboFields() {
 
     final Runnable runnable =
         () -> {
+          
+          String lookupTransformName = wTransform.getText();
+          
+          // Input fields
+          //
           TransformMeta transformMeta = 
pipelineMeta.findTransform(transformName);
           if (transformMeta != null) {
             try {
-              IRowMeta row = pipelineMeta.getPrevTransformFields(variables, 
transformMeta);
-              Map<String, Integer> prevFields = new HashMap<>();
-              // Remember these fields...
-              for (int i = 0; i < row.size(); i++) {
-                prevFields.put(row.getValueMeta(i).getName(), i);
+              IRowMeta rowMeta = new RowMeta();              
+              for (String prevTransformName: 
pipelineMeta.getPrevTransformNames(transformName)) {
+                  if ( 
!prevTransformName.equalsIgnoreCase(lookupTransformName) ) {                  
+                  IRowMeta row = 
pipelineMeta.getPrevTransformFields(variables, transformMeta, 
prevTransformName, null);
+
+                  // See if the add fields are not already in the row
+                  for (int i = 0; i < row.size(); i++) {
+                    IValueMeta valueMeta = row.getValueMeta(i);                
  
+                    if (rowMeta.searchValueMeta(valueMeta.getName()) == null) {
+                      rowMeta.addValueMeta(valueMeta);
+                    }
+                  }
+                }
               }
 
-              // Something was changed in the row.
-              //
-              final Map<String, Integer> fields = new HashMap<>();
-
-              // Add the currentMeta fields...
-              fields.putAll(prevFields);
-
-              Set<String> keySet = fields.keySet();
-              List<String> entries = new ArrayList<>(keySet);
+              String[] fieldNames = Const.sortStrings(rowMeta.getFieldNames());
 
-              String[] fieldNames = entries.toArray(new 
String[entries.size()]);
-              Const.sortStrings(fieldNames);
               // return fields
               ciKey[0].setComboValues(fieldNames);
             } catch (HopException e) {
               logError(BaseMessages.getString(PKG, 
"System.Dialog.GetFieldsFailed.Message"));
             }
           }
-        };
-    new Thread(runnable).start();
-  }
-
-  protected void setComboBoxesLookup() {
-    Runnable fieldLoader =
-        () -> {
-          TransformMeta lookupTransformMeta = 
pipelineMeta.findTransform(wTransform.getText());
+          
+          // Lookup fields
+          //
+          TransformMeta lookupTransformMeta = 
pipelineMeta.findTransform(lookupTransformName);
           if (lookupTransformMeta != null) {
             try {
-              IRowMeta row = pipelineMeta.getTransformFields(variables, 
lookupTransformMeta);
-              Map<String, Integer> lookupFields = new HashMap<>();
-              // Remember these fields...
-              for (int i = 0; i < row.size(); i++) {
-                lookupFields.put(row.getValueMeta(i).getName(), i);
-              }
-
-              // Something was changed in the row.
-              //
-              final Map<String, Integer> fields = new HashMap<>();
-
-              // Add the currentMeta fields...
-              fields.putAll(lookupFields);
+              IRowMeta rowMeta = pipelineMeta.getTransformFields(variables, 
lookupTransformMeta);
 
-              Set<String> keySet = fields.keySet();
-              List<String> entries = new ArrayList<>(keySet);
+              String[] fieldNames = Const.sortStrings(rowMeta.getFieldNames());
 
-              String[] fieldNames = entries.toArray(new 
String[entries.size()]);
-              Const.sortStrings(fieldNames);
               // return fields
               ciReturn[0].setComboValues(fieldNames);
               ciKey[1].setComboValues(fieldNames);
@@ -436,8 +395,9 @@ public class StreamLookupDialog extends BaseTransformDialog 
implements ITransfor
                       + "]!");
             }
           }
+          
         };
-    shell.getDisplay().asyncExec(fieldLoader);
+        shell.getDisplay().asyncExec(runnable);
   }
 
   /** Copy information from the meta-data input to the dialog fields. */
diff --git 
a/plugins/transforms/streamlookup/src/main/java/org/apache/hop/pipeline/transforms/streamlookup/StreamLookupMeta.java
 
b/plugins/transforms/streamlookup/src/main/java/org/apache/hop/pipeline/transforms/streamlookup/StreamLookupMeta.java
index 8dce4527c0..ff00322730 100644
--- 
a/plugins/transforms/streamlookup/src/main/java/org/apache/hop/pipeline/transforms/streamlookup/StreamLookupMeta.java
+++ 
b/plugins/transforms/streamlookup/src/main/java/org/apache/hop/pipeline/transforms/streamlookup/StreamLookupMeta.java
@@ -229,12 +229,12 @@ public class StreamLookupMeta extends 
BaseTransformMeta<StreamLookup, StreamLook
       throws HopTransformException {
     if (info != null && info.length == 1 && info[0] != null) {
       for (int i = 0; i < getValueName().length; i++) {
-        IValueMeta v = info[0].searchValueMeta(getValue()[i]);
-        if (v != null) {
+        IValueMeta valueMeta = info[0].searchValueMeta(getValue()[i]);
+        if (valueMeta != null) {
           // Configuration error/missing resources...
-          v.setName(getValueName()[i]);
-          v.setOrigin(origin);
-          row.addValueMeta(v);
+          valueMeta.setName(getValueName()[i]);
+          valueMeta.setOrigin(origin);
+          row.addValueMeta(valueMeta);
         } else {
           throw new HopTransformException(
               BaseMessages.getString(

Reply via email to