/* * 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 2010 Pentaho Corporation. All rights reserved. * * * Created Sep, 2010 * @author jdixon */ package org.pentaho.platform.dataaccess.datasource.wizard.service.agile; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.pentaho.di.core.database.DatabaseMeta; import org.pentaho.di.trans.TransMeta; import org.pentaho.di.trans.step.StepErrorMeta; import org.pentaho.di.trans.step.StepMeta; import org.pentaho.di.trans.steps.tableinput.TableInputMeta; import org.pentaho.platform.dataaccess.datasource.wizard.sources.csv.FileTransformStats; public class TableInputTransformGenerator extends StagingTransformGenerator { private static final long serialVersionUID = -185098401772609035L; private static final String TABLE_INPUT = "tableinput"; //$NON-NLS-1$ private static final Log log = LogFactory.getLog(TableInputTransformGenerator.class); private DatabaseMeta sourceDatabaseMeta; private String sql; private int rowLimit = -1; public TableInputTransformGenerator( DatabaseMeta sourceDatabaseMeta, DatabaseMeta targetDatabaseMeta ) { super(targetDatabaseMeta); this.sourceDatabaseMeta = sourceDatabaseMeta; } @Override protected String[] getIndexedColumnNames() { return new String[0]; } @Override protected StepMeta[] getSteps( TransMeta transMeta ) { StepMeta steps[] = new StepMeta[1]; steps[0] = createInputStep(transMeta); return steps; } protected StepMeta createInputStep(TransMeta transMeta) { TableInputMeta inputMeta = new TableInputMeta(); inputMeta.setDatabaseMeta(sourceDatabaseMeta); inputMeta.setExecuteEachInputRow(false); inputMeta.setRowLimit(Integer.toString(rowLimit)); inputMeta.setSQL(sql); inputMeta.setVariableReplacementActive(false); inputMeta.setLazyConversionActive(false); // inputMeta.setTargetSteps(null); StepMeta inputStepMeta = new StepMeta(TABLE_INPUT, TABLE_INPUT, inputMeta); inputStepMeta.setStepErrorMeta(new StepErrorMeta(transMeta, inputStepMeta)); transMeta.addStep(inputStepMeta); final FileTransformStats stats = getTransformStats(); StepErrorMeta inputErrorMeta = new StepErrorMeta(transMeta, inputStepMeta) { public void addErrorRowData(Object[] row, int startIndex, long nrErrors, String errorDescriptions, String fieldNames, String errorCodes) { StringBuffer sb = new StringBuffer(); sb.append("Rejected Row: "); for (Object rowData : row) { sb.append(rowData); sb.append(", "); } sb.append("\r\n"); stats.getErrors().add(sb.toString() + errorDescriptions); super.addErrorRowData(row, startIndex, nrErrors, errorDescriptions, fieldNames, errorCodes); } }; StepMeta outputDummyStepMeta = addDummyStep(transMeta, "InputErrorDummy"); inputErrorMeta.setTargetStep(outputDummyStepMeta); inputErrorMeta.setEnabled(true); inputStepMeta.setStepErrorMeta(inputErrorMeta); return inputStepMeta; } @Override public Log getLogger() { return log; } public DatabaseMeta getSourceDatabaseMeta() { return sourceDatabaseMeta; } public void setSourceDatabaseMeta(DatabaseMeta databaseMeta) { this.sourceDatabaseMeta = databaseMeta; } public String getSql() { return sql; } public void setSql(String sql) { this.sql = sql; } public int getRowLimit() { return rowLimit; } public void setRowLimit(int rowLimit) { this.rowLimit = rowLimit; } }