logger.log( ILogger.INFORMATION,
logger.log( ILogger.ERROR,
	public Object onRowSets( IRowSet[] irsa ) throws BirtException	{		// BIND RESULTSET TO CHART DATASETS		if ( irsa == null				|| irsa.length != 1				|| ibqda == null				|| ibqda.length != 1				|| irsa[0] == null )		{			// Data rows are empty			throw new ChartException( ChartReportItemPlugin.ID,					ChartException.GENERATION,					"ChartReportItemPresentationImpl.error.NoData", //$NON-NLS-1$					ResourceBundle.getBundle( Messages.REPORT_ITEM,							rtc.getLocale( ) ) );		}		logger.log( ILogger.INFORMATION,				Messages.getString( "ChartReportItemPresentationImpl.log.onRowSetsStart" ) ); //$NON-NLS-1$		try		{			final QueryHelper qh = QueryHelper.instance( rtc );			// final ScriptHandler sh = rtc.getScriptHandler();			// ScriptHandler.callFunction(sh, ScriptHandler.BEFORE_DATA_BINDING,			// irsa[0]);			final ResultSetWrapper rsw = qh.mapToChartResultSet( ibqda[0],					irsa[0],					cm );			// ScriptHandler.callFunction(sh, ScriptHandler.AFTER_DATA_BINDING,			// rsw);			// POPULATE THE CHART MODEL WITH THE RESULTSET			qh.generateRuntimeSeries( cm, rsw );			logger.log( ILogger.INFORMATION,					Messages.getString( "ChartReportItemPresentationImpl.log.onRowSetsBuilding" ) ); //$NON-NLS-1$			// SETUP A TEMP FILE FOR STREAMING			try			{				fChartImage = File.createTempFile( "chart", "." + sExtension ); //$NON-NLS-1$ //$NON-NLS-2$				logger.log( ILogger.INFORMATION,						Messages.getString( "ChartReportItemPresentationImpl.log.WritingFile", //$NON-NLS-1$								new Object[]{										sExtension, fChartImage.getPath( )								} ) );			}			catch ( IOException ioex )			{				throw new ChartException( ChartReportItemPlugin.ID,						ChartException.GENERATION,						ioex );			}			// FETCH A HANDLE TO THE DEVICE RENDERER			IDeviceRenderer idr = null;			idr = PluginSettings.instance( ).getDevice( "dv." //$NON-NLS-1$					+ sExtension.toUpperCase( Locale.US ) );			// BUILD THE CHART			// we must copy the bounds to avoid that setting it on one object			// unsets it on its precedent container			final Bounds bo = (Bounds) EcoreUtil.copy( cm.getBlock( )					.getBounds( ) );			logger.log( ILogger.INFORMATION,					Messages.getString( "ChartReportItemPresentationImpl.log.PresentationUsesBoundsBo", bo ) ); //$NON-NLS-1$			final Generator gr = Generator.instance( );			GeneratedChartState gcs = null;			gcs = gr.build( idr.getDisplayServer( ), cm, null, bo, rtc );			// WRITE TO THE IMAGE FILE			logger.log( ILogger.INFORMATION,					Messages.getString( "ChartReportItemPresentationImpl.log.onRowSetsRendering" ) ); //$NON-NLS-1$			idr.setProperty( IDeviceRenderer.FILE_IDENTIFIER,					fChartImage.getPath( ) );			gr.render( idr, gcs );			// RETURN A STREAM HANDLE TO THE NEWLY CREATED IMAGE			try			{				fis = new FileInputStream( fChartImage.getPath( ) );			}			catch ( IOException ioex )			{				throw new ChartException( ChartReportItemPlugin.ID,						ChartException.GENERATION,						ioex );			}		}		catch ( BirtException ex )		{			logger.log( ILogger.INFORMATION,					Messages.getString( "ChartReportItemPresentationImpl.log.onRowSetsFailed" ) ); //$NON-NLS-1$			logger.log( ex );			throw ex;		}		catch ( RuntimeException ex )		{			logger.log( ILogger.INFORMATION,					Messages.getString( "ChartReportItemPresentationImpl.log.onRowSetsFailed" ) ); //$NON-NLS-1$			logger.log( ex );			throw new ChartException( ChartReportItemPlugin.ID,					ChartException.GENERATION,					ex );		}		logger.log( ILogger.INFORMATION,				Messages.getString( "ChartReportItemPresentationImpl.onRowSetsEnd" ) ); //$NON-NLS-1$		return fis;	}