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

asf-gitbox-commits pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/hop-website.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 75088d3faf Website updated to 2ff35d7
75088d3faf is described below

commit 75088d3faffa6e86929836bde720bef17c8a045f
Author: jenkins <[email protected]>
AuthorDate: Sun Oct 25 00:00:20 2026 +0000

    Website updated to 2ff35d7
---
 dev-manual/next/metadata-serialization.html        | 41 ++++++++++++++++++++++
 manual/next/pipeline/transforms/metainject.html    |  8 +++++
 .../next/workflow/actions/addresultfilenames.html  |  2 +-
 manual/next/workflow/actions/createfolder.html     | 14 +-------
 manual/next/workflow/actions/deletefile.html       | 14 +-------
 .../workflow/actions/deleteresultfilenames.html    | 14 +-------
 manual/next/workflow/actions/unzip.html            |  2 +-
 7 files changed, 54 insertions(+), 41 deletions(-)

diff --git a/dev-manual/next/metadata-serialization.html 
b/dev-manual/next/metadata-serialization.html
index ec3a04c98a..9bdcfc60a0 100644
--- a/dev-manual/next/metadata-serialization.html
+++ b/dev-manual/next/metadata-serialization.html
@@ -634,6 +634,7 @@
 <li><a href="#_string_encoder">String encoder</a></li>
 </ul>
 </li>
+<li><a href="#_legacy_and_renamed_keys">Legacy and renamed keys</a></li>
 <li><a href="#_lists">Lists</a></li>
 <li><a href="#_maps">Maps</a></li>
 <li><a href="#_sub_elements">Sub-elements</a></li>
@@ -938,6 +939,46 @@ Since this isn&#8217;t very meaningful, we offer the 
ability to specify an <code
 </div>
 </div>
 <div class="sect1">
+<h2 id="_legacy_and_renamed_keys"><a class="link" 
href="#_legacy_and_renamed_keys">Legacy and renamed keys</a></h2>
+<div class="sectionbody">
+<div class="paragraph">
+<p>When a property is renamed or a field changes type, existing serialized 
files still carry the old key. To keep reading them you can mark a method with 
<code>@OnUnknownDeserializationProperty</code>.  The serializers invoke it once 
for every property encountered during deserialization that does not map to any 
<code>@HopMetadataProperty</code> field.</p>
+</div>
+<div class="paragraph">
+<p>This is the recommended way to translate a legacy or renamed key into a 
current field.  It works for both XML and JSON serialization.</p>
+</div>
+<div class="paragraph">
+<p>From <code>MetaInjectMeta.java</code>, where the legacy boolean 
<code>allow_empty_stream_on_execution</code> was replaced by the 
<code>ConditionStreamBehavior</code> enum:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<div class="code-lang" data-pagefind-ignore>java</div><pre class="highlightjs 
highlight is-highlighted"><code class="language-java hljs" 
data-lang="java"><span 
class="hljs-meta">@OnUnknownDeserializationProperty</span>
+<span class="hljs-keyword">public</span> <span class="hljs-type">void</span> 
<span class="hljs-title function_">onUnknownDeserializationProperty</span><span 
class="hljs-params">(UnknownProperty property)</span> {
+  <span class="hljs-comment">// Only translate the legacy boolean when the 
current condition_stream_behavior enum was not</span>
+  <span class="hljs-comment">// part of the file. When both are present the 
current enum wins, so a file that mixes the</span>
+  <span class="hljs-comment">// two can still represent ALWAYS.</span>
+  <span class="hljs-keyword">if</span> (<span 
class="hljs-string">&quot;allow_empty_stream_on_execution&quot;</span>.equals(property.getName())
+      &amp;&amp; !conditionStreamBehaviorSet) {
+    conditionStreamBehavior = 
ConditionStreamBehavior.fromLegacyBoolean(property.getValue());
+  }
+}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>The serializers set annotated fields before firing this callback, and the 
<code>conditionStreamBehaviorSet</code> flag (raised whenever the current enum 
value is set, including during deserialization) therefore tells the callback 
whether a file that contains both the old boolean and the new enum really 
carries the new value. The legacy boolean is written only when the current tag 
was absent.</p>
+</div>
+<div class="paragraph">
+<p>The callback method must be <code>public</code> and take exactly one 
parameter of type <code>UnknownProperty</code>, which exposes 
<code>getName()</code> (the key as found in the serialized data) and 
<code>getValue()</code> (its raw textual value).  You may declare several such 
methods; they are all invoked for each unknown property.</p>
+</div>
+<div class="paragraph">
+<p>Discovery is based on <code>Class.getMethods()</code>, so private and 
protected methods are ignored, and a public override in a subtype replaces the 
inherited method (only the most-derived declaration is invoked, the overridden 
parent method is not called).  Any annotated method that does not take exactly 
one <code>UnknownProperty</code> parameter raises an 
<code>IllegalArgumentException</code>.</p>
+</div>
+<div class="paragraph">
+<p>If you prefer, you can still read the raw serialized node directly in a 
<code>convertLegacyXml(Node)</code> override for XML-only conversions.</p>
+</div>
+</div>
+</div>
+<div class="sect1">
 <h2 id="_lists"><a class="link" href="#_lists">Lists</a></h2>
 <div class="sectionbody">
 <div class="paragraph">
