net.sf.jasperreports.customvisualization.xml.CVDigester Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jasperreports-custom-visualization Show documentation
Show all versions of jasperreports-custom-visualization Show documentation
JasperReports Custom Visualization Component
/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2019 TIBCO Software Inc. All rights reserved.
* http://www.jaspersoft.com
*
* Unless you have purchased a commercial license agreement from Jaspersoft,
* the following license terms apply:
*
* This program is part of JasperReports.
*
* JasperReports is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JasperReports 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.
*
* You should have received a copy of the GNU Lesser General Public License
* along with JasperReports. If not, see .
*/
package net.sf.jasperreports.customvisualization.xml;
import org.apache.commons.digester.Digester;
import net.sf.jasperreports.components.items.Item;
import net.sf.jasperreports.components.items.ItemProperty;
import net.sf.jasperreports.components.items.StandardItem;
import net.sf.jasperreports.components.items.StandardItemData;
import net.sf.jasperreports.engine.JRElementDataset;
import net.sf.jasperreports.engine.JRExpression;
import net.sf.jasperreports.engine.component.XmlDigesterConfigurer;
import net.sf.jasperreports.engine.type.EvaluationTimeEnum;
import net.sf.jasperreports.engine.type.OnErrorTypeEnum;
import net.sf.jasperreports.engine.xml.JRExpressionFactory;
import net.sf.jasperreports.engine.xml.JRXmlConstants;
import net.sf.jasperreports.engine.xml.JRXmlWriter;
import net.sf.jasperreports.engine.xml.XmlConstantPropertyRule;
public class CVDigester implements XmlDigesterConfigurer
{
@Override
public void configureDigester(Digester digester)
{
addRules(digester);
}
public static void addRules(Digester digester)
{
// String jrNamespace = JRXmlConstants.JASPERREPORTS_NAMESPACE;
String namespace = digester.getRuleNamespaceURI();
String mainComponentPattern = "*/componentElement/customvisualization";
digester.addFactoryCreate(mainComponentPattern, CVXmlFactory.class.getName());
addEvaluationPropertiesRules(digester, mainComponentPattern);
addItemPropertieyRules(digester, mainComponentPattern + "/" + CVXmlFactory.ELEMENT_itemProperty, namespace);
addCVItemDataRules(digester, mainComponentPattern + "/" + CVXmlFactory.ELEMENT_cvData, namespace);
}
protected static void addExpressionRules(
Digester digester,
String expressionPattern,
String setterMethod,
boolean jrNamespace
)
{
String originalNamespace = digester.getRuleNamespaceURI();
if (jrNamespace)
{
digester.setRuleNamespaceURI(JRXmlWriter.JASPERREPORTS_NAMESPACE.getNamespaceURI());
}
digester.addFactoryCreate(expressionPattern, JRExpressionFactory.class);
digester.addCallMethod(expressionPattern, "setText", 0);
digester.addSetNext(expressionPattern, setterMethod, JRExpression.class.getName());
if (jrNamespace)
{
digester.setRuleNamespaceURI(originalNamespace);
}
}
protected static void addEvaluationPropertiesRules(Digester digester, String pattern)
{
digester.addSetProperties(
pattern,
// properties to be ignored by this rule
new String[] { JRXmlConstants.ATTRIBUTE_evaluationTime, CVXmlFactory.ATTRIBUTE_onErrorType },
new String[0]
);
digester.addRule(pattern, new XmlConstantPropertyRule(JRXmlConstants.ATTRIBUTE_evaluationTime,
"evaluationTimeValue", EvaluationTimeEnum.values()));
digester.addRule(pattern,
new XmlConstantPropertyRule(CVXmlFactory.ATTRIBUTE_onErrorType, OnErrorTypeEnum.values()));
}
protected static void addItemPropertieyRules(Digester digester, String itemPropertyPattern, String namespace)
{
digester.addFactoryCreate(itemPropertyPattern, CVItemPropertyXmlFactory.class);
digester.addSetNext(itemPropertyPattern, "addItemProperty", ItemProperty.class.getName());
addExpressionRules(digester, itemPropertyPattern + "/" + JRXmlConstants.ELEMENT_valueExpression,
"setValueExpression", true);
}
protected static void addCVItemDataRules(Digester digester, String pattern, String namespace)
{
digester.addObjectCreate(pattern, StandardItemData.class);
digester.addSetNext(pattern, "addItemData", StandardItemData.class.getName());
String itemPattern = pattern + "/item";
digester.addObjectCreate(itemPattern, StandardItem.class);
digester.addSetNext(itemPattern, "addItem", Item.class.getName());
addItemPropertieyRules(digester, itemPattern + "/itemProperty", namespace);
digester.setRuleNamespaceURI(JRXmlWriter.JASPERREPORTS_NAMESPACE.getNamespaceURI());
digester.addFactoryCreate(pattern + "/dataset", CVItemDatasetFactory.class.getName());
digester.addSetNext(pattern + "/dataset", "setDataset", JRElementDataset.class.getName());
digester.setRuleNamespaceURI(namespace);
}
/*
*
* protected static void addHyperlinkRules(Digester digester, String
* pattern) { addHyperlinkRules(digester, pattern, "setHyperlink"); }
*
* protected static void addHyperlinkRules(Digester digester, String
* pattern, String methodName) { digester.addFactoryCreate(pattern,
* JRHyperlinkFactory.class); digester.addSetNext(pattern, methodName,
* JRHyperlink.class.getName()); }
*
*
* protected static void addColorRangeRules(Digester digester, String
* pattern) { String colorRangePattern = pattern + "/colorRange";
* digester.addObjectCreate(colorRangePattern,
* DesignSVGMapColorRange.class); digester.addRule(colorRangePattern, new
* ColorPropertyRule("color")); digester.addSetNext(colorRangePattern,
* "addColorRange", DesignSVGMapColorRange.class.getName());
*
* addExpressionRules(digester, colorRangePattern + "/minValueExpression",
* "setMinValueExpression", false); addExpressionRules(digester,
* colorRangePattern + "/maxValueExpression", "setMaxValueExpression",
* false); addExpressionRules(digester, colorRangePattern +
* "/labelExpression","setLabelExpression", false); }
*/
}