}
private PentahoTableDataFactory getQueryComponentDataFactory() throws ClassNotFoundException, InstantiationException,
IllegalAccessException, Exception {
JFreeReportAction jFreeReportAction = (JFreeReportAction) getActionDefinition();
PentahoTableDataFactory factory = null;
String dataComponentName = jFreeReportAction.getDataComponent().getStringValue();
String origComponentName = jFreeReportAction.getComponentName();
if ( dataComponentName != null ) {
if ( JFreeReportAction.SQL_DATA_SOURCE.equalsIgnoreCase( dataComponentName ) ) {
dataComponentName = AbstractJFreeReportComponent.DATACOMPONENT_SQLCLASS;
} else if ( JFreeReportAction.MDX_DATA_SOURCE.equalsIgnoreCase( dataComponentName ) ) {
dataComponentName = AbstractJFreeReportComponent.DATACOMPONENT_MDXCLASS;
}
try {
// This is a giant hack and a big no, no. Basically we're going to transform the JFreeReportAction into a
// SQL or MDX lookup action, by changing its component name. Then we create the appropriate component to run the
// transformed action.
// All this to support the DB and Query info being embedded in the JFreeReport action. This is definitely
// deprecated functionality
// that should not be relied upon. The correct way to do this is to create an SQL or MDX action prior to the
// JFreeReport
// action in the action sequence. That action performs the desired query, then pass the results of that query to
// the JFreeReport
// action.
jFreeReportAction.setComponentName( dataComponentName );
ActionDefinition tmpActionDefinition =
ActionFactory.getActionDefinition( jFreeReportAction.getElement(), jFreeReportAction
.getActionParameterMgr() );
final Class componentClass = Class.forName( dataComponentName );
IDataComponent dataComponent = (IDataComponent) componentClass.newInstance();
dataComponent.setInstanceId( getInstanceId() );
dataComponent.setActionName( getActionName() );
dataComponent.setProcessId( getProcessId() );
dataComponent.setActionDefinition( tmpActionDefinition );
dataComponent.setComponentDefinition( getComponentDefinition() );
dataComponent.setRuntimeContext( getRuntimeContext() );
dataComponent.setSession( getSession() );
dataComponent.setLoggingLevel( getLoggingLevel() );
dataComponent.setMessages( getMessages() );
// if that fails, then we know we messed up again.
// Abort, we cant continue anyway.
if ( ( dataComponent.validate() == IRuntimeContext.RUNTIME_CONTEXT_VALIDATE_OK ) && dataComponent.init()
&& ( dataComponent.execute() == IRuntimeContext.RUNTIME_STATUS_SUCCESS ) ) {
final IPentahoResultSet resultset = dataComponent.getResultSet();
factory =
new PentahoTableDataFactory( AbstractJFreeReportComponent.DATACOMPONENT_DEFAULTINPUT,
new PentahoTableModel( resultset ) );
} else {
throw new IllegalArgumentException( Messages.getInstance().getErrorString(
"JFreeReport.ERROR_0021_DATA_COMPONENT_FAILED" ) ); //$NON-NLS-1$
}