package org.pentaho.reporting.engine.classic.extensions.datasources.kettle;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.pentaho.di.core.Const;
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.logging.KettleLogStore;
import org.pentaho.reporting.engine.classic.core.ReportDataFactoryException;
import org.pentaho.reporting.engine.classic.core.metadata.ElementMetaDataParser;
import org.pentaho.reporting.engine.classic.core.modules.parser.base.DataFactoryReadHandlerFactory;
import org.pentaho.reporting.engine.classic.core.modules.parser.base.DataFactoryXmlResourceFactory;
import org.pentaho.reporting.engine.classic.extensions.datasources.kettle.parser.KettleDataSourceReadHandler;
import org.pentaho.reporting.engine.classic.extensions.datasources.kettle.parser.KettleDataSourceXmlFactoryModule;
import org.pentaho.reporting.engine.classic.extensions.datasources.kettle.parser.KettleEmbeddedTransReadHandler;
import org.pentaho.reporting.engine.classic.extensions.datasources.kettle.parser.KettleTransFromFileReadHandler;
import org.pentaho.reporting.engine.classic.extensions.datasources.kettle.parser
.KettleTransformationProducerReadHandler;
import org.pentaho.reporting.engine.classic.extensions.datasources.kettle.parser
.KettleTransformationProducerReadHandlerFactory;
import org.pentaho.reporting.libraries.base.boot.ModuleInitializeException;
import org.pentaho.reporting.libraries.base.boot.ModuleInitializer;
public class KettleDataFactoryModuleInitializer implements ModuleInitializer {
private static final Log logger = LogFactory.getLog( KettleDataFactoryModuleInitializer.class );
public KettleDataFactoryModuleInitializer() {
}
public void performInit() throws ModuleInitializeException {
try {
logger.debug( "DEFAULT_PLUGIN_BASE_FOLDERS=" + Const.DEFAULT_PLUGIN_BASE_FOLDERS );
// init kettle without simplejndi
if ( KettleEnvironment.isInitialized() == false ) {
KettleEnvironment.init( false );
// Route logging from Kettle to Apache Commons Logging...
//
KettleLogStore.getAppender().addLoggingEventListener( new KettleToCommonsLoggingEventListener() );
}
} catch ( Throwable e ) {
// Kettle dependencies are messed up and conflict with dpendencies from Mondrian, PMD and other projects.
// I'm not going through and fix that now.
logger.debug( "Failed to init Kettle", e );
// Should not happen, as there is no code in that method that could possibly raise
// a Kettle exception.
throw new ModuleInitializeException( "Failed to initialize Kettle" );
}
DataFactoryXmlResourceFactory.register( KettleDataSourceXmlFactoryModule.class );
DataFactoryReadHandlerFactory.getInstance()
.setElementHandler( KettleDataFactoryModule.NAMESPACE, "kettle-datasource", KettleDataSourceReadHandler.class );
KettleTransformationProducerReadHandlerFactory.getInstance()
.setElementHandler( KettleDataFactoryModule.NAMESPACE, "query-file", KettleTransFromFileReadHandler.class );
KettleTransformationProducerReadHandlerFactory.getInstance()
.setElementHandler( KettleDataFactoryModule.NAMESPACE, "query-repository",
KettleTransformationProducerReadHandler.class );
KettleTransformationProducerReadHandlerFactory.getInstance()
.setElementHandler( KettleDataFactoryModule.NAMESPACE, "query-embedded", KettleEmbeddedTransReadHandler.class );
ElementMetaDataParser.initializeOptionalDataFactoryMetaData
( "org/pentaho/reporting/engine/classic/extensions/datasources/kettle/meta-datafactory.xml" );
// ... initialize the templated datasources ...
try {
TransformationDatasourceMetadata.registerDatasources();
} catch ( ReportDataFactoryException e ) {
// Do not bail here... this subsystem of datasources is not core to the functioning of the
// Kettle datasource.
logger.warn( "Error initializing templated datasources.", e );
}
}
}