try { driverViewer.setSorter( new ViewerSorter( new RuleBasedCollator( ( (RuleBasedCollator) Collator.getInstance( ) ).getRules( ) ) {
driverViewer.setComparator( new ViewerComparator( new Comparator( ) {
	private void sortDriver( final int columnIndex, final boolean asc )	{		try		{			driverViewer.setSorter( new ViewerSorter( new RuleBasedCollator( ( (RuleBasedCollator) Collator.getInstance( ) ).getRules( ) ) {				public int compare( String source, String target )				{					int result = 0;					if ( columnIndex == 1 )						result = super.compare( getDriverClassName( source ),								getDriverClassName( target ) );					else if ( columnIndex == 2 )						result = super.compare( getDisplayName( source ),								getDisplayName( target ) );					else if ( columnIndex == 3 )						result = super.compare( getUrlTemplate( source ),								getUrlTemplate( target ) );					if ( !asc )						return result;					else						return result *= -1;				}			} ) );		}		catch ( ParseException e )		{			// TODO Auto-generated catch block			e.printStackTrace( );		}		refreshDriver( );	}