/**
   * Process a distribution root.
   *
   * @param parent the misc root
   * @param distributionRoot the distribution root
   * @param distribution the distribution
   * @throws IOException
   */
  static void process(
      final DistributionContentItem parent, final File distributionRoot, Distribution distribution)
      throws IOException {
    final DistributionProcessor processor = new DistributionProcessor();
    final File[] children = distributionRoot.listFiles();
    if (children != null && children.length != 0) {
      for (final File child : children) {
        processor.processMisc(parent, child, distribution);
      }
    }

    final List<File> mp = new ArrayList<File>();
    final Set<DistributionContentItem> moduleRoots = processor.moduleRoots;
    for (final DistributionContentItem item : moduleRoots) {
      final File file = item.getFile(distributionRoot);
      mp.add(file);
    }

    // Update name and version
    final ModuleLoader loader = new LocalModuleLoader(mp.toArray(new File[mp.size()]));
    final ProductConfig config =
        new ProductConfig(loader, distributionRoot.getAbsolutePath(), Collections.emptyMap());
    distribution.setName(config.resolveName());
    distribution.setVersion(config.resolveVersion());
  }