Matcher parameterMatcher = parameterPattern.matcher( template );
ArrayList<String> partsList = new ArrayList<String>();
ArrayList<Integer> columnsList = new ArrayList<Integer>();
int idx = 0;
int lastEnd = 0;
IPentahoResultSet data = null;
while ( parameterMatcher.find() ) {
int start = parameterMatcher.start();
String parameter = parameterMatcher.group( 1 );
// pull out the repeating part
int pos1 = parameter.indexOf( ":col:" ); //$NON-NLS-1$
if ( pos1 > -1 ) {
String part = template.substring( lastEnd, start );
if ( PentahoSystem.debug ) {
TemplateUtil.logger.debug( "parameter=" + parameter ); //$NON-NLS-1$
TemplateUtil.logger.debug( "part=" + part ); //$NON-NLS-1$
}
String inputName = parameter.substring( 0, pos1 );
String columnNoStr = parameter.substring( pos1 + 5 );
int columnNo = Integer.parseInt( columnNoStr );
if ( PentahoSystem.debug ) {
TemplateUtil.logger.debug( "inputName=" + inputName ); //$NON-NLS-1$
TemplateUtil.logger.debug( "columnNoStr=" + columnNoStr ); //$NON-NLS-1$
TemplateUtil.logger.debug( "columnNo=" + columnNo ); //$NON-NLS-1$
}
Object obj = null;
if ( inputs instanceof InputProperties ) {
obj = ( (InputProperties) inputs ).getInput( inputName );
}
if ( obj == null ) {
if ( TemplateUtil.logger.isDebugEnabled() ) {
TemplateUtil.logger.debug( Messages.getInstance().getString( "TemplateUtil.NOT_FOUND", inputName ) ); //$NON-NLS-1$
}
} else {
if ( obj instanceof IPentahoResultSet ) {
data = (IPentahoResultSet) obj;
if ( columnNo < data.getColumnCount() ) {
columnsList.add( new Integer( columnNo ) );
} else {
TemplateUtil.logger.warn( Messages.getInstance().getString(
"TemplateUtil.INVALID_COLUMN", String.valueOf( columnNo ) ) ); //$NON-NLS-1$
}
}
}
partsList.add( part );
lastEnd = parameterMatcher.end();
}
}
if ( PentahoSystem.debug ) {
TemplateUtil.logger.debug( "partsList.size()=" + partsList.size() ); //$NON-NLS-1$
}
if ( PentahoSystem.debug ) {
TemplateUtil.logger.debug( "columnsList.size()=" + columnsList.size() ); //$NON-NLS-1$
}
if ( PentahoSystem.debug ) {
TemplateUtil.logger.debug( "data=" + data ); //$NON-NLS-1$
}
if ( partsList.size() > 0 ) {
partsList.add( template.substring( lastEnd ) );
} else {
TemplateUtil.logger.warn( Messages.getInstance().getString( "TemplateUtil.NO_TOKEN" ) ); //$NON-NLS-1$
}
if ( ( data != null ) && ( partsList.size() == columnsList.size() + 1 ) ) {
// here we go
String[] parts = new String[partsList.size()];
partsList.toArray( parts );
Integer[] cols = new Integer[columnsList.size()];
columnsList.toArray( cols );
int rowNo = 0;
Object[] row = data.getDataRow( rowNo );
while ( row != null ) {
for ( idx = 0; idx < cols.length; idx++ ) {
results.append( parts[idx] );
results.append( row[cols[idx].intValue()] );
}
results.append( parts[parts.length - 1] );
rowNo++;
row = data.getDataRow( rowNo );
}
}
if ( PentahoSystem.debug ) {
TemplateUtil.logger.debug( "results=" + results.toString() ); //$NON-NLS-1$
}