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

bbende pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nifi-registry.git


The following commit(s) were added to refs/heads/master by this push:
     new aca8292  NIFI-309: Added Difference Types PROPERTY_PARAMETERIZED and 
PROPERTY_PARAMETERIZATION_REMOVED
aca8292 is described below

commit aca829210cc78b5f9232073ce23a5875af110878
Author: Mark Payne <[email protected]>
AuthorDate: Fri Aug 16 15:46:41 2019 -0400

    NIFI-309: Added Difference Types PROPERTY_PARAMETERIZED and 
PROPERTY_PARAMETERIZATION_REMOVED
---
 .../diff/ConciseEvolvingDifferenceDescriptor.java  |  6 ++++
 .../nifi/registry/flow/diff/DifferenceType.java    | 12 ++++++++
 .../flow/diff/EvolvingDifferenceDescriptor.java    |  6 ++++
 .../registry/flow/diff/StandardFlowComparator.java | 35 +++++++++++++++++++---
 .../flow/diff/StaticDifferenceDescriptor.java      |  6 ++++
 5 files changed, 61 insertions(+), 4 deletions(-)

diff --git 
a/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/ConciseEvolvingDifferenceDescriptor.java
 
b/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/ConciseEvolvingDifferenceDescriptor.java
index 177bad9..8ac2da9 100644
--- 
a/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/ConciseEvolvingDifferenceDescriptor.java
+++ 
b/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/ConciseEvolvingDifferenceDescriptor.java
@@ -54,6 +54,12 @@ public class ConciseEvolvingDifferenceDescriptor implements 
DifferenceDescriptor
             case PROPERTY_REMOVED:
                 description = String.format("Property '%s' was removed", 
fieldName);
                 break;
