You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2024/12/03 15:34:15 UTC

(nifi) branch main updated: NIFI-14016 Resolved issue for onPropertyModified() where oldValue was always null (#9560)

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

markap14 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 39aa106943 NIFI-14016 Resolved issue for onPropertyModified() where oldValue was always null (#9560)
39aa106943 is described below

commit 39aa10694317cd4279bdc4cb6a45e68b997640f6
Author: NissimShiman <57...@users.noreply.github.com>
AuthorDate: Tue Dec 3 15:34:09 2024 +0000

    NIFI-14016 Resolved issue for onPropertyModified() where oldValue was always null (#9560)
    
    NIFI-14016 Resolved issue for onPropertyModified() where oldValue was always null (#9560)
---
 .../nifi/controller/AbstractComponentNode.java     |  3 ++-
 .../nifi/controller/TestAbstractComponentNode.java | 31 ++++++++++++++++++++++
 2 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/AbstractComponentNode.java b/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/AbstractComponentNode.java
index 89bf5156d1..0a2f5f2e8a 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/AbstractComponentNode.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/main/java/org/apache/nifi/controller/AbstractComponentNode.java
@@ -555,10 +555,11 @@ public abstract class AbstractComponentNode implements ComponentNode {
 
     // Keep setProperty/removeProperty private so that all calls go through setProperties
     private void setProperty(final PropertyDescriptor descriptor, final PropertyConfiguration propertyConfiguration, final Function<PropertyDescriptor, PropertyConfiguration> valueToCompareFunction) {
+        final PropertyConfiguration propertyModComparisonValue = valueToCompareFunction.apply(descriptor);
+
         // Remove current PropertyDescriptor to force updated instance references
         final PropertyConfiguration removed = properties.remove(descriptor);
 
-        final PropertyConfiguration propertyModComparisonValue = valueToCompareFunction.apply(descriptor);
         properties.put(descriptor, propertyConfiguration);
         final String effectiveValue = propertyConfiguration.getEffectiveValue(getParameterContext());
         final String resolvedValue = resolveAllowableValue(effectiveValue, descriptor);
diff --git a/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/test/java/org/apache/nifi/controller/TestAbstractComponentNode.java b/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/test/java/org/apache/nifi/controller/TestAbstractComponentNode.java
index 1d2116debe..40d72fb8aa 100644
--- a/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/test/java/org/apache/nifi/controller/TestAbstractComponentNode.java
+++ b/nifi-framework-bundle/nifi-framework/nifi-framework-core-api/src/test/java/org/apache/nifi/controller/TestAbstractComponentNode.java
@@ -306,6 +306,37 @@ public class TestAbstractComponentNode {
         assertFalse(updatedPropertyDescriptor.isSensitive());
     }
 
+    @Test
+    public void testSetPropertiesPropertyModified() {
+        final String propertyValueModified = PROPERTY_VALUE + "-modified";
+        final List<PropertyModification> propertyModifications = new ArrayList<>();
+        final AbstractComponentNode node = new LocalComponentNode() {
+            @Override
+            protected void onPropertyModified(final PropertyDescriptor descriptor, final String oldValue, final String newValue) {
+                propertyModifications.add(new PropertyModification(descriptor, oldValue, newValue));
+                super.onPropertyModified(descriptor, oldValue, newValue);
+            }
+        };
+
+        final Map<String, String> properties = new HashMap<>();
+        properties.put(PROPERTY_NAME, PROPERTY_VALUE);
+        node.setProperties(properties);
+
+        assertEquals(1, propertyModifications.size());
+        PropertyModification mod = propertyModifications.get(0);
+        assertNull(mod.getPreviousValue());
+        assertEquals(PROPERTY_VALUE, mod.getUpdatedValue());
+        propertyModifications.clear();
+
+        properties.put(PROPERTY_NAME, propertyValueModified);
+        node.setProperties(properties);
+
+        assertEquals(1, propertyModifications.size());
+        mod = propertyModifications.get(0);
+        assertEquals(PROPERTY_VALUE, mod.getPreviousValue());
+        assertEquals(propertyValueModified, mod.getUpdatedValue());
+    }
+
     @Test
     public void testSetPropertiesSensitiveDynamicPropertyNames() {
         final AbstractComponentNode node = new LocalComponentNode();