Coverage Report - org.melati.template.velocity.WebMacroClasspathResourceLoader
 
Classes in this File Line Coverage Branch Coverage Complexity
WebMacroClasspathResourceLoader
14%
4/28
17%
2/12
9
 
 1  
 /*
 2  
  * $Source: /usr/cvsroot/melati/melati/src/main/java/org/melati/template/velocity/WebMacroClasspathResourceLoader.java,v $
 3  
  * $Revision: 1.11 $
 4  
  *
 5  
  * Copyright (C) 2006 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  
  *     http://paneris.org/~timp
 43  
  */
 44  
 package org.melati.template.velocity;
 45  
 
 46  
 import java.io.File;
 47  
 import java.io.FileOutputStream;
 48  
 import java.io.IOException;
 49  
 import java.io.InputStream;
 50  
 import java.io.PrintStream;
 51  
 
 52  
 import org.apache.velocity.exception.ResourceNotFoundException;
 53  
 import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
 54  
 
 55  
 /**
 56  
  * Loads templates from the classpath, mungs them if they are WM 
 57  
  * templates.
 58  
  * 
 59  
  * 
 60  
  * Note that this does not allow modern WebMacro syntax with
 61  
  * optionional #begin in #foreach.
 62  
  *
 63  
  * @author Tim Pizey based on work by Jason van Zyl and Tim Joyce.
 64  
  */
 65  1
 public class WebMacroClasspathResourceLoader 
 66  
     extends ClasspathResourceLoader {
 67  
   
 68  
   /**
 69  
    * Get an InputStream so that the Runtime can build a
 70  
    * template with it, munge it if it is a WM template.
 71  
    *
 72  
    * @param templateName name of template to get
 73  
    * @return InputStream containing the template
 74  
    * @throws ResourceNotFoundException if template not found
 75  
    *         in the file template path.
 76  
    * @see org.apache.velocity.runtime.resource.loader.ResourceLoader
 77  
    */
 78  
   public InputStream getResourceStream(String templateName)
 79  
       throws ResourceNotFoundException {
 80  182
     if (templateName.endsWith(".wm")) {
 81  77
       InputStream converted = WebMacroConverter.convert(super.getResourceStream(templateName));
 82  
       
 83  
       try {
 84  0
         String wmName = "/dist/melati/melati/src/main/java/" + templateName;
 85  0
         File wmFile = new File(wmName);
 86  
         String vmName;
 87  0
         if (wmFile.exists()) {
 88  0
           vmName = "/dist/melati/melati/src/main/java/" + 
 89  
            (templateName.endsWith(".wm")?
 90  
                 templateName.substring(0,templateName.length() -3) + ".vm" :
 91  
                   templateName);
 92  
         } else { 
 93  0
           wmName = "/dist/melati/melati/src/test/java/" + templateName;
 94  0
           wmFile = new File(wmName);
 95  0
           if (wmFile.exists()) {
 96  0
             vmName = "/dist/melati/melati/src/test/java/" + 
 97  
              (templateName.endsWith(".wm")?
 98  
                   templateName.substring(0,templateName.length() -3) + ".vm" :
 99  
                     templateName);
 100  
           } else 
 101  0
             throw new RuntimeException("Cannot find file " + wmName);
 102  
         }
 103  0
         File convertedFile = new File(vmName).getCanonicalFile();
 104  0
         System.err.println(vmName);
 105  0
         convertedFile.createNewFile();
 106  0
         PrintStream ps = new PrintStream(new FileOutputStream(convertedFile));
 107  0
         int nextChar = converted.read();
 108  0
         while (nextChar > 0) {
 109  0
           ps.write((char)nextChar);
 110  0
           nextChar = converted.read();
 111  
         }
 112  0
         converted.reset();
 113  0
         ps.close();
 114  0
       } catch (IOException e) {
 115  0
         e.printStackTrace();
 116  0
         throw new RuntimeException(e);
 117  0
       }
 118  0
       return converted;
 119  
     } else
 120  105
       return super.getResourceStream(templateName);
 121  
   }
 122  
 
 123  
 }