Project Report: fawkez

Packagesummary org.jcoderz.phoenix.templategen

org.jcoderz.phoenix.templategen.TemplateGeneratorServlet

LineHitsNoteSource
1  /*
2   * $Id: TemplateGeneratorServlet.java 1011 2008-06-16 17:57:36Z amandel $
3   *
4   * Copyright 2006, The jCoderZ.org Project. All rights reserved.
5   *
6   * Redistribution and use in source and binary forms, with or without
7   * modification, are permitted provided that the following conditions are
8   * met:
9   *
10   *    * Redistributions of source code must retain the above copyright
11   *      notice, this list of conditions and the following disclaimer.
12   *    * Redistributions in binary form must reproduce the above
13   *      copyright notice, this list of conditions and the following
14   *      disclaimer in the documentation and/or other materials
15   *      provided with the distribution.
16   *    * Neither the name of the jCoderZ.org Project nor the names of
17   *      its contributors may be used to endorse or promote products
18   *      derived from this software without specific prior written
19   *      permission.
20   *
21   * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND
22   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24   * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS
25   * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
28   * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30   * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31   * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32   */
33  package org.jcoderz.phoenix.templategen;
34  
35  import java.io.File;
36  import java.io.FileFilter;
37  import java.io.IOException;
38  import java.io.PrintWriter;
39  import java.util.HashMap;
40  import java.util.Iterator;
41  import java.util.Map;
42  
43  import javax.servlet.ServletException;
44  import javax.servlet.http.HttpServlet;
45  import javax.servlet.http.HttpServletRequest;
46  import javax.servlet.http.HttpServletResponse;
47  
48  /**
49   * The Template Generator Servlet.
50   * 
51   * @web.servlet name="templategen"
52   * @web.servlet-mapping url-pattern="/templategen"
53   * 
54   * @author Albrecht Messner
55   */
560 public class TemplateGeneratorServlet
57        extends HttpServlet
58  {
59      private static final long serialVersionUID = 1017987995368589070L;
60      private static final String TEMPLATE_DIR = "templates";
61     
62      /** {@inheritDoc} */
63     protected void doPost (
64           HttpServletRequest request,
65           HttpServletResponse response)
66 (1)         throws ServletException, IOException
67     {
680       doService(request, response);
690    }
70  
71     /** {@inheritDoc} */
72     protected void doGet (
73           HttpServletRequest request,
74           HttpServletResponse response)
75 (2)      throws ServletException, IOException
76     {
770       doService(request, response);
780    }
79  
80     /** {@inheritDoc} */
81 (3)   protected void doService (
82           HttpServletRequest request,
83           HttpServletResponse response)
84 (4)         throws ServletException, IOException
85     {
860       final String action = request.getParameter("action");
870       if (action == null)
88        {
89           // give a selection of all registered templates
900          listTemplates(response);
91        }
920(5)(6)      else if (action.equals("showform"))
93        {
94           // show the form for one template
950          showTemplateForm(request, response);
96        }
970(7)(8)      else if (action.equals("parametrize"))
98        {
99           // parametrize the current template
1000          parametrizeTemplate(request, response);
101        }
102        else
103        {
104           // hey! unknown action!
1050          writeError(response,
106                 "Parameter 'action' has unknown value '" + action + "'");
107        }
1080    }
109     
110     private void writeError (HttpServletResponse response, String errorText)
111           throws IOException
112     {
1130       response.setContentType("text/html");
114  
1150(9)      final PrintWriter pw = new PrintWriter(response.getOutputStream());
1160       pw.println("<HTML><HEAD><TITLE>Error</TITLE></HEAD>");
1170       pw.println("<BODY><H1>Error:</H1>");
1180       pw.println(errorText);
1190       pw.println("</BODY></HTML>");
1200       pw.flush();
1210    }
122     
123     private void parametrizeTemplate (
124           HttpServletRequest request,
125 (10)         HttpServletResponse response) throws ServletException, IOException
126     {
1270       final TemplateGenerator templateGen = getTemplateGenerator(request);
1280(11)      final String template = request.getParameter("template");
129  
1300(12)      final PrintWriter pw = new PrintWriter(response.getOutputStream());
1310       pw.println("Parametrizing template " + template);
132  
1330       final Map paramMap = new HashMap();
1340       for (final Iterator it = templateGen.getParameterList().iterator();
1350             it.hasNext(); )
136        {
1370          final Parameter param = (Parameter) it.next();
1380          final String paramValue = request.getParameter(param.getName());
1390          if (paramValue == null || paramValue.length() == 0)
140           {
1410             writeError(response, "ERROR: value for parameter "
142                    + param.getName() + " missing");
1430             return;
144           }
145           else
146           {
1470             paramMap.put(param.getName(), paramValue);
148           }
1490       }
150        
151        try
152        {
1530          final byte[] templateZip = templateGen.parametrizeTemplates(paramMap);
1540          response.setContentType("application/zip");
1550          response.setHeader("Content-Disposition",
156              "attachment; filename=\"" + template + ".zip\"");
1570          response.setContentLength(templateZip.length);
1580          response.getOutputStream().write(templateZip);
1590          response.getOutputStream().flush();
160        }
1610       catch (TemplateGeneratorException e)
162        {
1630(13)         throw new ServletException("Template Generator Error", e);
1640       }
1650    }
166     
167     private void showTemplateForm (
168           HttpServletRequest request,
169 (14)         HttpServletResponse response) throws IOException, ServletException
170     {
171  
1720       final TemplateGenerator templateGen = getTemplateGenerator(request);
1730       final String template = request.getParameter("template");
174  
1750       response.setContentType("text/html");
1760(15)      final PrintWriter pw = new PrintWriter(response.getOutputStream());
1770       pw.println("<HTML><HEAD><TITLE>" + template + " Template Form"
178              + "</TITLE></HEAD>");
1790       pw.println("<BODY>");
1800       pw.println("<H1>Template " + template + "</H1>");
1810       pw.println("<P>" + templateGen.getTemplateDescription() + "</P>");
182        
1830       pw.println("<FORM ACTION='templategen?action=parametrize&template="
184              + template + "' "
185              + "METHOD='POST'>");
1860       pw.println("<table border='0'>");
1870       pw.println("<tr><th>Parameter</th><th>Value</th>"
188              + "<th>Description</th></tr>");
189        
1900       for (final Iterator it = templateGen.getParameterList().iterator();
1910             it.hasNext(); )
192        {
1930          final Parameter param = (Parameter) it.next();
194           
1950          pw.println("<tr>");
1960(16)         pw.println("<td>" + param.getName() + "</td>");
1970          pw.println("<td>");
198           
1990          if (param.isMultiLine())
200           {
2010             pw.print("<textarea name='" + param.getName() + "'");
2020             pw.print(" rows='5' cols='30'>");
2030             if (param.getDefaultValue() != null)
204              {
2050                pw.print(param.getDefaultValue());
206              }
2070             pw.print("</textarea>");
208           }
209           else
210           {
2110             pw.print("<input name='" + param.getName() + "'");
2120             pw.print(" size='30'");
2130             if (param.getDefaultValue() != null)
214              {
2150                pw.print(" value='" + param.getDefaultValue() + "'");
216              }
2170             pw.print(" maxlength='" + param.getMaxLength() + "'>");
218           }
219  
2200          pw.println("</td>");
2210          pw.println("<td>" + param.getDescription() + "</td>");
2220          pw.println("<tr>");
2230       }
2240       pw.println("</table>");
2250       pw.println("<INPUT TYPE='submit' VALUE='Do it'>");
2260       pw.println("</FORM>");
227        
2280       pw.println("</BODY>");
2290       pw.println("</HTML>");
2300       pw.flush();
2310    }
232  
233     private void listTemplates (HttpServletResponse response)
234 (17)         throws IOException, ServletException
235     {
2360       response.setContentType("text/html");
237  
2380       final File templateDir = getTemplateDirectory();
239           
2400       final FileFilter templateFilter = new FileFilter()
2410(18)      {
242           public boolean accept (File file)
243           {
2440             return file.getName().endsWith(".zip");
245           }
246        };
2470       final File[] templates = templateDir.listFiles(templateFilter);
248           
2490(19)      final PrintWriter pw = new PrintWriter(response.getOutputStream());
2500       pw.println("<HTML><HEAD><TITLE>Template List</TITLE></HEAD>");
2510       pw.println("<BODY>");
2520       if (templates != null && templates.length > 0)
253        {
2540          pw.println("<Table width='60%'><tr><th>Template Name</th>"
255                 + "<th>Description</th></tr>");
2560          for (int i = 0; i < templates.length; i++)
257           {
2580             pw.println("<tr>");
2590             final String template = templates[i].getName();
2600             final String baseName
261                    = template.substring(
262                          0, template.length() - ".zip".length());
263                 
2640             pw.print("<td><a href='templategen?action=showform&template="
265                    + baseName + "'>");
2660             pw.print(baseName);
2670             pw.println("</a></td>");
268              
2690             final TemplateZip tz
270                  = new TemplateZip(templates[i].getAbsolutePath());
271              try
272              {
2730                tz.readTemplateFile();
274              }
2750             catch (Exception e)
276              {
2770                throw new ServletException("Failed to read template file "
278                    + templates[i], e);
2790             }
2800             pw.println("<td>");
2810             pw.println(tz.getDescription().getDescription());
2820             pw.println("<td>");
2830             pw.println("</tr>");
284           }
2850          pw.println("</table>");
286        }
287        else
288        {
2890          pw.println("No templates found.");
290        }
2910       pw.println("</BODY></HTML>");
2920       pw.flush();
293  
2940    }
295  
296     private File getTemplateDirectory ()
297     {
2980       final String realPath = getServletContext().getRealPath("/");
2990       final File baseDir = new File(realPath);
3000       final File templateDir = new File(baseDir, TEMPLATE_DIR);
3010(20)(21)      return templateDir;
302     }
303     
304     private TemplateGenerator getTemplateGenerator (HttpServletRequest request)
305           throws ServletException
306     {
3070       final String template = request.getParameter("template");
3080       if (template == null)
309        {
3100(22)         throw new ServletException("Parameter 'template' missing");
311        }
312  
3130       final String templateFileName = template + ".zip";
3140       final File templateFile
315            = new File(getTemplateDirectory(), templateFileName);
316  
3170       if (! templateFile.exists())
318        {
3190          throw new ServletException("Template file " + templateFileName
320                 + " does not exist");
321        }
322  
323        TemplateGenerator templateGen;
324        try
325        {
3260          templateGen = new TemplateGenerator(templateFile.getAbsolutePath());
327        }
3280       catch (Exception e)
329        {
3300(23)         throw new ServletException("Failed to open template file", e);
3310       }
3320       return templateGen;
333     }
334  }
335  
336  
337  
338  
339  
340  
341  
342  
343  
344  
345  
346  
347  
348  
349  
350  
351  
352  
353  
354  
355  
356  
357  

