This is an automated email from the ASF dual-hosted git repository.
hansva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git
The following commit(s) were added to refs/heads/main by this push:
new 84abea2f98 issue #7434 : A simple ShowRowsDialog (#7483)
84abea2f98 is described below
commit 84abea2f987a6e18dd85a4a87b5899599ff4dea7
Author: Matt Casters <[email protected]>
AuthorDate: Mon Jul 13 16:18:13 2026 +0200
issue #7434 : A simple ShowRowsDialog (#7483)
---
.../xp/ValidatePipelineUnitTestExtensionPoint.java | 29 +--
.../org/apache/hop/ui/testing/DataSetEditor.java | 16 +-
.../ui/testing/messages/messages_en_US.properties | 2 +
.../database/dialog/DatabaseExplorerDialog.java | 15 +-
.../hop/ui/core/database/dialog/SqlEditor.java | 6 +-
.../hop/ui/core/dialog/PreviewRowsDialog.java | 6 +-
.../apache/hop/ui/core/dialog/ShowRowsDialog.java | 236 +++++++++++++++++++++
.../hopgui/file/pipeline/HopGuiPipelineGraph.java | 15 +-
.../dialog/messages/messages_en_US.properties | 3 +
.../core/dialog/messages/messages_en_US.properties | 2 +
10 files changed, 288 insertions(+), 42 deletions(-)
diff --git
a/plugins/misc/testing/src/main/java/org/apache/hop/testing/xp/ValidatePipelineUnitTestExtensionPoint.java
b/plugins/misc/testing/src/main/java/org/apache/hop/testing/xp/ValidatePipelineUnitTestExtensionPoint.java
index 586def91f8..58cb84a3b7 100644
---
a/plugins/misc/testing/src/main/java/org/apache/hop/testing/xp/ValidatePipelineUnitTestExtensionPoint.java
+++
b/plugins/misc/testing/src/main/java/org/apache/hop/testing/xp/ValidatePipelineUnitTestExtensionPoint.java
@@ -32,9 +32,8 @@ import org.apache.hop.pipeline.engine.IPipelineEngine;
import org.apache.hop.testing.PipelineUnitTest;
import org.apache.hop.testing.UnitTestResult;
import org.apache.hop.testing.util.DataSetConst;
-import org.apache.hop.ui.core.dialog.PreviewRowsDialog;
+import org.apache.hop.ui.core.dialog.ShowRowsDialog;
import org.apache.hop.ui.hopgui.HopGui;
-import org.eclipse.swt.SWT;
@ExtensionPoint(
extensionPointId = "PipelineFinish",
@@ -130,22 +129,14 @@ public class ValidatePipelineUnitTestExtensionPoint
.getShell()
.getDisplay()
.asyncExec(
- () -> {
- PreviewRowsDialog dialog =
- new PreviewRowsDialog(
- hopGui.getShell(),
- pipeline,
- SWT.NONE,
- "Unit test results",
- UnitTestResult.getRowMeta(),
- UnitTestResult.getRowData(results));
- dialog.setDynamic(false);
- dialog.setProposingToGetMoreRows(false);
- dialog.setProposingToStop(false);
- dialog.setTitleMessage(
- BaseMessages.getString(PKG, "UnitTestsResult.Dialog.Header"),
- BaseMessages.getString(PKG,
"UnitTestsResult.Dialog.Message"));
- dialog.open();
- });
+ () ->
+ new ShowRowsDialog(
+ hopGui.getShell(),
+ pipeline,
+ BaseMessages.getString(PKG,
"UnitTestsResult.Dialog.Header"),
+ BaseMessages.getString(PKG,
"UnitTestsResult.Dialog.Message"),
+ UnitTestResult.getRowMeta(),
+ UnitTestResult.getRowData(results))
+ .open());
}
}
diff --git
a/plugins/misc/testing/src/main/java/org/apache/hop/ui/testing/DataSetEditor.java
b/plugins/misc/testing/src/main/java/org/apache/hop/ui/testing/DataSetEditor.java
index 4ea9444300..e9053b135f 100644
---
a/plugins/misc/testing/src/main/java/org/apache/hop/ui/testing/DataSetEditor.java
+++
b/plugins/misc/testing/src/main/java/org/apache/hop/ui/testing/DataSetEditor.java
@@ -34,7 +34,7 @@ import org.apache.hop.testing.DataSetField;
import org.apache.hop.ui.core.PropsUi;
import org.apache.hop.ui.core.dialog.ErrorDialog;
import org.apache.hop.ui.core.dialog.MessageBox;
-import org.apache.hop.ui.core.dialog.PreviewRowsDialog;
+import org.apache.hop.ui.core.dialog.ShowRowsDialog;
import org.apache.hop.ui.core.metadata.MetadataEditor;
import org.apache.hop.ui.core.metadata.MetadataManager;
import org.apache.hop.ui.core.widget.ColumnInfo;
@@ -392,13 +392,17 @@ public class DataSetEditor extends
MetadataEditor<DataSet> {
List<Object[]> setRows = set.getAllRows(manager.getVariables(),
LogChannel.UI);
IRowMeta setRowMeta = set.getSetRowMeta();
- PreviewRowsDialog previewRowsDialog =
- new PreviewRowsDialog(
- parent.getShell(), new Variables(), SWT.NONE, set.getName(),
setRowMeta, setRows);
- previewRowsDialog.open();
+ new ShowRowsDialog(
+ parent.getShell(),
+ manager.getVariables(),
+ BaseMessages.getString(PKG, "DataSetDialog.ViewRows.Title"),
+ BaseMessages.getString(PKG, "DataSetDialog.ViewRows.Message",
set.getName()),
+ setRowMeta,
+ setRows)
+ .open();
} catch (Exception e) {
- new ErrorDialog(getShell(), CONST_ERROR, "Error previewing data from
dataset table", e);
+ new ErrorDialog(getShell(), CONST_ERROR, "Error viewing data from
dataset table", e);
}
}
diff --git
a/plugins/misc/testing/src/main/resources/org/apache/hop/ui/testing/messages/messages_en_US.properties
b/plugins/misc/testing/src/main/resources/org/apache/hop/ui/testing/messages/messages_en_US.properties
index 31bdb3eae8..a47835e20f 100644
---
a/plugins/misc/testing/src/main/resources/org/apache/hop/ui/testing/messages/messages_en_US.properties
+++
b/plugins/misc/testing/src/main/resources/org/apache/hop/ui/testing/messages/messages_en_US.properties
@@ -34,6 +34,8 @@ DataSetDialog.FieldMapping.Label=The data set fields and
their column names in t
DataSetDialog.FolderName.Label=Set folder (or use HOP_DATASETS_FOLDER)
DataSetDialog.Name.Label=Name
DataSetDialog.ViewData.Button=View
+DataSetDialog.ViewRows.Title=View data set rows
+DataSetDialog.ViewRows.Message=Rows of data set ''{0}''
EditRowsDialog.Error.ErrorGettingRowForData=Error parsing data on row {0}
EditRowsDialog.ErrorConvertingData=There was an error converting string values
into their native data types
EditRowsDialog.NoRowMeta.Message=No row metadata was specified so no rows can
be edited.
diff --git
a/ui/src/main/java/org/apache/hop/ui/core/database/dialog/DatabaseExplorerDialog.java
b/ui/src/main/java/org/apache/hop/ui/core/database/dialog/DatabaseExplorerDialog.java
index a89e83a143..8fc6810e7a 100644
---
a/ui/src/main/java/org/apache/hop/ui/core/database/dialog/DatabaseExplorerDialog.java
+++
b/ui/src/main/java/org/apache/hop/ui/core/database/dialog/DatabaseExplorerDialog.java
@@ -44,7 +44,7 @@ import org.apache.hop.ui.core.PropsUi;
import org.apache.hop.ui.core.dialog.EnterSelectionDialog;
import org.apache.hop.ui.core.dialog.ErrorDialog;
import org.apache.hop.ui.core.dialog.MessageBox;
-import org.apache.hop.ui.core.dialog.PreviewRowsDialog;
+import org.apache.hop.ui.core.dialog.ShowRowsDialog;
import org.apache.hop.ui.core.dialog.TransformFieldsDialog;
import org.apache.hop.ui.core.gui.GuiResource;
import org.apache.hop.ui.core.gui.GuiToolbarWidgets;
@@ -832,10 +832,15 @@ public class DatabaseExplorerDialog extends Dialog {
List<Object[]> rows = pd.open();
if (pd.isPreviewSucceeded()) {
if (!rows.isEmpty()) {
- PreviewRowsDialog prd =
- new PreviewRowsDialog(
- shell, variables, SWT.NONE, qualifiedTableName,
pd.getRowMeta(), rows);
- prd.open();
+ new ShowRowsDialog(
+ shell,
+ variables,
+ BaseMessages.getString(PKG,
"DatabaseExplorerDialog.ShowRows.Title"),
+ BaseMessages.getString(
+ PKG, "DatabaseExplorerDialog.ShowRows.Message",
qualifiedTableName),
+ pd.getRowMeta(),
+ rows)
+ .open();
} else {
MessageBox mb = new MessageBox(shell, SWT.ICON_INFORMATION | SWT.OK);
mb.setMessage(BaseMessages.getString(PKG,
"DatabaseExplorerDialog.NoRows.Message"));
diff --git
a/ui/src/main/java/org/apache/hop/ui/core/database/dialog/SqlEditor.java
b/ui/src/main/java/org/apache/hop/ui/core/database/dialog/SqlEditor.java
index e37639050d..d0d836dc4c 100644
--- a/ui/src/main/java/org/apache/hop/ui/core/database/dialog/SqlEditor.java
+++ b/ui/src/main/java/org/apache/hop/ui/core/database/dialog/SqlEditor.java
@@ -44,8 +44,8 @@ import org.apache.hop.ui.core.dialog.BaseDialog;
import org.apache.hop.ui.core.dialog.EnterTextDialog;
import org.apache.hop.ui.core.dialog.ErrorDialog;
import org.apache.hop.ui.core.dialog.MessageBox;
-import org.apache.hop.ui.core.dialog.PreviewRowsDialog;
import org.apache.hop.ui.core.dialog.ProgressMonitorDialog;
+import org.apache.hop.ui.core.dialog.ShowRowsDialog;
import org.apache.hop.ui.core.gui.GuiResource;
import org.apache.hop.ui.core.gui.WindowProperty;
import org.apache.hop.ui.core.widget.SQLStyledTextComp;
@@ -420,12 +420,12 @@ public class SqlEditor {
.getDisplay()
.syncExec(
() ->
- new PreviewRowsDialog(
+ new ShowRowsDialog(
shell,
variables,
- SWT.NONE,
BaseMessages.getString(
PKG, "SQLEditor.ResultRows.Title",
Integer.toString(statNr)),
+ BaseMessages.getString(PKG,
"SQLEditor.ResultRows.Message"),
rowMeta,
rows)
.open());
diff --git
a/ui/src/main/java/org/apache/hop/ui/core/dialog/PreviewRowsDialog.java
b/ui/src/main/java/org/apache/hop/ui/core/dialog/PreviewRowsDialog.java
index ead736ba20..8d451aca2f 100644
--- a/ui/src/main/java/org/apache/hop/ui/core/dialog/PreviewRowsDialog.java
+++ b/ui/src/main/java/org/apache/hop/ui/core/dialog/PreviewRowsDialog.java
@@ -57,7 +57,11 @@ import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
-/** Displays an ArrayList of rows in a TableView. */
+/**
+ * Displays rows for transform preview: streaming updates, optional logging
text, and actions such
+ * as "get more rows" or stop. For a static set of rows with a custom title
and message (no preview
+ * actions), prefer {@link ShowRowsDialog}.
+ */
public class PreviewRowsDialog {
private static final Class<?> PKG = PreviewRowsDialog.class;
diff --git a/ui/src/main/java/org/apache/hop/ui/core/dialog/ShowRowsDialog.java
b/ui/src/main/java/org/apache/hop/ui/core/dialog/ShowRowsDialog.java
new file mode 100644
index 0000000000..bbd246ed11
--- /dev/null
+++ b/ui/src/main/java/org/apache/hop/ui/core/dialog/ShowRowsDialog.java
@@ -0,0 +1,236 @@
+/*
+ * 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.ui.core.dialog;
+
+import java.util.List;
+import org.apache.commons.codec.binary.Hex;
+import org.apache.hop.core.Const;
+import org.apache.hop.core.config.HopConfig;
+import org.apache.hop.core.exception.HopValueException;
+import org.apache.hop.core.logging.LogChannel;
+import org.apache.hop.core.row.IRowMeta;
+import org.apache.hop.core.row.IValueMeta;
+import org.apache.hop.core.util.Utils;
+import org.apache.hop.core.variables.IVariables;
+import org.apache.hop.i18n.BaseMessages;
+import org.apache.hop.ui.core.PropsUi;
+import org.apache.hop.ui.core.gui.GuiResource;
+import org.apache.hop.ui.core.gui.WindowProperty;
+import org.apache.hop.ui.core.widget.ColumnInfo;
+import org.apache.hop.ui.core.widget.TableView;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TableItem;
+
+/**
+ * Read-only dialog that shows a static set of rows with a custom title and
header message.
+ *
+ * <p>Use this when the caller already has rows in memory and only needs to
display them. For
+ * transform preview (streaming, "get more rows", pause/stop, logging text),
use {@link
+ * PreviewRowsDialog} instead.
+ */
+public final class ShowRowsDialog {
+
+ private static final Class<?> PKG = ShowRowsDialog.class;
+
+ private static final int MAX_BINARY_STRING_PREVIEW_SIZE =
+ PreviewRowsDialog.MAX_BINARY_STRING_PREVIEW_SIZE;
+
+ private static final boolean AVOID_BINARY_IN_HEX =
+ Const.toBoolean(
+
HopConfig.readStringVariable(Const.HOP_BINARY_FIELDS_AVOID_HEX_PREVIEW,
"false"));
+
+ private final Shell parentShell;
+ private final IVariables variables;
+ private final String title;
+ private final String message;
+ private final IRowMeta rowMeta;
+ private final List<Object[]> rows;
+
+ private Shell shell;
+ private TableView tableView;
+ private int lineNr;
+
+ public ShowRowsDialog(
+ Shell parent,
+ IVariables variables,
+ String title,
+ String message,
+ IRowMeta rowMeta,
+ List<Object[]> rows) {
+ this.parentShell = parent;
+ this.variables = variables;
+ this.title = title;
+ this.message = message;
+ this.rowMeta = rowMeta;
+ this.rows = rows;
+ }
+
+ public void open() {
+ if (parentShell == null || parentShell.isDisposed()) {
+ return;
+ }
+ if (rowMeta == null || Utils.isEmpty(rows)) {
+ MessageBox messageBox =
+ new MessageBox(parentShell, SWT.OK | SWT.ICON_INFORMATION |
SWT.APPLICATION_MODAL);
+ messageBox.setText(Utils.isEmpty(title) ? "" : title);
+ messageBox.setMessage(BaseMessages.getString(PKG,
"ShowRowsDialog.NoRows.Message"));
+ messageBox.open();
+ return;
+ }
+
+ shell = new Shell(parentShell, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MAX |
SWT.MIN);
+ PropsUi.setLook(shell);
+ shell.setImage(GuiResource.getInstance().getImageHopUi());
+ shell.setText(Utils.isEmpty(title) ? "" : title);
+
+ FormLayout formLayout = new FormLayout();
+ formLayout.marginWidth = PropsUi.getFormMargin();
+ formLayout.marginHeight = PropsUi.getFormMargin();
+ shell.setLayout(formLayout);
+
+ int margin = PropsUi.getMargin();
+
+ String header = Utils.isEmpty(message) ? "" : message;
+ header +=
+ " " + BaseMessages.getString(PKG, "ShowRowsDialog.NrRows",
Integer.toString(rows.size()));
+
+ Label messageLabel = new Label(shell, SWT.LEFT);
+ messageLabel.setText(header.trim());
+ PropsUi.setLook(messageLabel);
+ FormData fdMessage = new FormData();
+ fdMessage.left = new FormAttachment(0, 0);
+ fdMessage.right = new FormAttachment(100, 0);
+ fdMessage.top = new FormAttachment(0, margin);
+ messageLabel.setLayoutData(fdMessage);
+
+ tableView = buildTableView(margin, messageLabel);
+ populateRows();
+
+ BaseDialog.defaultShellHandling(shell, c -> close(), c -> close());
+ }
+
+ private TableView buildTableView(int margin, Label messageLabel) {
+ ColumnInfo[] columns = new ColumnInfo[rowMeta.size()];
+ for (int i = 0; i < rowMeta.size(); i++) {
+ IValueMeta valueMeta = rowMeta.getValueMeta(i);
+ columns[i] =
+ new ColumnInfo(valueMeta.getName(), ColumnInfo.COLUMN_TYPE_TEXT,
valueMeta.isNumeric());
+ columns[i].setToolTip(valueMeta.toStringMeta());
+ columns[i].setValueMeta(valueMeta);
+ columns[i].setImage(GuiResource.getInstance().getImage(valueMeta));
+ columns[i].setReadOnly(true);
+ }
+
+ TableView view =
+ new TableView(
+ variables,
+ shell,
+ SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI,
+ columns,
+ 0,
+ null,
+ PropsUi.getInstance());
+ view.setShowingBlueNullValues(true);
+ view.setSortable(true);
+
+ FormData fdTable = new FormData();
+ fdTable.left = new FormAttachment(0, 0);
+ fdTable.top = new FormAttachment(messageLabel, margin);
+ fdTable.right = new FormAttachment(100, 0);
+ fdTable.bottom = new FormAttachment(100, -margin);
+ view.setLayoutData(fdTable);
+ return view;
+ }
+
+ private void populateRows() {
+ lineNr = 0;
+ for (int i = 0; i < rows.size(); i++) {
+ TableItem item;
+ if (i == 0) {
+ item = tableView.table.getItem(0);
+ } else {
+ item = new TableItem(tableView.table, SWT.NONE);
+ }
+ fillRow(item, rows.get(i));
+ }
+ if (!tableView.isDisposed()) {
+ tableView.optWidth(true, 200);
+ }
+ }
+
+ private void fillRow(TableItem item, Object[] row) {
+ if (row == null) {
+ return;
+ }
+
+ lineNr++;
+ String rowNumber;
+ try {
+ rowNumber = tableView.getNumberColumn().getValueMeta().getString((long)
lineNr);
+ } catch (Exception e) {
+ rowNumber = Integer.toString(lineNr);
+ }
+ item.setText(0, rowNumber);
+
+ for (int column = 0; column < rowMeta.size(); column++) {
+ IValueMeta valueMeta = rowMeta.getValueMeta(column);
+ String displayValue;
+ try {
+ if (valueMeta.isBinary()) {
+ byte[] bytes = valueMeta.getBinary(row[column]);
+ if (bytes == null) {
+ displayValue = null;
+ } else {
+ displayValue =
+ AVOID_BINARY_IN_HEX ? valueMeta.getString(bytes) :
Hex.encodeHexString(bytes);
+ if (displayValue != null && displayValue.length() >
MAX_BINARY_STRING_PREVIEW_SIZE) {
+ displayValue = displayValue.substring(0,
MAX_BINARY_STRING_PREVIEW_SIZE);
+ }
+ }
+ } else {
+ displayValue = valueMeta.getString(row[column]);
+ }
+ } catch (HopValueException | ArrayIndexOutOfBoundsException e) {
+ new LogChannel(PKG).logError("Unable to format cell value", e);
+ displayValue = null;
+ }
+
+ if (displayValue != null) {
+ item.setText(column + 1,
TableView.formatCellValueForDisplay(displayValue));
+ item.setForeground(column + 1,
GuiResource.getInstance().getColorBlack());
+ } else {
+ item.setText(column + 1, "<null>");
+ item.setForeground(column + 1,
GuiResource.getInstance().getColorBlue());
+ }
+ }
+ }
+
+ private void close() {
+ if (shell == null || shell.isDisposed()) {
+ return;
+ }
+ PropsUi.getInstance().setScreen(new WindowProperty(shell));
+ shell.dispose();
+ }
+}
diff --git
a/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
b/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
index 3c3854df29..522a8cbc37 100644
---
a/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
+++
b/ui/src/main/java/org/apache/hop/ui/hopgui/file/pipeline/HopGuiPipelineGraph.java
@@ -144,6 +144,7 @@ import org.apache.hop.ui.core.dialog.MessageBox;
import org.apache.hop.ui.core.dialog.MessageDialogWithToggle;
import org.apache.hop.ui.core.dialog.PreviewRowsDialog;
import org.apache.hop.ui.core.dialog.ProgressMonitorDialog;
+import org.apache.hop.ui.core.dialog.ShowRowsDialog;
import org.apache.hop.ui.core.dialog.TransformFieldsDialog;
import org.apache.hop.ui.core.gui.GuiResource;
import org.apache.hop.ui.core.gui.GuiToolbarWidgets;
@@ -1476,19 +1477,17 @@ public class HopGuiPipelineGraph extends
HopGuiAbstractGraph
}
}
- PreviewRowsDialog previewRowsDialog =
- new PreviewRowsDialog(
+ new ShowRowsDialog(
hopGui.getActiveShell(),
variables,
- SWT.NONE,
- dataTransformMeta.getName(),
+ title,
+ prefix + message,
rowBuffer.getRowMeta(),
- rowBuffer.getBuffer());
- previewRowsDialog.setTitleMessage(title, prefix + message);
- previewRowsDialog.open();
+ rowBuffer.getBuffer())
+ .open();
} catch (Exception ex) {
new ErrorDialog(
- hopGui.getActiveShell(), CONST_ERROR, "Error showing preview
dialog", ex);
+ hopGui.getActiveShell(), CONST_ERROR, "Error showing output
rows dialog", ex);
}
}
}
diff --git
a/ui/src/main/resources/org/apache/hop/ui/core/database/dialog/messages/messages_en_US.properties
b/ui/src/main/resources/org/apache/hop/ui/core/database/dialog/messages/messages_en_US.properties
index 96276a6433..8315c8e5c3 100644
---
a/ui/src/main/resources/org/apache/hop/ui/core/database/dialog/messages/messages_en_US.properties
+++
b/ui/src/main/resources/org/apache/hop/ui/core/database/dialog/messages/messages_en_US.properties
@@ -32,6 +32,8 @@ DatabaseExplorerDialog.NoRows.Message=The table contains no
rows
DatabaseExplorerDialog.NoRows.Title=No rows
DatabaseExplorerDialog.PreviewTable.Message=Number of lines to preview (0
means all lines)
DatabaseExplorerDialog.PreviewTable.Title=Preview limit
+DatabaseExplorerDialog.ShowRows.Title=Table data
+DatabaseExplorerDialog.ShowRows.Message=Rows of table {0}
PreviewTableSettingsDialog.Error.InvalidNumber=Enter valid whole numbers for
rows and timeout.
PreviewTableSettingsDialog.Error.Title=Invalid input
PreviewTableSettingsDialog.Rows.Hint=0 means no row limit on the query (fetch
all rows).
@@ -82,6 +84,7 @@ SQLEditor.Position.Label=Line {0} column {1}
SQLEditor.Result.Message=The SQL statements had the following results
SQLEditor.Result.Title=Results of the SQL statements
SQLEditor.ResultRows.Title=SQL statement \#{0}
+SQLEditor.ResultRows.Message=Query results
SQLEditor.Title=Simple SQL editor
SQLEditor.WholeCacheCleared.Message=The whole database cache was cleared
SQLEditor.WholeCacheCleared.Title=Cache geleert
diff --git
a/ui/src/main/resources/org/apache/hop/ui/core/dialog/messages/messages_en_US.properties
b/ui/src/main/resources/org/apache/hop/ui/core/dialog/messages/messages_en_US.properties
index 36e49f5d15..7e0760d31b 100644
---
a/ui/src/main/resources/org/apache/hop/ui/core/dialog/messages/messages_en_US.properties
+++
b/ui/src/main/resources/org/apache/hop/ui/core/dialog/messages/messages_en_US.properties
@@ -294,6 +294,8 @@ PreviewRowsDialog.NrRows=({0} rows)
PreviewRowsDialog.ShowLogging.Message=The logging text
PreviewRowsDialog.ShowLogging.Title=Logging text
PreviewRowsDialog.Title=Examine preview data
+ShowRowsDialog.NoRows.Message=No rows to display.
+ShowRowsDialog.NrRows=({0} rows)
ProgressMonitorDialog.InitialTaskLabel=Apache Hop is handling a long running
task
ProgressMonitorDialog.Shell.Title=Progress...
ProgressMonitorDialog.InitialSubTaskLabel=\