Coverage Report - org.melati.template.MultipartTemplateContext
 
Classes in this File Line Coverage Branch Coverage Complexity
MultipartTemplateContext
40%
17/42
100%
2/2
1.5
 
 1  
 /*
 2  
  * $Source$
 3  
  * $Revision$
 4  
  *
 5  
  * Copyright (C) 2000 Myles Chippendale
 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  
  *     Myles Chippendale <mylesc At paneris.org>
 42  
  *     http://paneris.org/
 43  
  *     29 Stanley Road, Oxford, OX4 1QY, UK
 44  
  */
 45  
 
 46  
 
 47  
 package org.melati.template;
 48  
 
 49  
 import java.io.InputStream;
 50  
 import java.io.IOException;
 51  
 import java.util.Hashtable;
 52  
 import java.util.Enumeration;
 53  
 import java.util.Map;
 54  
 
 55  
 import javax.servlet.http.HttpSession;
 56  
 import org.melati.Melati;
 57  
 import org.melati.servlet.MultipartFormField;
 58  
 import org.melati.servlet.MultipartFormDataDecoder;
 59  
 
 60  
 
 61  
 /**
 62  
  * A {@link ServletTemplateContext} which allows access to the filename and
 63  
  * body of any file which is uploaded from a HTML form field.
 64  
  *
 65  
  * (by setting its ENCTYPE to ``multipart/form-data'' and 
 66  
  * setting the field's type to * ``file'').
 67  
  * <p>
 68  
  * You can retrieve the value of any field variable as usual by
 69  
  * using getForm(s).
 70  
  * <p>
 71  
  * Note that you need to pass in a {@link ServletTemplateContext} to the constructor.
 72  
  */
 73  
 public class MultipartTemplateContext implements ServletTemplateContext {
 74  
   ServletTemplateContext peer;
 75  
   Hashtable<String,MultipartFormField> fields;
 76  
   Melati melati;
 77  
 
 78  
   /**
 79  
    * Constructor.
 80  
    * @param melati our Melati
 81  
    * @param context the ServletTemplateContext
 82  
    */
 83  
   public MultipartTemplateContext(Melati melati, ServletTemplateContext context)
 84  7
       throws IOException {
 85  7
     peer = context;
 86  7
     this.melati = melati;
 87  
     try {
 88  7
       InputStream in = melati.getRequest().getInputStream();
 89  7
       MultipartFormDataDecoder decoder=
 90  
         new MultipartFormDataDecoder(
 91  
                              melati,
 92  
                              in,
 93  7
                              melati.getRequest().getContentType(),
 94  7
                              melati.getConfig().getFormDataAdaptorFactory());
 95  7
       fields = decoder.parseData();
 96  
     }
 97  0
     catch (IOException e) {
 98  0
       fields = new Hashtable<String,MultipartFormField>();
 99  0
       throw e;
 100  7
     }
 101  7
   }
 102  
 
 103  
   /**
 104  
    * Constructor.
 105  
    * @param melati our Melati
 106  
    * @param context the ServletTemplateContext
 107  
    * @param maxSize maximum allowed size 
 108  
    */
 109  
   public MultipartTemplateContext(Melati melati, ServletTemplateContext context,
 110  
                                   int maxSize)
 111  0
       throws IOException {
 112  0
     peer = context;
 113  0
     this.melati = melati;
 114  
     try {
 115  0
       InputStream in = melati.getRequest().getInputStream();
 116  0
       MultipartFormDataDecoder decoder=
 117  
         new MultipartFormDataDecoder(melati,
 118  
                              in,
 119  0
                              melati.getRequest().getContentType(),
 120  0
                              melati.getConfig().getFormDataAdaptorFactory(),
 121  
                              maxSize);
 122  0
       fields = decoder.parseData();
 123  
     }
 124  0
     catch (IOException e) {
 125  0
       fields = new Hashtable<String,MultipartFormField>();
 126  0
       throw e;
 127  0
     }
 128  0
   }
 129  
 
 130  
   /**
 131  
    * {@inheritDoc}
 132  
    * @see org.melati.template.TemplateContext#put(java.lang.String, java.lang.Object)
 133  
    */
 134  
   public Object put(String s, Object o) {
 135  29
     return peer.put(s,o);
 136  
   }
 137  
 
 138  
   /**
 139  
    * {@inheritDoc}
 140  
    * @see org.melati.template.ServletTemplateContext#getFormField(java.lang.String)
 141  
    */
 142  
   public String getFormField(String s) {
 143  15
     MultipartFormField field = (MultipartFormField)fields.get(s);
 144  15
     if (field == null)
 145  4
       return peer.getFormField(s);
 146  11
     return field.getDataString(melati.getResponse().getCharacterEncoding());
 147  
   }
 148  
 
 149  
   /**
 150  
    * {@inheritDoc}
 151  
    * @see org.melati.template.ServletTemplateContext#getMultipartFormField(java.lang.String)
 152  
    */
 153  
   public MultipartFormField getMultipartFormField(String s) {
 154  9
     return (MultipartFormField)fields.get(s);
 155  
   }
 156  
 
 157  
   /**
 158  
    * @return an Enumeration of Field names
 159  
    */
 160  
   public Enumeration<String> getFieldNames() {
 161  0
     return fields.keys();
 162  
   }
 163  
 
 164  
   /**
 165  
    * {@inheritDoc}
 166  
    * @see org.melati.template.TemplateContext#get(java.lang.String)
 167  
    */
 168  
   public Object get(String s) {
 169  0
     return peer.get(s);
 170  
   }
 171  
 
 172  
   /**
 173  
    * {@inheritDoc}
 174  
    * @see org.melati.template.ServletTemplateContext#getSession()
 175  
    */
 176  
   public HttpSession getSession() {
 177  0
     return peer.getSession();
 178  
   }
 179  
 
 180  
   /**
 181  
    * {@inheritDoc}
 182  
    * @see org.melati.template.TemplateContext#getContext()
 183  
    */
 184  
   public Object getContext() {
 185  3
     return peer.getContext();
 186  
   }
 187  
 
 188  
   /**
 189  
    * {@inheritDoc}
 190  
    * @see org.melati.template.TemplateContext#setPassbackExceptionHandling()
 191  
    */
 192  
   public void setPassbackExceptionHandling() {
 193  0
     peer.setPassbackExceptionHandling();    
 194  0
   }
 195  
 
 196  
   /**
 197  
    * {@inheritDoc}
 198  
    * @see org.melati.template.TemplateContext#setPropagateExceptionHandling()
 199  
    */
 200  
   public void setPropagateExceptionHandling() {
 201  0
     peer.setPropagateExceptionHandling();    
 202  0
   }
 203  
 
 204  
   @Override
 205  
   public void putAll(Map<String, ?> m) {
 206  0
     peer.putAll(m);
 207  0
   }
 208  
 }
 209  
 
 210  
 
 211  
 
 212  
 
 213  
 
 214