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

pvillard 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 5e3b93b2d6 NIFI-11238: Creating missing parameter providers when 
importing inherited provided contexts
5e3b93b2d6 is described below

commit 5e3b93b2d618487770fea2f1d7d95a987f044541
Author: Joe Gresock <[email protected]>
AuthorDate: Thu Mar 2 09:33:32 2023 -0500

    NIFI-11238: Creating missing parameter providers when importing inherited 
provided contexts
    
    Signed-off-by: Pierre Villard <[email protected]>
    
    This closes #7002.
---
 .../StandardVersionedComponentSynchronizer.java    | 34 +++++++++++++---------
 1 file changed, 21 insertions(+), 13 deletions(-)

diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/flow/synchronization/StandardVersionedComponentSynchronizer.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/flow/synchronization/StandardVersionedComponentSynchronizer.java
index 5659567149..bca7d81c84 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/flow/synchronization/StandardVersionedComponentSynchronizer.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-components/src/main/java/org/apache/nifi/flow/synchronization/StandardVersionedComponentSynchronizer.java
@@ -1536,7 +1536,7 @@ public class StandardVersionedComponentSynchronizer 
implements VersionedComponen
             // Make sure that we have a unique name and add the Parameter 
Context if none exists
             if (parameterContext == null) {
                 final String contextId = 
synchronizationOptions.getComponentIdGenerator().generateUuid(proposed.getIdentifier(),
 proposed.getInstanceIdentifier(), "Controller");
-                final ParameterContext added = 
createParameterContext(proposed, contextId, Collections.emptyMap());
+                final ParameterContext added = 
createParameterContext(proposed, contextId, Collections.emptyMap(), 
Collections.emptyMap(), synchronizationOptions.getComponentIdGenerator());
                 LOG.info("Successfully synchronized {} by adding it to the 
flow", added);
                 return;
             }
@@ -1947,16 +1947,16 @@ public class StandardVersionedComponentSynchronizer 
implements VersionedComponen
                 final ParameterContext selectedParameterContext;
                 if (contextByName == null) {
                     final String parameterContextId = 
componentIdGenerator.generateUuid(versionedParameterContext.getName(), 
versionedParameterContext.getName(), versionedParameterContext.getName());
-                    selectedParameterContext = 
createParameterContext(versionedParameterContext, parameterContextId, 
versionedParameterContexts);
+                    selectedParameterContext = 
createParameterContext(versionedParameterContext, parameterContextId, 
versionedParameterContexts, parameterProviderReferences, componentIdGenerator);
                 } else {
                     selectedParameterContext = contextByName;
-                    addMissingConfiguration(versionedParameterContext, 
selectedParameterContext, versionedParameterContexts);
+                    addMissingConfiguration(versionedParameterContext, 
selectedParameterContext, versionedParameterContexts, 
parameterProviderReferences, componentIdGenerator);
                 }
 
                 group.setParameterContext(selectedParameterContext);
             } else {
                 // Update the current Parameter Context so that it has any 
Parameters included in the proposed context
-                addMissingConfiguration(versionedParameterContext, 
currentParamContext, versionedParameterContexts);
+                addMissingConfiguration(versionedParameterContext, 
currentParamContext, versionedParameterContexts, parameterProviderReferences, 
componentIdGenerator);
             }
         }
     }
@@ -2081,14 +2081,15 @@ public class StandardVersionedComponentSynchronizer 
implements VersionedComponen
     }
 
     private ParameterContext createParameterContext(final 
VersionedParameterContext versionedParameterContext, final String 
parameterContextId,
-                                                    final Map<String, 
VersionedParameterContext> versionedParameterContexts) {
+                                                    final Map<String, 
VersionedParameterContext> versionedParameterContexts,
+                                                    final Map<String, 
ParameterProviderReference> parameterProviderReferences, final 
ComponentIdGenerator componentIdGenerator) {
 
         final Map<String, Parameter> parameters = 
createParameterMap(versionedParameterContext.getParameters());
 
         final List<String> parameterContextRefs = new ArrayList<>();
         if (versionedParameterContext.getInheritedParameterContexts() != null) 
{
             versionedParameterContext.getInheritedParameterContexts().stream()
-                .map(name -> createParameterReferenceId(name, 
versionedParameterContexts))
+                .map(name -> createParameterReferenceId(name, 
versionedParameterContexts, parameterProviderReferences, componentIdGenerator))
                 .forEach(parameterContextRefs::add);
         }
 
@@ -2118,29 +2119,35 @@ public class StandardVersionedComponentSynchronizer 
implements VersionedComponen
         return parameters;
     }
 
