Package net.sf.jasperreports.engine.xml

Source Code of net.sf.jasperreports.engine.xml.JRXmlTemplateDigesterFactory

/*
* JasperReports - Free Java Reporting Library.
* Copyright (C) 2001 - 2009 Jaspersoft Corporation. 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 <http://www.gnu.org/licenses/>.
*/
package net.sf.jasperreports.engine.xml;

import javax.xml.parsers.ParserConfigurationException;

import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JRSimpleTemplate;
import net.sf.jasperreports.engine.JRStyle;
import net.sf.jasperreports.engine.JRTemplate;
import net.sf.jasperreports.engine.util.JRProperties;

import org.apache.commons.digester.Digester;
import org.apache.commons.digester.RuleSet;
import org.apache.commons.digester.RuleSetBase;
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;


/**
* Factory for template XML digesters.
*
* @author Lucian Chirita (lucianc@users.sourceforge.net)
* @version $Id: JRXmlTemplateDigesterFactory.java 4272 2011-04-08 09:00:01Z teodord $
* @see JRTemplate
*/
public class JRXmlTemplateDigesterFactory implements ErrorHandler
{

  protected static final String PATTERN_ROOT = JRXmlConstants.TEMPLATE_ELEMENT_ROOT;
  protected static final String PATTERN_INCLUDED_TEMPLATE = PATTERN_ROOT + "/" + JRXmlConstants.TEMPLATE_ELEMENT_INCLUDED_TEMPLATE;
  protected static final String PATTERN_STYLE = PATTERN_ROOT + "/" + JRXmlConstants.ELEMENT_style;
  protected static final String PATTERN_STYLE_PEN = PATTERN_STYLE + "/" + JRXmlConstants.ELEMENT_pen;
  protected static final String PATTERN_BOX = PATTERN_STYLE + "/" + JRXmlConstants.ELEMENT_box;
  protected static final String PATTERN_BOX_PEN = PATTERN_BOX + "/" + JRXmlConstants.ELEMENT_pen;
  protected static final String PATTERN_BOX_TOP_PEN = PATTERN_BOX + "/" + JRXmlConstants.ELEMENT_topPen;
  protected static final String PATTERN_BOX_LEFT_PEN = PATTERN_BOX + "/" + JRXmlConstants.ELEMENT_leftPen;
  protected static final String PATTERN_BOX_BOTTOM_PEN = PATTERN_BOX + "/" + JRXmlConstants.ELEMENT_bottomPen;
  protected static final String PATTERN_BOX_RIGHT_PEN = PATTERN_BOX + "/" + JRXmlConstants.ELEMENT_rightPen;
  protected static final String PATTERN_PARAGRAPH = PATTERN_STYLE + "/" + JRXmlConstants.ELEMENT_paragraph;
 
  private static final JRXmlTemplateDigesterFactory instance = new JRXmlTemplateDigesterFactory();
 
  private final RuleSet rules;

  protected JRXmlTemplateDigesterFactory()
  {
    rules = readRuleSet();
  }

  /**
   * Returns the singleton instance.
   *
   * @return the singleton instance
   */
  public static JRXmlTemplateDigesterFactory instance()
  {
    return instance;
  }

  protected RuleSet readRuleSet()
  {
    return new RuleSetBase()
    {
      public void addRuleInstances(Digester digester)
      {
        digester.addObjectCreate(PATTERN_ROOT, JRSimpleTemplate.class);
       
        digester.addCallMethod(PATTERN_INCLUDED_TEMPLATE, "addIncludedTemplate", 0);
       
        digester.addFactoryCreate(PATTERN_STYLE, JRTemplateStyleFactory.class);
        digester.addSetNext(PATTERN_STYLE, "addStyle", JRStyle.class.getName());
       
        digester.addFactoryCreate(PATTERN_STYLE_PEN, JRPenFactory.Style.class.getName());
       
        digester.addFactoryCreate(PATTERN_BOX, JRBoxFactory.class.getName());
        digester.addFactoryCreate(PATTERN_BOX_PEN, JRPenFactory.Box.class.getName());
        digester.addFactoryCreate(PATTERN_BOX_TOP_PEN, JRPenFactory.Top.class.getName());
        digester.addFactoryCreate(PATTERN_BOX_LEFT_PEN, JRPenFactory.Left.class.getName());
        digester.addFactoryCreate(PATTERN_BOX_BOTTOM_PEN, JRPenFactory.Bottom.class.getName());
        digester.addFactoryCreate(PATTERN_BOX_RIGHT_PEN, JRPenFactory.Right.class.getName());

        digester.addFactoryCreate(PATTERN_PARAGRAPH, JRParagraphFactory.class.getName());
      }
    };
  }
 
  /**
   * Creates and configures a digester for template XML.
   *
   * @return a template XML digester
   */
  public JRXmlDigester createDigester()
  {
    JRXmlDigester digester = new JRXmlDigester();
    try
    {
      configureDigester(digester);
    }
    catch (SAXException e)
    {
      throw new JRRuntimeException(e);
    }
    catch (ParserConfigurationException e)
    {
      throw new JRRuntimeException(e);
    }
    return digester;
  }

  protected void configureDigester(Digester digester) throws SAXException, ParserConfigurationException
  {
    boolean validating = JRProperties.getBooleanProperty(JRProperties.COMPILER_XML_VALIDATION);
   
    digester.setErrorHandler(this);
    digester.setValidating(validating);
    digester.setFeature("http://xml.org/sax/features/validation", validating);

    digester.addRuleSet(rules);
  }
 
  public void error(SAXParseException exception) throws SAXException
  {
    throw exception;
  }

  public void fatalError(SAXParseException exception) throws SAXException
  {
    throw exception;
  }

  public void warning(SAXParseException exception) throws SAXException
  {
    throw exception;
  }
 
}
TOP

Related Classes of net.sf.jasperreports.engine.xml.JRXmlTemplateDigesterFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.