001    /**
002     * ========================================
003     * JFreeReport : a free Java report library
004     * ========================================
005     *
006     * Project Info:  http://reporting.pentaho.org/
007     *
008     * (C) Copyright 2000-2007, by Object Refinery Limited, Pentaho Corporation and Contributors.
009     *
010     * This library is free software; you can redistribute it and/or modify it under the terms
011     * of the GNU Lesser General Public License as published by the Free Software Foundation;
012     * either version 2.1 of the License, or (at your option) any later version.
013     *
014     * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015     * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016     * See the GNU Lesser General Public License for more details.
017     *
018     * You should have received a copy of the GNU Lesser General Public License along with this
019     * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020     * Boston, MA 02111-1307, USA.
021     *
022     * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023     * in the United States and other countries.]
024     *
025     * ------------
026     * $Id: ImportedVariablesDataRow.java 3525 2007-10-16 11:43:48Z tmorgner $
027     * ------------
028     * (C) Copyright 2000-2005, by Object Refinery Limited.
029     * (C) Copyright 2005-2007, by Pentaho Corporation.
030     */
031    package org.jfree.report.data;
032    
033    import org.jfree.report.DataRow;
034    import org.jfree.report.DataSourceException;
035    import org.jfree.report.flow.ParameterMapping;
036    
037    /**
038     * Creation-Date: 06.03.2006, 18:15:06
039     *
040     * @author Thomas Morgner
041     */
042    public class ImportedVariablesDataRow extends StaticDataRow
043    {
044      private String[] outerNames;
045      private String[] innerNames;
046    
047      public ImportedVariablesDataRow(final GlobalMasterRow innerRow)
048              throws DataSourceException
049      {
050        final DataRow globalView = innerRow.getGlobalView();
051        final int cols = globalView.getColumnCount();
052        this.outerNames = new String[cols];
053        this.innerNames = outerNames;
054        final Object[] values = new Object[outerNames.length];
055        for (int i = 0; i < outerNames.length; i++)
056        {
057          outerNames[i] = globalView.getColumnName(i);
058          values[i] = globalView.get(i);
059        }
060        setData(outerNames, values);
061      }
062    
063      /**
064       * Maps the inner-row into the outer data row. The parameter mapping's name
065       * represents the *outer* name and the innernames.
066       *
067       * @param innerRow
068       * @param parameterMappings
069       * @throws DataSourceException
070       */
071      public ImportedVariablesDataRow(final GlobalMasterRow innerRow,
072                                      final ParameterMapping[] parameterMappings)
073              throws DataSourceException
074      {
075        this.outerNames = new String[parameterMappings.length];
076        this.innerNames = new String[parameterMappings.length];
077        final Object[] values = new Object[parameterMappings.length];
078        final DataRow globalView = innerRow.getGlobalView();
079        for (int i = 0; i < parameterMappings.length; i++)
080        {
081          final ParameterMapping mapping = parameterMappings[i];
082          final String name = mapping.getAlias();
083          values[i] = globalView.get(name);
084          innerNames[i] = name;
085          outerNames[i] = mapping.getName();
086        }
087        setData(outerNames, values);
088      }
089    
090      protected ImportedVariablesDataRow(final ImportedVariablesDataRow dataRow)
091      {
092        super(dataRow);
093        outerNames = dataRow.outerNames;
094        innerNames = dataRow.innerNames;
095      }
096    
097      public ImportedVariablesDataRow advance (final GlobalMasterRow innerRow)
098              throws DataSourceException
099      {
100        final DataRow globalView = innerRow.getGlobalView();
101        final Object[] values = new Object[outerNames.length];
102        for (int i = 0; i < innerNames.length; i++)
103        {
104          final String name = innerNames[i];
105          values[i] = globalView.get(name);
106        }
107        final ImportedVariablesDataRow idr = new ImportedVariablesDataRow(this);
108        idr.setData(outerNames, values);
109        return idr;
110      }
111    }