docs: public void replaceWindupDirectoryWithDistribution(Coordinate distCoordinate)
              throws WindupException
      {
          try
          {
              final CoordinateBuilder coord = CoordinateBuilder.create(distCoordinate);
              File tempFolder = OperatingSystemUtils.createTempDir();
              this.updater.extractArtifact(coord, tempFolder);
  
              File newDistWindupDir = getWindupDistributionSubdir(tempFolder);
  
              if (null == newDistWindupDir)
                  throw new WindupException("Distribution update failed: "
                      + "The distribution archive did not contain the windup-distribution-* directory: " + coord.toString());
  
  
              Path addonsDir = PathUtil.getWindupAddonsDir();
              Path binDir = PathUtil.getWindupHome().resolve(PathUtil.BINARY_DIRECTORY_NAME);
              Path libDir = PathUtil.getWindupHome().resolve(PathUtil.LIBRARY_DIRECTORY_NAME);
  
              FileUtils.deleteDirectory(addonsDir.toFile());
              FileUtils.deleteDirectory(libDir.toFile());
              FileUtils.deleteDirectory(binDir.toFile());
  
              FileUtils.moveDirectory(new File(newDistWindupDir, PathUtil.ADDONS_DIRECTORY_NAME), addonsDir.toFile());
              FileUtils.moveDirectory(new File(newDistWindupDir, PathUtil.BINARY_DIRECTORY_NAME), binDir.toFile());
              FileUtils.moveDirectory(new File(newDistWindupDir, PathUtil.LIBRARY_DIRECTORY_NAME), libDir.toFile());
  
              // Rulesets
              Path rulesDir = PathUtil.getWindupHome().resolve(PathUtil.RULES_DIRECTORY_NAME); //PathUtil.getWindupRulesDir();
              File coreDir = rulesDir.resolve(RulesetsUpdater.RULESET_CORE_DIRECTORY).toFile();
  
              // This is for testing purposes. The releases do not contain migration-core/ .
              if (coreDir.exists())
              {
                  // migration-core/ exists -> Only replace that one.
                  FileUtils.deleteDirectory(coreDir);
                  final File coreDirNew = newDistWindupDir.toPath().resolve(PathUtil.RULES_DIRECTORY_NAME).resolve(RulesetsUpdater.RULESET_CORE_DIRECTORY).toFile();
                  FileUtils.moveDirectory(coreDirNew, rulesDir.resolve(RulesetsUpdater.RULESET_CORE_DIRECTORY).toFile());
              }
              else
              {
                  // Otherwise replace the whole rules directory (backing up the old one).
                  final String newName = "rules-" + new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss").format(new Date());
                  FileUtils.moveDirectory(rulesDir.toFile(), rulesDir.getParent().resolve(newName).toFile());
                  FileUtils.moveDirectory(new File(newDistWindupDir, PathUtil.RULES_DIRECTORY_NAME), rulesDir.toFile());
              }
  
              FileUtils.deleteDirectory(tempFolder);
          }
          catch (IllegalStateException | DependencyException | IOException ex)
          {
              throw new WindupException("Distribution update failed: " + ex.getMessage(), ex);
          }
      }