/* * 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 - 2009 Pentaho Corporation.. All rights reserved. */ package org.pentaho.reporting.engine.classic.core.designtime; import org.pentaho.reporting.engine.classic.core.AbstractReportDefinition; import org.pentaho.reporting.engine.classic.core.MasterReport; import org.pentaho.reporting.engine.classic.core.ParameterDataRow; import org.pentaho.reporting.engine.classic.core.ParameterMapping; import org.pentaho.reporting.engine.classic.core.SubReport; import org.pentaho.reporting.engine.classic.core.parameters.ParameterDefinitionEntry; import org.pentaho.reporting.engine.classic.core.util.ReportParameterValues; import org.pentaho.reporting.engine.classic.core.wizard.ContextAwareDataSchemaModel; import org.pentaho.reporting.engine.classic.core.wizard.DataAttributeContext; import org.pentaho.reporting.engine.classic.core.wizard.DataSchemaDefinition; import org.pentaho.reporting.engine.classic.core.wizard.DataSchemaUtility; import org.pentaho.reporting.engine.classic.core.wizard.DefaultDataAttributeContext; import org.pentaho.reporting.libraries.base.util.ArgumentNullException; import org.pentaho.reporting.libraries.base.util.LinkedMap; import java.util.Date; public abstract class AbstractDesignTimeDataSchemaModel implements ContextAwareDataSchemaModel { private final AbstractReportDefinition parent; private final DataSchemaDefinition dataSchemaDefinition; private final DataAttributeContext dataAttributeContext; private final MasterReport masterReportElement; protected AbstractDesignTimeDataSchemaModel( final MasterReport masterReportElement, final AbstractReportDefinition report ) { ArgumentNullException.validate( "masterReportElement", masterReportElement ); ArgumentNullException.validate( "report", report ); this.masterReportElement = masterReportElement; this.parent = report; this.dataSchemaDefinition = createDataSchemaDefinition( masterReportElement ); this.dataAttributeContext = new DefaultDataAttributeContext(); } public DataSchemaDefinition getDataSchemaDefinition() { return dataSchemaDefinition; } protected DataSchemaDefinition createDataSchemaDefinition( final MasterReport masterReportElement ) { DataSchemaDefinition dataSchemaDefinition = masterReportElement.getDataSchemaDefinition(); if ( dataSchemaDefinition == null ) { return DataSchemaUtility.parseDefaults( masterReportElement.getResourceManager() ); } return dataSchemaDefinition; } protected ParameterDataRow computeParameterData() { AbstractReportDefinition parent = getReport(); final ParameterDataRow parameterRow; if ( parent instanceof MasterReport ) { final MasterReport mr = (MasterReport) parent; final LinkedMap values = computeParameterValueMap( mr ); parameterRow = new ParameterDataRow( (String[]) values.keys( new String[values.size()] ), values.values() ); } else if ( parent instanceof SubReport ) { final SubReport sr = (SubReport) parent; final ParameterMapping[] inputMappings = sr.getInputMappings(); final Object[] values = new Object[inputMappings.length]; final String[] names = new String[inputMappings.length]; for ( int i = 0; i < inputMappings.length; i++ ) { final ParameterMapping inputMapping = inputMappings[i]; names[i] = inputMapping.getAlias(); } parameterRow = new ParameterDataRow( names, values ); } else { parameterRow = new ParameterDataRow(); } return parameterRow; } protected ParameterDefinitionEntry[] computeParameterDefinitionEntries() { AbstractReportDefinition parent = getReport(); if ( parent instanceof MasterReport ) { final MasterReport mr = (MasterReport) parent; return mr.getParameterDefinition().getParameterDefinitions(); } return null; } protected LinkedMap computeParameterValueMap( final MasterReport report ) { final LinkedMap retval = new LinkedMap(); retval.put( MasterReport.REPORT_DATE_PROPERTY, new Date() ); final ReportParameterValues reportParameterValues = report.getParameterValues(); final ParameterDefinitionEntry[] columnNames = report.getParameterDefinition().getParameterDefinitions(); for ( int i = 0; i < columnNames.length; i++ ) { final ParameterDefinitionEntry parameter = columnNames[i]; final String columnName = parameter.getName(); if ( columnName == null ) { continue; } retval.put( columnName, reportParameterValues.get( columnName ) ); } return retval; } public String[] getColumnNames() { return getDataSchema().getNames(); } public DataAttributeContext getDataAttributeContext() { return dataAttributeContext; } protected AbstractReportDefinition getReport() { return parent; } protected MasterReport getMasterReportElement() { return masterReportElement; } }