context.addErrorMsg( "Fails to handle Table " + item.getName( ) + ":" + t.getLocalizedMessage( ) );
	public void execute( ReportItemDesign item, IReportEmitter emitter )	{		super.execute( item, emitter );		ITableEmitter tableEmitter = emitter.getTableEmitter( );		if ( tableEmitter == null )		{			return;		}		this.emitter = emitter;		table = (TableItemDesign) item;		logger.log( Level.FINE,"start table item" ); //$NON-NLS-1$		//execute the on start script		context.execute( table.getOnStart( ) );		TableContent tableObj = (TableContent)ContentFactory.createTableContent( table, context.getContentObject( ) );		context.pushContentObject( tableObj );				tableObj.setCaption( getLocalizedString( table.getCaptionKey( ), table				.getCaption( ) ) );		try		{			logger.log( Level.FINE, "start get table data" ); //$NON-NLS-1$			rs = openResultSet( table );			logger.log( Level.FINE, "end get table data" ); //$NON-NLS-1$			boolean isRowAvailable = false;			if ( rs != null )			{				isRowAvailable = rs.next( );			}						setStyles( tableObj, item );			setVisibility( item, tableObj );			String bookmarkStr = evalBookmark( item );			if ( bookmarkStr != null )				tableObj.setBookmarkValue( bookmarkStr );					tableEmitter.start( tableObj );			accessColumns( tableEmitter, table );			//access table header			accessHeader( );			//data driving report			tableEmitter.startBody( );			setUpDropProperties( table );			if ( isRowAvailable )			{				context.execute( table.getOnRow( ) );				this.accessGroup( 0 );			}			//access table footer			accessSummary( );			tableEmitter.endBody( );			tableEmitter.end( );			//execute the on finish script			context.execute( table.getOnFinish( ) );				}		catch ( Throwable t )		{			logger.log( Level.SEVERE, "Error:", t );//$NON-NLS-1$		}		finally		{			closeResultSet( rs );			logger.log( Level.FINE, "end table item" ); //$NON-NLS-1$			context.popContentObject( );		}	}