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();
            databaseMeta.setName( dbName );
            databaseMeta.setDisplayName( dbName );
            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 );
                reloadLoadedJobsAndTransformations();
              } 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();
    }
  }
@Test
  public void editConnection_NameExists_SameWithSpaces() throws Exception {
    final String dbName = " name";
    DatabaseMeta dbmeta = spy( new DatabaseMeta() );
    dbmeta.setName( dbName );
    List<UIDatabaseConnection> selectedConnection = singletonList( new UIDatabaseConnection( dbmeta, repository ) );

    when( connectionsTable.<UIDatabaseConnection>getSelectedItems() ).thenReturn( selectedConnection );

    when( repository.getDatabaseID( dbName ) ).thenReturn( new StringObjectId( "existing" ) );
    when( databaseDialog.open() ).thenReturn( dbName );

    controller.editConnection();
    verify( dbmeta ).setName( dbName.trim() );
  }