protected void doCheckout(@Nullable final CheckoutProvider.Listener listener, final RepositoryTreeNode selectedNode) {
    if (selectedNode == null) {
      return;
    }
    Url url = selectedNode.getURL();

    String relativePath = "";
    final DirectoryEntry entry = selectedNode.getSVNDirEntry();
    if (entry != null) {
      if (entry.getRepositoryRoot() != null) {
        if (!entry.getRepositoryRoot().equals(url)) {
          relativePath = getRelativeUrl(entry.getRepositoryRoot(), url);
        }
      }
      else {
        relativePath = entry.getRelativePath();
      }
    }
    else {
      relativePath = url.getPath();
    }

    File dir = selectFile(message("dialog.title.destination.directory"), message("label.select.checkout.destination.directory"));
    if (dir == null) {
      return;
    }

    CheckoutOptionsDialog dialog = new CheckoutOptionsDialog(myProject, url, dir, getVirtualFile(dir.getAbsolutePath()), relativePath);
    dialog.show();
    dir = dialog.getTarget();
    if (dialog.isOK() && dir != null) {
      final Revision revision;
      try {
        revision = dialog.getRevision();
      }
      catch (ConfigurationException e) {
        showErrorDialog(message("message.text.cannot.checkout", e.getMessage()), message("dialog.title.check.out"));
        return;
      }

      SvnCheckoutProvider.doCheckout(myProject, dir, url, revision, dialog.getDepth(), dialog.isIgnoreExternals(), listener);
    }
  }
protected void doCheckout(@Nullable final CheckoutProvider.Listener listener, final RepositoryTreeNode selectedNode)