-    private String createParameterReferenceId(final String 
parameterContextName, final Map<String, VersionedParameterContext> 
versionedParameterContexts) {
+    private String createParameterReferenceId(final String 
parameterContextName, final Map<String, VersionedParameterContext> 
versionedParameterContexts,
+                                              final Map<String, 
ParameterProviderReference> parameterProviderReferences, final 
ComponentIdGenerator componentIdGenerator) {
         final VersionedParameterContext versionedParameterContext = 
versionedParameterContexts.get(parameterContextName);
-        final ParameterContext selectedParameterContext = 
selectParameterContext(versionedParameterContext, versionedParameterContexts);
+        final ParameterContext selectedParameterContext = 
selectParameterContext(versionedParameterContext, versionedParameterContexts, 
parameterProviderReferences, componentIdGenerator);
         return selectedParameterContext.getIdentifier();
     }
 
-    private ParameterContext selectParameterContext(final 
VersionedParameterContext versionedParameterContext, final Map<String, 
VersionedParameterContext> versionedParameterContexts) {
+    private ParameterContext selectParameterContext(final 
VersionedParameterContext versionedParameterContext,
+                                                    final Map<String, 
VersionedParameterContext> versionedParameterContexts,
+                                                    final Map<String, 
ParameterProviderReference> parameterProviderReferences,
+                                                    final ComponentIdGenerator 
componentIdGenerator) {
         final ParameterContext contextByName = 
getParameterContextByName(versionedParameterContext.getName());
         final ParameterContext selectedParameterContext;
         if (contextByName == null) {
             final String parameterContextId = 
context.getFlowMappingOptions().getComponentIdLookup().getComponentId(Optional.ofNullable(versionedParameterContext.getIdentifier()),
                 versionedParameterContext.getInstanceIdentifier());
-            selectedParameterContext = 
createParameterContext(versionedParameterContext, parameterContextId, 
versionedParameterContexts);
+            selectedParameterContext = 
createParameterContext(versionedParameterContext, parameterContextId, 
versionedParameterContexts, parameterProviderReferences, componentIdGenerator);
         } else {
             selectedParameterContext = contextByName;
-            addMissingConfiguration(versionedParameterContext, 
selectedParameterContext, versionedParameterContexts);
+            addMissingConfiguration(versionedParameterContext, 
selectedParameterContext, versionedParameterContexts, 
parameterProviderReferences, componentIdGenerator);
         }
 
         return selectedParameterContext;
     }
 
     private void addMissingConfiguration(final VersionedParameterContext 
versionedParameterContext, final ParameterContext currentParameterContext,
-                                         final Map<String, 
VersionedParameterContext> versionedParameterContexts) {
+                                         final Map<String, 
VersionedParameterContext> versionedParameterContexts,
+                                         final Map<String, 
ParameterProviderReference> parameterProviderReferences,
+                                         final ComponentIdGenerator 
componentIdGenerator) {
         final Map<String, Parameter> parameters = new HashMap<>();
         for (final VersionedParameter versionedParameter : 
versionedParameterContext.getParameters()) {
             final Optional<Parameter> parameterOption = 
currentParameterContext.getParameter(versionedParameter.getName());
@@ -2166,10 +2173,11 @@ public class StandardVersionedComponentSynchronizer 
implements VersionedComponen
         if (versionedParameterContext.getInheritedParameterContexts() != null 
&& !versionedParameterContext.getInheritedParameterContexts().isEmpty()
             && 
currentParameterContext.getInheritedParameterContexts().isEmpty()) {
             
currentParameterContext.setInheritedParameterContexts(versionedParameterContext.getInheritedParameterContexts().stream()
-                .map(name -> 
selectParameterContext(versionedParameterContexts.get(name), 
versionedParameterContexts))
+                .map(name -> 
selectParameterContext(versionedParameterContexts.get(name), 
versionedParameterContexts, parameterProviderReferences, componentIdGenerator))
                 .collect(Collectors.toList()));
         }
         if (versionedParameterContext.getParameterProvider() != null && 
currentParameterContext.getParameterProvider() == null) {
+            createMissingParameterProvider(versionedParameterContext, 
versionedParameterContext.getParameterProvider(), parameterProviderReferences, 
componentIdGenerator);
             
currentParameterContext.configureParameterProvider(getParameterProviderConfiguration(versionedParameterContext));
         }
     }

Reply via email to