/**
   * Rename the selected session.
   *
   * @param session The session to be renamed
   */
  protected void renameSession(SessionAdapter session) {
    TopLinkSessionsAdapter sessions = (TopLinkSessionsAdapter) session.getParent();
    SimplePropertyValueModel stringHolder = new SimplePropertyValueModel();
    stringHolder.setValue(session.getName());

    RenameDialog dialog =
        new RenameDialog(getWorkbenchContext(), stringHolder, sessions.getAllSessionsNames());
    dialog.setVisible(true);

    if (dialog.wasConfirmed()) {
      session.setName((String) stringHolder.getValue());
    }
  }
  private boolean saveImp(File savePath, WorkbenchContext workbenchContext) {
    TopLinkSessionsAdapter sessions = this.topLinkSessions();

    try {
      sessions
          .getProperties()
          .saveAs(preferences(), savePath); // Need to be done before sessions.save()
      sessions.save(savePath);
      return true;
    } catch (Throwable e) {
      showErrorMessage(e, workbenchContext);
      return false;
    }
  }
  public boolean save(File mostRecentSaveDirectory, WorkbenchContext workbenchContext) {
    TopLinkSessionsAdapter sessions = this.topLinkSessions();
    File path = sessions.getPath();
    boolean saved = false;

    // - There is no directory before the file name and it starts with Sessions,
    //   we assume this is an untitled sessions.xml
    // - The location might have been marked read only, always do a Save As
    if (path.getPath().startsWith(SCSessionsPropertiesManager.UNTITLED_FILE_NAME)) {
      saved = saveAs(mostRecentSaveDirectory, workbenchContext);
    } else {
      // The Read-Only flag was changed after the file was opened
      if (!path.canWrite()) {
        // Show an error message and ask if we should try again
        if (firstTimeReadOnlyFlagWasDetected) {
          showErrorReadOnlyMessage(workbenchContext);
          firstTimeReadOnlyFlagWasDetected = false;

          // We can try to save again, use Save As path
          if (canRetryToSave(workbenchContext)) {
            saved = saveAs(mostRecentSaveDirectory, workbenchContext);

            if (saved) {
              displayStringChanged();
            }
          }
        }
        // - A Read-Only file was opened and needs to be saved
        // - The save is invoked again on a Read-Only file, right away use the Save As path
        else {
          saved = saveAs(mostRecentSaveDirectory, workbenchContext);
        }
      }
      // The file is not an untitled file, the file is not marked as Read-Only
      // then attempt to save it
      else {
        saved = saveImp(path, workbenchContext);
        firstTimeReadOnlyFlagWasDetected = false;

        if (saved) {
          displayStringChanged();
        }
      }
    }
    return saved;
  }
  public ProjectNode(
      TopLinkSessionsAdapter topLinkSessions,
      TreeNodeValueModel parent,
      SCPlugin plugin,
      ApplicationContext context) {

    super(topLinkSessions, parent, plugin, context);
    this.firstTimeReadOnlyFlagWasDetected = topLinkSessions.getPath().canWrite();
  }