File Source: htmlview.java
/*
P/P * Method: net.sourceforge.pebble.web.view.HtmlView__static_init
*
* Postconditions:
* init'ed(log)
*/
1 /*
2 * Copyright (c) 2003-2006, Simon Brown
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * - Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 *
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in
13 * the documentation and/or other materials provided with the
14 * distribution.
15 *
16 * - Neither the name of Pebble nor the names of its contributors may
17 * be used to endorse or promote products derived from this software
18 * without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
32 package net.sourceforge.pebble.web.view;
33
34 import java.io.File;
35 import java.io.IOException;
36
/*
P/P * Method: void net.sourceforge.pebble.web.view.HtmlView()
*/
37 import javax.servlet.RequestDispatcher;
38 import javax.servlet.ServletContext;
39 import javax.servlet.ServletException;
40 import javax.servlet.http.HttpServletRequest;
41 import javax.servlet.http.HttpServletResponse;
42
43 import net.sourceforge.pebble.Constants;
44 import net.sourceforge.pebble.PebbleContext;
45 import net.sourceforge.pebble.domain.AbstractBlog;
46 import net.sourceforge.pebble.domain.Blog;
47 import net.sourceforge.pebble.domain.StaticPage;
48 import net.sourceforge.pebble.util.I18n;
49
50 import org.apache.commons.logging.Log;
51 import org.apache.commons.logging.LogFactory;
52
53 /**
54 * Represents a HTML view component, implemented by a JSP
55 * and prepares the model for display.
56 *
57 * @author Simon Brown
58 */
59 public abstract class HtmlView extends JspView {
60
61 public static final String SYSTEM_THEME = "_pebble";
62 public static final String DEFAULT_THEME = "default";
63
64 private static Log log = LogFactory.getLog(HtmlView.class);
65
66 /**
67 * Gets the title of this view.
68 *
69 * @return the title as a String
70 */
/*
P/P * Method: String getContentType()
*
* Preconditions:
* this.model != null
* this.model.data != null
*
* Presumptions:
* java.util.HashMap:get(...)@63 != null
*
* Postconditions:
* return_value != null
*/
71 public String getContentType() {
72 AbstractBlog blog = (AbstractBlog)getModel().get(Constants.BLOG_KEY);
73 return "text/html; charset=" + blog.getCharacterEncoding();
74 }
75
76 /**
77 * Gets the title of this view.
78 *
79 * @return the title as a String
80 */
81 public abstract String getTitle();
82
/*
P/P * Method: String getLocalizedString(String)
*
* Preconditions:
* this.model != null
* this.model.data != null
*
* Presumptions:
* java.util.HashMap:get(...)@63 != null
*
* Postconditions:
* init'ed(return_value)
*/
83 public String getLocalizedString(String key) {
84 return I18n.getMessage(((AbstractBlog)getModel().get(Constants.BLOG_KEY)).getLocale(), key);
85 }
86
87
88 /**
89 * Gets the name of the theme to use.
90 *
91 * @return the theme name as a String
92 */
/*
P/P * Method: String getTheme()
*
* Preconditions:
* net.sourceforge.pebble.PebbleContext__static_init.new PebbleContext(PebbleContext__static_init#1).configuration != null
* this.model != null
* this.model.data != null
*
* Presumptions:
* java.util.HashMap:get(...)@63 != null
*
* Postconditions:
* init'ed(return_value)
*
* Test Vectors:
* java.lang.String:equals(...)@98: {1}, {0}
* net.sourceforge.pebble.Configuration:isUserThemesEnabled(...)@97: {1}, {0}
* net.sourceforge.pebble.domain.AbstractBlog:getTheme(...)@95: Addr_Set{null}, Inverse{null}
*/
93 protected String getTheme() {
94 AbstractBlog blog = (AbstractBlog)getModel().get(Constants.BLOG_KEY);
95 String theme = blog.getTheme();
96
97 if (!PebbleContext.getInstance().getConfiguration().isUserThemesEnabled()) {
98 if (theme != null && !theme.equals(DEFAULT_THEME) && !theme.equals(SYSTEM_THEME)) {
99 return DEFAULT_THEME;
100 }
101 }
102
103 return theme;
104 }
105
106 protected int getStatus() {
/*
P/P * Method: int getStatus()
*
* Postconditions:
* return_value == 200
*/
107 return HttpServletResponse.SC_OK;
108 }
109
110 /**
111 * Dispatches this view.
112 *
113 * @param request the HttpServletRequest instance
114 * @param response the HttpServletResponse instance
115 * @param context
116 */
117 public void dispatch(HttpServletRequest request, HttpServletResponse response, ServletContext context) throws ServletException {
/*
P/P * Method: void dispatch(HttpServletRequest, HttpServletResponse, ServletContext)
*
* Preconditions:
* context != null
* log != null
* net.sourceforge.pebble.PebbleContext__static_init.new PebbleContext(PebbleContext__static_init#1).configuration != null
* request != null
* response != null
* this.model != null
* this.model.data != null
*
* Presumptions:
* java.util.HashMap:get(...)@63 != null
* javax.servlet.ServletContext:getRequestDispatcher(...)@131 != null
* init'ed(net.sourceforge.pebble.Constants.THEME)
*/
118 String theme = getTheme();
119 request.setAttribute(Constants.THEME, theme);
120 request.setAttribute(Constants.TITLE_KEY, getTitle());
121 log.debug("Content is " + getUri());
122 request.setAttribute("content", getUri());
123 String uri = "/themes/" + theme + "/" + getTemplate() + ".jsp";
124 log.debug("Dispatching to " + uri);
125
126 response.setHeader("Cache-Control","no-cache, no-store");
127 response.setDateHeader("Expires", 0);
128 response.setHeader("Pragma","no-cache");
129
130 try {
131 RequestDispatcher dispatcher = context.getRequestDispatcher(uri);
132 dispatcher.forward(request, response);
133 } catch (IOException ioe) {
134 ioe.printStackTrace();
135 throw new ServletException(ioe);
136 } finally {
137 AbstractBlog blog = (AbstractBlog)getModel().get(Constants.BLOG_KEY);
138 blog.log(request, getStatus());
139 }
140 }
141
/*
P/P * Method: String getTemplate()
*
* Preconditions:
* this.model != null
* this.model.data != null
*
* Presumptions:
* java.util.HashMap:get(...)@63 != null
*
* Postconditions:
* init'ed(return_value)
*
* Test Vectors:
* java.io.File:canRead(...)@152: {0}, {1}
* java.util.HashMap:containsKey(...)@82: {1}, {0}
*/
142 private String getTemplate() {
143 if (!(getModel().get(Constants.BLOG_KEY) instanceof Blog)) {
144 return "template";
145 }
146 if (!getModel().contains(Constants.STATIC_PAGE_KEY)) {
147 return "template";
148 }
149 StaticPage staticPage = (StaticPage) getModel().get(Constants.STATIC_PAGE_KEY);
150 Blog blog = (Blog) getModel().get(Constants.BLOG_KEY);
151 String templateFile = blog.getThemeDirectory() + "/" + staticPage.getTemplate() + ".jsp";
152 if (new File(templateFile).canRead()) {
153 return staticPage.getTemplate();
154 }
155 return "template";
156 }
157 }
SofCheck Inspector Build Version : 2.22510
| htmlview.java |
2010-Jun-25 19:40:32 |
| htmlview.class |
2010-Jul-19 20:23:38 |