diff --git a/manual/next/pipeline/transforms/metainject.html 
b/manual/next/pipeline/transforms/metainject.html
index 301e958011..4b0b5759b3 100644
--- a/manual/next/pipeline/transforms/metainject.html
+++ b/manual/next/pipeline/transforms/metainject.html
@@ -3223,6 +3223,14 @@ The resulting pipeline will be your template pipeline 
with the metadata already
 <td class="tableblock halign-left valign-top"><p class="tableblock">Select to 
inject metadata and run the template pipeline.
 If this option is not selected, metadata injection occurs, but the template 
pipeline does not run.</p></td>
 </tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">When to 
run the resulting pipeline</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Controls 
whether the injected template pipeline runs when one or more of the input 
streams are empty.
+* <strong>Run only when every input stream is not empty</strong> - execution 
is skipped if any input stream has no rows.
+* <strong>Run when at least one input stream is not empty</strong> - execution 
runs as soon as one input stream has rows, even if other streams are empty.
+* <strong>Run even when every input stream is empty</strong> - execution runs 
even when all input streams are empty (useful for templates that can run from 
constant mappings alone).
+This replaces the legacy <strong>Allow empty stream to run the resulting 
pipeline</strong> checkbox.</p></td>
+</tr>
 </tbody>
 </table>
 <div class="paragraph">
diff --git a/manual/next/workflow/actions/addresultfilenames.html 
b/manual/next/workflow/actions/addresultfilenames.html
index 76faa09edf..37631f795e 100644
--- a/manual/next/workflow/actions/addresultfilenames.html
+++ b/manual/next/workflow/actions/addresultfilenames.html
@@ -3039,7 +3039,7 @@ You can add a different file or folder and wildcard on 
each line.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Result 
rows</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Passed on 
unchanged. With <strong>Copy previous results to args?</strong>, the file or 
folder comes from the first field and the wildcard from the second field of 
each result row, and the list in the dialog is not used, also when there are no 
result rows. A result row with only one field stops the workflow with an error, 
and no hop is followed.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Passed on 
unchanged. With <strong>Copy previous results to args?</strong>, the file or 
folder comes from the first field and the wildcard from the second field of 
each result row, and the list in the dialog is not used, also when there are no 
result rows. A result row with only one field adds all the files of that 
folder, as with an empty wildcard.</p></td>
 </tr>
 </tbody>
 </table>
diff --git a/manual/next/workflow/actions/createfolder.html 
b/manual/next/workflow/actions/createfolder.html
index 392835ebc4..6c956ce37e 100644
--- a/manual/next/workflow/actions/createfolder.html
+++ b/manual/next/workflow/actions/createfolder.html
@@ -3012,7 +3012,7 @@
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p 
class="tableblock">False</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The folder 
already exists and <strong>Fail if folder exists</strong> is selected, or no 
folder name is set: the number of errors is 0. The folder could not be created, 
for example because of missing permissions: the number of errors is 1.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The folder 
already exists and <strong>Fail if folder exists</strong> is selected, a file 
exists with the folder name, or no folder name is set: the number of errors is 
0. The folder could not be created, for example because of missing permissions: 
the number of errors is 1.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Result 
files</p></td>
@@ -3024,18 +3024,6 @@
 </tr>
 </tbody>
 </table>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-When a file exists with the folder name, no folder is created. The action is 
