File Source: abstractcommentaction.java
/*
P/P * Method: net.sourceforge.pebble.web.action.AbstractCommentAction__static_init
*
* Postconditions:
* init'ed(log)
*/
1 package net.sourceforge.pebble.web.action;
2
3 import java.io.UnsupportedEncodingException;
4 import java.net.URLDecoder;
5 import java.net.URLEncoder;
6
/*
P/P * Method: void net.sourceforge.pebble.web.action.AbstractCommentAction()
*/
7 import javax.servlet.http.Cookie;
8 import javax.servlet.http.HttpServletRequest;
9 import javax.servlet.http.HttpServletResponse;
10
11 import net.sourceforge.pebble.domain.Blog;
12 import net.sourceforge.pebble.domain.BlogEntry;
13 import net.sourceforge.pebble.domain.BlogService;
14 import net.sourceforge.pebble.domain.BlogServiceException;
15 import net.sourceforge.pebble.domain.Comment;
16 import net.sourceforge.pebble.security.PebbleUserDetails;
17 import net.sourceforge.pebble.util.CookieUtils;
18 import net.sourceforge.pebble.util.MailUtils;
19 import net.sourceforge.pebble.util.SecurityUtils;
20 import net.sourceforge.pebble.util.StringUtils;
21 import net.sourceforge.pebble.web.validation.ValidationContext;
22
23 import org.apache.commons.logging.Log;
24 import org.apache.commons.logging.LogFactory;
25
26 /**
27 * Adds a comment to an existing blog entry.
28 *
29 * @author Simon Brown
30 */
31 public abstract class AbstractCommentAction extends Action {
32
33 private static final Log log = LogFactory.getLog(AbstractCommentAction.class);
34
35 protected Comment createComment(HttpServletRequest request, BlogEntry blogEntry) {
/*
P/P * Method: Comment createComment(HttpServletRequest, BlogEntry)
*
* Preconditions:
* blogEntry != null
* request != null
* (soft) net.sourceforge.pebble.PebbleContext__static_init.new PebbleContext(PebbleContext__static_init#1).configuration != null
*
* Presumptions:
* net.sourceforge.pebble.domain.BlogEntry:createComment(...)@43 != null
* net.sourceforge.pebble.domain.BlogEntry:getBlog(...)@54 != null
*
* Postconditions:
* (soft) return_value != null
*
* Test Vectors:
* java.lang.String:equals(...)@51: {1}, {0}
* java.lang.String:length(...)@62: {0}, {1..232-1}
* javax.servlet.http.HttpServletRequest:getParameter(...)@61: Addr_Set{null}, Inverse{null}
* net.sourceforge.pebble.domain.BlogEntry:getComment(...)@64: Addr_Set{null}, Inverse{null}
* user.website: Addr_Set{null}, Inverse{null}
*/
36 String author = StringUtils.transformHTML(request.getParameter("author"));
37 String email = request.getParameter("email");
38 String website = request.getParameter("website");
39 String ipAddress = request.getRemoteAddr();
40 String title = StringUtils.transformHTML(request.getParameter("title"));
41 String body = request.getParameter("commentBody");
42
43 Comment comment = blogEntry.createComment(title, body, author, email, website, ipAddress);
44
45 // if the user is authenticated, overwrite the author information
46 if (SecurityUtils.isUserAuthenticated()) {
47 PebbleUserDetails user = SecurityUtils.getUserDetails();
48 if (user != null) {
49 comment.setAuthor(user.getName());
50 comment.setEmail(user.getEmailAddress());
51 if (user.getWebsite() != null && !user.getWebsite().equals("")) {
52 comment.setWebsite(user.getWebsite());
53 } else {
54 comment.setWebsite(blogEntry.getBlog().getUrl() + "authors/" + user.getUsername() + "/");
55 }
56 comment.setAuthenticated(true);
57 }
58 }
59
60 // are we replying to an existing comment?
61 String parentCommentId = request.getParameter("comment");
62 if (parentCommentId != null && parentCommentId.length() > 0) {
63 long parent = Long.parseLong(parentCommentId);
64 Comment parentComment = blogEntry.getComment(parent);
65 if (parentComment != null) {
66 comment.setParent(parentComment);
67 }
68 }
69
70 return comment;
71 }
72
73 protected Comment createBlankComment(Blog blog, BlogEntry blogEntry, HttpServletRequest request) {
/*
P/P * Method: Comment createBlankComment(Blog, BlogEntry, HttpServletRequest)
*
* Preconditions:
* blogEntry != null
* request != null
* (soft) blog != null
* (soft) net.sourceforge.pebble.PebbleContext__static_init.new PebbleContext(PebbleContext__static_init#1).configuration != null
*
* Presumptions:
* javax.servlet.http.HttpServletRequest:getCookies(...).length@103 <= 232-1
* javax.servlet.http.HttpServletRequest:getCookies(...).length@108 <= 232-1
* javax.servlet.http.HttpServletRequest:getCookies(...).length@94 <= 232-1
* javax.servlet.http.HttpServletRequest:getCookies(...).length@98 <= 232-1
* javax.servlet.http.HttpServletRequest:getCookies(...)[...]@103 != null
* ...
*
* Postconditions:
* (soft) return_value != null
*
* Test Vectors:
* java.lang.String:equals(...)@84: {1}, {0}
* java.lang.String:length(...)@120: {0}, {1..232-1}
* javax.servlet.http.HttpServletRequest:getParameter(...)@119: Addr_Set{null}, Inverse{null}
* net.sourceforge.pebble.domain.BlogEntry:getComment(...)@122: Addr_Set{null}, Inverse{null}
* user.website: Addr_Set{null}, Inverse{null}
*/
74 Comment comment = blogEntry.createComment("", "", "", "", "", request.getRemoteAddr());
75
76 // populate the author, email and website from one of :
77 // - the logged in user details
78 // - the "remember me" cookie
79 if (SecurityUtils.isUserAuthenticated()) {
80 PebbleUserDetails user = SecurityUtils.getUserDetails();
81 if (user != null) {
82 comment.setAuthor(user.getName());
83 comment.setEmail(user.getEmailAddress());
84 if (user.getWebsite() != null && !user.getWebsite().equals("")) {
85 comment.setWebsite(user.getWebsite());
86 } else {
87 comment.setWebsite(blogEntry.getBlog().getUrl() + "authors/" + user.getUsername() + "/");
88 }
89 comment.setAuthenticated(true);
90 }
91 } else {
92 try {
93 // is "remember me" set?
94 Cookie rememberMe = CookieUtils.getCookie(request.getCookies(), "rememberMe");
95 if (rememberMe != null) {
96 // remember me has been checked and we're not already previewing a comment
97 // so create a new comment as this will populate the author/email/website
98 Cookie author = CookieUtils.getCookie(request.getCookies(), "rememberMe.author");
99 if (author != null) {
100 comment.setAuthor(URLDecoder.decode(author.getValue(), blog.getCharacterEncoding()));
101 }
102
103 Cookie email = CookieUtils.getCookie(request.getCookies(), "rememberMe.email");
104 if (email != null) {
105 comment.setEmail(URLDecoder.decode(email.getValue(), blog.getCharacterEncoding()));
106 }
107
108 Cookie website = CookieUtils.getCookie(request.getCookies(), "rememberMe.website");
109 if (website != null) {
110 comment.setWebsite(URLDecoder.decode(website.getValue(), blog.getCharacterEncoding()));
111 }
112 }
113 } catch (UnsupportedEncodingException e) {
114 log.error("Exception encountered", e);
115 }
116 }
117
118 // are we replying to an existing comment?
119 String parentCommentId = request.getParameter("comment");
120 if (parentCommentId != null && parentCommentId.length() > 0) {
121 long parent = Long.parseLong(parentCommentId);
122 Comment parentComment = blogEntry.getComment(parent);
123 if (parentComment != null) {
124 comment.setParent(parentComment);
125 comment.setTitle(parentComment.getTitle());
126 }
127 }
128
129 return comment;
130 }
131
/*
P/P * Method: ValidationContext validateComment(Comment)
*
* Preconditions:
* this.model != null
* this.model.data != null
* (soft) comment != null
*
* Postconditions:
* return_value == &new ValidationContext(validateComment#1)
* new ArrayList(ValidationContext#1) num objects == 1
* new ValidationContext(validateComment#1) num objects == 1
* return_value.errors == &new ArrayList(ValidationContext#1)
*/
132 protected ValidationContext validateComment(Comment comment) {
133 ValidationContext context = new ValidationContext();
134 try {
135 MailUtils.validate(comment.getEmail(), context);
136 } catch (NoClassDefFoundError e) {
137 // most likely: JavaMail is not in classpath
138 // ignore, when we can not send email we must not validate address
139 // this might lead to problems when mail is activated later without this
140 // address being validated... Discussion started on mailing list, Oct-25 2008
141 }
142 getModel().put("validationContext", context);
143 return context;
144 }
145
146 protected void saveComment(HttpServletRequest request, HttpServletResponse response, BlogEntry blogEntry, Comment comment) throws BlogServiceException {
147 Blog blog = blogEntry.getBlog();
148 blogEntry.addComment(comment);
149
150 BlogService service = new BlogService();
151 service.putBlogEntry(blogEntry);
152
153 // remember me functionality
/*
P/P * Method: void saveComment(HttpServletRequest, HttpServletResponse, BlogEntry, Comment)
* saveComment fails for all possible inputs
*/
154 String rememberMe = (String)request.getSession().getAttribute("rememberMe");
155 if (rememberMe != null && rememberMe.equals("true")) {
156 CookieUtils.addCookie(response, "rememberMe", "true", CookieUtils.ONE_MONTH);
157 CookieUtils.addCookie(response, "rememberMe.author", encode(comment.getAuthor(), blog.getCharacterEncoding()), CookieUtils.ONE_MONTH);
158 CookieUtils.addCookie(response, "rememberMe.email", encode(comment.getEmail(), blog.getCharacterEncoding()), CookieUtils.ONE_MONTH);
159 CookieUtils.addCookie(response, "rememberMe.website", encode(comment.getWebsite(), blog.getCharacterEncoding()), CookieUtils.ONE_MONTH);
160 } else {
161 CookieUtils.removeCookie(response, "rememberMe");
162 CookieUtils.removeCookie(response, "rememberMe.author");
163 CookieUtils.removeCookie(response, "rememberMe.email");
164 CookieUtils.removeCookie(response, "rememberMe.website");
165 }
166 }
167
/*
P/P * Method: String encode(String, String)
*
* Presumptions:
* org.apache.commons.logging.LogFactory:getLog(...)@33 != null
*
* Postconditions:
* init'ed(return_value)
*
* Test Vectors:
* s: Inverse{null}, Addr_Set{null}
*/
168 private String encode(String s, String characterEncoding) {
169 if (s == null) {
170 return "";
171 } else {
172 try {
173 return URLEncoder.encode(s, characterEncoding);
174 } catch (UnsupportedEncodingException e) {
175 log.error("Exception encountered", e);
176 return "";
177 }
178 }
179 }
180
181 }
SofCheck Inspector Build Version : 2.22510
| abstractcommentaction.java |
2010-Jun-25 19:40:34 |
| abstractcommentaction.class |
2010-Jul-19 20:23:38 |