/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2006 - 2013 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.reporting.ui.datasources.kettle;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.trans.TransMeta;
import org.pentaho.di.trans.step.StepMeta;
import org.pentaho.reporting.engine.classic.core.DataFactoryContext;
import org.pentaho.reporting.engine.classic.core.ReportDataFactoryException;
import org.pentaho.reporting.engine.classic.extensions.datasources.kettle.AbstractKettleTransformationProducer;
import org.pentaho.reporting.engine.classic.extensions.datasources.kettle.FormulaArgument;
import org.pentaho.reporting.engine.classic.extensions.datasources.kettle.FormulaParameter;
import org.pentaho.reporting.engine.classic.extensions.datasources.kettle.KettleTransFromFileProducer;
import org.pentaho.reporting.engine.classic.extensions.datasources.kettle.KettleTransformationProducer;
import org.pentaho.reporting.libraries.base.util.StringUtils;
import org.pentaho.reporting.libraries.resourceloader.ResourceKey;
import org.pentaho.reporting.libraries.resourceloader.ResourceManager;
import org.pentaho.reporting.ui.datasources.kettle.embedded.KettleParameterInfo;
import java.util.Collections;
import java.util.List;
public class FileKettleQueryEntry extends KettleQueryEntry {
private static class InternalKettleTransFromFileProducer extends KettleTransFromFileProducer {
public InternalKettleTransFromFileProducer( final String transformationFile ) {
super( transformationFile, null, new FormulaArgument[ 0 ], new FormulaParameter[ 0 ] );
}
public TransMeta loadTransformation( final Repository repository,
final ResourceManager resourceManager,
final ResourceKey contextKey )
throws ReportDataFactoryException, KettleException {
return super.loadTransformation( repository, resourceManager, contextKey );
}
}
private String file;
private String selectedStepName;
private List<StepMeta> cachedSteps;
public FileKettleQueryEntry( final String aName ) {
super( aName );
}
public FileKettleQueryEntry( final String aName, final KettleTransformationProducer producer ) {
super( aName );
this.file = producer.getTransformationFile();
this.selectedStepName = producer.getStepName();
if ( producer instanceof AbstractKettleTransformationProducer ) {
AbstractKettleTransformationProducer p = (AbstractKettleTransformationProducer) producer;
setArguments( p.getArguments() );
setParameters( p.getParameter() );
setStopOnErrors( p.isStopOnError() );
}
}
public boolean validate() {
return super.validate() && ( !StringUtils.isEmpty( selectedStepName ) ) && ( !StringUtils.isEmpty( file ) );
}
public void setFile( final String file ) {
this.file = file;
clearCachedEntries();
setValidated( validate() );
}
protected void clearCachedEntries() {
super.clearCachedEntries();
cachedSteps = null;
}
public String getFile() {
return file;
}
public String getSelectedStep() {
return selectedStepName;
}
public void setSelectedStep( final String selectedStep ) {
this.selectedStepName = selectedStep;
setValidated( validate() );
}
public KettleParameterInfo[] getDeclaredParameters( final DataFactoryContext context )
throws KettleException, ReportDataFactoryException {
if ( StringUtils.isEmpty( file ) ) {
return new KettleParameterInfo[ 0 ];
}
return super.getDeclaredParameters( context );
}
protected AbstractKettleTransformationProducer loadTransformation( final DataFactoryContext context ) {
return new InternalKettleTransFromFileProducer( file );
}
public List<StepMeta> getSteps( final DataFactoryContext context )
throws KettleException, ReportDataFactoryException {
if ( StringUtils.isEmpty( file ) ) {
return Collections.emptyList();
}
if ( cachedSteps == null ) {
AbstractKettleTransformationProducer trans = loadTransformation( context );
TransMeta transMeta = trans.loadTransformation( context );
cachedSteps = Collections.unmodifiableList( transMeta.getSteps() );
}
return cachedSteps;
}
public KettleTransformationProducer createProducer() {
final FormulaArgument[] argumentFields = getArguments();
final FormulaParameter[] varNames = getParameters();
final String file = getFile();
final String selectedStep = getSelectedStep();
KettleTransFromFileProducer kettleTransFromFileProducer =
new KettleTransFromFileProducer( file, selectedStep, argumentFields, varNames );
kettleTransFromFileProducer.setStopOnError( isStopOnErrors() );
return kettleTransFromFileProducer;
}
}