protected void getInfo( DatabaseMeta meta ) {

    getControls();

    if ( this.databaseMeta != null && this.databaseMeta != meta ) {
      meta.initializeVariablesFrom( this.databaseMeta );
    }

    // Let's not remove any (default) options or attributes
    // We just need to display the correct ones for the database type below...
    //
    // In fact, let's just clear the database port...
    //
    // TODO: what about the port number?

    // Name:
    meta.setName( connectionNameBox.getValue() );
    // Display Name: (PDI-12292)
    meta.setDisplayName( connectionNameBox.getValue() );

    // Connection type:
    Object connection = connectionBox.getSelectedItem();
    if ( connection != null ) {
      meta.setDatabaseType( (String) connection );
    }

    // Access type:
    Object access = accessBox.getSelectedItem();
    if ( access != null ) {
      meta.setAccessType( DatabaseMeta.getAccessType( (String) access ) );
    }

    getConnectionSpecificInfo( meta );

    // Port number:
    if ( portNumberBox != null ) {
      meta.setDBPort( portNumberBox.getValue() );
    }

    // Option parameters:

    if ( optionsParameterTree != null ) {
      Object[][] values = optionsParameterTree.getValues();
      for ( int i = 0; i < values.length; i++ ) {

        String parameter = (String) values[ i ][ 0 ];
        String value = (String) values[ i ][ 1 ];

        if ( value == null ) {
          value = "";
        }

        String dbType = meta.getPluginId();

        // Only if parameter are supplied, we will add to the map...
        if ( ( parameter != null ) && ( parameter.trim().length() > 0 ) ) {
          if ( value.trim().length() <= 0 ) {
            value = DatabaseMeta.EMPTY_OPTIONS_STRING;
          }

          meta.addExtraOption( dbType, parameter, value );
        }
      }
    }

    // Advanced panel settings:

    if ( supportBooleanDataType != null ) {
      meta.setSupportsBooleanDataType( supportBooleanDataType.isChecked() );
    }

    if ( supportTimestampDataType != null ) {
      meta.setSupportsTimestampDataType( supportTimestampDataType.isChecked() );
    }

    if ( quoteIdentifiersCheck != null ) {
      meta.setQuoteAllFields( quoteIdentifiersCheck.isChecked() );
    }

    if ( lowerCaseIdentifiersCheck != null ) {
      meta.setForcingIdentifiersToLowerCase( lowerCaseIdentifiersCheck.isChecked() );
    }

    if ( upperCaseIdentifiersCheck != null ) {
      meta.setForcingIdentifiersToUpperCase( upperCaseIdentifiersCheck.isChecked() );
    }

    if ( preserveReservedCaseCheck != null ) {
      meta.setPreserveReservedCase( preserveReservedCaseCheck.isChecked() );
    }

    if ( strictBigNumberInterpretaion != null && meta.getDatabaseInterface() instanceof OracleDatabaseMeta ) {
      ( (OracleDatabaseMeta) meta.getDatabaseInterface() )
        .setStrictBigNumberInterpretation( strictBigNumberInterpretaion.isChecked() );
    }

    if ( preferredSchemaName != null ) {
      meta.setPreferredSchemaName( preferredSchemaName.getValue() );
    }

    if ( sqlBox != null ) {
      meta.setConnectSQL( sqlBox.getValue() );
    }

    // Cluster panel settings
    if ( clusteringCheck != null ) {
      meta.setPartitioned( clusteringCheck.isChecked() );
    }

    if ( ( clusterParameterTree != null ) && ( meta.isPartitioned() ) ) {

      Object[][] values = clusterParameterTree.getValues();
      List<PartitionDatabaseMeta> pdms = new ArrayList<PartitionDatabaseMeta>();
      for ( int i = 0; i < values.length; i++ ) {

        String partitionId = (String) values[ i ][ 0 ];

        if ( ( partitionId == null ) || ( partitionId.trim().length() <= 0 ) ) {
          continue;
        }

        String hostname = (String) values[ i ][ 1 ];
        String port = (String) values[ i ][ 2 ];
        String dbName = (String) values[ i ][ 3 ];
        String username = (String) values[ i ][ 4 ];
        String password = (String) values[ i ][ 5 ];
        PartitionDatabaseMeta pdm = new PartitionDatabaseMeta( partitionId, hostname, port, dbName );
        pdm.setUsername( username );
        pdm.setPassword( password );
        pdms.add( pdm );
      }
      PartitionDatabaseMeta[] pdmArray = new PartitionDatabaseMeta[ pdms.size() ];
      meta.setPartitioningInformation( pdms.toArray( pdmArray ) );
    }

    if ( poolingCheck != null ) {
      meta.setUsingConnectionPool( poolingCheck.isChecked() );
    }

    if ( meta.isUsingConnectionPool() ) {
      if ( poolSizeBox != null ) {
        try {
          meta.setInitialPoolSizeString( poolSizeBox.getValue() );
        } catch ( NumberFormatException e ) {
          // TODO log exception and move on ...
        }
      }

      if ( maxPoolSizeBox != null ) {
        try {
          meta.setMaximumPoolSizeString( maxPoolSizeBox.getValue() );
        } catch ( NumberFormatException e ) {
          // TODO log exception and move on ...
        }
      }

      if ( poolParameterTree != null ) {
        Object[][] values = poolParameterTree.getValues();
        Properties properties = new Properties();
        for ( int i = 0; i < values.length; i++ ) {

          boolean isChecked = false;
          if ( values[ i ][ 0 ] instanceof Boolean ) {
            isChecked = ( (Boolean) values[ i ][ 0 ] ).booleanValue();
          } else {
            isChecked = Boolean.valueOf( (String) values[ i ][ 0 ] );
          }

          if ( !isChecked ) {
            continue;
          }

          String parameter = (String) values[ i ][ 1 ];
          String value = (String) values[ i ][ 2 ];
          if ( ( parameter != null )
            && ( parameter.trim().length() > 0 ) && ( value != null ) && ( value.trim().length() > 0 ) ) {
            properties.setProperty( parameter, value );
          }

        }
        meta.setConnectionPoolingProperties( properties );
      }
    }
  }
@Test
  public void testGetInfo() throws Exception {

  }