﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-super-随笔分类-jasperReport</title><link>http://www.blogjava.net/super/category/6714.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 21:04:30 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 21:04:30 GMT</pubDate><ttl>60</ttl><item><title>关于jasperReport中明细行补空行的处理方法。</title><link>http://www.blogjava.net/super/archive/2006/01/13/27851.html</link><dc:creator>王卫华</dc:creator><author>王卫华</author><pubDate>Fri, 13 Jan 2006 01:28:00 GMT</pubDate><guid>http://www.blogjava.net/super/archive/2006/01/13/27851.html</guid><wfw:comment>http://www.blogjava.net/super/comments/27851.html</wfw:comment><comments>http://www.blogjava.net/super/archive/2006/01/13/27851.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/super/comments/commentRss/27851.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super/services/trackbacks/27851.html</trackback:ping><description><![CDATA[<P>1.用背景图的方法,网上有很多介绍这种方式的，这里就不说了<BR>2.用自定于数据源的方式(JRBeanCollectionDataSource),这个办法不错，但是每个报表都要定义一个数据源类，我嫌麻烦。<BR>3.只好修改jasper的源代码了,我修改了net.sf.jasperreports.engine.fill.JRFillDataset.java,(1.1.1 版的),改动的很少，如下所示。<BR>&nbsp;&nbsp;&nbsp;覆盖源代码后，重新编译，打包。在报表中只要加入参数PAGE_MIN_LINE(Integer)=你要的行数就可以了<BR><BR>/*<BR>&nbsp;* ============================================================================<BR>&nbsp;* GNU Lesser General Public License<BR>&nbsp;* ============================================================================<BR>&nbsp;*<BR>&nbsp;* JasperReports - Free Java report-generating library.<BR>&nbsp;* Copyright (C) 2001-2005 JasperSoft Corporation <A href="http://www.jaspersoft.com">http://www.jaspersoft.com</A><BR>&nbsp;* <BR>&nbsp;* This library is free software; you can redistribute it and/or<BR>&nbsp;* modify it under the terms of the GNU Lesser General Public<BR>&nbsp;* License as published by the Free Software Foundation; either<BR>&nbsp;* version 2.1 of the License, or (at your option) any later version.<BR>&nbsp;* <BR>&nbsp;* This library is distributed in the hope that it will be useful,<BR>&nbsp;* but WITHOUT ANY WARRANTY; without even the implied warranty of<BR>&nbsp;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbsp; See the GNU<BR>&nbsp;* Lesser General Public License for more details.<BR>&nbsp;* <BR>&nbsp;* You should have received a copy of the GNU Lesser General Public<BR>&nbsp;* License along with this library; if not, write to the Free Software<BR>&nbsp;* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA&nbsp; 02111-1307, USA.<BR>&nbsp;* <BR>&nbsp;* JasperSoft Corporation<BR>&nbsp;* 303 Second Street, Suite 450 North<BR>&nbsp;* San Francisco, CA 94107<BR>&nbsp;* <A href="http://www.jaspersoft.com">http://www.jaspersoft.com</A><BR>&nbsp;*/<BR>package net.sf.jasperreports.engine.fill;</P>
<P>import java.sql.Connection;<BR>import java.sql.PreparedStatement;<BR>import java.sql.ResultSet;<BR>import java.sql.SQLException;<BR>import java.util.ArrayList;<BR>import java.util.HashMap;<BR>import java.util.HashSet;<BR>import java.util.List;<BR>import java.util.Locale;<BR>import java.util.Map;<BR>import java.util.MissingResourceException;<BR>import java.util.ResourceBundle;<BR>import java.util.Set;</P>
<P>import net.sf.jasperreports.engine.JRAbstractScriptlet;<BR>import net.sf.jasperreports.engine.JRDataSource;<BR>import net.sf.jasperreports.engine.JRDataset;<BR>import net.sf.jasperreports.engine.JRDefaultScriptlet;<BR>import net.sf.jasperreports.engine.JRException;<BR>import net.sf.jasperreports.engine.JRExpression;<BR>import net.sf.jasperreports.engine.JRField;<BR>import net.sf.jasperreports.engine.JRGroup;<BR>import net.sf.jasperreports.engine.JRParameter;<BR>import net.sf.jasperreports.engine.JRQuery;<BR>import net.sf.jasperreports.engine.JRResultSetDataSource;<BR>import net.sf.jasperreports.engine.JRRuntimeException;<BR>import net.sf.jasperreports.engine.JRVariable;<BR>import net.sf.jasperreports.engine.JasperReport;<BR>import net.sf.jasperreports.engine.design.JRDefaultCompiler;<BR>import net.sf.jasperreports.engine.design.JRDesignVariable;<BR>import net.sf.jasperreports.engine.util.JRClassLoader;<BR>import net.sf.jasperreports.engine.util.JRQueryExecuter;</P>
<P>import org.apache.commons.logging.Log;<BR>import org.apache.commons.logging.LogFactory;</P>
<P>/**<BR>&nbsp;* @author Lucian Chirita (<A href="mailto:lucianc@users.sourceforge.net">lucianc@users.sourceforge.net</A>)<BR>&nbsp;* @version $Id: JRFillDataset.java,v 1.8 2005/11/28 10:23:24 teodord Exp $<BR>&nbsp;*/<BR>public class JRFillDataset implements JRDataset<BR>{<BR>&nbsp;private static final Log log = LogFactory.getLog(JRBaseFiller.class);<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * The filler that created this object.<BR>&nbsp; */<BR>&nbsp;private final JRBaseFiller filler;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * The template dataset.<BR>&nbsp; */<BR>&nbsp;private final JRDataset parent;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Whether this is the main dataset of the report.<BR>&nbsp; */<BR>&nbsp;private final boolean isMain;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * The dataset query.<BR>&nbsp; */<BR>&nbsp;protected JRQuery query = null;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * The dataset parameter.<BR>&nbsp; */<BR>&nbsp;protected JRFillParameter[] parameters = null;</P>
<P>&nbsp;/**<BR>&nbsp; * The dataset parameters indexed by name.<BR>&nbsp; */<BR>&nbsp;protected Map parametersMap = null;</P>
<P>&nbsp;/**<BR>&nbsp; * The dataset fields.<BR>&nbsp; */<BR>&nbsp;protected JRFillField[] fields = null;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * The dataset fields indexed by name.<BR>&nbsp; */<BR>&nbsp;protected Map fieldsMap = null;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * The dataset variables.<BR>&nbsp; */<BR>&nbsp;protected JRFillVariable[] variables = null;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * The dataset variables indexed by name.<BR>&nbsp; */<BR>&nbsp;protected Map variablesMap = null;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Set of <A href="mailto:{@link">{@link</A> VariableCalculationReq VariableCalculationReq} objects.<BR>&nbsp; */<BR>&nbsp;protected Set variableCalculationReqs;</P>
<P>&nbsp;/**<BR>&nbsp; * The element datasets.<BR>&nbsp; */<BR>&nbsp;protected JRFillElementDataset[] elementDatasets;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Used to save the original element datasets when<BR>&nbsp; * <A href="mailto:{@link">{@link</A> #filterElementDatasets(JRFillElementDataset) filterElementDatasets} is called.<BR>&nbsp; */<BR>&nbsp;protected JRFillElementDataset[] origElementDatasets;</P>
<P>&nbsp;/**<BR>&nbsp; * The dataset groups.<BR>&nbsp; */<BR>&nbsp;protected JRFillGroup[] groups = null;</P>
<P>&nbsp;/**<BR>&nbsp; * The resource bundle base name.<BR>&nbsp; */<BR>&nbsp;protected String resourceBundleBaseName = null;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * The resource missing handle type.<BR>&nbsp; */<BR>&nbsp;protected byte whenResourceMissingType;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * The scriptlet class name.<BR>&nbsp; */<BR>&nbsp;protected String scriptletClassName = null;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * The scriptlet class.<BR>&nbsp; */<BR>&nbsp;protected Class scriptletClass = null;</P>
<P>&nbsp;/**<BR>&nbsp; * The value of the <A href="mailto:{@link">{@link</A> JRParameter#REPORT_MAX_COUNT max count} parameter.<BR>&nbsp; */<BR>&nbsp;protected Integer reportMaxCount = null;</P>
<P>&nbsp;/**<BR>&nbsp; * The data source. <BR>&nbsp; */<BR>&nbsp;protected JRDataSource dataSource = null;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * The <A href="mailto:{@link">{@link</A> Locale Locale} to be used by the dataset.<BR>&nbsp; */<BR>&nbsp;protected Locale locale = null;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * The loaded resource bundle.<BR>&nbsp; */<BR>&nbsp;protected ResourceBundle resourceBundle = null;</P>
<P>&nbsp;/**<BR>&nbsp; * The cursor used when iterating the data source.<BR>&nbsp; */<BR>&nbsp;protected int reportCount = 0;</P>
<P>&nbsp;/**<BR>&nbsp; * The calculator used by the dataset.<BR>&nbsp; */<BR>&nbsp;protected JRCalculator calculator = null;</P>
<P>&nbsp;/**<BR>&nbsp; * The scriptlet used by the dataset.<BR>&nbsp; */<BR>&nbsp;protected JRAbstractScriptlet scriptlet = null;</P>
<P>&nbsp;/**<BR>&nbsp; * The statement used to fire the query.<BR>&nbsp; */<BR>&nbsp;protected PreparedStatement dataSourceStatement;</P>
<P>&nbsp;private ResultSet dataSourceResultSet;</P>
<P>&nbsp;//////////////////////////////////////////add by super.wang<BR>&nbsp;protected int vitalCount = 0;<BR>&nbsp;protected Integer pageMinLine=null;&nbsp;<BR>&nbsp;//////////////////////////////////////////add by super.end&nbsp;</P>
<P>&nbsp;/**<BR>&nbsp; * Creates a fill dataset object.<BR>&nbsp; * @param filler the filelr<BR>&nbsp; * @param dataset the template dataset<BR>&nbsp; * @param factory the fill object factory<BR>&nbsp; */<BR>&nbsp;protected JRFillDataset(JRBaseFiller filler, JRDataset dataset, JRFillObjectFactory factory)<BR>&nbsp;{<BR>&nbsp;&nbsp;factory.put(dataset, this);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;this.filler = filler;<BR>&nbsp;&nbsp;this.parent = dataset;<BR>&nbsp;&nbsp;this.isMain = dataset.isMainDataset();<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;scriptletClassName = dataset.getScriptletClass();<BR>&nbsp;&nbsp;resourceBundleBaseName = dataset.getResourceBundle();<BR>&nbsp;&nbsp;whenResourceMissingType = dataset.getWhenResourceMissingType();<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;query = dataset.getQuery();<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;setParameters(dataset, factory);</P>
<P>&nbsp;&nbsp;setFields(dataset, factory);</P>
<P>&nbsp;&nbsp;setVariables(dataset, factory);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;setGroups(dataset, factory);<BR>&nbsp;}</P>
<P>&nbsp;<BR>&nbsp;private void setParameters(JRDataset dataset, JRFillObjectFactory factory)<BR>&nbsp;{<BR>&nbsp;&nbsp;JRParameter[] jrParameters = dataset.getParameters();<BR>&nbsp;&nbsp;if (jrParameters != null &amp;&amp; jrParameters.length &gt; 0)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;parameters = new JRFillParameter[jrParameters.length];<BR>&nbsp;&nbsp;&nbsp;parametersMap = new HashMap();<BR>&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; parameters.length; i++)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;parameters[i] = factory.getParameter(jrParameters[i]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;parametersMap.put(parameters[i].getName(), parameters[i]);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;}</P>
<P><BR>&nbsp;private void setGroups(JRDataset dataset, JRFillObjectFactory factory)<BR>&nbsp;{<BR>&nbsp;&nbsp;JRGroup[] jrGroups = dataset.getGroups();<BR>&nbsp;&nbsp;if (jrGroups != null &amp;&amp; jrGroups.length &gt; 0)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;groups = new JRFillGroup[jrGroups.length];<BR>&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; groups.length; i++)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;groups[i] = factory.getGroup(jrGroups[i]);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;}</P>
<P><BR>&nbsp;private void setVariables(JRDataset dataset, JRFillObjectFactory factory)<BR>&nbsp;{<BR>&nbsp;&nbsp;JRVariable[] jrVariables = dataset.getVariables();<BR>&nbsp;&nbsp;if (jrVariables != null &amp;&amp; jrVariables.length &gt; 0)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;List variableList = new ArrayList(jrVariables.length * 3);</P>
<P>&nbsp;&nbsp;&nbsp;variablesMap = new HashMap();<BR>&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; jrVariables.length; i++)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;addVariable(jrVariables[i], variableList, factory);<BR>&nbsp;&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;&nbsp;setVariables(variableList);<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;private JRFillVariable addVariable(JRVariable parentVariable, List variableList, JRFillObjectFactory factory)<BR>&nbsp;{<BR>&nbsp;&nbsp;JRFillVariable variable = factory.getVariable(parentVariable);</P>
<P>&nbsp;&nbsp;byte calculation = variable.getCalculation();<BR>&nbsp;&nbsp;switch (calculation)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;case JRVariable.CALCULATION_AVERAGE:<BR>&nbsp;&nbsp;&nbsp;case JRVariable.CALCULATION_VARIANCE:<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;JRVariable countVar = createHelperVariable(parentVariable, "_COUNT", JRVariable.CALCULATION_COUNT);<BR>&nbsp;&nbsp;&nbsp;&nbsp;JRFillVariable fillCountVar = addVariable(countVar, variableList, factory);<BR>&nbsp;&nbsp;&nbsp;&nbsp;variable.setHelperVariable(fillCountVar, JRCalculable.HELPER_COUNT);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;JRVariable sumVar = createHelperVariable(parentVariable, "_SUM", JRVariable.CALCULATION_SUM);<BR>&nbsp;&nbsp;&nbsp;&nbsp;JRFillVariable fillSumVar = addVariable(sumVar, variableList, factory);<BR>&nbsp;&nbsp;&nbsp;&nbsp;variable.setHelperVariable(fillSumVar, JRCalculable.HELPER_SUM);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;case JRVariable.CALCULATION_STANDARD_DEVIATION:<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;JRVariable varianceVar = createHelperVariable(parentVariable, "_VARIANCE", JRVariable.CALCULATION_VARIANCE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;JRFillVariable fillVarianceVar = addVariable(varianceVar, variableList, factory);<BR>&nbsp;&nbsp;&nbsp;&nbsp;variable.setHelperVariable(fillVarianceVar, JRCalculable.HELPER_VARIANCE);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;variableList.add(variable);<BR>&nbsp;&nbsp;return variable;<BR>&nbsp;}</P>
<P>&nbsp;private JRVariable createHelperVariable(JRVariable variable, String nameSuffix, byte calculation)<BR>&nbsp;{<BR>&nbsp;&nbsp;JRDesignVariable helper = new JRDesignVariable();<BR>&nbsp;&nbsp;helper.setName(variable.getName() + nameSuffix);<BR>&nbsp;&nbsp;helper.setValueClassName(variable.getValueClassName());<BR>&nbsp;&nbsp;helper.setIncrementerFactoryClassName(variable.getIncrementerFactoryClassName());<BR>&nbsp;&nbsp;helper.setResetType(variable.getResetType());<BR>&nbsp;&nbsp;helper.setResetGroup(variable.getResetGroup());<BR>&nbsp;&nbsp;helper.setIncrementType(variable.getIncrementType());<BR>&nbsp;&nbsp;helper.setIncrementGroup(variable.getIncrementGroup());<BR>&nbsp;&nbsp;helper.setCalculation(calculation);<BR>&nbsp;&nbsp;helper.setSystemDefined(true);<BR>&nbsp;&nbsp;helper.setExpression(variable.getExpression());</P>
<P>&nbsp;&nbsp;return helper;<BR>&nbsp;}</P>
<P><BR>&nbsp;private void setVariables(List variableList)<BR>&nbsp;{<BR>&nbsp;&nbsp;variables = new JRFillVariable[variableList.size()];<BR>&nbsp;&nbsp;variables = (JRFillVariable[]) variableList.toArray(variables);</P>
<P>&nbsp;&nbsp;for (int i = 0; i &lt; variables.length; i++)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;variablesMap.put(variables[i].getName(), variables[i]);<BR>&nbsp;&nbsp;}<BR>&nbsp;}</P>
<P><BR>&nbsp;private void setFields(JRDataset dataset, JRFillObjectFactory factory)<BR>&nbsp;{<BR>&nbsp;&nbsp;JRField[] jrFields = dataset.getFields();<BR>&nbsp;&nbsp;if (jrFields != null &amp;&amp; jrFields.length &gt; 0)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;fields = new JRFillField[jrFields.length];<BR>&nbsp;&nbsp;&nbsp;fieldsMap = new HashMap();<BR>&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; fields.length; i++)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;fields[i] = factory.getField(jrFields[i]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;fieldsMap.put(fields[i].getName(), fields[i]);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;}</P>
<P><BR>&nbsp;/**<BR>&nbsp; * Creates the calculator<BR>&nbsp; * @param jasperReport the report<BR>&nbsp; * @throws JRException<BR>&nbsp; */<BR>&nbsp;protected void createCalculator(JasperReport jasperReport) throws JRException<BR>&nbsp;{<BR>&nbsp;&nbsp;setCalculator(createCalculator(jasperReport, this));<BR>&nbsp;}</P>
<P>&nbsp;protected void setCalculator(JRCalculator calculator)<BR>&nbsp;{<BR>&nbsp;&nbsp;this.calculator = calculator;<BR>&nbsp;}</P>
<P>&nbsp;protected static JRCalculator createCalculator(JasperReport jasperReport, JRDataset dataset) throws JRException<BR>&nbsp;{<BR>&nbsp;&nbsp;JREvaluator evaluator = JRDefaultCompiler.getInstance().loadEvaluator(jasperReport, dataset);<BR>&nbsp;&nbsp;return new JRCalculator(evaluator);<BR>&nbsp;}</P>
<P><BR>&nbsp;/**<BR>&nbsp; * Initializes the calculator.<BR>&nbsp; * <BR>&nbsp; * @throws JRException<BR>&nbsp; */<BR>&nbsp;protected void initCalculator() throws JRException<BR>&nbsp;{<BR>&nbsp;&nbsp;calculator.init(this);<BR>&nbsp;}</P>
<P><BR>&nbsp;/**<BR>&nbsp; * Inherits properties from the report.<BR>&nbsp; */<BR>&nbsp;protected void inheritFromMain()<BR>&nbsp;{<BR>&nbsp;&nbsp;if (resourceBundleBaseName == null &amp;&amp; !isMain)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;resourceBundleBaseName = filler.mainDataset.resourceBundleBaseName;<BR>&nbsp;&nbsp;&nbsp;whenResourceMissingType = filler.mainDataset.whenResourceMissingType;<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Creates and initializes the scriptlet.<BR>&nbsp; * <BR>&nbsp; * @return the scriptlet<BR>&nbsp; * @throws JRException<BR>&nbsp; */<BR>&nbsp;protected JRAbstractScriptlet initScriptlet() throws JRException<BR>&nbsp;{<BR>&nbsp;&nbsp;scriptlet = createScriptlet();</P>
<P>&nbsp;&nbsp;scriptlet.setData(parametersMap, fieldsMap, variablesMap, groups);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;return scriptlet;<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Creates the scriptlet.<BR>&nbsp; * <BR>&nbsp; * @return the scriptlet<BR>&nbsp; * @throws JRException<BR>&nbsp; */<BR>&nbsp;protected JRAbstractScriptlet createScriptlet() throws JRException<BR>&nbsp;{<BR>&nbsp;&nbsp;JRAbstractScriptlet tmpScriptlet = null;</P>
<P>&nbsp;&nbsp;if (scriptletClassName != null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if (scriptletClass == null)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;try<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scriptletClass = JRClassLoader.loadClassForName(scriptletClassName);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;catch (ClassNotFoundException e)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new JRException("Error loading scriptlet class : " + scriptletClassName, e);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;&nbsp;try<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;tmpScriptlet = (JRAbstractScriptlet) scriptletClass.newInstance();<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;catch (Exception e)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;throw new JRException("Error creating scriptlet class instance : " + scriptletClassName, e);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;if (tmpScriptlet == null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;tmpScriptlet = new JRDefaultScriptlet();<BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;return tmpScriptlet;<BR>&nbsp;}</P>
<P><BR>&nbsp;/**<BR>&nbsp; * Initializes the element datasets.<BR>&nbsp; * <BR>&nbsp; * @param factory the fill object factory used by the filler<BR>&nbsp; */<BR>&nbsp;protected void initElementDatasets(JRFillObjectFactory factory)<BR>&nbsp;{<BR>&nbsp;&nbsp;elementDatasets = factory.getElementDatasets(this);<BR>&nbsp;}</P>
<P><BR>&nbsp;/**<BR>&nbsp; * Filters the element datasets, leaving only one.<BR>&nbsp; * &lt;p&gt;<BR>&nbsp; * This method is used when a dataset is instantiated by a chart or crosstab.<BR>&nbsp; * <BR>&nbsp; * @param elementDataset the element dataset that should remain<BR>&nbsp; */<BR>&nbsp;protected void filterElementDatasets(JRFillElementDataset elementDataset)<BR>&nbsp;{<BR>&nbsp;&nbsp;origElementDatasets = elementDatasets;<BR>&nbsp;&nbsp;elementDatasets = new JRFillElementDataset[]{elementDataset};<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Restores the original element datasets.<BR>&nbsp; * &lt;p&gt;<BR>&nbsp; * This method should be called after <A href="mailto:{@link">{@link</A> #filterElementDatasets(JRFillElementDataset) filterElementDatasets}.<BR>&nbsp; */<BR>&nbsp;protected void restoreElementDatasets()<BR>&nbsp;{<BR>&nbsp;&nbsp;if (origElementDatasets != null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;elementDatasets = origElementDatasets;<BR>&nbsp;&nbsp;&nbsp;origElementDatasets = null;<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>&nbsp;</P>
<P>&nbsp;/**<BR>&nbsp; * Loads the resource bundle corresponding to the resource bundle base name and locale.<BR>&nbsp; */<BR>&nbsp;protected ResourceBundle loadResourceBundle()<BR>&nbsp;{<BR>&nbsp;&nbsp;ResourceBundle tmpResourceBundle = null;</P>
<P>&nbsp;&nbsp;if (resourceBundleBaseName != null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<BR>&nbsp;&nbsp;&nbsp;if (classLoader != null)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;try<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpResourceBundle = ResourceBundle.getBundle(resourceBundleBaseName, locale, classLoader);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;catch (MissingResourceException e)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// if (log.isWarnEnabled())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// log.warn("Failure using<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Thread.currentThread().getContextClassLoader() in<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// JRClassLoader class. Using<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// JRClassLoader.class.getClassLoader() instead.");<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;&nbsp;if (tmpResourceBundle == null)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;classLoader = JRClassLoader.class.getClassLoader();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;if (classLoader == null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpResourceBundle = ResourceBundle.getBundle(resourceBundleBaseName, locale);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpResourceBundle = ResourceBundle.getBundle(resourceBundleBaseName, locale, classLoader);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;return tmpResourceBundle;<BR>&nbsp;}</P>
<P><BR>&nbsp;/**<BR>&nbsp; * Reads built-in parameter values from the value map.<BR>&nbsp; * <BR>&nbsp; * @param parameterValues the parameter values<BR>&nbsp; * @throws JRException<BR>&nbsp; */<BR>&nbsp;protected void setParameters(Map parameterValues) throws JRException<BR>&nbsp;{<BR>&nbsp;&nbsp;reportMaxCount = (Integer) parameterValues.get(JRParameter.REPORT_MAX_COUNT);</P>
<P>&nbsp;&nbsp;locale = (Locale) parameterValues.get(JRParameter.REPORT_LOCALE);<BR>&nbsp;&nbsp;if (locale == null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;locale = Locale.getDefault();<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;if (locale == null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;parameterValues.remove(JRParameter.REPORT_LOCALE);//FIXME NOW why remove? check all<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;parameterValues.put(JRParameter.REPORT_LOCALE, locale);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;setParameter(JRParameter.REPORT_LOCALE, locale);&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;resourceBundle = (ResourceBundle) parameterValues.get(JRParameter.REPORT_RESOURCE_BUNDLE);<BR>&nbsp;&nbsp;if (resourceBundle == null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;resourceBundle = loadResourceBundle();<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;if (resourceBundle == null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;parameterValues.remove(JRParameter.REPORT_RESOURCE_BUNDLE);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;parameterValues.put(JRParameter.REPORT_RESOURCE_BUNDLE, resourceBundle);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;setParameter(JRParameter.REPORT_RESOURCE_BUNDLE, resourceBundle);<BR>&nbsp;&nbsp;</P>
<P>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;pageMinLine = (Integer)getParameterValue("PAGE_MIN_LINE");<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch (Exception e) {}&nbsp;&nbsp;<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Sets the parameter values from the values map.<BR>&nbsp; * <BR>&nbsp; * @param parameterValues the values map<BR>&nbsp; * @throws JRException<BR>&nbsp; */<BR>&nbsp;protected void setParameterValues(Map parameterValues) throws JRException<BR>&nbsp;{<BR>&nbsp;&nbsp;if (parameters != null &amp;&amp; parameters.length &gt; 0)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; parameters.length; i++)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (parameterValues.containsKey(parameters[i].getName()))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setParameter(parameters[i], parameterValues.get(parameters[i].getName()));<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;else if (!parameters[i].isSystemDefined())<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object value = calculator.evaluate(parameters[i].getDefaultValueExpression(), JRExpression.EVALUATION_DEFAULT);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (value != null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameterValues.put(parameters[i].getName(), value);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setParameter(parameters[i], value);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;}</P>
<P>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Creates the data source from a connection.<BR>&nbsp; * <BR>&nbsp; * @param parameterValues the parameterValues<BR>&nbsp; * @param conn the connection<BR>&nbsp; * @return the data source to be used<BR>&nbsp; * @throws JRException<BR>&nbsp; */<BR>&nbsp;protected JRDataSource createDataSource(Map parameterValues, Connection conn) throws JRException<BR>&nbsp;{<BR>&nbsp;&nbsp;if (conn == null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;conn = (Connection) parameterValues.get(JRParameter.REPORT_CONNECTION);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;if (conn == null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;parameterValues.remove(JRParameter.REPORT_CONNECTION);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;parameterValues.put(JRParameter.REPORT_CONNECTION, conn);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;setParameter(JRParameter.REPORT_CONNECTION, conn);</P>
<P>&nbsp;&nbsp;if (conn == null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if (log.isWarnEnabled())<BR>&nbsp;&nbsp;&nbsp;&nbsp;log.warn("The supplied java.sql.Connection object is null.");<BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;PreparedStatement pstmt = null;</P>
<P>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;JRDataSource ds = null;</P>
<P>&nbsp;&nbsp;&nbsp;pstmt = JRQueryExecuter.getStatement(query, parametersMap, parameterValues, conn);</P>
<P>&nbsp;&nbsp;&nbsp;if (pstmt != null)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (reportMaxCount != null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pstmt.setMaxRows(reportMaxCount.intValue());<BR>&nbsp;&nbsp;&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;dataSourceStatement = pstmt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;filler.fillContext.setRunningStatement(dataSourceStatement);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;dataSourceResultSet = pstmt.executeQuery();<BR>&nbsp;&nbsp;&nbsp;&nbsp;ds = new JRResultSetDataSource(dataSourceResultSet);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;return ds;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;catch (SQLException e)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;throw new JRException("Error executing SQL statement for report : " + filler.name, e);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;finally<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;filler.fillContext.clearRunningStatement();<BR>&nbsp;&nbsp;}<BR>&nbsp;}</P>
<P><BR>&nbsp;/**<BR>&nbsp; * Sets the data source to be used.<BR>&nbsp; * <BR>&nbsp; * @param parameterValues the parameter values<BR>&nbsp; * @param ds the data source<BR>&nbsp; * @throws JRException<BR>&nbsp; */<BR>&nbsp;protected void setDatasource(Map parameterValues, JRDataSource ds) throws JRException<BR>&nbsp;{<BR>&nbsp;&nbsp;dataSource = ds;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;if (dataSource == null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;dataSource = (JRDataSource) parameterValues.get(JRParameter.REPORT_DATA_SOURCE);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;if (dataSource == null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;parameterValues.remove(JRParameter.REPORT_DATA_SOURCE);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;parameterValues.put(JRParameter.REPORT_DATA_SOURCE, dataSource);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;setParameter(JRParameter.REPORT_DATA_SOURCE, dataSource);</P>
<P>&nbsp;&nbsp;/*&nbsp;&nbsp; */<BR>&nbsp;&nbsp;parameterValues.put(JRParameter.REPORT_SCRIPTLET, scriptlet);<BR>&nbsp;&nbsp;setParameter(JRParameter.REPORT_SCRIPTLET, scriptlet);</P>
<P>&nbsp;&nbsp;/*&nbsp;&nbsp; */<BR>&nbsp;&nbsp;parameterValues.put(JRParameter.REPORT_PARAMETERS_MAP, parameterValues);<BR>&nbsp;&nbsp;setParameter(JRParameter.REPORT_PARAMETERS_MAP, parameterValues);<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Closes the statement used to fire the query.<BR>&nbsp; */<BR>&nbsp;protected void closeStatement()<BR>&nbsp;{<BR>&nbsp;&nbsp;if (dataSourceResultSet != null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;try<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;dataSourceResultSet.close();<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;catch (SQLException e)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;log.error("Error while closing result set.", e);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;finally<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;dataSourceResultSet = null;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;if (dataSourceStatement != null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;try<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;dataSourceStatement.close();<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;catch (SQLException e)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;log.error("Error while closing statement.", e);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;finally<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;dataSourceStatement = null;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;}</P>
<P>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Starts the iteration on the data source.<BR>&nbsp; */<BR>&nbsp;protected void start()<BR>&nbsp;{<BR>&nbsp;&nbsp;reportCount = 0;<BR>&nbsp;&nbsp;vitalCount=0;<BR>&nbsp;}</P>
<P>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Moves to the next record in the data source.<BR>&nbsp; * <BR>&nbsp; * @return &lt;code&gt;true&lt;/code&gt; if the data source was not exhausted<BR>&nbsp; * @throws JRException<BR>&nbsp; */<BR>&nbsp;protected boolean next() throws JRException<BR>&nbsp;{<BR>&nbsp;&nbsp;boolean hasNext = false;</P>
<P>&nbsp;&nbsp;if (dataSource != null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if (vitalCount==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;hasNext = (reportMaxCount == null || reportMaxCount.intValue() &gt; reportCount) &amp;&amp; dataSource.next();<BR>&nbsp;&nbsp;&nbsp;if (hasNext)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;reportCount++;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (fields != null &amp;&amp; fields.length &gt; 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JRFillField field = null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; fields.length; i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field = fields[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field.setOldValue(field.getValue());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field.setValue(dataSource.getFieldValue(field));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (variables != null &amp;&amp; variables.length &gt; 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JRFillVariable variable = null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; variables.length; i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;variable = variables[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;variable.setOldValue(variable.getValue());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;log.error("reportCount:"+reportCount);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;if (pageMinLine!=null &amp;&amp; pageMinLine.intValue()&gt;0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (vitalCount==0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int modNum = reportCount%pageMinLine.intValue();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (modNum!=0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vitalCount=pageMinLine.intValue()-modNum;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vitalCount=-1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vitalCount--;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (vitalCount!=0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (fields != null &amp;&amp; fields.length &gt; 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JRFillField field = null;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; fields.length; i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field = fields[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field.setOldValue(field.getValue());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;field.setValue(null);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;if (vitalCount&gt;0)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;log.error("---blank line--");<BR>&nbsp;&nbsp;&nbsp;return true;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;return hasNext;<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Sets the value of a parameter.<BR>&nbsp; * <BR>&nbsp; * @param parameterName the parameter name<BR>&nbsp; * @param value the value<BR>&nbsp; * @throws JRException<BR>&nbsp; */<BR>&nbsp;protected void setParameter(String parameterName, Object value) throws JRException<BR>&nbsp;{<BR>&nbsp;&nbsp;JRFillParameter parameter = (JRFillParameter) parametersMap.get(parameterName);<BR>&nbsp;&nbsp;if (parameter != null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;setParameter(parameter, value);<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Sets the value of the parameter.<BR>&nbsp; * <BR>&nbsp; * @param parameter the parameter<BR>&nbsp; * @param value the value<BR>&nbsp; * @throws JRException<BR>&nbsp; */<BR>&nbsp;protected void setParameter(JRFillParameter parameter, Object value) throws JRException<BR>&nbsp;{<BR>&nbsp;&nbsp;if (value != null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if (parameter.getValueClass().isInstance(value))<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;parameter.setValue(value);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;throw new JRException(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"Incompatible " <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ value.getClass().getName() <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ " value assigned to parameter " <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ parameter.getName() <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ " in the " + getName() + " dataset."<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;parameter.setValue(value);<BR>&nbsp;&nbsp;}<BR>&nbsp;}</P>
<P>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Returns the value of a variable.<BR>&nbsp; * <BR>&nbsp; * @param variableName the variable name<BR>&nbsp; * @return the variable value<BR>&nbsp; */<BR>&nbsp;public Object getVariableValue(String variableName)<BR>&nbsp;{<BR>&nbsp;&nbsp;JRFillVariable var = (JRFillVariable) variablesMap.get(variableName);<BR>&nbsp;&nbsp;if (var == null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;throw new JRRuntimeException("No such variable " + variableName);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;return var.getValue();<BR>&nbsp;}</P>
<P>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Returns the value of a parameter.<BR>&nbsp; * <BR>&nbsp; * @param parameterName the parameter name<BR>&nbsp; * @return the parameter value<BR>&nbsp; */<BR>&nbsp;public Object getParameterValue(String parameterName)<BR>&nbsp;{<BR>&nbsp;&nbsp;JRFillParameter param = (JRFillParameter) parametersMap.get(parameterName);<BR>&nbsp;&nbsp;if (param == null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;throw new JRRuntimeException("No such parameter " + parameterName);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;return param.getValue();<BR>&nbsp;}</P>
<P>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Returns the value of a field.<BR>&nbsp; * <BR>&nbsp; * @param fieldName the field name<BR>&nbsp; * @return the field value<BR>&nbsp; */<BR>&nbsp;public Object getFieldValue(String fieldName)<BR>&nbsp;{<BR>&nbsp;&nbsp;JRFillField var = (JRFillField) fieldsMap.get(fieldName);<BR>&nbsp;&nbsp;if (var == null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;throw new JRRuntimeException("No such field " + fieldName);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;return var.getValue();<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Class used to hold expression calculation&nbsp; requirements.<BR>&nbsp; */<BR>&nbsp;protected static class VariableCalculationReq<BR>&nbsp;{<BR>&nbsp;&nbsp;String variableName;</P>
<P>&nbsp;&nbsp;byte calculation;</P>
<P>&nbsp;&nbsp;VariableCalculationReq(String variableName, byte calculation)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;this.variableName = variableName;<BR>&nbsp;&nbsp;&nbsp;this.calculation = calculation;<BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;public boolean equals(Object o)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if (o == null || !(o instanceof VariableCalculationReq))<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;return false;<BR>&nbsp;&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;&nbsp;VariableCalculationReq r = (VariableCalculationReq) o;</P>
<P>&nbsp;&nbsp;&nbsp;return variableName.equals(r.variableName) &amp;&amp; calculation == r.calculation;<BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;public int hashCode()<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;return 31 * calculation + variableName.hashCode();<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Adds a variable calculation requirement.<BR>&nbsp; * <BR>&nbsp; * @param variableName the variable name<BR>&nbsp; * @param calculation the required calculation<BR>&nbsp; */<BR>&nbsp;protected void addVariableCalculationReq(String variableName, byte calculation)<BR>&nbsp;{<BR>&nbsp;&nbsp;if (variableCalculationReqs == null)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;variableCalculationReqs = new HashSet();<BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;variableCalculationReqs.add(new VariableCalculationReq(variableName, calculation));<BR>&nbsp;}</P>
<P>&nbsp;<BR>&nbsp;/**<BR>&nbsp; * Checks if there are variable calculation requirements and creates the required variables.<BR>&nbsp; * <BR>&nbsp; * @param factory the fill object factory<BR>&nbsp; */<BR>&nbsp;protected void checkVariableCalculationReqs(JRFillObjectFactory factory)<BR>&nbsp;{<BR>&nbsp;&nbsp;if (variableCalculationReqs != null &amp;&amp; !variableCalculationReqs.isEmpty())<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;List variableList = new ArrayList(variables.length * 2);</P>
<P>&nbsp;&nbsp;&nbsp;for (int i = 0; i &lt; variables.length; i++)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;JRFillVariable variable = variables[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;checkVariableCalculationReq(variable, variableList, factory);<BR>&nbsp;&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;&nbsp;setVariables(variableList);<BR>&nbsp;&nbsp;}<BR>&nbsp;}</P>
<P>&nbsp;<BR>&nbsp;private void checkVariableCalculationReq(JRFillVariable variable, List variableList, JRFillObjectFactory factory)<BR>&nbsp;{<BR>&nbsp;&nbsp;if (hasVariableCalculationReq(variable, JRVariable.CALCULATION_AVERAGE) || hasVariableCalculationReq(variable, JRVariable.CALCULATION_VARIANCE))<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if (variable.getHelperVariable(JRCalculable.HELPER_COUNT) == null)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;JRVariable countVar = createHelperVariable(variable, "_COUNT", JRVariable.CALCULATION_COUNT);<BR>&nbsp;&nbsp;&nbsp;&nbsp;JRFillVariable fillCountVar = factory.getVariable(countVar);<BR>&nbsp;&nbsp;&nbsp;&nbsp;checkVariableCalculationReq(fillCountVar, variableList, factory);<BR>&nbsp;&nbsp;&nbsp;&nbsp;variable.setHelperVariable(fillCountVar, JRCalculable.HELPER_COUNT);<BR>&nbsp;&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;&nbsp;if (variable.getHelperVariable(JRCalculable.HELPER_SUM) == null)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;JRVariable sumVar = createHelperVariable(variable, "_SUM", JRVariable.CALCULATION_SUM);<BR>&nbsp;&nbsp;&nbsp;&nbsp;JRFillVariable fillSumVar = factory.getVariable(sumVar);<BR>&nbsp;&nbsp;&nbsp;&nbsp;checkVariableCalculationReq(fillSumVar, variableList, factory);<BR>&nbsp;&nbsp;&nbsp;&nbsp;variable.setHelperVariable(fillSumVar, JRCalculable.HELPER_SUM);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;if (hasVariableCalculationReq(variable, JRVariable.CALCULATION_STANDARD_DEVIATION))<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if (variable.getHelperVariable(JRCalculable.HELPER_VARIANCE) == null)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;JRVariable varianceVar = createHelperVariable(variable, "_VARIANCE", JRVariable.CALCULATION_VARIANCE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;JRFillVariable fillVarianceVar = factory.getVariable(varianceVar);<BR>&nbsp;&nbsp;&nbsp;&nbsp;checkVariableCalculationReq(fillVarianceVar, variableList, factory);<BR>&nbsp;&nbsp;&nbsp;&nbsp;variable.setHelperVariable(fillVarianceVar, JRCalculable.HELPER_VARIANCE);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;variableList.add(variable);<BR>&nbsp;}</P>
<P>&nbsp;<BR>&nbsp;private boolean hasVariableCalculationReq(JRVariable var, byte calculation)<BR>&nbsp;{<BR>&nbsp;&nbsp;return variableCalculationReqs.contains(new VariableCalculationReq(var.getName(), calculation));<BR>&nbsp;}</P>
<P><BR>&nbsp;public String getName()<BR>&nbsp;{<BR>&nbsp;&nbsp;return parent.getName();<BR>&nbsp;}</P>
<P>&nbsp;public String getScriptletClass()<BR>&nbsp;{<BR>&nbsp;&nbsp;return parent.getScriptletClass();<BR>&nbsp;}</P>
<P>&nbsp;public JRParameter[] getParameters()<BR>&nbsp;{<BR>&nbsp;&nbsp;return parameters;<BR>&nbsp;}</P>
<P>&nbsp;public JRQuery getQuery()<BR>&nbsp;{<BR>&nbsp;&nbsp;return query;<BR>&nbsp;}</P>
<P>&nbsp;public JRField[] getFields()<BR>&nbsp;{<BR>&nbsp;&nbsp;return fields;<BR>&nbsp;}</P>
<P>&nbsp;public JRVariable[] getVariables()<BR>&nbsp;{<BR>&nbsp;&nbsp;return variables;<BR>&nbsp;}</P>
<P>&nbsp;public JRGroup[] getGroups()<BR>&nbsp;{<BR>&nbsp;&nbsp;return groups;<BR>&nbsp;}</P>
<P>&nbsp;public boolean isMainDataset()<BR>&nbsp;{<BR>&nbsp;&nbsp;return isMain;<BR>&nbsp;}</P>
<P>&nbsp;public String getResourceBundle()<BR>&nbsp;{<BR>&nbsp;&nbsp;return resourceBundleBaseName;<BR>&nbsp;}</P>
<P><BR>&nbsp;public byte getWhenResourceMissingType()<BR>&nbsp;{<BR>&nbsp;&nbsp;return whenResourceMissingType;<BR>&nbsp;}</P>
<P><BR>&nbsp;public void setWhenResourceMissingType(byte whenResourceMissingType)<BR>&nbsp;{<BR>&nbsp;&nbsp;this.whenResourceMissingType = whenResourceMissingType;<BR>&nbsp;}<BR>}<BR><BR><BR><BR>&nbsp;&nbsp;&nbsp;</P><img src ="http://www.blogjava.net/super/aggbug/27851.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super/" target="_blank">王卫华</a> 2006-01-13 09:28 <a href="http://www.blogjava.net/super/archive/2006/01/13/27851.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable</title><link>http://www.blogjava.net/super/archive/2006/01/05/26648.html</link><dc:creator>王卫华</dc:creator><author>王卫华</author><pubDate>Thu, 05 Jan 2006 01:28:00 GMT</pubDate><guid>http://www.blogjava.net/super/archive/2006/01/05/26648.html</guid><wfw:comment>http://www.blogjava.net/super/comments/26648.html</wfw:comment><comments>http://www.blogjava.net/super/archive/2006/01/05/26648.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/super/comments/commentRss/26648.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/super/services/trackbacks/26648.html</trackback:ping><description><![CDATA[jasper安装在windows环境运行正常，但是在linux环境中出现错误:java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.<BR>解决方式:<BR>在JVM中加入-Djava.awt.headless=true<BR>对于tomcat ,可以修改catalina.sh,加入:CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=true "<img src ="http://www.blogjava.net/super/aggbug/26648.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/super/" target="_blank">王卫华</a> 2006-01-05 09:28 <a href="http://www.blogjava.net/super/archive/2006/01/05/26648.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>