View Javadoc
1   /*    
2    * $Source$    
3    * $Revision$    
4    *    
5    * Copyright (C) 2012 Tim Pizey    
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 Pizey <timp At paneris.org>    
42   *    
43   */    
44      
45  package org.melati.template.freemarker;    
46      
47  import java.util.Map;
48  
49  import javax.servlet.http.HttpServletRequest;
50  import javax.servlet.http.HttpSession;    
51      
52  import org.melati.template.ServletTemplateContext;    
53  import org.melati.template.SimpleForm;
54  import org.melati.util.DelegatedHttpServletRequest;
55  import org.melati.util.MelatiBugMelatiException;
56  import org.melati.servlet.MultipartFormField;    
57      
58  /**    
59   * Implements a template context for Melati with Freemarker.
60   * 
61   * The Request and Response are placed in the context 
62   * so that they can be accessed by the Form object. 
63   *     
64   * @author Tim Pizey    
65   */    
66  public class FreemarkerServletTemplateContext 
67      extends FreemarkerTemplateContext 
68      implements ServletTemplateContext {    
69      
70   /**    
71    * The HTTP request object context key.    
72    */    
73    public static final String REQUEST = "Request";    
74      
75   /**    
76    * The HTTP response object context key.    
77    */    
78    public static final String RESPONSE = "Response";    
79      
80    /** Mimicking the $Form behaviour of Webmacro. */
81    public static final String FORM = "Form";
82      
83    private SimpleForm form;
84    
85    /**
86     * Constructor.
87     * @param c context containing RESPONSE and REQUEST
88     */
89    public FreemarkerServletTemplateContext(Map<String, Object>  c) {
90      super(c);
91      form = new SimpleForm((HttpServletRequest)context.get(REQUEST));
92      context.put(FORM, form);
93    }    
94      
95    /**
96     * {@inheritDoc}
97     * @see org.melati.template.ServletTemplateContext#getFormField(java.lang.String)
98     */
99    public String getFormField(String s) {    
100     return form.get(s);    
101   }    
102     
103   /**
104    * Returns null as this is not a multi part form.
105    * Should perhaps throw an exception.
106    * @see org.melati.template.ServletTemplateContext#getMultipartFormField(java.lang.String)
107    */
108   public MultipartFormField getMultipartFormField(String s) {    
109     throw new MelatiBugMelatiException("Cannot return a multi-part field from a non-multi-part form");
110   }    
111     
112   /**
113    * {@inheritDoc}
114    * @see org.melati.template.ServletTemplateContext#getSession()
115    */
116   public HttpSession getSession() {    
117     return ((DelegatedHttpServletRequest)context.get(REQUEST)).getSession(true);    
118   }
119 
120 
121   @Override
122   public void setPassbackExceptionHandling() {
123     // TODO Auto-generated method stub
124 
125   }
126 
127   @Override
128   public void setPropagateExceptionHandling() {
129     // TODO Auto-generated method stub
130 
131   }
132 
133 }