You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by ge...@apache.org on 2001/02/12 04:11:25 UTC

cvs commit: jakarta-velocity/examples/context_example DBContext.java DBContextTest.java README.txt TreeMapContext.java dbcontexttest.sh dbtest.vm

geirm       01/02/11 19:11:25

  Added:       examples/context_example DBContext.java DBContextTest.java
                        README.txt TreeMapContext.java dbcontexttest.sh
                        dbtest.vm
  Log:
  Context example code and test program.
  
  - DBContext : DB backed context - silly demo example.
  - TreeMapContext : TreeMap backed context - a little more serious, but
    for demo only
  
  Revision  Changes    Path
  1.1                  jakarta-velocity/examples/context_example/DBContext.java
  
  Index: DBContext.java
  ===================================================================
  
  import java.sql.*;
  import java.io.Serializable;
  import java.io.*;
  
  import org.apache.velocity.context.AbstractContext;
  import org.apache.velocity.context.Context;
  
  /**
   *   Example context impl that uses a database to store stuff :)
   *
   *   yes, this is silly
   *
   *   expects a mysql db test with table 
   * 
   *  CREATE TABLE contextstore (
   *    k varchar(100),
   *    val blob
   *  );
   *
   *  very fragile, crappy code.... just a demo!
   *
   * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
   * @version $Id: DBContext.java,v 1.1 2001/02/12 03:11:25 geirm Exp $
   */
  
  public class DBContext extends AbstractContext
  {
      Connection conn = null;
  
      public DBContext()
      {
          super();
          setup();
      }
  
      public DBContext( Context inner )
      {
          super( inner );
          setup();
      }
  
      public Object internalGet( String key )
      {
          try 
          {
              String data = null;
  
              String sql = "SELECT k, val FROM contextstore WHERE k ='"+key+"'";
              
              Statement s = conn.createStatement();
  
              ResultSet rs = s.executeQuery( sql );
  
              if(rs.next())
                 data = rs.getString("val");
              
              rs.close();
              s.close();
              
              ObjectInputStream in = new ObjectInputStream(  new ByteArrayInputStream( data.getBytes() ));
  
              Object o =  in.readObject();
  
              in.close();
  
              return o;
          }        
          catch(Exception e)
          {
              System.out.println("internalGet() : " + e );
          }
  
          return null;
      }
  
      public Object internalPut( String key, Object value )
      {
  
          try 
          {    
              ByteArrayOutputStream baos = new ByteArrayOutputStream();
              ObjectOutputStream out = new ObjectOutputStream( baos );
              
              out.writeObject( value );
              String data = baos.toString();
  
              out.close();
              baos.close();
            
              Statement s = conn.createStatement();
  
              s.executeUpdate( "DELETE FROM contextstore WHERE k = '" + key + "'" );
              s.executeUpdate( "INSERT INTO contextstore (k,val) values ('"+key+"','" + data + "')" );
  
              s.close();            
          }        
          catch(Exception e)
          {
              System.out.println("internalGet() : " + e );
          }
  
          return null;
      }
  
      public  boolean internalContainsKey(Object key)
      {
          return false;
      }
  
      public  Object[] internalGetKeys()
      {
          return null;
      }
  
      public  Object internalRemove(Object key)
      {
          return null;
      }
  
  
      private void setup()
      {
          try
          {
              Class.forName("org.gjt.mm.mysql.Driver").newInstance();
              conn = DriverManager.getConnection("jdbc:mysql://localhost/test?user=root");
          }
          catch (Exception e) 
          {
              System. out.println(e);
          }
        
          return;
      }
  }
  
  
  
  
  1.1                  jakarta-velocity/examples/context_example/DBContextTest.java
  
  Index: DBContextTest.java
  ===================================================================
  
  import java.io.BufferedWriter;
  import java.io.OutputStreamWriter;
  import java.io.Writer;
  
  import java.util.Hashtable;
  import java.util.Vector;
  import java.util.Properties;
  
  import org.apache.velocity.Template;
  
  import org.apache.velocity.runtime.Runtime;
  
  /**
   *  the ultimate in silliness...
   *
   *  tests the DBContext example by putting a string and a hashtable
   *  into the context and then rendering a simple template with it.
   *
   * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
   * @version $Id: DBContextTest.java,v 1.1 2001/02/12 03:11:25 geirm Exp $
   */
  
  public class DBContextTest
  {
      public DBContextTest(String templateFile)
      {
          try
          {
              Runtime.init( new Properties() );
   
              Template template = Runtime.getTemplate(templateFile);
  
              DBContext dbc = new DBContext();
  
              Hashtable h = new Hashtable();
              h.put("Bar", "this is from a hashtable!");
         
              dbc.put( "string", "Hello!");
              dbc.put( "hashtable", h );
              
              Writer writer = new BufferedWriter(new OutputStreamWriter(System.out));
         
              template.merge(dbc, writer);
  
              writer.flush();
              writer.close();
          }
          catch( Exception e )
          {
              Runtime.error(e);
          }
      }
  
      public static void main(String[] args)
      {
          DBContextTest t;
          t = new DBContextTest(args[0]);
      }
  }
  
  
  
  1.1                  jakarta-velocity/examples/context_example/README.txt
  
  Index: README.txt
  ===================================================================
  Welcome to Velocity!
  
  As always, the if you have any questions :
  
  1) Make sure you followed any directions :)  (did you build everything?)
  2) Review documentation included in this package, or online at
        http://jakarta.apache.org/velocity
  3) Ask on the velocity-user list.  This is a great source of support information.
     To join, read http://jakarta.apache.org/site/mail.html and then follow the 
     link at the bottom to join the lists.
  
  
  context_example
  --------------
  This is a demonstration of 2 different context implementations :
   - a context implementation that uses a database as the storage.
     Use the DBContextTest program to test.  See the DBContextTest.java file for the 
     db table info.  Unsupported demonstration code.  You may need to futz with 
     it to get it to work in your environment.  To run, use the dbcontexttest.sh 
     script.
   - a context implementation that uses a TreeMap for storage.  Very simple.
  
  
  Thanks for using Velocity!
  
  - the Velocity team
  
  
  
  
  1.1                  jakarta-velocity/examples/context_example/TreeMapContext.java
  
  Index: TreeMapContext.java
  ===================================================================
  
  /*
   * 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.TreeMap;
  import java.io.Serializable;
  import org.apache.velocity.context.AbstractContext;
  import org.apache.velocity.context.Context;
  
  /**
   *   Example context impl that uses a TreeMap
   *
   *   Not much point other than to show how easy it is.
   *
   *   This is unsupported, example code.
   *
   * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
   * @version $Id: TreeMapContext.java,v 1.1 2001/02/12 03:11:25 geirm Exp $
   */
  
  public class TreeMapContext extends AbstractContext
  {
      private TreeMap context = new TreeMap();
  
      public TreeMapContext()
      {
          super();
      }
  
      public TreeMapContext( Context inner )
      {
          super( inner );
      }
  
      public Object internalGet( String key )
      {
          return context.get( key );
      }        
  
      public Object internalPut( String key, Object value )
      {
          return context.put( key, value );
      }
  
      public  boolean internalContainsKey(Object key)
      {
          return context.containsKey( key );
      }
  
      public  Object[] internalGetKeys()
      {
          return context.keySet().toArray();
      }
  
      public  Object internalRemove(Object key)
      {
          return context.remove( key );
      }
  }
  
  
  
  
  1.1                  jakarta-velocity/examples/context_example/dbcontexttest.sh
  
  Index: dbcontexttest.sh
  ===================================================================
  echo "DBContextTest : please ensure MySQL is set up and jdbc drivers are in classpath. See DBContextTest.java for clues"
  echo "This is an unsupported demo."
  
  java -cp .:../bin/velocity-0.71.jar:$CLASSPATH DBContextTest dbtest.vm
  
  
  
  
  1.1                  jakarta-velocity/examples/context_example/dbtest.vm
  
  Index: dbtest.vm
  ===================================================================
  $string
  $hashtable.Bar