+            case PROPERTY_PARAMETERIZED:
+                description = String.format("Property '%s' was parameterized", 
fieldName);
+                break;
+            case PROPERTY_PARAMETERIZATION_REMOVED:
+                description = String.format("Property '%s' is no longer a 
parameter reference", fieldName);
+                break;
             case VARIABLE_ADDED:
                 description = String.format("Variable '%s' was added", 
fieldName);
                 break;
diff --git 
a/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/DifferenceType.java
 
b/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/DifferenceType.java
index ebba0f9..67c26ad 100644
--- 
a/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/DifferenceType.java
+++ 
b/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/DifferenceType.java
@@ -109,6 +109,18 @@ public enum DifferenceType {
     PROPERTY_REMOVED("Property Removed"),
 
     /**
+     * Property is unset or set to an explicit value in Flow A but set to 
(exactly) a parameter reference in Flow B. Note that if Flow A
+     * has a property set to "#{param1} abc" and it is changed to "#{param1} 
abc #{param2}" this would indicate a Difference Type of @{link 
#PROPERTY_CHANGED}, not
+     * PROPERTY_PARAMETERIZED
+     */
+    PROPERTY_PARAMETERIZED("Property Parameterized"),
+
+    /**
+     * Property is set to (exactly) a parameter reference in Flow A but either 
unset or set to an explicit value in Flow B.
+     */
+    PROPERTY_PARAMETERIZATION_REMOVED("Property Parameterization Removed"),
+
+    /**
      * The component has a different value for the Annotation Data in each of 
the flows
      */
     ANNOTATION_DATA_CHANGED("Annotation Data (Advanced UI Configuration) 
Changed"),
diff --git 
a/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/EvolvingDifferenceDescriptor.java
 
b/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/EvolvingDifferenceDescriptor.java
index 9a21026..a6c5d74 100644
--- 
a/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/EvolvingDifferenceDescriptor.java
+++ 
b/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/EvolvingDifferenceDescriptor.java
@@ -51,6 +51,12 @@ public class EvolvingDifferenceDescriptor implements 
DifferenceDescriptor {
             case PROPERTY_REMOVED:
                 description = String.format("Property '%s' was removed from %s 
with ID %s", fieldName, componentA.getComponentType().getTypeName(), 
componentA.getIdentifier());
                 break;
+            case PROPERTY_PARAMETERIZED:
+                description = String.format("Property '%s' was parameterized", 
fieldName);
+                break;
+            case PROPERTY_PARAMETERIZATION_REMOVED:
+                description = String.format("Property '%s' is no longer a 
parameter reference", fieldName);
+                break;
             case VARIABLE_ADDED:
                 description = String.format("Variable '%s' was added to 
Process Group with ID %s", fieldName, componentB.getIdentifier());
                 break;
diff --git 
a/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/StandardFlowComparator.java
 
b/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/StandardFlowComparator.java
index cb28b83..e4f5266 100644
--- 
a/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/StandardFlowComparator.java
+++ 
b/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/StandardFlowComparator.java
@@ -37,6 +37,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import java.util.function.Function;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 public class StandardFlowComparator implements FlowComparator {
@@ -44,6 +45,8 @@ public class StandardFlowComparator implements FlowComparator 
{
     private static final String DEFAULT_PARTITIONING_ATTRIBUTE = "";
     private static final String DEFAULT_LOAD_BALANCE_COMPRESSION = 
"DO_NOT_COMPRESS";
 
+    private static final Pattern PARAMETER_REFERENCE_PATTERN = 
Pattern.compile("#\\{[A-Za-z0-9\\-_. ]+}");
+
     private final ComparableDataFlow flowA;
     private final ComparableDataFlow flowB;
     private final Set<String> externallyAccessibleServiceIds;
@@ -192,9 +195,17 @@ public class StandardFlowComparator implements 
FlowComparator {
             }
 
             if (valueA == null && valueB != null) {
-                differences.add(difference(DifferenceType.PROPERTY_ADDED, 
componentA, componentB, key, displayName, valueA, valueB));
+                if (isParameterReference(valueB)) {
+                    
differences.add(difference(DifferenceType.PROPERTY_PARAMETERIZED, componentA, 
componentB, key, displayName, null, null));
+                } else {
+                    differences.add(difference(DifferenceType.PROPERTY_ADDED, 
componentA, componentB, key, displayName, valueA, valueB));
+                }
             } else if (valueA != null && valueB == null) {
-                differences.add(difference(DifferenceType.PROPERTY_REMOVED, 
componentA, componentB, key, displayName, valueA, valueB));
+                if (isParameterReference(valueA)) {
+                    
differences.add(difference(DifferenceType.PROPERTY_PARAMETERIZATION_REMOVED, 
componentA, componentB, key, displayName, null, null));
+                } else {
+                    
differences.add(difference(DifferenceType.PROPERTY_REMOVED, componentA, 
componentB, key, displayName, valueA, valueB));
+                }
             } else if (valueA != null && !valueA.equals(valueB)) {
                 // If the property in Flow A references a Controller Service 
that is not available in the flow
                 // and the property in Flow B references a Controller Service 
that is available in its environment
@@ -211,7 +222,15 @@ public class StandardFlowComparator implements 
FlowComparator {
                     }
                 }
 
-                differences.add(difference(DifferenceType.PROPERTY_CHANGED, 
componentA, componentB, key, displayName, valueA, valueB));
+                final boolean aParameterized = isParameterReference(valueA);
+                final boolean bParameterized = isParameterReference(valueB);
+                if (aParameterized && !bParameterized) {
+                    
differences.add(difference(DifferenceType.PROPERTY_PARAMETERIZATION_REMOVED, 
componentA, componentB, key, displayName, null, null));
+                } else if (!aParameterized && bParameterized) {
+                    
differences.add(difference(DifferenceType.PROPERTY_PARAMETERIZED, componentA, 
componentB, key, displayName, null, null));
+                } else {
+                    
differences.add(difference(DifferenceType.PROPERTY_CHANGED, componentA, 
componentB, key, displayName, valueA, valueB));
+                }
             }
         });
 
@@ -229,12 +248,20 @@ public class StandardFlowComparator implements 
FlowComparator {
                     displayName = descriptor.getDisplayName() == null ? 
descriptor.getName() : descriptor.getDisplayName();
                 }
 
-                differences.add(difference(DifferenceType.PROPERTY_ADDED, 
componentA, componentB, key, displayName, null, valueB));
+                if (isParameterReference(valueB)) {
+                    
differences.add(difference(DifferenceType.PROPERTY_PARAMETERIZED, componentA, 
componentB, key, displayName, null, null));
+                } else {
+                    differences.add(difference(DifferenceType.PROPERTY_ADDED, 
componentA, componentB, key, displayName, null, valueB));
+                }
             }
         });
     }
 
 
+    private boolean isParameterReference(final String propertyValue) {
+        return PARAMETER_REFERENCE_PATTERN.matcher(propertyValue).matches();
+    }
+
     private void compare(final VersionedFunnel funnelA, final VersionedFunnel 
funnelB, final Set<FlowDifference> differences) {
         compareComponents(funnelA, funnelB, differences);
     }
diff --git 
a/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/StaticDifferenceDescriptor.java
 
b/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/StaticDifferenceDescriptor.java
index 9dd9c5c..8668804 100644
--- 
a/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/StaticDifferenceDescriptor.java
+++ 
b/nifi-registry-core/nifi-registry-flow-diff/src/main/java/org/apache/nifi/registry/flow/diff/StaticDifferenceDescriptor.java
@@ -51,6 +51,12 @@ public class StaticDifferenceDescriptor implements 
DifferenceDescriptor {
                 description = String.format("Property '%s' exists for %s with 
ID %s in %s but not in %s",
                     fieldName, componentA.getComponentType().getTypeName(), 
componentA.getIdentifier(), flowAName, flowBName);
                 break;
+            case PROPERTY_PARAMETERIZED:
+                description = String.format("Property '%s' is a parameter 
reference in %s but not in %s", fieldName, flowAName, flowBName);
+                break;
+            case PROPERTY_PARAMETERIZATION_REMOVED:
+                description = String.format("Property '%s' is a parameter 
reference in %s but not in %s", fieldName, flowBName, flowAName);
+                break;
             case SCHEDULED_STATE_CHANGED:
                 if (ScheduledState.DISABLED.equals(valueA)) {
                     description = String.format("%s is disabled in %s but 
enabled in %s", componentA.getComponentType().getTypeName(), flowAName, 
flowBName);

Reply via email to