/*
   * @see Action#run()
   */
  @Override
  public void run() {
    IActiveJvm jvm = section.getJvm();
    if (jvm == null) {
      return;
    }

    // get file name for remote host
    final String fileName[] = new String[1];
    final boolean transfer[] = new boolean[] {false};

    try {
      if (jvm.isRemote()) {
        final FileNameInputDialog dialog =
            new FileNameInputDialog(
                section.getPart().getSite().getShell(),
                getInitialFileName(jvm),
                isAgentLoaded(jvm));

        Display.getDefault()
            .syncExec(
                new Runnable() {
                  @Override
                  public void run() {
                    if (dialog.open() == Window.OK) {
                      fileName[0] = dialog.getFileName();
                      transfer[0] = dialog.isFileTransfered();
                    }
                  }
                });

        if (fileName[0] == null) {
          return;
        }
      }
    } catch (JvmCoreException e) {
      Activator.log(Messages.dumpHeapDataFailedMsg, e);
      return;
    }

    dumpHprof(fileName[0], transfer[0]);
  }