Findings in this File

c (1) 66 : 17 Unable to get class information for ServletException.
c (2) 75 : 14 Unable to get class information for ServletException.
d (3) 81 : 0 @inheritDoc used but doService(HttpServletRequest, HttpServletResponse) does not override or implement any method.
c (4) 84 : 17 Unable to get class information for ServletException.
i (5) 92 : 0 method org.jcoderz.phoenix.templategen.TemplateGeneratorServlet.doService(HttpServletRequest, HttpServletResponse) makes literal string comparisons passing the literal as an argument
c (6) 92 : 16 Position literals first in String comparisons
i (7) 97 : 0 method org.jcoderz.phoenix.templategen.TemplateGeneratorServlet.doService(HttpServletRequest, HttpServletResponse) makes literal string comparisons passing the literal as an argument
c (8) 97 : 16 Position literals first in String comparisons
w (9) 115 : 0 org.jcoderz.phoenix.templategen.TemplateGeneratorServlet.writeError(HttpServletResponse, String) may fail to close stream
c (10) 125 : 47 Unable to get class information for ServletException.
w (11) 128 : 0 HTTP parameter directly written to HTTP header output in org.jcoderz.phoenix.templategen.TemplateGeneratorServlet.parametrizeTemplate(HttpServletRequest, HttpServletResponse)
w (12) 130 : 0 org.jcoderz.phoenix.templategen.TemplateGeneratorServlet.parametrizeTemplate(HttpServletRequest, HttpServletResponse) may fail to close stream
i (13) 163 : 0 method org.jcoderz.phoenix.templategen.TemplateGeneratorServlet.parametrizeTemplate(HttpServletRequest, HttpServletResponse) throws exception with static message string
c (14) 169 : 60 Unable to get class information for ServletException.
w (15) 176 : 0 org.jcoderz.phoenix.templategen.TemplateGeneratorServlet.showTemplateForm(HttpServletRequest, HttpServletResponse) may fail to close stream
i (16) 196 : 21 The String literal "<td>" appears 5 times in this file; the first occurrence is on line 196
c (17) 234 : 30 Unable to get class information for ServletException.
i (18) 241 : 0 The class org.jcoderz.phoenix.templategen.TemplateGeneratorServlet$1 could be refactored into a named _static_ inner class
w (19) 249 : 0 org.jcoderz.phoenix.templategen.TemplateGeneratorServlet.listTemplates(HttpServletResponse) may fail to close stream
w (20) 301 : 0 method org.jcoderz.phoenix.templategen.TemplateGeneratorServlet.getTemplateDirectory() stores return result in local before immediately returning it
c (21) 301 : 7 Consider simply returning the value vs storing it in local variable 'templateDir'
i (22) 310 : 0 method org.jcoderz.phoenix.templategen.TemplateGeneratorServlet.getTemplateGenerator(HttpServletRequest) throws exception with static message string
i (23) 330 : 0 method org.jcoderz.phoenix.templategen.TemplateGeneratorServlet.getTemplateGenerator(HttpServletRequest) throws exception with static message string