public void editConnection() {
    try {
      Collection<UIDatabaseConnection> connections = connectionsTable.getSelectedItems();

      if (connections != null && !connections.isEmpty()) {
        // Grab the first item in the list & send it to the database dialog
        DatabaseMeta databaseMeta =
            ((UIDatabaseConnection) connections.toArray()[0]).getDatabaseMeta();

        // Make sure this connection already exists and store its id for updating
        ObjectId idDatabase = repository.getDatabaseID(databaseMeta.getName());
        if (idDatabase == null) {
          MessageBox mb = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK);
          mb.setMessage(
              BaseMessages.getString(
                  PKG, "RepositoryExplorerDialog.Connection.Edit.DoesNotExists.Message"));
          mb.setText(
              BaseMessages.getString(
                  PKG, "RepositoryExplorerDialog.Connection.Edit.DoesNotExists.Title"));
          mb.open();
        } else {
          getDatabaseDialog().setDatabaseMeta(databaseMeta);
          String dbName = getDatabaseDialog().open();
          if (dbName != null) {
            dbName = dbName.trim();
            if (!dbName.isEmpty()) {
              ObjectId idRenamed = repository.getDatabaseID(dbName);
              if (idRenamed == null || idRenamed.equals(idDatabase)) {
                // renaming to non-existing name or updating the current
                repository.insertLogEntry(
                    BaseMessages.getString(
                        PKG,
                        "ConnectionsController.Message.UpdatingDatabase",
                        databaseMeta.getName()));
                repository.save(databaseMeta, Const.VERSION_COMMENT_EDIT_VERSION, null);
              } else {
                // trying to rename to an existing name - show error dialog
                showAlreadyExistsMessage();
              }
            }
          }
          // We should be able to tell the difference between a cancel and an empty database name
          //
          // else {
          // MessageBox mb = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK);
          // mb.setMessage(BaseMessages.getString(PKG,
          // "RepositoryExplorerDialog.Connection.Edit.MissingName.Message"));
          // mb.setText(BaseMessages.getString(PKG,
          // "RepositoryExplorerDialog.Connection.Edit.MissingName.Title"));
          // mb.open();
          // }
        }
      } else {
        MessageBox mb = new MessageBox(shell, SWT.ICON_ERROR | SWT.OK);
        mb.setMessage(
            BaseMessages.getString(
                PKG, "RepositoryExplorerDialog.Connection.Edit.NoItemSelected.Message"));
        mb.setText(
            BaseMessages.getString(
                PKG, "RepositoryExplorerDialog.Connection.Edit.NoItemSelected.Title"));
        mb.open();
      }
    } catch (KettleException e) {
      if (mainController == null || !mainController.handleLostRepository(e)) {
        new ErrorDialog(
            shell,
            BaseMessages.getString(
                PKG, "RepositoryExplorerDialog.Connection.Create.UnexpectedError.Title"),
            BaseMessages.getString(
                PKG, "RepositoryExplorerDialog.Connection.Edit.UnexpectedError.Message"),
            e);
      }
    } finally {
      refreshConnectionList();
    }
  }