private boolean addSources(List<FSRL> filesToAdd) {

		List<FSRL> updatedFiles = filesToAdd.stream().map(FSRL::convertRootToContainer).toList();

		List<FSRL> badFiles = batchInfo.addFiles(updatedFiles);
		if (!badFiles.isEmpty()) {
			StringBuilder sb = new StringBuilder();
			for (FSRL fsrl : badFiles) {
				if (sb.length() > 0) {
					sb.append(",\n");
				}
				sb.append(fsrl.getPath());
			}

			Msg.showWarn(this, getComponent(), "Skipping " + badFiles.size() + " file(s)",
				"Program encountered while adding files to batch: " + sb.toString());

		}

		refreshData();

		return true;
	}
Shows the batch import dialog (via runSwingLater) and prompts the user to select
a file if the supplied {@code batchInfo} is empty.
<p>
The dialog will chain to the {@link ImportBatchTask} when the user clicks the
OK button.

@param tool {@link PluginTool} that will be the parent of the dialog
@param batchInfo optional {@link BatchInfo} instance with already discovered applications, or null.
@param initialFiles optional {@link List} of {@link FSRL files} to add to the batch import dialog, or null.
@param defaultFolder optional default destination folder for imported files or null for root folder.
@param programManager optional {@link ProgramManager} that will be used to open the newly imported
binaries.
Ghidra/Features/Base/src/main/java/ghidra/plugins/importer/batch/BatchImportDialog.java