jsferner commented on a change in pull request #3931: NIFI-6872: support 
download flow
URL: https://github.com/apache/nifi/pull/3931#discussion_r357722479
 
 

 ##########
 File path: 
nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/registry/flow/mapping/NiFiRegistryFlowMapper.java
 ##########
 @@ -90,75 +92,97 @@
 
     // We need to keep a mapping of component id to versionedComponentId as we 
transform these objects. This way, when
     // we call #mapConnectable, instead of generating a new UUID for the 
ConnectableComponent, we can lookup the 'versioned'
-    // identifier based on the comopnent's actual id. We do connections last, 
so that all components will already have been
+    // identifier based on the component's actual id. We do connections last, 
so that all components will already have been
     // created before attempting to create the connection, where the 
ConnectableDTO is converted.
     private Map<String, String> versionedComponentIds = new HashMap<>();
 
     public NiFiRegistryFlowMapper(final ExtensionManager extensionManager) {
         this.extensionManager = extensionManager;
     }
 
-    public InstantiatedVersionedProcessGroup mapProcessGroup(final 
ProcessGroup group, final ControllerServiceProvider serviceProvider, final 
FlowRegistryClient registryClient,
-                                                             final boolean 
mapDescendantVersionedFlows) {
+    /**
+     * Map the given process group to a versioned process group without any 
use of an actual flow registry even if the
+     * group is currently versioned in a registry.
+     *
+     * @param group             the process group to map
+     * @param serviceProvider   the controller service provider to use for 
mapping
+     * @return a complete versioned process group without any registry related 
details
+     */
+    public InstantiatedVersionedProcessGroup mapNonVersionedProcessGroup(final 
ProcessGroup group, final ControllerServiceProvider serviceProvider) {
         versionedComponentIds.clear();
 
-        final InstantiatedVersionedProcessGroup mapped = mapGroup(group, 
serviceProvider, registryClient, true, mapDescendantVersionedFlows);
-        populateReferencedAncestorVariables(group, mapped);
-
-        return mapped;
+        // always include descendant flows and do not apply any registry 
versioning info that may be present in the group
+        return mapGroup(group, serviceProvider, (processGroup, versionedGroup) 
-> {return true;});
     }
 
-    private void populateReferencedAncestorVariables(final ProcessGroup group, 
final VersionedProcessGroup versionedGroup) {
-        final Set<String> ancestorVariableNames = new HashSet<>();
-        populateVariableNames(group.getParent(), ancestorVariableNames);
-
-        final Map<String, String> implicitlyDefinedVariables = new HashMap<>();
-        for (final String variableName : ancestorVariableNames) {
-            final boolean isReferenced = 
!group.getComponentsAffectedByVariable(variableName).isEmpty();
-            if (isReferenced) {
-                final String value = 
group.getVariableRegistry().getVariableValue(variableName);
-                implicitlyDefinedVariables.put(variableName, value);
-            }
-        }
-
-        if (!implicitlyDefinedVariables.isEmpty()) {
-            // Merge the implicit variables with the explicitly defined 
variables for the Process Group
-            // and set those as the Versioned Group's variables.
-            if (versionedGroup.getVariables() != null) {
-                
implicitlyDefinedVariables.putAll(versionedGroup.getVariables());
-            }
+    /**
+     * Map the given process group to a versioned process group using the 
provided registry client.
+     *
+     * @param group             the process group to map
+     * @param serviceProvider   the controller service provider to use for 
mapping
+     * @param registryClient    the registry client to use when retrieving 
versioning details
+     * @param mapDescendantVersionedFlows  true in order to include descendant 
flows in the mapped result
+     * @return a complete versioned process group with applicable registry 
related details
+     */
+    public InstantiatedVersionedProcessGroup mapProcessGroup(final 
ProcessGroup group, final ControllerServiceProvider serviceProvider,
+                                                             final 
FlowRegistryClient registryClient,
+                                                             final boolean 
mapDescendantVersionedFlows) {
+        versionedComponentIds.clear();
 
-            versionedGroup.setVariables(implicitlyDefinedVariables);
-        }
-    }
+        // apply registry versioning according to the lambda below
+        // NOTE: lambda refers to registry client and map descendant boolean 
which will not change during recursion
 
 Review comment:
   I was going to make the lambda a separate method but it actually would 
require taking in 2 more arguments because it's currently referencing those 
arguments locally where it's defined inline (registryClient and 
mapDescendantVersionedFlows). The values of these args don't change during 
recursion, they just get passed down through so it made more sense to just 
reference them in the lambda rather than expect them to also be passed in when 
it's called. Does that make sense?

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to