You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by jv...@locus.apache.org on 2000/08/28 01:32:55 UTC

cvs commit: jakarta-velocity/src/java/org/apache/velocity TemplateDump.java TestDump.java

jvanzyl     00/08/27 16:32:55

  Added:       src/java/org/apache/velocity TemplateDump.java TestDump.java
  Log:
  - added classes for generation visual representation of the AST
    produced by the Velocity parsing process.
  
  Revision  Changes    Path
  1.1                  jakarta-velocity/src/java/org/apache/velocity/TemplateDump.java
  
  Index: TemplateDump.java
  ===================================================================
  package org.apache.velocity;
  
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Velocity", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  import org.apache.velocity.parser.Parser;
  import org.apache.velocity.parser.SimpleNode;
  import org.apache.velocity.visitor.ProcessVisitor;
  import org.apache.velocity.visitor.DumpVisitor;
  import org.apache.velocity.injector.*;
  
  /**
   * This class uses the DumpVisitor to produce a
   * visual representation of the AST produced by
   * parsing a template. This class is useful when
   * debugging or writing documention.
   *
   * TemplateDump template = new TemplateDump("test.wm");
   * Context context = new Context();
   * 
   * context.put("foo", "bar");
   * context.put("customer", new Customer());
   *
   * template.setContext(context);
   * template.parse();
   *
   * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
   * @version $Id: TemplateDump.java,v 1.1 2000/08/27 23:32:55 jvanzyl Exp $
   */
  public class TemplateDump
  {
      /** Name of the template file */
      protected String template;
      /** Template parser */
      protected Parser parser;
      /** The context against which the template is parsed */
      protected Context context;
      /** An array of injectors that will be used to inject
        * content into a preparsed template.
        */
      protected Injector[] injectors;
      /** The root of the AST */
      SimpleNode root;
      
      protected DumpVisitor visitor;
      
      public TemplateDump(String template)
      {
          this.template = template;
      }
  
      public TemplateDump(String template, Context context)
      {
          this.template = template;
          setContext(context);
      }
      
      public Context getContext()
      {
          return context;
      }
      
      public void setContext(Context context)
      {
          this.context = context;
      }
  
      public void preParse()
      {
          try
          {
              parser = new Parser(template);
              parser.parse();
              visitor = new DumpVisitor();
              root = parser.getRoot();
          }            
          catch(Exception e)
          {
              System.out.println(e);
              e.printStackTrace();
          }
      
      }
  
      public void parse()
      {
          //visitor.reset();
          visitor.setContext(context);
          root.jjtAccept(visitor, null);
          System.out.println(visitor.getDocument());
      }        
  }
  
  
  
  1.1                  jakarta-velocity/src/java/org/apache/velocity/TestDump.java
  
  Index: TestDump.java
  ===================================================================
  package org.apache.velocity;
  
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Velocity", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  import java.util.ArrayList;
  import org.apache.velocity.runtime.*;
  
  /**
   * This class is a wrapper around the TemplateDump class which
   * is used to produce a visual representation of the AST
   * produced by the Velocity parsing process.
   *
   * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
   * @version $Id: TestDump.java,v 1.1 2000/08/27 23:32:55 jvanzyl Exp $
   */
  public class TestDump
  {
      public TestDump(String templateFile)
      {
          TemplateDump template = new TemplateDump(templateFile);
          Context context = new Context();
          
          TestProvider provider = new TestProvider();
          context.put("provider", provider);
          context.put("name", "jason");
          context.put("providers", provider.getCustomers2());
          context.put("provider2", new TestProvider2());        
          
          ArrayList al = provider.getCustomers();
          
          context.put("list", al);
          
          template.preParse();
          template.setContext(context);
          template.parse();
          
          // Comment out below to test the FileLoader.
          // Make sure you set Configuration.setPropertiesFile()
          // to the location of the veclocity.properties file.
  
          //   try
          //   {
          //      Configuration.setPropertiesFile(" SET THIS ");
          //      TemplateLoader loader = TemplateFactory.getLoader();
          //      Template t = loader.getTemplate("loadertest.wm");
          //      Context ctx = new Context();
          //      ctx.put("TESTLOADER", "WHAT!");
          //      t.preParse();
          //      t.setContext( ctx );
          //      t.parse();
          //   }
          //   catch( Exception e1 )
          //   {
          //      System.out.println("Problemo - " + e1);
          //   }
      }
  
      public static void main(String[] args)
      {
          TestDump t = new TestDump(args[0]);
      }
  }