/*!
* 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) 2002-2013 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.platform.plugin.action.jfreereport.components;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Node;
import org.pentaho.commons.connection.IPentahoMetaData;
import org.pentaho.commons.connection.IPentahoResultSet;
import org.pentaho.platform.plugin.action.jfreereport.AbstractJFreeReportComponent;
import org.pentaho.platform.plugin.action.messages.Messages;
import org.pentaho.platform.util.xml.dom4j.XmlDom4JHelper;
import org.pentaho.reporting.engine.classic.core.MasterReport;
import org.pentaho.reporting.libraries.base.config.ModifiableConfiguration;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* @deprecated
*/
@Deprecated
public class JFreeReportConfigParameterComponent extends AbstractJFreeReportComponent {
private static final long serialVersionUID = 6599442849458920502L;
private static final String REPORT_CONFIG_INPUT_PARAM = "config_parameters"; //$NON-NLS-1$
private static final String REPORT_CONFIG_COMPDEFN = "report_configuration_parameters"; //$NON-NLS-1$
public JFreeReportConfigParameterComponent() {
// TODO Auto-generated constructor stub
super();
}
@Override
public void done() {
// Nothing to do here...
}
private boolean initReportConfigParameters() {
boolean result = true;
if ( isDefinedInput( AbstractJFreeReportComponent.DATACOMPONENT_REPORTTEMP_OBJINPUT ) ) {
Object maybeReport = getInputValue( AbstractJFreeReportComponent.DATACOMPONENT_REPORTTEMP_OBJINPUT );
if ( maybeReport instanceof MasterReport ) {
MasterReport report = (MasterReport) maybeReport;
// We should have our report object at this point.
if ( isDefinedInput( JFreeReportConfigParameterComponent.REPORT_CONFIG_INPUT_PARAM ) ) {
// It's coming in as an input parameter
Object reportConfigParams =
this.getInputValue( JFreeReportConfigParameterComponent.REPORT_CONFIG_INPUT_PARAM );
if ( reportConfigParams instanceof IPentahoResultSet ) {
setReportConfigParameters( report, (IPentahoResultSet) reportConfigParams );
} else if ( reportConfigParams instanceof Map ) {
setReportConfigParameters( report, (Map) reportConfigParams );
} else {
error( Messages.getInstance().getErrorString(
"JFreeReport.ERROR_0026_UNKNOWN_REPORT_CONFIGURATION_PARAMETERS" ) ); //$NON-NLS-1$
result = false;
}
} else {
Node compDef = getComponentDefinition();
List configNodes = compDef.selectNodes( JFreeReportConfigParameterComponent.REPORT_CONFIG_COMPDEFN + "/*" ); //$NON-NLS-1$
if ( ( configNodes != null ) && ( configNodes.size() > 0 ) ) {
setReportConfigParameters( report, configNodes );
}
}
}
}
return result;
}
@Override
protected boolean executeAction() throws Throwable {
return initReportConfigParameters();
}
@Override
public boolean init() {
return true;
}
private void setReportConfigParameters( final MasterReport report, final List configNodes ) {
// We have some configuration parameters in the component definition
String parmName = null;
String parmValue = null;
for ( int i = 0; i < configNodes.size(); i++ ) {
Node aNode = (Node) configNodes.get( i );
parmName = XmlDom4JHelper.getNodeText( "@name", aNode, null ); //$NON-NLS-1$
if ( ( parmName == null ) || ( parmName.length() == 0 ) ) {
// Ignore configuration settings without name=
error( Messages.getInstance().getErrorString( "JFreeReport.ERROR_0027_REPORT_CONFIGURATION_PARAMETER_IGNORED"
) ); //$NON-NLS-1$
continue;
}
parmValue = aNode.getText();
if ( parmValue != null ) {
parmValue = parmValue.trim();
if ( parmValue.length() > 0 ) {
report.getReportConfiguration().setConfigProperty( parmName, applyInputsToFormat( parmValue ) );
} else {
error( Messages.getInstance()
.getErrorString( "JFreeReport.ERROR_0027_REPORT_CONFIGURATION_PARAMETER_IGNORED" ) ); //$NON-NLS-1$
}
} else {
error( Messages.getInstance().getErrorString( "JFreeReport.ERROR_0027_REPORT_CONFIGURATION_PARAMETER_IGNORED" ) ); //$NON-NLS-1$
}
}
}
private void setReportConfigParameters( final MasterReport report, final Map values ) {
Map.Entry ent;
ModifiableConfiguration config = report.getReportConfiguration();
Iterator it = values.entrySet().iterator();
while ( it.hasNext() ) {
ent = (Map.Entry) it.next();
if ( ( ent.getKey() != null ) && ( ent.getValue() != null ) ) {
config.setConfigProperty( ent.getKey().toString(), applyInputsToFormat( ent.getValue().toString() ) );
}
}
}
private void setReportConfigParameters( final MasterReport report, final IPentahoResultSet values ) {
int rowCount = values.getRowCount();
int colCount = values.getColumnCount();
ModifiableConfiguration config = report.getReportConfiguration();
if ( colCount >= 2 ) {
IPentahoMetaData md = values.getMetaData();
int nameIdx = md.getColumnIndex( "name" ); //$NON-NLS-1$
int valIdx = md.getColumnIndex( "value" ); //$NON-NLS-1$
if ( nameIdx < 0 ) {
nameIdx = 0;
}
if ( valIdx < 0 ) {
valIdx = 1;
}
for ( int i = 0; i < rowCount; i++ ) {
Object[] aRow = values.getDataRow( i );
if ( ( aRow[nameIdx] != null ) && ( aRow[valIdx] != null ) ) {
config.setConfigProperty( aRow[nameIdx].toString(), applyInputsToFormat( aRow[valIdx].toString() ) );
}
}
} else {
error( Messages.getInstance().getErrorString( "JFreeReport.ERROR_0025_INVALID_REPORT_CONFIGURATION_PARAMETERS" ) ); //$NON-NLS-1$
}
}
@Override
protected boolean validateAction() {
return true;
}
@Override
protected boolean validateSystemSettings() {
return true;
}
@Override
public Log getLogger() {
return LogFactory.getLog( JFreeReportConfigParameterComponent.class );
}
}