/*!
* 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.reporting.designer.core.editor.drilldown.basic;
import org.pentaho.reporting.designer.core.ReportDesignerContext;
import org.pentaho.reporting.designer.core.editor.ReportDocumentContext;
import org.pentaho.reporting.designer.core.editor.drilldown.DrillDownParameterRefreshEvent;
import org.pentaho.reporting.designer.core.editor.drilldown.DrillDownParameterRefreshListener;
import org.pentaho.reporting.designer.core.editor.drilldown.DrillDownParameterTable;
import org.pentaho.reporting.designer.core.editor.drilldown.model.DrillDownModel;
import org.pentaho.reporting.designer.core.editor.drilldown.model.DrillDownParameter;
import org.pentaho.reporting.engine.classic.core.MasterReport;
import org.pentaho.reporting.engine.classic.core.parameters.ParameterDefinitionEntry;
import org.pentaho.reporting.engine.classic.core.parameters.ReportParameterDefinition;
import java.util.HashMap;
/**
* Todo: Document me!
*
* @author Thomas Morgner.
*/
public class SelfDrillDownController extends DefaultXulDrillDownController {
private class UpdateParametersHandler implements DrillDownParameterRefreshListener {
private UpdateParametersHandler() {
}
public void requestParameterRefresh( final DrillDownParameterRefreshEvent event ) {
final HashMap<String, DrillDownParameter> entries = new HashMap<String, DrillDownParameter>();
final DrillDownParameter[] originalParams = event.getParameter();
for ( int i = 0; i < originalParams.length; i++ ) {
final DrillDownParameter param = originalParams[ i ];
param.setType( DrillDownParameter.Type.MANUAL );
entries.put( param.getName(), param );
}
final ReportDocumentContext activeContext = getReportDesignerContext().getActiveContext();
final MasterReport masterReportElement = activeContext.getContextRoot();
final ReportParameterDefinition reportParams = masterReportElement.getParameterDefinition();
final ParameterDefinitionEntry[] parameterDefinitionEntries = reportParams.getParameterDefinitions();
for ( int i = 0; i < parameterDefinitionEntries.length; i++ ) {
final ParameterDefinitionEntry entry = parameterDefinitionEntries[ i ];
if ( entries.containsKey( entry.getName() ) == false ) {
entries.put( entry.getName(),
new DrillDownParameter( entry.getName(), null, DrillDownParameter.Type.PREDEFINED, false, false ) );
} else {
final DrillDownParameter parameter = entries.get( entry.getName() );
parameter.setType( DrillDownParameter.Type.PREDEFINED );
}
}
final DrillDownParameter[] parameters = entries.values().toArray( new DrillDownParameter[ entries.size() ] );
getWrapper().setDrillDownParameter( parameters );
getTable().setDrillDownParameter( parameters );
}
}
public SelfDrillDownController() {
}
public void init( final ReportDesignerContext reportDesignerContext,
final DrillDownModel model,
final String[] fields ) {
super.init( reportDesignerContext, model, fields );
final DrillDownParameterTable drillDownTable = getTable();
if ( drillDownTable != null ) {
drillDownTable.addDrillDownParameterRefreshListener( new UpdateParametersHandler() );
}
getWrapper().setDrillDownConfig( "self" );
getWrapper().setDrillDownPath( null );
}
public void deactivate() {
}
}