docs: @Override
      public void run(final IAction action) {
          if (!(selection instanceof IStructuredSelection) || selection.isEmpty()) {
              return;
          }
          IStructuredSelection structuredSelection = (IStructuredSelection) selection;
  
          IProject project = getProject(structuredSelection);
          if (project == null) {
              return;
          }
  
          // Get the file name from a file dialog
          FileDialog dialog = createFileDialog(project);
          boolean validFileName = false;
          do {
              String fileName = openFileDialog(dialog);
              if (fileName == null) {
                  // user cancel
                  return;
              }
              validFileName = validateSelectedFileName(fileName);
              if (!validFileName) {
                  MessageDialog.openWarning(Display.getDefault().getActiveShell(), "Warning", fileName
                          + " is not a file or is not readable!");
                  continue;
              }
              getDialogSettings().put(LOAD_XML_PATH_KEY, fileName);
              work(project, fileName);
          } while (!validFileName);
      }