Github user apiri commented on a diff in the pull request:

    https://github.com/apache/nifi-minifi/pull/99#discussion_r150919043
  
    --- Diff: 
minifi-nar-bundles/minifi-framework-bundle/minifi-framework/minifi-runtime/src/main/java/org/apache/nifi/minifi/MiNiFi.java
 ---
    @@ -241,4 +268,203 @@ public static void main(String[] args) {
                 logger.error("Failure to launch MiNiFi due to " + t, t);
             }
         }
    +
    +    /* Handle Flow bundle enrichment */
    +    protected static void enrichFlowWithBundleInformation(FlowParser 
flowParser, NiFiProperties niFiProperties) throws FlowEnrichmentException {
    +        final Path flowPath = 
niFiProperties.getFlowConfigurationFile().toPath();
    +        logger.debug("Enriching generated {} with bundling information", 
flowPath.toAbsolutePath());
    +
    +        try {
    +            final Document flowDocument = 
flowParser.parse(flowPath.toAbsolutePath().toFile());
    +
    +            if (flowDocument == null) {
    +                throw new FlowEnrichmentException("Unable to successfully 
parse the specified flow at " + flowPath.toAbsolutePath());
    +            }
    +
    +            final Map<String, EnrichingElementAdapter> 
componentDependsUponMap = new HashMap<>();
    +            // Aggregate all dependency mappings of all component types 
that need to have a bundle evaluated
    +            for (String typeElementName : 
Arrays.asList(PROCESSOR_TAG_NAME, CONTROLLER_SERVICE_TAG_NAME, 
REPORTING_TASK_TAG_NAME)) {
    +                final NodeList componentNodeList = 
flowDocument.getElementsByTagName(typeElementName);
    +                mapComponents(componentNodeList).forEach((id, metadata) -> 
componentDependsUponMap.merge(id, metadata, (destination, source) -> {
    +                    
destination.addDependencyIds(source.getDependencyIds());
    +                    return destination;
    +                }));
    +            }
    +
    +            for (Map.Entry<String, EnrichingElementAdapter> componentEntry 
: componentDependsUponMap.entrySet()) {
    +
    +                // If this particular component has already had bundle 
information applied, skip it
    +                EnrichingElementAdapter componentToEnrich = 
componentEntry.getValue();
    +                if (componentToEnrich.getBundleElement() != null) {
    +                    continue;
    +                }
    +
    +                final EnrichingElementAdapter elementToEnrich = 
componentToEnrich;
    +                final String bundleClassLookup = 
elementToEnrich.getComponentClass();
    +                final List<Bundle> bundles = 
ExtensionManager.getBundles(bundleClassLookup);
    +                BundleCoordinate enrichingBundle = null;
    +                // If there is only one supporting bundle, choose it, 
otherwise defer to the other item
    +                if (bundles.size() == 1) {
    +                    enrichingBundle = 
bundles.get(0).getBundleDetails().getCoordinate();
    +                } else if (bundles.size() > 1) {
    +
    --- End diff --
    
    There most certainly is.  I think I lost a commit in my branch juggling.  
Let me try to dig it out.


---

Reply via email to