true, or false when <strong>Fail if folder exists</strong> is selected.
-</td>
-</tr>
-</table>
-</div>
 </div>
 </div>
     </article>
diff --git a/manual/next/workflow/actions/deletefile.html 
b/manual/next/workflow/actions/deletefile.html
index 3bcc8f1ce0..fad01b3628 100644
--- a/manual/next/workflow/actions/deletefile.html
+++ b/manual/next/workflow/actions/deletefile.html
@@ -3013,7 +3013,7 @@ The default is off.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p 
class="tableblock">False</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The file 
doesn&#8217;t exist and <strong>Fail if file doesn&#8217;t exist</strong> is 
selected, or no file name is set: the number of errors is 0. The file could not 
be deleted, for example because of missing permissions: the number of errors is 
1.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The file 
doesn&#8217;t exist and <strong>Fail if file doesn&#8217;t exist</strong> is 
selected, or no file name is set: the number of errors is 0. The file could not 
be deleted, for example because of missing permissions or because it is a 
folder that is not empty: the number of errors is 1.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Result 
files</p></td>
@@ -3025,18 +3025,6 @@ The default is off.</p></td>
 </tr>
 </tbody>
 </table>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-A folder that is not empty is not deleted, but the action is still true, with 
1 error.
-</td>
-</tr>
-</table>
-</div>
 </div>
 </div>
     </article>
diff --git a/manual/next/workflow/actions/deleteresultfilenames.html 
b/manual/next/workflow/actions/deleteresultfilenames.html
index 33b94d4b1a..dff9a65dde 100644
--- a/manual/next/workflow/actions/deleteresultfilenames.html
+++ b/manual/next/workflow/actions/deleteresultfilenames.html
@@ -3012,7 +3012,7 @@
 <tbody>
 <tr>
 <td class="tableblock halign-left valign-top"><p 
class="tableblock">True</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The result 
files were removed: all of them, or with <strong>Limit action to</strong>, 
those whose whole file name, without the folder, matches <strong>Wildcard 
(RegExp)</strong> and not <strong>Exclude wildcard (RegExp)</strong>. With 
<strong>Limit action to</strong> and an empty <strong>Wildcard 
(RegExp)</strong>, all of them are removed.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The result 
files were removed: all of them, or with <strong>Limit action to</strong>, 
those whose whole file name, without the folder, matches <strong>Wildcard 
(RegExp)</strong> and not <strong>Exclude wildcard (RegExp)</strong>, also when 
the file no longer exists on disk. With <strong>Limit action to</strong> and an 
empty <strong>Wildcard (RegExp)</strong>, all of them are removed.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p 
class="tableblock">False</p></td>
@@ -3028,18 +3028,6 @@
 </tr>
 </tbody>
 </table>
-<div class="admonitionblock note">
-<table>
-<tr>
-<td class="icon">
-<i class="fa icon-note" title="Note"></i>
-</td>
-<td class="content">
-With <strong>Limit action to</strong>, a result file that no longer exists on 
disk is not removed from the result files, even when its name matches.
-</td>
-</tr>
-</table>
-</div>
 </div>
 </div>
     </article>
diff --git a/manual/next/workflow/actions/unzip.html 
b/manual/next/workflow/actions/unzip.html
index de83d8f906..db8307b810 100644
--- a/manual/next/workflow/actions/unzip.html
+++ b/manual/next/workflow/actions/unzip.html
@@ -3157,7 +3157,7 @@
 <i class="fa icon-note" title="Note"></i>
 </td>
 <td class="content">
-With <strong>Nr errors less than</strong>, the action stops and is false as 
soon as the number of errors reaches <strong>Limit files</strong> while result 
rows are left to process, but when the last row brings it to that number, the 
action is still true. For the files of a single zip file or folder, it is still 
true when the number of errors equals <strong>Limit files</strong>, and false 
only when it is higher. A zip file that can&#8217;t be read, or that 
can&#8217;t be deleted after ext [...]
+With <strong>Nr errors less than</strong>, the action stops and is false as 
soon as the number of errors reaches <strong>Limit files</strong> while result 
rows are left to process, but when the last row brings it to that number, the 
action is still true. For the files of a single zip file or folder, it is still 
true when the number of errors equals <strong>Limit files</strong>, and false 
only when it is higher. A zip file that can&#8217;t be read, or that 
can&#8217;t be deleted after ext [...]
 </td>
 </tr>
 </table>

Reply via email to