View Javadoc
1   /*    
2    * $Source$    
3    * $Revision$    
4    *    
5    * Copyright (C) 2000 Tim Joyce    
6    *    
7    * Part of Melati (http://melati.org), a framework for the rapid    
8    * development of clean, maintainable web applications.    
9    *    
10   * Melati is free software; Permission is granted to copy, distribute
11   * and/or modify this software under the terms either:
12   *
13   * a) the GNU General Public License as published by the Free Software
14   *    Foundation; either version 2 of the License, or (at your option)
15   *    any later version,
16   *
17   *    or
18   *
19   * b) any version of the Melati Software License, as published
20   *    at http://melati.org
21   *
22   * You should have received a copy of the GNU General Public License and
23   * the Melati Software License along with this program;
24   * if not, write to the Free Software Foundation, Inc.,
25   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the
26   * GNU General Public License and visit http://melati.org to obtain the
27   * Melati Software License.
28   *
29   * Feel free to contact the Developers of Melati (http://melati.org),
30   * if you would like to work out a different arrangement than the options
31   * outlined here.  It is our intention to allow Melati to be used by as
32   * wide an audience as possible.
33   *
34   * This program is distributed in the hope that it will be useful,
35   * but WITHOUT ANY WARRANTY; without even the implied warranty of
36   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
37   * GNU General Public License for more details.
38   *    
39   * Contact details for copyright holder:    
40   *    
41   *     Tim Joyce <timj At paneris.org>    
42   *    
43   */    
44      
45  package org.melati.template.velocity;    
46      
47  import javax.servlet.http.HttpSession;    
48      
49  import org.melati.template.ServletTemplateContext;    
50  import org.melati.template.SimpleForm;
51  import org.melati.util.DelegatedHttpServletRequest;
52  import org.melati.util.MelatiBugMelatiException;
53  import org.melati.servlet.MultipartFormField;    
54  import org.apache.velocity.VelocityContext;    
55      
56  /**    
57   * Implements a template context for Melati with Velocity.
58   * 
59   * The Request and Response are placed in the context 
60   * so that they can be accessed by the Form object. 
61   *     
62   * @author Tim Joyce    
63   */    
64  public class VelocityServletTemplateContext 
65      extends VelocityTemplateContext 
66      implements ServletTemplateContext {    
67      
68   /**    
69    * The HTTP request object context key.    
70    */    
71    public static final String REQUEST = "Request";    
72      
73   /**    
74    * The HTTP response object context key.    
75    */    
76    public static final String RESPONSE = "Response";    
77      
78    /** Mimicking the $Form behaviour of Webmacro. */
79    public static final String FORM = "Form";
80      
81    private SimpleForm form;
82    
83    /**
84     * Constructor.
85     * @param vc context containing RESPONSE and REQUEST
86     */
87    public VelocityServletTemplateContext(VelocityContext vc) {
88      super(vc);
89      form = new SimpleForm((DelegatedHttpServletRequest)velocityContext.get(REQUEST));
90      velocityContext.put(FORM, form);
91    }    
92      
93    /**
94     * {@inheritDoc}
95     * @see org.melati.template.ServletTemplateContext#getFormField(java.lang.String)
96     */
97    public String getFormField(String s) {    
98      return form.get(s);    
99    }    
100     
101   /**
102    * Returns null as this is not a multi part form.
103    * Should perhaps throw an exception.
104    * @see org.melati.template.ServletTemplateContext#getMultipartFormField(java.lang.String)
105    */
106   public MultipartFormField getMultipartFormField(String s) {    
107     throw new MelatiBugMelatiException("Cannot return a multi-part field from a non-multi-part form");
108   }    
109     
110   /**
111    * {@inheritDoc}
112    * @see org.melati.template.ServletTemplateContext#getSession()
113    */
114   public HttpSession getSession() {    
115     return ((DelegatedHttpServletRequest)velocityContext.get(REQUEST)).getSession(true);    
116   }
117     
118 }    
119     
120     
121     
122     
123     
124