Package modTransf.rules.xml

Source Code of modTransf.rules.xml.XmlRuleReader$TopNode

//Source file: H:\\TEMP\\generated\\ispuml\\mdaTransformation\\rules\\xml\\XmlRuleSetsInitializer.java

package modTransf.rules.xml;

import java.io.InputStream;
import java.io.FileNotFoundException;
import org.apache.commons.digester.Digester;

import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import java.net.URL;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import modTransf.engine.EngineException;
import modTransf.engine.Transformation;
import java.io.File;
import java.io.InputStreamReader;
import java.io.FileInputStream;


/**
* A reader to read xml rule files.
*/
public class XmlRuleReader
{

  /**
   * Log for rules.
   * This log is used during rules development.
   * It logs rules processing.
   */
  protected static Log log = LogFactory.getLog("modTransf.rules.xml.XmlReaderLog");

  protected boolean validateParsing = true;

  protected String registeredUri[]={
    "-//MDA Transformation XML Rules 3.0//EN",
    "/modTransf/rules/xml/resources/modtransf-rules_3_0.dtd",
    "-//Model Transformation XML Rules 3.0//EN",
    "/modTransf/rules/xml/resources/modtransf-rules_3_0.dtd",
  };


  /** The initialized instance of digester */
  protected Digester digester;

   /**
    * Constructor.
    */
   public XmlRuleReader()
   {

  }

  /**
   * Load the rules
   * @param engine
   * @param engineContext
   */
  protected void initializeDigester( )
    throws FileNotFoundException, EngineException
  {
    if( this.digester != null )
      return;

    // initialize the digester
  Digester digester = new Digester();
  digester.setUseContextClassLoader(true);

  //digester.setSchema( registeredUri[1] );
  // Register local uri
  registerLocalUri( digester, registeredUri);

    // set validation
  log.info("Set rule validation to '" + validateParsing  + "'" );
  digester.setValidating(validateParsing);

  addDigesterRuleSet(digester);

  this.digester = digester;
  }

  /**
   * Add parsing rules to digester.
   * This method can be overloaded by subclasses to add or modify the parsing
   * rules.
   * @param digester
   */
  protected void addDigesterRuleSet( Digester digester )
  {
  digester.addRuleSet(new XmlDigesterRules());
  }

  /**
   * Register URI known locally by the digester.
   *
   * @param registeredUri String[] Array of {uri, local dtd}*
   */
  protected void registerLocalUri( Digester digester, String registeredUri[])
  {
    // Register local schema and DTD
  for(int i=0;i<registeredUri.length; i+=2 )
    {
      URL url = this.getClass().getResource(registeredUri[i+1]);
      if (url != null)
          {
          digester.register(registeredUri[i], url.toString());
          }
         else
          {
          log.warn("WARNING: Can't get URI for '" + registeredUri[i+1] + "'" );
          }
    } // end loop
  }

  /**
   *   Read Transformation from the specified files
   */
  public Transformation read( String filename )
  throws FileNotFoundException, EngineException
  {
    initializeDigester();

    InputStream input = this.getClass().getResourceAsStream(filename);
    if(input==null)
      input = new FileInputStream( new File(filename) );

    if(input==null)
      throw new FileNotFoundException( "rule file '" + filename + "' not found.");

    try
      {
      return (Transformation)digester.parse(input);
      }
     catch(Exception ex)
      {
      throw new EngineException( "Error while parsing file '" + filename + "'." , ex );
      }
  }

  /**
   *   Read Transformation from the specified files
   */
  public Transformation read( InputStream input )
  throws FileNotFoundException, EngineException
  {
    initializeDigester();
    try
      {
      return (Transformation)digester.parse(input);
      }
     catch(Exception ex)
      {
      throw new EngineException( "Error while parsing input." , ex );
      }
  }


  /**
   * Nested class.
   * <p>Titre : ModTransf V3</p>
   * <p>Description : </p>
   * <p>Copyright : Copyright (c) 2005</p>
   * <p>Soci�t� : </p>
   * @author Cedric Dumoulin
   * @version 3.0
   */
  protected class TopNode {
    Transformation transformation;

    public void setTransformation( Transformation transf )
    {
      this.transformation = transf;
    }

    public Transformation setTransformation(  )
    {
      return this.transformation;
    }

  }
}
TOP

Related Classes of modTransf.rules.xml.XmlRuleReader$TopNode

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.